Annotation of 43BSDTahoe/sys/tahoestand/vdformat/format.c, 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:        /* Re-Initialize bad sector map relocation pointers */
                     38:        zero_bad_sector_map();
                     39:        write_bad_sector_map();
                     40:        if(kill_processes == true)
                     41:                _longjmp(quit_environ, 1);
                     42: 
                     43:        /* format the disk surface */
                     44:        format_relocation_area();
                     45:        format_maintenence_area();
                     46:        format_users_data_area();
                     47: 
                     48: 
                     49:        /* verify the surface */
                     50:        verify_relocation_area();
                     51:        verify_maintenence_area();
                     52:        verify_users_data_area();
                     53: 
                     54:        (void) writelabel();
                     55: }
                     56: 
                     57: 
                     58: /*
                     59: **
                     60: */
                     61: 
                     62: format_relocation_area()
                     63: {
                     64:        register long           sector_count;
                     65:        dskadr                  dskaddr;
                     66: 
                     67:        cur.substate = sub_fmt;
                     68:        dskaddr.cylinder = (short)(lab->d_ncylinders - NUMSYS);
                     69:        dskaddr.track = (char)0;
                     70:        dskaddr.sector = (char)0;
                     71:        sector_count = (long)(NUMREL * lab->d_ntracks * lab->d_nsectors);
                     72:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                     73: }
                     74: 
                     75: 
                     76: /*
                     77: **
                     78: */
                     79: 
                     80: format_users_data_area()
                     81: {
                     82:        register long           sector_count;
                     83:        dskadr                  dskaddr;
                     84:        register int            cyl;
                     85: 
                     86:        cur.substate = sub_fmt;
                     87:        sector_count = (long)(lab->d_ntracks * lab->d_nsectors);
                     88:        dskaddr.track = (char)0;
                     89:        dskaddr.sector = (char)0;
                     90:        for(cyl=0; cyl < (lab->d_ncylinders - NUMSYS); cyl++) {
                     91:                dskaddr.cylinder = cyl;
                     92:                format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                     93:                if (kill_processes)
                     94:                        return;
                     95:        }
                     96: }
                     97: 
                     98: 
                     99: /*
                    100: **
                    101: */
                    102: 
                    103: format_maintenence_area()
                    104: {
                    105:        register long           sector_count;
                    106:        dskadr                  dskaddr;
                    107: 
                    108:        cur.substate = sub_fmt;
                    109:        dskaddr.cylinder = (short)(lab->d_ncylinders - NUMMNT - NUMMAP);
                    110:        dskaddr.track = (char)0;
                    111:        dskaddr.sector = (char)0;
                    112:        sector_count = (long)(NUMMNT * lab->d_ntracks * lab->d_nsectors);
                    113:        format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
                    114: }
                    115: 
                    116: 
                    117: /*
                    118: **
                    119: */
                    120: 
                    121: boolean is_formatted()
                    122: {
                    123:        extern boolean  align_buf();
                    124:        dskadr          dskaddr;
                    125: 
                    126:        dskaddr.cylinder = 0;
                    127:        dskaddr.track = 0;
                    128:        dskaddr.sector = 0;
                    129:        if(C_INFO->type == VDTYPE_SMDE) {
                    130:                access_dsk((char *)save, &dskaddr, VDOP_RDRAW, 1, 1);
                    131:                if(align_buf((unsigned long *)save, CDCSYNC) == false)
                    132:                        return true;
                    133:                return  false;
                    134:        }
                    135:        else if(access_dsk((char *)save, &dskaddr, VDOP_RD, 1, 1)&HEADER_ERROR)
                    136:                return false;
                    137:        return true;
                    138: }
                    139: 
                    140: 
                    141: /*
                    142: **     Vdformat_sectors is used to do the actual formatting of a block.
                    143: */
                    144: 
                    145: format_sectors(dskaddr, hdraddr, flags, count)
                    146: dskadr *dskaddr, *hdraddr;
                    147: short  flags;
                    148: long   count;
                    149: {
                    150:        cur.daddr.cylinder = dskaddr->cylinder & 0xfff;
                    151:        cur.daddr.track = dskaddr->track;
                    152:        dcb.opcode = VDOP_FSECT;                /* format sector command */
                    153:        dcb.intflg = DCBINT_NONE;
                    154:        dcb.nxtdcb = (struct dcb *)0;   /* end of chain */
                    155:        dcb.operrsta  = 0;
                    156:        dcb.devselect = (char)cur.drive;
                    157:        dcb.trailcnt = (char)(sizeof(struct trfmt) / sizeof(long));
                    158:        dcb.trail.fmtrail.addr = (char *)scratch; 
                    159:        dcb.trail.fmtrail.nsectors = count;
                    160:        dcb.trail.fmtrail.disk.cylinder = dskaddr->cylinder | flags;
                    161:        dcb.trail.fmtrail.disk.track = dskaddr->track;
                    162:        dcb.trail.fmtrail.disk.sector = dskaddr->sector;
                    163:        dcb.trail.fmtrail.hdr.cylinder = hdraddr->cylinder | flags;
                    164:        dcb.trail.fmtrail.hdr.track = hdraddr->track;
                    165:        dcb.trail.fmtrail.hdr.sector = hdraddr->sector;
                    166:        mdcb.mdcb_head = &dcb;
                    167:        mdcb.mdcb_status = 0;
                    168:        VDGO(C_INFO->addr, (u_long)&mdcb, C_INFO->type);
                    169:        poll((int)(((count+849)/850)+120));
                    170:        if(vdtimeout <= 0) {
                    171:                printf(" while formatting sectors.\n");
                    172:                _longjmp(abort_environ, 1);
                    173:        }
                    174:        if (dcb.operrsta & DCBS_HARD)
                    175:                vd_error("format");
                    176: }

unix.superglobalmegacorp.com

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