Annotation of cci/sys/vba/vddc.h, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.