Mercurial > illumos > illumos-gate
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 |
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 } |