bootstage: Copy bootstage strings post-relocation
[platform/kernel/u-boot.git] / include / zfs / zfs.h
1 /*
2  *  GRUB  --  GRand Unified Bootloader
3  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19 /*
20  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
21  */
22
23 #ifndef GRUB_ZFS_HEADER
24 #define GRUB_ZFS_HEADER 1
25
26
27 /*
28  * On-disk version number.
29  */
30 #define SPA_VERSION                     28ULL
31
32 /*
33  * The following are configuration names used in the nvlist describing a pool's
34  * configuration.
35  */
36 #define ZPOOL_CONFIG_VERSION            "version"
37 #define ZPOOL_CONFIG_POOL_NAME          "name"
38 #define ZPOOL_CONFIG_POOL_STATE         "state"
39 #define ZPOOL_CONFIG_POOL_TXG           "txg"
40 #define ZPOOL_CONFIG_POOL_GUID          "pool_guid"
41 #define ZPOOL_CONFIG_CREATE_TXG         "create_txg"
42 #define ZPOOL_CONFIG_TOP_GUID           "top_guid"
43 #define ZPOOL_CONFIG_VDEV_TREE          "vdev_tree"
44 #define ZPOOL_CONFIG_TYPE               "type"
45 #define ZPOOL_CONFIG_CHILDREN           "children"
46 #define ZPOOL_CONFIG_ID                 "id"
47 #define ZPOOL_CONFIG_GUID               "guid"
48 #define ZPOOL_CONFIG_PATH               "path"
49 #define ZPOOL_CONFIG_DEVID              "devid"
50 #define ZPOOL_CONFIG_METASLAB_ARRAY     "metaslab_array"
51 #define ZPOOL_CONFIG_METASLAB_SHIFT     "metaslab_shift"
52 #define ZPOOL_CONFIG_ASHIFT             "ashift"
53 #define ZPOOL_CONFIG_ASIZE              "asize"
54 #define ZPOOL_CONFIG_DTL                "DTL"
55 #define ZPOOL_CONFIG_STATS              "stats"
56 #define ZPOOL_CONFIG_WHOLE_DISK         "whole_disk"
57 #define ZPOOL_CONFIG_ERRCOUNT           "error_count"
58 #define ZPOOL_CONFIG_NOT_PRESENT        "not_present"
59 #define ZPOOL_CONFIG_SPARES             "spares"
60 #define ZPOOL_CONFIG_IS_SPARE           "is_spare"
61 #define ZPOOL_CONFIG_NPARITY            "nparity"
62 #define ZPOOL_CONFIG_PHYS_PATH          "phys_path"
63 #define ZPOOL_CONFIG_L2CACHE            "l2cache"
64 #define ZPOOL_CONFIG_HOLE_ARRAY         "hole_array"
65 #define ZPOOL_CONFIG_VDEV_CHILDREN      "vdev_children"
66 #define ZPOOL_CONFIG_IS_HOLE            "is_hole"
67 #define ZPOOL_CONFIG_DDT_HISTOGRAM      "ddt_histogram"
68 #define ZPOOL_CONFIG_DDT_OBJ_STATS      "ddt_object_stats"
69 #define ZPOOL_CONFIG_DDT_STATS          "ddt_stats"
70 /*
71  * The persistent vdev state is stored as separate values rather than a single
72  * 'vdev_state' entry.  This is because a device can be in multiple states, such
73  * as offline and degraded.
74  */
75 #define ZPOOL_CONFIG_OFFLINE            "offline"
76 #define ZPOOL_CONFIG_FAULTED            "faulted"
77 #define ZPOOL_CONFIG_DEGRADED           "degraded"
78 #define ZPOOL_CONFIG_REMOVED            "removed"
79
80 #define VDEV_TYPE_ROOT                  "root"
81 #define VDEV_TYPE_MIRROR                "mirror"
82 #define VDEV_TYPE_REPLACING             "replacing"
83 #define VDEV_TYPE_RAIDZ                 "raidz"
84 #define VDEV_TYPE_DISK                  "disk"
85 #define VDEV_TYPE_FILE                  "file"
86 #define VDEV_TYPE_MISSING               "missing"
87 #define VDEV_TYPE_HOLE                  "hole"
88 #define VDEV_TYPE_SPARE                 "spare"
89 #define VDEV_TYPE_L2CACHE               "l2cache"
90
91 /*
92  * pool state.  The following states are written to disk as part of the normal
93  * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
94  * states are software abstractions used at various levels to communicate pool
95  * state.
96  */
97 typedef enum pool_state {
98         POOL_STATE_ACTIVE = 0,          /* In active use                */
99         POOL_STATE_EXPORTED,            /* Explicitly exported          */
100         POOL_STATE_DESTROYED,           /* Explicitly destroyed         */
101         POOL_STATE_SPARE,               /* Reserved for hot spare use   */
102         POOL_STATE_L2CACHE,             /* Level 2 ARC device           */
103         POOL_STATE_UNINITIALIZED,       /* Internal spa_t state         */
104         POOL_STATE_UNAVAIL,             /* Internal libzfs state        */
105         POOL_STATE_POTENTIALLY_ACTIVE   /* Internal libzfs state        */
106 } pool_state_t;
107
108 struct zfs_data;
109
110 int zfs_fetch_nvlist(device_t dev, char **nvlist);
111 int zfs_getmdnobj(device_t dev, const char *fsfilename,
112                                uint64_t *mdnobj);
113
114 char *zfs_nvlist_lookup_string(char *nvlist, char *name);
115 char *zfs_nvlist_lookup_nvlist(char *nvlist, char *name);
116 int zfs_nvlist_lookup_uint64(char *nvlist, char *name,
117                                    uint64_t *out);
118 char *zfs_nvlist_lookup_nvlist_array(char *nvlist, char *name,
119                                            size_t index);
120 int zfs_nvlist_lookup_nvlist_array_get_nelm(char *nvlist, char *name);
121
122 #endif  /* ! GRUB_ZFS_HEADER */