274 lines
6.6 KiB
C
274 lines
6.6 KiB
C
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ne3200proc.h
|
|
|
|
Abstract:
|
|
|
|
Procedure declarations for the Novell NE3200 NDIS 3.0 driver.
|
|
Moved most of these from ne3200sw.h
|
|
|
|
Author:
|
|
|
|
Johnson R. Apacible (johnsona) 21-Aug-1991
|
|
|
|
Environment:
|
|
|
|
Architecturally, there is an assumption in this driver that we are
|
|
on a little endian machine.
|
|
|
|
Notes:
|
|
|
|
optional-notes
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _NE3200PROC_
|
|
#define _NE3200PROC_
|
|
|
|
//
|
|
// We define the external interfaces to the NE3200 driver.
|
|
// These routines are only external to permit separate
|
|
// compilation. Given a truely fast compiler they could
|
|
// all reside in a single file and be static.
|
|
//
|
|
extern
|
|
BOOLEAN
|
|
NE3200CheckForHang(
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
NE3200DisableInterrupt(
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
NE3200EnableInterrupt(
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
NE3200Halt(
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
NE3200HandleInterrupt(
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200Initialize(
|
|
OUT PNDIS_STATUS OpenErrorStatus,
|
|
OUT PUINT SelectedMediumIndex,
|
|
IN PNDIS_MEDIUM MediumArray,
|
|
IN UINT MediumArraySize,
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN NDIS_HANDLE WrapperConfigurationContext
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
NE3200Isr(
|
|
OUT PBOOLEAN InterruptRecognized,
|
|
OUT PBOOLEAN QueueDpc,
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200QueryInformation(
|
|
IN NDIS_HANDLE MiniportAdapterContext,
|
|
IN NDIS_OID Oid,
|
|
IN PVOID InformationBuffer,
|
|
IN ULONG InformationBufferLength,
|
|
OUT PULONG BytesWritten,
|
|
OUT PULONG BytesNeeded
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200Reset(
|
|
OUT PBOOLEAN AddressingReset,
|
|
IN NDIS_HANDLE MiniportAdapterContext
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200Send(
|
|
IN NDIS_HANDLE MiniportAdapterContext,
|
|
IN PNDIS_PACKET Packet,
|
|
IN UINT Flags
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200SetInformation(
|
|
IN NDIS_HANDLE MiniportAdapterContext,
|
|
IN NDIS_OID Oid,
|
|
IN PVOID InformationBuffer,
|
|
IN ULONG InformationBufferLength,
|
|
OUT PULONG BytesRead,
|
|
OUT PULONG BytesNeeded
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
NE3200TransferData(
|
|
OUT PNDIS_PACKET Packet,
|
|
OUT PUINT BytesTransferred,
|
|
IN NDIS_HANDLE MiniportAdapterContext,
|
|
IN NDIS_HANDLE MiniportReceiveContext,
|
|
IN UINT ByteOffset,
|
|
IN UINT BytesToTransfer
|
|
);
|
|
|
|
VOID
|
|
NE3200StartChipAndDisableInterrupts(
|
|
IN PNE3200_ADAPTER Adapter,
|
|
IN PNE3200_SUPER_RECEIVE_ENTRY FirstReceiveEntry
|
|
);
|
|
|
|
VOID
|
|
NE3200FinishQueryInformation(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
|
|
VOID
|
|
NE3200GetStationAddress(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
VOID
|
|
NE3200StopChip(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
BOOLEAN
|
|
NE3200RegisterAdapter(
|
|
IN NDIS_HANDLE MiniportAdapterHandle,
|
|
IN UINT EisaSlot,
|
|
IN UINT InterruptVector,
|
|
IN NDIS_INTERRUPT_MODE InterruptMode,
|
|
IN PUCHAR CurrentAddress
|
|
);
|
|
|
|
VOID
|
|
NE3200AcquirePublicCommandBlock(
|
|
IN PNE3200_ADAPTER Adapter,
|
|
OUT PNE3200_SUPER_COMMAND_BLOCK * CommandBlock
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
NE3200RelinquishCommandBlock(
|
|
IN PNE3200_ADAPTER Adapter,
|
|
IN PNE3200_SUPER_COMMAND_BLOCK CommandBlock
|
|
);
|
|
|
|
VOID
|
|
NE3200DoAdapterReset(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
VOID
|
|
NE3200SetupForReset(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
NDIS_STATUS
|
|
NE3200UpdateMulticastTable(
|
|
IN PNE3200_ADAPTER Adapter,
|
|
IN UINT CurrentAddressCount,
|
|
IN CHAR CurrentAddresses[][NE3200_LENGTH_OF_ADDRESS]
|
|
);
|
|
|
|
VOID
|
|
NE3200ResetVariables(
|
|
IN PNE3200_ADAPTER Adapter
|
|
);
|
|
|
|
BOOLEAN
|
|
SyncNE3200ClearDoorbellInterrupt(
|
|
IN PVOID SyncContext
|
|
);
|
|
|
|
VOID
|
|
NE3200ResetHandler(
|
|
IN PVOID SystemSpecific1,
|
|
IN PNE3200_ADAPTER Adapter,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3
|
|
);
|
|
|
|
VOID
|
|
NE3200DeferredTimer(
|
|
IN PVOID SystemSpecific1,
|
|
IN PNE3200_ADAPTER Adapter,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3
|
|
);
|
|
|
|
VOID
|
|
FASTCALL
|
|
Ne3200Stall(
|
|
PULONG Dummy
|
|
);
|
|
|
|
#define NE3200SubmitCommandBlock( _Adapter, _CommandBlock ) \
|
|
{ \
|
|
ASSERT(!(NdisGetPhysicalAddressLow(_CommandBlock->Self) & 1)); \
|
|
_CommandBlock->Timeout = FALSE; \
|
|
if (_Adapter->FirstCommandOnCard != NULL) { \
|
|
if (_Adapter->FirstWaitingCommand == NULL) { \
|
|
_Adapter->FirstWaitingCommand = _CommandBlock; \
|
|
} else { \
|
|
PNE3200_SUPER_COMMAND_BLOCK PreviousCommandBlock; \
|
|
PreviousCommandBlock = _Adapter->LastWaitingCommand; \
|
|
PreviousCommandBlock->Hardware.NextPending = \
|
|
NdisGetPhysicalAddressLow(_CommandBlock->Self); \
|
|
PreviousCommandBlock->NextCommand = _CommandBlock; \
|
|
} \
|
|
_Adapter->LastWaitingCommand = _CommandBlock; \
|
|
IF_LOG('2'); \
|
|
} else { \
|
|
ASSERT(_Adapter->FirstWaitingCommand == NULL); \
|
|
IF_LOG('1'); \
|
|
_Adapter->FirstCommandOnCard = _CommandBlock; \
|
|
_Adapter->LastCommandOnCard = _CommandBlock; \
|
|
NE3200_WRITE_COMMAND_POINTER(_Adapter,NdisGetPhysicalAddressLow(_CommandBlock->Self)); \
|
|
{ ULONG i; Ne3200Stall(&i); } \
|
|
NE3200_WRITE_LOCAL_DOORBELL_INTERRUPT(_Adapter,NE3200_LOCAL_DOORBELL_NEW_COMMAND); \
|
|
} \
|
|
}
|
|
|
|
#define NE3200AcquireCommandBlock( _Adapter, _CommandBlock ) \
|
|
{ \
|
|
if (_Adapter->NumberOfAvailableCommandBlocks) { \
|
|
IF_LOG('a'); \
|
|
_Adapter->NumberOfAvailableCommandBlocks--; \
|
|
*(_CommandBlock) = _Adapter->NextCommandBlock; \
|
|
_Adapter->NextCommandBlock++; \
|
|
if (_Adapter->NextCommandBlock >= _Adapter->LastCommandBlockAllocated ) {\
|
|
Adapter->NextCommandBlock = Adapter->CommandQueue; \
|
|
} \
|
|
} else { \
|
|
*(_CommandBlock) = NULL; \
|
|
} \
|
|
}
|
|
|
|
#endif //_NE3200PROC_
|