Misc - Cleaning up logging output
[tpg/acess2.git] / Modules / Network / NE2000 / ne2000.c
index 3924ba8..37d9c5a 100644 (file)
@@ -3,13 +3,13 @@
  * 
  * See: ~/Sources/bochs/bochs.../iodev/ne2k.cc
  */
-#define        DEBUG   0
+#define        DEBUG   1
 #define VERSION        ((0<<8)|50)
 #include <acess.h>
 #include <modules.h>
 #include <fs_devfs.h>
 #include <drv_pci.h>
-#include <tpl_drv_network.h>
+#include <api_drv_network.h>
 #include <semaphore.h>
 
 // === CONSTANTS ===
@@ -91,7 +91,7 @@ Uint64        Ne2k_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer);
 
  int   Ne2k_int_ReadDMA(tCard *Card, int FirstPage, int NumPages, void *Buffer);
 Uint8  Ne2k_int_GetWritePage(tCard *Card, Uint16 Length);
-void   Ne2k_IRQHandler(int IntNum);
+void   Ne2k_IRQHandler(int IntNum, void *Ptr);
 
 // === GLOBALS ===
 MODULE_DEFINE(0, VERSION, Ne2k, Ne2k_Install, NULL, NULL);
@@ -118,20 +118,18 @@ tCard     *gpNe2k_Cards = NULL;
 int Ne2k_Install(char **Options)
 {
         int    i, j, k;
-        int    count, id, base;
+        int    count, base;
+       tPCIDev id;
        
        // --- Scan PCI Bus ---
        // Count Cards
        giNe2k_CardCount = 0;
        for( i = 0; i < NUM_COMPAT_DEVICES; i ++ )
        {
-               giNe2k_CardCount += PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0 );
+               giNe2k_CardCount += PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device );
        }
        
-       if( giNe2k_CardCount == 0 ) {
-               Log_Warning("Ne2k", "No cards detected");
-               return MODULE_ERR_NOTNEEDED;
-       }
+       if( giNe2k_CardCount == 0 )     return MODULE_ERR_NOTNEEDED;
        
        // Enumerate Cards
        k = 0;
@@ -139,19 +137,19 @@ int Ne2k_Install(char **Options)
        
        for( i = 0; i < NUM_COMPAT_DEVICES; i ++ )
        {
-               count = PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0 );
+               count = PCI_CountDevices( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device );
                for( j = 0; j < count; j ++,k ++ )
                {
-                       id = PCI_GetDevice( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, 0, j );
+                       id = PCI_GetDevice( csaCOMPAT_DEVICES[i].Vendor, csaCOMPAT_DEVICES[i].Device, j );
                        // Create Structure
-                       base = PCI_AssignPort( id, 0, 0x20 );
+                       base = PCI_GetBAR( id, 0 );
                        gpNe2k_Cards[ k ].IOBase = base;
                        gpNe2k_Cards[ k ].IRQ = PCI_GetIRQ( id );
                        gpNe2k_Cards[ k ].NextMemPage = 64;
                        gpNe2k_Cards[ k ].NextRXPage = RX_FIRST;
                        
                        // Install IRQ Handler
-                       IRQ_AddHandler(gpNe2k_Cards[ k ].IRQ, Ne2k_IRQHandler);
+                       IRQ_AddHandler(gpNe2k_Cards[ k ].IRQ, Ne2k_IRQHandler, &gpNe2k_Cards[k]);
                        
                        // Reset Card
                        outb( base + 0x1F, inb(base + 0x1F) );
@@ -289,6 +287,8 @@ Uint64 Ne2k_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
        
        ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
        
+       // TODO: Lock
+       
        // Sanity Check Length
        if(Length > TX_BUF_SIZE*256) {
                Log_Warning(
@@ -360,7 +360,11 @@ Uint64 Ne2k_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
        ENTER("pNode XOffset XLength pBuffer", Node, Offset, Length, Buffer);
        
        // Wait for packets
-       Semaphore_Wait( &Card->Semaphore, 1 );
+       if( Semaphore_Wait( &Card->Semaphore, 1 ) != 1 )
+       {
+               // Error or interrupted
+               LEAVE_RET('i', 0);
+       }
        
        outb(Card->IOBase, 0x22 | (1 << 6));    // Page 6
        LOG("CURR : 0x%02x", inb(Card->IOBase + CURR));
@@ -392,10 +396,7 @@ Uint64 Ne2k_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)
                
                LOG("pktHdr->Length (%i) > 256 - 4, allocated buffer %p", pktHdr->Length, buf);
                
-               if(!buf) {
-                       LEAVE('i', -1);
-                       return -1;
-               }
+               if(!buf)        LEAVE_RET('i', -1);
                
                // Copy the already read data
                memcpy(buf, data, 256);
@@ -502,39 +503,35 @@ Uint8 Ne2k_int_GetWritePage(tCard *Card, Uint16 Length)
 /**
  * \fn void Ne2k_IRQHandler(int IntNum)
  */
-void Ne2k_IRQHandler(int IntNum)
+void Ne2k_IRQHandler(int IntNum, void *Ptr)
 {
-        int    i;
        Uint8   byte;
-       for( i = 0; i < giNe2k_CardCount; i++ )
-       {
-               if(gpNe2k_Cards[i].IRQ == IntNum)
-               {
-                       byte = inb( gpNe2k_Cards[i].IOBase + ISR );
-                       
-                       LOG("byte = 0x%02x", byte);
-                       
+       tCard   *card = Ptr;
+
+       if(card->IRQ != IntNum) return;
+       
+       byte = inb( card->IOBase + ISR );
+       
+       LOG("byte = 0x%02x", byte);
                        
-                       // Reset All (save for RDMA), that's polled
-                       outb( gpNe2k_Cards[i].IOBase + ISR, 0xFF&(~0x40) );
                        
-                       // 0: Packet recieved (no error)
-                       if( byte & 1 )
-                       {
-                               //if( gpNe2k_Cards[i].NumWaitingPackets > MAX_PACKET_QUEUE )
-                               //      gpNe2k_Cards[i].NumWaitingPackets = MAX_PACKET_QUEUE;
-                               Semaphore_Signal( &gpNe2k_Cards[i].Semaphore, 1 );
-                       }
-                       // 1: Packet sent (no error)
-                       // 2: Recieved with error
-                       // 3: Transmission Halted (Excessive Collisions)
-                       // 4: Recieve Buffer Exhausted
-                       // 5: 
-                       // 6: Remote DMA Complete
-                       // 7: Reset
+       // Reset All (save for RDMA), that's polled
+       outb( card->IOBase + ISR, 0xFF&(~0x40) );
                        
-                       return ;
+       // 0: Packet recieved (no error)
+       if( byte & 1 )
+       {
+               //if( card->NumWaitingPackets > MAX_PACKET_QUEUE )
+               //      card->NumWaitingPackets = MAX_PACKET_QUEUE;
+               if( Semaphore_Signal( &card->Semaphore, 1 ) != 1 ) {
+                       // Oops?
                }
        }
-       Log_Warning("Ne2k", "Recieved Unknown IRQ %i", IntNum);
+       // 1: Packet sent (no error)
+       // 2: Recieved with error
+       // 3: Transmission Halted (Excessive Collisions)
+       // 4: Recieve Buffer Exhausted
+       // 5: 
+       // 6: Remote DMA Complete
+       // 7: Reset
 }

UCC git Repository :: git.ucc.asn.au