243 lines
8.2 KiB
C
243 lines
8.2 KiB
C
/*
|
|
* mcd.h Medium changer driver definitions
|
|
*
|
|
* =========================================================================
|
|
*
|
|
* Open Watcom Project
|
|
*
|
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
|
*
|
|
* This file is automatically generated. Do not edit directly.
|
|
*
|
|
* =========================================================================
|
|
*/
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#include <scsi.h>
|
|
#include <ntddchgr.h>
|
|
#include <classpnp.h>
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#include <wmidata.h>
|
|
#include <wmistr.h>
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Maximum changer inquiry data */
|
|
#define MAXIMUM_CHANGER_INQUIRY_DATA 252
|
|
|
|
/* Mode page display */
|
|
#define MODE_PAGE_DISPLAY 0x22
|
|
|
|
/* Changer callbacks */
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef NTSTATUS (NTAPI *CHANGER_COMMAND_ROUTINE)( PDEVICE_OBJECT, PIRP );
|
|
typedef ULONG (NTAPI *CHANGER_EXTENSION_SIZE)( VOID );
|
|
typedef NTSTATUS (NTAPI *CHANGER_INITIALIZE)( PDEVICE_OBJECT );
|
|
typedef NTSTATUS (NTAPI *CHANGER_PERFORM_DIAGNOSTICS)( PDEVICE_OBJECT, PWMI_CHANGER_PROBLEM_DEVICE_ERROR );
|
|
typedef VOID (NTAPI *CHANGER_ERROR_ROUTINE)( PDEVICE_OBJECT, PSCSI_REQUEST_BLOCK, NTSTATUS *, BOOLEAN * );
|
|
#endif
|
|
|
|
/* Medium changer device initialization data */
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct _MCD_INIT_DATA {
|
|
ULONG InitDataSize;
|
|
CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize;
|
|
CHANGER_INITIALIZE ChangerInitialize;
|
|
CHANGER_ERROR_ROUTINE ChangerError;
|
|
CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics;
|
|
CHANGER_COMMAND_ROUTINE ChangerGetParameters;
|
|
CHANGER_COMMAND_ROUTINE ChangerGetStatus;
|
|
CHANGER_COMMAND_ROUTINE ChangerGetProductData;
|
|
CHANGER_COMMAND_ROUTINE ChangerSetAccess;
|
|
CHANGER_COMMAND_ROUTINE ChangerGetElementStatus;
|
|
CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus;
|
|
CHANGER_COMMAND_ROUTINE ChangerSetPosition;
|
|
CHANGER_COMMAND_ROUTINE ChangerExchangeMedium;
|
|
CHANGER_COMMAND_ROUTINE ChangerMoveMedium;
|
|
CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit;
|
|
CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags;
|
|
} MCD_INIT_DATA;
|
|
typedef MCD_INIT_DATA *PMCD_INIT_DATA;
|
|
#endif
|
|
|
|
/* Mode element address page */
|
|
typedef struct _MODE_ELEMENT_ADDRESS_PAGE {
|
|
UCHAR PageCode : 6;
|
|
UCHAR Reserved1 : 1;
|
|
UCHAR PS : 1;
|
|
UCHAR PageLength;
|
|
UCHAR MediumTransportElementAddress[2];
|
|
UCHAR NumberTransportElements[2];
|
|
UCHAR FirstStorageElementAddress[2];
|
|
UCHAR NumberStorageElements[2];
|
|
UCHAR FirstIEPortElementAddress[2];
|
|
UCHAR NumberIEPortElements[2];
|
|
UCHAR FirstDataXFerElementAddress[2];
|
|
UCHAR NumberDataXFerElements[2];
|
|
UCHAR Reserved2[2];
|
|
} MODE_ELEMENT_ADDRESS_PAGE;
|
|
typedef MODE_ELEMENT_ADDRESS_PAGE *PMODE_ELEMENT_ADDRESS_PAGE;
|
|
|
|
/* Mode transport geometry page */
|
|
typedef struct _MODE_TRANSPORT_GEOMETRY_PAGE {
|
|
UCHAR PageCode : 6;
|
|
UCHAR Reserved1 : 1;
|
|
UCHAR PS : 1;
|
|
UCHAR PageLength;
|
|
UCHAR Flip : 1;
|
|
UCHAR Reserved2 : 7;
|
|
UCHAR TransportElementNumber;
|
|
} MODE_TRANSPORT_GEOMETRY_PAGE;
|
|
typedef MODE_TRANSPORT_GEOMETRY_PAGE *PMODE_TRANSPORT_GEOMETRY_PAGE;
|
|
|
|
/* Mode device capabilities page */
|
|
typedef struct _MODE_DEVICE_CAPABILITIES_PAGE {
|
|
UCHAR PageCode : 6;
|
|
UCHAR Reserved1 : 1;
|
|
UCHAR PS : 1;
|
|
UCHAR PageLength;
|
|
UCHAR MediumTransport : 1;
|
|
UCHAR StorageLocation : 1;
|
|
UCHAR IEPort : 1;
|
|
UCHAR DataXFer : 1;
|
|
UCHAR Reserved2 : 4;
|
|
UCHAR Reserved3;
|
|
UCHAR MTtoMT : 1;
|
|
UCHAR MTtoST : 1;
|
|
UCHAR MTtoIE : 1;
|
|
UCHAR MTtoDT : 1;
|
|
UCHAR Reserved4 : 4;
|
|
UCHAR STtoMT : 1;
|
|
UCHAR STtoST : 1;
|
|
UCHAR STtoIE : 1;
|
|
UCHAR STtoDT : 1;
|
|
UCHAR Reserved5 : 4;
|
|
UCHAR IEtoMT : 1;
|
|
UCHAR IEtoST : 1;
|
|
UCHAR IEtoIE : 1;
|
|
UCHAR IEtoDT : 1;
|
|
UCHAR Reserved6 : 4;
|
|
UCHAR DTtoMT : 1;
|
|
UCHAR DTtoST : 1;
|
|
UCHAR DTtoIE : 1;
|
|
UCHAR DTtoDT : 1;
|
|
UCHAR Reserved7 : 4;
|
|
UCHAR Reserved8[4];
|
|
UCHAR XMTtoMT : 1;
|
|
UCHAR XMTtoST : 1;
|
|
UCHAR XMTtoIE : 1;
|
|
UCHAR XMTtoDT : 1;
|
|
UCHAR Reserved9 : 4;
|
|
UCHAR XSTtoMT : 1;
|
|
UCHAR XSTtoST : 1;
|
|
UCHAR XSTtoIE : 1;
|
|
UCHAR XSTtoDT : 1;
|
|
UCHAR Reserved10 : 4;
|
|
UCHAR XIEtoMT : 1;
|
|
UCHAR XIEtoST : 1;
|
|
UCHAR XIEtoIE : 1;
|
|
UCHAR XIEtoDT : 1;
|
|
UCHAR Reserved11 : 4;
|
|
UCHAR XDTtoMT : 1;
|
|
UCHAR XDTtoST : 1;
|
|
UCHAR XDTtoIE : 1;
|
|
UCHAR XDTtoDT : 1;
|
|
UCHAR Reserved12 : 4;
|
|
} MODE_DEVICE_CAPABILITIES_PAGE;
|
|
typedef MODE_DEVICE_CAPABILITIES_PAGE *PMODE_DEVICE_CAPABILITIES_PAGE;
|
|
|
|
/* Element status header */
|
|
typedef struct _ELEMENT_STATUS_HEADER {
|
|
UCHAR FirstElementAddress[2];
|
|
UCHAR NumberOfElements[2];
|
|
UCHAR Reserved1;
|
|
UCHAR ReportByteCount[3];
|
|
} ELEMENT_STATUS_HEADER;
|
|
typedef ELEMENT_STATUS_HEADER *PELEMENT_STATUS_HEADER;
|
|
|
|
/* Element status page */
|
|
typedef struct _ELEMENT_STATUS_PAGE {
|
|
UCHAR ElementType;
|
|
UCHAR Reserved1 : 6;
|
|
UCHAR AVolTag : 1;
|
|
UCHAR PVolTag : 1;
|
|
UCHAR ElementDescriptorLength[2];
|
|
UCHAR Reserved2;
|
|
UCHAR DescriptorByteCount[3];
|
|
} ELEMENT_STATUS_PAGE;
|
|
typedef ELEMENT_STATUS_PAGE *PELEMENT_STATUS_PAGE;
|
|
|
|
/* Element descriptor */
|
|
typedef struct _ELEMENT_DESCRIPTOR {
|
|
UCHAR ElementAddress[2];
|
|
UCHAR Full : 1;
|
|
UCHAR Reserved1 : 1;
|
|
UCHAR Exception : 1;
|
|
UCHAR Accessible : 1;
|
|
UCHAR Reserved2 : 4;
|
|
UCHAR Reserved3;
|
|
UCHAR AdditionalSenseCode;
|
|
UCHAR AddSenseCodeQualifier;
|
|
UCHAR Lun : 3;
|
|
UCHAR Reserved4 : 1;
|
|
UCHAR LunValid : 1;
|
|
UCHAR IdValid : 1;
|
|
UCHAR Reserved5 : 1;
|
|
UCHAR NotThisBus : 1;
|
|
UCHAR BusAddress;
|
|
UCHAR Reserved6;
|
|
UCHAR Reserved7 : 6;
|
|
UCHAR Invert : 1;
|
|
UCHAR SValid : 1;
|
|
UCHAR SourceStorageElementAddress[2];
|
|
} ELEMENT_DESCRIPTOR;
|
|
typedef ELEMENT_DESCRIPTOR *PELEMENT_DESCRIPTOR;
|
|
|
|
/* Functions in MCD.SYS */
|
|
PVOID NTAPI ChangerClassAllocatePool( POOL_TYPE, ULONG );
|
|
VOID NTAPI ChangerClassFreePool( PVOID );
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
VOID __cdecl ChangerClassDebugPrint( ULONG, PCCHAR, ... );
|
|
NTSTATUS NTAPI ChangerClassInitialize( PDRIVER_OBJECT, PUNICODE_STRING, PMCD_INIT_DATA );
|
|
NTSTATUS NTAPI ChangerClassSendSrbSynchronous( PDEVICE_OBJECT, PSCSI_REQUEST_BLOCK, PVOID, ULONG, BOOLEAN );
|
|
#endif
|
|
|
|
/* Functions implemented by changer drivers */
|
|
ULONG NTAPI ChangerAdditionalExtensionSize( VOID );
|
|
VOID NTAPI ChangerError( PDEVICE_OBJECT, PSCSI_REQUEST_BLOCK, NTSTATUS *, BOOLEAN * );
|
|
NTSTATUS NTAPI ChangerExchangeMedium( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerGetElementStatus( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerGetParameters( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerGetProductData( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerGetStatus( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerInitialize( PDEVICE_OBJECT );
|
|
NTSTATUS NTAPI ChangerInitializeElementStatus( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerMoveMedium( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerQueryVolumeTags( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerReinitializeUnit( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerSetAccess( PDEVICE_OBJECT, PIRP );
|
|
NTSTATUS NTAPI ChangerSetPosition( PDEVICE_OBJECT, PIRP );
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
NTSTATUS NTAPI ChangerPerformDiagnostics( PDEVICE_OBJECT, PWMI_CHANGER_PROBLEM_DEVICE_ERROR );
|
|
#endif
|
|
|
|
/* Functions implemented as macros */
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#undef DebugPrint
|
|
#if DBG
|
|
#define DebugPrint( x ) ChangerClassDebugPrint x
|
|
#else
|
|
#define DebugPrint( x )
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|