The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/partitions/ldm.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /**
    2  * ldm - Part of the Linux-NTFS project.
    3  *
    4  * Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
    5  * Copyright (C) 2001      Anton Altaparmakov <aia21@cantab.net>
    6  * Copyright (C) 2001,2002 Jakob Kemi <jakob.kemi@telia.com>
    7  *
    8  * Documentation is available at http://linux-ntfs.sf.net/ldm
    9  *
   10  * This program is free software; you can redistribute it and/or modify it
   11  * under the terms of the GNU General Public License as published by the Free
   12  * Software Foundation; either version 2 of the License, or (at your option)
   13  * any later version.
   14  *
   15  * This program is distributed in the hope that it will be useful,
   16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   18  * GNU General Public License for more details.
   19  *
   20  * You should have received a copy of the GNU General Public License
   21  * along with this program (in the main directory of the Linux-NTFS source
   22  * in the file COPYING); if not, write to the Free Software Foundation,
   23  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   24  */
   25 
   26 #ifndef _FS_PT_LDM_H_
   27 #define _FS_PT_LDM_H_
   28 
   29 #include <linux/types.h>
   30 #include <linux/list.h>
   31 #include <linux/genhd.h>
   32 #include <linux/fs.h>
   33 #include <asm/unaligned.h>
   34 #include <asm/byteorder.h>
   35 
   36 struct parsed_partitions;
   37 
   38 /* Magic numbers in CPU format. */
   39 #define MAGIC_VMDB      0x564D4442              /* VMDB */
   40 #define MAGIC_VBLK      0x56424C4B              /* VBLK */
   41 #define MAGIC_PRIVHEAD  0x5052495648454144      /* PRIVHEAD */
   42 #define MAGIC_TOCBLOCK  0x544F43424C4F434B      /* TOCBLOCK */
   43 
   44 /* The defined vblk types. */
   45 #define VBLK_VOL5               0x51            /* Volume,     version 5 */
   46 #define VBLK_CMP3               0x32            /* Component,  version 3 */
   47 #define VBLK_PRT3               0x33            /* Partition,  version 3 */
   48 #define VBLK_DSK3               0x34            /* Disk,       version 3 */
   49 #define VBLK_DSK4               0x44            /* Disk,       version 4 */
   50 #define VBLK_DGR3               0x35            /* Disk Group, version 3 */
   51 #define VBLK_DGR4               0x45            /* Disk Group, version 4 */
   52 
   53 /* vblk flags indicating extra information will be present */
   54 #define VBLK_FLAG_COMP_STRIPE   0x10
   55 #define VBLK_FLAG_PART_INDEX    0x08
   56 #define VBLK_FLAG_DGR3_IDS      0x08
   57 #define VBLK_FLAG_DGR4_IDS      0x08
   58 #define VBLK_FLAG_VOLU_ID1      0x08
   59 #define VBLK_FLAG_VOLU_ID2      0x20
   60 #define VBLK_FLAG_VOLU_SIZE     0x80
   61 #define VBLK_FLAG_VOLU_DRIVE    0x02
   62 
   63 /* size of a vblk's static parts */
   64 #define VBLK_SIZE_HEAD          16
   65 #define VBLK_SIZE_CMP3          22              /* Name and version */
   66 #define VBLK_SIZE_DGR3          12
   67 #define VBLK_SIZE_DGR4          44
   68 #define VBLK_SIZE_DSK3          12
   69 #define VBLK_SIZE_DSK4          45
   70 #define VBLK_SIZE_PRT3          28
   71 #define VBLK_SIZE_VOL5          59
   72 
   73 /* component types */
   74 #define COMP_STRIPE             0x01            /* Stripe-set */
   75 #define COMP_BASIC              0x02            /* Basic disk */
   76 #define COMP_RAID               0x03            /* Raid-set */
   77 
   78 /* Other constants. */
   79 #define LDM_DB_SIZE             2048            /* Size in sectors (= 1MiB). */
   80 
   81 #define OFF_PRIV1               6               /* Offset of the first privhead
   82                                                    relative to the start of the
   83                                                    device in sectors */
   84 
   85 /* Offsets to structures within the LDM Database in sectors. */
   86 #define OFF_PRIV2               1856            /* Backup private headers. */
   87 #define OFF_PRIV3               2047
   88 
   89 #define OFF_TOCB1               1               /* Tables of contents. */
   90 #define OFF_TOCB2               2
   91 #define OFF_TOCB3               2045
   92 #define OFF_TOCB4               2046
   93 
   94 #define OFF_VMDB                17              /* List of partitions. */
   95 
   96 #define WIN2K_DYNAMIC_PARTITION 0x42            /* Formerly SFS (Landis). */
   97 
   98 #define TOC_BITMAP1             "config"        /* Names of the two defined */
   99 #define TOC_BITMAP2             "log"           /* bitmaps in the TOCBLOCK. */
  100 
  101 /* Most numbers we deal with are big-endian and won't be aligned. */
  102 #define BE16(x)                 ((u16)be16_to_cpu(get_unaligned((u16*)(x))))
  103 #define BE32(x)                 ((u32)be32_to_cpu(get_unaligned((u32*)(x))))
  104 #define BE64(x)                 ((u64)be64_to_cpu(get_unaligned((u64*)(x))))
  105 
  106 /* Borrowed from msdos.c */
  107 #define SYS_IND(p)              (get_unaligned(&(p)->sys_ind))
  108 
  109 struct frag {                           /* VBLK Fragment handling */
  110         struct list_head list;
  111         u32             group;
  112         u8              num;            /* Total number of records */
  113         u8              rec;            /* This is record number n */
  114         u8              map;            /* Which portions are in use */
  115         u8              data[0];
  116 };
  117 
  118 /* In memory LDM database structures. */
  119 
  120 #define GUID_SIZE               16
  121 
  122 struct privhead {                       /* Offsets and sizes are in sectors. */
  123         u16     ver_major;
  124         u16     ver_minor;
  125         u64     logical_disk_start;
  126         u64     logical_disk_size;
  127         u64     config_start;
  128         u64     config_size;
  129         u8      disk_id[GUID_SIZE];
  130 };
  131 
  132 struct tocblock {                       /* We have exactly two bitmaps. */
  133         u8      bitmap1_name[16];
  134         u64     bitmap1_start;
  135         u64     bitmap1_size;
  136         u8      bitmap2_name[16];
  137         u64     bitmap2_start;
  138         u64     bitmap2_size;
  139 };
  140 
  141 struct vmdb {                           /* VMDB: The database header */
  142         u16     ver_major;
  143         u16     ver_minor;
  144         u32     vblk_size;
  145         u32     vblk_offset;
  146         u32     last_vblk_seq;
  147 };
  148 
  149 struct vblk_comp {                      /* VBLK Component */
  150         u8      state[16];
  151         u64     parent_id;
  152         u8      type;
  153         u8      children;
  154         u16     chunksize;
  155 };
  156 
  157 struct vblk_dgrp {                      /* VBLK Disk Group */
  158         u8      disk_id[64];
  159 };
  160 
  161 struct vblk_disk {                      /* VBLK Disk */
  162         u8      disk_id[GUID_SIZE];
  163         u8      alt_name[128];
  164 };
  165 
  166 struct vblk_part {                      /* VBLK Partition */
  167         u64     start;
  168         u64     size;                   /* start, size and vol_off in sectors */
  169         u64     volume_offset;
  170         u64     parent_id;
  171         u64     disk_id;
  172         u8      partnum;
  173 };
  174 
  175 struct vblk_volu {                      /* VBLK Volume */
  176         u8      volume_type[16];
  177         u8      volume_state[16];
  178         u8      guid[16];
  179         u8      drive_hint[4];
  180         u64     size;
  181         u8      partition_type;
  182 };
  183 
  184 struct vblk_head {                      /* VBLK standard header */
  185         u32 group;
  186         u16 rec;
  187         u16 nrec;
  188 };
  189 
  190 struct vblk {                           /* Generalised VBLK */
  191         u8      name[64];
  192         u64     obj_id;
  193         u32     sequence;
  194         u8      flags;
  195         u8      type;
  196         union {
  197                 struct vblk_comp comp;
  198                 struct vblk_dgrp dgrp;
  199                 struct vblk_disk disk;
  200                 struct vblk_part part;
  201                 struct vblk_volu volu;
  202         } vblk;
  203         struct list_head list;
  204 };
  205 
  206 struct ldmdb {                          /* Cache of the database */
  207         struct privhead ph;
  208         struct tocblock toc;
  209         struct vmdb     vm;
  210         struct list_head v_dgrp;
  211         struct list_head v_disk;
  212         struct list_head v_volu;
  213         struct list_head v_comp;
  214         struct list_head v_part;
  215 };
  216 
  217 int ldm_partition (struct gendisk *hd, struct block_device *bdev,
  218         unsigned long first_sector, int first_minor);
  219 
  220 #endif /* _FS_PT_LDM_H_ */
  221 

Cache object: b3e8de9e74614a2182f73fef7153df00


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.