Leaked source code of windows server 2003
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

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