windows-nt/Source/XPSP1/NT/base/boot/lib/i386/ixfwhal.h
2020-09-26 16:20:57 +08:00

148 lines
3.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1991 Microsoft Corporation
Module Name:
ixfwhal.h
Abstract:
This header file defines the private Hardware Architecture Layer (HAL)
Intel x86 specific interfaces, defines and structures.
Author:
Jeff Havens (jhavens) 20-Jun-91
Revision History:
--*/
#ifndef _IXHALP_
#define _IXHALP_
//
// The MAXIMUM_MAP_BUFFER_SIZE defines the maximum map buffers which the system
// will allocate for devices which require phyically contigous buffers.
//
#define MAXIMUM_MAP_BUFFER_SIZE 0x1000000
//
// Define the initial buffer allocation size for a map buffers.
//
#define INITIAL_MAP_BUFFER_SIZE 0x20000
//
// Define the incremental buffer allocation for a map buffers.
//
#define INCREMENT_MAP_BUFFER_SIZE 0x10000
//
// Define the maximum number of map registers that can be requested at one time
// if actual map registers are required for the transfer.
//
#define MAXIMUM_ISA_MAP_REGISTER 16
//
// Define the maximum physical address which can be handled by an Isa card.
//
#define MAXIMUM_PHYSICAL_ADDRESS 0x01000000
//
// Define adapter object structure.
//
typedef struct _ADAPTER_OBJECT {
CSHORT Type;
CSHORT Size;
ULONG MapRegistersPerChannel;
PVOID AdapterBaseVa;
PVOID MapRegisterBase;
ULONG NumberOfMapRegisters;
UCHAR ChannelNumber;
UCHAR AdapterNumber;
UCHAR AdapterMode;
UCHAR ExtendedModeFlags;
USHORT DmaPortAddress;
BOOLEAN NeedsMapRegisters;
BOOLEAN IsaDevice;
BOOLEAN MasterDevice;
BOOLEAN Width16Bits;
BOOLEAN AdapterInUse;
PUCHAR PagePort;
} ADAPTER_OBJECT;
//
// Define map register translation entry structure.
//
typedef struct _TRANSLATION_ENTRY {
PVOID VirtualAddress;
ULONG PhysicalAddress;
ULONG Index;
} TRANSLATION_ENTRY, *PTRANSLATION_ENTRY;
//
// Define External data structures.
//
//
// Some devices require a phyicially contiguous data buffers for DMA transfers.
// Map registers are used give the appearance that all data buffers are
// contiguous. In order to pool all of the map registers a master
// adapter object is used. This object is allocated and saved internal to this
// file. It contains a bit map for allocation of the registers and a queue
// for requests which are waiting for more map registers. This object is
// allocated during the first request to allocate an adapter which requires
// map registers.
//
// In this system, the map registers are translation entries which point to
// map buffers. Map buffers are physically contiguous and have physical memory
// addresses less than 0x01000000. All of the map registers are allocated
// initialially; however, the map buffers are allocated base in the number of
// adapters which are allocated.
//
// If the master adapter is NULL in the adapter object then device does not
// require any map registers.
//
extern PADAPTER_OBJECT MasterAdapterObject;
extern POBJECT_TYPE IoAdapterObjectType;
extern BOOLEAN LessThan16Mb;
//
// Define function prototypes.
//
BOOLEAN
HalpGrowMapBuffers(
PADAPTER_OBJECT AdapterObject,
ULONG Amount
);
PADAPTER_OBJECT
IopAllocateAdapter(
IN ULONG MapRegistersPerChannel,
IN PVOID AdapterBaseVa,
IN PVOID MapRegisterBase
);
VOID
HalpInitializeDisplay(
IN PUSHORT VideoBufferAddress
);
#endif // _IXHALP_