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