UDI/ne2000 - Working on a NE2k driver for UDI testing
[tpg/acess2.git] / UDI / drivers / net_ne2000 / ne2000_core.c
1 /*
2  * UDI Ne2000 NIC Driver
3  * By John Hodge (thePowersGang)
4  *
5  * ne2000_core.c
6  * - UDI initialisation 
7  */
8 #include <udi.h>
9 #include <udi_nic.h>
10 #include "ne2000_common.h"
11
12 #define NE2K_META_BUS   1
13 #define NE2K_META_NIC   2
14
15 // === CODE ===
16 // --- Management
17 void ne2k_usage_ind(udi_usage_cb_t *cb, udi_ubit8_t resource_level)
18 {
19 }
20 void ne2k_enumerate_req(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level)
21 {
22         udi_instance_attr_list_t *attr_list = cb->attr_list;
23         
24         switch(enumeration_level)
25         {
26         case UDI_ENUMERATE_START:
27         case UDI_ENUMERATE_START_RESCAN:
28                 // TODO: Emit the ND binding
29                 DPT_SET_ATTR32(attr_list, "if_num", 0);
30                 attr_list ++;
31                 DPT_SET_ATTR_STRING(attr_list, "if_media", "eth");
32                 attr_list ++;
33                 //DPT_SET_ATTR_STRING(attr_list, "identifier", hexaddr);
34                 //attr_list ++;
35                 udi_enumerate_ack(cb, UDI_ENUMERATE_OK, 2);
36                 break
37         case UDI_ENUMERATE_NEXT:
38                 udi_enumerate_ack(cb, UDI_ENUMERATE_DONE, 0);
39                 break;
40         }
41 }
42 void ne2k_devmgmt_req(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID)
43 {
44 }
45 void ne2k_final_cleanup_req(udi_mgmt_cb_t *cb)
46 {
47 }
48 // --- Bus
49 void ne2k_bus_dev_channel_event_ind(udi_channel_event_cb_t *cb)
50 {
51 }
52 void ne2k_bus_dev_bus_bind_ack(udi_bus_bind_cb_t *cb,
53         udi_dma_constraints_t dma_constraints, udi_ubit8_t perferred_endianness, udi_status_t status)
54 {
55 }
56 void ne2k_bus_dev_bus_unbind_ack(udi_bus_bind_cb_t *cb)
57 {
58 }
59 void ne2k_bus_dev_intr_attach_ack(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status)
60 {
61 }
62 void ne2k_bus_dev_intr_detach_ack(udi_intr_detach_cb_t *intr_detach_cb)
63 {
64 }
65 // --- ND Common
66 void ne2k_nd_ctrl_channel_event_ind(udi_channel_event_cb_t *cb)
67 {
68 }
69 void ne2k_nd_ctrl_bind_req(udi_nic_bind_cb_t *cb, udi_index_t tx_chan_index, udi_index_t rx_chan_index)
70 {
71 }
72 void ne2k_nd_ctrl_unbind_req(udi_nic_cb_t *cb)
73 {
74 }
75 void ne2k_nd_ctrl_enable_req(udi_nic_cb_t *cb)
76 {
77 }
78 void ne2k_nd_ctrl_disable_req(udi_nic_cb_t *cb)
79 {
80 }
81 void ne2k_nd_ctrl_ctrl_req(udi_nic_ctrl_cb_t *cb)
82 {
83 }
84 void ne2k_nd_ctrl_info_req(udi_nic_info_cb_t *cb, udi_boolean_t reset_statistics)
85 {
86 }
87
88 // === Definition structures ===
89 udi_mgmt_ops_t  ne2k_mgmt_ops = {
90         ne2k_usage_ind,
91         ne2k_enumerate_req,
92         ne2k_devmgmt_req,
93         ne2k_final_cleanup_req
94 };
95 udi_ubit8_t     ne2k_mgmt_op_flags[4] = {0,0,0,0};
96 udi_bus_device_ops_t    ne2k_bus_dev_ops = {
97         ne2k_bus_dev_channel_event_ind,
98         ne2k_bus_dev_bus_bind_ack,
99         ne2k_bus_dev_bus_unbind_ack,
100         ne2k_bus_dev_intr_attach_ack,
101         ne2k_bus_dev_intr_detach_ack
102 };
103 udi_ubit8_t     ne2k_bus_dev_ops_flags[5] = {0};
104 udi_nd_ctrl_ops_t       ne2k_nd_ctrl_ops = {
105         ne2k_nd_ctrl_channel_event_ind,
106         ne2k_nd_ctrl_bind_req,
107         ne2k_nd_ctrl_unbind_req,
108         ne2k_nd_ctrl_enable_req,
109         ne2k_nd_ctrl_disable_req,
110         ne2k_nd_ctrl_ctrl_req,
111         ne2k_nd_ctrl_info_req
112 };
113 udi_ubit8_t     ne2k_nd_ctrl_ops_flags[7] = {0};
114 udi_nd_tx_ops   ne2k_nd_tx_ops = {
115         ne2k_nd_tx_channel_event_ind,
116         ne2k_nd_tx_tx_req,
117         ne2k_nd_tx_exp_tx_req
118 };
119 udi_ubit8_t     ne2k_nd_tx_ops_flags[3] = {0};
120 udi_nd_rx_ops   ne2k_nd_rx_ops = {
121         ne2k_nd_rx_channel_event_ind,
122         ne2k_nd_rx_rx_rdy
123 };
124 udi_ubit8_t     ne2k_nd_rx_ops_flags[2] = {0};
125 const udi_primary_init_t        ne2k_pri_init = {
126         .mgmt_ops = &ne2k_mgmt_ops,
127         .mgmt_op_flags = ne2k_mgmt_op_flags,
128         .mgmt_scratch_requirement = 0,
129         .enumeration_attr_list_length = 4,
130         .rdata_size = sizeof(ne2k_rdata_t),
131         .child_data_size = 0,
132         .per_parent_paths = 0
133 };
134 const udi_ops_init_t    ne2k_ops_list[] = {
135         {
136                 1, NE2K_META_BUS, UDI_BUS_DEVICE_OPS_NUM,
137                 0,
138                 (udi_ops_vector_t*)ne2k_bus_dev_ops,
139                 ne2k_bus_dev_ops_flags
140         },
141         {
142                 2, NE2K_META_NIC, UDI_ND_CTRL_OPS_NUM,
143                 0,
144                 (udi_ops_vector_t*)ne2k_nd_ctrl_ops,
145                 ne2k_nd_ctrl_ops_flags
146         },
147         {
148                 3, NE2K_META_NIC, UDI_ND_TX_OPS_NUM,
149                 0,
150                 (udi_ops_vector_t*)ne2k_nd_tx_ops,
151                 ne2k_nd_tx_ops_flags
152         },
153         {
154                 4, NE2K_META_NIC, UDI_ND_RX_OPS_NUM,
155                 0,
156                 (udi_ops_vector_t*)ne2k_nd_rx_ops,
157                 ne2k_nd_rx_ops_flags
158         },
159         {0}
160 }
161 const udi_init_t        udi_init_info = {
162         .primary_init_info = &ne2k_pri_init,
163         .ops_init_list = ne2k_ops_list
164 };

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