d4e58aa34fb5326d7d04cf0c3d72f67c6a54a73f
[tpg/acess2.git] / UDI / drivers / net_ne2000 / ne2000_common.h
1 /*
2  * UDI Ne2000 NIC Driver
3  * By John Hodge (thePowersGang)
4  *
5  * ne2000_common.h
6  * - Shared definitions
7  */
8 #ifndef _NE2000_COMMON_H_
9 #define _NE2000_COMMON_H_
10
11 #define UDI_VERSION     0x101
12 #define UDI_PHYSIO_VERSION      0x101
13 #define UDI_PCI_VERSION 0x101
14 #define UDI_NIC_VERSION 0x101
15
16 #include <udi.h>
17 #include <udi_physio.h>
18 #include <udi_pci.h>
19 #include <udi_nic.h>
20
21 #include "ne2000_hw.h"
22
23 #define ARRAY_SIZEOF(arr)       (sizeof(arr)/sizeof(arr[0]))
24
25 enum {
26         NE2K_PIO_RESET,
27         NE2K_PIO_ENABLE,
28         NE2K_PIO_RX,
29         NE2K_PIO_IRQACK,
30         NE2K_PIO_TX,
31         N_NE2K_PIO
32 };
33
34 typedef struct
35 {
36         udi_init_context_t      init_context;
37
38         udi_cb_t        *active_cb;
39
40         udi_intr_attach_cb_t    *intr_attach_cb;
41
42         struct {
43                 udi_index_t     pio_index;
44                 udi_index_t     n_intr_event_cb;
45         
46                 udi_index_t     rx_chan_index;
47         } init;
48         
49         udi_pio_handle_t        pio_handles[N_NE2K_PIO];
50         udi_channel_t   interrupt_channel;
51         udi_channel_t   rx_channel;
52         udi_channel_t   tx_channel;
53         
54         udi_nic_rx_cb_t *rx_next_cb;
55         udi_nic_rx_cb_t *rx_last_cb;
56         udi_ubit8_t     rx_next_page;
57         
58         udi_ubit8_t     macaddr[6];
59 } ne2k_rdata_t;
60
61 // === MACROS ===
62 /* Copied from http://projectudi.cvs.sourceforge.net/viewvc/projectudi/udiref/driver/udi_dpt/udi_dpt.h */
63 #define DPT_SET_ATTR_BOOLEAN(attr, name, val)   \
64                 udi_strcpy((attr)->attr_name, (name)); \
65                 (attr)->attr_type = UDI_ATTR_BOOLEAN; \
66                 (attr)->attr_length = sizeof(udi_boolean_t); \
67                 UDI_ATTR32_SET((attr)->attr_value, (val))
68
69 #define DPT_SET_ATTR32(attr, name, val) \
70                 udi_strcpy((attr)->attr_name, (name)); \
71                 (attr)->attr_type = UDI_ATTR_UBIT32; \
72                 (attr)->attr_length = sizeof(udi_ubit32_t); \
73                 UDI_ATTR32_SET((attr)->attr_value, (val))
74
75 #define DPT_SET_ATTR_ARRAY8(attr, name, val, len) \
76                 udi_strcpy((attr)->attr_name, (name)); \
77                 (attr)->attr_type = UDI_ATTR_ARRAY8; \
78                 (attr)->attr_length = (len); \
79                 udi_memcpy((attr)->attr_value, (val), (len))
80
81 #define DPT_SET_ATTR_STRING(attr, name, val, len) \
82                 udi_strcpy((attr)->attr_name, (name)); \
83                 (attr)->attr_type = UDI_ATTR_STRING; \
84                 (attr)->attr_length = (len); \
85                 udi_strncpy_rtrim((char *)(attr)->attr_value, (val), (len))
86 #define NE2K_SET_ATTR_STRFMT(attr, name, maxlen, fmt, ...) \
87                 udi_strcpy((attr)->attr_name, (name)); \
88                 (attr)->attr_type = UDI_ATTR_STRING; \
89                 (attr)->attr_length = udi_snprintf((char *)(attr)->attr_value, (maxlen), (fmt) ,## __VA_ARGS__ )
90
91 extern udi_usage_ind_op_t       ne2k_usage_ind;
92 extern udi_enumerate_req_op_t   ne2k_enumerate_req;
93 extern udi_devmgmt_req_op_t     ne2k_devmgmt_req;
94 extern udi_final_cleanup_req_op_t       ne2k_final_cleanup_req;
95
96 extern udi_channel_event_ind_op_t       ne2k_bus_dev_channel_event_ind;
97 extern udi_bus_bind_ack_op_t    ne2k_bus_dev_bus_bind_ack;
98 extern udi_pio_map_call_t       ne2k_bus_dev_bind__pio_map;
99 extern udi_channel_spawn_call_t ne2k_bus_dev_bind__intr_chanel;
100 extern udi_cb_alloc_call_t      ne2k_bus_dev_bind__intr_attach;
101 extern udi_bus_unbind_ack_op_t  ne2k_bus_dev_bus_unbind_ack;
102 extern udi_intr_attach_ack_op_t ne2k_bus_dev_intr_attach_ack;
103 extern udi_cb_alloc_call_t      ne2k_bus_dev_bind__intr_event_cb;
104 extern udi_pio_trans_call_t     ne2k_bus_dev_bind__card_reset;
105 extern udi_intr_detach_ack_op_t ne2k_bus_dev_intr_detach_ack;
106
107 extern udi_channel_event_ind_op_t       ne2k_nd_ctrl_channel_event_ind;
108 extern udi_nd_bind_req_op_t     ne2k_nd_ctrl_bind_req;
109 extern udi_channel_spawn_call_t ne2k_nd_ctrl_bind__tx_chan_ok;
110 extern udi_channel_spawn_call_t ne2k_nd_ctrl_bind__rx_chan_ok;
111 extern udi_nd_unbind_req_op_t   ne2k_nd_ctrl_unbind_req;
112 extern udi_nd_enable_req_op_t   ne2k_nd_ctrl_enable_req;
113 extern udi_pio_trans_call_t     ne2k_nd_ctrl_enable_req__trans_done;
114 extern udi_nd_disable_req_op_t  ne2k_nd_ctrl_disable_req;
115 extern udi_nd_ctrl_req_op_t     ne2k_nd_ctrl_ctrl_req;
116 extern udi_nd_info_req_op_t     ne2k_nd_ctrl_info_req;
117
118 extern udi_channel_event_ind_op_t       ne2k_nd_tx_channel_event_ind;
119 extern udi_nd_tx_req_op_t       ne2k_nd_tx_tx_req;
120 extern udi_nd_exp_tx_req_op_t   ne2k_nd_tx_exp_tx_req;
121
122 extern udi_channel_event_ind_op_t       ne2k_nd_rx_channel_event_ind;
123 extern udi_nd_rx_rdy_op_t       ne2k_nd_rx_rx_rdy;
124
125 extern udi_channel_event_ind_op_t       ne2k_bus_irq_channel_event_ind;
126 extern udi_intr_event_ind_op_t  ne2k_bus_irq_intr_event_ind;
127
128 extern void     ne2k_intr__rx_ok(udi_cb_t *gcb);
129
130 #endif
131

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