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