/*++ 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; }