OSDN Git Service

dcf13d658025de14d6e3ed3de84808fdd63e5830
[pf3gnuchains/pf3gnuchains3x.git] / winsup / w32api / include / ddk / mcd.h
1 /*
2  * mcd.h
3  *
4  * Media changer driver interface
5  *
6  * This file is part of the w32api package.
7  *
8  * Contributors:
9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10  *
11  * THIS SOFTWARE IS NOT COPYRIGHTED
12  *
13  * This source code is offered for use in the public domain. You may
14  * use, modify or distribute it freely.
15  *
16  * This code is distributed in the hope that it will be useful but
17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18  * DISCLAIMED. This includes but is not limited to warranties of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  */
22
23 #ifndef __MCD_H
24 #define __MCD_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include "ntddk.h"
35 #include "srb.h"
36 #include "scsi.h"
37 #include "ntddchgr.h"
38
39 #if defined(_MCD_)
40   #define CHANGERAPI DECLSPEC_EXPORT
41 #else
42   #define CHANGERAPI DECLSPEC_IMPORT
43 #endif
44
45 #ifdef DebugPrint
46 #undef DebugPrint
47 #endif
48
49 #ifdef DBG
50 #define DebugPrint(x) ChangerClassDebugPrint x
51 #else
52 #define DebugPrint(x)
53 #endif
54
55 #define MAXIMUM_CHANGER_INQUIRY_DATA                    252
56
57 CHANGERAPI
58 PVOID
59 DDKAPI
60 ChangerClassAllocatePool(
61   /*IN*/ POOL_TYPE  PoolType,
62   /*IN*/ ULONG  NumberOfBytes);
63
64 VOID
65 ChangerClassDebugPrint(
66   ULONG  DebugPrintLevel,
67   PCCHAR  DebugMessage,
68   ...);
69
70 CHANGERAPI
71 PVOID
72 DDKAPI
73 ChangerClassFreePool(
74   /*IN*/ PVOID  PoolToFree);
75
76 CHANGERAPI
77 NTSTATUS
78 DDKAPI
79 ChangerClassSendSrbSynchronous(
80   /*IN*/ PDEVICE_OBJECT  DeviceObject,
81   /*IN*/ PSCSI_REQUEST_BLOCK  Srb,
82   /*IN*/ PVOID  Buffer,
83   /*IN*/ ULONG  BufferSize,
84   /*IN*/ BOOLEAN  WriteToDevice);
85
86
87 typedef NTSTATUS DDKAPI
88 (*CHANGER_INITIALIZE)(
89   /*IN*/ PDEVICE_OBJECT  DeviceObject);
90
91 typedef ULONG DDKAPI
92 (*CHANGER_EXTENSION_SIZE)(
93   VOID);
94
95 typedef VOID DDKAPI
96 (*CHANGER_ERROR_ROUTINE)(
97   PDEVICE_OBJECT  DeviceObject,
98   PSCSI_REQUEST_BLOCK  Srb,
99   NTSTATUS  *Status,
100   BOOLEAN  *Retry);
101
102 typedef NTSTATUS DDKAPI
103 (*CHANGER_COMMAND_ROUTINE)(
104   /*IN*/ PDEVICE_OBJECT  DeviceObject,
105   /*IN*/ PIRP  Irp);
106
107 typedef NTSTATUS DDKAPI
108 (*CHANGER_PERFORM_DIAGNOSTICS)(
109   /*IN*/ PDEVICE_OBJECT  DeviceObject,
110   /*OUT*/ PWMI_CHANGER_PROBLEM_DEVICE_ERROR  ChangerDeviceError);
111
112 typedef struct _MCD_INIT_DATA {
113   ULONG  InitDataSize;
114   CHANGER_EXTENSION_SIZE  ChangerAdditionalExtensionSize;
115   CHANGER_INITIALIZE  ChangerInitialize;
116   CHANGER_ERROR_ROUTINE  ChangerError;
117   CHANGER_PERFORM_DIAGNOSTICS  ChangerPerformDiagnostics;
118   CHANGER_COMMAND_ROUTINE  ChangerGetParameters;
119   CHANGER_COMMAND_ROUTINE  ChangerGetStatus;
120   CHANGER_COMMAND_ROUTINE  ChangerGetProductData;
121   CHANGER_COMMAND_ROUTINE  ChangerSetAccess;
122   CHANGER_COMMAND_ROUTINE  ChangerGetElementStatus;
123   CHANGER_COMMAND_ROUTINE  ChangerInitializeElementStatus;
124   CHANGER_COMMAND_ROUTINE  ChangerSetPosition;
125   CHANGER_COMMAND_ROUTINE  ChangerExchangeMedium;
126   CHANGER_COMMAND_ROUTINE  ChangerMoveMedium;
127   CHANGER_COMMAND_ROUTINE  ChangerReinitializeUnit;
128   CHANGER_COMMAND_ROUTINE  ChangerQueryVolumeTags;
129 } MCD_INIT_DATA, *PMCD_INIT_DATA;
130
131 CHANGERAPI
132 NTSTATUS
133 DDKAPI
134 ChangerClassInitialize(
135   /*IN*/ PDRIVER_OBJECT  DriverObject,
136   /*IN*/ PUNICODE_STRING  RegistryPath,
137   /*IN*/ PMCD_INIT_DATA  MCDInitData);
138
139 #ifdef __cplusplus
140 }
141 #endif
142
143 #endif /* __MCD_H */