1359937Sbrooks/*-
2359937Sbrooks * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3359937Sbrooks *
4359937Sbrooks * Copyright (c) 2001 Doug Rabson
5359937Sbrooks * All rights reserved.
6359937Sbrooks *
7359937Sbrooks * Redistribution and use in source and binary forms, with or without
8359937Sbrooks * modification, are permitted provided that the following conditions
9359937Sbrooks * are met:
10359937Sbrooks * 1. Redistributions of source code must retain the above copyright
11359937Sbrooks *    notice, this list of conditions and the following disclaimer.
12359937Sbrooks * 2. Redistributions in binary form must reproduce the above copyright
13359937Sbrooks *    notice, this list of conditions and the following disclaimer in the
14359937Sbrooks *    documentation and/or other materials provided with the distribution.
15359937Sbrooks *
16359937Sbrooks * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17359937Sbrooks * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18359937Sbrooks * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19359937Sbrooks * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20359937Sbrooks * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21359937Sbrooks * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22359937Sbrooks * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23359937Sbrooks * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24359937Sbrooks * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25359937Sbrooks * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26359937Sbrooks * SUCH DAMAGE.
27359937Sbrooks *
28359937Sbrooks * $FreeBSD: stable/11/sys/sys/abi_compat.h 360451 2020-04-28 20:14:38Z brooks $
29359937Sbrooks */
30359937Sbrooks
31359937Sbrooks#ifndef _COMPAT_H_
32359937Sbrooks#define	_COMPAT_H_
33359937Sbrooks
34359937Sbrooks/*
35359937Sbrooks * Helper macros for translating objects between different ABIs.
36359937Sbrooks */
37359937Sbrooks
38359937Sbrooks#define	PTRIN(v)	(void *)(uintptr_t)(v)
39359937Sbrooks#define	PTROUT(v)	(uintptr_t)(v)
40359937Sbrooks
41359937Sbrooks#define	CP(src, dst, fld) do {			\
42359937Sbrooks	(dst).fld = (src).fld;			\
43359937Sbrooks} while (0)
44359937Sbrooks
45359937Sbrooks#define	CP2(src, dst, sfld, dfld) do {		\
46359937Sbrooks	(dst).dfld = (src).sfld;		\
47359937Sbrooks} while (0)
48359937Sbrooks
49359937Sbrooks#define	PTRIN_CP(src, dst, fld) do {		\
50359937Sbrooks	(dst).fld = PTRIN((src).fld);		\
51359937Sbrooks} while (0)
52359937Sbrooks
53359937Sbrooks#define	PTROUT_CP(src, dst, fld) do {		\
54359937Sbrooks	(dst).fld = PTROUT((src).fld);		\
55359937Sbrooks} while (0)
56359937Sbrooks
57359937Sbrooks#define	TV_CP(src, dst, fld) do {		\
58359937Sbrooks	CP((src).fld, (dst).fld, tv_sec);	\
59359937Sbrooks	CP((src).fld, (dst).fld, tv_usec);	\
60359937Sbrooks} while (0)
61359937Sbrooks
62359937Sbrooks#define	TS_CP(src, dst, fld) do {		\
63359937Sbrooks	CP((src).fld, (dst).fld, tv_sec);	\
64359937Sbrooks	CP((src).fld, (dst).fld, tv_nsec);	\
65359937Sbrooks} while (0)
66359937Sbrooks
67359937Sbrooks#define	ITS_CP(src, dst) do {			\
68359937Sbrooks	TS_CP((src), (dst), it_interval);	\
69359937Sbrooks	TS_CP((src), (dst), it_value);		\
70359937Sbrooks} while (0)
71359937Sbrooks
72359937Sbrooks#define	BT_CP(src, dst, fld) do {				\
73359937Sbrooks	CP((src).fld, (dst).fld, sec);				\
74359937Sbrooks	*(uint64_t *)&(dst).fld.frac[0] = (src).fld.frac;	\
75359937Sbrooks} while (0)
76359937Sbrooks
77359937Sbrooks#endif /* !_COMPAT_H_ */
78