diff options
Diffstat (limited to 'private/ntos/ndis/aic5900/sw.h')
-rw-r--r-- | private/ntos/ndis/aic5900/sw.h | 330 |
1 files changed, 330 insertions, 0 deletions
diff --git a/private/ntos/ndis/aic5900/sw.h b/private/ntos/ndis/aic5900/sw.h new file mode 100644 index 000000000..4401ed2ab --- /dev/null +++ b/private/ntos/ndis/aic5900/sw.h @@ -0,0 +1,330 @@ + +/*++ + +Copyright (c) 1990-1995 Microsoft Corporation + +Module Name: + + D:\nt\private\ntos\ndis\aic5900\sw.h + +Abstract: + +Author: + + Kyle Brandon (KyleB) + +Environment: + + Kernel mode + +Revision History: + +--*/ + +#ifndef __SW_H +#define __SW_H + +#define AIC5900_NDIS_MAJOR_VERSION 4 +#define AIC5900_NDIS_MINOR_VERSION 1 + +// +// This macro is used to convert big-endian to host format. +// +#define GET_USHORT_2_USHORT(Dst, Src) \ + *((PUSHORT)(Dst)) = ((*((PUCHAR)(Src) + 0) << 8) + \ + (*((PUCHAR)(Src) + 1))) + +#define GET_ULONG_2_ULONG(Dst, Src) \ + *((PULONG)(Dst)) = ((*((PUCHAR)(Src) + 0) << 24) + \ + (*((PUCHAR)(Src) + 1) << 16) + \ + (*((PUCHAR)(Src) + 2) << 8) + \ + (*((PUCHAR)(Src) + 3))) + + +// +// Macros used to allocate and free memory. +// +#define ALLOCATE_MEMORY(_pStatus, _pAddress, _Length) \ +{ \ + NDIS_PHYSICAL_ADDRESS _HighestAddress; \ + \ + NdisSetPhysicalAddressLow(_HighestAddress, 0xffffffff); \ + NdisSetPhysicalAddressHigh(_HighestAddress, 0xffffffff); \ + \ + *(_pStatus) = NdisAllocateMemory( \ + (PVOID *)(_pAddress), \ + (UINT)(_Length), \ + 0, \ + _HighestAddress); \ +} + +#define FREE_MEMORY(_Address, _Length) \ +{ \ + NdisFreeMemory((PVOID)(_Address), (UINT)(_Length), 0); \ +} + +#define ZERO_MEMORY(_Address, _Length) \ +{ \ + NdisZeroMemory((_Address), (_Length)); \ +} + +// +// The following enumeration contains the possible registry parameters. +// +typedef enum _AIC5900_REGISTRY_ENTRY +{ + Aic5900BusNumber = 0, + Aic5900SlotNumber, + Aic5900VcHashTableSize, + Aic5900MaxRegistryEntry +} + AIC5900_REGISTRY_ENTRY; + + +// +// The following structure is used to keep track of registry +// parameters temporarily. +// +typedef struct _AIC5900_REGISTRY_PARAMETER +{ + BOOLEAN fPresent; + ULONG Value; +} + AIC5900_REGISTRY_PARAMETER, + *PAIC5900_REGISTRY_PARAMETER; + +typedef struct _HARDWARE_INFO +{ + // + // Flags information on the HARDWARE_INFO structure. + // + ULONG Flags; + NDIS_SPIN_LOCK Lock; + + // + // Bus Information. + // + UINT BusNumber; + UINT SlotNumber; + + // + // Information from the PCI configuration information. + // + PPCI_COMMON_CONFIG PciCommonConfig; + + // + // Interrupt information. + // + ULONG InterruptLevel; + ULONG InterruptVector; + NDIS_MINIPORT_INTERRUPT Interrupt; + ULONG InterruptMask; + + // + // I/O port information. + // + PVOID PortOffset; + UINT InitialPort; + ULONG NumberOfPorts; + + // + // Memory mapped I/O space information. + // + PVOID MappedIoSpace; + NDIS_PHYSICAL_ADDRESS PhysicalIoSpace; + ULONG IoSpaceLength; + + PPCI_FCODE_IMAGE FCodeImage; + + UINT NicModelNumber; // Model identifier. + UINT RomVersionNumber; // Version number of the FCode. + + ULONG CellClockRate; // Rate of the cell clock. This is used + // in determining cell rate. + + /// + // The following are I/O space memory offsets and sizes. + // NOTE: + // The following offsets are from the PciFCode pointer. + /// + + ULONG rEpromOffset; // Offset of read-only EPROM info into I/O space. + ULONG rEpromSize; // Size of read-only EPROM info. + PVOID rEprom; // Mapped pointer to read-only EPROM info. + + ULONG rwEpromOffset; // Offset of read-write EPROM info into I/O space. + ULONG rwEpromSize; // Size of read-only EPROM info. + PVOID rwEprom; // Mapped pointer to read-write EPROM info. + + ULONG PhyOffset; // Offset of PHY registers into I/O space. + ULONG PhySize; // Size of PHY reigsters. + PUCHAR Phy; // Mapped pointer to the PHY registers. + + ULONG ExternalOffset; // Offset of EXTERNAL registers into I/O space. + ULONG ExternalSize; // Size of EXTERNAL registers + PVOID External; // Mapped pointer to EXTERNAL registers. + + ULONG MidwayOffset; // Offset of SAR registers into I/O space. + ULONG MidwaySize; // Size of SAR registers. + PMIDWAY_REGISTERS Midway; // Mapped pointer to the SAR registers. + + ULONG PciCfgOffset; // Offset of PCI Config registers in I/O space. + ULONG PciCfgSize; // Size of PCI Config registers. + PUCHAR PciConfigSpace; // Mapped pointer to the PCI configuration space. + + ULONG SarRamOffset; // Offset of SAR Ram in I/O space. + ULONG SarRamSize; // Size of SAR Ram. + PULONG SarRam; // Mapped pointer to SAR Ram. + + NDIS_HANDLE hRamInfo; // Handle for the memory manager. + + // + // address of the adapter. + // + UCHAR PermanentAddress[ATM_ADDRESS_LENGTH]; + UCHAR StationAddress[ATM_ADDRESS_LENGTH]; +}; + +// +// Macros for flag manipulation. +// +#define HW_TEST_FLAG(x, f) ((x)->Flags & (f)) +#define HW_SET_FLAG(x, f) ((x)->Flags |= (f)) +#define HW_CLEAR_FLAG(x, f) ((x)->Flags &= ~(f)) + + +// +// Flag definitions. +// +#define fHARDWARE_INFO_INTERRUPT_REGISTERED 0x00000001 + +typedef struct _ADAPTER_BLOCK +{ + // + // Handle for use in calls into NDIS. + // + NDIS_HANDLE MiniportAdapterHandle; + + ULONG References; + NDIS_SPIN_LOCK Lock; + + // + // Flags describing the adapter state. + // + ULONG Flags; + + /// + // + /// + PHARDWARE_INFO HardwareInfo; + + /// + // List of the Vc's + // + // We maintain 2 lists of VCs. Those that have been activated + // and thoes that are not. + /// + LIST_ENTRY InactiveVcList; + LIST_ENTRY ActiveVcList; + + // + // The following cannot be moved!!!! + // This is the hash list of a given VCI to it's PVC_BLOCK + // + PVC_BLOCK VcHashList[1]; +}; + +// +// Macros for adapter flag manipulation +// +#define ADAPTER_SET_FLAG(_adapter, _f) (_adapter)->Flags |= (_f) +#define ADAPTER_CLEAR_FLAG(_adapter, _f) (_adapter)->Flags &= ~(_f) +#define ADAPTER_TEST_FLAG(_adapter, _f) (((_adapter)->Flags & (_f)) != (_f)) + +// +// Flags for describing the Adapter state. +// +#define fADAPTER_RESET_IN_PROGRESS 0x00000001 + + +typedef struct _VC_BLOCK +{ + LIST_ENTRY Link; + + PVC_BLOCK NextVcHash; // Pointer to the next VC in the hash list. + + PADAPTER_BLOCK Adapter; + PHARDWARE_INFO HwInfo; + NDIS_HANDLE NdisVcHandle; + + ULONG References; // Number of outstanding references + // on this VC. + + NDIS_SPIN_LOCK Lock; // Protection for this structure. + + ULONG Flags; // Flags describing vc state. + + // + // ATM media parameters for this VC. + // + ULONG MediaFlags; + + ATM_VPIVCI VpiVci; // VCI assigned to the VC. + ATM_AAL_TYPE AALType; // AAL type supported by this VC. + + // + // The type of service for this VC. + // + ATM_SERVICE_CATEGORY ServiceCategory; + + // + // + // + ULONG AverageCellRate; + ULONG PeakCellRate; + ULONG BurstLengthCells; + + // + // Maximum length of the SDU... + // + ULONG MaxSduSize; + + ATM_MEDIA_PARAMETERS MediaParameters; +}; + +// +// Macros for VC flag manipulation +// +#define VC_SET_FLAG(_vc, _f) (_vc)->Flags |= (_f) +#define VC_CLEAR_FLAG(_vc, _f) (_vc)->Flags &= ~(_f) +#define VC_TEST_FLAG(_vc, _f) (((_vc)->Flags & (_f)) != (_f)) + +// +// Flags describing VC state. +// +#define fVC_ACTIVE 0x00000001 +#define fVC_DEACTIVATING 0x00000002 +#define fVC_TRANSMIT 0x00000004 +#define fVC_RECEIVE 0x00000008 + + +// +// +// +#define aic5900ReferenceAdapter(_adapter) (_adapter)->References++ +#define aic5900DereferenceAdapter(_adapter) (_adapter)->References-- + +#define aic5900ReferenceVc(_vc) (_vc)->References++ + +#define aic5900DereferenceVc(_vc) \ +{ \ + (_vc)->References--; \ + if (((--(_vc)->References) == 0) && \ + VC_TEST_FLAG((_vc), fVC_DEACTIVATING)) \ + { \ + aic5900DeactivateVcComplete((_vc)->Adapter, (_vc)); \ + } \ +} + +#endif // __SW_H + |