qls_inline.h revision 252206
1252206Sdavidcs/* 2252206Sdavidcs * Copyright (c) 2013-2014 Qlogic Corporation 3252206Sdavidcs * All rights reserved. 4252206Sdavidcs * 5252206Sdavidcs * Redistribution and use in source and binary forms, with or without 6252206Sdavidcs * modification, are permitted provided that the following conditions 7252206Sdavidcs * are met: 8252206Sdavidcs * 9252206Sdavidcs * 1. Redistributions of source code must retain the above copyright 10252206Sdavidcs * notice, this list of conditions and the following disclaimer. 11252206Sdavidcs * 2. Redistributions in binary form must reproduce the above copyright 12252206Sdavidcs * notice, this list of conditions and the following disclaimer in the 13252206Sdavidcs * documentation and/or other materials provided with the distribution. 14252206Sdavidcs * 15252206Sdavidcs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16252206Sdavidcs * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17252206Sdavidcs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18252206Sdavidcs * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19252206Sdavidcs * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20252206Sdavidcs * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21252206Sdavidcs * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22252206Sdavidcs * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23252206Sdavidcs * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24252206Sdavidcs * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25252206Sdavidcs * POSSIBILITY OF SUCH DAMAGE. 26252206Sdavidcs * 27252206Sdavidcs * $FreeBSD: head/sys/dev/qlxge/qls_inline.h 252206 2013-06-25 17:50:22Z davidcs $ 28252206Sdavidcs */ 29252206Sdavidcs/* 30252206Sdavidcs * File: qls_inline.h 31252206Sdavidcs * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 32252206Sdavidcs */ 33252206Sdavidcs#ifndef _QLS_INLINE_H_ 34252206Sdavidcs#define _QLS_INLINE_H_ 35252206Sdavidcs 36252206Sdavidcsstatic __inline int 37252206Sdavidcsqls_get_ifq_snd_maxlen(qla_host_t *ha) 38252206Sdavidcs{ 39252206Sdavidcs return((NUM_TX_DESCRIPTORS - 1)); 40252206Sdavidcs} 41252206Sdavidcs 42252206Sdavidcsstatic __inline uint32_t 43252206Sdavidcsqls_get_optics(qla_host_t *ha) 44252206Sdavidcs{ 45252206Sdavidcs uint32_t link_speed = 0; 46252206Sdavidcs 47252206Sdavidcs if (ha->link_up) { 48252206Sdavidcs switch ((ha->link_hw_info & 0xF0)) { 49252206Sdavidcs case (0x01 << 4): 50252206Sdavidcs case (0x02 << 4): 51252206Sdavidcs case (0x03 << 4): 52252206Sdavidcs link_speed = (IFM_10G_LR | IFM_10G_SR); 53252206Sdavidcs break; 54252206Sdavidcs 55252206Sdavidcs case (0x04 << 4): 56252206Sdavidcs case (0x05 << 4): 57252206Sdavidcs case (0x06 << 4): 58252206Sdavidcs link_speed = IFM_10G_TWINAX; 59252206Sdavidcs break; 60252206Sdavidcs 61252206Sdavidcs case (0x07 << 4): 62252206Sdavidcs case (0x08 << 4): 63252206Sdavidcs case (0x09 << 4): 64252206Sdavidcs case (0x0A << 4): 65252206Sdavidcs case (0x0B << 4): 66252206Sdavidcs link_speed = IFM_1000_SX; 67252206Sdavidcs break; 68252206Sdavidcs } 69252206Sdavidcs } 70252206Sdavidcs 71252206Sdavidcs return(link_speed); 72252206Sdavidcs} 73252206Sdavidcs 74252206Sdavidcsstatic __inline uint8_t * 75252206Sdavidcsqls_get_mac_addr(qla_host_t *ha) 76252206Sdavidcs{ 77252206Sdavidcs return (ha->mac_addr); 78252206Sdavidcs} 79252206Sdavidcs 80252206Sdavidcsstatic __inline int 81252206Sdavidcsqls_lock(qla_host_t *ha, const char *str, uint32_t no_delay) 82252206Sdavidcs{ 83252206Sdavidcs int ret = -1; 84252206Sdavidcs 85252206Sdavidcs while (1) { 86252206Sdavidcs mtx_lock(&ha->hw_lock); 87252206Sdavidcs if (!ha->hw_lock_held) { 88252206Sdavidcs ha->hw_lock_held = 1; 89252206Sdavidcs ha->qla_lock = str; 90252206Sdavidcs ret = 0; 91252206Sdavidcs mtx_unlock(&ha->hw_lock); 92252206Sdavidcs break; 93252206Sdavidcs } 94252206Sdavidcs mtx_unlock(&ha->hw_lock); 95252206Sdavidcs 96252206Sdavidcs if (no_delay) 97252206Sdavidcs break; 98252206Sdavidcs else 99252206Sdavidcs qls_mdelay(__func__, 1); 100252206Sdavidcs } 101252206Sdavidcs return (ret); 102252206Sdavidcs} 103252206Sdavidcs 104252206Sdavidcsstatic __inline void 105252206Sdavidcsqls_unlock(qla_host_t *ha, const char *str) 106252206Sdavidcs{ 107252206Sdavidcs mtx_lock(&ha->hw_lock); 108252206Sdavidcs ha->hw_lock_held = 0; 109252206Sdavidcs ha->qla_unlock = str; 110252206Sdavidcs mtx_unlock(&ha->hw_lock); 111252206Sdavidcs} 112252206Sdavidcs 113252206Sdavidcs#endif /* #ifndef _QLS_INLINE_H_ */ 114