Annotation of 43BSDReno/sys/tahoestand/vdformat/smd_e.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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