singrdk/base/boot/Singldr/singldr.h

304 lines
8.1 KiB
C

//////////////////////////////////////////////////////////////////////////////
//
// singldr.h - SINGLDR Related Information.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
#ifndef __SINGLDR_H__
#define __SINGLDR_H__
//////////////////////////////////////////////////////////////////////////////
//
// Type declarations
typedef char CHAR;
typedef char INT8;
typedef short INT16;
typedef long INT32;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned long UINT32;
typedef unsigned long ADDR32;
typedef void __far * LPVOID;
typedef INT16 (__far * FPENTRY)(INT16 api, LPVOID args);
typedef int INT;
typedef char INT8, __far *LPINT8;
typedef short INT16, __far *LPINT16;
typedef long INT32, __far *LPINT32;
typedef long LARGEST;
typedef long BOOL;
typedef signed long LARGEST;
typedef unsigned long ULARGEST;
typedef unsigned int UINT;
typedef unsigned char UINT8, *PUINT8, __far *LPUINT8;
typedef unsigned short UINT16, __far *LPUINT16;
typedef unsigned long UINT32, *PUINT32, __far *LPUINT32;
typedef unsigned long ULARGEST;
typedef void __far * LPVOID;
typedef char CHAR, __far * LPCHAR;
typedef const char __far * LPCSTR;
//////////////////////////////////////////////////////////////////////////////
//
// Macro constants
#define NULL 0
#define DEBUG_VESA_MODES 0
//////////////////////////////////////////////////////////////////////////////
//
// Core types used by runtime system.
typedef signed char bool;
typedef unsigned short bartok_char;
typedef signed char int8;
typedef signed short int16;
typedef signed long int32;
typedef struct
{
unsigned long lo;
unsigned long hi;
} int64;
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
typedef struct
{
unsigned long lo;
unsigned long hi;
} uint64;
typedef float float32;
typedef double float64;
typedef long intptr;
typedef unsigned long uintptr;
typedef unsigned int uint;
struct uintPtr
{
uintptr value;
};
struct intPtr
{
intptr value;
};
typedef struct uintPtr *UIntPtr;
typedef struct intPtr *IntPtr;
//////////////////////////////////////////////////////////////////////////////
//
// Global Functions
//
LPVOID alloc(uint16 cbSize, uint16 cbPad);
int printf(const char *pszFmt, ...);
uint32 PointerToUint32(LPVOID vp);
void memzero(LPVOID vp, uint32 cb);
void strcpy(LPCHAR dst, LPCHAR src);
void PutChar(char cOut);
//////////////////////////////////////////////////////////////////////////////
//
// File Type used by bootable devices
typedef struct
{
uint32 Size;
uint32 FirstBlock;
//char Name[11];
} FileData;
typedef FileData __far *FilePtr;
//////////////////////////////////////////////////////////////////////////////
//
// MACROS to break C "far" pointers into their segment and offset components
#define _FP_SEG(fp) (* ((uint16 *)&(fp)+1) )
#define _FP_OFF(fp) (* ((uint16 *)&(fp)) )
#define _MK_FP(seg,offset) ((LPVOID)(((uint32)(seg)<<16) | (uint32)(offset)))
//////////////////////////////////////////////////////////////////////////////
//
// more / misc defines
#define ARRAYOF(a) (sizeof(a)/sizeof(a[0]))
#define OFFSETOF(s,m) ((uint16)((uint8*)&((s *)0)->m - (uint8*)0))
#if USE_STRUCT_FIXED_ARRAYS
#define ELEMENT_PTR(array, index) &(array)[index]
#else
#define ELEMENT_PTR(array, index) &(array) + (index)
#endif
#define STATIC_ASSERT(condition)
#define CMOS_SELECT 0x70
#define CMOS_DATA 0x71
//////////////////////////////////////////////////////////////////////////////
//
// PNP / BIOS types
#pragma pack(1)
typedef struct _PNP_NODE {
uint16 Size; // 0x00:
uint8 Node; // 0x02:
uint8 ProductId[4]; // 0x03:
uint8 DeviceType[3]; // 0x07:
uint16 DeviceAttributes; // 0x0a:
// 0x0c:
// followed by AllocatedResourceBlock, PossibleResourceBlock
// and CompatibleDeviceId
} PNP_NODE, far *LPPNP_NODE;
typedef struct _PNP_ISACONFIG {
uint8 Revision; // 0x00:
uint8 TotalCSNs; // 0x01
uint16 IsaReadDataPort; // 0x02
uint16 Reserved; // 0x04
} PNP_ISACONFIG, far *LPPNP_ISACONFIG;
typedef int16 (__far * PNP_FN)(int function, ...);
typedef struct _PNP_ROOT {
uint8 Signature[4]; // 0x00: $PnP (ascii)
uint8 Revision; // 0x04:
uint8 Length; // 0x05:
uint16 ControlField; // 0x06:
uint8 Checksum; // 0x08:
uint32 EventFlagAddress; // 0x09: Physical address
PNP_FN RealModeEntry;
uint16 ProtectedModeEntryOffset; // 0x11:
uint32 ProtectedModeCodeBaseAddress; // 0x13:
uint32 OemDeviceId; // 0x17:
uint16 RealModeDataSegment; // 0x1b:
uint32 ProtectedModeDataAddress; // 0x1d
} PNP_ROOT, far *LPPNP_ROOT;
typedef struct _SMBIOS_ROOT
{
uint8 Signature[4]; // _SM_ (ascii)
uint8 Checksum;
uint8 Length;
uint8 MajorVersion;
uint8 MinorVersion;
uint16 MaximumStructureSize;
uint8 EntryPointRevision;
uint8 Reserved[5];
uint8 Signature2[5]; // _DMI_ (ascii)
uint8 IntermediateChecksum;
uint16 StructureTableLength;
uint32 StructureTableAddress;
uint16 NumberStructures;
uint8 Revision;
} SMBIOS_ROOT, far *LPSMBIOS_ROOT;
typedef struct _DMIBIOS_ROOT
{
uint8 Signature2[5]; // _DMI_ (ascii)
uint8 IntermediateChecksum;
uint16 StructureTableLength;
uint32 StructureTableAddress;
uint16 NumberStructures;
uint8 Revision;
} DMIBIOS_ROOT, far *LPDMIBIOS_ROOT;
#pragma pack()
//////////////////////////////////////////////////////////////////////////////
//
// HAL and Pentium special registers
#pragma pack(4)
#include "halclass.h"
#pragma pack()
//////////////////////////////////////////////////////////////////////////////
//
// Vesa
#if DEBUG_VESA_MODES
typedef struct _VESA_INFO
{
uint8 Signature[4];
uint16 Version;
LPCHAR Oem;
uint8 Capabilities[4];
LPuint16 Modes;
uint16 Memory;
// VBE 2.0+
uint16 OemVersion;
LPCHAR OemVendor;
LPCHAR OemProduct;
LPCHAR OemRevision;
} VESA_INFO, __far *LPVESA_INFO;
typedef struct _VESA_MODE
{
uint16 Attributes;
uint8 WindowA;
uint8 WindowB;
uint16 Granularity;
uint16 Size;
uint16 WindowASegment;
uint16 WindowBSegment;
uint8 __far * WindowFuncPtr;
uint16 BytesPerLine;
uint16 XRes;
uint16 YRes;
uint8 XCharSize;
uint8 YCharSize;
uint8 Planes;
uint8 BitsPerPixel;
uint8 Banks;
uint8 MemoryModel;
uint8 BankSize;
uint8 ImagePages;
uint8 Reserved;
uint8 RedMaskSize;
uint8 RedFieldPos;
uint8 GreenMaskSize;
uint8 GreenFieldPos;
uint8 BlueMaskSize;
uint8 BlueFieldPos;
uint8 ReservedMaskSize;
uint8 ReservedFieldPos;
uint8 DirectColorInfo;
// VBE 2.0
uint32 PhysBasePtr;
uint32 Reserved1;
uint16 Reserved2;
// VBE 3.0
uint16 LinearBytesPerLine;
uint8 BankImagePages;
uint16 LinearImagePages;
uint8 LinearRedMaskSize;
uint8 LinearRedFieldPos;
uint8 LinearGreenMaskSize;
uint8 LinearGreenFieldPos;
uint8 LinearBlueMaskSize;
uint8 LinearBlueFieldPos;
uint8 LinearReservedMaskSize;
uint8 LinearReservedFieldPos;
uint32 MaxPixelClock;
} VESA_MODE, __far *LPVESA_MODE;
#endif
#endif