annotate usr/src/uts/common/io/cxgbe/common/common.c @ 14029:11aad50aea32

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