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$
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