uboot/include/zfs/vdev_impl.h
<<
>>
Prefs
   1/*
   2 *  GRUB  --  GRand Unified Bootloader
   3 *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
   4 *
   5 * SPDX-License-Identifier:     GPL-2.0+
   6 */
   7/*
   8 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
   9 * Use is subject to license terms.
  10 */
  11
  12#ifndef _SYS_VDEV_IMPL_H
  13#define _SYS_VDEV_IMPL_H
  14
  15#define VDEV_SKIP_SIZE          (8 << 10)
  16#define VDEV_BOOT_HEADER_SIZE   (8 << 10)
  17#define VDEV_PHYS_SIZE          (112 << 10)
  18#define VDEV_UBERBLOCK_RING     (128 << 10)
  19
  20/* ZFS boot block */
  21#define VDEV_BOOT_MAGIC         0x2f5b007b10cULL
  22#define VDEV_BOOT_VERSION       1               /* version number       */
  23
  24typedef struct vdev_boot_header {
  25        uint64_t        vb_magic;               /* VDEV_BOOT_MAGIC      */
  26        uint64_t        vb_version;             /* VDEV_BOOT_VERSION    */
  27        uint64_t        vb_offset;              /* start offset (bytes) */
  28        uint64_t        vb_size;                /* size (bytes)         */
  29        char            vb_pad[VDEV_BOOT_HEADER_SIZE - 4 * sizeof(uint64_t)];
  30} vdev_boot_header_t;
  31
  32typedef struct vdev_phys {
  33        char            vp_nvlist[VDEV_PHYS_SIZE - sizeof(zio_eck_t)];
  34        zio_eck_t       vp_zbt;
  35} vdev_phys_t;
  36
  37typedef struct vdev_label {
  38        char            vl_pad[VDEV_SKIP_SIZE];                 /*   8K */
  39        vdev_boot_header_t vl_boot_header;                      /*   8K */
  40        vdev_phys_t     vl_vdev_phys;                           /* 112K */
  41        char            vl_uberblock[VDEV_UBERBLOCK_RING];      /* 128K */
  42} vdev_label_t;                                                 /* 256K total */
  43
  44/*
  45 * Size and offset of embedded boot loader region on each label.
  46 * The total size of the first two labels plus the boot area is 4MB.
  47 */
  48#define VDEV_BOOT_OFFSET        (2 * sizeof(vdev_label_t))
  49#define VDEV_BOOT_SIZE          (7ULL << 19)                    /* 3.5M */
  50
  51/*
  52 * Size of label regions at the start and end of each leaf device.
  53 */
  54#define VDEV_LABEL_START_SIZE   (2 * sizeof(vdev_label_t) + VDEV_BOOT_SIZE)
  55#define VDEV_LABEL_END_SIZE     (2 * sizeof(vdev_label_t))
  56#define VDEV_LABELS             4
  57
  58#endif  /* _SYS_VDEV_IMPL_H */
  59