diff options
| author | Christoph Hellwig <hch@lst.de> | 2020-03-24 08:25:29 +0100 | 
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2020-03-24 07:57:08 -0600 | 
| commit | 3f4fc59c1321b74df27dcd5d77b37989ed93265b (patch) | |
| tree | 3ffcc07c6384de6fb2798e3d0246e0e5bd81d8db /block | |
| parent | cb0ab52652123c47cb72e665ce9fdd3029dcb175 (diff) | |
| download | linux-3f4fc59c1321b74df27dcd5d77b37989ed93265b.tar.bz2 | |
block: move the various x86 Unix label formats out of genhd.h
All these are just used in block/partitions/msdos.c, so move them out of the
genhd.h driver included by every driver.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
| -rw-r--r-- | block/partitions/msdos.c | 125 | 
1 files changed, 125 insertions, 0 deletions
diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c index e44e2f0a02cc..8f2fcc080264 100644 --- a/block/partitions/msdos.c +++ b/block/partitions/msdos.c @@ -18,6 +18,12 @@   *  Check partition table on IDE disks for common CHS translations   *   *  Re-organised Feb 1998 Russell King + * + *  BSD disklabel support by Yossi Gottlieb <yogo@math.tau.ac.il> + *  updated by Marc Espie <Marc.Espie@openbsd.org> + * + *  Unixware slices support by Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl> + *  and Krzysztof G. Baranowski <kgb@knm.org.pl>   */  #include <linux/msdos_fs.h>  #include <linux/msdos_partition.h> @@ -215,6 +221,30 @@ done:  	put_dev_sector(sect);  } +#define SOLARIS_X86_NUMSLICE	16 +#define SOLARIS_X86_VTOC_SANE	(0x600DDEEEUL) + +struct solaris_x86_slice { +	__le16 s_tag;		/* ID tag of partition */ +	__le16 s_flag;		/* permission flags */ +	__le32 s_start;		/* start sector no of partition */ +	__le32 s_size;		/* # of blocks in partition */ +}; + +struct solaris_x86_vtoc { +	unsigned int v_bootinfo[3];	/* info needed by mboot */ +	__le32 v_sanity;		/* to verify vtoc sanity */ +	__le32 v_version;		/* layout version */ +	char	v_volume[8];		/* volume name */ +	__le16	v_sectorsz;		/* sector size in bytes */ +	__le16	v_nparts;		/* number of partitions */ +	unsigned int v_reserved[10];	/* free space */ +	struct solaris_x86_slice +		v_slice[SOLARIS_X86_NUMSLICE]; /* slice headers */ +	unsigned int timestamp[SOLARIS_X86_NUMSLICE]; /* timestamp */ +	char	v_asciilabel[128];	/* for compatibility */ +}; +  /* james@bpgc.com: Solaris has a nasty indicator: 0x82 which also     indicates linux swap.  Be careful before believing this is Solaris. */ @@ -270,6 +300,54 @@ static void parse_solaris_x86(struct parsed_partitions *state,  #endif  } +/* check against BSD src/sys/sys/disklabel.h for consistency */ +#define BSD_DISKMAGIC	(0x82564557UL)	/* The disk magic number */ +#define BSD_MAXPARTITIONS	16 +#define OPENBSD_MAXPARTITIONS	16 +#define BSD_FS_UNUSED		0 /* disklabel unused partition entry ID */ +struct bsd_disklabel { +	__le32	d_magic;		/* the magic number */ +	__s16	d_type;			/* drive type */ +	__s16	d_subtype;		/* controller/d_type specific */ +	char	d_typename[16];		/* type name, e.g. "eagle" */ +	char	d_packname[16];		/* pack identifier */ +	__u32	d_secsize;		/* # of bytes per sector */ +	__u32	d_nsectors;		/* # of data sectors per track */ +	__u32	d_ntracks;		/* # of tracks per cylinder */ +	__u32	d_ncylinders;		/* # of data cylinders per unit */ +	__u32	d_secpercyl;		/* # of data sectors per cylinder */ +	__u32	d_secperunit;		/* # of data sectors per unit */ +	__u16	d_sparespertrack;	/* # of spare sectors per track */ +	__u16	d_sparespercyl;		/* # of spare sectors per cylinder */ +	__u32	d_acylinders;		/* # of alt. cylinders per unit */ +	__u16	d_rpm;			/* rotational speed */ +	__u16	d_interleave;		/* hardware sector interleave */ +	__u16	d_trackskew;		/* sector 0 skew, per track */ +	__u16	d_cylskew;		/* sector 0 skew, per cylinder */ +	__u32	d_headswitch;		/* head switch time, usec */ +	__u32	d_trkseek;		/* track-to-track seek, usec */ +	__u32	d_flags;		/* generic flags */ +#define NDDATA 5 +	__u32	d_drivedata[NDDATA];	/* drive-type specific information */ +#define NSPARE 5 +	__u32	d_spare[NSPARE];	/* reserved for future use */ +	__le32	d_magic2;		/* the magic number (again) */ +	__le16	d_checksum;		/* xor of data incl. partitions */ + +			/* filesystem and partition information: */ +	__le16	d_npartitions;		/* number of partitions in following */ +	__le32	d_bbsize;		/* size of boot area at sn0, bytes */ +	__le32	d_sbsize;		/* max size of fs superblock, bytes */ +	struct	bsd_partition {		/* the partition table */ +		__le32	p_size;		/* number of sectors in partition */ +		__le32	p_offset;	/* starting sector */ +		__le32	p_fsize;	/* filesystem basic fragment size */ +		__u8	p_fstype;	/* filesystem type, see below */ +		__u8	p_frag;		/* filesystem fragments per block */ +		__le16	p_cpg;		/* filesystem cylinders per group */ +	} d_partitions[BSD_MAXPARTITIONS];	/* actually may be more */ +}; +  #if defined(CONFIG_BSD_DISKLABEL)  /*   * Create devices for BSD partitions listed in a disklabel, under a @@ -354,6 +432,51 @@ static void parse_openbsd(struct parsed_partitions *state,  #endif  } +#define UNIXWARE_DISKMAGIC     (0xCA5E600DUL)	/* The disk magic number */ +#define UNIXWARE_DISKMAGIC2    (0x600DDEEEUL)	/* The slice table magic nr */ +#define UNIXWARE_NUMSLICE      16 +#define UNIXWARE_FS_UNUSED     0		/* Unused slice entry ID */ + +struct unixware_slice { +	__le16   s_label;	/* label */ +	__le16   s_flags;	/* permission flags */ +	__le32   start_sect;	/* starting sector */ +	__le32   nr_sects;	/* number of sectors in slice */ +}; + +struct unixware_disklabel { +	__le32	d_type;			/* drive type */ +	__le32	d_magic;		/* the magic number */ +	__le32	d_version;		/* version number */ +	char	d_serial[12];		/* serial number of the device */ +	__le32	d_ncylinders;		/* # of data cylinders per device */ +	__le32	d_ntracks;		/* # of tracks per cylinder */ +	__le32	d_nsectors;		/* # of data sectors per track */ +	__le32	d_secsize;		/* # of bytes per sector */ +	__le32	d_part_start;		/* # of first sector of this partition*/ +	__le32	d_unknown1[12];		/* ? */ +	__le32	d_alt_tbl;		/* byte offset of alternate table */ +	__le32	d_alt_len;		/* byte length of alternate table */ +	__le32	d_phys_cyl;		/* # of physical cylinders per device */ +	__le32	d_phys_trk;		/* # of physical tracks per cylinder */ +	__le32	d_phys_sec;		/* # of physical sectors per track */ +	__le32	d_phys_bytes;		/* # of physical bytes per sector */ +	__le32	d_unknown2;		/* ? */ +	__le32	d_unknown3;		/* ? */ +	__le32	d_pad[8];		/* pad */ + +	struct unixware_vtoc { +		__le32	v_magic;		/* the magic number */ +		__le32	v_version;		/* version number */ +		char	v_name[8];		/* volume name */ +		__le16	v_nslices;		/* # of slices */ +		__le16	v_unknown1;		/* ? */ +		__le32	v_reserved[10];		/* reserved */ +		struct unixware_slice +			v_slice[UNIXWARE_NUMSLICE];	/* slice headers */ +	} vtoc; +};  /* 408 */ +  /*   * Create devices for Unixware partitions listed in a disklabel, under a   * dos-like partition. See parse_extended() for more information. @@ -397,6 +520,8 @@ static void parse_unixware(struct parsed_partitions *state,  #endif  } +#define MINIX_NR_SUBPARTITIONS  4 +  /*   * Minix 2.0.0/2.0.2 subpartition support.   * Anand Krishnamurthy <anandk@wiproge.med.ge.com>  |