e5f424e274aaf6f2815d810c357054059adc0bf8 hal/halx86/generic/sysinfo.c | 61 +++++++++++++++++++++++++++++++++++++++++++- hal/halx86/include/halp.h | 8 ++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/hal/halx86/generic/sysinfo.c b/hal/halx86/generic/sysinfo.c index d3a72c5..b5b6a5e 100644 --- a/hal/halx86/generic/sysinfo.c +++ b/hal/halx86/generic/sysinfo.c @@ -12,10 +12,52 @@ #define NDEBUG #include +NTSTATUS +NTAPI +HaliHandlePCIConfigSpaceAccess(BOOLEAN IsRead, + ULONG Port, + ULONG Length, + PVOID Buffer); + +AMLI_ILLEGAL_IO_PORT_ADDRESSES AMLIIllegalIOPortAddresses[19] = +{ + { 0x0000, 0x10, 1, NULL }, + { 0x0020, 0x02, 0, NULL }, + { 0x0040, 0x04, 1, NULL }, + { 0x0048, 0x04, 1, NULL }, + { 0x0070, 0x02, 1, NULL }, + { 0x0074, 0x03, 1, NULL }, + { 0x0081, 0x03, 1, NULL }, + { 0x0087, 0x01, 1, NULL }, + { 0x0089, 0x01, 1, NULL }, + { 0x008A, 0x02, 1, NULL }, + { 0x008F, 0x01, 1, NULL }, + { 0x0090, 0x02, 1, NULL }, + { 0x0093, 0x02, 1, NULL }, + { 0x0096, 0x02, 1, NULL }, + { 0x00A0, 0x02, 0, NULL }, + { 0x00C0, 0x20, 1, NULL }, + { 0x04D0, 0x02, 0, NULL }, + { 0x0CF8, 0x08, 1, &HaliHandlePCIConfigSpaceAccess }, + { 0x0000, 0x00, 0, NULL } +}; + /* FUNCTIONS ******************************************************************/ NTSTATUS NTAPI +HaliHandlePCIConfigSpaceAccess(BOOLEAN IsRead, + ULONG Port, + ULONG Length, + PVOID Buffer) +{ + DPRINT1("HaliHandlePCIConfigSpaceAccess: IsRead %X, Port %X, Length %X, Buffer %p\n", IsRead, Port, Length, Buffer); + //ASSERT(FALSE); + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI HaliQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, IN ULONG BufferSize, IN OUT PVOID Buffer, @@ -24,6 +66,24 @@ HaliQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, #define REPORT_THIS_CASE(X) case X: DPRINT1("Unhandled case: %s\n", #X); break switch (InformationClass) { + case HalQueryAMLIIllegalIOPortAddresses: + { + ULONG Size = sizeof(AMLIIllegalIOPortAddresses); + + if (BufferSize < Size) + { + *OutLength = Size; + KeFlushWriteBuffer(); + return STATUS_INFO_LENGTH_MISMATCH; + } + + RtlCopyMemory(Buffer, AMLIIllegalIOPortAddresses, Size); + + *OutLength = Size; + KeFlushWriteBuffer(); + return STATUS_SUCCESS; + } + REPORT_THIS_CASE(HalInstalledBusInformation); REPORT_THIS_CASE(HalProfileSourceInformation); REPORT_THIS_CASE(HalInformationClassUnused1); @@ -44,7 +104,6 @@ HaliQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, 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); diff --git a/hal/halx86/include/halp.h b/hal/halx86/include/halp.h index 1ab7874..ab70039 100644 --- a/hal/halx86/include/halp.h +++ b/hal/halx86/include/halp.h @@ -185,6 +185,14 @@ typedef struct _HalAddressUsage } Element[]; } ADDRESS_USAGE, *PADDRESS_USAGE; +typedef struct _AMLI_ILLEGAL_IO_PORT_ADDRESSES +{ + ULONG Start; + ULONG Length; + ULONG Param; + PVOID Handler; +} AMLI_ILLEGAL_IO_PORT_ADDRESSES, *PAMLI_ILLEGAL_IO_PORT_ADDRESSES; + /* adapter.c */ PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);