NT4/private/ntos/boot/detect/i386/eisa.h
2020-09-30 17:12:29 +02:00

216 lines
5.2 KiB
C

/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
eisa.h
Abstract:
This module contains the i386 EISA bus specific header file.
Author:
Shie-Lin Tzong (shielint) 6-June-1991
Revision History:
--*/
//
// SU module's version of the memory descriptor
//
typedef struct _MEMORY_LIST_ENTRY {
ULONG BlockBase;
ULONG BlockSize;
} MEMORY_LIST_ENTRY, *PMEMORY_LIST_ENTRY;
//
// Memory configuration of eisa data block structure
//
typedef struct _EISA_MEMORY_TYPE {
UCHAR ReadWrite: 1;
UCHAR Cached : 1;
UCHAR Reserved0 :1;
UCHAR Type:2;
UCHAR Shared:1;
UCHAR Reserved1 :1;
UCHAR MoreEntries : 1;
} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
typedef struct _BTEISA_MEMORY_CONFIGURATION {
EISA_MEMORY_TYPE ConfigurationByte;
UCHAR DataSize;
USHORT PhysicalAddress_LSW;
UCHAR PhysicalAddress_MSB;
USHORT MemorySize;
} BTEISA_MEMORY_CONFIGURATION, *PBTEISA_MEMORY_CONFIGURATION;
//
// Interrupt configurationn of eisa data block structure
//
typedef struct _EISA_IRQ_DESCRIPTOR {
UCHAR Interrupt : 4;
UCHAR Reserved :1;
UCHAR LevelTriggered :1;
UCHAR Shared : 1;
UCHAR MoreEntries : 1;
} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
typedef struct _BTEISA_IRQ_CONFIGURATION {
EISA_IRQ_DESCRIPTOR ConfigurationByte;
UCHAR Reserved;
} BTEISA_IRQ_CONFIGURATION, *PBTEISA_IRQ_CONFIGURATION;
//
// DMA description of eisa data block structure
//
typedef struct _DMA_CONFIG_BYTE0 {
UCHAR Channel : 3;
UCHAR Reserved : 3;
UCHAR Shared :1;
UCHAR MoreEntries :1;
} DMA_CONFIG_BYTE0;
typedef struct _DMA_CONFIG_BYTE1 {
UCHAR Reserved0 : 2;
UCHAR TransferSize : 2;
UCHAR Timing : 2;
UCHAR Reserved1 : 2;
} DMA_CONFIG_BYTE1;
typedef struct _BTEISA_DMA_CONFIGURATION {
DMA_CONFIG_BYTE0 ConfigurationByte0;
DMA_CONFIG_BYTE1 ConfigurationByte1;
} BTEISA_DMA_CONFIGURATION, *PBTEISA_DMA_CONFIGURATION;
typedef struct _EISA_PORT_DESCRIPTOR {
UCHAR NumberPorts : 5;
UCHAR Reserved :1;
UCHAR Shared :1;
UCHAR MoreEntries : 1;
} EISA_PORT_DESCRIPTOR, *TEISA_PORT_DESCRIPTOR;
typedef struct _BTEISA_PORT_CONFIGURATION {
EISA_PORT_DESCRIPTOR Configuration;
USHORT PortAddress;
} BTEISA_PORT_CONFIGURATION, *PBTEISA_PORT_CONFIGURATION;
typedef struct _BTEISA_SLOT_INFORMATION {
UCHAR ReturnCode;
UCHAR ReturnFlags;
UCHAR MajorRevision;
UCHAR MinorRevision;
USHORT Checksum;
UCHAR NumberFunctions;
UCHAR FunctionInformation;
ULONG CompressedId;
} BTEISA_SLOT_INFORMATION, *PBTEISA_SLOT_INFORMATION,
far *FPBTEISA_SLOT_INFORMATION;
typedef struct _BTEISA_FUNCTION_INFORMATION {
ULONG CompressedId;
UCHAR IdSlotFlags1;
UCHAR IdSlotFlags2;
UCHAR MinorRevision;
UCHAR MajorRevision;
UCHAR Selections[26];
UCHAR FunctionFlags;
UCHAR TypeString[80];
BTEISA_MEMORY_CONFIGURATION EisaMemory[9];
BTEISA_IRQ_CONFIGURATION EisaIrq[7];
BTEISA_DMA_CONFIGURATION EisaDma[4];
BTEISA_PORT_CONFIGURATION EisaPort[20];
UCHAR InitializationData[60];
} BTEISA_FUNCTION_INFORMATION, *PBTEISA_FUNCTION_INFORMATION,
far *FPBTEISA_FUNCTION_INFORMATION;
//
// Masks for EISA function information
//
#define EISA_FUNCTION_ENABLED 0x80
#define EISA_FREE_FORM_DATA 0x40
#define EISA_HAS_PORT_INIT_ENTRY 0x20
#define EISA_HAS_PORT_RANGE 0x10
#define EISA_HAS_DMA_ENTRY 0x08
#define EISA_HAS_IRQ_ENTRY 0x04
#define EISA_HAS_MEMORY_ENTRY 0x02
#define EISA_HAS_TYPE_ENTRY 0x01
#define EISA_HAS_INFORMATION EISA_HAS_PORT_RANGE + \
EISA_HAS_DMA_ENTRY + \
EISA_HAS_IRQ_ENTRY + \
EISA_HAS_MEMORY_ENTRY + \
EISA_HAS_TYPE_ENTRY
//
// Masks for EISA memory configuration
//
#define EISA_MORE_ENTRIES 0x80
#define EISA_SYSTEM_MEMORY 0x00
#define EISA_MEMORY_TYPE_RAM 0x01
//
// Returned error code for EISA bios call
//
#define EISA_INVALID_SLOT 0x80
#define EISA_INVALID_FUNCTION 0x81
#define EISA_INVALID_CONFIGURATION 0x82
#define EISA_EMPTY_SLOT 0x83
#define EISA_INVALID_BIOS_CALL 0x86
//
// Misc. definitions
//
#define _16MEGB ((ULONG)16 * 1024 * 1024)
#define _64MEGB ((ULONG)64 * 1024 * 1024)
BOOLEAN
FindFunctionInformation (
IN UCHAR SlotFlags,
IN UCHAR FunctionFlags,
OUT PBTEISA_FUNCTION_INFORMATION Buffer,
IN BOOLEAN FromBeginning
);
USHORT
CountMemoryBlocks (
VOID
);
ULONG
EisaConstructMemoryDescriptors (
VOID
);
UCHAR
BtGetEisaSlotInformation (
PBTEISA_SLOT_INFORMATION SlotInformation,
UCHAR Slot
);
UCHAR
BtGetEisaFunctionInformation (
PBTEISA_FUNCTION_INFORMATION FunctionInformation,
UCHAR Slot,
UCHAR Function
);
BOOLEAN
BtIsEisaSystem (
VOID
);
//
// External References
//
extern MEMORY_LIST_ENTRY _far *MemoryDescriptorList;