Initialize ACPI Timer
This commit is contained in:
parent
7704e5d399
commit
7b29897efb
@ -59,6 +59,13 @@
|
||||
#define ACPI_WSMT_SIGNATURE 0x544D5357 /* Windows SMM Security Mitigation Table */
|
||||
#define ACPI_XSDT_SIGNATURE 0x54445358 /* eXtended System Descriptor Table */
|
||||
|
||||
/* ACPI FADT flags masks */
|
||||
#define ACPI_FADT_32BIT_TIMER (1<<8)
|
||||
|
||||
/* ACPI Timer bit masks */
|
||||
#define ACPI_FADT_TIMER_32BIT 0x80000000
|
||||
#define ACPI_FADT_TIMER_24BIT 0x00800000
|
||||
|
||||
/* Default serial port settings */
|
||||
#define COMPORT_CLOCK_RATE 0x1C200
|
||||
#define COMPORT_WAIT_TIMEOUT 204800
|
||||
@ -205,7 +212,7 @@ typedef struct _ACPI_DESCRIPTION_HEADER
|
||||
ULONG CreatorRev;
|
||||
} ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
|
||||
|
||||
/* ACPI cache list */
|
||||
/* ACPI cache list structure */
|
||||
typedef struct _ACPI_CACHE_LIST
|
||||
{
|
||||
LIST_ENTRY ListEntry;
|
||||
@ -300,6 +307,13 @@ typedef struct _ACPI_FADT
|
||||
GENERIC_ADDRESS SleepStatusReg;
|
||||
} ACPI_FADT, *PACPI_FADT;
|
||||
|
||||
/* ACPI Timer information structure */
|
||||
typedef struct _ACPI_TIMER_INFO
|
||||
{
|
||||
ULONG TimerPort;
|
||||
ULONG MsbMask;
|
||||
} ACPI_TIMER_INFO, *PACPI_TIMER_INFO;
|
||||
|
||||
/* Serial (COM) port initial state */
|
||||
typedef struct _CPPORT
|
||||
{
|
||||
|
@ -121,6 +121,9 @@ HlpInitializeAcpi(VOID)
|
||||
return STATUS_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* Initialize ACPI timer */
|
||||
HlpInitializeAcpiTimer();
|
||||
|
||||
/* Return success */
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
@ -251,6 +254,47 @@ HlpInitializeAcpiSystemDescriptionTable(OUT PACPI_DESCRIPTION_HEADER *AcpiTable)
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the ACPI Timer.
|
||||
*
|
||||
* @return This routine returns a status code.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
HlpInitializeAcpiTimer(VOID)
|
||||
{
|
||||
PACPI_FADT Fadt;
|
||||
XTSTATUS Status;
|
||||
|
||||
/* Get Fixed ACPI Description Table (FADT) */
|
||||
Status = HlGetAcpiTable(ACPI_FADT_SIGNATURE, (PACPI_DESCRIPTION_HEADER*)&Fadt);
|
||||
if(Status != STATUS_SUCCESS || !Fadt)
|
||||
{
|
||||
/* Failed to get FADT, return error */
|
||||
return STATUS_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* Set ACPI timer port address */
|
||||
HlpAcpiTimerInfo.TimerPort = Fadt->PmTmrBlkIoPort;
|
||||
|
||||
/* Determine whether 32-bit or 24-bit timer is used */
|
||||
if(Fadt->Flags & ACPI_FADT_32BIT_TIMER)
|
||||
{
|
||||
/* 32-bit timer */
|
||||
HlpAcpiTimerInfo.MsbMask = ACPI_FADT_TIMER_32BIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 24-bit timer */
|
||||
HlpAcpiTimerInfo.MsbMask = ACPI_FADT_TIMER_24BIT;
|
||||
}
|
||||
|
||||
/* Return success */
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries kernel local ACPI cache in attempt to find a requested ACPI table.
|
||||
*
|
||||
|
@ -15,6 +15,9 @@ LIST_ENTRY HlpAcpiCacheList;
|
||||
/* ACPI Root System Description Pointer (RSDP) */
|
||||
PACPI_RSDP HlpAcpiRsdp;
|
||||
|
||||
/* ACPI timer information */
|
||||
ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
||||
|
||||
/* Active processors count */
|
||||
KAFFINITY HlpActiveProcessors;
|
||||
|
||||
|
@ -18,6 +18,9 @@ EXTERN LIST_ENTRY HlpAcpiCacheList;
|
||||
/* ACPI Root System Description Pointer (RSDP) */
|
||||
EXTERN PACPI_RSDP HlpAcpiRsdp;
|
||||
|
||||
/* ACPI timer information */
|
||||
EXTERN ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
||||
|
||||
/* Active processors count */
|
||||
EXTERN KAFFINITY HlpActiveProcessors;
|
||||
|
||||
|
@ -95,6 +95,10 @@ XTAPI
|
||||
XTSTATUS
|
||||
HlpInitializeAcpiSystemDescriptionTable(OUT PACPI_DESCRIPTION_HEADER *AcpiTable);
|
||||
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
HlpInitializeAcpiTimer(VOID);
|
||||
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
HlpQueryAcpiCache(IN ULONG Signature,
|
||||
|
Loading…
Reference in New Issue
Block a user