SER2440.H
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:9k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. /*++
  2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  5. PARTICULAR PURPOSE.
  6. Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.
  7. Module Name:  
  8.    SER_PDD.h
  9.    
  10. Abstract:  
  11.    Holds definitions for sample 16550  serial interface.
  12.    
  13. Notes: 
  14. --*/
  15. #ifndef __SER_PDD_H__   
  16. #define __SER_PDD_H__
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. // TODO - Define PAGE_CONTAINING_UART
  21. #define PAGE_CONTAINING_UART   XXXXX
  22. /*
  23.  * @doc HWINTERNAL
  24.  * @struct SER_INFO | Private structure.
  25.  */
  26. /* 
  27.  * S2400 UART1 register values
  28.  */
  29. // Line Status Register    
  30. #define  COM2440_LSR_OE     0x1
  31. #define  COM2440_LSR_PE     0x2
  32. #define  COM2440_LSR_FE     0x4
  33. #define  COM2440_LSR_BI     0x8   //Break Detect
  34. // dummy value 
  35. #define  COM2440_LSR_THRE   0xe
  36. #define  COM2440_LSR_DR     0xf
  37. // Fifo Status Register
  38. // following two cts values are read from modem control register.
  39. #define  COM2440_MSR_CTS    0x1
  40. #define  COM2440_MSR_DCTS   0x4
  41. // following two cts values are read from modem GIO port.
  42. #define  COM2440_MSR_DSR    0x2
  43. #define  COM2440_MSR_DDSR    0x8
  44. typedef struct {
  45. PS2440_UART_REG s2440SerReg;
  46. volatile unsigned char *pUFTXH;  // Tx holding register for byte access.
  47. volatile unsigned char *pUFRXH;  // Rx holding register for byte access.
  48. volatile unsigned int *UART_INTMASK;
  49. volatile unsigned int *UART_INTSUBMASK;
  50. volatile unsigned int *UART_INTPND;
  51. volatile unsigned int *UART_INTSRCPND;
  52. volatile unsigned int *UART_INTSUBSRCPND;
  53. //volatile unsigned int *UART_INTOFFSET;
  54. //ULONG nTxINT;
  55. //ULONG nRxINT;
  56. ULONG bINT;
  57. ULONG bTxINT;
  58. ULONG bRxINT;
  59. ULONG bErrINT;
  60. BOOL fSW_EnTxINT;   // S/W flag of Enable Tx interrupt.
  61. BOOL RxDiscard;   // S/W flag of Enable Tx interrupt.
  62. BOOL UseIrDA;        // @field Boolean, are we running in IR mode?
  63. ULONG MSR;
  64. int ConSetup;
  65. // ULONG nRxErrINT;  // reserved for future...
  66. volatile unsigned int *rDTRport;
  67. int DtrPortNum;
  68. volatile unsigned int *rDSRport;
  69. int DsrPortNum;
  70. #if USE_AFC
  71. volatile unsigned int *rCTSport;
  72. int CtsPortNum;
  73. volatile unsigned int *rRTSport;
  74. int RtsPortNum;
  75. #endif
  76. // These variable are for saving register values.
  77. ULONG sULCON;
  78. ULONG sUCON;
  79. ULONG sUMCON;
  80. ULONG sUFCON;
  81. ULONG sINTstat;
  82. ULONG vUMSTAT;
  83. // We have an event callback into the MDD
  84. EVENT_FUNC EventCallback; // This callback exists in MDD
  85. PVOID        pMddHead;  // This is the first parm to callback
  86. // Keep a copy of DCB since we rely on may of its parms
  87. DCB         dcb;        // @field Device Control Block (copy of DCB in MDD)
  88. // And the same thing applies for CommTimeouts
  89. COMMTIMEOUTS CommTimeouts;  // @field Copy of CommTimeouts structure
  90. // Misc fields used by ser16550 library
  91. ULONG OpenCount;     // @field Count of simultaneous opens. 
  92. PLOOKUP_TBL pBaudTable;     // @field Pointer to Baud Table
  93. ULONG DroppedBytes; // @field Number of dropped bytes 
  94. HANDLE FlushDone; // @field Handle to flush done event.
  95. BOOL CTSFlowOff; // @field Flag - CTS flow control state. 
  96. BOOL DSRFlowOff; // @field Flag - DSR flow control state. 
  97. BOOL AddTXIntr; // @field Flag - Fake a TX intr.
  98. COMSTAT Status;  // @field Bitfield representing Win32 comm status. 
  99. ULONG CommErrors; // @field Bitfield representing Win32 comm error status. 
  100. ULONG ModemStatus; // @field Bitfield representing Win32 modem status. 
  101. CRITICAL_SECTION TransmitCritSec; // @field Protects UART Registers for non-atomic accesses
  102. CRITICAL_SECTION RegCritSec; // @field Protects UART 
  103. ULONG ChipID; // @field Chip identifier (CHIP_ID_16550 or CHIP_ID_16450)        
  104. CEDEVICE_POWER_STATE    Dx;
  105. } S2440_UART_INFO, * PS2440_UART_INFO;
  106. typedef struct __SER_INFO {
  107. // Put lib struct first so we can easily cast pointers
  108. S2440_UART_INFO s2440COM;   // UART H/W register
  109. // now hardware specific fields
  110. DWORD       dwIOBase;       // @field IO Base Address - unmapped
  111. DWORD       dwIOLen;        // @field IO Length
  112. DWORD       dwIRQ;          // @field Interrupt number for this peripheral
  113. DWORD       dwDevIndex;     // @field Index of device
  114. PUCHAR      pBaseAddress;   // @field Start of serial registers - mapped
  115. UINT8       cOpenCount;     // @field Count of concurrent opens
  116. COMMPROP    CommProp;       // @field Pointer to CommProp structure.
  117. PVOID       pMddHead;       // @field First arg to mdd callbacks.
  118. BOOL        fIRMode;        // @field Boolean, are we running in IR mode?
  119. #ifdef EXAMINE_BOOTARGS
  120. PBOOT_ARGS  pBootArgs;      // @field Pointer to global boot args struct
  121. #endif    
  122. PHWOBJ      pHWObj;         // @field Pointer to PDDs HWObj structure
  123. } SER_INFO, *PSER_INFO;
  124. // Here are the names of the values stored in the registry
  125. #define PC_REG_IRQ_VAL_NAME TEXT("IRQ") 
  126. #define PC_REG_IRQ_VAL_LEN  sizeof( DWORD )
  127. #define PC_REG_IOBASE_VAL_NAME TEXT("IoBase") 
  128. #define PC_REG_IOBASE_VAL_LEN  sizeof( DWORD )
  129. #define PC_REG_IOLEN_VAL_NAME TEXT("IoLen") 
  130. #define PC_REG_IOLEN_VAL_LEN  sizeof( DWORD )
  131. #define PC_REG_CONFIGBASE_VAL_NAME TEXT("ConfigBase") 
  132. #define PC_REG_CONFIGBASE_VAL_LEN  sizeof( DWORD )
  133. #define PC_REG_CONFIGLEN_VAL_NAME TEXT("ConfigLen") 
  134. #define PC_REG_CONFIGLEN_VAL_LEN  sizeof( DWORD )
  135. #define PC_REG_DMA_VAL_NAME TEXT("DMA") 
  136. #define PC_REG_DMA_VAL_LEN  sizeof( DWORD )
  137. #define PC_REG_DEVINDEX_VAL_NAME TEXT("DeviceArrayIndex") 
  138. #define PC_REG_DEVINDEX_VAL_LEN  sizeof( DWORD )
  139. #ifdef __cplusplus
  140. }
  141. #endif
  142. /////////////////////////////////////////////////////////////////////////////////////////
  143. //// S3C2400 UART Register
  144. ///////++ UART CONTROL REGISTER ++
  145. // Line control register bitvalue mask
  146. #define SER2440_PARITY_MASK     0x38
  147. #define SER2440_STOPBIT_MASK    0x4
  148. #define SER2440_DATABIT_MASK    0x3
  149. #define SER2440_IRMODE_MASK     0x40
  150. // Fifo Status
  151. #define SER2440_FIFOSTAT_MASK   0xf00
  152. //
  153. #define SER2440_FIFOFULL_TX     (1<<14)
  154. #define SER2440_FIFOCNT_MASK_TX 0x3f00
  155. #define SER2440_FIFO_DEPTH_TX 64
  156. //
  157. #define SER2440_INT_INVALID     0x5a5affff
  158. // Modem control register
  159. #define SER2440_AFC             (0x10)
  160. #define SER2440_RTS             0x1
  161. //Receive Mode
  162. #define RX_MODE_MASK          (0x11)
  163. #define RX_DISABLE            (0x00)
  164. #define RX_INTPOLL            (0x01)
  165. #define RX_DMA0               (0x10)
  166. #define RX_DMA1               (0x11)
  167. //Transmit Mode
  168. #define TX_MODE_MASK          (0x11 << 2)
  169. #define TX_DISABLE            (0x00 << 2)
  170. #define TX_INTPOLL            (0x01 << 2)
  171. #define TX_DMA0               (0x10 << 2)
  172. #define TX_DMA1               (0x11 << 2)
  173. //Send Break Signal
  174. #define BS_MASK               (0x01 << 4)
  175. #define BS_NORM               (0x00 << 4)
  176. #define BS_SEND               (0x01 << 4)
  177. //Loop-back Mode
  178. #define LB_MASK               (0x01 << 5)
  179. #define LB_NORM               (0x00 << 5)
  180. #define LB_MODE               (0x01 << 5)
  181. //Rx Error Status Interrupt Enable
  182. #define RX_EINT_MASK          (0x01 << 6)
  183. #define RX_EINTGEN_OFF        (0x00 << 6)
  184. #define RX_EINTGEN_ON         (0x01 << 6)
  185. //Rx Time Out Enable
  186. #define RX_TIMEOUT_MASK       (0x01 << 7)
  187. #define RX_TIMEOUT_DIS        (0x00 << 7)
  188. #define RX_TIMEOUT_EN         (0x01 << 7)
  189. //Rx Interrupt Type
  190. #define RX_INTTYPE_MASK       (0x01 << 8)
  191. #define RX_INTTYPE_PUSE       (0x00 << 8)
  192. #define RX_INTTYPE_LEVEL      (0x01 << 8)
  193. //Tx Interrupt Type
  194. #define TX_INTTYPE_MASK       (0x01 << 9)
  195. #define TX_INTTYPE_PUSE       (0x00 << 9)
  196. #define TX_INTTYPE_LEVEL      (0x01 << 9)
  197. // Clock selection
  198. #define CS_MASK (0x01 << 10)
  199. #define CS_PCLK (0x00 << 10)
  200. #define CS_UCLK (0x01 << 10)
  201. /////////////////////////////////////////////////////////////////////////////////////////
  202. #define INREG(pInfo, reg) (pInfo->s2440SerReg->reg)
  203. #define OUTREG(pInfo, reg, value) (pInfo->s2440SerReg->reg = value)
  204. // set register by orring..
  205. #define SETREG(pInfo, reg, value) (pInfo->s2440SerReg->reg |= value)
  206. #define CLEARREG(pInfo, reg, value) (pInfo->s2440SerReg->reg &= ~value)
  207. #define DisEnINT(pInfo, value) ( *(pInfo->UART_INTMASK) |= (value))
  208. #define DisEnSubINT(pInfo, value) ( *(pInfo->UART_INTSUBMASK) |= (value))
  209. #define EnINT(pInfo, value) ( *(pInfo->UART_INTMASK) &= ~(value))
  210. #define EnSubINT(pInfo, value) (  *(pInfo->UART_INTSUBMASK) &= ~(value))
  211. #define GetSubINTStatus(pInfo) ((*(pInfo->UART_INTSUBMASK)) & 0x1ff)
  212. #define ClearINTPnd(pInfo, value) ( *(pInfo->UART_INTSRCPND) = (value))
  213. #define ClearSubINTPnd(pInfo, value) ( *(pInfo->UART_INTSUBSRCPND) = (value))
  214. //#define GetSubINTPndStatus(pInfo) (*(pInfo->UART_INTSUBSRCPND) & 0x1ff)
  215. #define GetSubINTPndStatus(pInfo) 1
  216. #endif __SER_PDD_H__