1 /* @(#)fmt.h 1.34 18/02/19 Copyright 1991-2018 J. Schilling */ 2 /* 3 * Definitions for the format utility 4 * 5 * Copyright (c) 1991-2018 J. Schilling 6 */ 7 /* 8 * The contents of this file are subject to the terms of the 9 * Common Development and Distribution License, Version 1.0 only 10 * (the "License"). You may not use this file except in compliance 11 * with the License. 12 * 13 * See the file CDDL.Schily.txt in this distribution for details. 14 * A copy of the CDDL is also available via the Internet at 15 * http://www.opensource.org/licenses/cddl1.txt 16 * 17 * When distributing Covered Code, include this CDDL HEADER in each 18 * file and include the License file CDDL.Schily.txt from this distribution. 19 */ 20 21 #include <schily/ccomdefs.h> 22 23 #include <scg/scsitransp.h> /* XXX fuer SCSI * */ 24 25 struct disk { 26 /* 27 * Diese Werte werden aus dem Label uebernommen 28 */ 29 long lhead; /* # der K�pfe im Label */ 30 long lacyl; /* # der alternativen Zylinder im Label */ 31 long lpcyl; /* # der Zylinder im Label (total) */ 32 long lncyl; /* # der Daten Zylinder im Label */ 33 long lspt; /* # der Sektoren/Spur im Label */ 34 long lapc; /* # der alternativen Sektoren/Zyl im Label */ 35 36 /* 37 * Werte, die mit Hilfe von Parametern/Dateioptionen 38 * geaendert werden koennen. 39 */ 40 long nhead; /* # der K�pfe */ 41 long pcyl; /* # der Zylinder (total) */ 42 long atrk; /* # der alternativen Spuren/Volume */ 43 long tpz; /* # der Spuren/Zone */ 44 long spt; /* # der Sektoren/Spur (total) */ 45 long mintpz; /* Minimal zul�ssige # der Spuren/Zone */ 46 long maxtpz; /* Maximal zul�ssige # der Spuren/Zone */ 47 long aspz; /* # der Alternativen Sektoren/Zone */ 48 long secsize; /* Gr��e eines Sektors in Bytes */ 49 long phys_secsize; /* Gr��e eines phys. Sektors in Bytes */ 50 long capacity; /* Kapazit�t aus sformat.dat */ 51 long min_capacity; /* Minimale Kapazit�t aus sformat.dat */ 52 long rpm; /* Umdrehungen pro Minute */ 53 long track_skew; /* Spiraloffset bei Kopfumschaltung */ 54 long cyl_skew; /* Spiraloffset bei Zylinderumschaltung */ 55 long reduced_curr; /* Zylinder# f. Red. Schreibstrom (acb-4000)*/ 56 long write_precomp; /* Zylinder# f. Schreibkompens. (acb-4000)*/ 57 long step_rate; /* Step Rate f. Buffered Seek (acb-4000)*/ 58 long rot_pos_locking; /* Typ f. Spindelsync */ 59 long rotational_off; /* Spindelsync phase (x/256) */ 60 long interleave; /* Interleaving Faktor */ 61 long fmt_pattern; /* Format Pattern */ 62 long fmt_mode; /* Format mode (Sony SMO-C501) */ 63 long spare_band_size; /* Spare Band Size (Sony SMO-C501) */ 64 65 long def_lst_format; /* Defect List Format */ 66 long split_wv_cmd; /* split write-verify cmd = TRUE else FALSE */ 67 68 /* Hier bedeutet -1 == nicht supported */ 69 long rd_retry_count; /* Read retry count */ 70 long wr_retry_count; /* Write retry count */ 71 long recov_timelim; /* Recovery time limit in msec Einheiten */ 72 73 /* Hier bedeutet -1 == nicht supported */ 74 long buf_full_ratio; /* Buffer full ratio */ 75 long buf_empt_ratio; /* Buffer empty ratio */ 76 long bus_inact_limit; /* Bus inactivity limit 100 usec Einheiten */ 77 long disc_time_limit; /* Disconnect time limit 100 usec Einheiten */ 78 long conn_time_limit; /* Connect time limit 100 usec Einheiten */ 79 long max_burst_size; /* Maximale Burst Gr��e 512 Bytes Einheiten */ 80 long data_tr_dis_ctl; /* Data transfer disconnect control */ 81 82 /* Hier bedeutet -1 == nicht supported */ 83 long queue_alg_mod; /* Queuing alg modifier */ 84 long dis_queuing; /* Queuing enable */ 85 86 /* 87 * Modifizierbare Variablen mit interner Bedeutung 88 */ 89 long gap1; /* Wird nicht ben�tigt */ 90 long gap2; /* Wird nicht ben�tigt */ 91 long int_cyl; /* Intern vom Kontroller verwaltete Zylinder*/ 92 long fmt_time; /* Foratierzeit in Sekunden (1 Durchlauf) */ 93 long fmt_timeout; /* Foratier timeout in Sekunden f�r Treiber */ 94 long veri_time; /* Verifizierzeit in Sekunden (1 Durchlauf) */ 95 long veri_count; /* Sectorcount pro VERIFY Kommando */ 96 long wr_veri_count; /* Sectorcount pro WRITE_VERIFY Kommando */ 97 long veri_loops; /* Anzahl der Verify Durchg�nge */ 98 99 long dummy; /* F�r ignorierte Variablen in sformat.dat */ 100 101 /* 102 * Hier folgen interne Statusvariablen 103 */ 104 long flags; /* Diverse Statusflags */ 105 long formatted; /* Platte ist formatiert und hat Label */ 106 /* < 0 unformatiert */ 107 /* = 0 formatiert */ 108 /* > 0 formatiert mit Label */ 109 long labelread; /* Label wurde gelesen und Daten �bernommen */ 110 /* < 0 kein Label */ 111 /* = 0 Label aus Datenbank */ 112 /* > 0 Label von Platte gelesen */ 113 long cur_capacity; /* Aktuelle Kapazitaet fuer Test vor/nach fmt*/ 114 long default_data; /* Dieser Datensatz ist Default */ 115 long bridge_controller; /* Dieser Datensatz ist fuer einen */ 116 /* Bridge Kontroller z.B. SCSI/EDSI */ 117 char *disk_type; /* Name der Platte in der Parameter Datei */ 118 char *alt_disk_type; /* Alternativer Name in der Parameter Datei */ 119 char *default_part; /* Name der default Patition f�r die Platte */ 120 char *mode_pages; /* Name des Modepage Eintrages in der Datei */ 121 struct node *parts; /* Liste der m�glichen Label f�r die Platte */ 122 }; 123 124 struct node { 125 struct node *n_next; 126 char *n_data; 127 }; 128 129 #define D_INQ_FOUND 0x0001 /* SCSI Inquiry (Vendor & Product) found */ 130 #define D_FIRMW_FOUND 0x0002 /* SCSI Inquiry (Firmware) found */ 131 #define D_FTIME_FOUND 0x0004 /* Disk format time found */ 132 #define D_VTIME_FOUND 0x0008 /* Disk verify time found */ 133 #define D_DISK_FOUND 0x0010 /* Inquiry & Physical layout matches */ 134 #define D_DISK_CURRENT 0x0100 /* This is a "CURRENT" disk */ 135 #define D_DISK_LPCYL 0x0200 /* A cheated version of lpcyl has been set up */ 136 #define D_DB_BAD 0x1000 /* Data base entry found past signature */ 137 138 #define D_OK_MASK (D_INQ_FOUND|D_FIRMW_FOUND|D_DISK_FOUND|D_DISK_CURRENT) 139 #define D_FOUND_MASK (D_DISK_FOUND|D_DISK_CURRENT) 140 141 #define MIN_SECSIZE 256 142 #define MAX_SECSIZE 8192 143 144 #define NVERI 5 145 extern int n_test_patterns; 146 #define NWVERI n_test_patterns 147 #define CVERI 1000 148 #define CWVERI 1000 149 150 #ifdef SVR4 151 #define PARTOFF '0' 152 #else 153 #define PARTOFF 'a' 154 #endif 155 #define PART(dev) (minor(dev) & 0x07) 156 157 struct strval { 158 int s_val; 159 char *s_name; 160 char *s_text; 161 }; 162 163 /*--------------------------------------------------------------------------*/ 164 #ifndef NO_PROT 165 /* 166 * Prototypes: 167 */ 168 169 /* 170 * acb4000.c: 171 */ 172 extern int acbdev __PR((SCSI *scgp)); 173 extern BOOL get_acb4000defaults __PR((SCSI *scgp, struct disk *)); 174 extern BOOL set_acb4000params __PR((SCSI *scgp, struct disk *)); 175 176 /* 177 * autopart.c: 178 */ 179 #ifdef NDKMAP 180 extern BOOL get_part_defaults __PR((SCSI *scgp, struct disk *, struct dk_label *)); 181 #endif 182 183 /* 184 * badblock.c: 185 */ 186 extern void clear_bad __PR((void)); 187 extern int get_nbad __PR((void)); 188 extern void insert_bad __PR((long baddr)); 189 extern int print_bad __PR((void)); 190 extern int bad_to_def __PR((SCSI *scgp)); 191 extern void reassign_bad __PR((SCSI *scgp)); 192 extern void repair_found_blocks __PR((SCSI *scgp, int nbad)); 193 extern void reassign_one __PR((SCSI *scgp)); 194 extern int reassign_one_block __PR((SCSI *scgp, long n)); 195 #ifdef _SCG_SCSIREG_H 196 extern void print_defect_list __PR((struct scsi_def_list *l)); 197 extern void print_def_bfi __PR((struct scsi_def_list *l)); 198 #endif 199 200 /* 201 * bcrypt.c: 202 */ 203 extern char *getnenv __PR((const char *, int)); 204 extern unsigned long my_gethostid __PR((void)); 205 extern BOOL bsecurity __PR((int)); 206 extern unsigned long bcrypt __PR((unsigned long)); 207 extern char *bmap __PR((unsigned long)); 208 extern unsigned long bunmap __PR((const char *)); 209 210 /* 211 * check_part.c: 212 */ 213 #ifdef NDKMAP 214 extern void checklabel __PR((struct disk *, struct dk_label *, int)); 215 #endif 216 217 /* 218 * checkmount.c: 219 */ 220 extern BOOL checkmount __PR((int, int, int, long, long)); 221 222 /* 223 * datio.c: 224 */ 225 extern BOOL opendatfile __PR((char *)); 226 extern char *datfilename __PR((void)); 227 extern BOOL past_df_sig __PR((void)); 228 extern BOOL closedatfile __PR((void)); 229 extern int rewinddatfile __PR((void)); 230 extern BOOL datfile_chksum __PR((void)); 231 extern char *nextline __PR((void)); 232 extern BOOL firstitem __PR((void)); 233 extern int getlineno __PR((void)); 234 extern char *curword __PR((void)); 235 extern char *peekword __PR((void)); 236 extern char *nextword __PR((void)); 237 extern char *nextitem __PR((void)); 238 extern char *scanforline __PR((char *, char *)); 239 extern BOOL scanfortable __PR((char *, char *)); 240 extern BOOL checkequal __PR((void)); 241 extern BOOL checkcomma __PR((void)); 242 extern BOOL garbage __PR((char *)); 243 extern BOOL isval __PR((char *)); 244 extern void skip_illvar __PR((char *, char *)); 245 extern BOOL set_stringvar __PR((char *, char *, int)); 246 extern int datfileerr __PR((char *, ...)) __printflike__(1, 2); 247 248 /* 249 * defect.c: 250 */ 251 extern void convert_def_blk __PR((SCSI *scgp)); 252 extern void write_def_blk __PR((SCSI *scgp, BOOL)); 253 extern void read_def_blk __PR((SCSI *scgp)); 254 extern BOOL edit_def_blk __PR((void)); 255 #ifdef DMAGIC 256 extern void add_def_bfi __PR((struct scsi_def_bfi *)); 257 #endif 258 259 /* 260 * diskfmt.c: 261 */ 262 extern int printgeom __PR((SCSI *scgp, int current)); 263 extern void testformat __PR((SCSI *scgp, struct disk *dp)); 264 extern int Adaptec4000 __PR((SCSI *scgp)); 265 extern int Emulex_MD21 __PR((SCSI *scgp)); 266 extern void get_defaults __PR((SCSI *scgp, struct disk *dp)); 267 extern void get_lgeom_defaults __PR((SCSI *scgp, struct disk *dp)); 268 extern int reformat_disk __PR((SCSI *scgp, struct disk *dp)); 269 extern int acb_format_disk __PR((SCSI *scgp, struct disk *dp, int clear_gdl)); 270 271 /* 272 * diskparam.c: 273 */ 274 extern void select_parameters __PR((SCSI *scgp, struct disk *dp)); 275 276 /* 277 * fmt.c 278 */ 279 extern int main __PR((int ac, char **av)); 280 extern void getdev __PR((SCSI *scgp, BOOL print)); 281 extern void estimate_times __PR((struct disk *dp)); 282 extern void print_fmt_time __PR((struct disk *dp)); 283 extern void print_fmt_timeout __PR((struct disk *dp)); 284 extern char *datestr __PR((void)); 285 extern void prdate __PR((void)); 286 extern void getstarttime __PR((void)); 287 extern void getstoptime __PR((void)); 288 #ifdef timerclear 289 extern long gettimediff __PR((struct timeval *tp)); 290 #endif 291 extern long prstats __PR((void)); 292 extern void helpexit __PR((void)); 293 extern void disk_null __PR((struct disk *dp, int init)); 294 295 /* 296 * io.c: 297 */ 298 extern char *skipwhite __PR((const char *)); 299 extern BOOL cvt_std __PR((char *, long *, long, long, 300 struct disk *)); 301 extern BOOL getvalue __PR((char *, long *, long, long, 302 void (*)(char *, long, long, long, struct disk *), 303 BOOL (*)(char *, long *, long, long, struct disk *), 304 struct disk *)); 305 extern BOOL getlong __PR((char *, long *, long, long)); 306 extern BOOL getint __PR((char *, int *, int, int)); 307 extern BOOL getdiskcyls __PR((char *, long *, long, long)); 308 extern BOOL getdiskblocks __PR((char *, long *, long, long, 309 struct disk *)); 310 extern BOOL yes __PR((char *, ...)) __printflike__(1, 2); 311 extern void prbytes __PR((char *, unsigned char *, int)); 312 extern char *permstring __PR((const char *)); 313 extern struct strval *strval __PR((int, struct strval *)); 314 extern struct strval *namestrval __PR((const char *, struct strval *)); 315 extern BOOL getstrval __PR((const char *, long *, 316 struct strval *, long)); 317 /* 318 * labelsubs.h 319 */ 320 extern void read_primary_label __PR((SCSI *scgp, struct disk *dp)); 321 extern void create_label __PR((SCSI *scgp, struct disk *dp)); 322 extern void label_disk __PR((SCSI *scgp, struct disk *dp)); 323 #ifdef NDKMAP 324 extern int read_disk_label __PR((SCSI *scgp, struct dk_label *lp, long secno)); 325 #endif 326 extern long get_default_lncyl __PR((SCSI *scgp, struct disk *dp)); 327 extern void select_label_geom __PR((SCSI *scgp, struct disk *dp)); 328 extern BOOL select_backup_label __PR((SCSI *scgp, struct disk *dp, BOOL lgeom_ok)); 329 extern void select_partition __PR((SCSI *scgp, struct disk *dp)); 330 extern void get_default_partition __PR((SCSI *scgp, struct disk *dp)); 331 332 /* 333 * makelabel.c: 334 */ 335 #ifdef NDKMAP 336 extern void set_default_vtmap __PR((struct dk_label *)); 337 extern unsigned short do_cksum __PR((struct dk_label *)); 338 extern BOOL check_vtmap __PR((struct dk_label *, BOOL)); 339 extern void setlabel_from_val __PR((SCSI *scgp, struct disk *, 340 struct dk_label *)); 341 extern void makelabel __PR((SCSI *scgp, struct disk *, 342 struct dk_label *)); 343 #ifdef NDKMAP 344 #ifdef EOF 345 extern void prpartab __PR((FILE *f, char *disk_type, struct dk_label *lp)); 346 #endif 347 #endif 348 extern void printlabel __PR((struct dk_label *)); 349 extern void printpart __PR((struct dk_label *, int)); 350 extern void printparts __PR((struct dk_label *)); 351 extern int readlabel __PR((char *, struct dk_label *)); 352 extern void writelabel __PR((char *, struct dk_label *)); 353 extern int setlabel __PR((char *, struct dk_label *)); 354 extern char *getasciilabel __PR((struct dk_label *)); 355 extern void setasciilabel __PR((struct dk_label *, char *)); 356 extern BOOL setval_from_label __PR((struct disk *, 357 struct dk_label *)); 358 extern void label_null __PR((struct dk_label *)); 359 extern int label_cmp __PR((struct dk_label *, 360 struct dk_label *)); 361 extern BOOL labelgeom_ok __PR((struct dk_label *, BOOL)); 362 #endif 363 extern BOOL cvt_cyls __PR((char *, long *, long, long, 364 struct disk *)); 365 extern BOOL cvt_bcyls __PR((char *, long *, long, long, 366 struct disk *)); 367 368 /* 369 * maptodisk.c: 370 */ 371 extern int maptodisk __PR((int, int, int)); 372 /*extern scgdrv *scg_getdrv __PR((int));*/ 373 extern char *diskname __PR((int)); 374 extern char *diskdevname __PR((int)); 375 extern int print_disknames __PR((int, int, int)); 376 377 /* 378 * modes.c: 379 */ 380 extern BOOL get_mode_params __PR((SCSI *scgp, int, char *, 381 unsigned char *, unsigned char *, 382 unsigned char *, unsigned char *, 383 int *)); 384 extern BOOL set_mode_params __PR((SCSI *scgp, char *, unsigned char *, int, int, 385 struct disk *)); 386 extern BOOL set_error_rec_params __PR((SCSI *scgp, struct disk *)); 387 extern BOOL set_disre_params __PR((SCSI *scgp, struct disk *)); 388 extern BOOL set_format_params __PR((SCSI *scgp, struct disk *)); 389 extern BOOL set_geom __PR((SCSI *scgp, struct disk *)); 390 extern BOOL set_common_control __PR((SCSI *scgp, struct disk *)); 391 extern void get_mode_defaults __PR((SCSI *scgp, struct disk *)); 392 extern BOOL get_error_rec_defaults __PR((SCSI *scgp, struct disk *)); 393 extern BOOL get_disre_defaults __PR((SCSI *scgp, struct disk *)); 394 extern BOOL get_sony_format_defaults __PR((SCSI *scgp, struct disk *)); 395 extern BOOL set_sony_params __PR((SCSI *scgp, struct disk *)); 396 397 /* 398 * modeselect.c: 399 */ 400 extern void do_modes __PR((SCSI *scgp)); 401 402 /* 403 * rand_rw.c: 404 */ 405 extern int random_rw_test __PR((SCSI *scgp, long first, long last)); 406 extern int random_v_test __PR((SCSI *scgp, long first, long last)); 407 408 /* 409 * repair.c: 410 */ 411 extern int verify_and_repair_disk __PR((SCSI *scgp, struct disk *dp)); 412 extern void verify_disk __PR((SCSI *scgp, struct disk *dp, int pass, long first, long last, long maxbad)); 413 extern void ext_reassign_block __PR((SCSI *scgp, long n)); 414 415 /* 416 * sinfo.c: 417 */ 418 #ifdef EOF 419 extern void print_sinfo __PR((FILE *, SCSI *scgp)); 420 #endif 421 extern BOOL read_sinfo __PR((SCSI *scgp, struct disk *, BOOL)); 422 extern BOOL write_sinfo __PR((SCSI *scgp, struct disk *)); 423 424 /* 425 * xdelay.c: 426 */ 427 extern void xdelay __PR((void)); 428 429 /* 430 * xdisk.c: 431 */ 432 extern BOOL pdisk_eql __PR((struct disk *, struct disk *)); 433 extern BOOL get_ext_diskdata __PR((SCSI *scgp, char *, struct disk *)); 434 extern int cmp_disk __PR((struct disk *, struct disk *)); 435 extern BOOL has_error_rec_params __PR((struct disk *)); 436 extern BOOL has_disre_params __PR((struct disk *)); 437 #ifdef INQ_DEV_PRESENT 438 extern void prdisk __PR((FILE *, struct disk *, struct scsi_inquiry *)); 439 #endif 440 extern int need_params __PR((struct disk *dp, int type)); 441 extern int need_label_params __PR((struct disk *dp)); 442 extern int need_geom_params __PR((struct disk *dp)); 443 extern int need_scsi_params __PR((struct disk *dp)); 444 extern int need_error_rec_params __PR((struct disk *dp)); 445 extern int need_disre_params __PR((struct disk *dp)); 446 447 /* 448 * xmodes.c: 449 */ 450 extern void ext_modeselect __PR((SCSI *scgp, struct disk *)); 451 452 /* 453 * xpart.c: 454 */ 455 #ifdef NDKMAP 456 extern BOOL ext_part __PR((SCSI *scgp, char *, char *, char *, struct dk_label *, 457 BOOL (*)(SCSI *, struct disk *, struct dk_label *), 458 struct disk *)); 459 #endif 460 461 #endif /* NO_PROT */ 462