}
/* Validate the signature */
- DPRINT1("ACPI DSDT at 0x%p\n", Header);
if (Header->Signature != DSDT_SIGNATURE)
{
/* Fail and unmap */
if (!Xsdt) return NULL;
/* Won't be using the RSDT */
- DPRINT1("ACPI XSDT at 0x%p\n", Xsdt);
Rsdt = NULL;
}
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
- DPRINT1("Failed to find ACPI table %c%c%c%c\n",
- (Signature & 0xFF),
- (Signature & 0xFF00) >> 8,
- (Signature & 0xFF0000) >> 16,
- (Signature & 0xFF000000) >> 24);
-
/* Didn't find anything */
return NULL;
}
/* Get the boot table */
BootTable = HalAcpiGetTable(LoaderBlock, BOOT_SIGNATURE);
HalpSimpleBootFlagTable = BootTable;
- DPRINT1("ACPI BOOT at 0x%p\n", HalpSimpleBootFlagTable);
-
+
/* Validate it */
if ((BootTable) &&
(BootTable->Header.Length >= sizeof(BOOT_TABLE)) &&
}
/* Validate it */
- DPRINT1("ACPI RSDT at 0x%p\n", Rsdt);
if ((Rsdt->Header.Signature != RSDT_SIGNATURE) &&
(Rsdt->Header.Signature != XSDT_SIGNATURE))
{
}
}
- DPRINT1("ACPI %d.0 detected\n", (Rsdt->Header.Revision + 1));
-
/* Done */
return Status;
}
PAGED_CODE();
/* Is this in the init phase? */
- if (!TimerPort )
+ if (!TimerPort)
{
/* Get the data from the FADT */
TimerPort = HalpFixedAcpiDescTable.pm_tmr_blk_io_port;
TimerValExt = HalpFixedAcpiDescTable.flags & ACPI_TMR_VAL_EXT;
+ DPRINT1("ACPI Timer at: %Xh (EXT: %d)\n", TimerPort, TimerValExt);
}
/* FIXME: Now proceed to the timer initialization */
- DPRINT1("ACPI Timer at: %Xh (EXT: %d)\n", TimerPort, TimerValExt);
//HalaAcpiTimerInit(TimerPort, TimerValExt);
}
PHYSICAL_ADDRESS PhysicalAddress;
/* Only do this once */
- DPRINT("You are booting the ACPI HAL!\n");
if (HalpProcessedACPIPhase0) return STATUS_SUCCESS;
/* Setup the ACPI table cache */
}
/* Assume typical size, otherwise whatever the descriptor table says */
- DPRINT1("ACPI FACP at 0x%p\n", Fadt);
TableLength = sizeof(FADT);
if (Fadt->Header.Length < sizeof(FADT)) TableLength = Fadt->Header.Length;
/* Get the debug table for KD */
HalpDebugPortTable = HalAcpiGetTable(LoaderBlock, DBGP_SIGNATURE);
- DPRINT1("ACPI DBGP at 0x%p\n", HalpDebugPortTable);
/* Initialize NUMA through the SRAT */
HalpNumaInitializeStaticConfiguration(LoaderBlock);
/* Initialize hotplug through the SRAT */
HalpDynamicSystemResourceConfiguration(LoaderBlock);
- DPRINT1("ACPI SRAT at 0x%p\n", HalpAcpiSrat);
if (HalpAcpiSrat)
{
DPRINT1("Your machine has a SRAT, but NUMA/HotPlug are not supported!\n");
/* Setup the boot table */
HalpInitBootTable(LoaderBlock);
+ /* Debugging code */
+ {
+ PLIST_ENTRY ListHead, NextEntry;
+ PACPI_CACHED_TABLE CachedTable;
+
+ /* Loop cached tables */
+ ListHead = &HalpAcpiTableCacheList;
+ NextEntry = ListHead->Flink;
+ while (NextEntry != ListHead)
+ {
+ /* Get the table */
+ CachedTable = CONTAINING_RECORD(NextEntry, ACPI_CACHED_TABLE, Links);
+
+ /* Compare signatures */
+ if ((CachedTable->Header.Signature == RSDT_SIGNATURE) ||
+ (CachedTable->Header.Signature == XSDT_SIGNATURE))
+ {
+ DPRINT1("ACPI %d.0 Detected. Tables: ", (CachedTable->Header.Revision + 1));
+ }
+
+ DbgPrint("[%c%c%c%c] ",
+ (CachedTable->Header.Signature & 0xFF),
+ (CachedTable->Header.Signature & 0xFF00) >> 8,
+ (CachedTable->Header.Signature & 0xFF0000) >> 16,
+ (CachedTable->Header.Signature & 0xFF000000) >> 24);
+
+ /* Keep going */
+ NextEntry = NextEntry->Flink;
+ }
+ DbgPrint("\n");
+ }
+
/* Return success */
return STATUS_SUCCESS;
}
PEPROCESS Process;
ULONG_PTR DisableBoost = 0;
ULONG_PTR IdealProcessor = 0;
+ ULONG_PTR Break = 0;
PTEB Teb;
ULONG_PTR TlsIndex = 0;
PVOID *ExpansionSlots;
/* All done */
break;
+
+ case ThreadBreakOnTermination:
+
+ /* Check buffer length */
+ if (ThreadInformationLength != sizeof(ULONG))
+ {
+ Status = STATUS_INFO_LENGTH_MISMATCH;
+ break;
+ }
+
+ /* Enter SEH for direct buffer read */
+ _SEH2_TRY
+ {
+ Break = *(PULONG)ThreadInformation;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ /* Get exception code */
+ Break = 0;
+ Status = _SEH2_GetExceptionCode();
+ _SEH2_YIELD(break);
+ }
+ _SEH2_END;
+
+ /* Setting 'break on termination' requires the SeDebugPrivilege */
+ if (!SeSinglePrivilegeCheck(SeDebugPrivilege, PreviousMode))
+ {
+ Status = STATUS_PRIVILEGE_NOT_HELD;
+ break;
+ }
+
+ /* Set or clear the flag */
+ if (Break)
+ {
+ PspSetCrossThreadFlag(Thread, CT_BREAK_ON_TERMINATION_BIT);
+ }
+ else
+ {
+ PspClearCrossThreadFlag(Thread, CT_BREAK_ON_TERMINATION_BIT);
+ }
+ break;
default:
/* We don't implement it yet */
- DPRINT1("Not implemented: %lx\n", ThreadInformationClass);
+ DPRINT1("Not implemented: %d\n", ThreadInformationClass);
Status = STATUS_NOT_IMPLEMENTED;
}