Annotation of 43BSDTahoe/sys/tahoestand/vdformat/format.c, revision 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.