253 // complete size in 32 bit blocks, rounded up. |
253 // complete size in 32 bit blocks, rounded up. |
254 complete_offset = remaining_size / 32 + 1; |
254 complete_offset = remaining_size / 32 + 1; |
255 } |
255 } |
256 |
256 |
257 #if EOE_DEBUG_LEVEL > 0 |
257 #if EOE_DEBUG_LEVEL > 0 |
258 EC_DBG("EoE TX sending %sfragment %i with %i octets (%i)." |
258 EC_INFO("EoE %s TX sending fragment %i%s with %i octets (%i)." |
259 " %i frames queued.\n", last_fragment ? "last " : "", |
259 " %i frames queued.\n", eoe->dev->name, eoe->tx_fragment_number, |
260 eoe->tx_fragment_number, current_size, complete_offset, |
260 last_fragment ? "" : "+", current_size, complete_offset, |
261 eoe->tx_queued_frames); |
261 eoe->tx_queued_frames); |
262 #endif |
262 #endif |
263 |
263 |
264 #if EOE_DEBUG_LEVEL > 1 |
264 #if EOE_DEBUG_LEVEL > 1 |
265 EC_DBG(""); |
265 EC_INFO(""); |
266 for (i = 0; i < current_size; i++) { |
266 for (i = 0; i < current_size; i++) { |
267 printk("%02X ", eoe->tx_frame->skb->data[eoe->tx_offset + i]); |
267 printk("%02X ", eoe->tx_frame->skb->data[eoe->tx_offset + i]); |
268 if ((i + 1) % 16 == 0) { |
268 if ((i + 1) % 16 == 0) { |
269 printk("\n"); |
269 printk("\n"); |
270 EC_DBG(""); |
270 EC_INFO(""); |
271 } |
271 } |
272 } |
272 } |
273 printk("\n"); |
273 printk("\n"); |
274 #endif |
274 #endif |
275 |
275 |
432 |
432 |
433 frame_type = EC_READ_U16(data) & 0x000F; |
433 frame_type = EC_READ_U16(data) & 0x000F; |
434 |
434 |
435 if (frame_type != 0x00) { |
435 if (frame_type != 0x00) { |
436 #if EOE_DEBUG_LEVEL > 0 |
436 #if EOE_DEBUG_LEVEL > 0 |
437 EC_DBG("other frame received.\n"); |
437 EC_INFO("EoE %s: Other frame received.\n", eoe->dev->name); |
438 #endif |
438 #endif |
439 eoe->stats.rx_dropped++; |
439 eoe->stats.rx_dropped++; |
440 eoe->state = ec_eoe_state_tx_start; |
440 eoe->state = ec_eoe_state_tx_start; |
441 return; |
441 return; |
442 } |
442 } |
448 fragment_number = EC_READ_U16(data + 2) & 0x003F; |
448 fragment_number = EC_READ_U16(data + 2) & 0x003F; |
449 fragment_offset = (EC_READ_U16(data + 2) >> 6) & 0x003F; |
449 fragment_offset = (EC_READ_U16(data + 2) >> 6) & 0x003F; |
450 frame_number = (EC_READ_U16(data + 2) >> 12) & 0x000F; |
450 frame_number = (EC_READ_U16(data + 2) >> 12) & 0x000F; |
451 |
451 |
452 #if EOE_DEBUG_LEVEL > 0 |
452 #if EOE_DEBUG_LEVEL > 0 |
453 EC_DBG("EoE RX fragment %i, offset %i, frame %i%s%s," |
453 EC_INFO("EoE %s RX fragment %i%s, offset %i, frame %i%s," |
454 " %i octets\n", fragment_number, fragment_offset, |
454 " %i octets\n", eoe->dev->name, fragment_number, |
455 frame_number, |
455 last_fragment ? "" : "+", fragment_offset, frame_number, |
456 last_fragment ? ", last fragment" : "", |
|
457 time_appended ? ", + timestamp" : "", |
456 time_appended ? ", + timestamp" : "", |
458 time_appended ? rec_size - 8 : rec_size - 4); |
457 time_appended ? rec_size - 8 : rec_size - 4); |
459 #endif |
458 #endif |
460 |
459 |
461 #if EOE_DEBUG_LEVEL > 1 |
460 #if EOE_DEBUG_LEVEL > 1 |
462 EC_DBG(""); |
461 EC_INFO(""); |
463 for (i = 0; i < rec_size - 4; i++) { |
462 for (i = 0; i < rec_size - 4; i++) { |
464 printk("%02X ", data[i + 4]); |
463 printk("%02X ", data[i + 4]); |
465 if ((i + 1) % 16 == 0) { |
464 if ((i + 1) % 16 == 0) { |
466 printk("\n"); |
465 printk("\n"); |
467 EC_DBG(""); |
466 EC_INFO(""); |
468 } |
467 } |
469 } |
468 } |
470 printk("\n"); |
469 printk("\n"); |
471 #endif |
470 #endif |
472 |
471 |
519 eoe->stats.rx_packets++; |
518 eoe->stats.rx_packets++; |
520 eoe->stats.rx_bytes += eoe->rx_skb->len; |
519 eoe->stats.rx_bytes += eoe->rx_skb->len; |
521 eoe->rx_counter += eoe->rx_skb->len; |
520 eoe->rx_counter += eoe->rx_skb->len; |
522 |
521 |
523 #if EOE_DEBUG_LEVEL > 0 |
522 #if EOE_DEBUG_LEVEL > 0 |
524 EC_DBG("EoE RX frame completed with %u octets.\n", |
523 EC_INFO("EoE %s RX frame completed with %u octets.\n", |
525 eoe->rx_skb->len); |
524 eoe->dev->name, eoe->rx_skb->len); |
526 #endif |
525 #endif |
527 |
526 |
528 // pass socket buffer to network stack |
527 // pass socket buffer to network stack |
529 eoe->rx_skb->dev = eoe->dev; |
528 eoe->rx_skb->dev = eoe->dev; |
530 eoe->rx_skb->protocol = eth_type_trans(eoe->rx_skb, eoe->dev); |
529 eoe->rx_skb->protocol = eth_type_trans(eoe->rx_skb, eoe->dev); |
537 eoe->state = ec_eoe_state_tx_start; |
536 eoe->state = ec_eoe_state_tx_start; |
538 } |
537 } |
539 else { |
538 else { |
540 eoe->rx_expected_fragment++; |
539 eoe->rx_expected_fragment++; |
541 #if EOE_DEBUG_LEVEL > 0 |
540 #if EOE_DEBUG_LEVEL > 0 |
542 EC_DBG("EoE RX expecting fragment %i\n", |
541 EC_INFO("EoE %s RX expecting fragment %i\n", |
543 eoe->rx_expected_fragment); |
542 eoe->dev->name, eoe->rx_expected_fragment); |
544 #endif |
543 #endif |
545 eoe->state = ec_eoe_state_rx_start; |
544 eoe->state = ec_eoe_state_rx_start; |
546 } |
545 } |
547 } |
546 } |
548 |
547 |
730 eoe->tx_queue_active = 0; |
729 eoe->tx_queue_active = 0; |
731 } |
730 } |
732 spin_unlock_bh(&eoe->tx_queue_lock); |
731 spin_unlock_bh(&eoe->tx_queue_lock); |
733 |
732 |
734 #if EOE_DEBUG_LEVEL > 0 |
733 #if EOE_DEBUG_LEVEL > 0 |
735 EC_DBG("EoE TX queued frame with %i octets (%i frames queued).\n", |
734 EC_INFO("EoE %s TX queued frame with %i octets (%i frames queued).\n", |
736 skb->len, eoe->tx_queued_frames); |
735 eoe->dev->name, skb->len, eoe->tx_queued_frames); |
737 if (!eoe->tx_queue_active) |
736 if (!eoe->tx_queue_active) |
738 EC_WARN("EoE TX queue is now full.\n"); |
737 EC_WARN("EoE TX queue is now full.\n"); |
739 #endif |
738 #endif |
740 |
739 |
741 return 0; |
740 return 0; |