|
|
1.1 root 1: /*
2: ** Header file for the VDDC (Versabus Direct Disk Controller) Driver
3: */
4:
5: /*
6: ** DCB Command Codes
7: */
8:
9: #define RD 0x80 /* Read Data */
10: #define FTR 0xc0 /* Full Track Read */
11: #define RAS 0x90 /* Read and Scatter */
1.1.1.2 ! root 12: #define RD_RAW 0x600 /* Read unformatted disk sector */
! 13: #define CMP 0xa0 /* Compare */
1.1 root 14: #define FTC 0xe0 /* Full Track Compare */
15: #define RHDE 0x180 /* Read Header, Data & ECC (not used) */
16: #define WD 0x00 /* Write Data */
17: #define FTW 0x40 /* Full Track Write */
18: #define WTC 0x20 /* Write Then Compare */
19: #define FTWTC 0x60 /* Full Track Write Then Compare */
20: #define GAW 0x10 /* Gather and Write */
21: #define WDE 0x100 /* Write Data & ECC (not used) */
22: #define FSECT 0x900 /* Format Sector */
23: #define GWC 0x30 /* Gather Write & Compare */
24: #define VDSTART 0x800 /* Start drives */
25: #define VDRELEASE 0xa00 /* Stop drives */
26: #define SEEK 0xb00 /* Seek */
27: #define INIT 0xc00 /* Initialize VDDC */
28: #define DIAG 0xd00 /* Diagnose (self-test) VDDC */
29: #define RSTCFG 0xe00 /* Reset/Configure VDDC/DDI/Drive(s) */
30: #define VDSTATUS 0xf00 /* VDDC Status */
31:
32: #define ABORT 0x80000000 /* ABORT active i/o */
33:
34: /*
35: ** Error / Status Symbolic Constants
36: */
37:
38: #define HCRCERR 0x1 /* Header CRC Error */
39: #define HCMPERR 0x2 /* Header Compare Error */
40: #define WPTERR 0x4 /* Write Protect Error/Status */
41: #define CTLRERR 0x8 /* Controller Error */
42: #define DSEEKERR 0x10 /* Disk Seek Error */
43: #define UCDATERR 0x20 /* Uncorrectable Data Error */
44: #define NOTCYLERR 0x40 /* Not on Cylinder Error */
45: #define DRVNRDY 0x80 /* Drive Not Ready Error/Status */
46: #define ALTACC 0x100 /* Alternate (track) accessed Status */
47: #define SEEKSTRT 0x200 /* Seek Started Status */
48: #define INVDADR 0x400 /* Invalid Disk Address Error */
49: #define DNEMEM 0x800 /* Non-Existant Memory Error */
50: #define PARERR 0x1000 /* Memory Parity Error */
51: #define DCOMPERR 0x2000 /* Data Compare Error */
52: #define DDIRDY 0x4000 /* DDI Ready Error/Status */
53: #define OPABRT 0x8000 /* Operator Abort (Host) Error/Status */
54: #define DSERLY 0x10000 /* Data Strobe Early */
55: #define DSLATE 0x20000 /* Data Strobe Late */
56: #define TOPLUS 0x40000 /* Track Offset Plus */
57: #define TOMNUS 0x80000 /* Track Offset Minus */
58: #define CPDCRT 0x100000 /* Cntlr Performed Data Correction */
59: #define HRDERR 0x200000 /* Hard Error */
60: #define SFTERR 0x400000 /* Soft Error (retry succesful) */
61: #define ANYERR 0x800000 /* Any Error */
62: #define INVCMD 0x1000000 /* Programmer error */
63:
64:
65: /*
66: ** DCB Status Symbolic Constants
67: */
68:
69: #define DCBABT 0x10000000 /* DCB Aborted */
70: #define DCBUSC 0x20000000 /* DCB Unsuccesfully Completed */
71: #define DCBCMP 0x40000000 /* DCB Complete */
72: #define DCBSTR 0x80000000 /* DCB Started */
73:
74: /*
75: ** MDCB Status Symbolic Constants
76: */
77:
78: #define CTLRBSY 0x10000000 /* Cntlr Busy */
79: #define INTCCDE 0x60000000 /* Interrupt Cause Code */
80: #define DCBINT 0x80000000 /* DCB Interrupt Flag */
81:
82:
83: /*
84: ** Hard Error Types
85: */
86:
87: #define HTYPES (HCRCERR|HCMPERR|WPTERR|CTLRERR|DSEEKERR|UCDATERR|NOTCYLERR| \
88: DRVNRDY|INVDADR|DNEMEM|PARERR|DCOMPERR)
89:
90:
91: /*
92: ** Errors
93: */
94:
95: #define ERRS 0x3FFF
96: #define CANRETRY (CTLRERR|DSEEKERR|NOTCYLERR|DCOMPERR|UCDATERR| \
97: PARERR|DNEMEM|HCRCERR|HCMPERR)
98: /*
99: ** VDDC Interrupt Modes
100: */
101:
102: #define NOINT 0x0 /* No Interrupt */
103: #define INTERR 0x2 /* Interrupt on Error */
104: #define INTSUC 0x1 /* Interrupt on Success */
105: #define INTDONE 0x3 /* Interrupt on Error or Success */
106:
107:
108: /* Control and Status bit assignments */
109: #define CS_SCS 0xf /* Status Change Source (drive number) */
110: #define CS_ELC 0x10 /* Error on Last Command */
111: #define CS_ICC 0x60 /* Interupt Cause Code */
112: #define ICC_NOI 0x00 /* No interupt */
113: #define ICC_DUN 0x20 /* No interupt */
114: #define ICC_ERR 0x40 /* No interupt */
115: #define ICC_SUC 0x60 /* No interupt */
116: #define CS_GO 0x80 /* Go bit (controller working) */
117: #define CS_BE 0x100 /* Buss Error */
118: #define CS_BOK 0x4000 /* Board O.K. */
119: #define CS_SFL 0x8000 /* System fail */
120: #define CS_LEC 0xff000000 /* Last Error Code */
121:
122: /* Status word bit assignments */
123: #define STA_UR 0x1 /* Unit Ready */
124: #define STA_OC 0x2 /* On Cylinder */
125: #define STA_SE 0x4 /* Seek Error */
126: #define STA_DF 0x8 /* Drive Fault */
127: #define STA_WP 0x10 /* Write Protected */
128: #define STA_US 0x20 /* Unit Selected */
129:
130: /* Interupt Control Field bit assignments */
131: #define ICF_IPL 0x7 /* Interupt Priority Level */
132: #define ICF_IEN 0x8 /* Interupt ENable */
133: #define ICF_IV 0xff00 /* Interupt Vector */
134:
135: /* Transfer Control Format bit assignments */
136: #define TCF_AM 0xff /* Address Modifier */
137: #define AM_SNPDA 0x01 /* Standard Non-Privileged Data Access */
138: #define AM_SASA 0x81 /* Standard Ascending Sequential Access */
139: #define AM_ENPDA 0xf1 /* Extended Non-Privileged Data Access */
140: #define AM_EASA 0xe1 /* Extended Ascending Sequential Access */
141: #define TCF_BTE 0x800 /* Block Transfer Enable */
142:
143: /* Controller Configuration Flags bit assignments */
144: #define CCF_STS 0x1 /* Sectors per Track Selectable */
145: #define CCF_EAV 0x2 /* Enable Auto Vector */
146: #define CCF_ERR 0x4 /* Enable Reset Register */
1.1.1.2 ! root 147: #define CCF_DER 0x8 /* Disable Error Recovery */
1.1 root 148: #define CCF_XMD 0x60 /* XMD transfer mode (buss size) */
149: #define XMD_8BIT 0x20 /* Do only 8 bit transfers */
150: #define XMD_16BIT 0x40 /* Do only 16 bit transfers */
151: #define XMD_32BIT 0x60 /* Do only 32 bit transfers */
152: #define CCF_BSZ 0x300 /* Burst SiZe */
153: #define BSZ_16WRD 0x000 /* 16 word transfer burst */
154: #define BSZ_12WRD 0x100 /* 12 word transfer burst */
155: #define BSZ_8WRD 0x200 /* 8 word transfer burst */
156: #define BSZ_4WRD 0x300 /* 4 word transfer burst */
1.1.1.2 ! root 157: #define CCF_SEN 0x400 /* Cylinder / track Skew ENable (for format) */
1.1 root 158: #define CCF_ENP 0x1000 /* ENable Parity */
159: #define CCF_EPE 0x2000 /* Enable Parity Errors */
160: #define CCF_EDE 0x10000 /* Error Detection Enable */
161: #define CCF_ECE 0x20000 /* Error Correction Enable */
162:
163: /* Diagnostic register definitions */
164:
165: #define DIA_DC 0x7f /* Dump count mask */
166: #define DIA_DWR 0x80 /* Dump Write / Read flag */
167: #define DIA_ARE 0x100 /* Auto Rebuild Enable */
168: #define DIA_CEN 0x200 /* Call ENable flag */
169: #define DIA_KEY 0xAA550000 /* Reset KEY */
170:
171: /* Sector Header bit assignments */
172: #define VDMF 0x8000 /* Manufacturer Fault 1=good sector */
173: #define VDUF 0x4000 /* User Fault 1=good sector */
174: #define VDALT 0x2000 /* Alternate Sector 1=alternate */
175: #define VDWPT 0x1000 /* Write Protect 1=Read Only Sector */
176:
177: /* DCB Bit assignments */
178: #define INT_IC 0x3 /* Interupt Control */
179: #define IC_NOI 0x0 /* NO Interupt */
180: #define IC_IOD 0x1 /* Interupt On Done */
181: #define IC_IOE 0x2 /* Interupt On Error */
182: #define IC_IOS 0x3 /* Interupt On Success */
183: #define INT_PBA 0x4 /* Proceed before ACK */
184:
185: /*
1.1.1.2 ! root 186: ** Flaw map stuff
! 187: */
! 188:
! 189: typedef struct {
! 190: long flaw_sync;
! 191: short flaw_cyl;
! 192: char flaw_trk;
! 193: char flaw_sec;
! 194: struct {
! 195: short flaw_offset;
! 196: short flaw_length;
! 197: } flaw_pos[4];
! 198: char flaw_status;
! 199: char flaw_junk[1024]; /* Fill up 518 byte block */
! 200: } flaw;
! 201:
! 202: typedef struct {
! 203: long smde_sync;
! 204: unsigned adr_cyl : 12;
! 205: unsigned adr_trk : 8;
! 206: unsigned adr_sec : 8;
! 207: unsigned sec_flgs : 4;
! 208: unsigned alt_cyl : 12;
! 209: unsigned alt_trk : 8;
! 210: unsigned alt_sec : 8;
! 211: char smde_junk[1024];
! 212: } smde_hdr;
! 213:
! 214: #define CDCSYNC 0x1919
! 215: #define SMDSYNC 0x0019
! 216: #define SMDESYNC 0x0009
! 217: #define SMDE1SYNC 0x000d
! 218:
! 219: /*
1.1 root 220: ** Address of Memory-Mapped I/O Port for VDDC H/W Reset
221: */
222:
223: #define VDDC_RESET(addr, type) { if(type == SMD_ECTLR) { \
224: (addr)->diag_flags=DIA_KEY | DIA_CEN; \
225: (addr)->cdr_mdcb_ptr = \
226: (fmt_mdcb *)0xffffffff; \
227: DELAY(5000000); \
228: } \
229: else { \
230: (addr)->cdr_reset = 0x0; \
231: DELAY(1500000); \
232: } \
233: }
234:
235: /*
236: ** Abort controller operation.
237: */
238:
239: #define VDDC_ABORT(a, type) { if((type) == SMDCTLR) { \
1.1.1.2 ! root 240: movow((int)((ABORT & 0xffff0000)>>16), \
! 241: (int)(a)) ; \
! 242: movow((int)(ABORT & 0xffff), \
! 243: (int)((int)(a)+2)); \
1.1 root 244: } \
245: else (a)->cdr_mdcb_ptr = (fmt_mdcb *)ABORT; \
246: DELAY(1000000); }
247:
248: /*
249: ** Start i/o to/from controller.
250: */
251:
252: #define VDDC_ATTENTION(ctlr, mdcbadr, type) \
253: { if(type == SMDCTLR) { \
1.1.1.2 ! root 254: movow((int)(((int)mdcbadr & 0xffff0000)>>16), \
! 255: (int)ctlr) ; \
! 256: movow((int)((int)mdcbadr&0xffff), \
! 257: (int)((int)(ctlr)+2)); \
1.1 root 258: } \
259: else (ctlr)->cdr_mdcb_ptr = mdcbadr; }
260:
261:
262: #define POLLTILLDONE(c, a, x, t) { vdtimeout = 1000*(x); \
263: uncache(&((a)->operrsta)); \
264: while (!(((a)->operrsta) & (DCBCMP | DCBABT))) { \
265: DELAY(1000); \
266: vdtimeout--; \
267: uncache(&((a)->operrsta)); \
268: if (vdtimeout <= 0) { \
269: printf("VDDC: Controller timeout"); \
270: VDDC_ABORT(c, t); \
271: DELAY(30000); \
272: break; \
273: } \
274: } \
275: if((vdtimeout > 0)) \
276: if((t == SMD_ECTLR) && (vdtimeout > 0)) { \
277: uncache(&(c)->cdr_csr); \
278: while((c)->cdr_csr & CS_GO) { \
279: DELAY(50); \
280: uncache(&(c)->cdr_csr); \
281: } \
282: DELAY(500); \
283: } \
284: else DELAY(200); \
285: uncache(&((a)->operrsta)); \
286: }
287:
288: /* Disk Address */
289:
290: typedef struct {
291: char track; /* all 8 bits */
292: char sector; /* all 8 bits */
293: short cylinder; /* low order 12 bits */
294: } dskadr;
295:
296: /* sector formats */
297:
298: typedef union {
1.1.1.2 ! root 299: struct {
! 300: dskadr hdr_addr;
! 301: short smd_crc;
! 302: } smd;
! 303: struct {
! 304: dskadr physical;
! 305: dskadr logical;
! 306: long smd_e_crc;
! 307: } smd_e;
1.1 root 308: } fmt_hdr;
309:
310:
311: /* DCB Trailer Formats */
312:
313: /* Read / Write Trailer */
314:
315: typedef struct {
316: char *memadr; /* memory address */
317: unsigned long wcount; /* 16 bit word count */
318: dskadr disk; /* disk address */
319: } trrw;
320:
321: /* Scatter/gather trailer */
322:
323: typedef struct {
324: trrw start_addr;
325: struct {
326: char *nxt_addr;
327: unsigned long nxt_len;
328: } addr_chain[126];
329: } trsg;
330:
331: /* Seek trailer format */
332:
333: typedef struct {
334: dskadr skaddr;
335: } trseek;
336:
337: /* Format Trailer */
338:
339: typedef struct {
340: char *addr; /* data buffer to be filled on sector*/
341: long nsectors; /* # of sectors to be formatted */
342: dskadr disk; /* Disk physical address info */
343: dskadr hdr; /* Header address info */
344: } trfmt;
345:
346:
347: /* Reset / Configure Trailer */
348:
349: typedef struct {
350: long ncyl; /* # cylinders */
351: long nsurfaces; /* # surfaces */
352: long nsectors; /* # sectors */
353: long slip_sec; /* # of slip sectors */
1.1.1.2 ! root 354: long recovery; /* Recovery flags */
1.1 root 355: } treset;
356:
357:
358: /* DCB Format */
359:
360: typedef struct fmtdcb{
361: struct fmtdcb *nxtdcb; /* next dcb in chain or End of Chain */
362: short intflg; /* interrupt settings and flags */
363: short opcode; /* DCB Command code etc... */
364: long operrsta; /* Error & Status info */
365: short fill; /* not used */
366: char devselect; /* Drive selection */
367: char trailcnt; /* Trailer Word Count */
368: long err_memadr; /* Error memory address */
369: char err_code; /* Error codes for SMD/E */
370: char fill2; /* not used */
371: short err_wcount; /* Error word count */
372: char err_trk; /* Error track/sector */
373: char err_sec; /* Error track/sector */
374: short err_cyl; /* Error cylinder adr */
375: union {
376: trseek sktrail; /* seek command trailer */
1.1.1.2 ! root 377: trsg sgtrail; /* Scatter gather trailer */
1.1 root 378: trrw rwtrail; /* read/write trailer */
379: trfmt fmtrail; /* format trailer */
380: treset rstrail; /* reset/configure trailer */
381: } trail;
382: } fmt_dcb;
383:
384:
385: /* MDCB Format */
386:
387: typedef struct {
388: fmt_dcb *firstdcb; /* first dcb in chain */
389: fmt_dcb *procdcb; /* dcb being processed */
390: fmt_dcb *intdcb; /* dcb causing interrupt */
391: long vddcstat; /* VDDC status */
392: } fmt_mdcb;
393:
394:
395: typedef struct {
396: fmt_mdcb *cdr_mdcb_ptr; /* pointer to controllers mdcb */
397: unsigned long cdr_reset; /* writes here resets controller */
398: unsigned long cdr_csr; /* control / status register */
399: long cdr_reserved; /* don't use */
400: unsigned short cdr_status[16]; /* one status register for each drive */
401: unsigned short stat_chng; /* status change interupt field */
402: unsigned short done_icf; /* done interupt control field */
403: unsigned short error_icf; /* error interupt control field */
404: unsigned short success_icf; /* success interupt control field */
405: unsigned short mdcb_tcf; /* mdcb transfer control field */
406: unsigned short dcb_tcf; /* dcb transfer control field */
407: unsigned short trail_tcf; /* trail transfer control field */
408: unsigned short data_tcf; /* data transfer control field */
409: unsigned long cdr_ccf; /* controller configuration flags */
410: unsigned long sec_size; /* drive sector size */
1.1.1.2 ! root 411: unsigned short cdr_unused0;
! 412: unsigned char cyl_skew; /* cylinder to cylinder skew factor */
! 413: unsigned char trk_skew; /* track to track skew factor */
! 414: unsigned long cdr_unused1;
1.1 root 415: unsigned long diag_flags; /* diagnostic flag register */
416: unsigned long diag_dump; /* pointer for diagnostic addresses */
417: } cdr;
418:
419: /* possible controller types */
420:
421: #define UNKNOWN -1
422: #define SMDCTLR 1
423: #define SMD_ECTLR 2
424:
425: /* the total # of drive types possible */
426:
427: #define XSD 0
428: #define FUJ 1
429: #define XFD 2
430: #define SMD 3
431: #define FSD 4
432:
433: typedef struct {
434: long par_start;
435: long par_len;
436: } par_tab;
437:
438:
439: typedef struct {
440: int secsize; /* Number of bytes in a sector */
441: int nsec; /* Number of sectors per track */
442: int ntrak; /* Number of tracks per cylinder */
443: int ncyl; /* Number of cylinders */
444: int nslip; /* Number of slip sectors */
445: int rpm; /* Revs Per Minute */
1.1.1.2 ! root 446: int nbyte; /* Number of bits per track */
1.1 root 447: char *type_name; /* Name of drive */
1.1.1.2 ! root 448: char *type_discript; /* discriptition of drive */
1.1 root 449: long fmt_pat[16]; /* Patterns to be used for formatting */
450: par_tab partition[8]; /* partition a (root file system) */
451: /* partition b (swap) */
452: /* partition c (user data) */
453: /* partition d (maintenance cyls) */
454: /* partition e (all user data area) */
455: /* partition f ('b' and 'c' combined */
456: /* partition g (1st half of 'c') */
457: /* partition h (2nd half of 'c') */
458: } fs_tab;
459:
1.1.1.2 ! root 460:
1.1 root 461: /* Physical information for known disk drives. */
462: #ifdef VDGENDATA
1.1.1.2 ! root 463: long vddcaddr[] = { 0xf2000, 0xf2100, 0xf2200, 0xf2300,
! 464: 0xf2400, 0xf2500, 0xf2600, 0xf2700 };
1.1 root 465: long vdtimeout = 0;
466:
467: fs_tab vdst[] = {
1.1.1.2 ! root 468: {512, 48, 24, 711, 0, 3600, 30240, "xsd",
! 469: "515 Mb Control Data Winchester drive",
1.1 root 470: { 0x0264c993, 0x04c99326, 0x0993264c, 0x13264c98,
471: 0x264c9930, 0x4c993260, 0x993264c0, 0x3264c980,
472: 0x64c99300, 0xc9932600, 0x93264c00, 0x264c9800,
473: 0x4c993000, 0x99326000, 0x3264c000, 0x54c98000},
474: {{0, 30528}, /* xsd0a cyl 0 - 52 */
475: {30528, 30528}, /* xsd0b cyl 53 - 105 */
476: {61056, 345600}, /* xsd0c cyl 106 - 705 */
1.1.1.2 ! root 477: {118656, 288000}, /* xsd0d cyl 206 - 705 */
! 478: {176256, 230400}, /* xsd0e cyl 306 - 705 */
! 479: {233856, 172800}, /* xsd0f cyl 406 - 705 */
! 480: {291456, 115200}, /* xsd0g cyl 506 - 705 */
! 481: {349056, 57600}} /* xsd0h cyl 606 - 705 */
1.1 root 482: },
1.1.1.2 ! root 483: {512, 66, 23, 850, 0, 3600, 40960, "ncc",
! 484: "800Mb NEC",
! 485: { 0x0264c993, 0x04c99326, 0x0993264c, 0x13264c98,
! 486: 0x264c9930, 0x4c993260, 0x993264c0, 0x3264c980,
! 487: 0x64c99300, 0xc9932600, 0x93264c00, 0x264c9800,
! 488: 0x4c993000, 0x99326000, 0x3264c000, 0x54c98000},
! 489: {{0, 26400}, /* egl0a */
! 490: {26400, 33000}, /* egl0b */
! 491: {59400, 308880}} /* egl0c */
! 492: },
! 493: {512, 44, 20, 842, 0, 3600, 27720, "egl",
! 494: "474 Mb Fujitsu Eagle drive",
! 495: { 0x0264c993, 0x04c99326, 0x0993264c, 0x13264c98,
! 496: 0x264c9930, 0x4c993260, 0x993264c0, 0x3264c980,
! 497: 0x64c99300, 0xc9932600, 0x93264c00, 0x264c9800,
! 498: 0x4c993000, 0x99326000, 0x3264c000, 0x54c98000},
! 499: {{0, 26400}, /* egl0a */
! 500: {26400, 33000}, /* egl0b */
! 501: {59400, 308880}} /* egl0c */
! 502: },
! 503: {512, 64, 10, 823, 0, 3600, 40960, "fuj", /* 360 Mb Fujitsu */
! 504: "360 Mb Fujitsu Winchester drive",
1.1 root 505: { 0x0264c993, 0x04c99326, 0x0993264c, 0x13264c98,
506: 0x264c9930, 0x4c993260, 0x993264c0, 0x3264c980,
507: 0x64c99300, 0xc9932600, 0x93264c00, 0x264c9800,
508: 0x4c993000, 0x99326000, 0x3264c000, 0x54c98000},
509: {{0, 19200}, /* fuj0a cyl 0 - 59 */
510: {19200, 24000}, /* fuj0b cyl 60 - 134 */
511: {43200, 218560}, /* fuj0c cyl 135 - 817 */
1.1.1.2 ! root 512: {79680, 182080}, /* fuj0d cyl 249 - 817 */
! 513: {116160, 145600}, /* fuj0e cyl 363 - 817 */
! 514: {152640, 109120}, /* fuj0f cyl 477 - 817 */
! 515: {189120, 72640}, /* fuj0g cyl 591 - 817 */
! 516: {225600, 36160}} /* fug0h cyl 705 - 817 */
1.1 root 517: },
1.1.1.2 ! root 518: {512, 32, 24, 711, 0, 3600, 20160, "xfd", /* 340 Mb FSD */
! 519: "340 Mb Control Data Winchester drive",
1.1 root 520: { 0x0d9b366c, 0x1b366cd8, 0x366cd9b0, 0x6cd9b360,
521: 0xd9b366c0, 0xb366cd80, 0x66cd9b00, 0xcd9b3600,
522: 0x9b366300, 0x366cd800, 0x6cd9b000, 0xd9b36000,
523: 0xb366c000, 0x66cd8000, 0xcd9b0000, 0x9b360000},
524: {{0, 20352}, /* xfd0a cyl 0 - 52 */
525: {20352, 20352}, /* xfd0b cyl 53 - 105 */
526: {40704, 230400}, /* xfd0c cyl 106 - 705 */
1.1.1.2 ! root 527: {79104, 192000}, /* xfd0d cyl 206 - 705 */
! 528: {117504, 153600}, /* xfd0e cyl 306 - 705 */
! 529: {155904, 115200}, /* xfd0f cyl 406 - 705 */
! 530: {194304, 76800}, /* xfd0g cyl 506 - 705 */
! 531: {232704, 38400}} /* xfd0h cyl 606 - 705 */
1.1 root 532: },
1.1.1.2 ! root 533: {512, 32, 19, 823, 0, 3600, 20160, "smd", /* 300 Mb SMD */
! 534: "300 Mb Control Data removable media drive",
1.1 root 535: { 0x0d9b366c, 0x1b366cd8, 0x366cd9b0, 0x6cd9b360,
536: 0xd9b366c0, 0xb366cd80, 0x66cd9b00, 0xcd9b3600,
537: 0x9b366300, 0x366cd800, 0x6cd9b000, 0xd9b36000,
538: 0xb366c000, 0x66cd8000, 0xcd9b0000, 0x9b360000},
539: {{0, 20064}, /* smd0a cyl 0 - 65 */
540: {20064, 13680}, /* smd0b cyl 66 - 110 */
541: {33744, 214928}, /* smd0c cyl 111 - 817 */
1.1.1.2 ! root 542: {69616, 179056}, /* smd0d cyl 229 - 817 */
! 543: {105488, 143184}, /* smd0e cyl 347 - 817 */
! 544: {141360, 107312}, /* smd0f cyl 465 - 817 */
! 545: {177232, 71440}, /* smd0g cyl 583 - 817 */
! 546: {213104, 35568}} /* smd0h cyl 701 - 817 */
1.1 root 547: },
1.1.1.2 ! root 548: {512, 32, 10, 823, 0, 3600, 20160, "fsd", /* 160 Mb FSD */
! 549: "160 Mb Control Data Winchester drive",
1.1 root 550: { 0x0d9b366c, 0x1b366cd8, 0x366cd9b0, 0x6cd9b360,
551: 0xd9b366c0, 0xb366cd80, 0x66cd9b00, 0xcd9b3600,
552: 0x9b366300, 0x366cd800, 0x6cd9b000, 0xd9b36000,
553: 0xb366c000, 0x66cd8000, 0xcd9b0000, 0x9b360000},
554: {{0, 9600}, /* fsd0a cyl 0 - 59 */
555: {9600, 12000}, /* fsd0b cyl 60 - 134 */
556: {21600, 109280}, /* fsd0c cyl 135 - 817 */
1.1.1.2 ! root 557: {39840, 91040}, /* fsd0d cyl 249 - 817 */
! 558: {58080, 72800}, /* fsd0e cyl 363 - 817 */
! 559: {76320, 54560}, /* fsd0f cyl 477 - 817 */
! 560: {94560, 36320}, /* fsd0g cyl 591 - 817 */
! 561: {112800, 18080}} /* fsd0h cyl 705 - 817 */
1.1 root 562: }
563: };
564:
565: int nvddrv = (sizeof(vdst)/sizeof(fs_tab));
566: #else
567: extern long vddcaddr[];
568: extern long vdtimeout;
569: extern fs_tab vdst[];
570: extern int nvddrv;
571: #endif VDGENDATA
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.