1/*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2019 Leandro Lupori
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#ifndef AACRAID_ENDIAN_H
29#define AACRAID_ENDIAN_H
30
31#include <sys/endian.h>
32
33#if _BYTE_ORDER == _LITTLE_ENDIAN
34
35/* On Little-Endian (LE) hosts, make all FIB data conversion functions empty. */
36
37/* Convert from Little-Endian to host order (TOH) */
38#define aac_fib_header_toh(ptr)
39#define aac_adapter_info_toh(ptr)
40#define aac_container_creation_toh(ptr)
41#define aac_mntobj_toh(ptr)
42#define aac_mntinforesp_toh(ptr)
43#define aac_fsa_ctm_toh(ptr)
44#define aac_cnt_config_toh(ptr)
45#define aac_ctcfg_resp_toh(ptr)
46#define aac_getbusinf_toh(ptr)
47#define aac_vmi_businf_resp_toh(ptr)
48#define aac_srb_response_toh(ptr)
49
50/* Convert from host order to Little-Endian (TOLE) */
51#define aac_adapter_init_tole(ptr)
52#define aac_fib_header_tole(ptr)
53#define aac_mntinfo_tole(ptr)
54#define aac_fsa_ctm_tole(ptr)
55#define aac_cnt_config_tole(ptr)
56#define aac_raw_io_tole(ptr)
57#define aac_raw_io2_tole(ptr)
58#define aac_fib_xporthdr_tole(ptr)
59#define aac_ctcfg_tole(ptr)
60#define aac_vmioctl_tole(ptr)
61#define aac_pause_command_tole(ptr)
62#define aac_srb_tole(ptr)
63#define aac_sge_ieee1212_tole(ptr)
64#define aac_sg_entryraw_tole(ptr)
65#define aac_sg_entry_tole(ptr)
66#define aac_sg_entry64_tole(ptr)
67#define aac_blockread_tole(ptr)
68#define aac_blockwrite_tole(ptr)
69#define aac_blockread64_tole(ptr)
70#define aac_blockwrite64_tole(ptr)
71
72#else /* _BYTE_ORDER != _LITTLE_ENDIAN */
73
74/* Convert from Little-Endian to host order (TOH) */
75void aac_fib_header_toh(struct aac_fib_header *ptr);
76void aac_adapter_info_toh(struct aac_adapter_info *ptr);
77void aac_container_creation_toh(struct aac_container_creation *ptr);
78void aac_mntobj_toh(struct aac_mntobj *ptr);
79void aac_mntinforesp_toh(struct aac_mntinforesp *ptr);
80void aac_fsa_ctm_toh(struct aac_fsa_ctm *ptr);
81void aac_cnt_config_toh(struct aac_cnt_config *ptr);
82void aac_ctcfg_resp_toh(struct aac_ctcfg_resp *ptr);
83void aac_getbusinf_toh(struct aac_getbusinf *ptr);
84void aac_vmi_businf_resp_toh(struct aac_vmi_businf_resp *ptr);
85void aac_srb_response_toh(struct aac_srb_response *ptr);
86
87/* Convert from host order to Little-Endian (TOLE) */
88void aac_adapter_init_tole(struct aac_adapter_init *ptr);
89void aac_fib_header_tole(struct aac_fib_header *ptr);
90void aac_mntinfo_tole(struct aac_mntinfo *ptr);
91void aac_fsa_ctm_tole(struct aac_fsa_ctm *ptr);
92void aac_cnt_config_tole(struct aac_cnt_config *ptr);
93void aac_raw_io_tole(struct aac_raw_io *ptr);
94void aac_raw_io2_tole(struct aac_raw_io2 *ptr);
95void aac_fib_xporthdr_tole(struct aac_fib_xporthdr *ptr);
96void aac_ctcfg_tole(struct aac_ctcfg *ptr);
97void aac_vmioctl_tole(struct aac_vmioctl *ptr);
98void aac_pause_command_tole(struct aac_pause_command *ptr);
99void aac_srb_tole(struct aac_srb *ptr);
100void aac_sge_ieee1212_tole(struct aac_sge_ieee1212 *ptr);
101void aac_sg_entryraw_tole(struct aac_sg_entryraw *ptr);
102void aac_sg_entry_tole(struct aac_sg_entry *ptr);
103void aac_sg_entry64_tole(struct aac_sg_entry64 *ptr);
104void aac_blockread_tole(struct aac_blockread *ptr);
105void aac_blockwrite_tole(struct aac_blockwrite *ptr);
106void aac_blockread64_tole(struct aac_blockread64 *ptr);
107void aac_blockwrite64_tole(struct aac_blockwrite64 *ptr);
108
109#endif
110
111#endif
112