xref: /titanic_41/usr/src/uts/common/io/cxgbe/common/common.c (revision 6774dc07ebd5a9d69956f033d5ac5a68803bd66b)
1*56b2bdd1SGireesh Nagabhushana /*
2*56b2bdd1SGireesh Nagabhushana  * This file and its contents are supplied under the terms of the
3*56b2bdd1SGireesh Nagabhushana  * Common Development and Distribution License ("CDDL"), version 1.0.
4*56b2bdd1SGireesh Nagabhushana  * You may only use this file in accordance with the terms of version
5*56b2bdd1SGireesh Nagabhushana  * 1.0 of the CDDL.
6*56b2bdd1SGireesh Nagabhushana  *
7*56b2bdd1SGireesh Nagabhushana  * A full copy of the text of the CDDL should have accompanied this
8*56b2bdd1SGireesh Nagabhushana  * source. A copy of the CDDL is also available via the Internet at
9*56b2bdd1SGireesh Nagabhushana  * http://www.illumos.org/license/CDDL.
10*56b2bdd1SGireesh Nagabhushana  */
11*56b2bdd1SGireesh Nagabhushana 
12*56b2bdd1SGireesh Nagabhushana /*
13*56b2bdd1SGireesh Nagabhushana  * This file is part of the Chelsio T4 Ethernet driver.
14*56b2bdd1SGireesh Nagabhushana  *
15*56b2bdd1SGireesh Nagabhushana  * Copyright (C) 2005-2013 Chelsio Communications.  All rights reserved.
16*56b2bdd1SGireesh Nagabhushana  *
17*56b2bdd1SGireesh Nagabhushana  * This program is distributed in the hope that it will be useful, but WITHOUT
18*56b2bdd1SGireesh Nagabhushana  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19*56b2bdd1SGireesh Nagabhushana  * FITNESS FOR A PARTICULAR PURPOSE.  See the LICENSE file included in this
20*56b2bdd1SGireesh Nagabhushana  * release for licensing terms and conditions.
21*56b2bdd1SGireesh Nagabhushana  */
22*56b2bdd1SGireesh Nagabhushana 
23*56b2bdd1SGireesh Nagabhushana #include "common.h"
24*56b2bdd1SGireesh Nagabhushana 
25*56b2bdd1SGireesh Nagabhushana int
26*56b2bdd1SGireesh Nagabhushana is_offload(const struct adapter *adap)
27*56b2bdd1SGireesh Nagabhushana {
28*56b2bdd1SGireesh Nagabhushana 	return (adap->params.offload);
29*56b2bdd1SGireesh Nagabhushana }
30*56b2bdd1SGireesh Nagabhushana 
31*56b2bdd1SGireesh Nagabhushana unsigned int
32*56b2bdd1SGireesh Nagabhushana core_ticks_per_usec(const struct adapter *adap)
33*56b2bdd1SGireesh Nagabhushana {
34*56b2bdd1SGireesh Nagabhushana 	return (adap->params.vpd.cclk / 1000);
35*56b2bdd1SGireesh Nagabhushana }
36*56b2bdd1SGireesh Nagabhushana 
37*56b2bdd1SGireesh Nagabhushana int
38*56b2bdd1SGireesh Nagabhushana t4_wr_mbox(struct adapter *adap, int mbox, const void *cmd, int size, void *rpl)
39*56b2bdd1SGireesh Nagabhushana {
40*56b2bdd1SGireesh Nagabhushana 	return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, true));
41*56b2bdd1SGireesh Nagabhushana }
42*56b2bdd1SGireesh Nagabhushana 
43*56b2bdd1SGireesh Nagabhushana unsigned int
44*56b2bdd1SGireesh Nagabhushana us_to_core_ticks(const struct adapter *adap, unsigned int us)
45*56b2bdd1SGireesh Nagabhushana {
46*56b2bdd1SGireesh Nagabhushana 	return ((us * adap->params.vpd.cclk) / 1000);
47*56b2bdd1SGireesh Nagabhushana }
48*56b2bdd1SGireesh Nagabhushana 
49*56b2bdd1SGireesh Nagabhushana unsigned int
50*56b2bdd1SGireesh Nagabhushana core_ticks_to_us(const struct adapter *adapter, unsigned int ticks)
51*56b2bdd1SGireesh Nagabhushana {
52*56b2bdd1SGireesh Nagabhushana 	/* add Core Clock / 2 to round ticks to nearest uS */
53*56b2bdd1SGireesh Nagabhushana 	return ((ticks * 1000 + adapter->params.vpd.cclk/2) /
54*56b2bdd1SGireesh Nagabhushana 	    adapter->params.vpd.cclk);
55*56b2bdd1SGireesh Nagabhushana }
56*56b2bdd1SGireesh Nagabhushana 
57*56b2bdd1SGireesh Nagabhushana unsigned int
58*56b2bdd1SGireesh Nagabhushana dack_ticks_to_usec(const struct adapter *adap, unsigned int ticks)
59*56b2bdd1SGireesh Nagabhushana {
60*56b2bdd1SGireesh Nagabhushana 	return ((ticks << adap->params.tp.dack_re) / core_ticks_per_usec(adap));
61*56b2bdd1SGireesh Nagabhushana }
62*56b2bdd1SGireesh Nagabhushana 
63*56b2bdd1SGireesh Nagabhushana int
64*56b2bdd1SGireesh Nagabhushana is_bypass(const adapter_t *adap)
65*56b2bdd1SGireesh Nagabhushana {
66*56b2bdd1SGireesh Nagabhushana 	return (adap->params.bypass);
67*56b2bdd1SGireesh Nagabhushana }
68*56b2bdd1SGireesh Nagabhushana 
69*56b2bdd1SGireesh Nagabhushana int
70*56b2bdd1SGireesh Nagabhushana is_bypass_device(int device)
71*56b2bdd1SGireesh Nagabhushana {
72*56b2bdd1SGireesh Nagabhushana 	/* TODO - this should be set based upon device capabilities */
73*56b2bdd1SGireesh Nagabhushana 	switch (device) {
74*56b2bdd1SGireesh Nagabhushana #ifdef CONFIG_CHELSIO_BYPASS
75*56b2bdd1SGireesh Nagabhushana 	case 0x440b:
76*56b2bdd1SGireesh Nagabhushana 	case 0x440c:
77*56b2bdd1SGireesh Nagabhushana 		return (1);
78*56b2bdd1SGireesh Nagabhushana #endif
79*56b2bdd1SGireesh Nagabhushana 
80*56b2bdd1SGireesh Nagabhushana 	default:
81*56b2bdd1SGireesh Nagabhushana 		return (0);
82*56b2bdd1SGireesh Nagabhushana 	}
83*56b2bdd1SGireesh Nagabhushana }
84*56b2bdd1SGireesh Nagabhushana 
85*56b2bdd1SGireesh Nagabhushana int
86*56b2bdd1SGireesh Nagabhushana t4_wait_op_done(struct adapter *adapter, int reg, u32 mask, int polarity,
87*56b2bdd1SGireesh Nagabhushana     int attempts, int delay)
88*56b2bdd1SGireesh Nagabhushana {
89*56b2bdd1SGireesh Nagabhushana 	return (t4_wait_op_done_val(adapter, reg, mask, polarity, attempts,
90*56b2bdd1SGireesh Nagabhushana 	    delay, NULL));
91*56b2bdd1SGireesh Nagabhushana }
92*56b2bdd1SGireesh Nagabhushana 
93*56b2bdd1SGireesh Nagabhushana int
94*56b2bdd1SGireesh Nagabhushana t4_wr_mbox_ns(struct adapter *adap, int mbox, const void *cmd, int size,
95*56b2bdd1SGireesh Nagabhushana     void *rpl)
96*56b2bdd1SGireesh Nagabhushana {
97*56b2bdd1SGireesh Nagabhushana 	return (t4_wr_mbox_meat(adap, mbox, cmd, size, rpl, false));
98*56b2bdd1SGireesh Nagabhushana }
99