windows-nt/Source/XPSP1/NT/base/boot/detect/i386/pccard.h

199 lines
3.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
pccard.h
Abstract:
This module contains the C code to set up PcCard (pcmcia, cardbus)
configuration data.
Author:
Neil Sandlin (neilsa) 16-Dec-1998
Revision History:
--*/
#define PCCARD_POSSIBLE_IRQS 0xCEB8
//
// PIC hardware
//
#define PIC1_IMR 0x21
#define PIC2_IMR 0xa1
#define PIC1_OCW3 0x20
#define PIC2_OCW3 0xa0
#define PIC_RD_IR 0x0a
#define SYSCTRL_B 0x61
//
// Internal defs
//
#define DEVTYPE_GENERIC_PCIC 0
#define DEVTYPE_GENERIC_CARDBUS 1
#define DEVTYPE_CL_PD6832 2
#define DEVTYPE_CL_PD6834 3
#define DEVTYPE_CL_PD6833 4
#define DEVTYPE_TI_PCI1130 5
#define DEVTYPE_TI_PCI1131 6
#define DEVTYPE_TI_PCI1031 7
#define BCTRL_CL_CSCIRQROUTING_ENABLE 0x0800
#define CDGC_SW_DET_INT 0x20
#define CFGSPACE_VENDOR_ID 0x00
#define CFGSPACE_DEVICE_ID 0x02
#define CFGSPACE_COMMAND 0x04
#define CFGSPACE_HEADER_TYPE 0x0e
#define CFGSPACE_SECONDARY_BUS 0x19
#define CFGSPACE_SUBORDINATE_BUS 0x1a
#define CFGSPACE_BRIDGE_CTRL 0x3e
#define CFGSPACE_LEGACY_MODE_BASE_ADDR 0x44
#define CFGSPACE_CL_CFGMISC1 0x98
#define CFGSPACE_TI_DEV_CTRL 0x92
#define CL_CFGMISC1_ISACSC 0x02
#define CSCFG_CD_ENABLE 0x08
#define DEVCTRL_INTMODE_COMPAQ 0x04
#define DEVCTRL_INTMODE_MASK 0x06
#define EXCAREG_IDREV 0x00
#define EXCAREG_INT_GENCTRL 0x03
#define EXCAREG_CARD_STATUS 0x04
#define EXCAREG_CSC_CFG 0x05
#define EXCAREG_CARDDET_GENCTRL 0x16
#define IGC_PCCARD_RESETLO 0x40
#define PCIC_REVISION 0x82
#define PCIC_REVISION2 0x83
#define PCIC_REVISION3 0x84
#define PCI_TYPE1_ADDR_PORT ((PULONG) 0xCF8)
#define PCI_TYPE1_DATA_PORT 0xCFC
#define PCI_MAX_DEVICES 32
#define PCI_MAX_FUNCTION 8
#define PCI_BRIDGE_TYPE 0x01
#define PCI_CARDBUS_BRIDGE_TYPE 0x02
typedef struct _PCI_TYPE1_CFG_BITS {
union {
struct {
ULONG Reserved1:2;
ULONG RegisterNumber:6;
ULONG FunctionNumber:3;
ULONG DeviceNumber:5;
ULONG BusNumber:8;
ULONG Reserved2:7;
ULONG Enable:1;
} bits;
ULONG AsULONG;
} u;
} PCI_TYPE1_CFG_BITS, *PPCI_TYPE1_CFG_BITS;
typedef struct _PCCARD_INFORMATION {
PCI_TYPE1_CFG_BITS PciCfg1;
ULONG DeviceId;
UCHAR Flags;
UCHAR ErrorCode;
UCHAR bDevType;
UCHAR Reserved;
USHORT IoBase;
USHORT wValidIRQs;
UCHAR abIRQMap[16];
} PCCARD_INFORMATION, *PPCCARD_INFORMATION;
typedef struct _CARDBUS_BRIDGE_DEVTYPE {
ULONG DeviceId;
UCHAR bDevType;
} CARDBUS_BRIDGE_DEVTYPE, *PCARDBUS_BRIDGE_DEVTYPE;
//
// Prototypes
//
USHORT
DetectIRQMap(
PPCCARD_INFORMATION pa
);
USHORT
GetPICIRR(
VOID
);
USHORT
ToggleIRQLine(
PPCCARD_INFORMATION pa,
UCHAR bIRQ
);
UCHAR
PcicReadSocket(
PPCCARD_INFORMATION pa,
USHORT Offset
);
VOID
PcicWriteSocket(
PPCCARD_INFORMATION pa,
USHORT Offset,
UCHAR value
);
VOID
GetPciConfigSpace(
PPCCARD_INFORMATION pa,
USHORT Offset,
PVOID Buffer,
USHORT Length
);
VOID
SetPciConfigSpace(
PPCCARD_INFORMATION pa,
USHORT Offset,
PVOID Buffer,
USHORT Length
);
VOID
Clear_IR_Bits(
USHORT BitMask
);
VOID
GetPCIType1Data(
ULONG address,
USHORT IoOffset,
PVOID Buffer,
USHORT Size
);
VOID
SetPCIType1Data(
ULONG address,
USHORT IoOffset,
PVOID Buffer,
USHORT Size
);
VOID
TimeOut(
USHORT Ticks
);