3 * - By John Hodge (thePowersGang)
6 * - Network Interface metalanguage
11 #include <acess.h> // for EXPORT
12 #include <udi_internal.h>
15 extern udi_mei_init_t udi_mei_info__nic;
16 #define udi_mei_info udi_mei_info__nic
19 EXPORT(udi_nd_bind_req);
20 EXPORT(udi_nsr_bind_ack);
21 EXPORT(udi_nd_unbind_req);
22 EXPORT(udi_nsr_unbind_ack);
23 EXPORT(udi_nd_enable_req);
24 EXPORT(udi_nsr_enable_ack);
25 EXPORT(udi_nd_disable_req);
26 EXPORT(udi_nd_ctrl_req);
27 EXPORT(udi_nsr_ctrl_ack);
28 EXPORT(udi_nsr_status_ind);
29 EXPORT(udi_nd_info_req);
30 EXPORT(udi_nsr_info_ack);
32 EXPORT(udi_nsr_tx_rdy);
33 EXPORT(udi_nd_tx_req);
34 EXPORT(udi_nd_exp_tx_req);
36 EXPORT(udi_nsr_rx_ind);
37 EXPORT(udi_nsr_exp_rx_ind);
38 EXPORT(udi_nd_rx_rdy);
41 // --- Control Ops ---
42 // ND - Network Device
43 UDI_MEI_STUBS(udi_nd_bind_req, udi_nic_bind_cb_t,
44 2, (tx_chan_index, rx_chan_index), (udi_index_t, udi_index_t), (UDI_VA_INDEX_T, UDI_VA_INDEX_T),
45 UDI_ND_CTRL_OPS_NUM, 1)
46 udi_layout_t _udi_nd_bind_req_marshal_layout[] = { UDI_DL_INDEX_T, UDI_DL_INDEX_T, UDI_DL_END };
48 UDI_MEI_STUBS(udi_nd_unbind_req, udi_nic_cb_t,
50 UDI_ND_CTRL_OPS_NUM, 2)
51 udi_layout_t _udi_nd_unbind_req_marshal_layout[] = { UDI_DL_END };
53 UDI_MEI_STUBS(udi_nd_enable_req, udi_nic_cb_t,
55 UDI_ND_CTRL_OPS_NUM, 3)
56 udi_layout_t _udi_nd_enable_req_marshal_layout[] = { UDI_DL_END };
58 UDI_MEI_STUBS(udi_nd_disable_req, udi_nic_cb_t,
60 UDI_ND_CTRL_OPS_NUM, 4)
61 udi_layout_t _udi_nd_disable_req_marshal_layout[] = { UDI_DL_END };
63 UDI_MEI_STUBS(udi_nd_ctrl_req, udi_nic_ctrl_cb_t,
65 UDI_ND_CTRL_OPS_NUM, 5)
66 udi_layout_t _udi_nd_ctrl_req_marshal_layout[] = { UDI_DL_END };
68 UDI_MEI_STUBS(udi_nd_info_req, udi_nic_info_cb_t,
69 1, (reset_statistics), (udi_boolean_t), (UDI_VA_BOOLEAN_T),
70 UDI_ND_CTRL_OPS_NUM, 6)
71 udi_layout_t _udi_nd_info_req_marshal_layout[] = { UDI_DL_BOOLEAN_T, UDI_DL_END };
73 // NSR - Network Service Requester
74 UDI_MEI_STUBS(udi_nsr_bind_ack, udi_nic_bind_cb_t,
75 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
76 UDI_NSR_CTRL_OPS_NUM, 1)
77 udi_layout_t _udi_nsr_bind_ack_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
79 UDI_MEI_STUBS(udi_nsr_unbind_ack, udi_nic_cb_t,
80 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
81 UDI_NSR_CTRL_OPS_NUM, 2)
82 udi_layout_t _udi_nsr_unbind_ack_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
84 UDI_MEI_STUBS(udi_nsr_enable_ack, udi_nic_cb_t,
85 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
86 UDI_NSR_CTRL_OPS_NUM, 3)
87 udi_layout_t _udi_nsr_enable_ack_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
89 UDI_MEI_STUBS(udi_nsr_ctrl_ack, udi_nic_ctrl_cb_t,
90 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
91 UDI_NSR_CTRL_OPS_NUM, 4)
92 udi_layout_t _udi_nsr_ctrl_ack_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
94 UDI_MEI_STUBS(udi_nsr_status_ind, udi_nic_status_cb_t,
96 UDI_NSR_CTRL_OPS_NUM, 5)
97 udi_layout_t _udi_nsr_status_ind_marshal_layout[] = { UDI_DL_END };
99 UDI_MEI_STUBS(udi_nsr_info_ack, udi_nic_info_cb_t,
101 UDI_NSR_CTRL_OPS_NUM, 6)
102 udi_layout_t _udi_nsr_info_ack_marshal_layout[] = { UDI_DL_END };
105 UDI_MEI_STUBS(udi_nsr_tx_rdy, udi_nic_tx_cb_t, 0, (), (), (), UDI_NSR_TX_OPS_NUM, 1);
106 udi_layout_t _udi_nsr_tx_rdy_marshal_layout[] = { UDI_DL_END };
107 UDI_MEI_STUBS(udi_nd_tx_req, udi_nic_tx_cb_t, 0, (), (), (), UDI_ND_TX_OPS_NUM, 1);
108 udi_layout_t _udi_nd_tx_req_marshal_layout[] = { UDI_DL_END };
109 UDI_MEI_STUBS(udi_nd_exp_tx_req, udi_nic_tx_cb_t, 0, (), (), (), UDI_ND_TX_OPS_NUM, 2);
110 udi_layout_t _udi_nd_exp_tx_req_marshal_layout[] = { UDI_DL_END };
113 UDI_MEI_STUBS(udi_nsr_rx_ind, udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 1)
114 udi_layout_t _udi_nsr_rx_ind_marshal_layout[] = { UDI_DL_END };
115 UDI_MEI_STUBS(udi_nsr_exp_rx_ind, udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 2)
116 udi_layout_t _udi_nsr_exp_rx_ind_marshal_layout[] = { UDI_DL_END };
117 UDI_MEI_STUBS(udi_nd_rx_rdy, udi_nic_rx_cb_t, 0, (), (), (), UDI_ND_RX_OPS_NUM, 1)
118 udi_layout_t _udi_nd_rx_rdy_marshal_layout[] = { UDI_DL_END };
120 #define UDI__OPS_NUM 0
121 #define MEI_OPINFO(name,cat,flags,cbtype,rsp_ops,rsp_idx,err_ops,err_idx) \
122 {#name, UDI_MEI_OPCAT_##cat,flags,UDI_##cbtype##_CB_NUM, \
123 UDI_##rsp_ops##_OPS_NUM,rsp_idx,UDI_##err_ops##_OPS_NUM,err_idx, \
124 name##_direct, name##_backend, _##cbtype##_cb_layout, _##name##_marshal_layout }
126 // 1: UDI_NIC_STD_CB_NUM
127 udi_layout_t _NIC_STD_cb_layout[] = {
130 // 2: UDI_NIC_BIND_CB_NUM
131 udi_layout_t _NIC_BIND_cb_layout[] = {
132 UDI_DL_UBIT8_T, // media_type
133 UDI_DL_UBIT32_T, // min_pdu_size
137 UDI_DL_UBIT8_T, // max_perfect_multicast
139 UDI_DL_UBIT8_T, // mac_addr_len
140 UDI_DL_ARRAY, // mac_addr
141 UDI_NIC_MAC_ADDRESS_SIZE,
146 // 3: UDI_NIC_CTRL_CB_NUM
147 udi_layout_t _NIC_CTRL_cb_layout[] = {
148 UDI_DL_UBIT8_T, // command
149 UDI_DL_UBIT32_T, // indicator
150 UDI_DL_BUF, 0,0,0, // data_buf
154 // 4: UDI_NIC_STATUS_CB_NUM
155 udi_layout_t _NIC_STATUS_cb_layout[] = {
159 // 5: UDI_NIC_INFO_CB_NUM
160 udi_layout_t _NIC_INFO_cb_layout[] = {
161 UDI_DL_BOOLEAN_T, // interface_is_active
162 UDI_DL_BOOLEAN_T, // link_is_active
163 UDI_DL_BOOLEAN_T, // is_full_duplex
164 UDI_DL_UBIT32_T, // link_mbps
165 UDI_DL_UBIT32_T, // link_bps
166 UDI_DL_UBIT32_T, // tx_packets
167 UDI_DL_UBIT32_T, // rx_packets
168 UDI_DL_UBIT32_T, // tx_errors
169 UDI_DL_UBIT32_T, // rx_errors
170 UDI_DL_UBIT32_T, // tx_discards
171 UDI_DL_UBIT32_T, // rx_discards
172 UDI_DL_UBIT32_T, // tx_underrun
173 UDI_DL_UBIT32_T, // rx_underrun
174 UDI_DL_UBIT32_T, // collisions
177 // 6: UDI_NIC_RX_CB_NUM
178 udi_layout_t _NIC_RX_cb_layout[] = {
180 UDI_DL_BUF, 0, 0, 0, // rx_buf
181 UDI_DL_UBIT8_T, // rx_status
182 UDI_DL_UBIT8_T, // addr_match
183 UDI_DL_UBIT8_T, // rx_valid
186 // 7: UDI_NIC_TX_CB_NUM
187 udi_layout_t _NIC_TX_cb_layout[] = {
189 UDI_DL_BUF, 0, 0, 0, // tx_buf
190 UDI_DL_BOOLEAN_T, // completion_urgent
194 udi_mei_op_template_t udi_mei_info__nic__nd_ctrl_ops[] = {
195 MEI_OPINFO(udi_nd_bind_req, REQ, 0, NIC_BIND, NSR_CTRL,1, ,0),
196 MEI_OPINFO(udi_nd_unbind_req, REQ, 0, NIC_STD, NSR_CTRL,2, ,0),
197 MEI_OPINFO(udi_nd_enable_req, REQ, 0, NIC_STD, NSR_CTRL,3, ,0),
198 MEI_OPINFO(udi_nd_disable_req, REQ, 0, NIC_STD, ,0, ,0),
199 MEI_OPINFO(udi_nd_ctrl_req, REQ, 0, NIC_CTRL, NSR_CTRL,4, ,0),
200 MEI_OPINFO(udi_nd_info_req, REQ, 0, NIC_INFO, NSR_CTRL,5, ,0),
203 udi_mei_op_template_t udi_mei_info__nic__nsr_ctrl_ops[] = {
204 MEI_OPINFO(udi_nsr_bind_ack, ACK, 0, NIC_BIND, ,0, ,0),
205 MEI_OPINFO(udi_nsr_unbind_ack, ACK, 0, NIC_STD, ,0, ,0),
206 MEI_OPINFO(udi_nsr_enable_ack, ACK, 0, NIC_STD, ,0, ,0),
207 MEI_OPINFO(udi_nsr_ctrl_ack, ACK, 0, NIC_CTRL, ,0, ,0),
208 MEI_OPINFO(udi_nsr_info_ack, ACK, 0, NIC_INFO, ,0, ,0),
209 MEI_OPINFO(udi_nsr_status_ind, IND, 0, NIC_INFO, ,0, ,0),
212 udi_mei_op_template_t udi_mei_info__nic__nd_tx_ops[] = {
213 MEI_OPINFO(udi_nd_tx_req, REQ, 0, NIC_TX, NSR_TX,1, ,0),
214 MEI_OPINFO(udi_nd_exp_tx_req, REQ, 0, NIC_TX, NSR_TX,1, ,0),
217 udi_mei_op_template_t udi_mei_info__nic__nsr_tx_ops[] = {
218 MEI_OPINFO(udi_nsr_tx_rdy, RDY, 0, NIC_TX, ,0, ,0),
221 udi_mei_op_template_t udi_mei_info__nic__nd_rx_ops[] = {
222 MEI_OPINFO(udi_nd_rx_rdy, RDY, 0, NIC_RX, ,0, ,0),
225 udi_mei_op_template_t udi_mei_info__nic__nsr_rx_ops[] = {
226 MEI_OPINFO(udi_nsr_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
227 MEI_OPINFO(udi_nsr_exp_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
231 udi_mei_ops_vec_template_t udi_mei_info__nic_ops[] = {
232 {UDI_ND_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_ctrl_ops},
233 {UDI_NSR_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_mei_info__nic__nsr_ctrl_ops},
234 {UDI_ND_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_tx_ops},
235 {UDI_NSR_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_tx_ops},
236 {UDI_ND_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_rx_ops},
237 {UDI_NSR_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_rx_ops},
240 udi_mei_init_t udi_mei_info__nic = {
241 udi_mei_info__nic_ops,
245 tUDI_MetaLang cMetaLang_NIC = {
251 {sizeof(udi_nic_cb_t), 0, _NIC_STD_cb_layout},
252 {sizeof(udi_nic_bind_cb_t), 0, _NIC_BIND_cb_layout},
253 {sizeof(udi_nic_ctrl_cb_t), 0, _NIC_CTRL_cb_layout},
254 {sizeof(udi_nic_status_cb_t), 0, _NIC_STATUS_cb_layout},
255 {sizeof(udi_nic_info_cb_t), 0, _NIC_INFO_cb_layout},
256 {sizeof(udi_nic_tx_cb_t), offsetof(udi_nic_tx_cb_t, chain), _NIC_TX_cb_layout},
257 {sizeof(udi_nic_rx_cb_t), offsetof(udi_nic_rx_cb_t, chain), _NIC_RX_cb_layout},