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