|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
detect.h
Abstract:
This module is a global C include file for all the detection modules.
Author:
Shie-Lin Tzong (shielint) 27-Dec-1991
Revision History:
--*/
#define i386
#define _X86_
#define __stdcall
#pragma warning (4:4103)
#include "types.h"
#include "ntmisc.h"
#include <ntconfig.h>
#include <arc.h>
#define X86_REAL_MODE // must precede include of dockinfo.h
#include "..\..\inc\dockinfo.h"
//
// Machine type definitions.
//
#define MACHINE_TYPE_ISA 0
#define MACHINE_TYPE_EISA 1
#define MACHINE_TYPE_MCA 2
//
// Interrupt controller register addresses.
//
#define PIC1_PORT0 0x20 // master PIC
#define PIC1_PORT1 0x21
#define PIC2_PORT0 0x0A0 // slave PIC
#define PIC2_PORT1 0x0A1
//
// Commands for interrupt controller
//
#define OCW3_READ_ISR 0xb
#define OCW3_READ_IRR 0xa
//
// Definitions for the data stored in the first page 0x700 area
// The 0x700 is the place vdm loads MS-DOS. It should be very safe
// to pass the data required by vdm.
//
#define DOS_BEGIN_SEGMENT 0x70 // DOS loaded segment address
#define VIDEO_FONT_OFFSET 0 // Video font ptrs stored at 0x700
#define VIDEO_FONT_DATA_SIZE 0x40
#define EBIOS_INFO_OFFSET 0x40 // Extended bios infor:
// EBIOS data area address 4 bytes
// EBIOS data area size 4 byte
#define EBIOS_INFO_SIZE 0x8
//
// Mouse information structure
// N.B. This *must* match the one defined in mouse.inc
//
typedef struct _MOUSE_INFORMATION { UCHAR MouseType; UCHAR MouseSubtype; USHORT MousePort; // if serial mouse, 1 for com1, 2 for com2 ...
USHORT MouseIrq; USHORT DeviceIdLength; UCHAR DeviceId[10]; } MOUSE_INFORMATION, *PMOUSE_INFORMATION;
//
// Mouse Type definitions
//
#define UNKNOWN_MOUSE 0
#define NO_MOUSE 0x100 // YES! it is 0x100 *NOT* 0x10000
#define MS_MOUSE 0x200 // MS regular mouses
#define MS_BALLPOINT 0x300 // MS ballpoint mouse
#define LT_MOUSE 0x400 // Logitec Mouse
//
// note last 4 bits of the subtype are reserved subtype specific use
//
#define PS_MOUSE 0x1
#define SERIAL_MOUSE 0x2
#define INPORT_MOUSE 0x3
#define BUS_MOUSE 0x4
#define PS_MOUSE_WITH_WHEEL 0x5
#define SERIAL_MOUSE_WITH_WHEEL 0x6
//#define MOUSE_RESERVE_MASK 0xfffffff
//
// Definitions for the keyboard type returned from
// the detect keyboard function.
//
#define UNKNOWN_KEYBOARD 0
#define OLI_83KEY 1
#define OLI_102KEY 2
#define OLI_86KEY 3
#define OLI_A101_102KEY 4
#define XT_83KEY 5
#define ATT_302 6
#define PCAT_ENHANCED 7
#define PCAT_86KEY 8
#define PCXT_84KEY 9
//
// Redefine the configuration component structures to use FAR pointer type.
//
// Since ntdetect.com running at 16 bit real mode, it has to use FAR pointers
// to access loader heap. Before returning to ntldr, ntdetect must convert
// these far pointers to 32 bit flat addresses such that kernel can acess the
// configuration tree.
//
typedef struct _FWCONFIGURATION_COMPONENT { CONFIGURATION_CLASS Class; USHORT Reserved0; CONFIGURATION_TYPE Type; USHORT Reserverd1; DEVICE_FLAGS Flags; ULONG Version; ULONG Key; ULONG AffinityMask; ULONG ConfigurationDataLength; ULONG IdentifierLength; FPCHAR Identifier; } FWCONFIGURATION_COMPONENT, far *FPFWCONFIGURATION_COMPONENT;
typedef struct _FWCONFIGURATION_COMPONENT_DATA { struct _FWCONFIGURATION_COMPONENT_DATA far *Parent; struct _FWCONFIGURATION_COMPONENT_DATA far *Child; struct _FWCONFIGURATION_COMPONENT_DATA far *Sibling; FWCONFIGURATION_COMPONENT ComponentEntry; FPVOID ConfigurationData; } FWCONFIGURATION_COMPONENT_DATA, far *FPFWCONFIGURATION_COMPONENT_DATA;
//
// defined the MicroChannel POS data structure
//
typedef CM_MCA_POS_DATA MCA_POS_DATA, far *FPMCA_POS_DATA;
//
// Rom Block Definition
//
typedef CM_ROM_BLOCK ROM_BLOCK, far *FPROM_BLOCK; #define RESERVED_ROM_BLOCK_LIST_SIZE (((0xf0000 - 0xc0000)/512) * sizeof(ROM_BLOCK))
//
// Other type redefinitions
//
typedef CM_PARTIAL_RESOURCE_DESCRIPTOR HWPARTIAL_RESOURCE_DESCRIPTOR; typedef HWPARTIAL_RESOURCE_DESCRIPTOR *PHWPARTIAL_RESOURCE_DESCRIPTOR; typedef HWPARTIAL_RESOURCE_DESCRIPTOR far *FPHWPARTIAL_RESOURCE_DESCRIPTOR;
typedef CM_PARTIAL_RESOURCE_LIST HWRESOURCE_DESCRIPTOR_LIST; typedef HWRESOURCE_DESCRIPTOR_LIST *PHWRESOURCE_DESCRIPTOR_LIST; typedef HWRESOURCE_DESCRIPTOR_LIST far *FPHWRESOURCE_DESCRIPTOR_LIST;
typedef CM_EISA_SLOT_INFORMATION EISA_SLOT_INFORMATION, *PEISA_SLOT_INFORMATION; typedef CM_EISA_SLOT_INFORMATION far *FPEISA_SLOT_INFORMATION; typedef CM_EISA_FUNCTION_INFORMATION EISA_FUNCTION_INFORMATION, *PEISA_FUNCTION_INFORMATION; typedef CM_EISA_FUNCTION_INFORMATION far *FPEISA_FUNCTION_INFORMATION;
#define LEVEL_SENSITIVE CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE
#define EDGE_TRIGGERED CM_RESOURCE_INTERRUPT_LATCHED
#define RESOURCE_PORT 1
#define RESOURCE_INTERRUPT 2
#define RESOURCE_MEMORY 3
#define RESOURCE_DMA 4
#define RESOURCE_DEVICE_DATA 5
#define ALL_PROCESSORS 0xffffffff
//
// Note the DATA_HEADER_SIZE counts ONE partial descriptor only.
// if the resource list has more than one descriptors, you must add
// the size of extra descriptors to this value.
//
#define DATA_HEADER_SIZE sizeof(CM_PARTIAL_RESOURCE_LIST)
//
// Defines the structure to store controller information
// (used by ntdetect internally)
//
#define MAXIMUM_DESCRIPTORS 10
typedef struct _HWCONTROLLER_DATA { UCHAR NumberPortEntries; UCHAR NumberIrqEntries; UCHAR NumberMemoryEntries; UCHAR NumberDmaEntries; HWPARTIAL_RESOURCE_DESCRIPTOR DescriptorList[MAXIMUM_DESCRIPTORS]; } HWCONTROLLER_DATA, *PHWCONTROLLER_DATA;
//
// Macro definitions for conversion between far and fat pointers
//
#define MAKE_FP(p,a) FP_SEG(p) = (USHORT)((a) >> 4) & 0xffff; FP_OFF(p) = (USHORT)((a) & 0x0f)
#define MAKE_FLAT_ADDRESS(fp) ( ((ULONG)FP_SEG(fp) * 16 ) + (ULONG)FP_OFF(fp) )
//
// Calculate the byte offset of a field in a structure of type type.
//
#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field))
//
// I/O Port read and write routines.
//
extern VOID WRITE_PORT_UCHAR ( PUCHAR PortAddress, UCHAR Value );
extern UCHAR READ_PORT_UCHAR( PUCHAR Port );
extern VOID WRITE_PORT_USHORT ( PUSHORT PortAddress, USHORT Value );
extern USHORT READ_PORT_USHORT( PUSHORT Port );
extern VOID WRITE_PORT_ULONG ( PUSHORT PortAddress, ULONG Value );
extern ULONG READ_PORT_ULONG( PUSHORT Port );
//
// prototype definitions for Heap management routines
//
extern BOOLEAN HwInitializeHeap ( ULONG HeapStart, ULONG HeapSize );
extern FPVOID HwAllocateHeap( ULONG RequestSize, BOOLEAN ZeroInitialized );
extern VOID HwFreeHeap( ULONG Size );
//
// Misc. prototype definitions
//
extern FPVOID HwSetUpResourceDescriptor ( FPFWCONFIGURATION_COMPONENT Component, PUCHAR Identifier, PHWCONTROLLER_DATA ControlData, USHORT SpecificDataLength, PUCHAR SpecificData );
extern VOID HwSetUpFreeFormDataHeader ( FPHWRESOURCE_DESCRIPTOR_LIST Header, USHORT Version, USHORT Revision, USHORT Flags, ULONG DataSize );
USHORT HwGetKey( VOID );
extern BOOLEAN IsEnhancedKeyboard ( VOID );
extern SHORT GetKeyboardIdBytes ( PCHAR IdBuffer, SHORT Length );
extern USHORT GetKeyboardId( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA SetKeyboardConfigurationData ( IN USHORT KeyboardId );
#if 0 // Remove video detection
extern ULONG GetVideoAdapterType ( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA SetVideoConfigurationData ( IN ULONG VideoType ); #endif // Remove video detection
extern FPFWCONFIGURATION_COMPONENT_DATA GetComportInformation ( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA GetLptInformation ( VOID );
extern PMOUSE_INFORMATION GetMouseId ( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA GetMouseInformation ( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA GetFloppyInformation( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA GetAtDiskInformation( VOID );
extern FPFWCONFIGURATION_COMPONENT_DATA GetPcCardInformation( VOID );
extern BOOLEAN HwIsMcaSystem( VOID );
extern BOOLEAN HwIsEisaSystem( VOID );
extern BOOLEAN IsNpxPresent( VOID );
extern USHORT HwGetProcessorType( VOID );
extern USHORT HwGetCpuStepping( USHORT );
extern VOID GetMcaPosData( FPVOID Entry, FPULONG DataLength );
extern VOID GetEisaConfigurationData( FPVOID Entry, FPULONG DataLength );
extern VOID UpdateConfigurationTree( FPFWCONFIGURATION_COMPONENT_DATA CurrentEntry );
extern PUCHAR GetMachineId( VOID );
extern VOID HwGetEisaSlotInformation ( PEISA_SLOT_INFORMATION SlotInformation, UCHAR Slot );
extern UCHAR HwGetEisaFunctionInformation ( PEISA_FUNCTION_INFORMATION FunctionInformation, UCHAR Slot, UCHAR Function );
extern VOID GetBiosSystemEnvironment ( PUCHAR Buffer );
extern VOID GetInt13DriveParameters ( PUCHAR Buffer, PUSHORT Size );
extern VOID GetRomBlocks( FPUCHAR ReservedBuff, PUSHORT Size );
extern VOID GetVideoFontInformation( VOID );
extern BOOLEAN HwEisaGetIrqFromPort ( USHORT Port, PUCHAR Irq, PUCHAR TriggerMethod );
VOID HwGetPciSystemData( PVOID, BOOLEAN );
UCHAR HwGetPciIrqRoutingOptions( VOID far *RouteBuffer, PUSHORT ExclusiveIRQs );
UCHAR HwGetPciConfigurationDword( IN UCHAR Bus, IN UCHAR Device, IN UCHAR Function, IN UCHAR Offset, OUT PULONG DataRead );
VOID HwGetBiosDate( ULONG source, USHORT Length, PUSHORT BiosYear, PUSHORT BiosMonth, PUSHORT BiosDay );
BOOLEAN HwGetPnpBiosSystemData( IN FPUCHAR *Configuration, OUT PUSHORT PnPBiosLength, OUT PUSHORT SMBIOSLength, IN OUT FPDOCKING_STATION_INFO DockInfo );
BOOLEAN HwGetAcpiBiosData( IN FPUCHAR *Configuration, OUT PUSHORT Length );
#if DBG
extern VOID BlPrint( IN PCHAR, ... );
extern VOID clrscrn ( VOID );
#endif // DBG
BOOLEAN HwGetApmSystemData(PVOID);
//
// External declarations for global variables
//
extern USHORT HwBusType;
extern FPFWCONFIGURATION_COMPONENT_DATA AdapterEntry;
extern FPMCA_POS_DATA HwMcaPosData;
extern FPUCHAR FpRomBlock;
extern USHORT RomBlockLength;
extern FPUCHAR HwEisaConfigurationData;
extern ULONG HwEisaConfigurationSize;
|