1 // SPDX-License-Identifier: CDDL-1.0 2 /* 3 * This file and its contents are supplied under the terms of the 4 * Common Development and Distribution License ("CDDL"), version 1.0. 5 * You may only use this file in accordance with the terms of version 6 * 1.0 of the CDDL. 7 * 8 * A full copy of the text of the CDDL should have accompanied this 9 * source. A copy of the CDDL is also available via the Internet at 10 * https://opensource.org/license/CDDL-1.0. 11 */ 12 13 /* 14 * Copyright (c) 2026 by Garth Snyder. All rights reserved. 15 */ 16 17 #ifndef _ZSTREAM_BYTESWAP_H 18 #define _ZSTREAM_BYTESWAP_H 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #include "zstream_io.h" 25 26 #define MAX_BYTESWAP 4 /* Most swapping ops in a chain */ 27 28 /* 29 * Byteswapping is generally done both on input and on output. By default, 30 * the stream's endianness is preserved. That is, opposite-endian streams 31 * are byteswapped for processing by other modules, then ultimately 32 * de-byteswapped for output. 33 */ 34 typedef enum { BS_INCOMING, BS_OUTGOING } byteswap_stage_t; 35 36 chain_step_t 37 serial_byteswap(byteswap_stage_t stage); 38 39 /* 40 * Unconditionally swap a record. drr_type is passed in separately because 41 * we don't know whether we're doing input or output swapping. We need 42 * that value in native byte order to know how to swap the rest of the 43 * record. 44 */ 45 extern void 46 byteswap_record(dmu_replay_record_t *drr, uint32_t drr_type); 47 48 #ifdef __cplusplus 49 } 50 #endif 51 52 #endif /* _ZSTREAM_BYTESWAP_H */ 53