1 #ifndef _LINUX_H 2 #define _LINUX_H 3 /* 4 * Copyright(c) 2015, 2016 Intel Corporation. 5 * 6 * This file is provided under a dual BSD/GPLv2 license. When using or 7 * redistributing this file, you may do so under either license. 8 * 9 * GPL LICENSE SUMMARY 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of version 2 of the GNU General Public License as 13 * published by the Free Software Foundation. 14 * 15 * This program is distributed in the hope that it will be useful, but 16 * WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * General Public License for more details. 19 * 20 * BSD LICENSE 21 * 22 * Redistribution and use in source and binary forms, with or without 23 * modification, are permitted provided that the following conditions 24 * are met: 25 * 26 * - Redistributions of source code must retain the above copyright 27 * notice, this list of conditions and the following disclaimer. 28 * - Redistributions in binary form must reproduce the above copyright 29 * notice, this list of conditions and the following disclaimer in 30 * the documentation and/or other materials provided with the 31 * distribution. 32 * - Neither the name of Intel Corporation nor the names of its 33 * contributors may be used to endorse or promote products derived 34 * from this software without specific prior written permission. 35 * 36 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 37 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 38 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 39 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 40 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 43 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 44 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 45 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 46 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 47 * 48 */ 49 50 /* 51 * This header file is for OPA-specific definitions which are 52 * required by the HFI driver, and which aren't yet in the Linux 53 * IB core. We'll collect these all here, then merge them into 54 * the kernel when that's convenient. 55 */ 56 57 /* OPA SMA attribute IDs */ 58 #define OPA_ATTRIB_ID_CONGESTION_INFO cpu_to_be16(0x008b) 59 #define OPA_ATTRIB_ID_HFI_CONGESTION_LOG cpu_to_be16(0x008f) 60 #define OPA_ATTRIB_ID_HFI_CONGESTION_SETTING cpu_to_be16(0x0090) 61 #define OPA_ATTRIB_ID_CONGESTION_CONTROL_TABLE cpu_to_be16(0x0091) 62 63 /* OPA PMA attribute IDs */ 64 #define OPA_PM_ATTRIB_ID_PORT_STATUS cpu_to_be16(0x0040) 65 #define OPA_PM_ATTRIB_ID_CLEAR_PORT_STATUS cpu_to_be16(0x0041) 66 #define OPA_PM_ATTRIB_ID_DATA_PORT_COUNTERS cpu_to_be16(0x0042) 67 #define OPA_PM_ATTRIB_ID_ERROR_PORT_COUNTERS cpu_to_be16(0x0043) 68 #define OPA_PM_ATTRIB_ID_ERROR_INFO cpu_to_be16(0x0044) 69 70 /* OPA status codes */ 71 #define OPA_PM_STATUS_REQUEST_TOO_LARGE cpu_to_be16(0x100) 72 73 static inline u8 port_states_to_logical_state(struct opa_port_states *ps) 74 { 75 return ps->portphysstate_portstate & OPA_PI_MASK_PORT_STATE; 76 } 77 78 static inline u8 port_states_to_phys_state(struct opa_port_states *ps) 79 { 80 return ((ps->portphysstate_portstate & 81 OPA_PI_MASK_PORT_PHYSICAL_STATE) >> 4) & 0xf; 82 } 83 84 /* 85 * OPA port physical states 86 * IB Volume 1, Table 146 PortInfo/IB Volume 2 Section 5.4.2(1) PortPhysState 87 * values are the same in OmniPath Architecture. OPA leverages some of the same 88 * concepts as InfiniBand, but has a few other states as well. 89 * 90 * When writing, only values 0-3 are valid, other values are ignored. 91 * When reading, 0 is reserved. 92 * 93 * Returned by the ibphys_portstate() routine. 94 */ 95 enum opa_port_phys_state { 96 /* Values 0-7 have the same meaning in OPA as in InfiniBand. */ 97 98 IB_PORTPHYSSTATE_NOP = 0, 99 /* 1 is reserved */ 100 IB_PORTPHYSSTATE_POLLING = 2, 101 IB_PORTPHYSSTATE_DISABLED = 3, 102 IB_PORTPHYSSTATE_TRAINING = 4, 103 IB_PORTPHYSSTATE_LINKUP = 5, 104 IB_PORTPHYSSTATE_LINK_ERROR_RECOVERY = 6, 105 IB_PORTPHYSSTATE_PHY_TEST = 7, 106 /* 8 is reserved */ 107 108 /* 109 * Offline: Port is quiet (transmitters disabled) due to lack of 110 * physical media, unsupported media, or transition between link up 111 * and next link up attempt 112 */ 113 OPA_PORTPHYSSTATE_OFFLINE = 9, 114 115 /* 10 is reserved */ 116 117 /* 118 * Phy_Test: Specific test patterns are transmitted, and receiver BER 119 * can be monitored. This facilitates signal integrity testing for the 120 * physical layer of the port. 121 */ 122 OPA_PORTPHYSSTATE_TEST = 11, 123 124 OPA_PORTPHYSSTATE_MAX = 11, 125 /* values 12-15 are reserved/ignored */ 126 }; 127 128 #endif /* _LINUX_H */