2001-08-21 20:18:27 +00:00
|
|
|
/*
|
2006-11-15 00:08:51 +00:00
|
|
|
* PROJECT: ReactOS HA:
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
2006-11-29 08:28:20 +00:00
|
|
|
* FILE: hal/halx86/generic/sysinfo.c
|
2006-11-15 00:08:51 +00:00
|
|
|
* PURPOSE: HAL Information Routines
|
|
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
|
|
*/
|
2001-08-21 20:18:27 +00:00
|
|
|
|
2006-11-15 00:08:51 +00:00
|
|
|
/* INCLUDES ******************************************************************/
|
2001-08-21 20:18:27 +00:00
|
|
|
|
2003-02-26 14:14:47 +00:00
|
|
|
#include <hal.h>
|
2005-06-19 22:53:49 +00:00
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
2001-08-21 20:18:27 +00:00
|
|
|
|
2009-01-19 23:22:22 +00:00
|
|
|
PUCHAR KdComPortInUse;
|
2009-10-29 19:58:41 +00:00
|
|
|
PADDRESS_USAGE HalpAddressUsageList;
|
|
|
|
IDTUsageFlags HalpIDTUsageFlags[MAXIMUM_IDTVECTOR];
|
|
|
|
IDTUsage HalpIDTUsage[MAXIMUM_IDTVECTOR];
|
|
|
|
|
|
|
|
ADDRESS_USAGE HalpDefaultIoSpace =
|
|
|
|
{
|
|
|
|
NULL, CmResourceTypePort, IDT_INTERNAL,
|
|
|
|
{
|
|
|
|
{0x2000, 0xC000}, /* PIC?? */
|
|
|
|
{0xC000, 0x1000}, /* DMA 2 */
|
|
|
|
{0x8000, 0x1000}, /* DMA 1 */
|
|
|
|
{0x2000, 0x200}, /* PIC 1 */
|
|
|
|
{0xA000, 0x200}, /* PIC 2 */
|
|
|
|
{0x4000, 0x400}, /* PIT 1 */
|
|
|
|
{0x4800, 0x400}, /* PIT 2 */
|
|
|
|
{0x9200, 0x100}, /* ????? */
|
|
|
|
{0x7000, 0x200}, /* CMOS */
|
|
|
|
{0xF000, 0x1000}, /* ????? */
|
|
|
|
{0xCF800, 0x800}, /* PCI 0 */
|
|
|
|
{0,0},
|
|
|
|
}
|
|
|
|
};
|
2006-11-29 22:12:50 +00:00
|
|
|
|
2006-11-14 20:59:48 +00:00
|
|
|
/* FUNCTIONS *****************************************************************/
|
2001-08-21 20:18:27 +00:00
|
|
|
|
2006-11-14 20:59:48 +00:00
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
2009-10-29 19:58:41 +00:00
|
|
|
HaliQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
|
|
|
|
IN ULONG BufferSize,
|
|
|
|
IN OUT PVOID Buffer,
|
|
|
|
OUT PULONG ReturnedLength)
|
2003-02-26 14:14:47 +00:00
|
|
|
{
|
2007-10-18 08:00:59 +00:00
|
|
|
#define REPORT_THIS_CASE(X) case X: DPRINT1("Unhandled case: %s\n", #X); break
|
|
|
|
switch (InformationClass)
|
|
|
|
{
|
|
|
|
REPORT_THIS_CASE(HalInstalledBusInformation);
|
|
|
|
REPORT_THIS_CASE(HalProfileSourceInformation);
|
|
|
|
REPORT_THIS_CASE(HalInformationClassUnused1);
|
|
|
|
REPORT_THIS_CASE(HalPowerInformation);
|
|
|
|
REPORT_THIS_CASE(HalProcessorSpeedInformation);
|
|
|
|
REPORT_THIS_CASE(HalCallbackInformation);
|
|
|
|
REPORT_THIS_CASE(HalMapRegisterInformation);
|
|
|
|
REPORT_THIS_CASE(HalMcaLogInformation);
|
|
|
|
case HalFrameBufferCachingInformation:
|
|
|
|
{
|
2009-01-21 17:10:16 +00:00
|
|
|
/* FIXME: TODO */
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
2007-10-18 08:00:59 +00:00
|
|
|
}
|
|
|
|
REPORT_THIS_CASE(HalDisplayBiosInformation);
|
|
|
|
REPORT_THIS_CASE(HalProcessorFeatureInformation);
|
|
|
|
REPORT_THIS_CASE(HalNumaTopologyInterface);
|
|
|
|
REPORT_THIS_CASE(HalErrorInformation);
|
|
|
|
REPORT_THIS_CASE(HalCmcLogInformation);
|
|
|
|
REPORT_THIS_CASE(HalCpeLogInformation);
|
|
|
|
REPORT_THIS_CASE(HalQueryMcaInterface);
|
|
|
|
REPORT_THIS_CASE(HalQueryAMLIIllegalIOPortAddresses);
|
|
|
|
REPORT_THIS_CASE(HalQueryMaxHotPlugMemoryAddress);
|
|
|
|
REPORT_THIS_CASE(HalPartitionIpiInterface);
|
|
|
|
REPORT_THIS_CASE(HalPlatformInformation);
|
|
|
|
REPORT_THIS_CASE(HalQueryProfileSourceList);
|
|
|
|
}
|
|
|
|
#undef REPORT_THIS_CASE
|
|
|
|
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
2003-02-26 14:14:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
2006-11-14 20:59:48 +00:00
|
|
|
NTAPI
|
2006-11-27 19:26:31 +00:00
|
|
|
HaliSetSystemInformation(IN HAL_SET_INFORMATION_CLASS InformationClass,
|
2006-11-14 20:59:48 +00:00
|
|
|
IN ULONG BufferSize,
|
|
|
|
IN OUT PVOID Buffer)
|
2001-08-21 20:18:27 +00:00
|
|
|
{
|
2006-11-14 20:59:48 +00:00
|
|
|
UNIMPLEMENTED;
|
|
|
|
return STATUS_NOT_IMPLEMENTED;
|
2001-08-21 20:18:27 +00:00
|
|
|
}
|
2003-02-26 14:14:47 +00:00
|
|
|
|
2009-10-29 19:58:41 +00:00
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
HalpRegisterVector(IN UCHAR Flags,
|
|
|
|
IN ULONG BusVector,
|
|
|
|
IN ULONG SystemVector,
|
|
|
|
IN KIRQL Irql)
|
|
|
|
{
|
|
|
|
/* Save the vector flags */
|
|
|
|
HalpIDTUsageFlags[SystemVector].Flags = Flags;
|
|
|
|
|
|
|
|
/* Save the vector data */
|
|
|
|
HalpIDTUsage[SystemVector].Irql = Irql;
|
|
|
|
HalpIDTUsage[SystemVector].BusReleativeVector = BusVector;
|
|
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
|
|
NTAPI
|
|
|
|
HalpEnableInterruptHandler(IN UCHAR Flags,
|
|
|
|
IN ULONG BusVector,
|
|
|
|
IN ULONG SystemVector,
|
|
|
|
IN KIRQL Irql,
|
|
|
|
IN PVOID Handler,
|
|
|
|
IN KINTERRUPT_MODE Mode)
|
|
|
|
{
|
|
|
|
UCHAR Entry;
|
|
|
|
|
|
|
|
/* Convert the vector into the IDT entry */
|
|
|
|
Entry = HalVectorToIDTEntry(SystemVector);
|
|
|
|
|
|
|
|
/* Register the vector */
|
|
|
|
HalpRegisterVector(Flags, BusVector, SystemVector, Irql);
|
|
|
|
|
|
|
|
/* Connect the interrupt */
|
|
|
|
((PKIPCR)KeGetPcr())->IDT[Entry].ExtendedOffset = (USHORT)(((ULONG_PTR)Handler >> 16) & 0xFFFF);
|
|
|
|
((PKIPCR)KeGetPcr())->IDT[Entry].Offset = (USHORT)((ULONG_PTR)Handler);
|
|
|
|
|
|
|
|
/* Enable the interrupt */
|
|
|
|
HalEnableSystemInterrupt(SystemVector, Irql, Mode);
|
|
|
|
}
|
|
|
|
|
2003-02-26 14:14:47 +00:00
|
|
|
/* EOF */
|