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 tUDI_MetaLang cMetaLang_NIC = {
46 {sizeof(udi_nic_cb_t), NULL},
47 {sizeof(udi_nic_bind_cb_t), NULL},
48 {sizeof(udi_nic_ctrl_cb_t), NULL},
49 {sizeof(udi_nic_status_cb_t), NULL},
50 {sizeof(udi_nic_info_cb_t), NULL},
51 {sizeof(udi_nic_tx_cb_t), NULL},
52 {sizeof(udi_nic_rx_cb_t), NULL},
57 // --- Control Ops ---
58 UDI_MEI_STUBS(udi_nd_bind_req, udi_nic_bind_cb_t,
60 (tx_chan_index, rx_chan_index),
61 (udi_index_t, udi_index_t),
62 (UDI_VA_INDEX_T, UDI_VA_INDEX_T),
63 UDI_ND_CTRL_OPS_NUM, 1)
64 udi_layout_t _udi_nd_bind_req_marshal_layout[] = { UDI_DL_INDEX_T, UDI_DL_INDEX_T, UDI_DL_END };
65 UDI_MEI_STUBS(udi_nsr_bind_ack, udi_nic_bind_cb_t,
66 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
67 UDI_NSR_CTRL_OPS_NUM, 1)
68 udi_layout_t _udi_nsr_bind_ack_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
70 void udi_nd_unbind_req(udi_nic_cb_t *cb)
75 void udi_nsr_unbind_ack(udi_nic_cb_t *cb, udi_status_t status)
80 void udi_nd_enable_req(udi_nic_cb_t *cb)
85 void udi_nsr_enable_ack(udi_nic_cb_t *cb, udi_status_t status)
90 void udi_nd_disable_req(udi_nic_cb_t *cb)
95 void udi_nd_ctrl_req(udi_nic_ctrl_cb_t *cb)
100 void udi_nsr_ctrl_ack(udi_nic_ctrl_cb_t *cb, udi_status_t status)
105 void udi_nsr_status_ind(udi_nic_status_cb_t *cb)
110 void udi_nd_info_req(udi_nic_info_cb_t *cb, udi_boolean_t reset_statistics)
115 void udi_nsr_info_ack(udi_nic_info_cb_t *cb)
121 UDI_MEI_STUBS(udi_nsr_tx_rdy, udi_nic_tx_cb_t, 0, (), (), (), UDI_NSR_TX_OPS_NUM, 1);
122 udi_layout_t _udi_nsr_tx_rdy_marshal_layout[] = { UDI_DL_END };
123 UDI_MEI_STUBS(udi_nd_tx_req, udi_nic_tx_cb_t, 0, (), (), (), UDI_ND_TX_OPS_NUM, 1);
124 udi_layout_t _udi_nd_tx_req_marshal_layout[] = { UDI_DL_END };
125 UDI_MEI_STUBS(udi_nd_exp_tx_req, udi_nic_tx_cb_t, 0, (), (), (), UDI_ND_TX_OPS_NUM, 2);
126 udi_layout_t _udi_nd_exp_tx_req_marshal_layout[] = { UDI_DL_END };
129 UDI_MEI_STUBS(udi_nsr_rx_ind, udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 1)
130 udi_layout_t _udi_nsr_rx_ind_marshal_layout[] = { UDI_DL_END };
131 UDI_MEI_STUBS(udi_nsr_exp_rx_ind, udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 2)
132 udi_layout_t _udi_nsr_exp_rx_ind_marshal_layout[] = { UDI_DL_END };
133 UDI_MEI_STUBS(udi_nd_rx_rdy, udi_nic_rx_cb_t, 0, (), (), (), UDI_ND_RX_OPS_NUM, 1)
134 udi_layout_t _udi_nd_rx_rdy_marshal_layout[] = { UDI_DL_END };
136 #define UDI__OPS_NUM 0
137 #define MEI_OPINFO(name,cat,flags,cbtype,rsp_ops,rsp_idx,err_ops,err_idx) \
138 {#name, UDI_MEI_OPCAT_##cat,flags,UDI_##cbtype##_CB_NUM, \
139 UDI_##rsp_ops##_OPS_NUM,rsp_idx,UDI_##err_ops##_OPS_NUM,err_idx, \
140 name##_direct, name##_backend, _##cbtype##_cb_layout, _##name##_marshal_layout }
142 udi_layout_t _NIC_BIND_cb_layout[] = {
143 UDI_DL_UBIT8_T, // media_type
144 UDI_DL_UBIT32_T, // min_pdu_size
148 UDI_DL_UBIT8_T, // max_perfect_multicast
150 UDI_DL_UBIT8_T, // mac_addr_len
151 UDI_DL_ARRAY, // mac_addr
152 UDI_NIC_MAC_ADDRESS_SIZE,
157 udi_layout_t _NIC_RX_cb_layout[] = {
159 UDI_DL_BUF, 0, 0, 0, // rx_buf
160 UDI_DL_UBIT8_T, // rx_status
161 UDI_DL_UBIT8_T, // addr_match
162 UDI_DL_UBIT8_T, // rx_valid
165 udi_layout_t _NIC_TX_cb_layout[] = {
167 UDI_DL_BUF, 0, 0, 0, // tx_buf
168 UDI_DL_BOOLEAN_T, // completion_urgent
172 udi_mei_op_template_t udi_mei_info__nic__nd_ctrl_ops[] = {
173 MEI_OPINFO(udi_nd_bind_req, REQ, 0, NIC_BIND, NSR_CTRL,1, ,0),
176 udi_mei_op_template_t udi_mei_info__nic__nsr_ctrl_ops[] = {
177 MEI_OPINFO(udi_nsr_bind_ack, ACK, 0, NIC_BIND, ,0, ,0),
180 udi_mei_op_template_t udi_mei_info__nic__nd_tx_ops[] = {
181 MEI_OPINFO(udi_nd_tx_req, REQ, 0, NIC_TX, NSR_TX,1, ,0),
182 MEI_OPINFO(udi_nd_exp_tx_req, REQ, 0, NIC_TX, NSR_TX,1, ,0),
185 udi_mei_op_template_t udi_mei_info__nic__nsr_tx_ops[] = {
186 MEI_OPINFO(udi_nsr_tx_rdy, RDY, 0, NIC_TX, ,0, ,0),
189 udi_mei_op_template_t udi_mei_info__nic__nd_rx_ops[] = {
190 MEI_OPINFO(udi_nd_rx_rdy, RDY, 0, NIC_RX, ,0, ,0),
193 udi_mei_op_template_t udi_mei_info__nic__nsr_rx_ops[] = {
194 MEI_OPINFO(udi_nsr_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
195 MEI_OPINFO(udi_nsr_exp_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
199 udi_mei_ops_vec_template_t udi_mei_info__nic_ops[] = {
200 {UDI_ND_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_ctrl_ops},
201 {UDI_NSR_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_mei_info__nic__nsr_ctrl_ops},
202 {UDI_ND_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_tx_ops},
203 {UDI_NSR_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_tx_ops},
204 {UDI_ND_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_rx_ops},
205 {UDI_NSR_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_rx_ops},
208 udi_mei_init_t udi_mei_info__nic = {
209 udi_mei_info__nic_ops,