|
|
1.1 root 1: #include "vdfmt.h"
2:
3: /*
4: **
5: */
6:
7: format()
8: {
9: boolean read_bad_sector_map();
10: cur.state = fmt;
11: print("Starting format on ");
12: printf("controller %d, drive %d, ", cur.controller, cur.drive);
13: printf("type %s.\n",CURRENT->type_name);
14:
15: /* Read the flaw map from the disk (where ever it may be) */
16: if(read_bad_sector_map() == true) {
17: if(bad_map->bs_id != D_INFO.id) {
18: print("Module serial numbers do not match!\n");
19: print("Use `info' to find the real serial number.\n");
20: _longjmp(abort_environ, 1);
21: }
22: }
23: else
24: bad_map->bs_id = D_INFO.id;
25:
26: /* Re-Initialize bad sector map relocation pointers */
27: zero_bad_sector_map();
28: write_bad_sector_map();
29: if(kill_processes == true)
30: _longjmp(quit_environ, 1);
31:
32: /* format the disk surface */
33: format_relocation_area();
34: format_maintainence_area();
35: format_users_data_area();
36: if(kill_processes == true)
37: _longjmp(quit_environ, 1);
38:
39:
40: /* verify the surface */
41: verify_relocation_area();
42: verify_maintainence_area();
43: verify_users_data_area();
44: }
45:
46:
47: /*
48: **
49: */
50:
51: format_relocation_area()
52: {
53: register long sector_count;
54: dskadr dskaddr;
55:
56: cur.substate = sub_fmt;
57: dskaddr.cylinder = (short)(CURRENT->ncyl - NUMSYS);
58: dskaddr.track = (char)0;
59: dskaddr.sector = (char)0;
60: sector_count = (long)(NUMREL * CURRENT->ntrak * CURRENT->nsec);
61: format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
62: }
63:
64:
65: /*
66: **
67: */
68:
69: format_users_data_area()
70: {
71: register long sector_count;
72: dskadr dskaddr;
73: register int cyl;
74:
75: cur.substate = sub_fmt;
76: sector_count = (long)(CURRENT->ntrak * CURRENT->nsec);
77: dskaddr.track = (char)0;
78: dskaddr.sector = (char)0;
79: for(cyl=0; cyl < (CURRENT->ncyl - NUMSYS); cyl++) {
80: dskaddr.cylinder = cyl;
81: format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
82: }
83: }
84:
85:
86: /*
87: **
88: */
89:
90: format_maintainence_area()
91: {
92: register long sector_count;
93: dskadr dskaddr;
94:
95: cur.substate = sub_fmt;
96: dskaddr.cylinder = (short)(CURRENT->ncyl - NUMMNT - NUMMAP);
97: dskaddr.track = (char)0;
98: dskaddr.sector = (char)0;
99: sector_count = (long)(NUMMNT * CURRENT->ntrak * CURRENT->nsec);
100: format_sectors(&dskaddr, &dskaddr, NRM, sector_count);
101: }
102:
103:
104: /*
105: **
106: */
107:
108: boolean is_formatted()
109: {
110: extern boolean align_buf();
111: dskadr dskaddr;
112:
113: dskaddr.cylinder = 0;
114: dskaddr.track = 0;
115: dskaddr.sector = 0;
116: if(C_INFO.type == SMD_ECTLR) {
117: access_dsk((char *)save, &dskaddr, RD_RAW, 1, 1);
118: if(align_buf((unsigned long *)save, CDCSYNC) == false)
119: return true;
120: return false;
121: }
122: else if(access_dsk((char *)save, &dskaddr, RD, 1, 1) & HEADER_ERROR)
123: return false;
124: return true;
125: }
126:
127:
128: /*
129: ** Vdformat_sectors is used to do the actual formatting of a block.
130: */
131:
132: format_sectors(dskaddr, hdraddr, flags, count)
133: dskadr *dskaddr, *hdraddr;
134: short flags;
135: long count;
136: {
137: cur.daddr.cylinder = dskaddr->cylinder & 0xfff;
138: cur.daddr.track = dskaddr->track;
139: dcb.opcode = FSECT; /* format sector command */
140: dcb.intflg = NOINT;
141: dcb.nxtdcb = (fmt_dcb *)0; /* end of chain */
142: dcb.operrsta = 0;
143: dcb.devselect = (char)cur.drive;
144: dcb.trailcnt = (char)(sizeof(trfmt) / sizeof(long));
145: dcb.trail.fmtrail.addr = (char *)scratch;
146: dcb.trail.fmtrail.nsectors = count;
147: dcb.trail.fmtrail.disk.cylinder = dskaddr->cylinder | flags;
148: dcb.trail.fmtrail.disk.track = dskaddr->track;
149: dcb.trail.fmtrail.disk.sector = dskaddr->sector;
150: dcb.trail.fmtrail.hdr.cylinder = hdraddr->cylinder | flags;
151: dcb.trail.fmtrail.hdr.track = hdraddr->track;
152: dcb.trail.fmtrail.hdr.sector = hdraddr->sector;
153: mdcb.firstdcb = &dcb;
154: mdcb.vddcstat = 0;
155: VDDC_ATTENTION(C_INFO.addr, &mdcb, C_INFO.type);
156: poll((int)(((count+849)/850)+120));
157: if(vdtimeout <= 0) {
158: printf(" while formatting sectors.\n");
159: _longjmp(abort_environ, 1);
160: }
161: }
162:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.