1 /* 2 * Copyright (c) 2013-2014 Qlogic Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 /* 30 * File: qls_inline.h 31 * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 32 */ 33 #ifndef _QLS_INLINE_H_ 34 #define _QLS_INLINE_H_ 35 36 static __inline int 37 qls_get_ifq_snd_maxlen(qla_host_t *ha) 38 { 39 return((NUM_TX_DESCRIPTORS - 1)); 40 } 41 42 static __inline uint32_t 43 qls_get_optics(qla_host_t *ha) 44 { 45 uint32_t link_speed = 0; 46 47 if (ha->link_up) { 48 switch ((ha->link_hw_info & 0xF0)) { 49 case (0x01 << 4): 50 case (0x02 << 4): 51 case (0x03 << 4): 52 link_speed = (IFM_10G_LR | IFM_10G_SR); 53 break; 54 55 case (0x04 << 4): 56 case (0x05 << 4): 57 case (0x06 << 4): 58 link_speed = IFM_10G_TWINAX; 59 break; 60 61 case (0x07 << 4): 62 case (0x08 << 4): 63 case (0x09 << 4): 64 case (0x0A << 4): 65 case (0x0B << 4): 66 link_speed = IFM_1000_SX; 67 break; 68 } 69 } 70 71 return(link_speed); 72 } 73 74 static __inline uint8_t * 75 qls_get_mac_addr(qla_host_t *ha) 76 { 77 return (ha->mac_addr); 78 } 79 80 static __inline int 81 qls_lock(qla_host_t *ha, const char *str, uint32_t no_delay) 82 { 83 int ret = -1; 84 85 while (1) { 86 mtx_lock(&ha->hw_lock); 87 if (!ha->hw_lock_held) { 88 ha->hw_lock_held = 1; 89 ha->qla_lock = str; 90 ret = 0; 91 mtx_unlock(&ha->hw_lock); 92 break; 93 } 94 mtx_unlock(&ha->hw_lock); 95 96 if (no_delay) 97 break; 98 else 99 qls_mdelay(__func__, 1); 100 } 101 return (ret); 102 } 103 104 static __inline void 105 qls_unlock(qla_host_t *ha, const char *str) 106 { 107 mtx_lock(&ha->hw_lock); 108 ha->hw_lock_held = 0; 109 ha->qla_unlock = str; 110 mtx_unlock(&ha->hw_lock); 111 } 112 113 #endif /* #ifndef _QLS_INLINE_H_ */ 114