repository: C:/dev/kvm-guest-drivers-windows
branch: master
commit 0dcc90e15d9c0d27aeb46b0773700787a58d743b
Author: Yan Vugenfirer <[email protected]>
Date:   Sat Jun 12 17:42:58 2010 +0300

    [WIN-GUEST_DRIVERS] [NetKVM] Use virtio library with published indexes with 
NetKVM driver.
    
        Signed-off-by: Yan Vugenfirer <[email protected]>

diff --git a/NetKVM/Common/ParaNdis-Common.c b/NetKVM/Common/ParaNdis-Common.c
index 3c64cb0..a1c8a74 100644
--- a/NetKVM/Common/ParaNdis-Common.c
+++ b/NetKVM/Common/ParaNdis-Common.c
@@ -110,6 +110,7 @@ typedef struct _tagConfigurationEntries
        tConfigurationEntry PriorityVlanTagging;
        tConfigurationEntry VlanId;
        tConfigurationEntry UseMergeableBuffers;
+       tConfigurationEntry PublishIndices;
        tConfigurationEntry MTU;
 }tConfigurationEntries;
 
@@ -148,6 +149,7 @@ static const tConfigurationEntries defaultConfiguration =
        { "*PriorityVLANTag", 3, 0, 3},
        { "VlanId", 0, 0, 4095},
        { "MergeableBuf", 1, 0, 1},
+       { "PublishIndices", 1, 0, 1},
        { "MTU", 1500, 500, 65500},
 };
 
@@ -277,6 +279,7 @@ static void ReadNicConfiguration(PARANDIS_ADAPTER 
*pContext, PUCHAR *ppNewMACAdd
                        GetConfigurationEntry(cfg, 
&pConfiguration->PriorityVlanTagging);
                        GetConfigurationEntry(cfg, &pConfiguration->VlanId);
                        GetConfigurationEntry(cfg, 
&pConfiguration->UseMergeableBuffers);
+                       GetConfigurationEntry(cfg, 
&pConfiguration->PublishIndices);
                        GetConfigurationEntry(cfg, &pConfiguration->MTU);
 
        #if !defined(WPP_EVENT_TRACING)
@@ -318,6 +321,7 @@ static void ReadNicConfiguration(PARANDIS_ADAPTER 
*pContext, PUCHAR *ppNewMACAdd
                        pContext->ulPriorityVlanSetting = 
pConfiguration->PriorityVlanTagging.ulValue;
                        pContext->VlanId = pConfiguration->VlanId.ulValue;
                        pContext->bUseMergedBuffers = 
pConfiguration->UseMergeableBuffers.ulValue != 0;
+                       pContext->bDoPublishIndices = 
pConfiguration->PublishIndices.ulValue != 0;
                        pContext->MaxPacketSize.nMaxDataSize = 
pConfiguration->MTU.ulValue;
                        if (!pContext->bDoSupportPriority)
                                pContext->ulPriorityVlanSetting = 0;
@@ -432,6 +436,8 @@ static void DumpVirtIOFeatures(VirtIODevice *pIO)
                {VIRTIO_NET_F_HOST_UFO, "VIRTIO_NET_F_HOST_UFO"},
                {VIRTIO_NET_F_MRG_RXBUF, "VIRTIO_NET_F_MRG_RXBUF"},
                {VIRTIO_NET_F_STATUS, "VIRTIO_NET_F_STATUS"},
+               {VIRTIO_F_INDIRECT, "VIRTIO_F_INDIRECT"},
+               {VIRTIO_F_PUBLISH_INDICES, "VIRTIO_F_PUBLISH_INDICES"},
        };
        UINT i;
        for (i = 0; i < sizeof(Features)/sizeof(Features[0]); ++i)
@@ -472,7 +478,7 @@ static void PrintStatistics(PARANDIS_ADAPTER *pContext)
                pContext->nofFreeHardwareBuffers, 
pContext->minFreeHardwareBuffers));
        pContext->minFreeHardwareBuffers = pContext->nofFreeHardwareBuffers;
        DPrintf(0, ("[Diag!] TX packets to return %d", 
pContext->NetTxPacketsToReturn));
-       DPrintf(0, ("[Diag!] Bytes transmitted %I64u, received %I64u", 
pContext->Statistics.ifHCOutOctets, pContext->Statistics.ifHCInOctets));
+       DPrintf(0, ("[Diag!] Bytes transmitted %I64u, received %I64u, 
interrupts %d", pContext->Statistics.ifHCOutOctets, 
pContext->Statistics.ifHCInOctets, pContext->ulIrqReceived));
 }
 
 
@@ -614,6 +620,16 @@ NDIS_STATUS ParaNdis_InitializeContext(
                                pContext->CurrentMacAddress[4],
                                pContext->CurrentMacAddress[5]));
                }
+               if (pContext->bDoPublishIndices)
+                       pContext->bDoPublishIndices = 
VirtIODeviceGetHostFeature(&pContext->IODevice, VIRTIO_F_PUBLISH_INDICES) != 0;
+               if (pContext->bDoPublishIndices && 
VirtIODeviceHasFeature(VIRTIO_F_PUBLISH_INDICES))
+               {
+                       VirtIODeviceEnableGuestFeature(&pContext->IODevice, 
VIRTIO_F_PUBLISH_INDICES);
+               }
+               else
+               {
+                       pContext->bDoPublishIndices = FALSE;
+               }
        }
        else
        {
@@ -2082,6 +2098,8 @@ VOID ParaNdis_PowerOn(PARANDIS_ADAPTER *pContext)
        Dummy = VirtIODeviceGetHostFeature(&pContext->IODevice, 
VIRTIO_NET_F_MAC);
        if (pContext->bUseMergedBuffers)
                VirtIODeviceEnableGuestFeature(&pContext->IODevice, 
VIRTIO_NET_F_MRG_RXBUF);
+       if (pContext->bDoPublishIndices)
+               VirtIODeviceEnableGuestFeature(&pContext->IODevice, 
VIRTIO_F_PUBLISH_INDICES);
 
        VirtIODeviceRenewVirtualQueue(pContext->NetReceiveQueue);
        VirtIODeviceRenewVirtualQueue(pContext->NetSendQueue);
diff --git a/NetKVM/Common/ndis56common.h b/NetKVM/Common/ndis56common.h
index 7977c7a..7200538 100644
--- a/NetKVM/Common/ndis56common.h
+++ b/NetKVM/Common/ndis56common.h
@@ -83,6 +83,7 @@
 #define VIRTIO_NET_F_MRG_RXBUF 15  /* Host can handle merged Rx buffers and 
requires bigger header for that. */
 #define VIRTIO_NET_F_STATUS     16
 
+
 #define VIRTIO_NET_S_LINK_UP    1       /* Link is up */
 
 #define VIRTIO_NET_INVALID_INTERRUPT_STATUS            0xFF
@@ -265,6 +266,7 @@ typedef struct _tagPARANDIS_ADAPTER
        BOOLEAN                                 bDoIPCheck;
        BOOLEAN                                 bFixIPChecksum;
        BOOLEAN                                 bUseMergedBuffers;
+       BOOLEAN                                 bDoPublishIndices;
        BOOLEAN                                 bDoKickOnNoBuffer;
        BOOLEAN                                 bSurprizeRemoved;
        BOOLEAN                                 bUsingMSIX;
@@ -272,6 +274,7 @@ typedef struct _tagPARANDIS_ADAPTER
        LONG                                    counterDPCInside;
        LONG                                    bDPCInactive;
        LONG                                    InterruptStatus;
+       ULONG                                   ulIrqReceived;
        ULONG                                   ulPriorityVlanSetting;
        ULONG                                   VlanId;
        ULONG                                   ulFormalLinkSpeed;
@@ -355,7 +358,6 @@ typedef struct _tagPARANDIS_ADAPTER
        NDIS_HANDLE                                     DmaHandle;
        NDIS_HANDLE                                     ConnectTimer;
        NDIS_HANDLE                                     InterruptRecoveryTimer;
-       ULONG                                           ulIrqReceived;
        NDIS_OFFLOAD                            ReportedOffloadCapabilities;
        NDIS_OFFLOAD                            ReportedOffloadConfiguration;
        BOOLEAN                                         bOffloadEnabled;
diff --git a/NetKVM/wlh/netkvm.inf b/NetKVM/wlh/netkvm.inf
index 8143375..058380e 100644
--- a/NetKVM/wlh/netkvm.inf
+++ b/NetKVM/wlh/netkvm.inf
@@ -229,6 +229,12 @@ HKR, Ndi\Params\MergeableBuf,              type,           
0,                      "enum"
 HKR, Ndi\Params\MergeableBuf\enum,     "1",            0,                      
%Enable%
 HKR, Ndi\Params\MergeableBuf\enum,     "0",            0,                      
%Disable%
 
+HKR, Ndi\Params\PublishIndices,                ParamDesc,      0,              
        %PublishIndices%
+HKR, Ndi\Params\PublishIndices,                Default,        0,              
        "1"
+HKR, Ndi\Params\PublishIndices,                type,           0,              
        "enum"
+HKR, Ndi\Params\PublishIndices\enum,   "1",            0,                      
%Enable%
+HKR, Ndi\Params\PublishIndices\enum,   "0",            0,                      
%Disable%
+
 
 [kvmnet6.CopyFiles]
 netkvm.sys,,,2
@@ -308,4 +314,5 @@ PriorityOnly = "Priority"
 VLan = "VLan"
 Priority_Vlan = "All"
 MergeableBuf = "Use mergeable buffers"
+PublishIndices = "Publish Indices"
 MTU = "MTU size"
diff --git a/NetKVM/wxp/ParaNdis5-Driver.c b/NetKVM/wxp/ParaNdis5-Driver.c
index 160f579..72f5672 100644
--- a/NetKVM/wxp/ParaNdis5-Driver.c
+++ b/NetKVM/wxp/ParaNdis5-Driver.c
@@ -351,6 +351,7 @@ static VOID ParaNdis5_MiniportISR(OUT PBOOLEAN 
InterruptRecognized,
        *QueueMiniportHandleInterrupt = FALSE;
        b = ParaNdis_OnInterrupt(pContext, QueueMiniportHandleInterrupt, isAny);
        *InterruptRecognized = b;
+       pContext->ulIrqReceived += b;
        DEBUG_EXIT_STATUS(7, (ULONG)b);
 }
 
diff --git a/NetKVM/wxp/netkvm.inf b/NetKVM/wxp/netkvm.inf
index c7f1fca..428882d 100644
--- a/NetKVM/wxp/netkvm.inf
+++ b/NetKVM/wxp/netkvm.inf
@@ -201,6 +201,11 @@ HKR, Ndi\Params\MergeableBuf,              type,           
0,                      "enum"
 HKR, Ndi\Params\MergeableBuf\enum,     "1",            0,                      
%Enable%
 HKR, Ndi\Params\MergeableBuf\enum,     "0",            0,                      
%Disable%
 
+HKR, Ndi\Params\PublishIndices,                ParamDesc,      0,              
        %PublishIndices%
+HKR, Ndi\Params\PublishIndices,                Default,        0,              
        "1"
+HKR, Ndi\Params\PublishIndices,                type,           0,              
        "enum"
+HKR, Ndi\Params\PublishIndices\enum,   "1",            0,                      
%Enable%
+HKR, Ndi\Params\PublishIndices\enum,   "0",            0,                      
%Disable%
 
 [kvmnet5.CopyFiles]
 netkvm.sys,,,2
@@ -275,4 +280,5 @@ PriorityOnly = "Priority"
 VLan = "VLan"
 Priority_Vlan = "All"
 MergeableBuf = "Use mergeable buffers"
+PublishIndices = "Publish Indices"
 MTU = "MTU size"
--
To unsubscribe from this list: send the line "unsubscribe kvm-commits" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to