XENBUS_GNTTAB_INTERFACE GnttabInterface;
XENBUS_EVTCHN_INTERFACE EvtchnInterface;
PXENVIF_RECEIVER_RING *Ring;
- LONG MaxQueues;
- LONG NumQueues;
- BOOLEAN Split;
LONG Loaned;
LONG Returned;
KEVENT Event;
{
PXENVIF_RECEIVER_RING Ring = Argument;
PXENVIF_RECEIVER Receiver;
+ PXENVIF_FRONTEND Frontend;
UNREFERENCED_PARAMETER(Crashing);
Receiver = Ring->Receiver;
+ Frontend = Receiver->Frontend;
XENBUS_DEBUG(Printf,
&Receiver->DebugInterface,
XENBUS_DEBUG(Printf,
&Receiver->DebugInterface,
"[%s]: Events = %lu Dpcs = %lu\n",
- Receiver->Split ? "RX" : "COMBINED",
+ FrontendIsSplit(Frontend) ? "RX" : "COMBINED",
Ring->Events,
Ring->Dpcs);
}
if (Ring->Enabled) {
__ReceiverRingNotify(Ring);
- if (!Receiver->Split)
+ if (!FrontendIsSplit(Frontend))
TransmitterNotify(FrontendGetTransmitter(Frontend),
Ring->Index);
}
Receiver = Ring->Receiver;
Frontend = Receiver->Frontend;
- Path = (Receiver->NumQueues == 1) ?
+ Path = (FrontendGetNumQueues(Frontend) == 1) ?
FrontendGetPath(Frontend) :
Ring->Path;
&Receiver->StoreInterface,
Transaction,
Path,
- Receiver->Split ? "event-channel-rx" : "event-channel",
+ FrontendIsSplit(Frontend) ? "event-channel-rx" : "event-channel",
"%u",
Port);
if (!NT_SUCCESS(status))
)
{
HANDLE ParametersKey;
+ LONG MaxQueues;
LONG Index;
NTSTATUS status;
(*Receiver)->Frontend = Frontend;
- (*Receiver)->MaxQueues = FrontendGetMaxQueues(Frontend);
+ MaxQueues = FrontendGetMaxQueues(Frontend);
(*Receiver)->Ring = __ReceiverAllocate(sizeof (PXENVIF_RECEIVER_RING) *
- (*Receiver)->MaxQueues);
+ MaxQueues);
status = STATUS_NO_MEMORY;
if ((*Receiver)->Ring == NULL)
goto fail2;
Index = 0;
- while (Index < (*Receiver)->MaxQueues) {
+ while (Index < MaxQueues) {
PXENVIF_RECEIVER_RING Ring;
status = __ReceiverRingInitialize(*Receiver, Index, &Ring);
fail2:
Error("fail2\n");
- (*Receiver)->MaxQueues = 0;
(*Receiver)->Frontend = NULL;
RtlZeroMemory(&(*Receiver)->EvtchnInterface,
if (!NT_SUCCESS(status))
goto fail5;
- Receiver->Split = FrontendIsSplit(Frontend);
-
- Receiver->NumQueues = FrontendGetNumQueues(Frontend);
- ASSERT3U(Receiver->NumQueues, <=, Receiver->MaxQueues);
-
Index = 0;
- while (Index < Receiver->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
status = __ReceiverRingConnect(Ring);
fail7:
Error("fail7\n");
- Index = Receiver->NumQueues;
+ Index = FrontendGetNumQueues(Frontend);
fail6:
Error("fail6\n");
__ReceiverRingDisconnect(Ring);
}
- Receiver->NumQueues = 0;
-
XENBUS_GNTTAB(Release, &Receiver->GnttabInterface);
fail5:
goto fail5;
Index = 0;
- while (Index < Receiver->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
status = __ReceiverRingStoreWrite(Ring, Transaction);
IN PXENVIF_RECEIVER Receiver
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
NTSTATUS status;
Trace("====>\n");
+ Frontend = Receiver->Frontend;
+
Index = 0;
- while (Index < Receiver->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
status = __ReceiverRingEnable(Ring);
IN PXENVIF_RECEIVER Receiver
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
Trace("====>\n");
- Index = Receiver->NumQueues;
+ Frontend = Receiver->Frontend;
+
+ Index = FrontendGetNumQueues(Frontend);
while (--Index >= 0) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
Receiver->DebugCallback);
Receiver->DebugCallback = NULL;
- Index = Receiver->NumQueues;
+ Index = FrontendGetNumQueues(Frontend);
while (--Index >= 0) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
__ReceiverRingDisconnect(Ring);
}
- Receiver->NumQueues = 0;
- Receiver->Split = FALSE;
-
XENBUS_GNTTAB(Release, &Receiver->GnttabInterface);
XENBUS_CACHE(Release, &Receiver->CacheInterface);
IN PXENVIF_RECEIVER Receiver
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
+ Frontend = Receiver->Frontend;
+
ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
KeFlushQueuedDpcs();
Receiver->Loaned = 0;
Receiver->Returned = 0;
- Index = Receiver->MaxQueues;
+ Index = FrontendGetMaxQueues(Frontend);
while (--Index >= 0) {
PXENVIF_RECEIVER_RING Ring = Receiver->Ring[Index];
__ReceiverFree(Receiver->Ring);
Receiver->Ring = NULL;
- Receiver->MaxQueues = 0;
Receiver->Frontend = NULL;
IN XENVIF_VIF_OFFLOAD_OPTIONS Options
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
+ Frontend = Receiver->Frontend;
+
if (Receiver->AllowGsoPackets == 0) {
Warning("RECEIVER GSO DISALLOWED\n");
Options.OffloadIpVersion4LargePacket = 0;
Options.OffloadIpVersion6LargePacket = 0;
}
- for (Index = 0; Index < Receiver->MaxQueues; ++Index) {
+ for (Index = 0;
+ Index < (LONG)FrontendGetMaxQueues(Frontend);
+ ++Index) {
PXENVIF_RECEIVER_RING Ring;
Ring = Receiver->Ring[Index];
IN ULONG Size
)
{
- LONG Index;
+ PXENVIF_FRONTEND Frontend;
+ LONG Index;
+
+ Frontend = Receiver->Frontend;
ASSERT3U(Size, <, PAGE_SIZE);
- for (Index = 0; Index < Receiver->MaxQueues; ++Index) {
+ for (Index = 0;
+ Index < (LONG)FrontendGetMaxQueues(Frontend);
+ ++Index) {
PXENVIF_RECEIVER_RING Ring;
Ring = Receiver->Ring[Index];
{
PXENVIF_RECEIVER_RING Ring;
- ASSERT3U(Index, <, (ULONG)Receiver->NumQueues);
Ring = Receiver->Ring[Index];
__ReceiverRingSend(Ring, FALSE);
XENBUS_RANGE_SET_INTERFACE RangeSetInterface;
XENBUS_EVTCHN_INTERFACE EvtchnInterface;
PXENVIF_TRANSMITTER_RING *Ring;
- LONG MaxQueues;
- LONG NumQueues;
- BOOLEAN Split;
BOOLEAN MulticastControl;
ULONG DisableIpVersion4Gso;
ULONG DisableIpVersion6Gso;
{
PXENVIF_TRANSMITTER_RING Ring = Argument;
PXENVIF_TRANSMITTER Transmitter;
+ PXENVIF_FRONTEND Frontend;
UNREFERENCED_PARAMETER(Crashing);
Transmitter = Ring->Transmitter;
+ Frontend = Transmitter->Frontend;
XENBUS_DEBUG(Printf,
&Transmitter->DebugInterface,
Ring->PacketsSent,
Ring->PacketsCompleted);
- if (Transmitter->Split) {
+ if (FrontendIsSplit(Frontend)) {
// Dump event channel
XENBUS_DEBUG(Printf,
&Transmitter->DebugInterface,
)
{
PXENVIF_TRANSMITTER Transmitter;
+ PXENVIF_FRONTEND Frontend;
Transmitter = Ring->Transmitter;
+ Frontend = Transmitter->Frontend;
if (!Ring->Connected)
return;
- if (Transmitter->Split) {
+ if (FrontendIsSplit(Frontend)) {
ASSERT(Ring->Channel != NULL);
(VOID) XENBUS_EVTCHN(Send,
ASSERT(Ring != NULL);
Transmitter = Ring->Transmitter;
- ASSERT(Transmitter->Split);
if (Ring->Enabled)
__TransmitterRingNotify(Ring);
ASSERT(Ring != NULL);
Transmitter = Ring->Transmitter;
- ASSERT(Transmitter->Split);
Ring->Events++;
ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
- if (Transmitter->Split) {
+ if (FrontendIsSplit(Frontend)) {
Ring->Channel = XENBUS_EVTCHN(Open,
&Transmitter->EvtchnInterface,
XENBUS_EVTCHN_TYPE_UNBOUND,
Transmitter = Ring->Transmitter;
Frontend = Transmitter->Frontend;
- Path = (Transmitter->NumQueues == 1) ?
+ Path = (FrontendGetNumQueues(Frontend) == 1) ?
FrontendGetPath(Frontend) :
Ring->Path;
if (!NT_SUCCESS(status))
goto fail1;
- if (!Transmitter->Split)
+ if (!FrontendIsSplit(Frontend))
goto done;
Port = XENBUS_EVTCHN(GetPort,
)
{
PXENVIF_TRANSMITTER Transmitter;
+ PXENVIF_FRONTEND Frontend;
Transmitter = Ring->Transmitter;
+ Frontend = Transmitter->Frontend;
__TransmitterRingAcquireLock(Ring);
ASSERT(!Ring->Enabled);
Ring->Enabled = TRUE;
- if (Transmitter->Split &&
+ if (FrontendIsSplit(Frontend) &&
KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
Ring->Dpcs++;
)
{
HANDLE ParametersKey;
+ LONG MaxQueues;
LONG Index;
NTSTATUS status;
(*Transmitter)->Frontend = Frontend;
KeInitializeSpinLock(&(*Transmitter)->Lock);
- (*Transmitter)->MaxQueues = FrontendGetMaxQueues(Frontend);
+ MaxQueues = FrontendGetMaxQueues(Frontend);
(*Transmitter)->Ring = __TransmitterAllocate(sizeof (PXENVIF_TRANSMITTER_RING) *
- (*Transmitter)->MaxQueues);
+ MaxQueues);
status = STATUS_NO_MEMORY;
if ((*Transmitter)->Ring == NULL)
goto fail2;
Index = 0;
- while (Index < (*Transmitter)->MaxQueues) {
+ while (Index < MaxQueues) {
PXENVIF_TRANSMITTER_RING Ring;
status = __TransmitterRingInitialize(*Transmitter, Index, &Ring);
fail2:
Error("fail2\n");
- (*Transmitter)->MaxQueues = 0;
-
(*Transmitter)->Frontend = NULL;
RtlZeroMemory(&(*Transmitter)->Lock,
Buffer);
}
- Transmitter->Split = FrontendIsSplit(Frontend);
-
- Transmitter->NumQueues = FrontendGetNumQueues(Frontend);
- ASSERT3U(Transmitter->NumQueues, <=, Transmitter->MaxQueues);
-
Index = 0;
- while (Index < Transmitter->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
status = __TransmitterRingConnect(Ring);
fail10:
Error("fail10\n");
- Index = Transmitter->NumQueues;
+ Index = FrontendGetNumQueues(Frontend);
fail9:
Error("fail9\n");
__TransmitterRingDisconnect(Ring);
}
- Transmitter->NumQueues = 0;
- Transmitter->Split = FALSE;
Transmitter->MulticastControl = FALSE;
XENBUS_CACHE(Destroy,
goto fail1;
Index = 0;
- while (Index < Transmitter->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
status = __TransmitterRingStoreWrite(Ring, Transaction);
IN PXENVIF_TRANSMITTER Transmitter
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
Trace("====>\n");
+ Frontend = Transmitter->Frontend;
+
Index = 0;
- while (Index < Transmitter->NumQueues) {
+ while (Index < (LONG)FrontendGetNumQueues(Frontend)) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
__TransmitterRingEnable(Ring);
IN PXENVIF_TRANSMITTER Transmitter
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
Trace("====>\n");
- Index = Transmitter->NumQueues;
+ Frontend = Transmitter->Frontend;
+
+ Index = FrontendGetNumQueues(Frontend);
while (--Index >= 0) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
Transmitter->DebugCallback);
Transmitter->DebugCallback = NULL;
- Index = Transmitter->NumQueues;
+ Index = FrontendGetNumQueues(Frontend);
while (--Index >= 0) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
__TransmitterRingDisconnect(Ring);
}
- Transmitter->NumQueues = 0;
Transmitter->MulticastControl = FALSE;
- Transmitter->Split = FALSE;
XENBUS_CACHE(Destroy,
&Transmitter->CacheInterface,
IN PXENVIF_TRANSMITTER Transmitter
)
{
+ PXENVIF_FRONTEND Frontend;
LONG Index;
+ Frontend = Transmitter->Frontend;
+
ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
KeFlushQueuedDpcs();
- Index = Transmitter->MaxQueues;
+ Index = FrontendGetMaxQueues(Frontend);
while (--Index >= 0) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
__TransmitterFree(Transmitter->Ring);
Transmitter->Ring = NULL;
- Transmitter->MaxQueues = 0;
Transmitter->Frontend = NULL;
{
PXENVIF_TRANSMITTER_RING Ring;
PXENVIF_FRONTEND Frontend;
+ LONG NumQueues;
Frontend = Transmitter->Frontend;
+ NumQueues = FrontendGetNumQueues(Frontend);
- if (Transmitter->NumQueues == 1) {
+ if (NumQueues == 1) {
Ring = Transmitter->Ring[0];
__TransmitterRingQueuePackets(Ring, List);
Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
- Hash = Packet->Value % Transmitter->NumQueues;
+ Hash = Packet->Value % NumQueues;
if (Hash != Index) {
if (!IsListEmpty(&HashList)) {
Ring = Transmitter->Ring[Index];
IN PXENVIF_TRANSMITTER Transmitter
)
{
+ PXENVIF_FRONTEND Frontend;
KIRQL Irql;
LONG Index;
+ Frontend = Transmitter->Frontend;
+
KeRaiseIrql(DISPATCH_LEVEL, &Irql);
- Index = Transmitter->NumQueues;
+ Index = FrontendGetNumQueues(Frontend);
while (--Index >= 0) {
PXENVIF_TRANSMITTER_RING Ring = Transmitter->Ring[Index];
{
PXENVIF_TRANSMITTER_RING Ring;
- ASSERT3U(Index, <, (ULONG)Transmitter->NumQueues);
Ring = Transmitter->Ring[Index];
__TransmitterRingNotify(Ring);