xref: /openbmc/u-boot/include/zfs/zfs.h (revision c6af2e7d)
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 */
123