Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * Copyright(c) 2015 - 2020 Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * This file is provided under a dual BSD/GPLv2 license.  When using or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * redistributing this file, you may do so under either license.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * GPL LICENSE SUMMARY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * it under the terms of version 2 of the GNU General Public License as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * published by the Free Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * This program is distributed in the hope that it will be useful, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  * BSD LICENSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)  * modification, are permitted provided that the following conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)  * are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  *  - Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  *    notice, this list of conditions and the following disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  *  - Redistributions in binary form must reproduce the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  *    notice, this list of conditions and the following disclaimer in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  *    the documentation and/or other materials provided with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  *    distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  *  - Neither the name of Intel Corporation nor the names of its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  *    contributors may be used to endorse or promote products derived
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  *    from this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #ifndef _COMMON_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define _COMMON_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #include <rdma/hfi/hfi1_user.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)  * This file contains defines, structures, etc. that are used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  * to communicate between kernel and user code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) /* version of protocol header (known to chip also). In the long run,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)  * we should be able to generate and accept a range of version numbers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * for now we only accept one, and it's compiled in.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #define IPS_PROTO_VERSION 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)  * These are compile time constants that you may want to enable or disable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  * if you are trying to debug problems with code or performance.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67)  * HFI1_VERBOSE_TRACING define as 1 if you want additional tracing in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)  * fast path code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  * HFI1_TRACE_REGWRITES define as 1 if you want register writes to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)  * traced in fast path code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71)  * _HFI1_TRACING define as 0 if you want to remove all tracing in a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)  * compilation unit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) /* driver/hw feature set bitmask */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define HFI1_CAP_USER_SHIFT      24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define HFI1_CAP_MASK            ((1UL << HFI1_CAP_USER_SHIFT) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) /* locked flag - if set, only HFI1_CAP_WRITABLE_MASK bits can be set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define HFI1_CAP_LOCKED_SHIFT    63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define HFI1_CAP_LOCKED_MASK     0x1ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define HFI1_CAP_LOCKED_SMASK    (HFI1_CAP_LOCKED_MASK << HFI1_CAP_LOCKED_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) /* extra bits used between kernel and user processes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define HFI1_CAP_MISC_SHIFT      (HFI1_CAP_USER_SHIFT * 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define HFI1_CAP_MISC_MASK       ((1ULL << (HFI1_CAP_LOCKED_SHIFT - \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 					   HFI1_CAP_MISC_SHIFT)) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define HFI1_CAP_KSET(cap) ({ hfi1_cap_mask |= HFI1_CAP_##cap; hfi1_cap_mask; })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define HFI1_CAP_KCLEAR(cap)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	({								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 		hfi1_cap_mask &= ~HFI1_CAP_##cap;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 		hfi1_cap_mask;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define HFI1_CAP_USET(cap)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	({								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 		hfi1_cap_mask |= (HFI1_CAP_##cap << HFI1_CAP_USER_SHIFT); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 		hfi1_cap_mask;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 		})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define HFI1_CAP_UCLEAR(cap)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	({								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 		hfi1_cap_mask &= ~(HFI1_CAP_##cap << HFI1_CAP_USER_SHIFT); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		hfi1_cap_mask;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define HFI1_CAP_SET(cap)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	({								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		hfi1_cap_mask |= (HFI1_CAP_##cap | (HFI1_CAP_##cap <<	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 						  HFI1_CAP_USER_SHIFT)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 		hfi1_cap_mask;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define HFI1_CAP_CLEAR(cap)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	({								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 		hfi1_cap_mask &= ~(HFI1_CAP_##cap |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 				  (HFI1_CAP_##cap << HFI1_CAP_USER_SHIFT)); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 		hfi1_cap_mask;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	})
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define HFI1_CAP_LOCK()							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	({ hfi1_cap_mask |= HFI1_CAP_LOCKED_SMASK; hfi1_cap_mask; })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define HFI1_CAP_LOCKED() (!!(hfi1_cap_mask & HFI1_CAP_LOCKED_SMASK))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)  * The set of capability bits that can be changed after initial load
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)  * This set is the same for kernel and user contexts. However, for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)  * user contexts, the set can be further filtered by using the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)  * HFI1_CAP_RESERVED_MASK bits.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define HFI1_CAP_WRITABLE_MASK   (HFI1_CAP_SDMA_AHG |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 				  HFI1_CAP_HDRSUPP |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 				  HFI1_CAP_MULTI_PKT_EGR |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 				  HFI1_CAP_NODROP_RHQ_FULL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 				  HFI1_CAP_NODROP_EGR_FULL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 				  HFI1_CAP_ALLOW_PERM_JKEY |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 				  HFI1_CAP_STATIC_RATE_CTRL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 				  HFI1_CAP_PRINT_UNIMPL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 				  HFI1_CAP_TID_UNMAP |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 				  HFI1_CAP_OPFN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)  * A set of capability bits that are "global" and are not allowed to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)  * set in the user bitmask.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define HFI1_CAP_RESERVED_MASK   ((HFI1_CAP_SDMA |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 				   HFI1_CAP_USE_SDMA_HEAD |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 				   HFI1_CAP_EXTENDED_PSN |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 				   HFI1_CAP_PRINT_UNIMPL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 				   HFI1_CAP_NO_INTEGRITY |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 				   HFI1_CAP_PKEY_CHECK |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 				   HFI1_CAP_TID_RDMA |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 				   HFI1_CAP_OPFN |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 				   HFI1_CAP_AIP) <<			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 				  HFI1_CAP_USER_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)  * Set of capabilities that need to be enabled for kernel context in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)  * order to be allowed for user contexts, as well.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define HFI1_CAP_MUST_HAVE_KERN (HFI1_CAP_STATIC_RATE_CTRL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* Default enabled capabilities (both kernel and user) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define HFI1_CAP_MASK_DEFAULT    (HFI1_CAP_HDRSUPP |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 				 HFI1_CAP_NODROP_RHQ_FULL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 				 HFI1_CAP_NODROP_EGR_FULL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 				 HFI1_CAP_SDMA |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 				 HFI1_CAP_PRINT_UNIMPL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 				 HFI1_CAP_STATIC_RATE_CTRL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 				 HFI1_CAP_PKEY_CHECK |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 				 HFI1_CAP_MULTI_PKT_EGR |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 				 HFI1_CAP_EXTENDED_PSN |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 				 HFI1_CAP_AIP |				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 				 ((HFI1_CAP_HDRSUPP |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 				   HFI1_CAP_MULTI_PKT_EGR |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 				   HFI1_CAP_STATIC_RATE_CTRL |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 				   HFI1_CAP_PKEY_CHECK |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 				   HFI1_CAP_EARLY_CREDIT_RETURN) <<	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 				  HFI1_CAP_USER_SHIFT))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)  * A bitmask of kernel/global capabilities that should be communicated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)  * to user level processes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define HFI1_CAP_K2U (HFI1_CAP_SDMA |			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 		     HFI1_CAP_EXTENDED_PSN |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 		     HFI1_CAP_PKEY_CHECK |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		     HFI1_CAP_NO_INTEGRITY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define HFI1_USER_SWVERSION ((HFI1_USER_SWMAJOR << HFI1_SWMAJOR_SHIFT) | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 			     HFI1_USER_SWMINOR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #ifndef HFI1_KERN_TYPE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define HFI1_KERN_TYPE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)  * Similarly, this is the kernel version going back to the user.  It's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)  * slightly different, in that we want to tell if the driver was built as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)  * part of a Intel release, or from the driver from openfabrics.org,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)  * kernel.org, or a standard distribution, for support reasons.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)  * The high bit is 0 for non-Intel and 1 for Intel-built/supplied.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)  * It's returned by the driver to the user code during initialization in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)  * spi_sw_version field of hfi1_base_info, so the user code can in turn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)  * check for compatibility with the kernel.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define HFI1_KERN_SWVERSION ((HFI1_KERN_TYPE << 31) | HFI1_USER_SWVERSION)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)  * Define the driver version number.  This is something that refers only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)  * to the driver itself, not the software interfaces it supports.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #ifndef HFI1_DRIVER_VERSION_BASE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define HFI1_DRIVER_VERSION_BASE "0.9-294"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* create the final driver version string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #ifdef HFI1_IDSTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define HFI1_DRIVER_VERSION HFI1_DRIVER_VERSION_BASE " " HFI1_IDSTR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define HFI1_DRIVER_VERSION HFI1_DRIVER_VERSION_BASE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)  * Diagnostics can send a packet by writing the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)  * struct to the diag packet special file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  * This allows a custom PBC qword, so that special modes and deliberate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)  * changes to CRCs can be used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define _DIAG_PKT_VERS 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) struct diag_pkt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	__u16 version;		/* structure version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	__u16 unit;		/* which device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	__u16 sw_index;		/* send sw index to use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	__u16 len;		/* data length, in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	__u16 port;		/* port number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	__u16 unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	__u32 flags;		/* call flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	__u64 data;		/* user data pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	__u64 pbc;		/* PBC for the packet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /* diag_pkt flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define F_DIAGPKT_WAIT 0x1	/* wait until packet is sent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  * The next set of defines are for packet headers, and chip register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)  * and memory bits that are visible to and/or used by user-mode software.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)  * Receive Header Flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define RHF_PKT_LEN_SHIFT	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define RHF_PKT_LEN_MASK	0xfffull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) #define RHF_PKT_LEN_SMASK (RHF_PKT_LEN_MASK << RHF_PKT_LEN_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #define RHF_RCV_TYPE_SHIFT	12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define RHF_RCV_TYPE_MASK	0x7ull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define RHF_RCV_TYPE_SMASK (RHF_RCV_TYPE_MASK << RHF_RCV_TYPE_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define RHF_USE_EGR_BFR_SHIFT	15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define RHF_USE_EGR_BFR_MASK	0x1ull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define RHF_USE_EGR_BFR_SMASK (RHF_USE_EGR_BFR_MASK << RHF_USE_EGR_BFR_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #define RHF_EGR_INDEX_SHIFT	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define RHF_EGR_INDEX_MASK	0x7ffull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) #define RHF_EGR_INDEX_SMASK (RHF_EGR_INDEX_MASK << RHF_EGR_INDEX_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define RHF_DC_INFO_SHIFT	27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define RHF_DC_INFO_MASK	0x1ull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define RHF_DC_INFO_SMASK (RHF_DC_INFO_MASK << RHF_DC_INFO_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define RHF_RCV_SEQ_SHIFT	28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define RHF_RCV_SEQ_MASK	0xfull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define RHF_RCV_SEQ_SMASK (RHF_RCV_SEQ_MASK << RHF_RCV_SEQ_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) #define RHF_EGR_OFFSET_SHIFT	32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define RHF_EGR_OFFSET_MASK	0xfffull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define RHF_EGR_OFFSET_SMASK (RHF_EGR_OFFSET_MASK << RHF_EGR_OFFSET_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define RHF_HDRQ_OFFSET_SHIFT	44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define RHF_HDRQ_OFFSET_MASK	0x1ffull
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) #define RHF_HDRQ_OFFSET_SMASK (RHF_HDRQ_OFFSET_MASK << RHF_HDRQ_OFFSET_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #define RHF_K_HDR_LEN_ERR	(0x1ull << 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #define RHF_DC_UNC_ERR		(0x1ull << 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #define RHF_DC_ERR		(0x1ull << 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) #define RHF_RCV_TYPE_ERR_SHIFT	56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) #define RHF_RCV_TYPE_ERR_MASK	0x7ul
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #define RHF_RCV_TYPE_ERR_SMASK (RHF_RCV_TYPE_ERR_MASK << RHF_RCV_TYPE_ERR_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #define RHF_TID_ERR		(0x1ull << 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define RHF_LEN_ERR		(0x1ull << 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) #define RHF_ECC_ERR		(0x1ull << 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) #define RHF_RESERVED		(0x1ull << 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #define RHF_ICRC_ERR		(0x1ull << 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #define RHF_ERROR_SMASK 0xffe0000000000000ull		/* bits 63:53 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) /* RHF receive types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) #define RHF_RCV_TYPE_EXPECTED 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) #define RHF_RCV_TYPE_EAGER    1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #define RHF_RCV_TYPE_IB       2 /* normal IB, IB Raw, or IPv6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) #define RHF_RCV_TYPE_ERROR    3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define RHF_RCV_TYPE_BYPASS   4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define RHF_RCV_TYPE_INVALID5 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define RHF_RCV_TYPE_INVALID6 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define RHF_RCV_TYPE_INVALID7 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /* RHF receive type error - expected packet errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define RHF_RTE_EXPECTED_FLOW_SEQ_ERR	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define RHF_RTE_EXPECTED_FLOW_GEN_ERR	0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) /* RHF receive type error - eager packet errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) #define RHF_RTE_EAGER_NO_ERR		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) /* RHF receive type error - IB packet errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #define RHF_RTE_IB_NO_ERR		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) /* RHF receive type error - error packet errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #define RHF_RTE_ERROR_NO_ERR		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) #define RHF_RTE_ERROR_OP_CODE_ERR	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) #define RHF_RTE_ERROR_KHDR_MIN_LEN_ERR	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #define RHF_RTE_ERROR_KHDR_HCRC_ERR	0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) #define RHF_RTE_ERROR_KHDR_KVER_ERR	0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) #define RHF_RTE_ERROR_CONTEXT_ERR	0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) #define RHF_RTE_ERROR_KHDR_TID_ERR	0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* RHF receive type error - bypass packet errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) #define RHF_RTE_BYPASS_NO_ERR		0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) /* MAX RcvSEQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) #define RHF_MAX_SEQ 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) /* IB - LRH header constants */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) #define HFI1_LRH_GRH 0x0003      /* 1. word of IB LRH - next header: GRH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) #define HFI1_LRH_BTH 0x0002      /* 1. word of IB LRH - next header: BTH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) /* misc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define SC15_PACKET 0xF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #define SIZE_OF_CRC 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) #define SIZE_OF_LT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) #define MAX_16B_PADDING 12 /* CRC = 4, LT = 1, Pad = 0 to 7 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) #define LIM_MGMT_P_KEY       0x7FFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #define FULL_MGMT_P_KEY      0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #define DEFAULT_P_KEY LIM_MGMT_P_KEY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #define HFI1_PSM_IOC_BASE_SEQ 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) /* Number of BTH.PSN bits used for sequence number in expected rcvs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) #define HFI1_KDETH_BTH_SEQ_SHIFT 11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define HFI1_KDETH_BTH_SEQ_MASK (BIT(HFI1_KDETH_BTH_SEQ_SHIFT) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) static inline __u64 rhf_to_cpu(const __le32 *rbuf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	return __le64_to_cpu(*((__le64 *)rbuf));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) static inline u64 rhf_err_flags(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	return rhf & RHF_ERROR_SMASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) static inline u32 rhf_rcv_type(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	return (rhf >> RHF_RCV_TYPE_SHIFT) & RHF_RCV_TYPE_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) static inline u32 rhf_rcv_type_err(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	return (rhf >> RHF_RCV_TYPE_ERR_SHIFT) & RHF_RCV_TYPE_ERR_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /* return size is in bytes, not DWORDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) static inline u32 rhf_pkt_len(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	return ((rhf & RHF_PKT_LEN_SMASK) >> RHF_PKT_LEN_SHIFT) << 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) static inline u32 rhf_egr_index(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	return (rhf >> RHF_EGR_INDEX_SHIFT) & RHF_EGR_INDEX_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) static inline u32 rhf_rcv_seq(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	return (rhf >> RHF_RCV_SEQ_SHIFT) & RHF_RCV_SEQ_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) /* returned offset is in DWORDS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) static inline u32 rhf_hdrq_offset(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	return (rhf >> RHF_HDRQ_OFFSET_SHIFT) & RHF_HDRQ_OFFSET_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) static inline u64 rhf_use_egr_bfr(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	return rhf & RHF_USE_EGR_BFR_SMASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) static inline u64 rhf_dc_info(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	return rhf & RHF_DC_INFO_SMASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) static inline u32 rhf_egr_buf_offset(u64 rhf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	return (rhf >> RHF_EGR_OFFSET_SHIFT) & RHF_EGR_OFFSET_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) #endif /* _COMMON_H */