You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.4 KiB
147 lines
3.4 KiB
/*++
|
|
|
|
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;
|
|
}
|