Annotation of 43BSDReno/sys/tahoestand/vdformat/format.c.tmp, 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: #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.