#ifndef _GDTH_IOCTL_H #define _GDTH_IOCTL_H /* gdth_ioctl.h * $Id: gdth_ioctl.h,v 1.10 2001/05/22 06:28:59 achim Exp $ */ /* IOCTLs */ #define GDTIOCTL_MASK ('J'<<8) #define GDTIOCTL_GENERAL (GDTIOCTL_MASK | 0) /* general IOCTL */ #define GDTIOCTL_DRVERS (GDTIOCTL_MASK | 1) /* get driver version */ #define GDTIOCTL_CTRTYPE (GDTIOCTL_MASK | 2) /* get controller type */ #define GDTIOCTL_OSVERS (GDTIOCTL_MASK | 3) /* get OS version */ #define GDTIOCTL_HDRLIST (GDTIOCTL_MASK | 4) /* get host drive list */ #define GDTIOCTL_CTRCNT (GDTIOCTL_MASK | 5) /* get controller count */ #define GDTIOCTL_LOCKDRV (GDTIOCTL_MASK | 6) /* lock host drive */ #define GDTIOCTL_LOCKCHN (GDTIOCTL_MASK | 7) /* lock channel */ #define GDTIOCTL_EVENT (GDTIOCTL_MASK | 8) /* read controller events */ #define GDTIOCTL_SCSI (GDTIOCTL_MASK | 9) /* SCSI command */ #define GDTIOCTL_RESET_BUS (GDTIOCTL_MASK |10) /* reset SCSI bus */ #define GDTIOCTL_RESCAN (GDTIOCTL_MASK |11) /* rescan host drives */ #define GDTIOCTL_RESET_DRV (GDTIOCTL_MASK |12) /* reset (remote) drv. res. */ #define GDTIOCTL_MAGIC 0xaffe0004 #define EVENT_SIZE 294 #define MAX_HDRIVES 100 /* IOCTL structure (write) */ typedef struct { ulong32 magic; /* IOCTL magic */ ushort ioctl; /* IOCTL */ ushort ionode; /* controller number */ ushort service; /* controller service */ ushort timeout; /* timeout */ union { struct { unchar command[512]; /* controller command */ unchar data[1]; /* add. data */ } general; struct { unchar lock; /* lock/unlock */ unchar drive_cnt; /* drive count */ ushort drives[MAX_HDRIVES];/* drives */ } lockdrv; struct { unchar lock; /* lock/unlock */ unchar channel; /* channel */ } lockchn; struct { int erase; /* erase event ? */ int handle; unchar evt[EVENT_SIZE]; /* event structure */ } event; struct { unchar bus; /* SCSI bus */ unchar target; /* target ID */ unchar lun; /* LUN */ unchar cmd_len; /* command length */ unchar cmd[12]; /* SCSI command */ } scsi; struct { ushort hdr_no; /* host drive number */ unchar flag; /* old meth./add/remove */ } rescan; } iu; } gdth_iowr_str; /* IOCTL structure (read) */ typedef struct { ulong32 size; /* buffer size */ ulong32 status; /* IOCTL error code */ union { struct { unchar data[1]; /* data */ } general; struct { ushort version; /* driver version */ } drvers; struct { unchar type; /* controller type */ ushort info; /* slot etc. */ ushort oem_id; /* OEM ID */ ushort bios_ver; /* not used */ ushort access; /* not used */ ushort ext_type; /* extended type */ ushort device_id; /* device ID */ ushort sub_device_id; /* sub device ID */ } ctrtype; struct { unchar version; /* OS version */ unchar subversion; /* OS subversion */ ushort revision; /* revision */ } osvers; struct { ushort count; /* controller count */ } ctrcnt; struct { int handle; unchar evt[EVENT_SIZE]; /* event structure */ } event; struct { unchar bus; /* SCSI bus, 0xff: invalid */ unchar target; /* target ID */ unchar lun; /* LUN */ unchar cluster_type; /* cluster properties */ } hdr_list[MAX_HDRIVES]; /* index is host drive number */ } iu; } gdth_iord_str; #endif