qls_inline.h revision 252206
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: head/sys/dev/qlxge/qls_inline.h 252206 2013-06-25 17:50:22Z davidcs $ 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 36static __inline int 37qls_get_ifq_snd_maxlen(qla_host_t *ha) 38{ 39 return((NUM_TX_DESCRIPTORS - 1)); 40} 41 42static __inline uint32_t 43qls_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 74static __inline uint8_t * 75qls_get_mac_addr(qla_host_t *ha) 76{ 77 return (ha->mac_addr); 78} 79 80static __inline int 81qls_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 104static __inline void 105qls_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