UDI/16c550 - TX working, RX in progress
[tpg/acess2.git] / UDI / drivers / uart_16c550 / uart16c550_common.h
1 #ifndef _UART16C550_COMMON_H_
2 #define _UART16C550_COMMON_H_
3
4 enum {
5         UART_OPS_DEV = 1,
6         UART_OPS_IRQ,
7         UART_OPS_GIO,
8 };
9
10 enum {
11         UART_CB_BUS_BIND = 1,
12         UART_CB_INTR,
13         UART_CB_INTR_EVENT,
14 };
15
16 enum {
17         PIO_RESET,
18         PIO_TX,
19         PIO_INTR,
20         N_PIO
21 };
22
23 #define RX_BUFFER_SIZE  32
24
25 typedef struct {
26         udi_init_context_t      init_context;
27
28         udi_cb_t        *active_cb;
29         struct {
30                 udi_index_t     pio_index;
31         } init;
32         
33         udi_pio_handle_t        pio_handles[N_PIO];
34         udi_channel_t   interrupt_channel;
35         
36         udi_ubit8_t     rx_bytes;
37         udi_buf_t       *rx_buffer;
38 } rdata_t;
39
40 // === MACROS ===
41 /* Copied from http://projectudi.cvs.sourceforge.net/viewvc/projectudi/udiref/driver/udi_dpt/udi_dpt.h */
42 #define DPT_SET_ATTR_BOOLEAN(attr, name, val)   \
43                 udi_strcpy((attr)->attr_name, (name)); \
44                 (attr)->attr_type = UDI_ATTR_BOOLEAN; \
45                 (attr)->attr_length = sizeof(udi_boolean_t); \
46                 UDI_ATTR32_SET((attr)->attr_value, (val))
47
48 #define DPT_SET_ATTR32(attr, name, val) \
49                 udi_strcpy((attr)->attr_name, (name)); \
50                 (attr)->attr_type = UDI_ATTR_UBIT32; \
51                 (attr)->attr_length = sizeof(udi_ubit32_t); \
52                 UDI_ATTR32_SET((attr)->attr_value, (val))
53
54 #define DPT_SET_ATTR_ARRAY8(attr, name, val, len) \
55                 udi_strcpy((attr)->attr_name, (name)); \
56                 (attr)->attr_type = UDI_ATTR_ARRAY8; \
57                 (attr)->attr_length = (len); \
58                 udi_memcpy((attr)->attr_value, (val), (len))
59
60 #define DPT_SET_ATTR_STRING(attr, name, val, len) \
61                 udi_strcpy((attr)->attr_name, (name)); \
62                 (attr)->attr_type = UDI_ATTR_STRING; \
63                 (attr)->attr_length = (len); \
64                 udi_strncpy_rtrim((char *)(attr)->attr_value, (val), (len))
65 #define NE2K_SET_ATTR_STRFMT(attr, name, maxlen, fmt, v...) \
66                 udi_strcpy((attr)->attr_name, (name)); \
67                 (attr)->attr_type = UDI_ATTR_STRING; \
68                 (attr)->attr_length = udi_snprintf((char *)(attr)->attr_value, (maxlen), (fmt) ,## v )
69
70
71 #endif

UCC git Repository :: git.ucc.asn.au