equal
deleted
inserted
replaced
69 device->module = module; |
69 device->module = module; |
70 |
70 |
71 device->open = 0; |
71 device->open = 0; |
72 device->link_state = 0; // down |
72 device->link_state = 0; // down |
73 |
73 |
|
74 #ifdef EC_DBG_IF |
74 if (ec_debug_init(&device->dbg)) { |
75 if (ec_debug_init(&device->dbg)) { |
75 EC_ERR("Failed to init debug device!\n"); |
76 EC_ERR("Failed to init debug device!\n"); |
76 goto out_return; |
77 goto out_return; |
77 } |
78 } |
|
79 #endif |
78 |
80 |
79 if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) { |
81 if (!(device->tx_skb = dev_alloc_skb(ETH_FRAME_LEN))) { |
80 EC_ERR("Error allocating device socket buffer!\n"); |
82 EC_ERR("Error allocating device socket buffer!\n"); |
|
83 #ifdef EC_DBG_IF |
81 goto out_debug; |
84 goto out_debug; |
|
85 #else |
|
86 goto out_return; |
|
87 #endif |
82 } |
88 } |
83 |
89 |
84 device->tx_skb->dev = net_dev; |
90 device->tx_skb->dev = net_dev; |
85 |
91 |
86 // add Ethernet-II-header |
92 // add Ethernet-II-header |
90 memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len); |
96 memcpy(eth->h_source, net_dev->dev_addr, net_dev->addr_len); |
91 memset(eth->h_dest, 0xFF, net_dev->addr_len); |
97 memset(eth->h_dest, 0xFF, net_dev->addr_len); |
92 |
98 |
93 return 0; |
99 return 0; |
94 |
100 |
|
101 #ifdef EC_DBG_IF |
95 out_debug: |
102 out_debug: |
96 ec_debug_clear(&device->dbg); |
103 ec_debug_clear(&device->dbg); |
|
104 #endif |
97 out_return: |
105 out_return: |
98 return -1; |
106 return -1; |
99 } |
107 } |
100 |
108 |
101 /*****************************************************************************/ |
109 /*****************************************************************************/ |
106 |
114 |
107 void ec_device_clear(ec_device_t *device /**< EtherCAT device */) |
115 void ec_device_clear(ec_device_t *device /**< EtherCAT device */) |
108 { |
116 { |
109 if (device->open) ec_device_close(device); |
117 if (device->open) ec_device_close(device); |
110 if (device->tx_skb) dev_kfree_skb(device->tx_skb); |
118 if (device->tx_skb) dev_kfree_skb(device->tx_skb); |
|
119 #ifdef EC_DBG_IF |
111 ec_debug_clear(&device->dbg); |
120 ec_debug_clear(&device->dbg); |
|
121 #endif |
112 } |
122 } |
113 |
123 |
114 /*****************************************************************************/ |
124 /*****************************************************************************/ |
115 |
125 |
116 /** |
126 /** |
199 if (unlikely(device->master->debug_level > 1)) { |
209 if (unlikely(device->master->debug_level > 1)) { |
200 EC_DBG("sending frame:\n"); |
210 EC_DBG("sending frame:\n"); |
201 ec_print_data(device->tx_skb->data + ETH_HLEN, size); |
211 ec_print_data(device->tx_skb->data + ETH_HLEN, size); |
202 } |
212 } |
203 |
213 |
|
214 #ifdef EC_DBG_IF |
204 ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size); |
215 ec_debug_send(&device->dbg, device->tx_skb->data, ETH_HLEN + size); |
|
216 #endif |
205 |
217 |
206 // start sending |
218 // start sending |
207 device->dev->hard_start_xmit(device->tx_skb, device->dev); |
219 device->dev->hard_start_xmit(device->tx_skb, device->dev); |
208 } |
220 } |
209 |
221 |
241 EC_DBG("Received frame:\n"); |
253 EC_DBG("Received frame:\n"); |
242 ec_print_data_diff(device->tx_skb->data + ETH_HLEN, |
254 ec_print_data_diff(device->tx_skb->data + ETH_HLEN, |
243 data + ETH_HLEN, size - ETH_HLEN); |
255 data + ETH_HLEN, size - ETH_HLEN); |
244 } |
256 } |
245 |
257 |
|
258 #ifdef EC_DBG_IF |
246 ec_debug_send(&device->dbg, data, size); |
259 ec_debug_send(&device->dbg, data, size); |
|
260 #endif |
247 |
261 |
248 ec_master_receive_datagrams(device->master, |
262 ec_master_receive_datagrams(device->master, |
249 data + ETH_HLEN, |
263 data + ETH_HLEN, |
250 size - ETH_HLEN); |
264 size - ETH_HLEN); |
251 } |
265 } |