|
|
;/*++
; ; Copyright (c) Microsoft Corporation. All rights reserved. ; ; Module Name: ; ; ntacpi.h ; ; Abstract: ; ; ; This module contains definitions specific to the HAL's ; ACPI function. ; ; Author: ; ; Jake Oshins (jakeo) Feb. 18, 1997 ; ; Revision History: ; ;-
if 0 ; Begin C only code */
#ifndef _ACPI_H_
#define _ACPI_H_
#define SLEEP_STATE_FLUSH_CACHE 0x1
#define SLEEP_STATE_FIRMWARE_RESTART 0x2
#define SLEEP_STATE_SAVE_MOTHERBOARD 0x4
#define SLEEP_STATE_OFF 0x8
#define SLEEP_STATE_RESTART_OTHER_PROCESSORS 0x10
typedef struct { union { struct { ULONG Pm1aVal:4; ULONG Pm1bVal:4; ULONG Flags:24; } bits; ULONG AsULONG; }; } SLEEP_STATE_CONTEXT, *PSLEEP_STATE_CONTEXT;
//
// ACPI Register definitions
//
#define P_LVL2 4
#define PBLK_THT_EN 0x10
//
// Register layout of PM1x_EVT register
// Note also defined in acpiregs.h
//
#define PM1_PWRBTN_STS_BIT 8
#define PM1_PWRBTN_STS (1 << PM1_PWRBTN_STS_BIT)
//
// Register layout of PM1x_CTL
//
#define SCI_EN 1
#define BM_RLD 2
#define CTL_IGNORE 0x200
#define SLP_TYP_SHIFT 10
#define SLP_EN 0x2000
#define CTL_PRESERVE (SCI_EN + BM_RLD + CTL_IGNORE)
#define PM_TMR_FREQ 3579545
//
// HAL's table
//
typedef enum { HalAcpiTimerInit, HalAcpiTimerInterrupt, HalAcpiMachineStateInit, HalAcpiQueryFlags, HalPicStateIntact, HalRestorePicState, HalPciInterfaceReadConfig, HalPciInterfaceWriteConfig, HalSetVectorState, HalGetIOApicVersion, HalSetMaxLegacyPciBusNumber, HalIsVectorValid, HalAcpiMaxFunction } HAL_DISPATCH_FUNCTION;
typedef VOID (*pHalAcpiTimerInit)( IN ULONG TimerPort, IN BOOLEAN TimerValExt );
typedef VOID (*pHalAcpiTimerInterrupt)( VOID );
typedef struct { ULONG Count; ULONG Pblk[1]; } PROCESSOR_INIT, *PPROCESSOR_INIT;
#define HAL_C1_SUPPORTED 0x01
#define HAL_C2_SUPPORTED 0x02
#define HAL_C3_SUPPORTED 0x04
#define HAL_S1_SUPPORTED 0x08
#define HAL_S2_SUPPORTED 0x10
#define HAL_S3_SUPPORTED 0x20
#define HAL_S4_SUPPORTED 0x40
#define HAL_S5_SUPPORTED 0x80
typedef struct { BOOLEAN Supported; UCHAR Pm1aVal; UCHAR Pm1bVal; } HAL_SLEEP_VAL, *PHAL_SLEEP_VAL;
typedef VOID (*pHalAcpiMachineStateInit)( IN PPROCESSOR_INIT ProcInit, IN PHAL_SLEEP_VAL SleepValues, OUT PULONG PicVal );
typedef ULONG (*pHalAcpiQueryFlags)( VOID );
typedef BOOLEAN (*pHalPicStateIntact)( VOID );
typedef VOID (*pHalRestorePicState)( VOID );
typedef ULONG (*pHalInterfaceReadWriteConfig)( IN PVOID Context, IN UCHAR BusOffset, IN ULONG Slot, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length );
//
// Flags for interrupt vectors
//
#define VECTOR_MODE 1
#define VECTOR_LEVEL 1
#define VECTOR_EDGE 0
#define VECTOR_POLARITY 2
#define VECTOR_ACTIVE_LOW 2
#define VECTOR_ACTIVE_HIGH 0
//
// Vector Type:
//
// VECTOR_SIGNAL = standard edge-triggered or
// level-sensitive interrupt vector
//
// VECTOR_MESSAGE = an MSI (Message Signalled Interrupt) vector
//
#define VECTOR_TYPE 4
#define VECTOR_SIGNAL 0
#define VECTOR_MESSAGE 4
#define IS_LEVEL_TRIGGERED(vectorFlags) \
(vectorFlags & VECTOR_LEVEL)
#define IS_EDGE_TRIGGERED(vectorFlags) \
!(vectorFlags & VECTOR_LEVEL)
#define IS_ACTIVE_LOW(vectorFlags) \
(vectorFlags & VECTOR_ACTIVE_LOW)
#define IS_ACTIVE_HIGH(vectorFlags) \
!(vectorFlags & VECTOR_ACTIVE_LOW)
typedef VOID (*pHalSetVectorState)( IN ULONG Vector, IN ULONG Flags );
VOID HaliSetVectorState( IN ULONG Vector, IN ULONG Flags );
#define HAL_ACPI_PCI_RESOURCES 0x01
#define HAL_ACPI_PRT_SUPPORT 0x02
typedef ULONG (*pHalGetIOApicVersion)( IN ULONG ApicNo );
typedef VOID (*pHalSetMaxLegacyPciBusNumber)( IN ULONG BusNumber );
typedef BOOLEAN (*pHalIsVectorValid)( IN ULONG Vector );
BOOLEAN HaliIsVectorValid( IN ULONG Vector );
//
// typedef struct _PM_DISPATCH_TABLE {
// ULONG Signature;
// ULONG Version;
// PVOID Function[1];
// } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
//
typedef struct { ULONG Signature; ULONG Version; pHalAcpiTimerInit HalpAcpiTimerInit; pHalAcpiTimerInterrupt HalpAcpiTimerInterrupt; pHalAcpiMachineStateInit HalpAcpiMachineStateInit; pHalAcpiQueryFlags HalpAcpiQueryFlags; pHalPicStateIntact HalxPicStateIntact; pHalRestorePicState HalxRestorePicState; pHalInterfaceReadWriteConfig HalpPciInterfaceReadConfig; pHalInterfaceReadWriteConfig HalpPciInterfaceWriteConfig; pHalSetVectorState HalpSetVectorState; pHalGetIOApicVersion HalpGetIOApicVersion; pHalSetMaxLegacyPciBusNumber HalpSetMaxLegacyPciBusNumber; pHalIsVectorValid HalpIsVectorValid; } HAL_ACPI_DISPATCH_TABLE, *PHAL_ACPI_DISPATCH_TABLE;
#define HAL_ACPI_DISPATCH_SIGNATURE 'HAL '
#define HAL_ACPI_DISPATCH_VERSION 2
#define HalAcpiTimerInit ((pHalAcpiTimerInit)PmHalDispatchTable->Function[HalAcpiTimerInit])
#define HalAcpiTimerInterrupt ((pHalAcpiTimerInterrupt)PmHalDispatchTable->Function[HalAcpiTimerInterrupt])
#define HalAcpiMachineStateInit ((pHalAcpiMachineStateInit)PmHalDispatchTable->Function[HalAcpiMachineStateInit])
#define HalPicStateIntact ((pHalPicStateIntact)PmHalDispatchTable->Function[HalPicStateIntact])
#define HalRestorePicState ((pHalRestorePicState)PmHalDispatchTable->Function[HalRestorePicState])
#define HalPciInterfaceReadConfig ((pHalInterfaceReadWriteConfig)PmHalDispatchTable->Function[HalPciInterfaceReadConfig])
#define HalPciInterfaceWriteConfig ((pHalInterfaceReadWriteConfig)PmHalDispatchTable->Function[HalPciInterfaceWriteConfig])
#define HalSetVectorState ((pHalSetVectorState)PmHalDispatchTable->Function[HalSetVectorState])
#define HalGetIOApicVersion ((pHalGetIOApicVersion)PmHalDispatchTable->Function[HalGetIOApicVersion])
#define HalSetMaxLegacyPciBusNumber ((pHalSetMaxLegacyPciBusNumber)PmHalDispatchTable->Function[HalSetMaxLegacyPciBusNumber])
#define HalIsVectorValid ((pHalIsVectorValid)PmHalDispatchTable->Function[HalIsVectorValid])
extern PPM_DISPATCH_TABLE PmAcpiDispatchTable; extern PPM_DISPATCH_TABLE PmHalDispatchTable;
//
// ACPI driver's table
//
typedef enum { AcpiEnableDisableGPEvents, AcpiInitEnableAcpi, AcpiGpeEnableWakeEvents, AcpiMaxFunction } ACPI_DISPATCH_FUNCTION;
typedef VOID (*pAcpiEnableDisableGPEvents) ( IN BOOLEAN Enable );
typedef VOID (*pAcpiInitEnableAcpi) ( IN BOOLEAN ReEnable );
typedef VOID (*pAcpiGpeEnableWakeEvents)( VOID );
typedef struct { ULONG Signature; ULONG Version; pAcpiEnableDisableGPEvents AcpipEnableDisableGPEvents; pAcpiInitEnableAcpi AcpipInitEnableAcpi; pAcpiGpeEnableWakeEvents AcpipGpeEnableWakeEvents; } ACPI_HAL_DISPATCH_TABLE, *PACPI_HAL_DISPATCH_TABLE;
#define ACPI_HAL_DISPATCH_SIGNATURE 'ACPI'
#define ACPI_HAL_DISPATCH_VERSION 1
#define AcpiEnableDisableGPEvents (*(pAcpiEnableDisableGPEvents)PmAcpiDispatchTable->Function[AcpiEnableDisableGPEvents])
#define AcpiInitEnableAcpi (*(pAcpiInitEnableAcpi)PmAcpiDispatchTable->Function[AcpiInitEnableAcpi])
#define AcpiGpeEnableWakeEvents (*(pAcpiGpeEnableWakeEvents)PmAcpiDispatchTable->Function[AcpiGpeEnableWakeEvents])
// from detect\i386\acpibios.h
typedef struct { PHYSICAL_ADDRESS Base; LARGE_INTEGER Length; ULONGLONG Type; } ACPI_E820_ENTRY, *PACPI_E820_ENTRY;
typedef struct _ACPI_BIOS_MULTI_NODE { PHYSICAL_ADDRESS RsdtAddress; // 64-bit physical address of RSDT
ULONGLONG Count; ACPI_E820_ENTRY E820Entry[1]; } ACPI_BIOS_MULTI_NODE; typedef ACPI_BIOS_MULTI_NODE UNALIGNED *PACPI_BIOS_MULTI_NODE;
typedef enum { AcpiAddressRangeMemory = 1, AcpiAddressRangeReserved, AcpiAddressRangeACPI, AcpiAddressRangeNVS, AcpiAddressRangeMaximum, } ACPI_BIOS_E820_TYPE, *PACPI_BIOS_E820_TYPE;
NTSTATUS HalpAcpiFindRsdt ( OUT PACPI_BIOS_MULTI_NODE *AcpiMulti );
#endif //_ACPI_H_
/*
endif ; ; Begin assembly part of the definitions ;
; ; Register layout of ACPI processor register block ;
P_CNT equ 0 P_LVL2 equ 4 P_LVL3 equ 5
; ; Register layout of PM1x_EVT register ;
BM_STS equ 10h WAK_STS equ 8000h
; ; Register layout of PM1x_Enable ;
TMR_EN equ 0001h GBL_EN equ 0020h PWRBTN_EN equ 0100h SLPBTN_EN equ 0200h RTC_EN equ 0400h
; ; Register layout of PM1x_CTL ;
SCI_EN equ 1 BM_RLD equ 2 CTL_IGNORE equ 200h SLP_TYP_SHIFT equ 10 SLP_EN equ 2000h
CTL_PRESERVE equ (SCI_EN + BM_RLD + CTL_IGNORE)
; ; Register layout of PM2_CNT ;
ARB_DIS equ 1
; ; ACPI registers, as laid out in HalpFixedAcpiDescTable ;
PM1a_EVT EQU _HalpFixedAcpiDescTable + 56 PM1b_EVT EQU _HalpFixedAcpiDescTable + 60 PM1_EVT_LEN EQU _HalpFixedAcpiDescTable + 88
PM1a_CNT EQU _HalpFixedAcpiDescTable + 64 PM1b_CNT EQU _HalpFixedAcpiDescTable + 68
PM2_CNT_BLK EQU _HalpFixedAcpiDescTable + 72
PM_TMR_BLK EQU _HalpFixedAcpiDescTable + 76 PM_TMR_FREQ EQU 3579545
GPE0_BLK EQU _HalpFixedAcpiDescTable + 80 GPE1_BLK EQU _HalpFixedAcpiDescTable + 84
GPE0_BLK_LEN EQU _HalpFixedAcpiDescTable + 92 GPE1_BLK_LEN EQU _HalpFixedAcpiDescTable + 93
FLUSH_SIZE EQU _HalpFixedAcpiDescTable + 100 FLUSH_STRIDE EQU _HalpFixedAcpiDescTable + 102
DUTY_OFFSET EQU _HalpFixedAcpiDescTable + 104
RTC_DAY_ALRM EQU _HalpFixedAcpiDescTable + 106 RTC_MON_ALRM EQU _HalpFixedAcpiDescTable + 107 RTC_CENTURY EQU _HalpFixedAcpiDescTable + 108 FADT_FLAGS EQU _HalpFixedAcpiDescTable + 112
; ; FADT flag values ; WBINVD_SUPPORTED EQU 1 WBINVD_FLUSH EQU 2
; GeneralWakeupEnable EQU 0 RtcWakeupEnable EQU 1
; ; Constants used in the Context parameter to HaliAcpiSleep ; (must match C code above) ; SLEEP_STATE_FLUSH_CACHE EQU 1 SLEEP_STATE_FIRMWARE_RESTART EQU 2 SLEEP_STATE_SAVE_MOTHERBOARD EQU 4 SLEEP_STATE_OFF EQU 8 SLEEP_STATE_RESTART_OTHER_PROCESSORS EQU 10h CONTEXT_FLAG_SHIFT EQU 8
;*/
|