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