FreeCalypso > hg > fc-tourmaline
diff src/gpf/inc/dio.h @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gpf/inc/dio.h Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,578 @@ +/* ++----------------------------------------------------------------------------- +| Copyright 2004 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : General definitions of DIO driver interface ++----------------------------------------------------------------------------- +*/ + +#ifndef __DIO_H__ +#define __DIO_H__ + +/*==== INCLUDES =============================================================*/ + +#include "gdi.h" + +/*==== DEFINITIONS ==========================================================*/ + +/* + * Device Type + */ +#define DIO_DATA_SER 0x00800000 /* device can transfer serial data */ +#define DIO_DATA_PKT 0x00400000 /* device can transfer packet data */ +#define DIO_DATA_MUX 0x00200000 /* device can start a multiplexer */ +#define DIO_TYPE_ID 0x0000FF00 /* id to separate different capabilities */ + +#define DIO_TYPE_SER (DIO_DATA_SER | 0x00000100) /* serial device */ +#define DIO_TYPE_SER_MUX (DIO_DATA_SER | DIO_DATA_MUX | 0x00000100) /* mux device */ +#define DIO_TYPE_PKT (DIO_DATA_PKT | 0x00000100) /* packet device */ + +/* + * Device Flags + */ +#define DIO_FLAG_SLEEP 0x80000000 /* sleep state allowed */ + +/* + * Baud rates + */ +#define DIO_BAUD_921600 0x00800000 +#define DIO_BAUD_812500 0x00400000 +#define DIO_BAUD_460800 0x00200000 +#define DIO_BAUD_406250 0x00100000 +#define DIO_BAUD_230400 0x00080000 +#define DIO_BAUD_203125 0x00040000 +#define DIO_BAUD_115200 0x00020000 +#define DIO_BAUD_57600 0x00010000 +#define DIO_BAUD_38400 0x00008000 +#define DIO_BAUD_33900 0x00004000 +#define DIO_BAUD_28800 0x00002000 +#define DIO_BAUD_19200 0x00001000 +#define DIO_BAUD_14400 0x00000800 +#define DIO_BAUD_9600 0x00000400 +#define DIO_BAUD_7200 0x00000200 +#define DIO_BAUD_4800 0x00000100 +#define DIO_BAUD_2400 0x00000080 +#define DIO_BAUD_1200 0x00000040 +#define DIO_BAUD_600 0x00000020 +#define DIO_BAUD_300 0x00000010 +#define DIO_BAUD_150 0x00000008 +#define DIO_BAUD_110 0x00000004 +#define DIO_BAUD_75 0x00000002 +#define DIO_BAUD_AUTO 0x00000001 /* automatic baud rate detection */ + +/* + * Character framing + */ +#define DIO_CF_7N1 0x00000800 +#define DIO_CF_7S1 0x00000400 +#define DIO_CF_7M1 0x00000200 +#define DIO_CF_7E1 0x00000100 +#define DIO_CF_7O1 0x00000080 +#define DIO_CF_7N2 0x00000040 +#define DIO_CF_8N1 0x00000020 +#define DIO_CF_8S1 0x00000010 +#define DIO_CF_8M1 0x00000008 +#define DIO_CF_8E1 0x00000004 +#define DIO_CF_8O1 0x00000002 +#define DIO_CF_8N2 0x00000001 + +/* + * Types of flow control + */ +#define DIO_FLOW_XTR_CTS 0x00000800 /* TX= transp. XON/XOFF RX=CTS */ +#define DIO_FLOW_XTR_XOFF 0x00000400 /* TX= transp. XON/XOFF RX=XON/XOFF */ +#define DIO_FLOW_XTR_NO 0x00000200 /* TX= transp. XON/XOFF RX=OFF */ +#define DIO_FLOW_RTS_CTS 0x00000100 /* TX=RTS RX=CTS */ +#define DIO_FLOW_RTS_XOFF 0x00000080 /* TX=RTS RX=XON/XOFF */ +#define DIO_FLOW_RTS_NO 0x00000040 /* TX=RTS RX=OFF */ +#define DIO_FLOW_XON_CTS 0x00000020 /* TX=XON/XOFF RX=CTS */ +#define DIO_FLOW_XON_XOFF 0x00000010 /* TX=XON/XOFF RX=XON/XOFF */ +#define DIO_FLOW_XON_NO 0x00000008 /* TX=XON/XOFF RX=OFF */ +#define DIO_FLOW_NO_CTS 0x00000004 /* TX=OFF RX=CTS */ +#define DIO_FLOW_NO_XOFF 0x00000002 /* TX=OFF RX=XON/XOFF */ +#define DIO_FLOW_NONE 0x00000001 /* TX=OFF RX=OFF */ + +/* + * Serial device flags + */ +#define DIO_FLAG_SER_ESC 0x80000000 /* device supports esc seq detection */ + +/* + * MUX mode + */ +#define DIO_MUX_I 0x00000008 /* advanced option with I frames */ +#define DIO_MUX_UI 0x00000004 /* advanced option with UI frames */ +#define DIO_MUX_UIH 0x00000002 /* advanced option with UIH frames */ +#define DIO_MUX_BASIC 0x00000001 /* basic option */ + +/* + * Sleep Mode + */ +#define DIO_SLEEP_ENABLE 0x01 /* enter sleep mode if possible */ +#define DIO_SLEEP_DISABLE 0x02 /* do not enter sleep mode */ + +/* + * Special Guard Period + */ +#define DIO_ESC_OFF 0x0000 /* turn escape sequence detection off */ + +/* + * Device Mode + */ +#define DIO_MODE_MUX 0x00000002 /* acts as 27.010 multiplexer device */ +#define DIO_MODE_SER 0x00000001 /* acts as serial device */ + +/* + * Control Type + */ +#define DIO_CTRL_LINES 0x0001 /* associated structure is T_DIO_CTRL_LINES */ +#define DIO_CTRL_MUX 0x0002 /* associated structure is T_DIO_CTRL_MUX */ + +/* + * Line State definition & control structure. + */ +#define DIO_SA 0x80000000 /* state: read=DTR write-DSR */ +#define DIO_SB 0x40000000 /* state: read=RTS write=DCD */ +#define DIO_X 0x20000000 /* state: read=RTS write=CTS */ +#define DIO_RING 0x10000000 /* state: ring indicator */ +#define DIO_ESC 0x08000000 /* state: escape sequence detested. */ +#define DIO_MUX_STOPPED 0x04000000 /* multiplexer stopped */ +#define DIO_BRK 0x02000000 /* state: break received/to be sent */ +#define DIO_BRKLEN 0x000000FF /* state: break signal # of characters */ + +/*==== TYPES ================================================================*/ + +/* + * Device Capabilities + */ +typedef struct +{ + U32 device_type; + U32 device_flags; + U16 mtu_control; + U16 mtu_data; + char const *driver_name; +} T_DIO_CAP; + +typedef struct +{ + U32 device_type; + U32 device_flags; + U16 mtu_control; + U16 mtu_data; + char const *driver_name; + U32 baudrate_auto; + U32 baudrate_fixed; + U32 char_frame; + U32 flow_control; + U32 ser_flags; +} T_DIO_CAP_SER; + +typedef struct +{ + U32 device_type; + U32 device_flags; + U16 mtu_control; + U16 mtu_data; + char const *driver_name; + U32 baudrate_auto; + U32 baudrate_fixed; + U32 char_frame; + U32 flow_control; + U32 ser_flags; + U32 mux_mode; +} T_DIO_CAP_SER_MUX; + +typedef struct +{ + U32 device_type; + U32 device_flags; + U16 mtu_control; + U16 mtu_data; + char const *driver_name; +} T_DIO_CAP_PKT; + +/* + * Device Control Block + */ +typedef struct +{ + U32 device_type; /*< 0: 4> device identifier with general capability information */ + U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */ + U8 _align0; /*< 5: 1> alignment */ + U8 _align1; /*< 6: 1> alignment */ + U8 _align2; /*< 7: 1> alignment */ +} T_DIO_DCB; + +typedef struct +{ + U32 device_type; /*< 0: 4> device identifier with general capability information */ + U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */ + U8 _align0; /*< 5: 1> alignment */ + U8 _align1; /*< 6: 1> alignment */ + U8 _align2; /*< 7: 1> alignment */ + U32 baudrate; /*< 8: 4> user set baudrate */ + U32 char_frame; /*< 12: 4> supported character framing */ + U32 flow_control; /*< 16: 4> supported modes of flow control */ + U8 xon; /*< 20: 1> set/reset XON for flow control */ + U8 xoff; /*< 21: 1> set/reset XOFF for flow control */ + U8 esc_char; /*< 22: 1> ASCII character which is used in an escape sequence */ + U8 _align3; /*< 23: 1> alignment */ + U16 guard_period; /*< 24: 2> duration value for escape sequence */ + U8 _align4; /*< 26: 1> alignment */ + U8 _align5; /*< 27: 1> alignment */ +} T_DIO_DCB_SER; + +typedef struct +{ + U32 device_type; /*< 0: 4> device identifier with general capability information */ + U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */ + U8 _align0; /*< 5: 1> alignment */ + U8 _align1; /*< 6: 1> alignment */ + U8 _align2; /*< 7: 1> alignment */ + U32 baudrate; /*< 8: 4> user set baudrate */ + U32 char_frame; /*< 12: 4> supported character framing */ + U32 flow_control; /*< 16: 4> supported modes of flow control */ + U8 xon; /*< 20: 1> set/reset XON for flow control */ + U8 xoff; /*< 21: 1> set/reset XOFF for flow control */ + U8 esc_char; /*< 22: 1> ASCII character which is used in an escape sequence */ + U8 _align3; /*< 23: 1> alignment */ + U16 guard_period; /*< 24: 2> duration value for escape sequence */ + U8 _align4; /*< 26: 1> alignment */ + U8 _align5; /*< 27: 1> alignment */ + U32 device_mode; /*< 28: 4> work mode of device */ + U32 mux_mode; /*< 32: 4> supported multiplexer modes */ + U16 n1; /*< 36: 2> max frame size of mux frame */ + U8 n2; /*< 38: 1> max number of retransmissions */ + U8 t1; /*< 39: 1> acknowledgement timer */ + U8 t2; /*< 40: 1> response timer */ + U8 t3; /*< 41: 1> wake up response timer */ + U8 k; /*< 42: 1> windows size */ + U8 _align6; /*< 43: 1> alignment */ +} T_DIO_DCB_SER_MUX; + +typedef struct +{ + U32 device_type; /*< 0: 4> device identifier with general capability information */ + U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */ + U8 _align0; /*< 5: 1> alignment */ + U8 _align1; /*< 6: 1> alignment */ + U8 _align2; /*< 7: 1> alignment */ +} T_DIO_DCB_PKT; + +/* + * Data Control + */ +typedef struct +{ + U16 control_type ; + U16 length ; +}T_DIO_CTRL ; + +typedef struct +{ + U16 control_type; + U16 length; + U32 state; +} T_DIO_CTRL_LINES; + +typedef struct +{ + U16 control_type ; + U16 length ; + U32 state; +}T_DIO_CTRL_MUX ; + +/* + * DIO Data format. + */ +typedef struct +{ + U8 _align0; /*< 0: 1> alignment */ + U8 _align1; /*< 1: 1> alignment */ + U16 c_data; /*< 2: 2> counter */ + U8 *ptr_data; /*< 4: 4> pointer to pointer to the first byte of the data buffer segment */ +} T_dio_segment; + +typedef struct +{ + U16 length; /*< 0: 2> len of dio_ctrl */ + U8 _align0; /*< 2: 1> alignment */ + U8 c_dio_segment; /*< 3: 1> counter */ + T_dio_segment *ptr_dio_segment; /*< 4: 4> pointer to Structured Element */ +} T_dio_buffer; + +/*==== PROTOTYPES ===========================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : dio_init ++------------------------------------------------------------------------------ +| Description : The function initializes the interface and the drivers. +| +| Parameters : none +| +| Return : DRV_OK - Initialization successful +| DRV_INITIALIZED - Interface already initialized +| DRV_INITFAILURE - Initialization failed +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_init(void); + +/* ++------------------------------------------------------------------------------ +| Function : dio_user_init ++------------------------------------------------------------------------------ +| Description : The function sets the signal callback of a DIO user. +| +| Parameters : user_name - DIO user name +| drv_handle - unique handle for this user +| signal_callback - callback function for this user +| +| Return : DRV_OK - Callback successfully set +| DRV_INVALID_PARAMS - The specified user does not exist +| DRV_INTERNAL_ERROR - Internal error +| DRV_NOTCONFIGURED - DIO interface is not yet initialized. +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_user_init(char const * user_name, + U16 drv_handle, + T_DRV_CB_FUNC signal_callback); + +/* ++------------------------------------------------------------------------------ +| Function : dio_user_exit ++------------------------------------------------------------------------------ +| Description : Termination of User Operation. +| +| Parameters : user_name - DIO user name +| +| Return : DRV_OK - User operation successfully terminated. +| DRV_INVALID_PARAMS - User operation can not be terminated yet. +| DRV_INTERNAL_ERROR - Internal error +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_user_exit(char const * user_name); + +/* ++------------------------------------------------------------------------------ +| Function : dio_exit ++------------------------------------------------------------------------------ +| Description : Termination of the Interface. +| +| Parameters : none +| +| Return : none +| ++------------------------------------------------------------------------------ +*/ +extern void dio_exit(void); + +/* ++------------------------------------------------------------------------------ +| Function : dio_set_rx_buffer ++------------------------------------------------------------------------------ +| Description : This function provides a receive buffer to the driver. +| +| Parameters : device - device number +| buffer - buffer to copy received data in it +| +| Return : DRV_OK - Function successful +| DRV_BUFFER_FULL - Buffer queue full. +| DRV_INVALID_PARAMS - The specified device does not exist or +| the data buffer is not big enough. +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_set_rx_buffer(U32 device, + T_dio_buffer * buffer); + +/* ++------------------------------------------------------------------------------ +| Function : dio_read ++------------------------------------------------------------------------------ +| Description : This function returns a receive buffer and control information. +| +| Parameters : device - device number +| control_info - control information from the driver +| buffer - buffer with received data in it +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_read(U32 device, + T_DIO_CTRL * control_info, + T_dio_buffer ** buffer); + +/* ++------------------------------------------------------------------------------ +| Function : dio_write ++------------------------------------------------------------------------------ +| Description : This function provides a send buffer to the driver which +| contains data to send. +| +| Parameters : device - device number +| control_info - control information for the driver +| buffer - buffer with data to send +| +| Return : DRV_OK - Function successful +| DRV_BUFFER_FULL - Buffer queue full. +| DRV_INVALID_PARAMS - The specified device does not exist or +| the data buffer to big. +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_write(U32 device, + T_DIO_CTRL * control_info, + T_dio_buffer * buffer); + +/* ++------------------------------------------------------------------------------ +| Function : dio_get_tx_buffer ++------------------------------------------------------------------------------ +| Description : This function returns a send buffer provided via dio_write(). +| +| Parameters : device - device number +| buffer - return sent data buffer +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_get_tx_buffer(U32 device, + T_dio_buffer ** buffer); + +/* ++------------------------------------------------------------------------------ +| Function : dio_clear ++------------------------------------------------------------------------------ +| Description : This function is used to clear the hardware send buffer. +| +| Parameters : device - device number +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| DRV_INPROCESS - The driver is busy clearing the buffer +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_clear(U32 device); + +/* ++------------------------------------------------------------------------------ +| Function : dio_flush ++------------------------------------------------------------------------------ +| Description : With this function the driver is requested to inform the +| user, when data of the hardware send buffer have been written +| successfully. +| +| Parameters : device - device number +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| DRV_INPROCESS - The driver is busy flushing the buffer +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_flush(U32 device); + +/* ++------------------------------------------------------------------------------ +| Function : dio_get_capabilities ++------------------------------------------------------------------------------ +| Description : This function is used to retrieve the capabilities of a device. +| +| Parameters : device - device number +| capabilities - Return: Pointer to the device capabilities +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist +| DRV_INTERNAL_ERROR - Internal driver error +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_get_capabilities(U32 device, + T_DIO_CAP ** capabilities); + +/* ++------------------------------------------------------------------------------ +| Function : dio_set_config ++------------------------------------------------------------------------------ +| Description : This function is used to configure a device. +| +| Parameters : device - device number +| dcb - pointer to a device control block +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - parameter invalid or out of range +| DRV_INTERNAL_ERROR - Internal driver error +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_set_config(U32 device, + T_DIO_DCB * dcb); + +/* ++------------------------------------------------------------------------------ +| Function : dio_get_config ++------------------------------------------------------------------------------ +| Description : This function reads the device configuration. +| +| Parameters : device - device number +| dcb - pointer to a device control block +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device does not exist or +| wrong Device Control Block provided. +| DRV_INTERNAL_ERROR - Internal driver error +| DRV_NOTCONFIGURED - The device is not yet configured +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_get_config(U32 device, + T_DIO_DCB * dcb); + +/* ++------------------------------------------------------------------------------ +| Function : dio_close_device ++------------------------------------------------------------------------------ +| Description : This function is used to close a device. +| +| Parameters : device - device number +| +| Return : DRV_OK - Function successful +| DRV_INVALID_PARAMS - The specified device can not be closed yet +| DRV_INTERNAL_ERROR - Internal driver error +| ++------------------------------------------------------------------------------ +*/ +extern U16 dio_close_device(U32 device); + +#endif /* __DIO_H__ */