Modules/UDI - Adding PCI and MEI headers
[tpg/acess2.git] / KernelLand / Modules / Interfaces / UDI / include / udi_nic.h
1 /*
2  * Acess2 UDI Environment (NIC Bindings)
3  * - By John Hodge (thePowersGang)
4  *
5  * udi_nic.h
6  * - NIC Bindings core
7  */
8 #ifndef _UDI_NIC_H_
9 #define _UDI_NIC_H_
10
11 // === CBs ===
12 #define UDI_NIC_STD_CB_NUM      1
13 #define UDI_NIC_BIND_CB_NUM     2
14 #define UDI_NIC_CTRL_CB_NUM     3
15 #define UDI_NIC_STATUS_CB_NUM   4
16 #define UDI_NIC_INFO_CB_NUM     5
17 #define UDI_NIC_TX_CB_NUM       6
18 #define UDI_NIC_RX_CB_NUM       7
19
20 typedef struct {
21         udi_cb_t        gcb;
22 } udi_nic_cb_t;
23
24 #define UDI_NIC_MAC_ADDRESS_SIZE        20
25 // Media type
26 #define UDI_NIC_ETHER           0
27 #define UDI_NIC_TOKEN           1
28 #define UDI_NIC_FASTETHER       2
29 #define UDI_NIC_GIGETHER        3
30 #define UDI_NIC_VGANYLAN        4
31 #define UDI_NIC_FDDI            5
32 #define UDI_NIC_ATM             6
33 #define UDI_NIC_FC              7
34 #define UDI_NIC_MISCMEDIA       0xff
35 // capabilities
36 #define UDI_NIC_CAP_TX_IP_CKSUM         (1U<<0)
37 #define UDI_NIC_CAP_TX_TCP_CKSUM        (1U<<1)
38 #define UDI_NIC_CAP_TX_UDP_CKSUM        (1U<<2)
39 #define UDI_NIC_CAP_MCAST_LOOPBK        (1U<<3)
40 #define UDI_NIC_CAP_BCAST_LOOPBK        (1U<<4)
41 // capabilities (requests)
42 #define UDI_NIC_CAP_USE_TX_CKSUM        (1U<<30)
43 #define UDI_NIC_CAP_USE_RX_CKSUM        (1U<<31)
44 typedef struct {
45         udi_cb_t        gcb;
46         udi_ubit8_t     media_type;
47         udi_ubit32_t    min_pdu_size;
48         udi_ubit32_t    max_pdu_size;
49         udi_ubit32_t    rx_hw_threshold;
50         udi_ubit32_t    capabilities;
51         udi_ubit8_t     max_perfect_multicast;
52         udi_ubit8_t     max_total_multicast;
53         udi_ubit8_t     mac_addr_len;
54         udi_ubit8_t     mac_addr[UDI_NIC_MAC_ADDRESS_SIZE];
55 } udi_nic_bind_cb_t;
56
57 // commands
58 #define UDI_NIC_ADD_MULTI       1
59 #define UDI_NIC_DEL_MULTI       2
60 #define UDI_NIC_ALLMULTI_ON     3
61 #define UDI_NIC_ALLMULTI_OFF    4
62 #define UDI_NIC_GET_CURR_MAC    5
63 #define UDI_NIC_SET_CURR_MAC    6
64 #define UDI_NIC_GET_FACT_MAC    7
65 #define UDI_NIC_PROMISC_ON      8
66 #define UDI_NIC_PROMISC_OFF     9
67 #define UDI_NIC_HW_RESET        10
68 #define UDI_NIC_BAD_RXPKT       11
69 typedef struct {
70         udi_cb_t        gcb;
71         udi_ubit8_t     command;
72         udi_ubit32_t    indicator;
73         udi_buf_t       *data_buf;
74 } udi_nic_ctrl_cb_t;
75
76 // event
77 #define UDI_NIC_LINK_DOWN       0
78 #define UDI_NIC_LINK_UP         1
79 #define UDI_NIC_LINK_RESET      2
80 typedef struct {
81         udi_cb_t        gcb;
82         udi_ubit8_t     event;
83 } udi_nic_status_cb_t;
84
85 typedef struct {
86         udi_cb_t gcb;
87         udi_boolean_t   interface_is_active;
88         udi_boolean_t   link_is_active;
89         udi_boolean_t   is_full_duplex;
90         udi_ubit32_t    link_mbps;
91         udi_ubit32_t    link_bps;
92         udi_ubit32_t    tx_packets;
93         udi_ubit32_t    rx_packets;
94         udi_ubit32_t    tx_errors;
95         udi_ubit32_t    rx_errors;
96         udi_ubit32_t    tx_discards;
97         udi_ubit32_t    rx_discards;
98         udi_ubit32_t    tx_underrun;
99         udi_ubit32_t    rx_overrun;
100         udi_ubit32_t    collisions;
101 } udi_nic_info_cb_t;
102
103 typedef struct udi_nic_tx_cb_s {
104         udi_cb_t        gcb;
105         struct udi_nic_tx_cb_s  *chain;
106         udi_buf_t       *tx_buf;
107         udi_boolean_t   completion_urgent;
108 } udi_nic_tx_cb_t;
109
110 // rx_status
111 #define UDI_NIC_RX_BADCKSUM     (1U<<0)
112 #define UDI_NIC_RX_UNDERRUN     (1U<<1)
113 #define UDI_NIC_RX_OVERRUN      (1U<<2)
114 #define UDI_NIC_RX_DRIBBLE      (1U<<3)
115 #define UDI_NIC_RX_FRAME_ERR    (1U<<4)
116 #define UDI_NIC_RX_MAC_ERR      (1U<<5)
117 #define UDI_NIC_RX_OTHER_ERR    (1U<<7)
118 // addr_match
119 #define UDI_NIC_RX_UNKNOWN      0
120 #define UDI_NIC_RX_EXACT        1
121 #define UDI_NIC_RX_HASH         2
122 #define UDI_NIC_RX_BROADCAST    3
123 // rx_valid
124 #define UDI_NIC_RX_GOOD_IP_CKSUM        (1U<<0)
125 #define UDI_NIC_RX_GOOD_TCP_CKSUM       (1U<<1)
126 #define UDI_NIC_RX_GOOD_UDP_CKSUM       (1U<<2)
127 typedef struct udi_nic_rx_cb_s {
128         udi_cb_t        gcb;
129         struct udi_nic_rx_cb_s  *chain;
130         udi_buf_t       *rx_buf;
131         udi_ubit8_t     rx_status;
132         udi_ubit8_t     addr_match;
133         udi_ubit8_t     rx_valid;
134 } udi_nic_rx_cb_t;
135
136 // === Function Types ===
137 // - Control
138 typedef void    udi_nd_bind_req_op_t(udi_nic_bind_cb_t *cb, udi_index_t tx_chan_index, udi_index_t rx_chan_index);
139 typedef void    udi_nsr_bind_ack_op_t(udi_nic_bind_cb_t *cb, udi_status_t status);
140 typedef void    udi_nd_unbind_req_op_t(udi_nic_cb_t *cb);
141 typedef void    udi_nsr_unbind_ack_op_t(udi_nic_cb_t *cb, udi_status_t status);
142 typedef void    udi_nd_enable_req_op_t(udi_nic_cb_t *cb);
143 typedef void    udi_nsr_enable_ack_op_t(udi_nic_cb_t *cb, udi_status_t status);
144 typedef void    udi_nd_disable_req_op_t(udi_nic_cb_t *cb);
145 typedef void    udi_nsr_disable_ack_op_t(udi_nic_cb_t *cb, udi_status_t status);
146 typedef void    udi_nd_ctrl_req_op_t(udi_nic_ctrl_cb_t *cb);
147 typedef void    udi_nsr_ctrl_ack_op_t(udi_nic_ctrl_cb_t *cb, udi_status_t status);
148 typedef void    udi_nsr_status_ind_op_t(udi_nic_status_cb_t *cb);
149 typedef void    udi_nd_info_req_op_t(udi_nic_info_cb_t *cb, udi_boolean_t reset_statistics);
150 typedef void    udi_nsr_info_ack_op_t(udi_nic_info_cb_t *cb);
151 // - TX
152 typedef void    udi_nsr_tx_rdy_op_t(udi_nic_tx_cb_t *cb);
153 typedef void    udi_nd_tx_req_op_t(udi_nic_tx_cb_t *cb);
154 typedef void    udi_nd_exp_tx_req_op_t(udi_nic_tx_cb_t *cb);
155 // - RX
156 typedef void    udi_nsr_rx_ind_op_t(udi_nic_rx_cb_t *cb);
157 typedef void    udi_nsr_exp_rx_ind_op_t(udi_nic_rx_cb_t *cb);
158 typedef void    udi_nd_rx_rdy_op_t(udi_nic_rx_cb_t *cb);
159
160 // === Functions ===
161 // - Control
162 extern udi_nd_bind_req_op_t     udi_nd_bind_req;
163 extern udi_nsr_bind_ack_op_t    udi_nsr_bind_ack;
164 extern udi_nd_unbind_req_op_t udi_nd_unbind_req;
165 extern udi_nsr_unbind_ack_op_t udi_nsr_unbind_ack;
166 extern udi_nd_enable_req_op_t udi_nd_enable_req;
167 extern udi_nsr_enable_ack_op_t udi_nsr_enable_ack;
168 extern udi_nd_disable_req_op_t udi_nd_disable_req;
169 extern udi_nsr_disable_ack_op_t udi_nsr_disable_ack;
170 extern udi_nd_ctrl_req_op_t udi_nd_ctrl_req;
171 extern udi_nsr_ctrl_ack_op_t udi_nsr_ctrl_ack;
172 extern udi_nsr_status_ind_op_t udi_nsr_status_ind;
173 extern udi_nd_info_req_op_t udi_nd_info_req;
174 extern udi_nsr_info_ack_op_t udi_nsr_info_ack;
175 // - TX
176 extern udi_nsr_tx_rdy_op_t udi_nsr_tx_rdy;
177 extern udi_nd_tx_req_op_t udi_nd_tx_req;
178 extern udi_nd_exp_tx_req_op_t udi_nd_exp_tx_req;
179 // - RX
180 extern udi_nsr_rx_ind_op_t udi_nsr_rx_ind;
181 extern udi_nsr_exp_rx_ind_op_t udi_nsr_exp_rx_ind;
182 extern udi_nd_rx_rdy_op_t udi_nd_rx_rdy;
183
184 // === Op Lists ==
185 #define UDI_ND_CTRL_OPS_NUM     1
186 #define UDI_ND_TX_OPS_NUM       2
187 #define UDI_ND_RX_OPS_NUM       3
188 #define UDI_NSR_CTRL_OPS_NUM    4
189 #define UDI_NSR_TX_OPS_NUM      5
190 #define UDI_NSR_RX_OPS_NUM      6
191
192 typedef const struct {
193         udi_channel_event_ind_op_t      *channel_event_ind_op;
194         udi_nd_bind_req_op_t    *nd_bind_req_op;
195         udi_nd_unbind_req_op_t  *nd_unbind_req_op;
196         udi_nd_enable_req_op_t  *nd_enable_req_op;
197         udi_nd_disable_req_op_t *nd_disable_req_op;
198         udi_nd_ctrl_req_op_t    *nd_ctrl_req_op;
199         udi_nd_info_req_op_t    *nd_info_req_op;
200 } udi_nd_ctrl_ops_t;
201
202 typedef const struct {
203         udi_channel_event_ind_op_t      *channel_event_ind_op;
204         udi_nd_tx_req_op_t      *nd_tx_req_op;
205         udi_nd_exp_tx_req_op_t  *nd_exp_tx_req_op;
206 } udi_nd_tx_ops_t;
207
208 typedef const struct {
209         udi_channel_event_ind_op_t      *channel_event_ind_op;
210         udi_nd_rx_rdy_op_t      *nd_rx_rdy_op;
211 } udi_nd_rx_ops_t;
212
213 typedef const struct {
214         udi_channel_event_ind_op_t      *channel_event_ind_op;
215         udi_nsr_bind_ack_op_t   *nsr_bind_ack_op;
216         udi_nsr_unbind_ack_op_t *nsr_unbind_ack_op;
217         udi_nsr_enable_ack_op_t *nsr_enable_ack_op;
218         udi_nsr_ctrl_ack_op_t   *nsr_ctrl_ack_op;
219         udi_nsr_info_ack_op_t   *nsr_info_ack_op;
220         udi_nsr_status_ind_op_t *nsr_status_ind_op;
221 } udi_nsr_ctrl_ops_t;
222
223 typedef const struct {
224         udi_channel_event_ind_op_t      *channel_event_ind_op;
225         udi_nsr_tx_rdy_op_t     *nsr_tx_rdy_op;
226 } udi_nsr_tx_ops_t;
227
228 typedef const struct {
229         udi_channel_event_ind_op_t      *channel_event_ind_op;
230         udi_nsr_rx_ind_op_t     *nsr_rx_ind_op;
231         udi_nsr_exp_rx_ind_op_t *nsr_exp_rx_ind_op;
232 } udi_nsr_rx_ops_t;
233
234 #endif
235

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