summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/extender/pnpbios/i386/busp.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/nthals/extender/pnpbios/i386/busp.h
downloadNT4.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.h499
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