Modules/UDI - MEI working, used for nic
[tpg/acess2.git] / KernelLand / Modules / Interfaces / UDI / udi_lib / udi_nic.c
1 /**
2  * Acess2 UDI Layer
3  * - By John Hodge (thePowersGang)
4  *
5  * udi_lib/udi_nic.c
6  * - Network Interface metalanguage
7  */
8 #define DEBUG   1
9 #include <udi.h>
10 #include <udi_nic.h>
11 #include <acess.h>      // for EXPORT
12 #include <udi_internal.h>
13
14
15 extern udi_mei_init_t   udi_mei_info__nic;
16 #define udi_mei_info    udi_mei_info__nic
17
18 // === EXPORTS ===
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);
31 // - TX
32 EXPORT(udi_nsr_tx_rdy);
33 EXPORT(udi_nd_tx_req);
34 EXPORT(udi_nd_exp_tx_req);
35 // - RX
36 EXPORT(udi_nsr_rx_ind);
37 EXPORT(udi_nsr_exp_rx_ind);
38 EXPORT(udi_nd_rx_rdy);
39
40 // === GLOBALS ===
41 tUDI_MetaLang   cMetaLang_NIC = {
42         "udi_nic",
43         8,
44         {
45                 {0},
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},
53         }
54 };
55
56 // === CODE ===
57 // --- Control Ops ---
58 UDI_MEI_STUBS(udi_nd_bind_req, udi_nic_bind_cb_t,
59         2,
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 };
69
70 void udi_nd_unbind_req(udi_nic_cb_t *cb)
71 {
72         UNIMPLEMENTED();
73 }
74
75 void udi_nsr_unbind_ack(udi_nic_cb_t *cb, udi_status_t status)
76 {
77         UNIMPLEMENTED();
78 }
79
80 void udi_nd_enable_req(udi_nic_cb_t *cb)
81 {
82         UNIMPLEMENTED();
83 }
84
85 void udi_nsr_enable_ack(udi_nic_cb_t *cb, udi_status_t status)
86 {
87         UNIMPLEMENTED();
88 }
89
90 void udi_nd_disable_req(udi_nic_cb_t *cb)
91 {
92         UNIMPLEMENTED();
93 }
94
95 void udi_nd_ctrl_req(udi_nic_ctrl_cb_t *cb)
96 {
97         UNIMPLEMENTED();
98 }
99
100 void udi_nsr_ctrl_ack(udi_nic_ctrl_cb_t *cb, udi_status_t status)
101 {
102         UNIMPLEMENTED();
103 }
104
105 void udi_nsr_status_ind(udi_nic_status_cb_t *cb)
106 {
107         UNIMPLEMENTED();
108 }
109
110 void udi_nd_info_req(udi_nic_info_cb_t *cb, udi_boolean_t reset_statistics)
111 {
112         UNIMPLEMENTED();
113 }
114
115 void udi_nsr_info_ack(udi_nic_info_cb_t *cb)
116 {
117         UNIMPLEMENTED();
118 }
119
120 // --- TX ---
121 void udi_nsr_tx_rdy(udi_nic_tx_cb_t *cb)
122 {
123         UNIMPLEMENTED();
124 }
125
126 void udi_nd_tx_req(udi_nic_tx_cb_t *cb)
127 {
128         UNIMPLEMENTED();
129 }
130
131 void udi_nd_exp_tx_req(udi_nic_tx_cb_t *cb)
132 {
133         UNIMPLEMENTED();
134 }
135
136 // --- RX ---
137 UDI_MEI_STUBS(udi_nsr_rx_ind,     udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 1)
138 udi_layout_t    _udi_nsr_rx_ind_marshal_layout[] = { UDI_DL_END };
139 UDI_MEI_STUBS(udi_nsr_exp_rx_ind, udi_nic_rx_cb_t, 0, (), (), (), UDI_NSR_RX_OPS_NUM, 2)
140 udi_layout_t    _udi_nsr_exp_rx_ind_marshal_layout[] = { UDI_DL_END };
141 UDI_MEI_STUBS(udi_nd_rx_rdy, udi_nic_rx_cb_t, 0, (), (), (), UDI_ND_RX_OPS_NUM, 1)
142 udi_layout_t    _udi_nd_rx_rdy_marshal_layout[] = { UDI_DL_END };
143
144 #define UDI__OPS_NUM    0
145 #define MEI_OPINFO(name,cat,flags,cbtype,rsp_ops,rsp_idx,err_ops,err_idx)       \
146         {#name, UDI_MEI_OPCAT_##cat,flags,UDI_##cbtype##_CB_NUM, \
147                 UDI_##rsp_ops##_OPS_NUM,rsp_idx,UDI_##err_ops##_OPS_NUM,err_idx, \
148                 name##_direct, name##_backend, _##cbtype##_cb_layout, _##name##_marshal_layout }
149
150 udi_layout_t    _NIC_BIND_cb_layout[] = {
151         UDI_DL_UBIT8_T, // media_type
152         UDI_DL_UBIT32_T,        // min_pdu_size
153         UDI_DL_UBIT32_T,
154         UDI_DL_UBIT32_T,
155         UDI_DL_UBIT32_T,
156         UDI_DL_UBIT8_T, // max_perfect_multicast
157         UDI_DL_UBIT8_T,
158         UDI_DL_UBIT8_T, // mac_addr_len
159         UDI_DL_ARRAY,   // mac_addr
160                 UDI_NIC_MAC_ADDRESS_SIZE,
161                 UDI_DL_UBIT8_T,
162                 UDI_DL_END,
163         UDI_DL_END
164 };
165 udi_layout_t    _NIC_RX_cb_layout[] = {
166         UDI_DL_CB,      // chain
167         UDI_DL_BUF, 0, 0, 0,    // rx_buf
168         UDI_DL_UBIT8_T, // rx_status
169         UDI_DL_UBIT8_T, // addr_match
170         UDI_DL_UBIT8_T, // rx_valid
171         UDI_DL_END
172 };
173
174 udi_mei_op_template_t   udi_mei_info__nic__nd_ctrl_ops[] = {
175         MEI_OPINFO(udi_nd_bind_req, REQ, 0, NIC_BIND, NSR_CTRL,1, ,0),
176         {0} 
177 };
178 udi_mei_op_template_t   udi_mei_info__nic__nsr_ctrl_ops[] = {
179         MEI_OPINFO(udi_nsr_bind_ack, ACK, 0, NIC_BIND, ,0, ,0),
180         {0}
181 };
182 udi_mei_op_template_t   udi_mei_info__nic__nd_tx_ops[] = {
183         {0}
184 };
185 udi_mei_op_template_t   udi_mei_info__nic__nsr_tx_ops[] = {
186         {0}
187 };
188 udi_mei_op_template_t   udi_mei_info__nic__nd_rx_ops[] = {
189         MEI_OPINFO(udi_nd_rx_rdy, RDY, 0, NIC_RX, ,0, ,0),
190         {0}
191 };
192 udi_mei_op_template_t   udi_mei_info__nic__nsr_rx_ops[] = {
193         MEI_OPINFO(udi_nsr_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
194         MEI_OPINFO(udi_nsr_exp_rx_ind, IND, 0, NIC_RX, ND_RX,1, ,0),
195         {0}
196 };
197
198 udi_mei_ops_vec_template_t      udi_mei_info__nic_ops[] = {
199         {UDI_ND_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_ctrl_ops},
200         {UDI_NSR_CTRL_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_mei_info__nic__nsr_ctrl_ops},
201         {UDI_ND_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_tx_ops},
202         {UDI_NSR_TX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_tx_ops},
203         {UDI_ND_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_INITIATOR, udi_mei_info__nic__nd_rx_ops},
204         {UDI_NSR_RX_OPS_NUM, UDI_MEI_REL_EXTERNAL, udi_mei_info__nic__nsr_rx_ops},
205         {0}
206 };
207 udi_mei_init_t  udi_mei_info__nic = {
208         udi_mei_info__nic_ops,
209         NULL
210 };

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