comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:4e78acac3d88
1 /*
2 +-----------------------------------------------------------------------------
3 | Copyright 2004 Texas Instruments Berlin, AG
4 | All rights reserved.
5 |
6 | This file is confidential and a trade secret of Texas
7 | Instruments Berlin, AG
8 | The receipt of or possession of this file does not convey
9 | any rights to reproduce or disclose its contents or to
10 | manufacture, use, or sell anything it may describe, in
11 | whole, or in part, without the specific written consent of
12 | Texas Instruments Berlin, AG.
13 +-----------------------------------------------------------------------------
14 | Purpose : General definitions of DIO driver interface
15 +-----------------------------------------------------------------------------
16 */
17
18 #ifndef __DIO_H__
19 #define __DIO_H__
20
21 /*==== INCLUDES =============================================================*/
22
23 #include "gdi.h"
24
25 /*==== DEFINITIONS ==========================================================*/
26
27 /*
28 * Device Type
29 */
30 #define DIO_DATA_SER 0x00800000 /* device can transfer serial data */
31 #define DIO_DATA_PKT 0x00400000 /* device can transfer packet data */
32 #define DIO_DATA_MUX 0x00200000 /* device can start a multiplexer */
33 #define DIO_TYPE_ID 0x0000FF00 /* id to separate different capabilities */
34
35 #define DIO_TYPE_SER (DIO_DATA_SER | 0x00000100) /* serial device */
36 #define DIO_TYPE_SER_MUX (DIO_DATA_SER | DIO_DATA_MUX | 0x00000100) /* mux device */
37 #define DIO_TYPE_PKT (DIO_DATA_PKT | 0x00000100) /* packet device */
38
39 /*
40 * Device Flags
41 */
42 #define DIO_FLAG_SLEEP 0x80000000 /* sleep state allowed */
43
44 /*
45 * Baud rates
46 */
47 #define DIO_BAUD_921600 0x00800000
48 #define DIO_BAUD_812500 0x00400000
49 #define DIO_BAUD_460800 0x00200000
50 #define DIO_BAUD_406250 0x00100000
51 #define DIO_BAUD_230400 0x00080000
52 #define DIO_BAUD_203125 0x00040000
53 #define DIO_BAUD_115200 0x00020000
54 #define DIO_BAUD_57600 0x00010000
55 #define DIO_BAUD_38400 0x00008000
56 #define DIO_BAUD_33900 0x00004000
57 #define DIO_BAUD_28800 0x00002000
58 #define DIO_BAUD_19200 0x00001000
59 #define DIO_BAUD_14400 0x00000800
60 #define DIO_BAUD_9600 0x00000400
61 #define DIO_BAUD_7200 0x00000200
62 #define DIO_BAUD_4800 0x00000100
63 #define DIO_BAUD_2400 0x00000080
64 #define DIO_BAUD_1200 0x00000040
65 #define DIO_BAUD_600 0x00000020
66 #define DIO_BAUD_300 0x00000010
67 #define DIO_BAUD_150 0x00000008
68 #define DIO_BAUD_110 0x00000004
69 #define DIO_BAUD_75 0x00000002
70 #define DIO_BAUD_AUTO 0x00000001 /* automatic baud rate detection */
71
72 /*
73 * Character framing
74 */
75 #define DIO_CF_7N1 0x00000800
76 #define DIO_CF_7S1 0x00000400
77 #define DIO_CF_7M1 0x00000200
78 #define DIO_CF_7E1 0x00000100
79 #define DIO_CF_7O1 0x00000080
80 #define DIO_CF_7N2 0x00000040
81 #define DIO_CF_8N1 0x00000020
82 #define DIO_CF_8S1 0x00000010
83 #define DIO_CF_8M1 0x00000008
84 #define DIO_CF_8E1 0x00000004
85 #define DIO_CF_8O1 0x00000002
86 #define DIO_CF_8N2 0x00000001
87
88 /*
89 * Types of flow control
90 */
91 #define DIO_FLOW_XTR_CTS 0x00000800 /* TX= transp. XON/XOFF RX=CTS */
92 #define DIO_FLOW_XTR_XOFF 0x00000400 /* TX= transp. XON/XOFF RX=XON/XOFF */
93 #define DIO_FLOW_XTR_NO 0x00000200 /* TX= transp. XON/XOFF RX=OFF */
94 #define DIO_FLOW_RTS_CTS 0x00000100 /* TX=RTS RX=CTS */
95 #define DIO_FLOW_RTS_XOFF 0x00000080 /* TX=RTS RX=XON/XOFF */
96 #define DIO_FLOW_RTS_NO 0x00000040 /* TX=RTS RX=OFF */
97 #define DIO_FLOW_XON_CTS 0x00000020 /* TX=XON/XOFF RX=CTS */
98 #define DIO_FLOW_XON_XOFF 0x00000010 /* TX=XON/XOFF RX=XON/XOFF */
99 #define DIO_FLOW_XON_NO 0x00000008 /* TX=XON/XOFF RX=OFF */
100 #define DIO_FLOW_NO_CTS 0x00000004 /* TX=OFF RX=CTS */
101 #define DIO_FLOW_NO_XOFF 0x00000002 /* TX=OFF RX=XON/XOFF */
102 #define DIO_FLOW_NONE 0x00000001 /* TX=OFF RX=OFF */
103
104 /*
105 * Serial device flags
106 */
107 #define DIO_FLAG_SER_ESC 0x80000000 /* device supports esc seq detection */
108
109 /*
110 * MUX mode
111 */
112 #define DIO_MUX_I 0x00000008 /* advanced option with I frames */
113 #define DIO_MUX_UI 0x00000004 /* advanced option with UI frames */
114 #define DIO_MUX_UIH 0x00000002 /* advanced option with UIH frames */
115 #define DIO_MUX_BASIC 0x00000001 /* basic option */
116
117 /*
118 * Sleep Mode
119 */
120 #define DIO_SLEEP_ENABLE 0x01 /* enter sleep mode if possible */
121 #define DIO_SLEEP_DISABLE 0x02 /* do not enter sleep mode */
122
123 /*
124 * Special Guard Period
125 */
126 #define DIO_ESC_OFF 0x0000 /* turn escape sequence detection off */
127
128 /*
129 * Device Mode
130 */
131 #define DIO_MODE_MUX 0x00000002 /* acts as 27.010 multiplexer device */
132 #define DIO_MODE_SER 0x00000001 /* acts as serial device */
133
134 /*
135 * Control Type
136 */
137 #define DIO_CTRL_LINES 0x0001 /* associated structure is T_DIO_CTRL_LINES */
138 #define DIO_CTRL_MUX 0x0002 /* associated structure is T_DIO_CTRL_MUX */
139
140 /*
141 * Line State definition & control structure.
142 */
143 #define DIO_SA 0x80000000 /* state: read=DTR write-DSR */
144 #define DIO_SB 0x40000000 /* state: read=RTS write=DCD */
145 #define DIO_X 0x20000000 /* state: read=RTS write=CTS */
146 #define DIO_RING 0x10000000 /* state: ring indicator */
147 #define DIO_ESC 0x08000000 /* state: escape sequence detested. */
148 #define DIO_MUX_STOPPED 0x04000000 /* multiplexer stopped */
149 #define DIO_BRK 0x02000000 /* state: break received/to be sent */
150 #define DIO_BRKLEN 0x000000FF /* state: break signal # of characters */
151
152 /*==== TYPES ================================================================*/
153
154 /*
155 * Device Capabilities
156 */
157 typedef struct
158 {
159 U32 device_type;
160 U32 device_flags;
161 U16 mtu_control;
162 U16 mtu_data;
163 char const *driver_name;
164 } T_DIO_CAP;
165
166 typedef struct
167 {
168 U32 device_type;
169 U32 device_flags;
170 U16 mtu_control;
171 U16 mtu_data;
172 char const *driver_name;
173 U32 baudrate_auto;
174 U32 baudrate_fixed;
175 U32 char_frame;
176 U32 flow_control;
177 U32 ser_flags;
178 } T_DIO_CAP_SER;
179
180 typedef struct
181 {
182 U32 device_type;
183 U32 device_flags;
184 U16 mtu_control;
185 U16 mtu_data;
186 char const *driver_name;
187 U32 baudrate_auto;
188 U32 baudrate_fixed;
189 U32 char_frame;
190 U32 flow_control;
191 U32 ser_flags;
192 U32 mux_mode;
193 } T_DIO_CAP_SER_MUX;
194
195 typedef struct
196 {
197 U32 device_type;
198 U32 device_flags;
199 U16 mtu_control;
200 U16 mtu_data;
201 char const *driver_name;
202 } T_DIO_CAP_PKT;
203
204 /*
205 * Device Control Block
206 */
207 typedef struct
208 {
209 U32 device_type; /*< 0: 4> device identifier with general capability information */
210 U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */
211 U8 _align0; /*< 5: 1> alignment */
212 U8 _align1; /*< 6: 1> alignment */
213 U8 _align2; /*< 7: 1> alignment */
214 } T_DIO_DCB;
215
216 typedef struct
217 {
218 U32 device_type; /*< 0: 4> device identifier with general capability information */
219 U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */
220 U8 _align0; /*< 5: 1> alignment */
221 U8 _align1; /*< 6: 1> alignment */
222 U8 _align2; /*< 7: 1> alignment */
223 U32 baudrate; /*< 8: 4> user set baudrate */
224 U32 char_frame; /*< 12: 4> supported character framing */
225 U32 flow_control; /*< 16: 4> supported modes of flow control */
226 U8 xon; /*< 20: 1> set/reset XON for flow control */
227 U8 xoff; /*< 21: 1> set/reset XOFF for flow control */
228 U8 esc_char; /*< 22: 1> ASCII character which is used in an escape sequence */
229 U8 _align3; /*< 23: 1> alignment */
230 U16 guard_period; /*< 24: 2> duration value for escape sequence */
231 U8 _align4; /*< 26: 1> alignment */
232 U8 _align5; /*< 27: 1> alignment */
233 } T_DIO_DCB_SER;
234
235 typedef struct
236 {
237 U32 device_type; /*< 0: 4> device identifier with general capability information */
238 U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */
239 U8 _align0; /*< 5: 1> alignment */
240 U8 _align1; /*< 6: 1> alignment */
241 U8 _align2; /*< 7: 1> alignment */
242 U32 baudrate; /*< 8: 4> user set baudrate */
243 U32 char_frame; /*< 12: 4> supported character framing */
244 U32 flow_control; /*< 16: 4> supported modes of flow control */
245 U8 xon; /*< 20: 1> set/reset XON for flow control */
246 U8 xoff; /*< 21: 1> set/reset XOFF for flow control */
247 U8 esc_char; /*< 22: 1> ASCII character which is used in an escape sequence */
248 U8 _align3; /*< 23: 1> alignment */
249 U16 guard_period; /*< 24: 2> duration value for escape sequence */
250 U8 _align4; /*< 26: 1> alignment */
251 U8 _align5; /*< 27: 1> alignment */
252 U32 device_mode; /*< 28: 4> work mode of device */
253 U32 mux_mode; /*< 32: 4> supported multiplexer modes */
254 U16 n1; /*< 36: 2> max frame size of mux frame */
255 U8 n2; /*< 38: 1> max number of retransmissions */
256 U8 t1; /*< 39: 1> acknowledgement timer */
257 U8 t2; /*< 40: 1> response timer */
258 U8 t3; /*< 41: 1> wake up response timer */
259 U8 k; /*< 42: 1> windows size */
260 U8 _align6; /*< 43: 1> alignment */
261 } T_DIO_DCB_SER_MUX;
262
263 typedef struct
264 {
265 U32 device_type; /*< 0: 4> device identifier with general capability information */
266 U8 sleep_mode; /*< 4: 1> enter sleep mode is possible or not */
267 U8 _align0; /*< 5: 1> alignment */
268 U8 _align1; /*< 6: 1> alignment */
269 U8 _align2; /*< 7: 1> alignment */
270 } T_DIO_DCB_PKT;
271
272 /*
273 * Data Control
274 */
275 typedef struct
276 {
277 U16 control_type ;
278 U16 length ;
279 }T_DIO_CTRL ;
280
281 typedef struct
282 {
283 U16 control_type;
284 U16 length;
285 U32 state;
286 } T_DIO_CTRL_LINES;
287
288 typedef struct
289 {
290 U16 control_type ;
291 U16 length ;
292 U32 state;
293 }T_DIO_CTRL_MUX ;
294
295 /*
296 * DIO Data format.
297 */
298 typedef struct
299 {
300 U8 _align0; /*< 0: 1> alignment */
301 U8 _align1; /*< 1: 1> alignment */
302 U16 c_data; /*< 2: 2> counter */
303 U8 *ptr_data; /*< 4: 4> pointer to pointer to the first byte of the data buffer segment */
304 } T_dio_segment;
305
306 typedef struct
307 {
308 U16 length; /*< 0: 2> len of dio_ctrl */
309 U8 _align0; /*< 2: 1> alignment */
310 U8 c_dio_segment; /*< 3: 1> counter */
311 T_dio_segment *ptr_dio_segment; /*< 4: 4> pointer to Structured Element */
312 } T_dio_buffer;
313
314 /*==== PROTOTYPES ===========================================================*/
315
316 /*
317 +------------------------------------------------------------------------------
318 | Function : dio_init
319 +------------------------------------------------------------------------------
320 | Description : The function initializes the interface and the drivers.
321 |
322 | Parameters : none
323 |
324 | Return : DRV_OK - Initialization successful
325 | DRV_INITIALIZED - Interface already initialized
326 | DRV_INITFAILURE - Initialization failed
327 |
328 +------------------------------------------------------------------------------
329 */
330 extern U16 dio_init(void);
331
332 /*
333 +------------------------------------------------------------------------------
334 | Function : dio_user_init
335 +------------------------------------------------------------------------------
336 | Description : The function sets the signal callback of a DIO user.
337 |
338 | Parameters : user_name - DIO user name
339 | drv_handle - unique handle for this user
340 | signal_callback - callback function for this user
341 |
342 | Return : DRV_OK - Callback successfully set
343 | DRV_INVALID_PARAMS - The specified user does not exist
344 | DRV_INTERNAL_ERROR - Internal error
345 | DRV_NOTCONFIGURED - DIO interface is not yet initialized.
346 |
347 +------------------------------------------------------------------------------
348 */
349 extern U16 dio_user_init(char const * user_name,
350 U16 drv_handle,
351 T_DRV_CB_FUNC signal_callback);
352
353 /*
354 +------------------------------------------------------------------------------
355 | Function : dio_user_exit
356 +------------------------------------------------------------------------------
357 | Description : Termination of User Operation.
358 |
359 | Parameters : user_name - DIO user name
360 |
361 | Return : DRV_OK - User operation successfully terminated.
362 | DRV_INVALID_PARAMS - User operation can not be terminated yet.
363 | DRV_INTERNAL_ERROR - Internal error
364 |
365 +------------------------------------------------------------------------------
366 */
367 extern U16 dio_user_exit(char const * user_name);
368
369 /*
370 +------------------------------------------------------------------------------
371 | Function : dio_exit
372 +------------------------------------------------------------------------------
373 | Description : Termination of the Interface.
374 |
375 | Parameters : none
376 |
377 | Return : none
378 |
379 +------------------------------------------------------------------------------
380 */
381 extern void dio_exit(void);
382
383 /*
384 +------------------------------------------------------------------------------
385 | Function : dio_set_rx_buffer
386 +------------------------------------------------------------------------------
387 | Description : This function provides a receive buffer to the driver.
388 |
389 | Parameters : device - device number
390 | buffer - buffer to copy received data in it
391 |
392 | Return : DRV_OK - Function successful
393 | DRV_BUFFER_FULL - Buffer queue full.
394 | DRV_INVALID_PARAMS - The specified device does not exist or
395 | the data buffer is not big enough.
396 | DRV_INTERNAL_ERROR - Internal driver error
397 | DRV_NOTCONFIGURED - The device is not yet configured
398 |
399 +------------------------------------------------------------------------------
400 */
401 extern U16 dio_set_rx_buffer(U32 device,
402 T_dio_buffer * buffer);
403
404 /*
405 +------------------------------------------------------------------------------
406 | Function : dio_read
407 +------------------------------------------------------------------------------
408 | Description : This function returns a receive buffer and control information.
409 |
410 | Parameters : device - device number
411 | control_info - control information from the driver
412 | buffer - buffer with received data in it
413 |
414 | Return : DRV_OK - Function successful
415 | DRV_INVALID_PARAMS - The specified device does not exist
416 | DRV_INTERNAL_ERROR - Internal driver error
417 | DRV_NOTCONFIGURED - The device is not yet configured
418 |
419 +------------------------------------------------------------------------------
420 */
421 extern U16 dio_read(U32 device,
422 T_DIO_CTRL * control_info,
423 T_dio_buffer ** buffer);
424
425 /*
426 +------------------------------------------------------------------------------
427 | Function : dio_write
428 +------------------------------------------------------------------------------
429 | Description : This function provides a send buffer to the driver which
430 | contains data to send.
431 |
432 | Parameters : device - device number
433 | control_info - control information for the driver
434 | buffer - buffer with data to send
435 |
436 | Return : DRV_OK - Function successful
437 | DRV_BUFFER_FULL - Buffer queue full.
438 | DRV_INVALID_PARAMS - The specified device does not exist or
439 | the data buffer to big.
440 | DRV_INTERNAL_ERROR - Internal driver error
441 | DRV_NOTCONFIGURED - The device is not yet configured
442 |
443 +------------------------------------------------------------------------------
444 */
445 extern U16 dio_write(U32 device,
446 T_DIO_CTRL * control_info,
447 T_dio_buffer * buffer);
448
449 /*
450 +------------------------------------------------------------------------------
451 | Function : dio_get_tx_buffer
452 +------------------------------------------------------------------------------
453 | Description : This function returns a send buffer provided via dio_write().
454 |
455 | Parameters : device - device number
456 | buffer - return sent data buffer
457 |
458 | Return : DRV_OK - Function successful
459 | DRV_INVALID_PARAMS - The specified device does not exist
460 | DRV_INTERNAL_ERROR - Internal driver error
461 | DRV_NOTCONFIGURED - The device is not yet configured
462 |
463 +------------------------------------------------------------------------------
464 */
465 extern U16 dio_get_tx_buffer(U32 device,
466 T_dio_buffer ** buffer);
467
468 /*
469 +------------------------------------------------------------------------------
470 | Function : dio_clear
471 +------------------------------------------------------------------------------
472 | Description : This function is used to clear the hardware send buffer.
473 |
474 | Parameters : device - device number
475 |
476 | Return : DRV_OK - Function successful
477 | DRV_INVALID_PARAMS - The specified device does not exist
478 | DRV_INTERNAL_ERROR - Internal driver error
479 | DRV_NOTCONFIGURED - The device is not yet configured
480 | DRV_INPROCESS - The driver is busy clearing the buffer
481 |
482 +------------------------------------------------------------------------------
483 */
484 extern U16 dio_clear(U32 device);
485
486 /*
487 +------------------------------------------------------------------------------
488 | Function : dio_flush
489 +------------------------------------------------------------------------------
490 | Description : With this function the driver is requested to inform the
491 | user, when data of the hardware send buffer have been written
492 | successfully.
493 |
494 | Parameters : device - device number
495 |
496 | Return : DRV_OK - Function successful
497 | DRV_INVALID_PARAMS - The specified device does not exist
498 | DRV_INTERNAL_ERROR - Internal driver error
499 | DRV_NOTCONFIGURED - The device is not yet configured
500 | DRV_INPROCESS - The driver is busy flushing the buffer
501 |
502 +------------------------------------------------------------------------------
503 */
504 extern U16 dio_flush(U32 device);
505
506 /*
507 +------------------------------------------------------------------------------
508 | Function : dio_get_capabilities
509 +------------------------------------------------------------------------------
510 | Description : This function is used to retrieve the capabilities of a device.
511 |
512 | Parameters : device - device number
513 | capabilities - Return: Pointer to the device capabilities
514 |
515 | Return : DRV_OK - Function successful
516 | DRV_INVALID_PARAMS - The specified device does not exist
517 | DRV_INTERNAL_ERROR - Internal driver error
518 |
519 +------------------------------------------------------------------------------
520 */
521 extern U16 dio_get_capabilities(U32 device,
522 T_DIO_CAP ** capabilities);
523
524 /*
525 +------------------------------------------------------------------------------
526 | Function : dio_set_config
527 +------------------------------------------------------------------------------
528 | Description : This function is used to configure a device.
529 |
530 | Parameters : device - device number
531 | dcb - pointer to a device control block
532 |
533 | Return : DRV_OK - Function successful
534 | DRV_INVALID_PARAMS - parameter invalid or out of range
535 | DRV_INTERNAL_ERROR - Internal driver error
536 |
537 +------------------------------------------------------------------------------
538 */
539 extern U16 dio_set_config(U32 device,
540 T_DIO_DCB * dcb);
541
542 /*
543 +------------------------------------------------------------------------------
544 | Function : dio_get_config
545 +------------------------------------------------------------------------------
546 | Description : This function reads the device configuration.
547 |
548 | Parameters : device - device number
549 | dcb - pointer to a device control block
550 |
551 | Return : DRV_OK - Function successful
552 | DRV_INVALID_PARAMS - The specified device does not exist or
553 | wrong Device Control Block provided.
554 | DRV_INTERNAL_ERROR - Internal driver error
555 | DRV_NOTCONFIGURED - The device is not yet configured
556 |
557 +------------------------------------------------------------------------------
558 */
559 extern U16 dio_get_config(U32 device,
560 T_DIO_DCB * dcb);
561
562 /*
563 +------------------------------------------------------------------------------
564 | Function : dio_close_device
565 +------------------------------------------------------------------------------
566 | Description : This function is used to close a device.
567 |
568 | Parameters : device - device number
569 |
570 | Return : DRV_OK - Function successful
571 | DRV_INVALID_PARAMS - The specified device can not be closed yet
572 | DRV_INTERNAL_ERROR - Internal driver error
573 |
574 +------------------------------------------------------------------------------
575 */
576 extern U16 dio_close_device(U32 device);
577
578 #endif /* __DIO_H__ */