xref: /freebsd/sys/dev/qlxge/qls_inline.h (revision 8d20be1e22095c27faf8fe8b2f0d089739cc742e)
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