1 /*
2  * Copyright (c) 1992 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This software was developed by the Computer Systems Engineering group
6  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
7  * contributed to Berkeley.
8  *
9  * All advertising materials mentioning features or use of this software
10  * must display the following acknowledgement:
11  *	This product includes software developed by the University of
12  *	California, Lawrence Berkeley Laboratories.
13  *
14  * %sccs.include.redist.c%
15  *
16  *	@(#)sun_disklabel.h	7.2 (Berkeley) 07/21/92
17  *
18  * from: $Header: sun_disklabel.h,v 1.4 92/06/17 07:04:13 torek Exp $
19  */
20 
21 /*
22  * SunOS disk label layout (only relevant portions discovered here).
23  */
24 
25 #define	SUN_DKMAGIC	55998
26 
27 /* These are the guys that Sun's dkinfo needs... */
28 #define DKIOCGGEOM	_IOR('d', 2, struct sun_dkgeom)	/* geometry info */
29 #define DKIOCINFO	_IOR('d', 8, struct sun_dkctlr)	/* controller info */
30 #define DKIOCGPART	_IOR('d', 4, struct sun_dkpart)	/* partition info */
31 
32 /* geometry info */
33 struct sun_dkgeom {
34 	u_short	sdkc_ncylinders;	/* data cylinders */
35 	u_short	sdkc_acylinders;	/* alternate cylinders */
36 	u_short	sdkc_xxx1;
37 	u_short	sdkc_ntracks;		/* tracks per cylinder */
38 	u_short	sdkc_xxx2;
39 	u_short	sdkc_nsectors;		/* sectors per track */
40 	u_short	sdkc_interleave;	/* interleave factor */
41 	u_short	sdkc_xxx3;
42 	u_short	sdkc_xxx4;
43 	u_short	sdkc_sparespercyl;	/* spare sectors per cylinder */
44 	u_short	sdkc_rpm;		/* rotational speed */
45 	u_short	sdkc_pcylinders;	/* physical cylinders */
46 	u_short	sdkc_xxx5[7];
47 };
48 
49 /* controller info */
50 struct sun_dkctlr {
51 	int	sdkc_addr;		/* controller address */
52 	short	sdkc_unit;		/* unit (slave) address */
53 	short	sdkc_type;		/* controller type */
54 	short	sdkc_flags;		/* flags */
55 };
56 
57 /* partition info */
58 struct sun_dkpart {
59 	long	sdkp_cyloffset;		/* starting cylinder */
60 	long	sdkp_nsectors;		/* number of sectors */
61 };
62 
63 struct sun_disklabel {			/* total size = 512 bytes */
64 	char	sl_text[128];
65 	char	sl_xxx1[292];
66 	u_short sl_rpm;			/* rotational speed */
67 	char	sl_xxx2[2];
68 	u_short sl_sparespercyl;	/* spare sectors per cylinder */
69 	char	sl_xxx3[4];
70 	u_short sl_interleave;		/* interleave factor */
71 	u_short	sl_ncylinders;		/* data cylinders */
72 	u_short	sl_acylinders;		/* alternate cylinders */
73 	u_short	sl_ntracks;		/* tracks per cylinder */
74 	u_short	sl_nsectors;		/* sectors per track */
75 	char	sl_xxx4[4];
76 	struct sun_dkpart sl_part[8];	/* partition layout */
77 	u_short	sl_magic;		/* == SUN_DKMAGIC */
78 	u_short	sl_cksum;		/* xor checksum of all shorts */
79 };
80 
81 #ifdef KERNEL
82 /* reads sun label in sector at [cp..cp+511] and sets *lp to BSD label */
83 int	sun_disklabel __P((caddr_t, struct disklabel *)); /* true on success */
84 
85 /* compatability dk ioctl's */
86 int	sun_dkioctl __P((struct dkdevice *, int, caddr_t, int));
87 #endif
88