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