148 lines
3.2 KiB
C
148 lines
3.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1990-2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
translate.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is the ISA pnp IRQ translator.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Andy Thornton (andrewth) 7-June-97
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
Kernel Mode Driver.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
This should only be temporary and will be replaced by a call into the HAL
|
||
|
to retrieve its translators.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#include "busp.h"
|
||
|
#include "wdmguid.h"
|
||
|
#include "halpnpp.h"
|
||
|
|
||
|
//
|
||
|
//Prototypes
|
||
|
//
|
||
|
NTSTATUS FindInterruptTranslator (PPI_BUS_EXTENSION BusExtension,PIRP Irp);
|
||
|
|
||
|
#ifdef ALLOC_PRAGMA
|
||
|
#pragma alloc_text(PAGE,PiQueryInterface)
|
||
|
#pragma alloc_text (PAGE,FindInterruptTranslator)
|
||
|
#pragma alloc_text (PAGE,PipReleaseInterfaces)
|
||
|
#pragma alloc_text (PAGE,PipRebuildInterfaces)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
PiQueryInterface (
|
||
|
IN PPI_BUS_EXTENSION BusExtension,
|
||
|
IN OUT PIRP Irp
|
||
|
)
|
||
|
{
|
||
|
|
||
|
NTSTATUS status;
|
||
|
PIO_STACK_LOCATION thisIrpSp;
|
||
|
|
||
|
PAGED_CODE();
|
||
|
|
||
|
thisIrpSp = IoGetCurrentIrpStackLocation( Irp );
|
||
|
status = STATUS_NOT_SUPPORTED;
|
||
|
|
||
|
//
|
||
|
// Check if we are requesting a translator interface
|
||
|
//
|
||
|
|
||
|
if (RtlEqualMemory(&GUID_TRANSLATOR_INTERFACE_STANDARD,
|
||
|
thisIrpSp->Parameters.QueryInterface.InterfaceType,
|
||
|
sizeof(GUID))) {
|
||
|
|
||
|
status = FindInterruptTranslator (BusExtension,Irp);
|
||
|
if (NT_SUCCESS (status)) {
|
||
|
//
|
||
|
// Save away the hal interface, so we can unload it...
|
||
|
//
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return status;
|
||
|
}
|
||
|
|
||
|
NTSTATUS
|
||
|
FindInterruptTranslator (PPI_BUS_EXTENSION BusExtension,PIRP Irp)
|
||
|
{
|
||
|
NTSTATUS status;
|
||
|
PIO_STACK_LOCATION thisIrpSp;
|
||
|
PTRANSLATOR_INTERFACE translator;
|
||
|
ULONG busNumber, length;
|
||
|
INTERFACE_TYPE interfaceType;
|
||
|
|
||
|
thisIrpSp = IoGetCurrentIrpStackLocation( Irp );
|
||
|
status = STATUS_NOT_SUPPORTED;
|
||
|
|
||
|
if ((UINT_PTR)(thisIrpSp->Parameters.QueryInterface.InterfaceSpecificData) ==
|
||
|
CmResourceTypeInterrupt) {
|
||
|
|
||
|
//
|
||
|
// Retrieve the bus number and interface type for the bridge
|
||
|
//
|
||
|
|
||
|
status = IoGetDeviceProperty(BusExtension->PhysicalBusDevice,
|
||
|
DevicePropertyLegacyBusType,
|
||
|
sizeof(INTERFACE_TYPE),
|
||
|
&interfaceType,
|
||
|
&length
|
||
|
);
|
||
|
|
||
|
//ASSERT(NT_SUCCESS(status));
|
||
|
|
||
|
status = IoGetDeviceProperty(BusExtension->PhysicalBusDevice,
|
||
|
DevicePropertyBusNumber,
|
||
|
sizeof(ULONG),
|
||
|
&busNumber,
|
||
|
&length
|
||
|
);
|
||
|
|
||
|
//ASSERT(NT_SUCCESS(status));
|
||
|
|
||
|
status = HalGetInterruptTranslator(
|
||
|
interfaceType,
|
||
|
busNumber,
|
||
|
Isa,
|
||
|
thisIrpSp->Parameters.QueryInterface.Size,
|
||
|
thisIrpSp->Parameters.QueryInterface.Version,
|
||
|
(PTRANSLATOR_INTERFACE) thisIrpSp->Parameters.QueryInterface.Interface,
|
||
|
&busNumber
|
||
|
);
|
||
|
|
||
|
}
|
||
|
return status;
|
||
|
|
||
|
}
|
||
|
|
||
|
NTSTATUS
|
||
|
PipReleaseInterfaces(PPI_BUS_EXTENSION PipBusExtension)
|
||
|
{
|
||
|
|
||
|
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|
||
|
|
||
|
NTSTATUS
|
||
|
PipRebuildInterfaces(PPI_BUS_EXTENSION PipBusExtension)
|
||
|
{
|
||
|
|
||
|
return STATUS_SUCCESS;
|
||
|
}
|