1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * ioctl interface for the scsi media changer driver 4*f80ad8b4SAndroid Build Coastguard Worker */ 5*f80ad8b4SAndroid Build Coastguard Worker 6*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_CHIO_H 7*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_CHIO_H 8*f80ad8b4SAndroid Build Coastguard Worker 9*f80ad8b4SAndroid Build Coastguard Worker /* changer element types */ 10*f80ad8b4SAndroid Build Coastguard Worker #define CHET_MT 0 /* media transport element (robot) */ 11*f80ad8b4SAndroid Build Coastguard Worker #define CHET_ST 1 /* storage element (media slots) */ 12*f80ad8b4SAndroid Build Coastguard Worker #define CHET_IE 2 /* import/export element */ 13*f80ad8b4SAndroid Build Coastguard Worker #define CHET_DT 3 /* data transfer element (tape/cdrom/whatever) */ 14*f80ad8b4SAndroid Build Coastguard Worker #define CHET_V1 4 /* vendor specific #1 */ 15*f80ad8b4SAndroid Build Coastguard Worker #define CHET_V2 5 /* vendor specific #2 */ 16*f80ad8b4SAndroid Build Coastguard Worker #define CHET_V3 6 /* vendor specific #3 */ 17*f80ad8b4SAndroid Build Coastguard Worker #define CHET_V4 7 /* vendor specific #4 */ 18*f80ad8b4SAndroid Build Coastguard Worker 19*f80ad8b4SAndroid Build Coastguard Worker 20*f80ad8b4SAndroid Build Coastguard Worker /* 21*f80ad8b4SAndroid Build Coastguard Worker * CHIOGPARAMS 22*f80ad8b4SAndroid Build Coastguard Worker * query changer properties 23*f80ad8b4SAndroid Build Coastguard Worker * 24*f80ad8b4SAndroid Build Coastguard Worker * CHIOVGPARAMS 25*f80ad8b4SAndroid Build Coastguard Worker * query vendor-specific element types 26*f80ad8b4SAndroid Build Coastguard Worker * 27*f80ad8b4SAndroid Build Coastguard Worker * accessing elements works by specifing type and unit of the element. 28*f80ad8b4SAndroid Build Coastguard Worker * for example, storage elements are addressed with type = CHET_ST and 29*f80ad8b4SAndroid Build Coastguard Worker * unit = 0 .. cp_nslots-1 30*f80ad8b4SAndroid Build Coastguard Worker * 31*f80ad8b4SAndroid Build Coastguard Worker */ 32*f80ad8b4SAndroid Build Coastguard Worker struct changer_params { 33*f80ad8b4SAndroid Build Coastguard Worker int cp_curpicker; /* current transport element */ 34*f80ad8b4SAndroid Build Coastguard Worker int cp_npickers; /* number of transport elements (CHET_MT) */ 35*f80ad8b4SAndroid Build Coastguard Worker int cp_nslots; /* number of storage elements (CHET_ST) */ 36*f80ad8b4SAndroid Build Coastguard Worker int cp_nportals; /* number of import/export elements (CHET_IE) */ 37*f80ad8b4SAndroid Build Coastguard Worker int cp_ndrives; /* number of data transfer elements (CHET_DT) */ 38*f80ad8b4SAndroid Build Coastguard Worker }; 39*f80ad8b4SAndroid Build Coastguard Worker struct changer_vendor_params { 40*f80ad8b4SAndroid Build Coastguard Worker int cvp_n1; /* number of vendor specific elems (CHET_V1) */ 41*f80ad8b4SAndroid Build Coastguard Worker char cvp_label1[16]; 42*f80ad8b4SAndroid Build Coastguard Worker int cvp_n2; /* number of vendor specific elems (CHET_V2) */ 43*f80ad8b4SAndroid Build Coastguard Worker char cvp_label2[16]; 44*f80ad8b4SAndroid Build Coastguard Worker int cvp_n3; /* number of vendor specific elems (CHET_V3) */ 45*f80ad8b4SAndroid Build Coastguard Worker char cvp_label3[16]; 46*f80ad8b4SAndroid Build Coastguard Worker int cvp_n4; /* number of vendor specific elems (CHET_V4) */ 47*f80ad8b4SAndroid Build Coastguard Worker char cvp_label4[16]; 48*f80ad8b4SAndroid Build Coastguard Worker int reserved[8]; 49*f80ad8b4SAndroid Build Coastguard Worker }; 50*f80ad8b4SAndroid Build Coastguard Worker 51*f80ad8b4SAndroid Build Coastguard Worker 52*f80ad8b4SAndroid Build Coastguard Worker /* 53*f80ad8b4SAndroid Build Coastguard Worker * CHIOMOVE 54*f80ad8b4SAndroid Build Coastguard Worker * move a medium from one element to another 55*f80ad8b4SAndroid Build Coastguard Worker */ 56*f80ad8b4SAndroid Build Coastguard Worker struct changer_move { 57*f80ad8b4SAndroid Build Coastguard Worker int cm_fromtype; /* type/unit of source element */ 58*f80ad8b4SAndroid Build Coastguard Worker int cm_fromunit; 59*f80ad8b4SAndroid Build Coastguard Worker int cm_totype; /* type/unit of destination element */ 60*f80ad8b4SAndroid Build Coastguard Worker int cm_tounit; 61*f80ad8b4SAndroid Build Coastguard Worker int cm_flags; 62*f80ad8b4SAndroid Build Coastguard Worker }; 63*f80ad8b4SAndroid Build Coastguard Worker #define CM_INVERT 1 /* flag: rotate media (for double-sided like MOD) */ 64*f80ad8b4SAndroid Build Coastguard Worker 65*f80ad8b4SAndroid Build Coastguard Worker 66*f80ad8b4SAndroid Build Coastguard Worker /* 67*f80ad8b4SAndroid Build Coastguard Worker * CHIOEXCHANGE 68*f80ad8b4SAndroid Build Coastguard Worker * move one medium from element #1 to element #2, 69*f80ad8b4SAndroid Build Coastguard Worker * and another one from element #2 to element #3. 70*f80ad8b4SAndroid Build Coastguard Worker * element #1 and #3 are allowed to be identical. 71*f80ad8b4SAndroid Build Coastguard Worker */ 72*f80ad8b4SAndroid Build Coastguard Worker struct changer_exchange { 73*f80ad8b4SAndroid Build Coastguard Worker int ce_srctype; /* type/unit of element #1 */ 74*f80ad8b4SAndroid Build Coastguard Worker int ce_srcunit; 75*f80ad8b4SAndroid Build Coastguard Worker int ce_fdsttype; /* type/unit of element #2 */ 76*f80ad8b4SAndroid Build Coastguard Worker int ce_fdstunit; 77*f80ad8b4SAndroid Build Coastguard Worker int ce_sdsttype; /* type/unit of element #3 */ 78*f80ad8b4SAndroid Build Coastguard Worker int ce_sdstunit; 79*f80ad8b4SAndroid Build Coastguard Worker int ce_flags; 80*f80ad8b4SAndroid Build Coastguard Worker }; 81*f80ad8b4SAndroid Build Coastguard Worker #define CE_INVERT1 1 82*f80ad8b4SAndroid Build Coastguard Worker #define CE_INVERT2 2 83*f80ad8b4SAndroid Build Coastguard Worker 84*f80ad8b4SAndroid Build Coastguard Worker 85*f80ad8b4SAndroid Build Coastguard Worker /* 86*f80ad8b4SAndroid Build Coastguard Worker * CHIOPOSITION 87*f80ad8b4SAndroid Build Coastguard Worker * move the transport element (robot arm) to a specific element. 88*f80ad8b4SAndroid Build Coastguard Worker */ 89*f80ad8b4SAndroid Build Coastguard Worker struct changer_position { 90*f80ad8b4SAndroid Build Coastguard Worker int cp_type; 91*f80ad8b4SAndroid Build Coastguard Worker int cp_unit; 92*f80ad8b4SAndroid Build Coastguard Worker int cp_flags; 93*f80ad8b4SAndroid Build Coastguard Worker }; 94*f80ad8b4SAndroid Build Coastguard Worker #define CP_INVERT 1 95*f80ad8b4SAndroid Build Coastguard Worker 96*f80ad8b4SAndroid Build Coastguard Worker 97*f80ad8b4SAndroid Build Coastguard Worker /* 98*f80ad8b4SAndroid Build Coastguard Worker * CHIOGSTATUS 99*f80ad8b4SAndroid Build Coastguard Worker * get element status for all elements of a specific type 100*f80ad8b4SAndroid Build Coastguard Worker */ 101*f80ad8b4SAndroid Build Coastguard Worker struct changer_element_status { 102*f80ad8b4SAndroid Build Coastguard Worker int ces_type; 103*f80ad8b4SAndroid Build Coastguard Worker unsigned char __user *ces_data; 104*f80ad8b4SAndroid Build Coastguard Worker }; 105*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_FULL 0x01 /* full */ 106*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_IMPEXP 0x02 /* media was imported (inserted by sysop) */ 107*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_EXCEPT 0x04 /* error condition */ 108*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_ACCESS 0x08 /* access allowed */ 109*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_EXENAB 0x10 /* element can export media */ 110*f80ad8b4SAndroid Build Coastguard Worker #define CESTATUS_INENAB 0x20 /* element can import media */ 111*f80ad8b4SAndroid Build Coastguard Worker 112*f80ad8b4SAndroid Build Coastguard Worker 113*f80ad8b4SAndroid Build Coastguard Worker /* 114*f80ad8b4SAndroid Build Coastguard Worker * CHIOGELEM 115*f80ad8b4SAndroid Build Coastguard Worker * get more detailed status information for a single element 116*f80ad8b4SAndroid Build Coastguard Worker */ 117*f80ad8b4SAndroid Build Coastguard Worker struct changer_get_element { 118*f80ad8b4SAndroid Build Coastguard Worker int cge_type; /* type/unit */ 119*f80ad8b4SAndroid Build Coastguard Worker int cge_unit; 120*f80ad8b4SAndroid Build Coastguard Worker int cge_status; /* status */ 121*f80ad8b4SAndroid Build Coastguard Worker int cge_errno; /* errno */ 122*f80ad8b4SAndroid Build Coastguard Worker int cge_srctype; /* source element of the last move/exchange */ 123*f80ad8b4SAndroid Build Coastguard Worker int cge_srcunit; 124*f80ad8b4SAndroid Build Coastguard Worker int cge_id; /* scsi id (for data transfer elements) */ 125*f80ad8b4SAndroid Build Coastguard Worker int cge_lun; /* scsi lun (for data transfer elements) */ 126*f80ad8b4SAndroid Build Coastguard Worker char cge_pvoltag[36]; /* primary volume tag */ 127*f80ad8b4SAndroid Build Coastguard Worker char cge_avoltag[36]; /* alternate volume tag */ 128*f80ad8b4SAndroid Build Coastguard Worker int cge_flags; 129*f80ad8b4SAndroid Build Coastguard Worker }; 130*f80ad8b4SAndroid Build Coastguard Worker /* flags */ 131*f80ad8b4SAndroid Build Coastguard Worker #define CGE_ERRNO 0x01 /* errno available */ 132*f80ad8b4SAndroid Build Coastguard Worker #define CGE_INVERT 0x02 /* media inverted */ 133*f80ad8b4SAndroid Build Coastguard Worker #define CGE_SRC 0x04 /* media src available */ 134*f80ad8b4SAndroid Build Coastguard Worker #define CGE_IDLUN 0x08 /* ID+LUN available */ 135*f80ad8b4SAndroid Build Coastguard Worker #define CGE_PVOLTAG 0x10 /* primary volume tag available */ 136*f80ad8b4SAndroid Build Coastguard Worker #define CGE_AVOLTAG 0x20 /* alternate volume tag available */ 137*f80ad8b4SAndroid Build Coastguard Worker 138*f80ad8b4SAndroid Build Coastguard Worker 139*f80ad8b4SAndroid Build Coastguard Worker /* 140*f80ad8b4SAndroid Build Coastguard Worker * CHIOSVOLTAG 141*f80ad8b4SAndroid Build Coastguard Worker * set volume tag 142*f80ad8b4SAndroid Build Coastguard Worker */ 143*f80ad8b4SAndroid Build Coastguard Worker struct changer_set_voltag { 144*f80ad8b4SAndroid Build Coastguard Worker int csv_type; /* type/unit */ 145*f80ad8b4SAndroid Build Coastguard Worker int csv_unit; 146*f80ad8b4SAndroid Build Coastguard Worker char csv_voltag[36]; /* volume tag */ 147*f80ad8b4SAndroid Build Coastguard Worker int csv_flags; 148*f80ad8b4SAndroid Build Coastguard Worker }; 149*f80ad8b4SAndroid Build Coastguard Worker #define CSV_PVOLTAG 0x01 /* primary volume tag */ 150*f80ad8b4SAndroid Build Coastguard Worker #define CSV_AVOLTAG 0x02 /* alternate volume tag */ 151*f80ad8b4SAndroid Build Coastguard Worker #define CSV_CLEARTAG 0x04 /* clear volume tag */ 152*f80ad8b4SAndroid Build Coastguard Worker 153*f80ad8b4SAndroid Build Coastguard Worker /* ioctls */ 154*f80ad8b4SAndroid Build Coastguard Worker #define CHIOMOVE _IOW('c', 1,struct changer_move) 155*f80ad8b4SAndroid Build Coastguard Worker #define CHIOEXCHANGE _IOW('c', 2,struct changer_exchange) 156*f80ad8b4SAndroid Build Coastguard Worker #define CHIOPOSITION _IOW('c', 3,struct changer_position) 157*f80ad8b4SAndroid Build Coastguard Worker #define CHIOGPICKER _IOR('c', 4,int) /* not impl. */ 158*f80ad8b4SAndroid Build Coastguard Worker #define CHIOSPICKER _IOW('c', 5,int) /* not impl. */ 159*f80ad8b4SAndroid Build Coastguard Worker #define CHIOGPARAMS _IOR('c', 6,struct changer_params) 160*f80ad8b4SAndroid Build Coastguard Worker #define CHIOGSTATUS _IOW('c', 8,struct changer_element_status) 161*f80ad8b4SAndroid Build Coastguard Worker #define CHIOGELEM _IOW('c',16,struct changer_get_element) 162*f80ad8b4SAndroid Build Coastguard Worker #define CHIOINITELEM _IO('c',17) 163*f80ad8b4SAndroid Build Coastguard Worker #define CHIOSVOLTAG _IOW('c',18,struct changer_set_voltag) 164*f80ad8b4SAndroid Build Coastguard Worker #define CHIOGVPARAMS _IOR('c',19,struct changer_vendor_params) 165*f80ad8b4SAndroid Build Coastguard Worker 166*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_CHIO_H */ 167