Logo Search packages:      
Sourcecode: xbox-cromwell version File versions  Download package

pc_slice.h

/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 1999,2000,2001,2003   Free Software Foundation, Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef _PC_SLICE_H
#define _PC_SLICE_H

/*
 *  These define the basic PC MBR sector characteristics
 */

#define PC_MBR_SECTOR  0

#define PC_MBR_SIG_OFFSET  510
#define PC_MBR_SIGNATURE   0xaa55

#define PC_SLICE_OFFSET 446
#define PC_SLICE_MAX    4


/*
 *  Defines to guarantee structural alignment.
 */

#define PC_MBR_CHECK_SIG(mbr_ptr) \
  ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \
   == PC_MBR_SIGNATURE )

#define PC_MBR_SIG(mbr_ptr) \
  ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) )

#define PC_SLICE_FLAG(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET \
                    + (part << 4)) ) )

#define PC_SLICE_HEAD(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 1 \
                    + (part << 4)) ) )

#define PC_SLICE_SEC(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 2 \
                    + (part << 4)) ) )

#define PC_SLICE_CYL(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 3 \
                    + (part << 4)) ) )

#define PC_SLICE_TYPE(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 4 \
                    + (part << 4)) ) )

#define PC_SLICE_EHEAD(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 5 \
                    + (part << 4)) ) )

#define PC_SLICE_ESEC(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 6 \
                    + (part << 4)) ) )

#define PC_SLICE_ECYL(mbr_ptr, part) \
  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 7 \
                    + (part << 4)) ) )

#define PC_SLICE_START(mbr_ptr, part) \
  ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 8 \
                    + (part << 4)) ) )

#define PC_SLICE_LENGTH(mbr_ptr, part) \
  ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 12 \
                    + (part << 4)) ) )


/*
 *  PC flag types are defined here.
 */

#define PC_SLICE_FLAG_NONE      0
#define PC_SLICE_FLAG_BOOTABLE  0x80

/*
 *  Known PC partition types are defined here.
 */

/* This is not a flag actually, but used as if it were a flag.  */
#define PC_SLICE_TYPE_HIDDEN_FLAG   0x10

#define PC_SLICE_TYPE_NONE          0
#define PC_SLICE_TYPE_FAT12         1
#define PC_SLICE_TYPE_FAT16_LT32M   4
#define PC_SLICE_TYPE_EXTENDED      5
#define PC_SLICE_TYPE_FAT16_GT32M   6
#define PC_SLICE_TYPE_FAT32         0xb
#define PC_SLICE_TYPE_FAT32_LBA           0xc
#define PC_SLICE_TYPE_FAT16_LBA           0xe
#define PC_SLICE_TYPE_WIN95_EXTENDED      0xf
#define PC_SLICE_TYPE_EZD           0x55
#define PC_SLICE_TYPE_MINIX         0x80
#define PC_SLICE_TYPE_LINUX_MINIX   0x81
#define PC_SLICE_TYPE_EXT2FS        0x83
#define PC_SLICE_TYPE_LINUX_EXTENDED      0x85
#define PC_SLICE_TYPE_VSTAFS        0x9e
#define PC_SLICE_TYPE_DELL_UTIL           0xde
#define PC_SLICE_TYPE_LINUX_RAID    0xfd


/* For convinience.  */
/* Check if TYPE is a FAT partition type. Clear the hidden flag before
   the check, to allow the user to mount a hidden partition in GRUB.  */
#define IS_PC_SLICE_TYPE_FAT(type)  \
  ({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \
     _type == PC_SLICE_TYPE_FAT12 \
     || _type == PC_SLICE_TYPE_FAT16_LT32M \
     || _type == PC_SLICE_TYPE_FAT16_GT32M \
     || _type == PC_SLICE_TYPE_FAT16_LBA \
     || _type == PC_SLICE_TYPE_FAT32 \
     || _type == PC_SLICE_TYPE_FAT32_LBA \
     || _type == PC_SLICE_TYPE_DELL_UTIL; })

#define IS_PC_SLICE_TYPE_EXTENDED(type)   \
  (((type) == PC_SLICE_TYPE_EXTENDED)     \
   || ((type) == PC_SLICE_TYPE_WIN95_EXTENDED)  \
   || ((type) == PC_SLICE_TYPE_LINUX_EXTENDED))

#define IS_PC_SLICE_TYPE_MINIX(type) \
  (((type) == PC_SLICE_TYPE_MINIX)  \
   || ((type) == PC_SLICE_TYPE_LINUX_MINIX))

/* these ones are special, as they use their own partitioning scheme
   to subdivide the PC partitions from there.  */
#define PC_SLICE_TYPE_FREEBSD       0xa5
#define PC_SLICE_TYPE_OPENBSD       0xa6
#define PC_SLICE_TYPE_NETBSD        0xa9

/* For convenience.  */
#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs)   \
  ((type) == (PC_SLICE_TYPE_FREEBSD | ((fs) << 8)) \
   || (type) == (PC_SLICE_TYPE_OPENBSD | ((fs) << 8)) \
   || (type) == (PC_SLICE_TYPE_NETBSD | (fs) << 8))

#define IS_PC_SLICE_TYPE_BSD(type)  IS_PC_SLICE_TYPE_BSD_WITH_FS(type,0)

/*
 *  *BSD-style disklabel & partition definitions.
 *
 *  This is a subdivided slice of type 'PC_SLICE_TYPE_BSD', so all of
 *  these, except where noted, are relative to the slice in question.
 */

#define BSD_LABEL_SECTOR 1
#define BSD_LABEL_MAGIC  0x82564557

#define BSD_LABEL_MAG_OFFSET 0
#define BSD_LABEL_MAG2_OFFSET 132
#define BSD_LABEL_NPARTS_OFFSET 138
#define BSD_LABEL_NPARTS_MAX 8

#define BSD_PART_OFFSET 148


/*
 *  Defines to guarantee structural alignment.
 */

#define BSD_LABEL_CHECK_MAG(l_ptr) \
  ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \
   == ( (unsigned long) BSD_LABEL_MAGIC ) )

#define BSD_LABEL_MAG(l_ptr) \
  ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) )

#define BSD_LABEL_DTYPE(l_ptr) \
  ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) )

#define BSD_LABEL_NPARTS(l_ptr) \
  ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) )

#define BSD_PART_LENGTH(l_ptr, part) \
  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET \
                    + (part << 4)) ) )

#define BSD_PART_START(l_ptr, part) \
  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 4 \
                    + (part << 4)) ) )

#define BSD_PART_FRAG_SIZE(l_ptr, part) \
  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 8 \
                    + (part << 4)) ) )

#define BSD_PART_TYPE(l_ptr, part) \
  ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \
                    + (part << 4)) ) )

#define BSD_PART_FRAGS_PER_BLOCK(l_ptr, part) \
  ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 13 \
                    + (part << 4)) ) )

#define BSD_PART_EXTRA(l_ptr, part) \
  ( *( (unsigned short *) (((int) l_ptr) + BSD_PART_OFFSET + 14 \
                    + (part << 4)) ) )


/* possible values for the "DISKTYPE"... all essentially irrelevant
   except for DTYPE_SCSI */
#define DTYPE_SMD               1   /* SMD, XSMD; VAX hp/up */
#define DTYPE_MSCP              2   /* MSCP */
#define DTYPE_DEC               3   /* other DEC (rk, rl) */
#define DTYPE_SCSI              4   /* SCSI */
#define DTYPE_ESDI              5   /* ESDI interface */
#define DTYPE_ST506             6   /* ST506 etc. */
#define DTYPE_HPIB              7   /* CS/80 on HP-IB */
#define DTYPE_HPFL              8   /* HP Fiber-link */
#define DTYPE_FLOPPY            10  /* floppy */


/* possible values for the *BSD-style partition type */
#define     FS_UNUSED   0     /* unused */
#define     FS_SWAP           1     /* swap */
#define     FS_V6       2     /* Sixth Edition */
#define     FS_V7       3     /* Seventh Edition */
#define     FS_SYSV           4     /* System V */
#define     FS_V71K           5     /* V7 with 1K blocks (4.1, 2.9) */
#define     FS_V8       6     /* Eighth Edition, 4K blocks */
#define     FS_BSDFFS   7     /* 4.2BSD fast file system */
#define     FS_MSDOS    8     /* MSDOS file system */
#define     FS_BSDLFS   9     /* 4.4BSD log-structured file system */
#define     FS_OTHER    10    /* in use, but unknown/unsupported */
#define     FS_HPFS           11    /* OS/2 high-performance file system */
#define     FS_ISO9660  12    /* ISO 9660, normally CD-ROM */
#define     FS_BOOT           13    /* partition contains bootstrap */
#define     FS_ADOS           14    /* AmigaDOS fast file system */
#define     FS_HFS            15    /* Macintosh HFS */
#define     FS_FILECORE 16    /* Acorn Filecore Filing System */
#define     FS_EXT2FS   17    /* Linux Extended 2 file system */


#endif /* _PC_SLICE_H */

Generated by  Doxygen 1.6.0   Back to index