X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FNetwork%2FVirtIONet%2Fvirtio-net.c;h=561c81d1a4cf89d8beef6476bf6f38827c8b9820;hb=d6fe233b0485dfefdd51729025f42cf479e57c16;hp=c4ea418f9880ba2c577ea6d97f75e47d8a719f28;hpb=230138900684786053e5d1a1efb566db9edc5021;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Network/VirtIONet/virtio-net.c b/KernelLand/Modules/Network/VirtIONet/virtio-net.c index c4ea418f..561c81d1 100644 --- a/KernelLand/Modules/Network/VirtIONet/virtio-net.c +++ b/KernelLand/Modules/Network/VirtIONet/virtio-net.c @@ -5,7 +5,7 @@ * virtio-net.c * - Driver Core */ -#define DEBUG 1 +#define DEBUG 0 #define VERSION VER2(1,0) #include #include @@ -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);