| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | // for user apps, make sure data size types are defined | 
|  | 2 | // with | 
|  | 3 |  | 
|  | 4 |  | 
|  | 5 | #define CCPQFCTS_IOC_MAGIC 'Z' | 
|  | 6 |  | 
|  | 7 | typedef struct | 
|  | 8 | { | 
|  | 9 | __u8 bus; | 
|  | 10 | __u8 dev_fn; | 
|  | 11 | __u32 board_id; | 
|  | 12 | } cpqfc_pci_info_struct; | 
|  | 13 |  | 
|  | 14 | typedef __u32 DriverVer_type; | 
|  | 15 | /* | 
|  | 16 | typedef union | 
|  | 17 | { | 
|  | 18 | struct  // Peripheral Unit Device | 
|  | 19 | { | 
|  | 20 | __u8 Bus:6; | 
|  | 21 | __u8 Mode:2;  // b00 | 
|  | 22 | __u8 Dev; | 
|  | 23 | } PeripDev; | 
|  | 24 | struct  // Volume Set Address | 
|  | 25 | { | 
|  | 26 | __u8 DevMSB:6; | 
|  | 27 | __u8 Mode:2;  // b01 | 
|  | 28 | __u8 DevLSB; | 
|  | 29 | } LogDev; | 
|  | 30 | struct  // Logical Unit Device (SCSI-3, SCC-2 defined) | 
|  | 31 | { | 
|  | 32 | __u8 Targ:6; | 
|  | 33 | __u8 Mode:2;  // b10 | 
|  | 34 | __u8 Dev:5; | 
|  | 35 | __u8 Bus:3; | 
|  | 36 |  | 
|  | 37 | } LogUnit; | 
|  | 38 | } SCSI3Addr_struct; | 
|  | 39 |  | 
|  | 40 |  | 
|  | 41 | typedef struct | 
|  | 42 | { | 
|  | 43 | SCSI3Addr_struct FCP_Nexus; | 
|  | 44 | __u8 cdb[16]; | 
|  | 45 | } PassThru_Command_struct; | 
|  | 46 | */ | 
|  | 47 |  | 
|  | 48 | /* this is nearly duplicated in idashare.h */ | 
|  | 49 | typedef struct { | 
|  | 50 | int	lc;    		/* Controller number */ | 
|  | 51 | int	node;		/* Node (box) number */ | 
|  | 52 | int	ld;		/* Logical Drive on this box, if required */ | 
|  | 53 | __u32 nexus;          /* SCSI Nexus */ | 
|  | 54 | void	*argp;		/* Argument pointer */ | 
|  | 55 | } VENDOR_IOCTL_REQ; | 
|  | 56 |  | 
|  | 57 |  | 
|  | 58 | typedef struct { | 
|  | 59 | char	cdb[16];	/* SCSI CDB for the pass-through */ | 
|  | 60 | ushort bus;		/* Target bus on the box */ | 
|  | 61 | ushort pdrive;	/* Physical drive on the box */ | 
|  | 62 | int len;              /* Length of the data area of the CDB */ | 
|  | 63 | int sense_len;	/* Length of the sense data */ | 
|  | 64 | char sense_data[40];  /* Sense data */ | 
|  | 65 | void *bufp;		/* Data area for the CDB */ | 
|  | 66 | char rw_flag;		/* Read CDB or Write CDB */ | 
|  | 67 | } cpqfc_passthru_t; | 
|  | 68 |  | 
|  | 69 | /* | 
|  | 70 | ** Defines for the IOCTLS. | 
|  | 71 | */ | 
|  | 72 |  | 
|  | 73 | #define VENDOR_READ_OPCODE			0x26 | 
|  | 74 | #define VENDOR_WRITE_OPCODE			0x27 | 
|  | 75 |  | 
|  | 76 | #define CPQFCTS_GETPCIINFO _IOR( CCPQFCTS_IOC_MAGIC, 1, cpqfc_pci_info_struct) | 
|  | 77 | #define CPQFCTS_GETDRIVVER _IOR( CCPQFCTS_IOC_MAGIC, 9, DriverVer_type) | 
|  | 78 |  | 
|  | 79 | #define CPQFCTS_SCSI_PASSTHRU _IOWR( CCPQFCTS_IOC_MAGIC,11, VENDOR_IOCTL_REQ) | 
|  | 80 |  | 
|  | 81 | /* We would rather have equivalent generic, low-level driver agnostic | 
|  | 82 | ioctls that do what CPQFC_IOCTL_FC_TARGET_ADDRESS and | 
|  | 83 | CPQFC_IOCTL_FC_TDR 0x5388 do, but currently, we do not have them, | 
|  | 84 | consequently applications would have to know they are talking to cpqfc. */ | 
|  | 85 |  | 
|  | 86 | /* Used to get Fibre Channel WWN and port_id from device */ | 
|  | 87 | // #define CPQFC_IOCTL_FC_TARGET_ADDRESS 0x5387 | 
|  | 88 | #define CPQFC_IOCTL_FC_TARGET_ADDRESS \ | 
|  | 89 | _IOR( CCPQFCTS_IOC_MAGIC, 13, Scsi_FCTargAddress) | 
|  | 90 |  | 
|  | 91 | /* Used to invoke Target Defice Reset for Fibre Channel */ | 
|  | 92 | // #define CPQFC_IOCTL_FC_TDR 0x5388 | 
|  | 93 | #define CPQFC_IOCTL_FC_TDR _IO( CCPQFCTS_IOC_MAGIC, 15) | 
|  | 94 |  |