/*++ Copyright (c) 1990-1995 Microsoft Corporation Module Name: D:\nt\private\ntos\ndis\aic5900\hw.h Abstract: Author: Kyle Brandon (KyleB) Environment: Kernel mode Revision History: --*/ #ifndef __HW_H #define __HW_H // // New types and forward pointers... // typedef struct _HARDWARE_INFO HARDWARE_INFO, *PHARDWARE_INFO; typedef struct _ADAPTER_BLOCK ADAPTER_BLOCK, *PADAPTER_BLOCK; typedef struct _VC_BLOCK VC_BLOCK, *PVC_BLOCK; typedef struct _XMIT_SEG_CHANNEL XMIT_SEG_CHANNEL, *PXMIT_SEG_CHANNEL; typedef struct _SAR_INFO SAR_INFO, *PSAR_INFO; typedef struct _MIDWAY_XMIT_REGISTERS MIDWAY_XMIT_REGISTERS, *PMIDWAY_XMIT_REGISTERS; typedef struct _MIDWAY_REGISTERS MIDWAY_REGISTERS, *PMIDWAY_REGISTERS; typedef volatile ULONG HWUL, *PHWUL; typedef volatile UCHAR HWUC, *PHWUC; #define BIT(x) (1 << (x)) // // VC range supported by the aic5900 // #define MAX_VCS 1024 #define MIN_VCS 0 // // NIC Cell clock rate. // // // #define CELL_CLOCK_25MHZ (25000000) #define CELL_CLOCK_16MHZ (16000000) // // PCI id's // #define ADAPTEC_PCI_VENDOR_ID 0x9004 #define AIC5900_PCI_DEVICE_ID 0x5900 // // Adaptec ATM adapter models supported. // #define ANA_5910 5 #define ANA_5930 7 #define ANA_5940 8 #define ANA_INVALID (UINT)-1 // // // // #define ATM_ADDRESS_LENGTH 6 #define PCI_DEVICE_SPECIFIC_OFFSET 0x40 typedef union _PCI_DEVICE_CONFIG { struct { UCHAR SoftwareReset:1; UCHAR EnableInterrupt:1; UCHAR TargetSwapBytes:1; UCHAR MasterSwapBytes:1; UCHAR EnableIncrement:1; UCHAR SoftwareInterrupt:1; UCHAR TestDMA:1; UCHAR Reserved:1; }; UCHAR reg; } PCI_DEVICE_CONFIG, *PPCI_DEVICE_CONFIG; typedef union _PCI_DEVICE_STATUS { struct { UCHAR VoltageSense:1; UCHAR IllegalByteEnable:1; UCHAR IllegalWrite:1; UCHAR IllegalOverlap:1; UCHAR IllegalDescriptor:1; UCHAR Reserved:3; }; UCHAR reg; } PCI_DEVICE_STATUS, *PPCI_DEVICE_STATUS; typedef union _PCI_DEVICE_INTERRUPT_STATUS { struct { UCHAR DprInt:1; UCHAR reserved:2; UCHAR StaInt:1; UCHAR RtaInt:1; UCHAR RmaInt:1; UCHAR SseInt:1; UCHAR DpeInt:1; }; UCHAR reg; } PCI_DEVICE_INTERRUPT_STATUS, *PPCI_DEVICE_INTERRUPT_STATUS; typedef union _PCI_DEVICE_ENABLE_PCI_INTERRUPT { struct { UCHAR EnableDprInt:1; UCHAR reserved:2; UCHAR EnableStaInt:1; UCHAR EnableRtaInt:1; UCHAR EnableRmaInt:1; UCHAR EnableSseInt:1; UCHAR EnableDpeInt:1; }; UCHAR reg; } PCI_DEVICE_ENABLE_PCI_INTERRUPT, *PPCI_DEVICE_ENABLE_PCI_INTERRUPT; typedef union _PCI_DEVICE_GENERAL_PURPOSE_IO_REGISTERS { struct { UCHAR GPIOREG0:1; UCHAR GPIOREG1:1; UCHAR GPIOREG2:1; UCHAR GPIOREG3:1; UCHAR reserved:4; }; UCHAR reg; } PCI_DEVICE_GENERAL_PURPOSE_IO_REGISTERS, *PPCI_DEVICE_GENERAL_PURPOSE_IO_REGISTERS; typedef union _PCI_DEVICE_GENERAL_PURPOSE_IOCTL { struct { UCHAR GPIOCTL0:1; UCHAR GPIOCTL1:1; UCHAR GPIOCTL2:1; UCHAR GPIOCTL3:1; UCHAR reserved:4; }; UCHAR reg; } PCI_DEVICE_GENERAL_PURPOSE_IOCTL, *PPCI_DEVICE_GENERAL_PURPOSE_IOCTL; typedef union _PCI_DEVICE_DMA_CONTROL { struct { UCHAR StopOnPerr:1; UCHAR DualAddressCycleEnable:1; UCHAR CacheThresholdEnable:1; UCHAR MemoryReadCmdEnable:1; UCHAR Reserved:4; }; UCHAR reg; } PCI_DEVICE_DMA_CONTROL, *PPCI_DEVICE_DMA_CONTROL; typedef union _PCI_DEVICE_DMA_STATUS { struct { UCHAR FifoEmpty:1; UCHAR FifoFull:1; UCHAR FifoThreshold:1; UCHAR HostDmaDone:1; UCHAR FifoCacheThreshold:1; UCHAR Reserved:3; }; UCHAR reg; } PCI_DEVICE_DMA_STATUS, *PPCI_DEVICE_DMA_STATUS; typedef union _PCI_DEVICE_DMA_DIAG { struct { UCHAR HostDmaEnable:1; UCHAR DataPathDirection:1; UCHAR Reserved:6; }; UCHAR reg; } PCI_DEVICE_DMA_DIAG, *PPCI_DEVICE_DMA_DIAG; typedef union _PCI_DEVICE_HOST_COUNT { struct { ULONG hcLowLow:8; ULONG hcLowHigh:8; ULONG hcHighLow:8; ULONG Reserved:8; }; ULONG reg; } PCI_DEVICE_HOST_COUNT, *PPCI_DEVICE_HOST_COUNT; typedef union _PCI_DEVICE_DATA_FIFO_READ_ADDRESS { struct { UCHAR MasterFifoPointer:7; UCHAR Reserved:1; }; UCHAR reg; } PCI_DEVICE_DATA_FIFO_READ_ADDRESS, *PPCI_DEVICE_DATA_FIFO_READ_ADDRESS; typedef union _PCI_DEVICE_DATA_FIFO_WRITE_ADDRESS { struct { UCHAR MasterFifoPointer:7; UCHAR Reserved:1; }; UCHAR reg; } PCI_DEVICE_DATA_FIFO_WRITE_ADDRESS, *PPCI_DEVICE_DATA_FIFO_WRITE_ADDRESS; typedef union _PCI_DEVICE_DATA_FIFO_THRESHOLD { struct { UCHAR Reserved0:2; UCHAR DFTHRSH:4; UCHAR Reserved1:2; }; UCHAR reg; } PCI_DEVICE_DATA_FIFO_THRESHOLD, *PPCI_DEVICE_DATA_FIFO_THRESHOLD; typedef union _PCI_DEVICE_LOW_HOST_ADDRESS { struct { UCHAR lhaLowLow; UCHAR lhaLowHigh; UCHAR lhaHighLow; UCHAR lhaHighHigh; }; ULONG reg; } PCI_DEVICE_LOW_HOST_ADDRESS, *PPCI_DEVICE_LOW_HOST_ADDRESS; typedef union _PCI_DEVICE_HIGH_HOST_ADDRESS { struct { ULONG hhaLowLow:8; ULONG hhaLowHigh:8; ULONG hhaHighLow:8; ULONG hhaHighHigh:8; }; ULONG reg; } PCI_DEVICE_HIGH_HOST_ADDRESS, *PPCI_DEVICE_HIGH_HOST_ADDRESS; typedef union _PCI_DEVICE_FIFO_DATA_REGISTER { struct { ULONG dfrLowLow:8; ULONG dfrLowHigh:8; ULONG dfrHighLow:8; ULONG dfrHighHigh:8; }; ULONG reg; } PCI_DEVICE_FIFO_DATA_REGISTER, *PPCI_DEVICE_FIFO_DATA_REGISTER; typedef union _PCI_DEVICE_DATA_ADDRESS { struct { ULONG daLowLow:8; ULONG daLowHigh:8; ULONG daHighLow:8; ULONG daHighHigh:8; }; ULONG reg; } PCI_DEVICE_DATA_ADDRESS, *PPCI_DEVICE_DATA_ADDRESS; typedef union _PCI_DEVICE_DATA_PORT { struct { ULONG dpLowLow:8; ULONG dpLowHigh:8; ULONG dpHighLow:8; ULONG dpHighHigh:8; }; ULONG reg; } PCI_DEVICE_DATA_PORT, *PPCI_DEVICE_DATA_PORT; #define PCI_DEVICE_CONFIG_OFFSET 0x40 #define PCI_DEVICE_STATUS_OFFSET 0x41 #define PCI_INTERRUPT_STATUS_OFFSET 0x44 #define PCI_ENABLE_INTERRUPT_OFFSET 0x45 #define PCI_GENERAL_PURPOSE_IO_PORT_OFFSET 0x46 #define PCI_GENERAL_PURPOSE_IOCTL_OFFSET 0x47 #define PCI_DMA_CONTROL_OFFSET 0x4C #define PCI_DMA_STATUS_OFFSET 0x4D #define PCI_DMA_DIAGNOSTIC_OFFSET 0x4E #define PCI_HOST_COUNT0_OFFSET 0x50 #define PCI_HOST_COUNT1_OFFSET 0x51 #define PCI_HOST_COUNT2_OFFSET 0x52 #define PCI_DATA_FIFO_READ_ADDRESS_OFFSET 0x54 #define PCI_DATA_FIFO_WRITE_ADDRESS_OFFSET 0x55 #define PCI_DATA_FIFO_THRESHOLD_OFFSET 0x56 #define PCI_LOW_HOST_ADDRESS0_OFFSET 0x58 #define PCI_LOW_HOST_ADDRESS1_OFFSET 0x59 #define PCI_LOW_HOST_ADDRESS2_OFFSET 0x5A #define PCI_LOW_HOST_ADDRESS3_OFFSET 0x5B #define PCI_HIGH_HOST_ADDRESS0_OFFSET 0x5C #define PCI_HIGH_HOST_ADDRESS1_OFFSET 0x5D #define PCI_HIGH_HOST_ADDRESS2_OFFSET 0x5E #define PCI_HIGH_HOST_ADDRESS3_OFFSET 0x5F #define PCI_FIFO_DATA_REGISTER0_OFFSET 0x60 #define PCI_FIFO_DATA_REGISTER1_OFFSET 0x61 #define PCI_FIFO_DATA_REGISTER2_OFFSET 0x62 #define PCI_FIFO_DATA_REGISTER3_OFFSET 0x63 #define SET_PCI_DEV_CFG(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DEVICE_CONFIG_OFFSET), (_reg)) #define GET_PCI_DEV_CFG(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DEVICE_CONFIG_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_STATUS(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DEVICE_STATUS_OFFSET), (_reg)) #define GET_PCI_DEV_STATUS(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DEVICE_STATUS_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_INT_STATUS(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_INTERRUPT_STATUS_OFFSET), (_reg)) #define GET_PCI_DEV_INT_STATUS(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_INTERRUPT_STATUS_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_ENABLE_INT(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_ENABLE_INTERRUPT_OFFSET), (_reg)) #define GET_PCI_DEV_ENABLE_INT(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_ENABLE_INTERRUPT_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_GP_IO_REG(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_GENERAL_PURPOSE_IO_PORT_OFFSET), (_reg)) #define GET_PCI_DEV_GP_IO_REG(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_GENERAL_PURPOSE_IO_PORT_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_GP_IOCTL(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_GENERAL_PURPOSE_IOCTL_OFFSET), (_reg)) #define GET_PCI_DEV_GP_IOCTL(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_GENERAL_PURPOSE_IOCTL_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DMA_CONTROL(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_CONTROL_OFFSET), (_reg)) #define GET_PCI_DEV_DMA_CONTROL(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_CONTROL_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DMA_STATUS(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_STATUS_OFFSET), (_reg)) #define GET_PCI_DEV_DMA_STATUS(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_STATUS_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DMA_DIAG(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_DIAGNOSTIC_OFFSET), (_reg)) #define GET_PCI_DEV_DMA_DIAG(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DMA_DIAGNOSTIC_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DATA_READ_ADDRESS(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_READ_ADDRESS_OFFSET), (_reg)) #define GET_PCI_DEV_DATA_READ_ADDRESS(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_READ_ADDRESS_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DATA_WRITE_ADDRESS(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_WRITE_ADDRESS_OFFSET), (_reg)) #define GET_PCI_DEV_DATA_WRITE_ADDRESS(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_WRITE_ADDRESS_OFFSET), (PUCHAR)(_reg)) #define SET_PCI_DEV_DATA_THRESHOLD(_HwInfo, _reg) NdisWriteRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_THRESHOLD_OFFSET), (_reg)) #define GET_PCI_DEV_DATA_THRESHOLD(_HwInfo, _reg) NdisReadRegisterUchar(((_HwInfo)->PciConfigSpace + PCI_DATA_FIFO_THRESHOLD_OFFSET), (PUCHAR)(_reg)) ////////////////////////////////////////////////////////////////////////// // // SUNI REGISTER SET // ////////////////////////////////////////////////////////////////////////// // // SUNI Master Reset and Identify register. // #define SUNI_MASTER_RESET_IDENTITY 0x00 #define SET_SUNI_MASTER_RESET_IDEN(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + SUNI_MASTER_RESET_IDENTITY), (_value)) #define GET_SUNI_MASTER_RESET_IDEN(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + SUNI_MASTER_RESET_IDENTITY), (_value)) #define fSUNI_MRI_RESET 0x80 // // RACP Interrupt Enable/Status // #define SUNI_RACP_INTERRUPT_ENABLE_STATUS 0x144 #define SET_SUNI_RACP_INT_ENABLE_STATUS(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + SUNI_RACP_INTERRUPT_ENABLE_STATUS), (_value)) #define GET_SUNI_RACP_INT_ENABLE_STATUS(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + SUNI_RACP_INTERRUPT_ENABLE_STATUS), (_value)) #define fSUNI_RACP_IES_FUDRI 0x01 #define fSUNI_RACP_IES_FOVRI 0x02 #define fSUNI_RACP_IES_UHCSI 0x04 #define fSUNI_RACP_IES_CHCSI 0x08 #define fSUNI_RACP_IES_OOCDI 0x10 #define fSUNI_RACP_IES_FIFOE 0x20 #define fSUNI_RACP_IES_HCSE 0x40 #define fSUNI_RACP_IES_OOCDE 0x80 // // Master Test // #define SUNI_MASTER_TEST 0x200 #define SET_SUNI_MASTER_TEST(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + SUNI_MASTER_TEST), (_value)) #define GET_SUNI_MASTER_TEST(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + SUNI_MASTER_TEST), (_value)) ////////////////////////////////////////////////////////////////////////// // // IBM 25Mbp TC chipset // ////////////////////////////////////////////////////////////////////////// #define IBM_TC_STATUS 0x00 #define SET_IBM_TC_STATUS(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + IBM_TC_STATUS), (_value)) #define GET_IBM_TC_STATUS(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + IBM_TC_STATUS), (_value)) #define IBM_TC_MODE 0x00 #define SET_IBM_TC_MODE(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + IBM_TC_MODE), (_value)) #define GET_IBM_TC_MODE(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + IBM_TC_MODE), (_value)) #define IBM_TC_FLUSH_RECEIVE_FIFO 0x00 #define SET_IBM_TC_FLUSH_RECEIVE_FIFO(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + IBM_TC_FLUSH_RECEIVE_FIFO), (_value)) #define GET_IBM_TC_FLUSH_RECEIVE_FIFO(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + IBM_TC_FLUSH_RECEIVE_FIFO), (_value)) #define IBM_TC_SOFTWARE_RESET 0x00 #define SET_IBM_TC_SOFTWARE_RESET(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + IBM_TC_SOFTWARE_RESET), (_value)) #define GET_IBM_TC_SOFTWARE_RESET(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + IBM_TC_SOFTWARE_RESET), (_value)) #define IBM_TC_MASK 0x00 #define SET_IBM_TC_MASK(_HwInfo, _value) NdisWriteRegisterUchar(((_HwInfo)->Phy + IBM_TC_MASK), (_value)) #define GET_IBM_TC_MASK(_HwInfo, _value) NdisReadRegisterUchar(((_HwInfo)->Phy + IBM_TC_MASK), (_value)) #endif // __HW_H