X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FNetwork%2FE1000%2Fe1000.c;h=0ad49b01ae6bc1f7049f591ffca41b0c6c9b410a;hb=91cb22a5f21eeca8f84456c1febf79f84a65d30d;hp=21cc9ed76b066be6c0b4ad69fb341eea2e6bcdad;hpb=22cecb77c6da91274332d7cbce5bfb863c73093c;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Network/E1000/e1000.c b/KernelLand/Modules/Network/E1000/e1000.c index 21cc9ed7..0ad49b01 100644 --- a/KernelLand/Modules/Network/E1000/e1000.c +++ b/KernelLand/Modules/Network/E1000/e1000.c @@ -5,7 +5,7 @@ * e1000.c * - Intel 8254x Network Card Driver (core) */ -#define DEBUG 1 +#define DEBUG 0 #define VERSION VER2(0,1) #include #include "e1000.h" @@ -205,6 +205,7 @@ int E1000_SendPacket(void *Ptr, tIPStackBuffer *Buffer) int txd = first_txd; while( (idx = IPStack_Buffer_GetBuffer(Buffer, idx, &len, &ptr)) != -1 ) { + //Debug_HexDump("E100 SendPacket", ptr, len); if( MM_GetPhysAddr(ptr) + len-1 != MM_GetPhysAddr((char*)ptr + len-1) ) { size_t remlen = PAGE_SIZE - ((tVAddr)ptr & (PAGE_SIZE-1)); @@ -234,6 +235,7 @@ int E1000_SendPacket(void *Ptr, tIPStackBuffer *Buffer) Card->TXSrcBuffers[last_txd] = Buffer; __sync_synchronize(); + #if DEBUG { volatile tTXDesc *txdp = Card->TXDescs + last_txd; LOG("%p %P: %llx %x %x", txdp, MM_GetPhysAddr((void*)txdp), txdp->Buffer, txdp->Length, txdp->CMD); @@ -242,6 +244,7 @@ int E1000_SendPacket(void *Ptr, tIPStackBuffer *Buffer) LOG("%p %P: %llx %x %x", txdp, MM_GetPhysAddr((void*)txdp), txdp->Buffer, txdp->Length, txdp->CMD); MM_FreeTemp( (void*)txdp_base); } + #endif // Trigger TX IPStack_Buffer_LockBuffer(Buffer); LOG("Triggering TX - Buffers[%i]=%p", last_txd, Buffer); @@ -313,8 +316,8 @@ void E1000_IRQHandler(int Num, void *Ptr) { LOG("No completed TXDs"); } - } - + } + if( icr & ICR_LSC ) { // Link status change @@ -347,7 +350,20 @@ void E1000_IRQHandler(int Num, void *Ptr) LOG("nPackets = %i", nPackets); } - icr &= ~(ICR_RXT0|ICR_LSC|ICR_TXQE|ICR_TXDW); + // Transmit Descriptor Low Threshold hit + if( icr & ICR_TXD_LOW ) + { + + } + + // Receive Descriptor Minimum Threshold Reached + // - We're reading too slow + if( icr & ICR_RXDMT0 ) + { + LOG("RX descs running out"); + } + + icr &= ~(ICR_RXT0|ICR_LSC|ICR_TXQE|ICR_TXDW|ICR_TXD_LOW|ICR_RXDMT0); if( icr ) Log_Warning("E1000", "Unhandled ICR bits 0x%x", icr); }