|
|
1.1 root 1: /*
2: * /usr/include/sys/xl.h
3: *
4: * Archive floppy tape support.
5: *
6: * Revised: Wed Jun 2 12:16:16 1993 CDT
7: */
8:
9: #ifndef __SYS_XL_H__
10: #define __SYS_XL_H__
11:
12: /************************************************************************/
13: /* QIC 117 commands */
14: /************************************************************************/
15: #define QIC_CMD_RST 01 /* reset */
16: #define QIC_CMD_RNB 02 /* report next bit */
17: #define QIC_CMD_PAUS 03 /* pause */
18: #define QIC_CMD_MPAUS 04 /* micro step pause */
19: #define QIC_CMD_ALTTO 05 /* alternate command timeout */
20: #define QIC_CMD_STS 06 /* status */
21: #define QIC_CMD_ECD 07 /* report error code */
22: #define QIC_CMD_DRVCN 08 /* report drive configuration */
23: #define QIC_CMD_ROMVN 09 /* report ROM version */
24: #define QIC_CMD_FWD 10 /* logical forward */
25: #define QIC_CMD_BOT 11 /* rewind to begining of tape */
26: #define QIC_CMD_EOT 12 /* forward to end of tape */
27: #define QIC_CMD_SEEK 13 /* seek head to track */
28: #define QIC_CMD_CAL 14 /* rewind, calibrate drive */
29: #define QIC_CMD_FMD 15 /* format mode */
30: #define QIC_CMD_WRF 16 /* write reference bursts */
31: #define QIC_CMD_VMD 17 /* verify mode */
32: #define QIC_CMD_STOP 18 /* stop tape motion */
33: #define QIC_CMD_SKPB 25 /* skip n segments back */
34: #define QIC_CMD_NMD 30 /* normal mode */
35: #define QIC_CMD_VNDID 32 /* report vendor id */
36: #define QIC_CMD_TPSTAT 33 /* report tape status */
37:
38: /************************************************************************/
39: /* QIC 117 error codes */
40: /************************************************************************/
41:
42: /* command received while drive not ready */
43: #define QIC_ERR_NOT_READY 01
44:
45: /* cartridge not present or removed */
46: #define QIC_ERR_NO_CART 02
47:
48: /* motor speed error (not within 1%) */
49: #define QIC_ERR_MOTOR_SPEED 03
50:
51: /* motor speed fault (jammed, or gross speed error) */
52: #define QIC_ERR_MOTOR_FAULT 04
53:
54: /* cartridge write protected */
55: #define QIC_ERR_WPROT 05
56:
57: /* undefined or reserved command code */
58: #define QIC_ERR_BAD_CMD 06
59:
60: /* illegal track address specified for seek */
61: #define QIC_ERR_SEEK_TRK 07
62:
63: /* illegal command in report subcontext */
64: #define QIC_ERR_RPT_CMD 08
65:
66: /* illegal entry into a diagnostic mode */
67: #define QIC_ERR_DIAG_ENTRY 09
68:
69: /* broken tape detected (based on hole sensor) */
70: #define QIC_ERR_BROKEN_TAPE 10
71:
72: /* warning - read gain setting error */
73: #define QIC_ERR_READ_GAIN 11
74:
75: /* command received while error status pending (obsolete) */
76: #define QIC_ERR_ESTAT 12
77:
78: /* command received while new cartridge pending */
79: #define QIC_ERR_NEW_CART 13
80:
81: /* command illegal or undefined in primary mode */
82: #define QIC_ERR_PRI_MODE 14
83:
84: /* command illegal or undefined in format mode */
85: #define QIC_ERR_FMT_MODE 15
86:
87: /* command illegal or undefined in verify mode */
88: #define QIC_ERR_VFY_MODE 16
89:
90: /* logical forward not at logical BOT in format mode */
91: #define QIC_ERR_LOG_FWD 17
92:
93: /* logical EOT before all segments generated */
94: #define QIC_ERR_LOG_EOT 18
95:
96: /* command illegal when cartridge not referenced */
97: #define QIC_ERR_NOT_REF 19
98:
99: /* self-diagnostic failed (cannot be cleared) */
100: #define QIC_ERR_SELF_DX 20
101:
102: /* warning EEPROM not initialized, defaults set */
103: #define QIC_ERR_EE_DFLT 21
104:
105: /* EEPROM corrupt or hardware failure */
106: #define QIC_ERR_EE_BAD 22
107:
108: /* motion timeout error */
109: #define QIC_ERR_MOTION_TO 23
110:
111: /* data segment too long - logical forward or pause */
112: #define QIC_ERR_TOO_LONG 24
113:
114: /* transmit overrun (obsolete) */
115: #define QIC_ERR_XMIT_OVR 25
116:
117: /* power on reset occurred */
118: #define QIC_ERR_POWER_ON 26
119:
120: /* software reset occurred */
121: #define QIC_ERR_SOFT_RST 27
122:
123: /* diagnostic mode 1 error */
124: #define QIC_ERR_DX_1 28
125:
126: /* diagnostic mode 2 error */
127: #define QIC_ERR_DX_2 29
128:
129: /* command received during noninterruptible process */
130: #define QIC_ERR_NON_IRPT 30
131:
132: /* rate selection error */
133: #define QIC_ERR_RATE_SEL 31
134:
135: /* illegal command while in high speed mode */
136: #define QIC_ERR_HIGH_SPD 32
137:
138: /* illegal seek segment value */
139: #define QIC_ERR_SEEK_SEG 33
140:
141: /************************************************************************/
142: /* request buffer structure */
143: /************************************************************************/
144: struct rb{
145: struct rb *nxt; /* ptr to next packet */
146: unchar fun; /* function */
147: unchar sts; /* status */
148: ushort sgn; /* segment # */
149: paddr_t adr; /* addr of buffer */
150: ulong map; /* bad sector map */
151: unchar hed; /* fdc head */
152: unchar cyl; /* fdc cylinder */
153: unchar sct; /* base fdc sector */
154: unchar trk; /* tape track */
155: unchar tps; /* segment */
156: unchar idc; /* read id cylinder */
157: unchar ids; /* sct */
158: unchar nbk; /* # blocks */
159: unchar erc; /* error count */
160: unchar ers[ 3 ]; /* error sectors */
161: ushort tbl[ 33 ]; /* parsed segment params*/
162: };
163:
164: struct rbq { /* buf queue structure */
165: struct rb *top;
166: struct rb *bot;
167: };
168:
169: /************************************************************************/
170: /* Volume table structure (128 bytes) */
171: /************************************************************************/
172:
173: typedef struct {
174: unsigned char ident[4]; /* Volume entry signature "VTBL"*/
175: unsigned short data_seg_num; /* Starting segment number */
176: unsigned short last_seg_num; /* Ending segment number */
177: unsigned char op_system[6]; /* OS type "unix" */
178: unsigned char p1[43]; /* Null (offset 14-56) */
179: char c_seq_num; /* Multicartridge seq # */
180: /* initial cartridge = 1 */
181: unsigned short p3[34]; /* Null (offset 58-126) */
182: unsigned short last_blk_size; /* Reserved. For UNIX/Xenix */
183: /* last block data size */
184: } xlvtbl;
185:
186: /************************************************************************/
187: /* xl typedefs */
188: /************************************************************************/
189:
190: typedef unsigned char * fpchr;
191: typedef unsigned short * fpwrd;
192: typedef unsigned long * fplng;
193:
194: /************************************************************************/
195: /* xldefines */
196: /************************************************************************/
197:
198: #define RBFRD 0x01 /* rb.fun values */
199: #define RBFWT 0x02
200: #define RBWFD 0x03
201:
202: #define XLSRDY 0x01 /* xl6sts equates */
203: #define XLSEXC 0x02
204: #define XLSCIN 0x04
205: #define XLSWRP 0x08
206: #define XLSCHG 0x10
207: #define XLSREF 0x20
208: #define XLSBOT 0x40
209: #define XLSEOT 0x80
210: /* xlster equates */
211: #define XLSNEC 0x80 /* nec error */
212: #define XLSLSB 0x40 /* last status bit != 1 */
213: #define XLSSFT 0x20 /* soft error:, exc, chg, or no cin */
214: #define XLSNTD 0x10 /* not tape drive */
215: #define XLSNID 0x08 /* can't read id's */
216:
217: #endif /* __SYS_XL_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.