arc: Don't include asm/u-boot.h in common
[platform/kernel/u-boot.git] / include / zfs / vdev_impl.h
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
24 typedef 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
32 typedef 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
37 typedef 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 */