You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
13 KiB
341 lines
13 KiB
/******************************************************************************
|
|
*
|
|
* $Workfile: uartlib.h $
|
|
*
|
|
* $Author: Moti $
|
|
*
|
|
* $Revision: 23 $
|
|
*
|
|
* $Modtime: 3/15/02 12:28p $
|
|
*
|
|
* Description: Contains public UART Library definitions and prototypes.
|
|
*
|
|
******************************************************************************/
|
|
#if !defined(UARTLIB_H) /* UARTLIB.H */
|
|
#define UARTLIB_H
|
|
|
|
|
|
/* UART object structure prototype */
|
|
typedef struct _UART_OBJECT *PUART_OBJECT;
|
|
|
|
|
|
/* UART_CONFIG.FrameConfig */
|
|
#define UC_FCFG_DATALEN_MASK ((DWORD)(0x0000000F)) /* Data Length mask for bits 0:3 */
|
|
#define UC_FCFG_DATALEN_5 ((DWORD)(0x00<<0)) /* Bits 0:3 - Sets Data Word Length to 5 Bits. */
|
|
#define UC_FCFG_DATALEN_6 ((DWORD)(0x01<<0)) /* Bits 0:3 - Sets Data Word Length to 6 Bits. */
|
|
#define UC_FCFG_DATALEN_7 ((DWORD)(0x02<<0)) /* Bits 0:3 - Sets Data Word Length to 7 Bits. */
|
|
#define UC_FCFG_DATALEN_8 ((DWORD)(0x03<<0)) /* Bits 0:3 - Sets Data Word Length to 8 Bits. */
|
|
|
|
#define UC_FCFG_STOPBITS_MASK ((DWORD)(0x000000F0)) /* Stop Bits mask for bits 4:7 */
|
|
#define UC_FCFG_STOPBITS_1 ((DWORD)(0x00<<4)) /* Bits 4:7 - 1 Stop Bit. */
|
|
#define UC_FCFG_STOPBITS_1_5 ((DWORD)(0x01<<4)) /* Bits 4:7 - 1.5 Stop Bits. */
|
|
#define UC_FCFG_STOPBITS_2 ((DWORD)(0x02<<4)) /* Bits 4:7 - 2 Stop Bits. */
|
|
|
|
#define UC_FCFG_PARITY_MASK ((DWORD)(0x00000F00)) /* Parity Bits mask for bits 8:11 */
|
|
#define UC_FCFG_NO_PARITY ((DWORD)(0x00<<8)) /* Bits 8:11 - No Parity. */
|
|
#define UC_FCFG_ODD_PARITY ((DWORD)(0x01<<8)) /* Bits 8:11 - Odd Parity. */
|
|
#define UC_FCFG_EVEN_PARITY ((DWORD)(0x02<<8)) /* Bits 8:11 - Even Parity. */
|
|
#define UC_FCFG_MARK_PARITY ((DWORD)(0x03<<8)) /* Bits 8:11 - High Parity - Mark (Forced to 1). */
|
|
#define UC_FCFG_SPACE_PARITY ((DWORD)(0x04<<8)) /* Bits 8:11 - Low Parity - Space (Forced to 0). */
|
|
|
|
|
|
/* UART_CONFIG.InterruptEnable */
|
|
#define UC_IE_NO_INTS ((DWORD)(0x00)) /* No Interrupts - Interrupts Disabled. */
|
|
#define UC_IE_RX_STAT_INT ((DWORD)(0x01)) /* Bit 0 - Receive Status Interrupt. */
|
|
#define UC_IE_RX_INT ((DWORD)(0x02)) /* Bit 1 - Receive Data Available Interrupt. */
|
|
#define UC_IE_TX_INT ((DWORD)(0x04)) /* Bit 2 - Transmit Interrupt. */
|
|
#define UC_IE_TX_EMPTY_INT ((DWORD)(0x08)) /* Bit 3 - Transmit Empty Interrupt. */
|
|
#define UC_IE_MODEM_STAT_INT ((DWORD)(0x10)) /* Bit 4 - Modem Status Interrupt. */
|
|
|
|
|
|
/* UART_CONFIG.FlowControl */
|
|
#define UC_FLWC_RTS_FLOW_MASK ((DWORD)(0x0000000F))
|
|
#define UC_FLWC_NO_RTS_FLOW ((DWORD)(0x00<<0)) /* No RTS Handshaking */
|
|
#define UC_FLWC_RTS_HS ((DWORD)(0x01<<0)) /* RTS Handshaking */
|
|
#define UC_FLWC_RTS_TOGGLE ((DWORD)(0x02<<0)) /* RTS is raised when there is data to send and whilst being sent. */
|
|
|
|
#define UC_FLWC_CTS_FLOW_MASK ((DWORD)(0x000000F0))
|
|
#define UC_FLWC_NO_CTS_FLOW ((DWORD)(0x00<<4)) /* No CTS Handshaking */
|
|
#define UC_FLWC_CTS_HS ((DWORD)(0x01<<4)) /* CTS Handshaking */
|
|
|
|
#define UC_FLWC_DSR_FLOW_MASK ((DWORD)(0x00000F00))
|
|
#define UC_FLWC_NO_DSR_FLOW ((DWORD)(0x00<<8)) /* No DSR Handshaking */
|
|
#define UC_FLWC_DSR_HS ((DWORD)(0x01<<8)) /* DSR Handshaking */
|
|
|
|
#define UC_FLWC_DTR_FLOW_MASK ((DWORD)(0x0000F000))
|
|
#define UC_FLWC_NO_DTR_FLOW ((DWORD)(0x00<<12)) /* No DTR Handshaking */
|
|
#define UC_FLWC_DTR_HS ((DWORD)(0x01<<12)) /* DTR Handshaking */
|
|
#define UC_FLWC_DSR_IP_SENSITIVE ((DWORD)(0x02<<12)) /* DSR input sensitivity. */
|
|
|
|
#define UC_FLWC_TX_XON_XOFF_FLOW_MASK ((DWORD)(0x000F0000)) /* Transmit XON/XOFF flow control. */
|
|
#define UC_FLWC_TX_NO_XON_XOFF_FLOW ((DWORD)(0x00<<16)) /* No transmit XON/XOFF in-band flow control. */
|
|
#define UC_FLWC_TX_XON_XOFF_FLOW ((DWORD)(0x01<<16)) /* Transmit XON/XOFF in-band flow control. */
|
|
#define UC_FLWC_TX_XONANY_XOFF_FLOW ((DWORD)(0x02<<16)) /* Transmit XON Any/XOFF in-band flow control. */
|
|
|
|
/* 10.11.1999 ARG - ESIL 0928 */
|
|
/* Definition for Rx XON-ANY/XOFF flow control removed as not a feature of UART */
|
|
#define UC_FLWC_RX_XON_XOFF_FLOW_MASK ((DWORD)(0x00F00000)) /* Receive XON/XOFF flow control. */
|
|
#define UC_FLWC_RX_NO_XON_XOFF_FLOW ((DWORD)(0x00<<20)) /* No receive XON/XOFF in-band flow control. */
|
|
#define UC_FLWC_RX_XON_XOFF_FLOW ((DWORD)(0x01<<20)) /* Receive XON/XOFF in-band flow control. */
|
|
|
|
#define UC_FLWC_DISABLE_TXRX_MASK ((DWORD)(0xF0000000))
|
|
#define UC_FLWC_DISABLE_TX ((DWORD)(0x01<<28)) /* Disable Tx. */
|
|
#define UC_FLWC_DISABLE_RX ((DWORD)(0x02<<28)) /* Disable Rx. */
|
|
#define UC_FLWC_DISABLE_TXRX ((DWORD)(0x03<<28)) /* Disable Tx & Rx. */
|
|
|
|
|
|
/* UART_CONFIG.SpecialMode */
|
|
#define UC_SM_LOOPBACK_MODE ((DWORD)(0x01)) /* Place UART into internal loopback mode */
|
|
#define UC_SM_LOW_POWER_MODE ((DWORD)(0x02)) /* Place UART into low power mode */
|
|
#define UC_SM_TX_BREAK ((DWORD)(0x04)) /* Send break character */
|
|
#define UC_SM_DETECT_SPECIAL_CHAR ((DWORD)(0x08)) /* Detect special character */
|
|
#define UC_SM_DO_NULL_STRIPPING ((DWORD)(0x10)) /* Strip all NULLs from receive data */
|
|
|
|
|
|
/* Config Structure Masks */
|
|
#define UC_FRAME_CONFIG_MASK ((DWORD)(0x01))
|
|
#define UC_INT_ENABLE_MASK ((DWORD)(0x02))
|
|
#define UC_FLOW_CTRL_MASK ((DWORD)(0x04))
|
|
#define UC_FC_THRESHOLD_SETTING_MASK ((DWORD)(0x08))
|
|
#define UC_SPECIAL_CHARS_MASK ((DWORD)(0x10))
|
|
#define UC_TX_BAUD_RATE_MASK ((DWORD)(0x20))
|
|
#define UC_RX_BAUD_RATE_MASK ((DWORD)(0x40))
|
|
#define UC_SPECIAL_MODE_MASK ((DWORD)(0x80))
|
|
#define UC_ALL_MASK ((DWORD)(0xFFFF))
|
|
|
|
|
|
/* Configure UART Struct. */
|
|
typedef struct _UART_CONFIG
|
|
{
|
|
/* UC_FRAME_CONFIG_MASK */
|
|
DWORD FrameConfig; /* Parity/Stop/Data */
|
|
|
|
/* UC_INT_ENABLE_MASK */
|
|
DWORD InterruptEnable; /* Enable/Disable Interrupts */
|
|
|
|
/* UC_FLOW_CTRL_MASK */
|
|
DWORD FlowControl; /* Receive & Transmit Flow Control Settings & Enable Tx & Rx. */
|
|
|
|
/* UC_SPECIAL_CHARS_MASK */
|
|
DWORD XON; /* XON Special Character for XON/XOFF flow control. */
|
|
DWORD XOFF; /* XOFF Special Character for XON/XOFF flow control. */
|
|
DWORD SpecialCharDetect; /* Special Character to detect */
|
|
|
|
/* UC_FC_THRESHOLD_SETTING_MASK */
|
|
DWORD HiFlowCtrlThreshold; /* High Flow control threshold level */
|
|
DWORD LoFlowCtrlThreshold; /* Low Flow control threshold level */
|
|
|
|
/* UC_TX_BAUD_RATE_MASK */
|
|
DWORD TxBaud; /* Transmit baud rate. */
|
|
|
|
/* UC_RX_BAUD_RATE_MASK */
|
|
DWORD RxBaud; /* Receive baud rate. */
|
|
|
|
/* UC_SPECIAL_MODE_MASK */
|
|
DWORD SpecialMode; /* Special Mode */
|
|
|
|
} UART_CONFIG, *PUART_CONFIG;
|
|
|
|
|
|
|
|
|
|
|
|
/* Buffer Control Operations */
|
|
#define UL_BC_OP_FLUSH 0x01
|
|
#define UL_BC_OP_SET 0x02
|
|
#define UL_BC_OP_GET 0x03
|
|
|
|
#define UL_BC_FIFO ((DWORD)(0x01))
|
|
#define UL_BC_BUFFER ((DWORD)(0x02))
|
|
#define UL_BC_IN ((DWORD)(0x04))
|
|
#define UL_BC_OUT ((DWORD)(0x08))
|
|
|
|
|
|
/* Set UART Buffer Sizes Struct. */
|
|
typedef struct _SET_BUFFER_SIZES
|
|
{
|
|
PBYTE pINBuffer; /* Pointer to allocated IN buffer */
|
|
DWORD INBufferSize; /* IN buffer size */
|
|
|
|
DWORD TxFIFOSize; /* Tx FIFO size */
|
|
DWORD RxFIFOSize; /* Rx FIFO size */
|
|
|
|
BYTE TxFIFOTrigLevel; /* Tx FIFO interrupt trigger level. */
|
|
BYTE RxFIFOTrigLevel; /* Rx FIFO interrupt trigger level. */
|
|
|
|
} SET_BUFFER_SIZES, *PSET_BUFFER_SIZES;
|
|
|
|
|
|
/* Get UART Buffer State Struct. */
|
|
typedef struct _GET_BUFFER_STATE
|
|
{
|
|
DWORD BytesInOUTBuffer; /* Bytes in OUT buffer */
|
|
DWORD BytesInINBuffer; /* Bytes in IN buffer */
|
|
DWORD BytesInTxFIFO; /* Bytes in TX FIFO */
|
|
DWORD BytesInRxFIFO; /* Bytes in RX FIFO */
|
|
|
|
} GET_BUFFER_STATE, *PGET_BUFFER_STATE;
|
|
|
|
|
|
|
|
/* Modem Control Operations */
|
|
#define UL_MC_OP_SET 0x01
|
|
#define UL_MC_OP_BIT_SET 0x02
|
|
#define UL_MC_OP_BIT_CLEAR 0x03
|
|
#define UL_MC_OP_STATUS 0x04
|
|
|
|
/* Modem Control Signals */
|
|
#define UL_MC_RTS ((DWORD)0x00000001) /* O Read/Write */
|
|
#define UL_MC_DTR ((DWORD)0x00000002) /* O Read/Write */
|
|
#define UL_MC_DCD ((DWORD)0x00000004) /* I Read Only */
|
|
#define UL_MC_RI ((DWORD)0x00000008) /* I Read Only */
|
|
#define UL_MC_DSR ((DWORD)0x00000010) /* I Read Only */
|
|
#define UL_MC_CTS ((DWORD)0x00000020) /* I Read Only */
|
|
|
|
#define UL_MC_DELTA_DCD ((DWORD)0x00010000) /* I Read Only */
|
|
#define UL_MC_TRAILING_RI_EDGE ((DWORD)0x00020000) /* I Read Only */
|
|
#define UL_MC_DELTA_DSR ((DWORD)0x00040000) /* I Read Only */
|
|
#define UL_MC_DELTA_CTS ((DWORD)0x00080000) /* I Read Only */
|
|
|
|
#define UL_MC_INPUT_SIGNALS_CHANGED (UL_MC_DELTA_DCD | UL_MC_TRAILING_RI_EDGE | UL_MC_DELTA_DSR | UL_MC_DELTA_CTS)
|
|
|
|
|
|
/* UART Information Struct. */
|
|
typedef struct _UART_INFO
|
|
{
|
|
DWORD MaxTxFIFOSize;
|
|
DWORD MaxRxFIFOSize;
|
|
BOOLEAN PowerManagement;
|
|
BOOLEAN IndependentRxBaud;
|
|
|
|
DWORD UART_SubType;
|
|
DWORD UART_Rev;
|
|
|
|
} UART_INFO, *PUART_INFO;
|
|
|
|
|
|
/* UART Interrupts Pending */
|
|
#define UL_IP_RX_STAT ((DWORD)0x1<<0)
|
|
#define UL_IP_RX ((DWORD)0x1<<1)
|
|
#define UL_IP_RXTO ((DWORD)0x1<<2)
|
|
#define UL_IP_TX ((DWORD)0x1<<3)
|
|
#define UL_IP_TX_EMPTY ((DWORD)0x1<<4)
|
|
#define UL_IP_MODEM ((DWORD)0x1<<5)
|
|
|
|
|
|
|
|
/* GetUartStatus operations */
|
|
#define UL_GS_OP_HOLDING_REASONS 0x1
|
|
#define UL_GS_OP_LINESTATUS 0x2
|
|
|
|
|
|
/* These are the reasons that the device could be holding. */
|
|
/* UART Status */
|
|
#define UL_TX_WAITING_FOR_CTS ((DWORD)0x00000001)
|
|
#define UL_TX_WAITING_FOR_DSR ((DWORD)0x00000002)
|
|
#define UL_TX_WAITING_FOR_DCD ((DWORD)0x00000004)
|
|
#define UL_TX_WAITING_FOR_XON ((DWORD)0x00000008)
|
|
#define UL_TX_WAITING_XOFF_SENT ((DWORD)0x00000010)
|
|
#define UL_TX_WAITING_ON_BREAK ((DWORD)0x00000020)
|
|
#define UL_RX_WAITING_FOR_DSR ((DWORD)0x00010000)
|
|
|
|
/* UART Status Errors */
|
|
#define UL_US_OVERRUN_ERROR ((DWORD)0x00000001) /* Buffer Overrun Error */
|
|
#define UL_US_PARITY_ERROR ((DWORD)0x00000002) /* Parity Error */
|
|
#define UL_US_FRAMING_ERROR ((DWORD)0x00000004) /* Framing Error. */
|
|
#define UL_US_BREAK_ERROR ((DWORD)0x00000008) /* Break Interrupt. */
|
|
#define UL_US_DATA_ERROR ((DWORD)0x00000010) /* Error In Receive FIFO. */
|
|
|
|
/* Receive Status */
|
|
#define UL_RS_SPECIAL_CHAR_DETECTED ((DWORD)0x00000020) /* Detected special char. */
|
|
#define UL_RS_BUFFER_OVERRUN ((DWORD)0x00000040) /* IN Buffer Overrun */
|
|
|
|
|
|
|
|
/* Immediate Byte Operations */
|
|
#define UL_IM_OP_WRITE 0x1
|
|
#define UL_IM_OP_CANCEL 0x2
|
|
#define UL_IM_OP_STATUS 0x3
|
|
|
|
#define UL_IM_NO_BYTE_TO_SEND 0x0 /* Byte Does not need to be sent */
|
|
#define UL_IM_BYTE_TO_SEND 0x1 /* Byte needs to be sent */
|
|
|
|
|
|
/* Init UART Struct. */
|
|
typedef struct _INIT_UART
|
|
{
|
|
DWORD UartNumber; /* UART Number. */
|
|
PVOID BaseAddress; /* UART Base Address. */
|
|
DWORD RegisterStride; /* UART Register Stride */
|
|
DWORD ClockFreq; /* UART Clock Frequency in Hz */
|
|
|
|
} INIT_UART, *PINIT_UART;
|
|
|
|
|
|
|
|
typedef int ULSTATUS;
|
|
|
|
/* General UART Library status codes */
|
|
#define UL_STATUS_SUCCESS 0
|
|
#define UL_STATUS_UNSUCCESSFUL -1
|
|
#define UL_STATUS_INSUFFICIENT_RESOURCES -2
|
|
#define UL_STATUS_INVALID_PARAMETER -3
|
|
#define UL_STATUS_SAME_BASE_ADDRESS -4
|
|
#define UL_STATUS_TOO_MANY_UARTS_FOR_CHIP -5
|
|
|
|
|
|
// UL_GetUartObject Operations
|
|
#define UL_OP_GET_NEXT_UART 0x1
|
|
#define UL_OP_GET_PREVIOUS_UART 0x2
|
|
|
|
|
|
|
|
|
|
#define UL_LIB_16C65X_UART 1
|
|
#define UL_LIB_16C95X_UART 2
|
|
|
|
typedef struct _UART_LIB
|
|
{
|
|
ULSTATUS (*UL_InitUart_XXXX)(PINIT_UART pInitUart, PUART_OBJECT pFirstUart, PUART_OBJECT *ppUart);
|
|
void (*UL_DeInitUart_XXXX)(PUART_OBJECT pUart);
|
|
void (*UL_ResetUart_XXXX)(PUART_OBJECT pUart);
|
|
ULSTATUS (*UL_VerifyUart_XXXX)(PUART_OBJECT pUart);
|
|
|
|
ULSTATUS (*UL_SetConfig_XXXX)(PUART_OBJECT pUart, PUART_CONFIG pNewUartConfig, DWORD ConfigMask);
|
|
ULSTATUS (*UL_BufferControl_XXXX)(PUART_OBJECT pUart, PVOID pBufferControl, int Operation, DWORD Flags);
|
|
|
|
ULSTATUS (*UL_ModemControl_XXXX)(PUART_OBJECT pUart, PDWORD pModemSignals, int Operation);
|
|
DWORD (*UL_IntsPending_XXXX)(PUART_OBJECT *ppUart);
|
|
void (*UL_GetUartInfo_XXXX)(PUART_OBJECT pUart, PUART_INFO pUartInfo);
|
|
|
|
int (*UL_OutputData_XXXX)(PUART_OBJECT pUart);
|
|
int (*UL_InputData_XXXX)(PUART_OBJECT pUart, PDWORD pRxStatus);
|
|
|
|
int (*UL_ReadData_XXXX)(PUART_OBJECT pUart, PBYTE pDest, int Size);
|
|
ULSTATUS (*UL_WriteData_XXXX)(PUART_OBJECT pUart, PBYTE pData, int Size);
|
|
ULSTATUS (*UL_ImmediateByte_XXXX)(PUART_OBJECT pUart, PBYTE pData, int Operation);
|
|
ULSTATUS (*UL_GetStatus_XXXX)(PUART_OBJECT pUart, PDWORD pReturnData, int Operation);
|
|
void (*UL_DumpUartRegs_XXXX)(PUART_OBJECT pUart);
|
|
|
|
void (*UL_SetAppBackPtr_XXXX)(PUART_OBJECT pUart, PVOID pAppBackPtr);
|
|
PVOID (*UL_GetAppBackPtr_XXXX)(PUART_OBJECT pUart);
|
|
void (*UL_GetConfig_XXXX)(PUART_OBJECT pUart, PUART_CONFIG pUartConfig);
|
|
PUART_OBJECT (*UL_GetUartObject_XXXX)(PUART_OBJECT pUart, int Operation);
|
|
|
|
|
|
} UART_LIB, *PUART_LIB;
|
|
|
|
|
|
/* Prototypes - functions should not be called directly */
|
|
void UL_SetAppBackPtr(PUART_OBJECT pUart, PVOID pAppBackPtr);
|
|
PVOID UL_GetAppBackPtr(PUART_OBJECT pUart);
|
|
void UL_GetConfig(PUART_OBJECT pUart, PUART_CONFIG pUartConfig);
|
|
PUART_OBJECT UL_GetUartObject(PUART_OBJECT pUart, int Operation);
|
|
|
|
ULSTATUS UL_InitUartLibrary(PUART_LIB pUartLib, int Library);
|
|
void UL_DeInitUartLibrary(PUART_LIB pUartLib);
|
|
|
|
/* End of prototypes. */
|
|
|
|
|
|
#endif /* End of UARTLIB.H */
|