equal
deleted
inserted
replaced
90 ec_eoe_t *eoe, /**< EoE handler */ |
90 ec_eoe_t *eoe, /**< EoE handler */ |
91 ec_slave_t *slave /**< EtherCAT slave */ |
91 ec_slave_t *slave /**< EtherCAT slave */ |
92 ) |
92 ) |
93 { |
93 { |
94 ec_eoe_t **priv; |
94 ec_eoe_t **priv; |
95 int result, i; |
95 int i, ret = 0; |
96 char name[EC_DATAGRAM_NAME_SIZE]; |
96 char name[EC_DATAGRAM_NAME_SIZE]; |
97 |
97 |
98 eoe->slave = slave; |
98 eoe->slave = slave; |
99 |
99 |
100 ec_datagram_init(&eoe->datagram); |
100 ec_datagram_init(&eoe->datagram); |
129 |
129 |
130 snprintf(eoe->datagram.name, EC_DATAGRAM_NAME_SIZE, name); |
130 snprintf(eoe->datagram.name, EC_DATAGRAM_NAME_SIZE, name); |
131 |
131 |
132 if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))) { |
132 if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))) { |
133 EC_ERR("Unable to allocate net_device %s for EoE handler!\n", name); |
133 EC_ERR("Unable to allocate net_device %s for EoE handler!\n", name); |
|
134 ret = -ENODEV; |
134 goto out_return; |
135 goto out_return; |
135 } |
136 } |
136 |
137 |
137 // initialize net_device |
138 // initialize net_device |
138 eoe->dev->open = ec_eoedev_open; |
139 eoe->dev->open = ec_eoedev_open; |
154 #if 0 |
155 #if 0 |
155 eoe->dev->mtu = slave->sii.rx_mailbox_size - ETH_HLEN - 10; |
156 eoe->dev->mtu = slave->sii.rx_mailbox_size - ETH_HLEN - 10; |
156 #endif |
157 #endif |
157 |
158 |
158 // connect the net_device to the kernel |
159 // connect the net_device to the kernel |
159 if ((result = register_netdev(eoe->dev))) { |
160 ret = register_netdev(eoe->dev); |
160 EC_ERR("Unable to register net_device: error %i\n", result); |
161 if (ret) { |
|
162 EC_ERR("Unable to register net_device: error %i\n", ret); |
161 goto out_free; |
163 goto out_free; |
162 } |
164 } |
163 |
165 |
164 // make the last address octet unique |
166 // make the last address octet unique |
165 eoe->dev->dev_addr[ETH_ALEN - 1] = (uint8_t) eoe->dev->ifindex; |
167 eoe->dev->dev_addr[ETH_ALEN - 1] = (uint8_t) eoe->dev->ifindex; |
167 |
169 |
168 out_free: |
170 out_free: |
169 free_netdev(eoe->dev); |
171 free_netdev(eoe->dev); |
170 eoe->dev = NULL; |
172 eoe->dev = NULL; |
171 out_return: |
173 out_return: |
172 return -1; |
174 return ret; |
173 } |
175 } |
174 |
176 |
175 /*****************************************************************************/ |
177 /*****************************************************************************/ |
176 |
178 |
177 /** |
179 /** |
270 } |
272 } |
271 } |
273 } |
272 printk("\n"); |
274 printk("\n"); |
273 #endif |
275 #endif |
274 |
276 |
275 if (!(data = ec_slave_mbox_prepare_send(eoe->slave, &eoe->datagram, |
277 data = ec_slave_mbox_prepare_send(eoe->slave, &eoe->datagram, |
276 0x02, current_size + 4))) |
278 0x02, current_size + 4); |
277 return -1; |
279 if (IS_ERR(data)) |
|
280 return PTR_ERR(data); |
278 |
281 |
279 EC_WRITE_U8 (data, 0x00); // eoe fragment req. |
282 EC_WRITE_U8 (data, 0x00); // eoe fragment req. |
280 EC_WRITE_U8 (data + 1, last_fragment); |
283 EC_WRITE_U8 (data + 1, last_fragment); |
281 EC_WRITE_U16(data + 2, ((eoe->tx_fragment_number & 0x3F) | |
284 EC_WRITE_U16(data + 2, ((eoe->tx_fragment_number & 0x3F) | |
282 (complete_offset & 0x3F) << 6 | |
285 (complete_offset & 0x3F) << 6 | |
413 eoe->stats.rx_errors++; |
416 eoe->stats.rx_errors++; |
414 eoe->state = ec_eoe_state_tx_start; |
417 eoe->state = ec_eoe_state_tx_start; |
415 return; |
418 return; |
416 } |
419 } |
417 |
420 |
418 if (!(data = ec_slave_mbox_fetch(eoe->slave, &eoe->datagram, |
421 data = ec_slave_mbox_fetch(eoe->slave, &eoe->datagram, |
419 &mbox_prot, &rec_size))) { |
422 &mbox_prot, &rec_size); |
|
423 if (IS_ERR(data)) { |
420 eoe->stats.rx_errors++; |
424 eoe->stats.rx_errors++; |
421 eoe->state = ec_eoe_state_tx_start; |
425 eoe->state = ec_eoe_state_tx_start; |
422 return; |
426 return; |
423 } |
427 } |
424 |
428 |