diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/nthals/extender/pnpbios/i386/busp.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/nthals/extender/pnpbios/i386/busp.h')
-rw-r--r-- | private/ntos/nthals/extender/pnpbios/i386/busp.h | 499 |
1 files changed, 499 insertions, 0 deletions
diff --git a/private/ntos/nthals/extender/pnpbios/i386/busp.h b/private/ntos/nthals/extender/pnpbios/i386/busp.h new file mode 100644 index 000000000..ca894ea05 --- /dev/null +++ b/private/ntos/nthals/extender/pnpbios/i386/busp.h @@ -0,0 +1,499 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + busp.h + +Abstract: + + Hardware independent header file for pnp bios bus extender. + +Author: + + Shie-Lin Tzong (shielint) Apr-21-1995 + +Environment: + + Kernel mode only. + +Revision History: + +--*/ + +#include "pbapi.h" +#include "stdio.h" +#include "stdarg.h" + +// +// Structures +// + +// +// When queued, the following HAL_DEVICE_CONTROL_CONTEXT values are defined +// + +#define ContextWorkQueue BusExtenderReserved[0] +#define ContextControlHandler BusExtenderReserved[2] + +// +// When in progress, the following HAL_DEVICE_CONTROL_CONTEXT values are defined +// + +#define ContextArgument1 BusExtenderReserved[0] +#define ContextArgument2 BusExtenderReserved[1] +#define ContextBusyFlag BusExtenderReserved[2] + +// +// Define virtual slot number for docking station. (We need to return docking +// station slot number before knowing the real slot number. ) +// + +#define DOCK_VIRTUAL_SLOT_NUMBER 0xFFFF + +// +// DEVICE_DATA Flags masks +// + +#define DEVICE_FLAGS_DOCKING_STATION 0x10000000 +#define DEVICE_FLAGS_VALID 0x00000001 +#define DEVICE_FLAGS_WARM_DOCKING 0x00000002 +#define DEVICE_FLAGS_COLD_DOCKING 0x00000004 +#define DEVICE_FLAGS_EJECT_SUPPORTED 0x00000008 + +typedef struct _DEVICE_DATA_ { + SINGLE_LIST_ENTRY Next; + ULONG Flags; + + // + // DeviceControl in progress flags + // + + BOOLEAN SyncBusy; + + // + // Pointer to bus specific data + // + + PVOID BusData; + + // + // Length of the bus data + // + + ULONG BusDataLength; + +} DEVICE_DATA, *PDEVICE_DATA; + +// +// Extension data for Bus extender +// + +typedef struct _MB_BUS_EXTENSION { + + // + // BusHandler points back to the BUS_HANDLER structure for this extension + // + + PBUS_HANDLER BusHandler; + + // + // Bus Check request list + // + + LIST_ENTRY CheckBus; + + // + // Device control request list + // + + LIST_ENTRY DeviceControl; + + // + // Slot Data link list + // + + SINGLE_LIST_ENTRY ValidSlots; + ULONG NoValidSlots; + + // + // Pointer to docking station device data. + // This is mainly for convenience. + // + + PDEVICE_DATA DockingStationDevice; + ULONG DockingStationId; + ULONG DockingStationSerialNumber; +} MB_BUS_EXTENSION, *PMB_BUS_EXTENSION; + +typedef struct { + BOOLEAN Control; +} *PBCTL_SET_CONTROL; + +// +// Pnp Bios bus extender device object extension +// + +typedef struct _MB_DEVICE_EXTENSION { + PBUS_HANDLER BusHandler; +} MB_DEVICE_EXTENSION, *PMB_DEVICE_EXTENSION; + +// +// Only support 2 buses: main bus and docking station bus. +// + +#define MAXIMUM_BUS_NUMBER 2 + +// +// SlotControl related internal definitions +// + +typedef BOOLEAN (FASTCALL * BEGIN_FUNCTION)(PDEVICE_DATA, PHAL_DEVICE_CONTROL_CONTEXT); +typedef VOID (* CONTROL_FUNCTION)(PDEVICE_DATA, PHAL_DEVICE_CONTROL_CONTEXT); + +typedef struct _DEVICE_CONTROL_HANDLER { + ULONG ControlCode; + ULONG MinBuffer; + BEGIN_FUNCTION BeginDeviceControl; + CONTROL_FUNCTION ControlHandler; +} DEVICE_CONTROL_HANDLER, *PDEVICE_CONTROL_HANDLER; + +#define NUMBER_DEVICE_CONTROL_FUNCTIONS 11 + +// +// misc. definitions +// + +#define BUS_0_SIGNATURE 0xabababab +#define MIN_DETECT_SIGNATURE_SIZE (FIELD_OFFSET(CM_RESOURCE_LIST, List) + \ + FIELD_OFFSET(CM_FULL_RESOURCE_DESCRIPTOR, PartialResourceList)) + +// +// Globals +// + +extern FAST_MUTEX MbpMutex; +extern KSPIN_LOCK MbpSpinlock; +extern LIST_ENTRY MbpControlWorkerList; +extern LIST_ENTRY MbpCheckBusList; +extern ULONG MbpWorkerQueued; +extern WORK_QUEUE_ITEM MbpWorkItem; +extern ULONG MbpNextHandle; +extern DEVICE_CONTROL_HANDLER MbpDeviceControl[]; +extern PDRIVER_OBJECT MbpDriverObject; +extern HAL_CALLBACKS MbpHalCallbacks; +extern PCALLBACK_OBJECT MbpEjectCallbackObject; +extern BOOLEAN MbpNoBusyFlag; +extern ULONG MbpMaxDeviceData; +extern PMB_BUS_EXTENSION MbpBusExtension[]; +extern WCHAR rgzBIOSDeviceName[]; +extern ULONG MbpNextBusId; +extern ULONG MbpBusNumber[]; + +extern POBJECT_TYPE *IoDeviceHandlerObjectType; +extern PULONG IoDeviceHandlerObjectSize; +extern ULONG MbpDeviceHandlerObjectSize; + +#define DeviceHandler2DeviceData(a) ((PDEVICE_DATA) (((PUCHAR) a) + MbpDeviceHandlerObjectSize)) +#define DeviceData2DeviceHandler(a) ((PDEVICE_HANDLER_OBJECT) (((PUCHAR) a) - MbpDeviceHandlerObjectSize)) +#define DeviceDataSlot(a) (DeviceData2DeviceHandler(a)->SlotNumber) + +// +// Prototypes +// + +NTSTATUS +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath + ); + +NTSTATUS +MbAddBusDevices( + IN PUNICODE_STRING ServiceKeyName, + IN OUT PULONG InstanceNumber + ); + +NTSTATUS +MbCreateClose ( + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp + ); + +ULONG +MbGetBusData ( + IN PBUS_HANDLER BusHandler, + IN PBUS_HANDLER RootHandler, + IN ULONG SlotNumber, + IN PUCHAR Buffer, + IN ULONG Offset, + IN ULONG Length + ); + +ULONG +MbSetBusData ( + IN PBUS_HANDLER BusHandler, + IN PBUS_HANDLER RootHandler, + IN ULONG SlotNumber, + IN PUCHAR Buffer, + IN ULONG Offset, + IN ULONG Length + ); + +ULONG +MbGetDeviceData ( + IN struct _BUS_HANDLER *BusHandler, + IN struct _BUS_HANDLER *RootHandler, + IN PDEVICE_HANDLER_OBJECT DeviceHandler, + IN ULONG DataType, + IN PUCHAR Buffer, + IN ULONG Offset, + IN ULONG Length + ); + +ULONG +MbSetDeviceData ( + IN struct _BUS_HANDLER *BusHandler, + IN struct _BUS_HANDLER *RootHandler, + IN PDEVICE_HANDLER_OBJECT DeviceHandler, + IN ULONG DataType, + IN PUCHAR Buffer, + IN ULONG Offset, + IN ULONG Length + ); + +NTSTATUS +MbQueryBusSlots ( + IN PBUS_HANDLER BusHandler, + IN PBUS_HANDLER RootHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength + ); + +NTSTATUS +MbDeviceControl ( + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbpCheckBus ( + IN PBUS_HANDLER BusHandler + ); + +PDEVICE_DATA +MbpFindDeviceData ( + IN PMB_BUS_EXTENSION BusExtension, + IN ULONG SlotNumber + ); + +VOID +MbpStartWorker ( + VOID + ); + +VOID +MbpControlWorker ( + IN PVOID WorkerContext + ); + +VOID +MbpQueueCheckBus ( + IN PBUS_HANDLER BusHandler + ); + +VOID +MbpDispatchControl ( + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbpCompleteDeviceControl ( + IN NTSTATUS Status, + IN PHAL_DEVICE_CONTROL_CONTEXT Context, + IN PDEVICE_DATA DeviceData + ); + +BOOLEAN +FASTCALL +MbBCtlNone ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +BOOLEAN +FASTCALL +MbBCtlSync ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +BOOLEAN +FASTCALL +MbBCtlEject ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +BOOLEAN +FASTCALL +MbBCtlLock ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryDeviceId ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryDeviceResources ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryDeviceResourceRequirements ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlSetDeviceResources ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryDeviceUniqueId ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryDeviceCapabilities ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlQueryEject ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlEject ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +VOID +MbCtlLock ( + IN PDEVICE_DATA DeviceData, + IN PHAL_DEVICE_CONTROL_CONTEXT Context + ); + +NTSTATUS +MbpGetBusData ( + IN ULONG BusNumber, + IN PULONG SlotNumber, + IN OUT PVOID *BusData, + OUT PULONG Length, + OUT PBOOLEAN DockConnector + ); + +NTSTATUS +MbpGetCompatibleDeviceId ( + IN PVOID BusData, + IN ULONG IdIndex, + IN PWCHAR CompatibleId + ); + +NTSTATUS +MbpGetSlotResources ( + IN ULONG BusNumber, + IN PVOID BusData, + OUT PCM_RESOURCE_LIST *CmResources, + OUT PULONG Length + ); + +NTSTATUS +MbpGetSlotResourceRequirements ( + IN ULONG BusNumber, + IN PVOID BusData, + OUT PIO_RESOURCE_REQUIREMENTS_LIST *IoResources, + OUT PULONG Length + ); + +NTSTATUS +MbpSetSlotResources ( + OUT PVOID *BusData, + IN PCM_RESOURCE_LIST CmResources, + IN ULONG Length + ); + +NTSTATUS +MbpReplyEjectEvent ( + IN ULONG SlotNumber, + IN BOOLEAN Eject + ); + +NTSTATUS +MbpGetDockInformation ( + OUT PHAL_SYSTEM_DOCK_INFORMATION *DockInfo, + PULONG Length + ); + +PDEVICE_HANDLER_OBJECT +MbpReferenceDeviceHandler ( + IN struct _BUS_HANDLER *BusHandler, + IN struct _BUS_HANDLER *RootHandler, + IN ULONG SlotNumber + ); + +#if 0 + +// +// BUGBUG - should be removed... +// + +NTSTATUS +IoRegisterDetectedDevice( + IN PUNICODE_STRING ServiceKeyName, + IN PCM_RESOURCE_LIST DetectSignature, + OUT PULONG InstanceNumber + ); + +typedef enum _DEVICE_STATUS { + DeviceStatusOK, + DeviceStatusMalfunction, + DeviceStatusDisabled, + DeviceStatusRemoved, + MaximumDeviceStatus +} DEVICE_STATUS, *PDEVICE_STATUS; + +NTSTATUS +IoRegisterDevicePath( + IN PDEVICE_HANDLER_OBJECT DeviceHandler, + IN PUNICODE_STRING NtDeviceObjectPath, + IN BOOLEAN PhysicalDevicePath, + IN PCM_RESOURCE_LIST Configuration, + IN DEVICE_STATUS DeviceStatus + ); + +NTSTATUS +IoGetDeviceHandler( + IN PUNICODE_STRING ServicekeyName, + IN ULONG InstanceOrdinal, + OUT PDEVICE_HANDLER_OBJECT DeviceHandler + ); + +VOID +IoReleaseDevicehandler ( + IN PDEVICE_HANDLER_OBJECT DeviceHandler + ); +#endif |