181 lines
3.7 KiB
C
181 lines
3.7 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
Copyright (c) 1994 Digital Equipment Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
info.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Ken Reneris (kenr) 08-Aug-1994
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Kernel mode only.
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#include "halp.h"
|
|||
|
|
|||
|
#ifdef _PNP_POWER_
|
|||
|
HAL_CALLBACKS HalCallback;
|
|||
|
#endif // _PNP_POWER_
|
|||
|
|
|||
|
//
|
|||
|
// External references
|
|||
|
//
|
|||
|
|
|||
|
extern WINDOW_CONTROL_REGISTERS HalpIsaWindowControl;
|
|||
|
extern WINDOW_CONTROL_REGISTERS HalpMasterWindowControl;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
HalpQueryInstalledBusInformation (
|
|||
|
OUT PVOID Buffer,
|
|||
|
IN ULONG BufferLength,
|
|||
|
OUT PULONG ReturnedLength
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#ifdef ALLOC_PRAGMA
|
|||
|
#pragma alloc_text(PAGE,HaliQuerySystemInformation)
|
|||
|
#pragma alloc_text(PAGE,HaliSetSystemInformation)
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
HaliQuerySystemInformation(
|
|||
|
IN HAL_QUERY_INFORMATION_CLASS InformationClass,
|
|||
|
IN ULONG BufferSize,
|
|||
|
IN OUT PVOID Buffer,
|
|||
|
OUT PULONG ReturnedLength
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
The function returns system-wide information controlled by the HAL for a
|
|||
|
variety of classes.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
InformationClass - Information class of the request.
|
|||
|
|
|||
|
BufferSize - Size of buffer supplied by the caller.
|
|||
|
|
|||
|
Buffer - Supplies the space to store the data and pass additional info.
|
|||
|
|
|||
|
ReturnedLength - Supplies a count in bytes of the amount of data returned.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
STATUS_SUCCESS or error.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
NTSTATUS Status;
|
|||
|
PULONG mapRegisters;
|
|||
|
|
|||
|
switch (InformationClass) {
|
|||
|
case HalInstalledBusInformation:
|
|||
|
Status = HalpQueryInstalledBusInformation (
|
|||
|
Buffer,
|
|||
|
BufferSize,
|
|||
|
ReturnedLength
|
|||
|
);
|
|||
|
break;
|
|||
|
|
|||
|
case HalProfileSourceInformation:
|
|||
|
Status = HalpProfileSourceInformation (
|
|||
|
Buffer,
|
|||
|
BufferSize,
|
|||
|
ReturnedLength);
|
|||
|
break;
|
|||
|
|
|||
|
case HalMapRegisterInformation:
|
|||
|
mapRegisters = (PULONG)Buffer;
|
|||
|
if ( BufferSize < 4 ) {
|
|||
|
Status = STATUS_BUFFER_TOO_SMALL;
|
|||
|
} else {
|
|||
|
switch ( *(PULONG)Buffer ) {
|
|||
|
case Isa:
|
|||
|
*mapRegisters = HalpIsaWindowControl.WindowSize / PAGE_SIZE;
|
|||
|
*ReturnedLength = 4;
|
|||
|
Status = STATUS_SUCCESS;
|
|||
|
break;
|
|||
|
|
|||
|
case Eisa:
|
|||
|
case PCIBus:
|
|||
|
*mapRegisters = HalpMasterWindowControl.WindowSize / PAGE_SIZE;
|
|||
|
*ReturnedLength = 4;
|
|||
|
Status = STATUS_SUCCESS;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
Status = STATUS_INVALID_PARAMETER;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
Status = STATUS_INVALID_LEVEL;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return(Status);
|
|||
|
}
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
HaliSetSystemInformation (
|
|||
|
IN HAL_SET_INFORMATION_CLASS InformationClass,
|
|||
|
IN ULONG BufferSize,
|
|||
|
IN PVOID Buffer
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
The function allows setting of various fields return by
|
|||
|
HalQuerySystemInformation.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
InformationClass - Information class of the request.
|
|||
|
|
|||
|
BufferSize - Size of buffer supplied by the caller.
|
|||
|
|
|||
|
Buffer - Supplies the data to be set.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
STATUS_SUCCESS or error.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
NTSTATUS Status;
|
|||
|
|
|||
|
switch (InformationClass) {
|
|||
|
|
|||
|
case HalProfileSourceInterval:
|
|||
|
Status = HalpProfileSourceInterval (
|
|||
|
Buffer,
|
|||
|
BufferSize);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
Status = STATUS_INVALID_LEVEL;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return Status;
|
|||
|
}
|