master/ethernet.c
changeset 770 efa5af306318
parent 721 ebc2fd3e09e5
child 834 0791aac03180
equal deleted inserted replaced
769:2195c2ea37b4 770:efa5af306318
   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 
   602         eoe->state = ec_eoe_state_rx_start;
   601         eoe->state = ec_eoe_state_rx_start;
   603         return;
   602         return;
   604     }
   603     }
   605 
   604 
   606 #if EOE_DEBUG_LEVEL > 0
   605 #if EOE_DEBUG_LEVEL > 0
   607     if (wakeup) EC_DBG("waking up TX queue...\n");
   606     if (wakeup) EC_INFO("EoE %s waking up TX queue...\n", eoe->dev->name);
   608 #endif
   607 #endif
   609 
   608 
   610     eoe->state = ec_eoe_state_tx_sent;
   609     eoe->state = ec_eoe_state_tx_sent;
   611 }
   610 }
   612 
   611 
   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;