NT4/private/ntos/nthals/halraw/alpha/rawhide.h
2020-09-30 17:12:29 +02:00

350 lines
10 KiB
C

/*++
Copyright (c) 1995 Digital Equipment Corporation
Module Name:
rawhide.h
Abstract:
This file contains definitions specific to the Rawhide platform
Author:
Eric Rehm 16-Feb-1995
Environment:
Kernel mode
Revision History:
--*/
#ifndef _RAWHIDEH_
#define _RAWHIDEH_
//
// Include definitions for the components that make up Alcor.
//
#include "axp21164.h" // 21164 (EV5) microprocessor definitions
#include "stdarg.h" // VarArgs support
#include "iod.h" // CAP/MDP controller definitions
#include "rwintbal.h" // Interrupt Balancing definitions
#include "rwref.h" // Interrupt Vector Layout
#include "bitmap.h" // Local copy of RTL bitmap routines
#define CACHE_BLOCK_SIZE 0x40 // 64 byte cache line size
//
// Define number of PCI, EISA, and combo slots
//
// ecrfix - this is only good for PCI0
//
#define NUMBER_EISA_SLOTS 3
#define NUMBER_PCI_SLOTS 4
#define NUMBER_COMBO_SLOTS 1
//
// Define the data and csr ports for the I2C bus and OCP.
//
#define I2C_INTERFACE_DATA_PORT 0x530
#define I2C_INTERFACE_CSR_PORT 0x531
#define I2C_INTERFACE_LENGTH 0x2
#define I2C_INTERFACE_MASK 0x1
//
// Define the index and data ports for the NS Super IO chip.
//
#define SUPERIO_INDEX_PORT 0x398
#define SUPERIO_DATA_PORT 0x399
#define SUPERIO_PORT_LENGTH 0x2
//
// Define the csr ports for Rawhide-specific Reset and Flash control
//
#define RAWHIDE_RESET_PORT 0x26
#define RAWHIDE_FLASH_CONTROL_PORT 0x27
//
// PCI bus address values:
//
#define PCI_MAX_LOCAL_DEVICE 5
#define PCI_MAX_INTERRUPT_VECTOR (MAXIMUM_PCI_VECTOR - PCI_VECTORS)
//
// PCI bus interrupt vector base value
//
#define RawhidePinToLineOffset 0x20
//
// Define the platform processor id type
//
typedef MC_DEVICE_ID HALP_PROCESSOR_ID, *PHALP_PROCESSOR_ID;
extern HALP_PROCESSOR_ID HalpLogicalToPhysicalProcessor[];
//
// Define numbers and names of cpus.
//
#define RAWHIDE_PRIMARY_PROCESSOR ((ULONG) 0x0)
#define RAWHIDE_MAXIMUM_PROCESSOR ((ULONG) 0x3)
#define HAL_PRIMARY_PROCESSOR (RAWHIDE_PRIMARY_PROCESSOR)
#define HAL_MAXIMUM_PROCESSOR (RAWHIDE_MAXIMUM_PROCESSOR)
//
// Define maximum number of MC-PCI bus bridges
//
#define RAWHIDE_MAXIMUM_PCI_BUS ((ULONG) 0x10)
//
// NCR810 SCSI device on PCI bus 1
//
#define RAWHIDE_SCSI_PCI_BUS ((ULONG) 0x01)
//
// Define default processor frequency.
//
#define DEFAULT_PROCESSOR_FREQUENCY_MHZ (250)
//
// Define Rawhide-specific routines that are really macros for performance.
//
#define HalpAcknowledgeEisaInterrupt(x) (UCHAR) (INTERRUPT_ACKNOWLEDGE(x))
#if !defined (_LANGUAGE_ASSEMBLY)
//
// Define the per-processor data structures allocated in the PCR.
//
typedef struct _RAWHIDE_PCR{
ULONGLONG HalpCycleCount; // 64-bit per-processor cycle count
ULONGLONG IpirSva; // Superpage VA of per-perocessor IPIR CSR
PVOID CpuCsrsQva; // Qva of per-cpu csrs
EV5ProfileCount ProfileCount; // Profile counter state
PIOD_POSTED_INTERRUPT PostedInterrupts; // per-cpu area in vector table
} RAWHIDE_PCR, *PRAWHIDE_PCR;
#define HAL_PCR ( (PRAWHIDE_PCR)(&(PCR->HalReserved)) )
//
// Rawhide Memory information.
//
typedef enum _RAWHIDE_MEMORY_TYPE {
RawhideMemoryFree, // Good memory
RawhideMemoryHole, // Hole memory
RawhideMemoryBad, // Bad memory
RawhideMemoryMaximum
} RAWHIDE_MEMORY_TYPE;
typedef struct _RAWHIDE_MEMORY_DESCRIPTOR {
RAWHIDE_MEMORY_TYPE MemoryType; // From above
ULONG BasePage; // Base page number
ULONG PageCount; // Number of pages in this descriptor
ULONG bTested; // TRUE if memory has been tested
} RAWHIDE_MEMORY_DESCRIPTOR, *PRAWHIDE_MEMORY_DESCRIPTOR;
//
// Rawhide Resource Configuration Subpackets
//
// N.B. Only the System Platform Configuration Subpacket is defined
//
//
// Echo data structure constructed for SRM FRU table
//
// N.B. Minimum value length is 4.
//
#define TAG_INVALID 0
#define TAG_ISO_LATIN1 1
#define TAG_QUOTED 2
#define TAG_BINARY 3
#define TAG_UNICODE 4
#define TAG_RESERVED 5
typedef struct _TLV {
USHORT Tag; // Code describing data type of field
USHORT Length; // Length of Value field in bytes (>=4)
ULONG Value; // Beginning of data
} TLV, *PTLV;
//
// System Platform Configuration Subpacket
//
#define SYSTEM_CONFIGURATION_SUBPACKET_CLASS 1
#define SYSTEM_PLATFORM_SUBPACKET_TYPE 1
//
// System Platform Configuration Subpacket
// (As per Russ McManus Config & FRU Table doc, but no Environement Variables.)
//
// N.B., the length of this subpacket is variable due to TLV type fields.
// Total length of the subpacket is available in the Length field.
//
// Any field that is invalid will have TLV.Tag = 0.
//
#if 0
typedef struct _RAWHIDE_SYSTEM_CONFIGURATION {
USHORT Length; // (0x00) Total length of subpacket
USHORT Class; // (0x02) Subpacket class
USHORT Type; // (0x04) Subpacket type
USHORT Reserved; // (0x06)
TLV SystemManufacturer; // (0x08) System Manufacturer (string)
TLV SystemModel; // (....) Model Name (string)
TLV SystemSerialNumber; // (....) SystemSerialNumber (string)
TLV SystemRevisionLevel; // (....) SystemRevisionLevel (string)
TLV SystemVariation; // (....) SystemVariation
TLV ConsoleTypeRev; // (....) SRM Console Rev (string)
} RAWHIDE_SYSTEM_CONFIGURATION, *PRAWHIDE_SYSTEM_CONFIGURATION;
#endif
//
// System Platform Configuration Subpacket
//
// (If you prefer something simpler....)
typedef struct _RAWHIDE_SYSTEM_CONFIGURATION {
ULONG ValidBits; // (0x00) Valid fields below
UCHAR SystemManufacturer[80]; // (0x04) System Manufacturer (string)
UCHAR SystemModel[80]; // (0x54) Model Name (string)
UCHAR SystemSerialNumber[16]; // (0xA4) SystemSerialNumber (string)
UCHAR SystemRevisionLevel[4]; // (0xB4) SystemRevisionLevel (string)
UCHAR SystemVariation[80]; // (0xB8) SystemVariation
UCHAR ConsoleTypeRev[80]; // (0x108) SRM Console Rev (string)
} RAWHIDE_SYSTEM_CONFIGURATION, *PRAWHIDE_SYSTEM_CONFIGURATION;
typedef union _RAWHIDE_SYSTEM_CONFIG_VALID_BITS {
struct {
ULONG SystemManufacturerValid: 1; // <0>
ULONG SystemModelValid: 1; // <1>
ULONG SystemSerialNumberValid: 1; // <2>
ULONG SystemRevisionLevel: 1; // <3>
ULONG SystemVariationValid: 1; // <4>
ULONG ConsoleTypeRevValid: 1; // <5>
};
ULONG all;
} RAWHIDE_SYSTEM_CONFIG_VALID_BITS, *PRAWHIDE_SYSTEM_CONFIG_VALID_BITS;
//
// Define up to 64 Rawhide flags.
//
typedef union _RAWHIDE_FLAGS {
struct {
ULONGLONG CpuMaskValid: 1; // <0>
ULONGLONG GcdMaskValid: 1; // <1>
ULONGLONG IodMaskValid: 1; // <2>
ULONGLONG SystemConfigValid: 1; // <3>
ULONGLONG MemoryDescriptorValid: 1; // <4>
};
ULONGLONG all;
} RAWHIDE_FLAGS, *PRAWHIDE_FLAGS;
//
// Define data structure for Rawhide machine dependent data
//
typedef struct _RAWHIDE_SYSTEM_CLASS_DATA {
ULONG Length; // (0x00) Length of Rawhide spec. data
ULONG Version; // (0x04) Initially 0x1
RAWHIDE_FLAGS Flags; // (0x08)
ULONGLONG CpuMask; // (0x10) <GID*8+MID> set if CPU presnt
ULONGLONG GcdMask; // (0x18) <GID*8+MID> set if GCD presnt
ULONGLONG IodMask; // (0x20) <GID*8+MID> set if IOD presnt
RAWHIDE_SYSTEM_CONFIGURATION SystemConfig; // (0x28) System config info
ULONG MemoryDescriptorCount; // (...)Number of memory descriptors
RAWHIDE_MEMORY_DESCRIPTOR MemoryDescriptor[1]; // (...) Array of descriptors
} RAWHIDE_SYSTEM_CLASS_DATA, *PRAWHIDE_SYSTEM_CLASS_DATA;
//
// Rawhide interval timer data structure
//
typedef struct _CLOCK_TABLE {
ULONG RollOver;
ULONG TimeIncr;
} CLOCK_TABLE, *PCLOCK_TABLE;
#define NUM_CLOCK_RATES 4
#define MAXIMUM_CLOCK_INCREMENT (NUM_CLOCK_RATES)
#define MINIMUM_CLOCK_INCREMENT 1
//
// Rawhide interrupt routine prototypes.
//
BOOLEAN
HalpAcknowledgeRawhideClockInterrupt(
VOID
);
ULONG
HalpGetRawhidePciInterruptVector(
IN PBUS_HANDLER BusHandler,
IN PBUS_HANDLER RootHandler,
IN ULONG BusInterruptLevel,
IN ULONG BusInterruptVector,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity
);
ULONG
HalpGetRawhideEisaInterruptVector(
IN PBUS_HANDLER BusHandler,
IN PBUS_HANDLER RootHandler,
IN ULONG BusInterruptLevel,
IN ULONG BusInterruptVector,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity
);
ULONG
HalpGetRawhideInternalInterruptVector(
IN PBUS_HANDLER BusHandler,
IN PBUS_HANDLER RootHandler,
IN ULONG BusInterruptLevel,
IN ULONG BusInterruptVector,
OUT PKIRQL Irql,
OUT PKAFFINITY Affinity
);
VOID
HalpInitializeProcessorMapping(
IN ULONG LogicalProcessor,
IN ULONG PhysicalProcessor,
IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
VOID
HalpInitializeSystemClassData(
ULONG Phase,
PLOADER_PARAMETER_BLOCK LoaderBlock
);
#endif // !defined (_LANGUAGE_ASSEMBLY)
#endif //_RAWHIDEH_