Coherent4.2.10/include/sys/fdisk.h

/* (-lgl
 *	Coherent 386 release 4.2
 *	Copyright (c) 1982, 1993 by Mark Williams Company.
 *	All rights reserved. May not be copied without permission.
 *	For copying permission and licensing info, write licensing@mwc.com
 -lgl) */

#ifndef	__SYS_FDISK_H__
#define	__SYS_FDISK_H__

/*
 * Fixed disk configuration.
 * The first sector (boot block) of each hard disk
 * should contain a fixed disk boot record (HDISK_S).
 */

#include <common/ccompat.h>

#define	NPARTN	4U			/* Partitions per drive	 */
#define	HDSIG	0xAA55			/* Signature word	 */
#define	SDEV	0x80			/* Special minor device	 */


/*
 * System indicators.
 * There is disagreement about some of these.
 * Is there an official list?
 */

#define	SYS_EMPTY	0	/* Empty			*/
#define	SYS_DOS_12	1	/* MS-DOS, 12-bit FAT		*/
#define	SYS_XENIX 	2	/* Xenix			*/
#define	SYS_DOS_16	4	/* MS-DOS, 16-bit FAT		*/
#define SYS_DOS_XP	5	/* MS-DOS, extended partition	*/
#define	SYS_DOS_LARGE	6	/* MS-DOS, large filesystem	*/
#define	SYS_COH		9	/* Coherent			*/
#define	SYS_SWAP	10	/* Coherent swap partition	*/


/*
 * Be careful when using the FDISK_S or HDISK_S structure:
 * the two high order bits of p_bsec and p_esec on the boot block
 * provide the two high order bits of p_bcyl and p_ecyl, respectively.
 */

#define SECMASK 0x3F	/* Mask for sector number bits of sector fields.     */
#define CYLMASK 0xC0	/* Mask for cylinder number bits of sector fields.   */
#define	bcyl(p)	((((p)->p_bsec & CYLMASK) << 2) | ((p)->p_bcyl))
#define	bhd(p)	((p)->p_bhd)
#define	bsec(p)	((p)->p_bsec & SECMASK)	
#define	ecyl(p)	((((p)->p_esec & CYLMASK) << 2) | ((p)->p_ecyl))
#define	ehd(p)	((p)->p_ehd)
#define	esec(p)	((p)->p_esec & SECMASK)

/* Per partition information. */

typedef	struct	fdisk_s {
	unsigned char	p_boot;		/* Boot indicator	*/
	unsigned char	p_bhd;		/* Beginning head	*/
	unsigned char	p_bsec;		/* Beginning sector	*/
	unsigned char	p_bcyl;		/* Beginning cylinder	*/
	unsigned char	p_sys;		/* System indicator	*/
	unsigned char	p_ehd;		/* Ending head		*/
	unsigned char	p_esec;		/* Ending sector	*/
	unsigned char	p_ecyl;		/* Ending cylinder	*/
	unsigned long	p_base;		/* Base block number	*/
	unsigned long	p_size;		/* Size in blocks	*/
} FDISK_S;

/* Hard disk master boot block. */
typedef	struct	hdisk_s {
	unsigned char	hd_boot [446];		/* Bootstrap		*/
#pragma align 2
	struct fdisk_s	hd_partn [NPARTN] __ALIGN (2); /* Partition info*/
#pragma align
	unsigned short	hd_sig;			/* Validating signature	*/
} HDISK_S;

#endif	/* ! defined (__SYS_FDISK_H__) */