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