xref: /freebsd/sys/contrib/openzfs/include/zfs_valstr.h (revision e2df9bb44109577475aeb186e7186ac040f9bde1)
1*e2df9bb4SMartin Matuska /*
2*e2df9bb4SMartin Matuska  * CDDL HEADER START
3*e2df9bb4SMartin Matuska  *
4*e2df9bb4SMartin Matuska  * The contents of this file are subject to the terms of the
5*e2df9bb4SMartin Matuska  * Common Development and Distribution License (the "License").
6*e2df9bb4SMartin Matuska  * You may not use this file except in compliance with the License.
7*e2df9bb4SMartin Matuska  *
8*e2df9bb4SMartin Matuska  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*e2df9bb4SMartin Matuska  * or https://opensource.org/licenses/CDDL-1.0.
10*e2df9bb4SMartin Matuska  * See the License for the specific language governing permissions
11*e2df9bb4SMartin Matuska  * and limitations under the License.
12*e2df9bb4SMartin Matuska  *
13*e2df9bb4SMartin Matuska  * When distributing Covered Code, include this CDDL HEADER in each
14*e2df9bb4SMartin Matuska  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*e2df9bb4SMartin Matuska  * If applicable, add the following below this CDDL HEADER, with the
16*e2df9bb4SMartin Matuska  * fields enclosed by brackets "[]" replaced with your own identifying
17*e2df9bb4SMartin Matuska  * information: Portions Copyright [yyyy] [name of copyright owner]
18*e2df9bb4SMartin Matuska  *
19*e2df9bb4SMartin Matuska  * CDDL HEADER END
20*e2df9bb4SMartin Matuska  */
21*e2df9bb4SMartin Matuska 
22*e2df9bb4SMartin Matuska /*
23*e2df9bb4SMartin Matuska  * Copyright (c) 2024, Klara Inc.
24*e2df9bb4SMartin Matuska  */
25*e2df9bb4SMartin Matuska 
26*e2df9bb4SMartin Matuska #ifndef	_ZFS_VALSTR_H
27*e2df9bb4SMartin Matuska #define	_ZFS_VALSTR_H extern __attribute__((visibility("default")))
28*e2df9bb4SMartin Matuska 
29*e2df9bb4SMartin Matuska #include <sys/fs/zfs.h>
30*e2df9bb4SMartin Matuska #include <sys/types.h>
31*e2df9bb4SMartin Matuska 
32*e2df9bb4SMartin Matuska #ifdef	__cplusplus
33*e2df9bb4SMartin Matuska extern "C" {
34*e2df9bb4SMartin Matuska #endif
35*e2df9bb4SMartin Matuska 
36*e2df9bb4SMartin Matuska /*
37*e2df9bb4SMartin Matuska  * These macros create function prototypes for pretty-printing or stringifying
38*e2df9bb4SMartin Matuska  * certain kinds of numeric types.
39*e2df9bb4SMartin Matuska  *
40*e2df9bb4SMartin Matuska  * _ZFS_VALSTR_DECLARE_BITFIELD(name) creates:
41*e2df9bb4SMartin Matuska  *
42*e2df9bb4SMartin Matuska  *   size_t zfs_valstr_<name>_bits(uint64_t bits, char *out, size_t outlen);
43*e2df9bb4SMartin Matuska  *     expands single char for each set bit, and space for each clear bit
44*e2df9bb4SMartin Matuska  *
45*e2df9bb4SMartin Matuska  *   size_t zfs_valstr_<name>_pairs(uint64_t bits, char *out, size_t outlen);
46*e2df9bb4SMartin Matuska  *     expands two-char mnemonic for each bit set in `bits`, separated by `|`
47*e2df9bb4SMartin Matuska  *
48*e2df9bb4SMartin Matuska  *   size_t zfs_valstr_<name>(uint64_t bits, char *out, size_t outlen);
49*e2df9bb4SMartin Matuska  *     expands full name of each bit set in `bits`, separated by spaces
50*e2df9bb4SMartin Matuska  *
51*e2df9bb4SMartin Matuska  * _ZFS_VALSTR_DECLARE_ENUM(name) creates:
52*e2df9bb4SMartin Matuska  *
53*e2df9bb4SMartin Matuska  *   size_t zfs_valstr_<name>(int v, char *out, size_t outlen);
54*e2df9bb4SMartin Matuska  *     expands full name of enum value
55*e2df9bb4SMartin Matuska  *
56*e2df9bb4SMartin Matuska  * Each _ZFS_VALSTR_DECLARE_xxx needs a corresponding _VALSTR_xxx_IMPL string
57*e2df9bb4SMartin Matuska  * table in vfs_valstr.c.
58*e2df9bb4SMartin Matuska  */
59*e2df9bb4SMartin Matuska 
60*e2df9bb4SMartin Matuska #define	_ZFS_VALSTR_DECLARE_BITFIELD(name)			\
61*e2df9bb4SMartin Matuska 	_ZFS_VALSTR_H size_t zfs_valstr_ ## name ## _bits(	\
62*e2df9bb4SMartin Matuska 	    uint64_t bits, char *out, size_t outlen);		\
63*e2df9bb4SMartin Matuska 	_ZFS_VALSTR_H size_t zfs_valstr_ ## name ## _pairs(	\
64*e2df9bb4SMartin Matuska 	    uint64_t bits, char *out, size_t outlen);		\
65*e2df9bb4SMartin Matuska 	_ZFS_VALSTR_H size_t zfs_valstr_ ## name(		\
66*e2df9bb4SMartin Matuska 	    uint64_t bits, char *out, size_t outlen);		\
67*e2df9bb4SMartin Matuska 
68*e2df9bb4SMartin Matuska #define	_ZFS_VALSTR_DECLARE_ENUM(name)				\
69*e2df9bb4SMartin Matuska 	_ZFS_VALSTR_H size_t zfs_valstr_ ## name(		\
70*e2df9bb4SMartin Matuska 	    int v, char *out, size_t outlen);			\
71*e2df9bb4SMartin Matuska 
72*e2df9bb4SMartin Matuska _ZFS_VALSTR_DECLARE_BITFIELD(zio_flag)
73*e2df9bb4SMartin Matuska _ZFS_VALSTR_DECLARE_BITFIELD(zio_stage)
74*e2df9bb4SMartin Matuska 
75*e2df9bb4SMartin Matuska _ZFS_VALSTR_DECLARE_ENUM(zio_priority)
76*e2df9bb4SMartin Matuska 
77*e2df9bb4SMartin Matuska #undef _ZFS_VALSTR_DECLARE_BITFIELD
78*e2df9bb4SMartin Matuska #undef _ZFS_VALSTR_DECLARE_ENUM
79*e2df9bb4SMartin Matuska 
80*e2df9bb4SMartin Matuska #ifdef	__cplusplus
81*e2df9bb4SMartin Matuska }
82*e2df9bb4SMartin Matuska #endif
83*e2df9bb4SMartin Matuska 
84*e2df9bb4SMartin Matuska #endif	/* _ZFS_VALSTR_H */
85