Modules/VirtIONet - Added disabled Tx packet trace
[tpg/acess2.git] / KernelLand / Modules / Network / VirtIONet / virtio-net.c
index c4ea418..561c81d 100644 (file)
@@ -5,7 +5,7 @@
  * virtio-net.c
  * - Driver Core
  */
-#define DEBUG  1
+#define DEBUG  0
 #define VERSION        VER2(1,0)
 #include <acess.h>
 #include <modules.h>
@@ -92,7 +92,9 @@ void VirtIONet_AddCard(Uint16 IOBase, Uint IRQ)
        // Should be a VirtIO Network device
        tVirtIO_Dev *dev = VirtIO_InitDev(
                IOBase, IRQ,
-               VIRTIO_NET_F_MAC|VIRTIO_NET_F_STATUS|VIRTIO_NET_F_CSUM|VIRTIO_NET_F_MRG_RXBUF
+               VIRTIO_NET_F_MAC|VIRTIO_NET_F_STATUS
+                       |VIRTIO_NET_F_CSUM
+                       |VIRTIO_NET_F_MRG_RXBUF
                        |VIRTIO_F_NOTIFY_ON_EMPTY,
                3,
                sizeof(struct sVirtIONet_Dev)
@@ -101,7 +103,7 @@ void VirtIONet_AddCard(Uint16 IOBase, Uint IRQ)
                // Oops?
        }
        tVirtIONet_Dev  *ndev = VirtIO_GetDataPtr(dev);
-       Semaphore_Init(&ndev->RXPacketSem, 0, 1, "VirtIONet", "RXSem");
+       Semaphore_Init(&ndev->RXPacketSem, 0, NRXBUFS, "VirtIONet", "RXSem");
        ndev->Features = VirtIO_GetFeatures(dev);
        
        Uint8   mac[6];
@@ -133,10 +135,12 @@ void VirtIONet_AddCard(Uint16 IOBase, Uint IRQ)
        for( int i = 0; i < NRXBUFS; i ++ )
        {
                ndev->RXBuffers[i] = MM_AllocDMA(1, -1, NULL);
+               LOG("RxBuf %i/%i: %p", i, NRXBUFS, ndev->RXBuffers[i]);
                VirtIO_ReceiveBuffer(dev, 0, PAGE_SIZE, ndev->RXBuffers[i], NULL);
        }
 
        // Register with IPStack
+       LOG("Register");
        // TODO: Save the returned pointer to do deregister later       
        IPStack_Adapter_Add(&gVirtIONet_AdapterType, dev, mac);
        LEAVE('-');
@@ -145,6 +149,7 @@ void VirtIONet_AddCard(Uint16 IOBase, Uint IRQ)
 int VirtIONet_RXQueueCallback(tVirtIO_Dev *Dev, int ID, size_t UsedBytes, void *Handle)
 {
        tVirtIONet_Dev  *NDev = VirtIO_GetDataPtr(Dev);
+       LOG("Signalling");
        Semaphore_Signal(&NDev->RXPacketSem, 1);
        // 1: Don't pop the qdesc
        return 1;
@@ -235,8 +240,10 @@ int VirtIONet_SendPacket(void *Ptr, tIPStackBuffer *Buffer)
        buflens[0] = sizeof(hdr) - ((NDev->Features & VIRTIO_NET_F_MRG_RXBUF) ? 0 : 2);
        bufptrs[0] = &hdr;
         int    i = 1;
-       for( int idx = -1; (idx = IPStack_Buffer_GetBuffer(Buffer, idx, &buflens[i], &bufptrs[i])) != -1; )
+       for( int idx = -1; (idx = IPStack_Buffer_GetBuffer(Buffer, idx, &buflens[i], &bufptrs[i])) != -1; ) {
+               //Debug_HexDump("VirtIO SendPacket", bufptrs[i], buflens[i]);
                i ++;
+       }
        
        IPStack_Buffer_LockBuffer(Buffer);
        VirtIO_SendBuffers(VIODev, VIRTIONET_QUEUE_TX, nBufs+1, buflens, bufptrs, Buffer);

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