Annotation of 43BSDReno/sys/tahoestand/vdformat/smd.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)smd.c      1.3 (Berkeley/CCI) 6/7/88";
        !             3: #endif
        !             4: 
        !             5: #include       "vdfmt.h"
        !             6: 
        !             7: 
        !             8: 
        !             9: /*
        !            10: **     The sector format of the SMD (VDDC) controller looks like this:
        !            11: **  28 bytes sector gap                (header error)
        !            12: **   1 byte sync (0x19)                (header error)
        !            13: **   2 bytes cylinder address  (header error)
        !            14: **   1 byte track address      (header error)
        !            15: **   1 byte sector address     (header error)
        !            16: **   2 bytes header crc                (header error)
        !            17: **  18 bytes header gap                (data error)
        !            18: ** 512 bytes data              (data error)
        !            19: **   4 byte ecc                        (data error)
        !            20: **  ?? trailing pad            (data error)
        !            21: */
        !            22: 
        !            23: smd_decode_position(bad_entry, error)
        !            24: register bs_entry *bad_entry;
        !            25: register fmt_err *error;
        !            26: {
        !            27:        int     sector_length = lab->d_traksize / lab->d_nsectors;
        !            28:        int     offset = (bad_entry->bs_offset-2) % sector_length;
        !            29:        int     bytes = ((bad_entry->bs_length / 8)) + 4;
        !            30: 
        !            31:        error->err_adr.cylinder = bad_entry->bs_cyl;
        !            32:        error->err_adr.track = bad_entry->bs_trk;
        !            33:        error->err_adr.sector = (bad_entry->bs_offset-2) / sector_length;
        !            34:        if(error->err_adr.sector >= lab->d_nsectors) {
        !            35:                error->err_adr.sector = lab->d_nsectors - 1;
        !            36:                error->err_stat = DATA_ERROR;
        !            37:        }
        !            38:        else if((offset < 35) || ((offset+bytes) > sector_length))
        !            39:                error->err_stat = HEADER_ERROR;
        !            40:        else 
        !            41:                error->err_stat = DATA_ERROR;
        !            42: }
        !            43: 
        !            44: 
        !            45: /*
        !            46: **
        !            47: */
        !            48: 
        !            49: smd_code_position(error, badent)
        !            50: register fmt_err *error;
        !            51: register bs_entry *badent;
        !            52: {
        !            53:        int             sector_length = lab->d_traksize / lab->d_nsectors;
        !            54: 
        !            55:        badent->bs_length = 1;
        !            56:        badent->bs_cyl = error->err_adr.cylinder;
        !            57:        badent->bs_trk = error->err_adr.track;
        !            58:        badent->bs_offset = error->err_adr.sector * sector_length;
        !            59:        if(error->err_stat & HEADER_ERROR) {
        !            60:                badent->bs_offset += 1;
        !            61:        }
        !            62:        else {
        !            63:                badent->bs_offset += 50;
        !            64:        }
        !            65:        badent->bs_alt.cylinder = 0;
        !            66:        badent->bs_alt.track = 0;
        !            67:        badent->bs_alt.sector = 0;
        !            68:        badent->bs_how = scanning;
        !            69: }

unix.superglobalmegacorp.com

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