xref: /freebsd/sys/contrib/openzfs/cmd/zstream/zstream_byteswap.h (revision d0b3ecdc274930e190ea233b6b69ff03782eaf8d)
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