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