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

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)format.c   1.7 (Berkeley/CCI) 6/7/88";
                      3: #endif
                      4: 
                      5: #include       "vdfmt.h"
                      6: 
                      7: /*
                      8: **
                      9: */
                     10: 
                     11: format()
                     12: {
                     13:        boolean read_bad_sector_map();
                     14:        cur.state = fmt;
                     15:        print("Starting format on ");
                     16:        printf("controller %d, drive %d, ", cur.controller, cur.drive);
                     17:        printf("type %s.\n", lab->d_typename);
                     18: 
                     19:        /* Read the flaw map from the disk (where ever it may be) */
                     20:        if(read_bad_sector_map() == true) {
                     21:                if(bad_map->bs_id != D_INFO->id) {
                     22:                        print("Module serial numbers do not match!\n");
                     23: #ifdef notdef
                     24:                        print("Use `info' to find the real serial number.\n");
                     25:                        _longjmp(abort_environ, 1);
                     26: #else
                     27:                        printf("Using serial number from drive, %d\n",
                     28:                            bad_map->bs_id);
                     29:                        D_INFO->id = bad_map->bs_id;
                     30: #endif
                     31:                }
                     32:                clear_relocations(false);
                     33:        }
                     34:        else
                     35:                bad_map->bs_id = D_INFO->id;
                     36: 
                     37: #ifdef notdef
                     38:        /* Re-Initialize bad sector map relocation pointers */
                     39:        zero_bad_sector_map();
                     40:        write_bad_sector_map();
                     41:        if(kill_processes == true)
                     42:                _longjmp(quit_environ, 1);
                     43: 
                     44:        /* format the disk surface */
                     45:        format_relocation_area();
                     46:        format_maintenence_area();
                     47: #endif
                     48:        format_users_data_area();
                     49: 
                     50: 
                     51: #ifdef notdef
                     52:        /* verify the surface */
                     53:        verify_relocation_area();
                     54:        verify_maintenence_area();
                     55:        verify_users_data_area();
                     56: #endif
                     57: 
                     58:        (void) writelabel();
                     59: }
                     60: 
                     61: 
                     62: /*
                     63: **
                     64: */
                     65: 
                     66: format_relocation_area()
                     67: {
                     68:        register long           sector_count;
                     69:        dskadr                  dskaddr;
                     70: 
                     71:        cur.substate = sub_fmt;
                     72:        dskaddr.cylinder = (short)(lab->d_ncylinders - NUMSYS);
                     73:        dskaddr.track = (char)0;
                     74:        dskaddr.sector = (char)0;
                     75:        sector_count = (long)(NUMREL * lab->d_ntracks * lab->d_nsectors);
                     76:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                     77: }
                     78: 
                     79: 
                     80: /*
                     81: **
                     82: */
                     83: 
                     84: format_users_data_area()
                     85: {
                     86:        register long           sector_count;
                     87:        dskadr                  dskaddr;
                     88:        register int            cyl;
                     89: 
                     90:        cur.substate = sub_fmt;
                     91:        sector_count = (long)(lab->d_nsectors);
                     92:        dskaddr.track = (char)0;
                     93:        dskaddr.sector = (char)0;
                     94:        /*
                     95:        for(cyl=0; cyl < (lab->d_ncylinders - NUMSYS); cyl++) {
                     96:        */
                     97:                dskaddr.cylinder = 792;
                     98:                dskaddr.track = 8;
                     99:                format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                    100:                if (kill_processes)
                    101:                        return;
                    102:        /*
                    103:        }
                    104:        */
                    105: }
                    106: 
                    107: 
                    108: /*
                    109: **
                    110: */
                    111: 
                    112: format_maintenence_area()
                    113: {
                    114:        register long           sector_count;
                    115:        dskadr                  dskaddr;
                    116: 
                    117:        cur.substate = sub_fmt;
                    118:        dskaddr.cylinder = (short)(lab->d_ncylinders - NUMMNT - NUMMAP);
                    119:        dskaddr.track = (char)0;
                    120:        dskaddr.sector = (char)0;
                    121:        sector_count = (long)(NUMMNT * lab->d_ntracks * lab->d_nsectors);
                    122:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                    123: }
                    124: 
                    125: 
                    126: /*
                    127: **
                    128: */
                    129: 
                    130: boolean is_formatted()
                    131: {
                    132:        extern boolean  align_buf();
                    133:        dskadr          dskaddr;
                    134: 
                    135:        dskaddr.cylinder = 0;
                    136:        dskaddr.track = 0;
                    137:        dskaddr.sector = 0;
                    138:        if(C_INFO->type == VDTYPE_SMDE) {
                    139:                access_dsk((char *)save, &dskaddr, VDOP_RDRAW, 1, 1);
                    140:                if(align_buf((unsigned long *)save, CDCSYNC) == false)
                    141:                        return true;
                    142:                return  false;
                    143:        }
                    144:        else if(access_dsk((char *)save, &dskaddr, VDOP_RD, 1, 1)&HEADER_ERROR)
                    145:                return false;
                    146:        return true;
                    147: }
                    148: 
                    149: 
                    150: /*
                    151: **     Vdformat_sectors is used to do the actual formatting of a block.
                    152: */
                    153: 
                    154: format_sectors(dskaddr, hdraddr, flags, count)
                    155: dskadr *dskaddr, *hdraddr;
                    156: short  flags;
                    157: long   count;
                    158: {
                    159:        cur.daddr.cylinder = dskaddr->cylinder & 0xfff;
                    160:        cur.daddr.track = dskaddr->track;
                    161:        dcb.opcode = VDOP_FSECT;                /* format sector command */
                    162:        dcb.intflg = DCBINT_NONE;
                    163:        dcb.nxtdcb = (struct dcb *)0;   /* end of chain */
                    164:        dcb.operrsta  = 0;
                    165:        dcb.devselect = (char)cur.drive | lab->d_devflags;
                    166:        dcb.trailcnt = (char)(sizeof(struct trfmt) / sizeof(long));
                    167:        dcb.trail.fmtrail.addr = (char *)scratch; 
                    168: printf("format %d @ %d/%d/%d\n", count, dskaddr->cylinder, dskaddr->track, dskaddr->sector);
                    169:        dcb.trail.fmtrail.nsectors = count;
                    170:        dcb.trail.fmtrail.disk.cylinder = dskaddr->cylinder | flags;
                    171:        dcb.trail.fmtrail.disk.track = dskaddr->track;
                    172:        dcb.trail.fmtrail.disk.sector = dskaddr->sector;
                    173:        dcb.trail.fmtrail.hdr.cylinder = hdraddr->cylinder | flags;
                    174:        dcb.trail.fmtrail.hdr.track = hdraddr->track;
                    175:        dcb.trail.fmtrail.hdr.sector = hdraddr->sector;
                    176:        mdcb.mdcb_head = &dcb;
                    177:        mdcb.mdcb_status = 0;
                    178:        VDGO(C_INFO->addr, (u_long)&mdcb, C_INFO->type);
                    179:        poll((int)(((count+849)/850)+120));
                    180:        if(vdtimeout <= 0) {
                    181:                printf(" while formatting sectors.\n");
                    182:                _longjmp(abort_environ, 1);
                    183:        }
                    184:        if (dcb.operrsta & DCBS_HARD)
                    185:                vd_error("format");
                    186: }

unix.superglobalmegacorp.com

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