xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/chio.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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