windows-nt/Source/XPSP1/NT/base/ntos/ke/i386/abios.h

164 lines
2.9 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
abios.h
Abstract:
This module contains the i386 kernel ABIOS specific header file.
Author:
Shie-Lin Tzong (shielint) 22-May-1991
Revision History:
--*/
//
// Define public portion of the ABIOS Device Block
//
typedef struct _KDEVICE_BLOCK {
USHORT Length;
UCHAR Revision;
UCHAR SecondDeviceId;
USHORT LogicalId;
USHORT DeviceId;
USHORT NumberExclusivePortPairs;
USHORT NumberCommonPortPairs;
} KDEVICE_BLOCK, *PKDEVICE_BLOCK;
typedef struct _KABIOS_POINTER {
USHORT Offset;
USHORT Selector;
} KABIOS_POINTER, *PKABIOS_POINTER;
#pragma pack(1)
//
// ABIOS Function Transfer Table definition
//
typedef struct _KFUNCTION_TRANSFER_TABLE {
KABIOS_POINTER CommonRoutine[3];
USHORT FunctionCount;
USHORT Reserved;
KABIOS_POINTER SpecificRoutine;
} KFUNCTION_TRANSFER_TABLE, *PKFUNCTION_TRANSFER_TABLE;
//
// ABIOS Commom Data Area definitions
//
typedef struct _KDB_FTT_SECTION {
KABIOS_POINTER DeviceBlock;
KABIOS_POINTER FunctionTransferTable;
} KDB_FTT_SECTION, *PKDB_FTT_SECTION;
typedef struct _KCOMMON_DATA_AREA {
USHORT DataPointer0Offset;
USHORT NumberLids;
ULONG Reserved;
PKDB_FTT_SECTION DbFttPointer;
} KCOMMON_DATA_AREA, *PKCOMMON_DATA_AREA;
#pragma pack()
//
// Available GDT Entry
//
typedef struct _KFREE_GDT_ENTRY {
struct _KFREE_GDT_ENTRY *Flink;
ULONG BaseMid : 8;
ULONG Type : 5;
ULONG Dpl : 2;
ULONG Present : 1;
ULONG LimitHi : 4;
ULONG Sys : 1;
ULONG Reserved_0 : 1;
ULONG Default_Big : 1;
ULONG Granularity : 1;
ULONG BaseHi : 8;
} KFREE_GDT_ENTRY, *PKFREE_GDT_ENTRY;
//
// Logical Id table entry
//
typedef struct _KLID_TABLE_ENTRY {
ULONG Owner;
ULONG OwnerCount;
} KLID_TABLE_ENTRY, *PKLID_TABLE_ENTRY;
#define LID_NO_SPECIFIC_OWNER 0xffffffff
#define NUMBER_LID_TABLE_ENTRIES 1024
//
// Macro to extract the high byte of a short offset
//
#define HIGHBYTE(l) ((UCHAR)(((USHORT)(l)>>8) & 0xff))
//
// Macro to extract the low byte of a short offset
//
#define LOWBYTE(l) ((UCHAR)(l))
//
// The following selectors are reserved for 16 bit stack, code and
// ABIOS Common Data Area.
//
#define KGDT_STACK16 0xf8
#define KGDT_CODE16 0xf0
#define KGDT_CDA16 0xe8
#define KGDT_GDT_ALIAS 0x70
//
// Misc. definitions
//
#define RESERVED_GDT_ENTRIES 28
//
// External references
//
extern PKFREE_GDT_ENTRY KiAbiosGdtStart;
extern PKFREE_GDT_ENTRY KiAbiosGdtEnd;
extern PUCHAR KiEndOfCode16;
extern ULONG KiStack16GdtEntry;
extern
VOID
KiI386CallAbios(
IN KABIOS_POINTER AbiosFunction,
IN KABIOS_POINTER DeviceBlockPointer,
IN KABIOS_POINTER FunctionTransferTable,
IN KABIOS_POINTER RequestBlock
);
VOID
KiInitializeAbiosGdtEntry (
OUT PKGDTENTRY GdtEntry,
IN ULONG Base,
IN ULONG Limit,
IN USHORT Type
);
extern
ULONG
KiAbiosGetGdt (
VOID
);