/* * PROJECT: ReactOS ISA PnP Bus driver * FILE: pdo.c * PURPOSE: PDO-specific code * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org) */ #include #define NDEBUG #include NTSTATUS NTAPI IsaPdoQueryDeviceRelations( IN PISAPNP_LOGICAL_DEVICE LogDev, IN PIRP Irp, IN PIO_STACK_LOCATION IrpSp) { PDEVICE_RELATIONS DeviceRelations; if (IrpSp->Parameters.QueryDeviceRelations.Type != TargetDeviceRelation) return Irp->IoStatus.Status; DeviceRelations = ExAllocatePool(PagedPool, sizeof(*DeviceRelations)); if (!DeviceRelations) return STATUS_INSUFFICIENT_RESOURCES; DeviceRelations->Count = 1; DeviceRelations->Objects[0] = LogDev->Common.Self; ObReferenceObject(LogDev->Common.Self); Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations; return STATUS_SUCCESS; } NTSTATUS NTAPI IsaPdoPnp( IN PISAPNP_LOGICAL_DEVICE LogDev, IN PIRP Irp, IN PIO_STACK_LOCATION IrpSp) { NTSTATUS Status = Irp->IoStatus.Status; switch (IrpSp->MinorFunction) { case IRP_MN_START_DEVICE: Status = IsaHwActivateDevice(LogDev); if (NT_SUCCESS(Status)) LogDev->Common.State = dsStarted; break; case IRP_MN_STOP_DEVICE: Status = IsaHwDeactivateDevice(LogDev); if (NT_SUCCESS(Status)) LogDev->Common.State = dsStopped; break; case IRP_MN_QUERY_DEVICE_RELATIONS: Status = IsaPdoQueryDeviceRelations(LogDev, Irp, IrpSp); break; case IRP_MN_QUERY_RESOURCES: DPRINT1("IRP_MN_QUERY_RESOURCES is UNIMPLEMENTED!\n"); break; case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: DPRINT1("IRP_MN_QUERY_RESOURCE_REQUIREMENTS is UNIMPLEMENTED!\n"); break; default: DPRINT1("Unknown PnP code: %x\n", IrpSp->MinorFunction); break; } Irp->IoStatus.Status = Status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return Status; }