xref: /rk3399_rockchip-uboot/include/zfs/zfs.h (revision 326ea986ac150acdc7656d57fca647db80b50158)
14d3c95f5SJorgen Lundman /*
24d3c95f5SJorgen Lundman  *  GRUB  --  GRand Unified Bootloader
34d3c95f5SJorgen Lundman  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
44d3c95f5SJorgen Lundman  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
64d3c95f5SJorgen Lundman  */
74d3c95f5SJorgen Lundman /*
84d3c95f5SJorgen Lundman  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
94d3c95f5SJorgen Lundman  */
104d3c95f5SJorgen Lundman 
114d3c95f5SJorgen Lundman #ifndef	GRUB_ZFS_HEADER
124d3c95f5SJorgen Lundman #define	GRUB_ZFS_HEADER 1
134d3c95f5SJorgen Lundman 
144d3c95f5SJorgen Lundman 
154d3c95f5SJorgen Lundman /*
164d3c95f5SJorgen Lundman  * On-disk version number.
174d3c95f5SJorgen Lundman  */
184d3c95f5SJorgen Lundman #define	SPA_VERSION			28ULL
194d3c95f5SJorgen Lundman 
204d3c95f5SJorgen Lundman /*
214d3c95f5SJorgen Lundman  * The following are configuration names used in the nvlist describing a pool's
224d3c95f5SJorgen Lundman  * configuration.
234d3c95f5SJorgen Lundman  */
244d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VERSION		"version"
254d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_NAME		"name"
264d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_STATE		"state"
274d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_TXG		"txg"
284d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_POOL_GUID		"pool_guid"
294d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_CREATE_TXG		"create_txg"
304d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_TOP_GUID		"top_guid"
314d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VDEV_TREE		"vdev_tree"
324d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_TYPE		"type"
334d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_CHILDREN		"children"
344d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ID			"id"
354d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_GUID		"guid"
364d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_PATH		"path"
374d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DEVID		"devid"
384d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_METASLAB_ARRAY	"metaslab_array"
394d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_METASLAB_SHIFT	"metaslab_shift"
404d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ASHIFT		"ashift"
414d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ASIZE		"asize"
424d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DTL		"DTL"
434d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_STATS		"stats"
444d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_WHOLE_DISK		"whole_disk"
454d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_ERRCOUNT		"error_count"
464d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_NOT_PRESENT	"not_present"
474d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_SPARES		"spares"
484d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_IS_SPARE		"is_spare"
494d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_NPARITY		"nparity"
504d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_PHYS_PATH		"phys_path"
514d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_L2CACHE		"l2cache"
524d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_HOLE_ARRAY		"hole_array"
534d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_VDEV_CHILDREN	"vdev_children"
544d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_IS_HOLE		"is_hole"
554d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_HISTOGRAM	"ddt_histogram"
564d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_OBJ_STATS	"ddt_object_stats"
574d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DDT_STATS		"ddt_stats"
584d3c95f5SJorgen Lundman /*
594d3c95f5SJorgen Lundman  * The persistent vdev state is stored as separate values rather than a single
604d3c95f5SJorgen Lundman  * 'vdev_state' entry.  This is because a device can be in multiple states, such
614d3c95f5SJorgen Lundman  * as offline and degraded.
624d3c95f5SJorgen Lundman  */
634d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_OFFLINE		"offline"
644d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_FAULTED		"faulted"
654d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_DEGRADED		"degraded"
664d3c95f5SJorgen Lundman #define	ZPOOL_CONFIG_REMOVED		"removed"
674d3c95f5SJorgen Lundman 
684d3c95f5SJorgen Lundman #define	VDEV_TYPE_ROOT			"root"
694d3c95f5SJorgen Lundman #define	VDEV_TYPE_MIRROR		"mirror"
704d3c95f5SJorgen Lundman #define	VDEV_TYPE_REPLACING		"replacing"
714d3c95f5SJorgen Lundman #define	VDEV_TYPE_RAIDZ			"raidz"
724d3c95f5SJorgen Lundman #define	VDEV_TYPE_DISK			"disk"
734d3c95f5SJorgen Lundman #define	VDEV_TYPE_FILE			"file"
744d3c95f5SJorgen Lundman #define	VDEV_TYPE_MISSING		"missing"
754d3c95f5SJorgen Lundman #define	VDEV_TYPE_HOLE			"hole"
764d3c95f5SJorgen Lundman #define	VDEV_TYPE_SPARE			"spare"
774d3c95f5SJorgen Lundman #define	VDEV_TYPE_L2CACHE		"l2cache"
784d3c95f5SJorgen Lundman 
794d3c95f5SJorgen Lundman /*
804d3c95f5SJorgen Lundman  * pool state.  The following states are written to disk as part of the normal
814d3c95f5SJorgen Lundman  * SPA lifecycle: ACTIVE, EXPORTED, DESTROYED, SPARE, L2CACHE.  The remaining
824d3c95f5SJorgen Lundman  * states are software abstractions used at various levels to communicate pool
834d3c95f5SJorgen Lundman  * state.
844d3c95f5SJorgen Lundman  */
854d3c95f5SJorgen Lundman typedef enum pool_state {
864d3c95f5SJorgen Lundman 	POOL_STATE_ACTIVE = 0,		/* In active use		*/
874d3c95f5SJorgen Lundman 	POOL_STATE_EXPORTED,		/* Explicitly exported		*/
884d3c95f5SJorgen Lundman 	POOL_STATE_DESTROYED,		/* Explicitly destroyed		*/
894d3c95f5SJorgen Lundman 	POOL_STATE_SPARE,		/* Reserved for hot spare use	*/
904d3c95f5SJorgen Lundman 	POOL_STATE_L2CACHE,		/* Level 2 ARC device		*/
914d3c95f5SJorgen Lundman 	POOL_STATE_UNINITIALIZED,	/* Internal spa_t state		*/
924d3c95f5SJorgen Lundman 	POOL_STATE_UNAVAIL,		/* Internal libzfs state	*/
934d3c95f5SJorgen Lundman 	POOL_STATE_POTENTIALLY_ACTIVE	/* Internal libzfs state	*/
944d3c95f5SJorgen Lundman } pool_state_t;
954d3c95f5SJorgen Lundman 
964d3c95f5SJorgen Lundman struct zfs_data;
974d3c95f5SJorgen Lundman 
984d3c95f5SJorgen Lundman int zfs_fetch_nvlist(device_t dev, char **nvlist);
994d3c95f5SJorgen Lundman int zfs_getmdnobj(device_t dev, const char *fsfilename,
1004d3c95f5SJorgen Lundman 			       uint64_t *mdnobj);
1014d3c95f5SJorgen Lundman 
1024d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_string(char *nvlist, char *name);
1034d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist(char *nvlist, char *name);
1044d3c95f5SJorgen Lundman int zfs_nvlist_lookup_uint64(char *nvlist, char *name,
1054d3c95f5SJorgen Lundman 				   uint64_t *out);
1064d3c95f5SJorgen Lundman char *zfs_nvlist_lookup_nvlist_array(char *nvlist, char *name,
1074d3c95f5SJorgen Lundman 					   size_t index);
1084d3c95f5SJorgen Lundman int zfs_nvlist_lookup_nvlist_array_get_nelm(char *nvlist, char *name);
1094d3c95f5SJorgen Lundman 
1104d3c95f5SJorgen Lundman #endif	/* ! GRUB_ZFS_HEADER */
111