5 * $Id: gdth_ioctl.h,v 1.14 2004/02/19 15:43:15 achim Exp $
9 #define GDTIOCTL_MASK ('J'<<8)
10 #define GDTIOCTL_GENERAL (GDTIOCTL_MASK | 0) /* general IOCTL */
11 #define GDTIOCTL_DRVERS (GDTIOCTL_MASK | 1) /* get driver version */
12 #define GDTIOCTL_CTRTYPE (GDTIOCTL_MASK | 2) /* get controller type */
13 #define GDTIOCTL_OSVERS (GDTIOCTL_MASK | 3) /* get OS version */
14 #define GDTIOCTL_HDRLIST (GDTIOCTL_MASK | 4) /* get host drive list */
15 #define GDTIOCTL_CTRCNT (GDTIOCTL_MASK | 5) /* get controller count */
16 #define GDTIOCTL_LOCKDRV (GDTIOCTL_MASK | 6) /* lock host drive */
17 #define GDTIOCTL_LOCKCHN (GDTIOCTL_MASK | 7) /* lock channel */
18 #define GDTIOCTL_EVENT (GDTIOCTL_MASK | 8) /* read controller events */
19 #define GDTIOCTL_SCSI (GDTIOCTL_MASK | 9) /* SCSI command */
20 #define GDTIOCTL_RESET_BUS (GDTIOCTL_MASK |10) /* reset SCSI bus */
21 #define GDTIOCTL_RESCAN (GDTIOCTL_MASK |11) /* rescan host drives */
22 #define GDTIOCTL_RESET_DRV (GDTIOCTL_MASK |12) /* reset (remote) drv. res. */
24 #define GDTIOCTL_MAGIC 0xaffe0004
25 #define EVENT_SIZE 294
26 #define GDTH_MAXSG 32 /* max. s/g elements */
28 #define MAX_LDRIVES 255 /* max. log. drive count */
29 #ifdef GDTH_IOCTL_PROC
30 #define MAX_HDRIVES 100 /* max. host drive count */
32 #define MAX_HDRIVES MAX_LDRIVES /* max. host drive count */
41 #define PACKED __attribute__((packed))
43 /* scatter/gather element */
45 ulong32 sg_ptr; /* address */
46 ulong32 sg_len; /* length */
49 /* scatter/gather element - 64bit addresses */
51 ulong64 sg_ptr; /* address */
52 ulong32 sg_len; /* length */
53 } PACKED gdth_sg64_str;
55 /* command structure */
57 ulong32 BoardNode; /* board node (always 0) */
58 ulong32 CommandIndex; /* command number */
59 ushort OpCode; /* the command (READ,..) */
62 ushort DeviceNo; /* number of cache drive */
63 ulong32 BlockNo; /* block number */
64 ulong32 BlockCnt; /* block count */
65 ulong32 DestAddr; /* dest. addr. (if s/g: -1) */
66 ulong32 sg_canz; /* s/g element count */
67 gdth_sg_str sg_lst[GDTH_MAXSG]; /* s/g list */
68 } PACKED cache; /* cache service cmd. str. */
70 ushort DeviceNo; /* number of cache drive */
71 ulong64 BlockNo; /* block number */
72 ulong32 BlockCnt; /* block count */
73 ulong64 DestAddr; /* dest. addr. (if s/g: -1) */
74 ulong32 sg_canz; /* s/g element count */
75 gdth_sg64_str sg_lst[GDTH_MAXSG]; /* s/g list */
76 } PACKED cache64; /* cache service cmd. str. */
78 ushort param_size; /* size of p_param buffer */
79 ulong32 subfunc; /* IOCTL function */
80 ulong32 channel; /* device */
81 ulong64 p_param; /* buffer */
82 } PACKED ioctl; /* IOCTL command structure */
87 ulong32 msg_handle; /* message handle */
88 ulong64 msg_addr; /* message buffer address */
90 unchar data[12]; /* buffer for rtc data, ... */
92 } PACKED screen; /* screen service cmd. str. */
95 ulong32 direction; /* data direction */
96 ulong32 mdisc_time; /* disc. time (0: no timeout)*/
97 ulong32 mcon_time; /* connect time(0: no to.) */
98 ulong32 sdata; /* dest. addr. (if s/g: -1) */
99 ulong32 sdlen; /* data length (bytes) */
100 ulong32 clen; /* SCSI cmd. length(6,10,12) */
101 unchar cmd[12]; /* SCSI command */
102 unchar target; /* target ID */
103 unchar lun; /* LUN */
104 unchar bus; /* SCSI bus number */
105 unchar priority; /* only 0 used */
106 ulong32 sense_len; /* sense data length */
107 ulong32 sense_data; /* sense data addr. */
108 ulong32 link_p; /* linked cmds (not supp.) */
109 ulong32 sg_ranz; /* s/g element count */
110 gdth_sg_str sg_lst[GDTH_MAXSG]; /* s/g list */
111 } PACKED raw; /* raw service cmd. struct. */
114 ulong32 direction; /* data direction */
115 ulong32 mdisc_time; /* disc. time (0: no timeout)*/
116 ulong32 mcon_time; /* connect time(0: no to.) */
117 ulong64 sdata; /* dest. addr. (if s/g: -1) */
118 ulong32 sdlen; /* data length (bytes) */
119 ulong32 clen; /* SCSI cmd. length(6,..,16) */
120 unchar cmd[16]; /* SCSI command */
121 unchar target; /* target ID */
122 unchar lun; /* LUN */
123 unchar bus; /* SCSI bus number */
124 unchar priority; /* only 0 used */
125 ulong32 sense_len; /* sense data length */
126 ulong64 sense_data; /* sense data addr. */
127 ulong32 sg_ranz; /* s/g element count */
128 gdth_sg64_str sg_lst[GDTH_MAXSG]; /* s/g list */
129 } PACKED raw64; /* raw service cmd. struct. */
131 /* additional variables */
132 unchar Service; /* controller service */
134 ushort Status; /* command result */
135 ulong32 Info; /* additional information */
136 void *RequestBuffer; /* request buffer */
137 } PACKED gdth_cmd_str;
139 /* controller event structure */
145 ushort size; /* size of structure */
158 unchar scsi_coord[3];
166 unchar scsi_coord[3];
170 ulong32 l1, l2, l3, l4;
174 unchar event_string[256];
175 } PACKED gdth_evt_data;
185 gdth_evt_data event_data;
186 } PACKED gdth_evt_str;
189 #ifdef GDTH_IOCTL_PROC
190 /* IOCTL structure (write) */
192 ulong32 magic; /* IOCTL magic */
193 ushort ioctl; /* IOCTL */
194 ushort ionode; /* controller number */
195 ushort service; /* controller service */
196 ushort timeout; /* timeout */
199 unchar command[512]; /* controller command */
200 unchar data[1]; /* add. data */
203 unchar lock; /* lock/unlock */
204 unchar drive_cnt; /* drive count */
205 ushort drives[MAX_HDRIVES];/* drives */
208 unchar lock; /* lock/unlock */
209 unchar channel; /* channel */
212 int erase; /* erase event ? */
214 unchar evt[EVENT_SIZE]; /* event structure */
217 unchar bus; /* SCSI bus */
218 unchar target; /* target ID */
219 unchar lun; /* LUN */
220 unchar cmd_len; /* command length */
221 unchar cmd[12]; /* SCSI command */
224 ushort hdr_no; /* host drive number */
225 unchar flag; /* old meth./add/remove */
230 /* IOCTL structure (read) */
232 ulong32 size; /* buffer size */
233 ulong32 status; /* IOCTL error code */
236 unchar data[1]; /* data */
239 ushort version; /* driver version */
242 unchar type; /* controller type */
243 ushort info; /* slot etc. */
244 ushort oem_id; /* OEM ID */
245 ushort bios_ver; /* not used */
246 ushort access; /* not used */
247 ushort ext_type; /* extended type */
248 ushort device_id; /* device ID */
249 ushort sub_device_id; /* sub device ID */
252 unchar version; /* OS version */
253 unchar subversion; /* OS subversion */
254 ushort revision; /* revision */
257 ushort count; /* controller count */
261 unchar evt[EVENT_SIZE]; /* event structure */
264 unchar bus; /* SCSI bus, 0xff: invalid */
265 unchar target; /* target ID */
266 unchar lun; /* LUN */
267 unchar cluster_type; /* cluster properties */
268 } hdr_list[MAX_HDRIVES]; /* index is host drive number */
273 /* GDTIOCTL_GENERAL */
275 ushort ionode; /* controller number */
276 ushort timeout; /* timeout */
277 ulong32 info; /* error info */
278 ushort status; /* status */
279 ulong data_len; /* data buffer size */
280 ulong sense_len; /* sense buffer size */
281 gdth_cmd_str command; /* command */
282 } gdth_ioctl_general;
284 /* GDTIOCTL_LOCKDRV */
286 ushort ionode; /* controller number */
287 unchar lock; /* lock/unlock */
288 unchar drive_cnt; /* drive count */
289 ushort drives[MAX_HDRIVES]; /* drives */
290 } gdth_ioctl_lockdrv;
292 /* GDTIOCTL_LOCKCHN */
294 ushort ionode; /* controller number */
295 unchar lock; /* lock/unlock */
296 unchar channel; /* channel */
297 } gdth_ioctl_lockchn;
299 /* GDTIOCTL_OSVERS */
301 unchar version; /* OS version */
302 unchar subversion; /* OS subversion */
303 ushort revision; /* revision */
306 /* GDTIOCTL_CTRTYPE */
308 ushort ionode; /* controller number */
309 unchar type; /* controller type */
310 ushort info; /* slot etc. */
311 ushort oem_id; /* OEM ID */
312 ushort bios_ver; /* not used */
313 ushort access; /* not used */
314 ushort ext_type; /* extended type */
315 ushort device_id; /* device ID */
316 ushort sub_device_id; /* sub device ID */
317 } gdth_ioctl_ctrtype;
322 int erase; /* erase event? */
323 int handle; /* event handle */
327 /* GDTIOCTL_RESCAN/GDTIOCTL_HDRLIST */
329 ushort ionode; /* controller number */
330 unchar flag; /* add/remove */
331 ushort hdr_no; /* drive no. */
333 unchar bus; /* SCSI bus */
334 unchar target; /* target ID */
335 unchar lun; /* LUN */
336 unchar cluster_type; /* cluster properties */
337 } hdr_list[MAX_HDRIVES]; /* index is host drive number */
340 /* GDTIOCTL_RESET_BUS/GDTIOCTL_RESET_DRV */
342 ushort ionode; /* controller number */
343 ushort number; /* bus/host drive number */
344 ushort status; /* status */