TI_DbgPrint(DEBUG_DATALINK, ("Called.\n"));
+ Adapter->NdisStatus = Status;
+
KeSetEvent(&Adapter->Event, 0, FALSE);
}
* Status = Status of the operation
*/
{
- TI_DbgPrint(MID_TRACE, ("Called.\n"));
+ PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext;
+
+ TI_DbgPrint(DEBUG_DATALINK, ("Called.\n"));
+
+ Adapter->NdisStatus = Status;
+
+ KeSetEvent(&Adapter->Event, 0, FALSE);
}
}
else
{
- if (NdisStatus == NDIS_STATUS_SUCCESS)
- {
- NdisTransferData(&NdisStatus, Adapter->NdisHandle,
- MacReceiveContext, 0, PacketSize,
- NdisPacket, &BytesTransferred);
- }
- else
- {
- BytesTransferred = 0;
- }
+ NdisTransferData(&NdisStatus, Adapter->NdisHandle,
+ MacReceiveContext, 0, PacketSize,
+ NdisPacket, &BytesTransferred);
}
TI_DbgPrint(DEBUG_DATALINK, ("Calling complete\n"));
VOID STDCALL ProtocolStatus(
NDIS_HANDLE BindingContext,
- NDIS_STATUS GenerelStatus,
+ NDIS_STATUS GeneralStatus,
PVOID StatusBuffer,
UINT StatusBufferSize)
/*
* FUNCTION: Called by NDIS when the underlying driver has changed state
* ARGUMENTS:
* BindingContext = Pointer to a device context (LAN_ADAPTER)
- * GenerelStatus = A generel status code
+ * GeneralStatus = A general status code
* StatusBuffer = Pointer to a buffer with medium-specific data
* StatusBufferSize = Number of bytes in StatusBuffer
*/
{
+ PLAN_ADAPTER Adapter = BindingContext;
+
TI_DbgPrint(DEBUG_DATALINK, ("Called.\n"));
+
+ switch(GeneralStatus)
+ {
+ case NDIS_STATUS_MEDIA_CONNECT:
+ DbgPrint("NDIS_STATUS_MEDIA_CONNECT\n");
+ break;
+
+ case NDIS_STATUS_MEDIA_DISCONNECT:
+ DbgPrint("NDIS_STATUS_MEDIA_DISCONNECT\n");
+ break;
+
+ case NDIS_STATUS_RESET_START:
+ Adapter->State = LAN_STATE_RESETTING;
+ break;
+
+ case NDIS_STATUS_RESET_END:
+ Adapter->State = LAN_STATE_STARTED;
+ break;
+
+ default:
+ DbgPrint("Unhandled status: %x", GeneralStatus);
+ break;
+ }
}
PCHAR Data;
UINT Size;
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)Context;
+ KIRQL OldIrql;
TI_DbgPrint(DEBUG_DATALINK,
("Called( NdisPacket %x, Offset %d, Adapter %x )\n",
((PCHAR)LinkAddress)[5] & 0xff));
}
+ TcpipAcquireSpinLock( &Adapter->Lock, &OldIrql );
TI_DbgPrint(MID_TRACE, ("NdisSend\n"));
- NdisSend(&NdisStatus, Adapter->NdisHandle, NdisPacket);
+ NdisSend(&NdisStatus, Adapter->NdisHandle, NdisPacket);
TI_DbgPrint(MID_TRACE, ("NdisSend %s\n",
NdisStatus == NDIS_STATUS_PENDING ?
"Pending" : "Complete"));
+ TcpipReleaseSpinLock( &Adapter->Lock, OldIrql );
/* I had a talk with vizzini: these really ought to be here.
* we're supposed to see these completed by ndis *only* when
/* Convert returned link speed to bps (it is in 100bps increments) */
IF->Speed = Speed * 100L;
- /* Add adapter to the adapter list */
- ExInterlockedInsertTailList(&AdapterListHead,
- &IF->ListEntry,
- &AdapterListLock);
-
/* Bind adapter to IP layer */
if( !BindAdapter(IF, RegistryPath) ) {
TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (BindAdapter)\n", AdapterName));
return NDIS_STATUS_NOT_ACCEPTED;
}
+ /* Add adapter to the adapter list */
+ ExInterlockedInsertTailList(&AdapterListHead,
+ &IF->ListEntry,
+ &AdapterListLock);
+
TI_DbgPrint(DEBUG_DATALINK, ("Leaving.\n"));
return NDIS_STATUS_SUCCESS;