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

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