X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=KernelLand%2FModules%2FNetwork%2FE1000%2Fe1000.c;h=600f3348ef560703e98657a65f61e137632d8e3f;hb=802762ae7efd39786c0e134ed0bdfe8100d97230;hp=21cc9ed76b066be6c0b4ad69fb341eea2e6bcdad;hpb=e7a76b0d8a0cc6aa77966509780973a6f8216ef7;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Network/E1000/e1000.c b/KernelLand/Modules/Network/E1000/e1000.c index 21cc9ed7..600f3348 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" @@ -64,6 +64,7 @@ int E1000_Install(char **Arguments) // Allocate card array gaE1000_Cards = calloc(sizeof(tCard), card_count); if( !gaE1000_Cards ) { + Log_Warning("E1000", "Allocation of %i card structures failed", card_count); return MODULE_ERR_MALLOC; } @@ -88,6 +89,7 @@ int E1000_Install(char **Arguments) Log_Debug("E1000", "Card %i: %P IRQ %i", card_idx, card->MMIOBasePhys, card->IRQ); if( E1000_int_InitialiseCard(card) ) { + Log_Warning("E1000", "Initialisation of card #%i failed", card_idx); return MODULE_ERR_MALLOC; } @@ -205,6 +207,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 +237,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 +246,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 +318,8 @@ void E1000_IRQHandler(int Num, void *Ptr) { LOG("No completed TXDs"); } - } - + } + if( icr & ICR_LSC ) { // Link status change @@ -347,7 +352,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); }