1 1.9 christos /* $NetBSD: ulfs_bswap.h,v 1.9 2018/04/19 21:50:10 christos Exp $ */ 2 1.7 dholland /* from NetBSD: ufs_bswap.h,v 1.21 2016/04/29 03:05:04 christos Exp */ 3 1.1 dholland 4 1.1 dholland /* 5 1.1 dholland * Copyright (c) 1998 Manuel Bouyer. 6 1.1 dholland * 7 1.1 dholland * Redistribution and use in source and binary forms, with or without 8 1.1 dholland * modification, are permitted provided that the following conditions 9 1.1 dholland * are met: 10 1.1 dholland * 1. Redistributions of source code must retain the above copyright 11 1.1 dholland * notice, this list of conditions and the following disclaimer. 12 1.1 dholland * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 dholland * notice, this list of conditions and the following disclaimer in the 14 1.1 dholland * documentation and/or other materials provided with the distribution. 15 1.1 dholland * 16 1.1 dholland * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 dholland * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 dholland * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 dholland * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 dholland * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 dholland * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 dholland * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 dholland * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 dholland * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 dholland * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 dholland * 27 1.1 dholland */ 28 1.1 dholland 29 1.3 dholland #ifndef _UFS_LFS_ULFS_BSWAP_H_ 30 1.3 dholland #define _UFS_LFS_ULFS_BSWAP_H_ 31 1.1 dholland 32 1.1 dholland #if defined(_KERNEL_OPT) 33 1.2 dholland #include "opt_lfs.h" 34 1.1 dholland #endif 35 1.1 dholland 36 1.1 dholland #include <sys/bswap.h> 37 1.1 dholland 38 1.3 dholland /* Macros to access ULFS flags */ 39 1.2 dholland #ifdef LFS_EI 40 1.4 dholland #define ULFS_MPNEEDSWAP(lfs) ((lfs)->um_flags & ULFS_NEEDSWAP) 41 1.3 dholland #define ULFS_FSNEEDSWAP(fs) ((fs)->fs_flags & FS_SWAPPED) 42 1.4 dholland #define ULFS_IPNEEDSWAP(ip) ULFS_MPNEEDSWAP((ip)->i_lfs) 43 1.1 dholland #else 44 1.6 christos #define ULFS_MPNEEDSWAP(ump) (__USE(ump), 0) 45 1.6 christos #define ULFS_FSNEEDSWAP(fs) (__USE(fs), 0) 46 1.6 christos #define ULFS_IPNEEDSWAP(ip) (__USE(ip), 0) 47 1.1 dholland #endif 48 1.1 dholland 49 1.2 dholland #if !defined(_KERNEL) || defined(LFS_EI) 50 1.1 dholland /* inlines for access to swapped data */ 51 1.9 christos static __inline uint16_t 52 1.3 dholland ulfs_rw16(uint16_t a, int ns) 53 1.1 dholland { 54 1.1 dholland return ((ns) ? bswap16(a) : (a)); 55 1.1 dholland } 56 1.1 dholland 57 1.9 christos static __inline uint32_t 58 1.3 dholland ulfs_rw32(uint32_t a, int ns) 59 1.1 dholland { 60 1.1 dholland return ((ns) ? bswap32(a) : (a)); 61 1.1 dholland } 62 1.1 dholland 63 1.9 christos static __inline uint64_t 64 1.3 dholland ulfs_rw64(uint64_t a, int ns) 65 1.1 dholland { 66 1.1 dholland return ((ns) ? bswap64(a) : (a)); 67 1.1 dholland } 68 1.1 dholland #else 69 1.5 christos #define ulfs_rw16(a, ns) (__USE(ns), (uint16_t)(a)) 70 1.5 christos #define ulfs_rw32(a, ns) (__USE(ns), (uint32_t)(a)) 71 1.5 christos #define ulfs_rw64(a, ns) (__USE(ns), (uint64_t)(a)) 72 1.1 dholland #endif 73 1.1 dholland 74 1.3 dholland #define ulfs_add16(a, b, ns) \ 75 1.3 dholland (a) = ulfs_rw16(ulfs_rw16((a), (ns)) + (b), (ns)) 76 1.3 dholland #define ulfs_add32(a, b, ns) \ 77 1.3 dholland (a) = ulfs_rw32(ulfs_rw32((a), (ns)) + (b), (ns)) 78 1.3 dholland #define ulfs_add64(a, b, ns) \ 79 1.3 dholland (a) = ulfs_rw64(ulfs_rw64((a), (ns)) + (b), (ns)) 80 1.1 dholland 81 1.3 dholland #endif /* !_UFS_LFS_ULFS_BSWAP_H_ */ 82