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