FreeBSD kernel CXGB device code
cxgb_t3_hw.c
Go to the documentation of this file.
1/**************************************************************************
2SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3
4Copyright (c) 2007-2009, Chelsio Inc.
5All rights reserved.
6
7Redistribution and use in source and binary forms, with or without
8modification, are permitted provided that the following conditions are met:
9
10 1. Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12
13 2. Neither the name of the Chelsio Corporation nor the names of its
14 contributors may be used to endorse or promote products derived from
15 this software without specific prior written permission.
16
17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27POSSIBILITY OF SUCH DAMAGE.
28
29***************************************************************************/
30
31#include <sys/cdefs.h>
32__FBSDID("$FreeBSD$");
33
34
35#include <cxgb_include.h>
36
37#undef msleep
38#define msleep t3_os_sleep
39
55int t3_wait_op_done_val(adapter_t *adapter, int reg, u32 mask, int polarity,
56 int attempts, int delay, u32 *valp)
57{
58 while (1) {
59 u32 val = t3_read_reg(adapter, reg);
60
61 if (!!(val & mask) == polarity) {
62 if (valp)
63 *valp = val;
64 return 0;
65 }
66 if (--attempts == 0)
67 return -EAGAIN;
68 if (delay)
69 udelay(delay);
70 }
71}
72
84void t3_write_regs(adapter_t *adapter, const struct addr_val_pair *p, int n,
85 unsigned int offset)
86{
87 while (n--) {
88 t3_write_reg(adapter, p->reg_addr + offset, p->val);
89 p++;
90 }
91}
92
103void t3_set_reg_field(adapter_t *adapter, unsigned int addr, u32 mask, u32 val)
104{
105 u32 v = t3_read_reg(adapter, addr) & ~mask;
106
107 t3_write_reg(adapter, addr, v | val);
108 (void) t3_read_reg(adapter, addr); /* flush */
109}
110
123static void t3_read_indirect(adapter_t *adap, unsigned int addr_reg,
124 unsigned int data_reg, u32 *vals, unsigned int nregs,
125 unsigned int start_idx)
126{
127 while (nregs--) {
128 t3_write_reg(adap, addr_reg, start_idx);
129 *vals++ = t3_read_reg(adap, data_reg);
130 start_idx++;
131 }
132}
133
144int t3_mc7_bd_read(struct mc7 *mc7, unsigned int start, unsigned int n,
145 u64 *buf)
146{
147 static int shift[] = { 0, 0, 16, 24 };
148 static int step[] = { 0, 32, 16, 8 };
149
150 unsigned int size64 = mc7->size / 8; /* # of 64-bit words */
151 adapter_t *adap = mc7->adapter;
152
153 if (start >= size64 || start + n > size64)
154 return -EINVAL;
155
156 start *= (8 << mc7->width);
157 while (n--) {
158 int i;
159 u64 val64 = 0;
160
161 for (i = (1 << mc7->width) - 1; i >= 0; --i) {
162 int attempts = 10;
163 u32 val;
164
166 start);
167 t3_write_reg(adap, mc7->offset + A_MC7_BD_OP, 0);
168 val = t3_read_reg(adap, mc7->offset + A_MC7_BD_OP);
169 while ((val & F_BUSY) && attempts--)
170 val = t3_read_reg(adap,
172 if (val & F_BUSY)
173 return -EIO;
174
175 val = t3_read_reg(adap, mc7->offset + A_MC7_BD_DATA1);
176 if (mc7->width == 0) {
177 val64 = t3_read_reg(adap,
179 val64 |= (u64)val << 32;
180 } else {
181 if (mc7->width > 1)
182 val >>= shift[mc7->width];
183 val64 |= (u64)val << (step[mc7->width] * i);
184 }
185 start += 8;
186 }
187 *buf++ = val64;
188 }
189 return 0;
190}
191
192/*
193 * Low-level I2C read and write routines. These simply read and write a
194 * single byte with the option of indicating a "continue" if another operation
195 * is to be chained. Generally most code will use higher-level routines to
196 * read and write to I2C Slave Devices.
197 */
198#define I2C_ATTEMPTS 100
199
200/*
201 * Read an 8-bit value from the I2C bus. If the "chained" parameter is
202 * non-zero then a STOP bit will not be written after the read command. On
203 * error (the read timed out, etc.), a negative errno will be returned (e.g.
204 * -EAGAIN, etc.). On success, the 8-bit value read from the I2C bus is
205 * stored into the buffer *valp and the value of the I2C ACK bit is returned
206 * as a 0/1 value.
207 */
208int t3_i2c_read8(adapter_t *adapter, int chained, u8 *valp)
209{
210 int ret;
211 u32 opval;
214 F_I2C_READ | (chained ? F_I2C_CONT : 0));
216 I2C_ATTEMPTS, 10, &opval);
217 if (ret >= 0) {
218 ret = ((opval & F_I2C_ACK) == F_I2C_ACK);
220 }
222 return ret;
223}
224
225/*
226 * Write an 8-bit value to the I2C bus. If the "chained" parameter is
227 * non-zero, then a STOP bit will not be written after the write command. On
228 * error (the write timed out, etc.), a negative errno will be returned (e.g.
229 * -EAGAIN, etc.). On success, the value of the I2C ACK bit is returned as a
230 * 0/1 value.
231 */
232int t3_i2c_write8(adapter_t *adapter, int chained, u8 val)
233{
234 int ret;
235 u32 opval;
239 F_I2C_WRITE | (chained ? F_I2C_CONT : 0));
241 I2C_ATTEMPTS, 10, &opval);
242 if (ret >= 0)
243 ret = ((opval & F_I2C_ACK) == F_I2C_ACK);
245 return ret;
246}
247
248/*
249 * Initialize MI1.
250 */
251static void mi1_init(adapter_t *adap, const struct adapter_info *ai)
252{
253 u32 clkdiv = adap->params.vpd.cclk / (2 * adap->params.vpd.mdc) - 1;
254 u32 val = F_PREEN | V_CLKDIV(clkdiv);
255
256 t3_write_reg(adap, A_MI1_CFG, val);
257}
258
259#define MDIO_ATTEMPTS 20
260
261/*
262 * MI1 read/write operations for clause 22 PHYs.
263 */
264int t3_mi1_read(adapter_t *adapter, int phy_addr, int mmd_addr,
265 int reg_addr, unsigned int *valp)
266{
267 int ret;
268 u32 addr = V_REGADDR(reg_addr) | V_PHYADDR(phy_addr);
269
270 if (mmd_addr)
271 return -EINVAL;
272
278 if (!ret)
281 return ret;
282}
283
284int t3_mi1_write(adapter_t *adapter, int phy_addr, int mmd_addr,
285 int reg_addr, unsigned int val)
286{
287 int ret;
288 u32 addr = V_REGADDR(reg_addr) | V_PHYADDR(phy_addr);
289
290 if (mmd_addr)
291 return -EINVAL;
292
300 return ret;
301}
302
303static struct mdio_ops mi1_mdio_ops = {
306};
307
308/*
309 * MI1 read/write operations for clause 45 PHYs.
310 */
311static int mi1_ext_read(adapter_t *adapter, int phy_addr, int mmd_addr,
312 int reg_addr, unsigned int *valp)
313{
314 int ret;
315 u32 addr = V_REGADDR(mmd_addr) | V_PHYADDR(phy_addr);
316
320 t3_write_reg(adapter, A_MI1_DATA, reg_addr);
323 if (!ret) {
326 MDIO_ATTEMPTS, 10);
327 if (!ret)
329 }
331 return ret;
332}
333
334static int mi1_ext_write(adapter_t *adapter, int phy_addr, int mmd_addr,
335 int reg_addr, unsigned int val)
336{
337 int ret;
338 u32 addr = V_REGADDR(mmd_addr) | V_PHYADDR(phy_addr);
339
343 t3_write_reg(adapter, A_MI1_DATA, reg_addr);
346 if (!ret) {
350 MDIO_ATTEMPTS, 10);
351 }
353 return ret;
354}
355
356static struct mdio_ops mi1_mdio_ext_ops = {
359};
360
372int t3_mdio_change_bits(struct cphy *phy, int mmd, int reg, unsigned int clear,
373 unsigned int set)
374{
375 int ret;
376 unsigned int val;
377
378 ret = mdio_read(phy, mmd, reg, &val);
379 if (!ret) {
380 val &= ~clear;
381 ret = mdio_write(phy, mmd, reg, val | set);
382 }
383 return ret;
384}
385
396int t3_phy_reset(struct cphy *phy, int mmd, int wait)
397{
398 int err;
399 unsigned int ctl;
400
401 err = t3_mdio_change_bits(phy, mmd, MII_BMCR, BMCR_PDOWN, BMCR_RESET);
402 if (err || !wait)
403 return err;
404
405 do {
406 err = mdio_read(phy, mmd, MII_BMCR, &ctl);
407 if (err)
408 return err;
409 ctl &= BMCR_RESET;
410 if (ctl)
411 msleep(1);
412 } while (ctl && --wait);
413
414 return ctl ? -1 : 0;
415}
416
425int t3_phy_advertise(struct cphy *phy, unsigned int advert)
426{
427 int err;
428 unsigned int val = 0;
429
430 err = mdio_read(phy, 0, MII_CTRL1000, &val);
431 if (err)
432 return err;
433
435 if (advert & ADVERTISED_1000baseT_Half)
436 val |= ADVERTISE_1000HALF;
437 if (advert & ADVERTISED_1000baseT_Full)
438 val |= ADVERTISE_1000FULL;
439
440 err = mdio_write(phy, 0, MII_CTRL1000, val);
441 if (err)
442 return err;
443
444 val = 1;
445 if (advert & ADVERTISED_10baseT_Half)
446 val |= ADVERTISE_10HALF;
447 if (advert & ADVERTISED_10baseT_Full)
448 val |= ADVERTISE_10FULL;
449 if (advert & ADVERTISED_100baseT_Half)
450 val |= ADVERTISE_100HALF;
451 if (advert & ADVERTISED_100baseT_Full)
452 val |= ADVERTISE_100FULL;
453 if (advert & ADVERTISED_Pause)
454 val |= ADVERTISE_PAUSE_CAP;
455 if (advert & ADVERTISED_Asym_Pause)
457 return mdio_write(phy, 0, MII_ADVERTISE, val);
458}
459
468int t3_phy_advertise_fiber(struct cphy *phy, unsigned int advert)
469{
470 unsigned int val = 0;
471
472 if (advert & ADVERTISED_1000baseT_Half)
473 val |= ADVERTISE_1000XHALF;
474 if (advert & ADVERTISED_1000baseT_Full)
475 val |= ADVERTISE_1000XFULL;
476 if (advert & ADVERTISED_Pause)
478 if (advert & ADVERTISED_Asym_Pause)
480 return mdio_write(phy, 0, MII_ADVERTISE, val);
481}
482
492int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex)
493{
494 int err;
495 unsigned int ctl;
496
497 err = mdio_read(phy, 0, MII_BMCR, &ctl);
498 if (err)
499 return err;
500
501 if (speed >= 0) {
503 if (speed == SPEED_100)
504 ctl |= BMCR_SPEED100;
505 else if (speed == SPEED_1000)
506 ctl |= BMCR_SPEED1000;
507 }
508 if (duplex >= 0) {
509 ctl &= ~(BMCR_FULLDPLX | BMCR_ANENABLE);
510 if (duplex == DUPLEX_FULL)
511 ctl |= BMCR_FULLDPLX;
512 }
513 if (ctl & BMCR_SPEED1000) /* auto-negotiation required for GigE */
514 ctl |= BMCR_ANENABLE;
515 return mdio_write(phy, 0, MII_BMCR, ctl);
516}
517
519{
521}
522
524{
526}
527
529{
530 u32 val;
531
532 return mdio_read(phy, MDIO_DEV_PMA_PMD, LASI_STAT, &val);
533}
534
536{
537 unsigned int status;
538 int err = mdio_read(phy, MDIO_DEV_PMA_PMD, LASI_STAT, &status);
539
540 if (err)
541 return err;
542 return (status & 1) ? cphy_cause_link_change : 0;
543}
544
545static struct adapter_info t3_adap_info[] = {
546 { 1, 1, 0,
549 &mi1_mdio_ops, "Chelsio PE9000" },
550 { 1, 1, 0,
553 &mi1_mdio_ops, "Chelsio T302" },
554 { 1, 0, 0,
558 &mi1_mdio_ext_ops, "Chelsio T310" },
559 { 1, 1, 0,
564 &mi1_mdio_ext_ops, "Chelsio T320" },
565 { 4, 0, 0,
569 &mi1_mdio_ops, "Chelsio T304" },
570 { 0 },
571 { 1, 0, 0,
575 &mi1_mdio_ext_ops, "Chelsio T310" },
576 { 1, 0, 0,
580 &mi1_mdio_ext_ops, "Chelsio N320E-G2" },
581};
582
583/*
584 * Return the adapter_info structure with a given index. Out-of-range indices
585 * return NULL.
586 */
587const struct adapter_info *t3_get_adapter_info(unsigned int id)
588{
589 return id < ARRAY_SIZE(t3_adap_info) ? &t3_adap_info[id] : NULL;
590}
591
593 int (*phy_prep)(pinfo_t *pinfo, int phy_addr,
594 const struct mdio_ops *ops);
595};
596
597static struct port_type_info port_types[] = {
598 { NULL },
609};
610
611#define VPD_ENTRY(name, len) \
612 u8 name##_kword[2]; u8 name##_len; u8 name##_data[len]
613
614/*
615 * Partial EEPROM Vital Product Data structure. Includes only the ID and
616 * VPD-R sections.
617 */
618struct t3_vpd {
624 VPD_ENTRY(pn, 16); /* part number */
625 VPD_ENTRY(ec, ECNUM_LEN); /* EC level */
626 VPD_ENTRY(sn, SERNUM_LEN); /* serial number */
627 VPD_ENTRY(na, 12); /* MAC address base */
628 VPD_ENTRY(cclk, 6); /* core clock */
629 VPD_ENTRY(mclk, 6); /* mem clock */
630 VPD_ENTRY(uclk, 6); /* uP clk */
631 VPD_ENTRY(mdc, 6); /* MDIO clk */
632 VPD_ENTRY(mt, 2); /* mem timing */
633 VPD_ENTRY(xaui0cfg, 6); /* XAUI0 config */
634 VPD_ENTRY(xaui1cfg, 6); /* XAUI1 config */
635 VPD_ENTRY(port0, 2); /* PHY0 complex */
636 VPD_ENTRY(port1, 2); /* PHY1 complex */
637 VPD_ENTRY(port2, 2); /* PHY2 complex */
638 VPD_ENTRY(port3, 2); /* PHY3 complex */
639 VPD_ENTRY(rv, 1); /* csum */
640 u32 pad; /* for multiple-of-4 sizing and alignment */
641};
642
643#define EEPROM_MAX_POLL 40
644#define EEPROM_STAT_ADDR 0x4000
645#define VPD_BASE 0xc00
646
659{
660 u16 val;
661 int attempts = EEPROM_MAX_POLL;
662 unsigned int base = adapter->params.pci.vpd_cap_addr;
663
664 if ((addr >= EEPROMSIZE && addr != EEPROM_STAT_ADDR) || (addr & 3))
665 return -EINVAL;
666
668 do {
669 udelay(10);
671 } while (!(val & PCI_VPD_ADDR_F) && --attempts);
672
673 if (!(val & PCI_VPD_ADDR_F)) {
674 CH_ERR(adapter, "reading EEPROM address 0x%x failed\n", addr);
675 return -EIO;
676 }
678 *data = le32_to_cpu(*data);
679 return 0;
680}
681
692{
693 u16 val;
694 int attempts = EEPROM_MAX_POLL;
695 unsigned int base = adapter->params.pci.vpd_cap_addr;
696
697 if ((addr >= EEPROMSIZE && addr != EEPROM_STAT_ADDR) || (addr & 3))
698 return -EINVAL;
699
701 cpu_to_le32(data));
703 (u16)addr | PCI_VPD_ADDR_F);
704 do {
705 msleep(1);
707 } while ((val & PCI_VPD_ADDR_F) && --attempts);
708
709 if (val & PCI_VPD_ADDR_F) {
710 CH_ERR(adapter, "write to EEPROM address 0x%x failed\n", addr);
711 return -EIO;
712 }
713 return 0;
714}
715
724{
725 return t3_seeprom_write(adapter, EEPROM_STAT_ADDR, enable ? 0xc : 0);
726}
727
728/*
729 * Convert a character holding a hex digit to a number.
730 */
731static unsigned int hex2int(unsigned char c)
732{
733 return isdigit(c) ? c - '0' : toupper(c) - 'A' + 10;
734}
735
744static int get_desc_len(adapter_t *adapter, u32 offset)
745{
746 u32 read_offset, tmp, shift, len = 0;
747 u8 tag, buf[8];
748 int ret;
749
750 read_offset = offset & 0xfffffffc;
751 shift = offset & 0x03;
752
753 ret = t3_seeprom_read(adapter, read_offset, &tmp);
754 if (ret < 0)
755 return ret;
756
757 *((u32 *)buf) = cpu_to_le32(tmp);
758
759 tag = buf[shift];
760 if (tag & 0x80) {
761 ret = t3_seeprom_read(adapter, read_offset + 4, &tmp);
762 if (ret < 0)
763 return ret;
764
765 *((u32 *)(&buf[4])) = cpu_to_le32(tmp);
766 len = (buf[shift + 1] & 0xff) +
767 ((buf[shift+2] << 8) & 0xff00) + 3;
768 } else
769 len = (tag & 0x07) + 1;
770
771 return len;
772}
773
781static int is_end_tag(adapter_t * adapter, u32 offset)
782{
783 u32 read_offset, shift, ret, tmp;
784 u8 buf[4];
785
786 read_offset = offset & 0xfffffffc;
787 shift = offset & 0x03;
788
789 ret = t3_seeprom_read(adapter, read_offset, &tmp);
790 if (ret)
791 return ret;
792 *((u32 *)buf) = cpu_to_le32(tmp);
793
794 if (buf[shift] == 0x78)
795 return 1;
796 else
797 return 0;
798}
799
809{
810 u32 len=0, offset;
811 int inc, ret;
812
813 offset = vpd->offset;
814
815 while (offset < (vpd->offset + MAX_VPD_BYTES)) {
816 ret = is_end_tag(adapter, offset);
817 if (ret < 0)
818 return ret;
819 else if (ret == 1)
820 break;
821
822 inc = get_desc_len(adapter, offset);
823 if (inc < 0)
824 return inc;
825 len += inc;
826 offset += inc;
827 }
828 return (len + 1);
829}
830
841{
842 u32 i, ret;
843
844 for (i = 0; i < vpd->len; i += 4) {
845 ret = t3_seeprom_read(adapter, vpd->offset + i,
846 (u32 *) &(vpd->data[i]));
847 if (ret)
848 return ret;
849 }
850
851 return 0;
852}
853
854
863{
864 int i, addr, ret;
865 struct t3_vpd vpd;
866
867 /*
868 * Card information is normally at VPD_BASE but some early cards had
869 * it at 0.
870 */
871 ret = t3_seeprom_read(adapter, VPD_BASE, (u32 *)&vpd);
872 if (ret)
873 return ret;
874 addr = vpd.id_tag == 0x82 ? VPD_BASE : 0;
875
876 for (i = 0; i < sizeof(vpd); i += 4) {
877 ret = t3_seeprom_read(adapter, addr + i,
878 (u32 *)((u8 *)&vpd + i));
879 if (ret)
880 return ret;
881 }
882
883 p->cclk = simple_strtoul(vpd.cclk_data, NULL, 10);
884 p->mclk = simple_strtoul(vpd.mclk_data, NULL, 10);
885 p->uclk = simple_strtoul(vpd.uclk_data, NULL, 10);
886 p->mdc = simple_strtoul(vpd.mdc_data, NULL, 10);
887 p->mem_timing = simple_strtoul(vpd.mt_data, NULL, 10);
888 memcpy(p->sn, vpd.sn_data, SERNUM_LEN);
889 memcpy(p->ec, vpd.ec_data, ECNUM_LEN);
890
891 /* Old eeproms didn't have port information */
892 if (adapter->params.rev == 0 && !vpd.port0_data[0]) {
893 p->port_type[0] = uses_xaui(adapter) ? 1 : 2;
894 p->port_type[1] = uses_xaui(adapter) ? 6 : 2;
895 } else {
896 p->port_type[0] = (u8)hex2int(vpd.port0_data[0]);
897 p->port_type[1] = (u8)hex2int(vpd.port1_data[0]);
898 p->port_type[2] = (u8)hex2int(vpd.port2_data[0]);
899 p->port_type[3] = (u8)hex2int(vpd.port3_data[0]);
900 p->xauicfg[0] = simple_strtoul(vpd.xaui0cfg_data, NULL, 16);
901 p->xauicfg[1] = simple_strtoul(vpd.xaui1cfg_data, NULL, 16);
902 }
903
904 for (i = 0; i < 6; i++)
905 p->eth_base[i] = hex2int(vpd.na_data[2 * i]) * 16 +
906 hex2int(vpd.na_data[2 * i + 1]);
907 return 0;
908}
909
910/* BIOS boot header */
911typedef struct boot_header_s {
912 u8 signature[2]; /* signature */
913 u8 length; /* image length (include header) */
914 u8 offset[4]; /* initialization vector */
915 u8 reserved[19]; /* reserved */
916 u8 exheader[2]; /* offset to expansion header */
918
919/* serial flash and firmware constants */
920enum {
921 SF_ATTEMPTS = 5, /* max retries for SF1 operations */
922 SF_SEC_SIZE = 64 * 1024, /* serial flash sector size */
923 SF_SIZE = SF_SEC_SIZE * 8, /* serial flash size */
924
925 /* flash command opcodes */
926 SF_PROG_PAGE = 2, /* program page */
927 SF_WR_DISABLE = 4, /* disable writes */
928 SF_RD_STATUS = 5, /* read status register */
929 SF_WR_ENABLE = 6, /* enable writes */
930 SF_RD_DATA_FAST = 0xb, /* read flash */
931 SF_ERASE_SECTOR = 0xd8, /* erase sector */
932
933 FW_FLASH_BOOT_ADDR = 0x70000, /* start address of FW in flash */
934 FW_VERS_ADDR = 0x7fffc, /* flash address holding FW version */
935 FW_VERS_ADDR_PRE8 = 0x77ffc,/* flash address holding FW version pre8 */
936 FW_MIN_SIZE = 8, /* at least version and csum */
939
940 BOOT_FLASH_BOOT_ADDR = 0x0,/* start address of boot image in flash */
941 BOOT_SIGNATURE = 0xaa55, /* signature of BIOS boot ROM */
942 BOOT_SIZE_INC = 512, /* image size measured in 512B chunks */
943 BOOT_MIN_SIZE = sizeof(boot_header_t), /* at least basic header */
944 BOOT_MAX_SIZE = 1024*BOOT_SIZE_INC /* 1 byte * length increment */
946
958static int sf1_read(adapter_t *adapter, unsigned int byte_cnt, int cont,
959 u32 *valp)
960{
961 int ret;
962
963 if (!byte_cnt || byte_cnt > 4)
964 return -EINVAL;
966 return -EBUSY;
967 t3_write_reg(adapter, A_SF_OP, V_CONT(cont) | V_BYTECNT(byte_cnt - 1));
969 if (!ret)
970 *valp = t3_read_reg(adapter, A_SF_DATA);
971 return ret;
972}
973
985static int sf1_write(adapter_t *adapter, unsigned int byte_cnt, int cont,
986 u32 val)
987{
988 if (!byte_cnt || byte_cnt > 4)
989 return -EINVAL;
991 return -EBUSY;
994 V_CONT(cont) | V_BYTECNT(byte_cnt - 1) | V_OP(1));
996}
997
1006static int flash_wait_op(adapter_t *adapter, int attempts, int delay)
1007{
1008 int ret;
1009 u32 status;
1010
1011 while (1) {
1012 if ((ret = sf1_write(adapter, 1, 1, SF_RD_STATUS)) != 0 ||
1013 (ret = sf1_read(adapter, 1, 0, &status)) != 0)
1014 return ret;
1015 if (!(status & 1))
1016 return 0;
1017 if (--attempts == 0)
1018 return -EAGAIN;
1019 if (delay)
1020 msleep(delay);
1021 }
1022}
1023
1037int t3_read_flash(adapter_t *adapter, unsigned int addr, unsigned int nwords,
1038 u32 *data, int byte_oriented)
1039{
1040 int ret;
1041
1042 if (addr + nwords * sizeof(u32) > SF_SIZE || (addr & 3))
1043 return -EINVAL;
1044
1045 addr = swab32(addr) | SF_RD_DATA_FAST;
1046
1047 if ((ret = sf1_write(adapter, 4, 1, addr)) != 0 ||
1048 (ret = sf1_read(adapter, 1, 1, data)) != 0)
1049 return ret;
1050
1051 for ( ; nwords; nwords--, data++) {
1052 ret = sf1_read(adapter, 4, nwords > 1, data);
1053 if (ret)
1054 return ret;
1055 if (byte_oriented)
1056 *data = htonl(*data);
1057 }
1058 return 0;
1059}
1060
1075static int t3_write_flash(adapter_t *adapter, unsigned int addr,
1076 unsigned int n, const u8 *data,
1077 int byte_oriented)
1078{
1079 int ret;
1080 u32 buf[64];
1081 unsigned int c, left, val, offset = addr & 0xff;
1082
1083 if (addr + n > SF_SIZE || offset + n > 256)
1084 return -EINVAL;
1085
1086 val = swab32(addr) | SF_PROG_PAGE;
1087
1088 if ((ret = sf1_write(adapter, 1, 0, SF_WR_ENABLE)) != 0 ||
1089 (ret = sf1_write(adapter, 4, 1, val)) != 0)
1090 return ret;
1091
1092 for (left = n; left; left -= c) {
1093 c = min(left, 4U);
1094 val = *(const u32*)data;
1095 data += c;
1096 if (byte_oriented)
1097 val = htonl(val);
1098
1099 ret = sf1_write(adapter, c, c != left, val);
1100 if (ret)
1101 return ret;
1102 }
1103 if ((ret = flash_wait_op(adapter, 5, 1)) != 0)
1104 return ret;
1105
1106 /* Read the page to verify the write succeeded */
1107 ret = t3_read_flash(adapter, addr & ~0xff, ARRAY_SIZE(buf), buf,
1108 byte_oriented);
1109 if (ret)
1110 return ret;
1111
1112 if (memcmp(data - n, (u8 *)buf + offset, n))
1113 return -EIO;
1114 return 0;
1115}
1116
1125{
1126 int ret;
1127
1128 /* Get version loaded in SRAM */
1131 1, 1, 5, 1);
1132 if (ret)
1133 return ret;
1134
1136
1137 return 0;
1138}
1139
1146{
1147 int ret;
1148 u32 vers;
1149 unsigned int major, minor;
1150
1151 if (adapter->params.rev == T3_REV_A)
1152 return 0;
1153
1154
1155 ret = t3_get_tp_version(adapter, &vers);
1156 if (ret)
1157 return ret;
1158
1160
1161 major = G_TP_VERSION_MAJOR(vers);
1162 minor = G_TP_VERSION_MINOR(vers);
1163
1164 if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR)
1165 return 0;
1166 else {
1167 CH_ERR(adapter, "found wrong TP version (%u.%u), "
1168 "driver compiled for version %d.%d\n", major, minor,
1170 }
1171 return -EINVAL;
1172}
1173
1184int t3_check_tpsram(adapter_t *adapter, const u8 *tp_sram, unsigned int size)
1185{
1186 u32 csum;
1187 unsigned int i;
1188 const u32 *p = (const u32 *)tp_sram;
1189
1190 /* Verify checksum */
1191 for (csum = 0, i = 0; i < size / sizeof(csum); i++)
1192 csum += ntohl(p[i]);
1193 if (csum != 0xffffffff) {
1194 CH_ERR(adapter, "corrupted protocol SRAM image, checksum %u\n",
1195 csum);
1196 return -EINVAL;
1197 }
1198
1199 return 0;
1200}
1201
1206
1217{
1218 int ret = t3_read_flash(adapter, FW_VERS_ADDR, 1, vers, 0);
1219 if (!ret && *vers != 0xffffffff)
1220 return 0;
1221 else
1222 return t3_read_flash(adapter, FW_VERS_ADDR_PRE8, 1, vers, 0);
1223}
1224
1233{
1234 int ret;
1235 u32 vers;
1236 unsigned int type, major, minor;
1237
1238 ret = t3_get_fw_version(adapter, &vers);
1239 if (ret)
1240 return ret;
1241
1242 type = G_FW_VERSION_TYPE(vers);
1243 major = G_FW_VERSION_MAJOR(vers);
1244 minor = G_FW_VERSION_MINOR(vers);
1245
1246 if (type == FW_VERSION_T3 && major == FW_VERSION_MAJOR &&
1247 minor == FW_VERSION_MINOR)
1248 return 0;
1249
1250 else if (major != FW_VERSION_MAJOR || minor < FW_VERSION_MINOR)
1251 CH_WARN(adapter, "found old FW minor version(%u.%u), "
1252 "driver compiled for version %u.%u\n", major, minor,
1254 else {
1255 CH_WARN(adapter, "found newer FW version(%u.%u), "
1256 "driver compiled for version %u.%u\n", major, minor,
1258 return 0;
1259 }
1260 return -EINVAL;
1261}
1262
1271static int t3_flash_erase_sectors(adapter_t *adapter, int start, int end)
1272{
1273 while (start <= end) {
1274 int ret;
1275
1276 if ((ret = sf1_write(adapter, 1, 0, SF_WR_ENABLE)) != 0 ||
1277 (ret = sf1_write(adapter, 4, 0,
1278 SF_ERASE_SECTOR | (start << 8))) != 0 ||
1279 (ret = flash_wait_op(adapter, 5, 500)) != 0)
1280 return ret;
1281 start++;
1282 }
1283 return 0;
1284}
1285
1286/*
1287 * t3_load_fw - download firmware
1288 * @adapter: the adapter
1289 * @fw_data: the firmware image to write
1290 * @size: image size
1291 *
1292 * Write the supplied firmware image to the card's serial flash.
1293 * The FW image has the following sections: @size - 8 bytes of code and
1294 * data, followed by 4 bytes of FW version, followed by the 32-bit
1295 * 1's complement checksum of the whole image.
1296 */
1297int t3_load_fw(adapter_t *adapter, const u8 *fw_data, unsigned int size)
1298{
1299 u32 version, csum, fw_version_addr;
1300 unsigned int i;
1301 const u32 *p = (const u32 *)fw_data;
1302 int ret, addr, fw_sector = FW_FLASH_BOOT_ADDR >> 16;
1303
1304 if ((size & 3) || size < FW_MIN_SIZE)
1305 return -EINVAL;
1306 if (size - 8 > FW_MAX_SIZE)
1307 return -EFBIG;
1308
1309 version = ntohl(*(const u32 *)(fw_data + size - 8));
1310 if (G_FW_VERSION_MAJOR(version) < 8) {
1311
1312 fw_version_addr = FW_VERS_ADDR_PRE8;
1313
1314 if (size - 8 > FW_MAX_SIZE_PRE8)
1315 return -EFBIG;
1316 } else
1317 fw_version_addr = FW_VERS_ADDR;
1318
1319 for (csum = 0, i = 0; i < size / sizeof(csum); i++)
1320 csum += ntohl(p[i]);
1321 if (csum != 0xffffffff) {
1322 CH_ERR(adapter, "corrupted firmware image, checksum %u\n",
1323 csum);
1324 return -EINVAL;
1325 }
1326
1327 ret = t3_flash_erase_sectors(adapter, fw_sector, fw_sector);
1328 if (ret)
1329 goto out;
1330
1331 size -= 8; /* trim off version and checksum */
1332 for (addr = FW_FLASH_BOOT_ADDR; size; ) {
1333 unsigned int chunk_size = min(size, 256U);
1334
1335 ret = t3_write_flash(adapter, addr, chunk_size, fw_data, 1);
1336 if (ret)
1337 goto out;
1338
1339 addr += chunk_size;
1340 fw_data += chunk_size;
1341 size -= chunk_size;
1342 }
1343
1344 ret = t3_write_flash(adapter, fw_version_addr, 4, fw_data, 1);
1345out:
1346 if (ret)
1347 CH_ERR(adapter, "firmware download failed, error %d\n", ret);
1348 return ret;
1349}
1350
1351/*
1352 * t3_load_boot - download boot flash
1353 * @adapter: the adapter
1354 * @boot_data: the boot image to write
1355 * @size: image size
1356 *
1357 * Write the supplied boot image to the card's serial flash.
1358 * The boot image has the following sections: a 28-byte header and the
1359 * boot image.
1360 */
1361int t3_load_boot(adapter_t *adapter, u8 *boot_data, unsigned int size)
1362{
1363 boot_header_t *header = (boot_header_t *)boot_data;
1364 int ret;
1365 unsigned int addr;
1366 unsigned int boot_sector = BOOT_FLASH_BOOT_ADDR >> 16;
1367 unsigned int boot_end = (BOOT_FLASH_BOOT_ADDR + size - 1) >> 16;
1368
1369 /*
1370 * Perform some primitive sanity testing to avoid accidentally
1371 * writing garbage over the boot sectors. We ought to check for
1372 * more but it's not worth it for now ...
1373 */
1374 if (size < BOOT_MIN_SIZE || size > BOOT_MAX_SIZE) {
1375 CH_ERR(adapter, "boot image too small/large\n");
1376 return -EFBIG;
1377 }
1378 if (le16_to_cpu(*(u16*)header->signature) != BOOT_SIGNATURE) {
1379 CH_ERR(adapter, "boot image missing signature\n");
1380 return -EINVAL;
1381 }
1382 if (header->length * BOOT_SIZE_INC != size) {
1383 CH_ERR(adapter, "boot image header length != image length\n");
1384 return -EINVAL;
1385 }
1386
1387 ret = t3_flash_erase_sectors(adapter, boot_sector, boot_end);
1388 if (ret)
1389 goto out;
1390
1391 for (addr = BOOT_FLASH_BOOT_ADDR; size; ) {
1392 unsigned int chunk_size = min(size, 256U);
1393
1394 ret = t3_write_flash(adapter, addr, chunk_size, boot_data, 0);
1395 if (ret)
1396 goto out;
1397
1398 addr += chunk_size;
1399 boot_data += chunk_size;
1400 size -= chunk_size;
1401 }
1402
1403out:
1404 if (ret)
1405 CH_ERR(adapter, "boot image download failed, error %d\n", ret);
1406 return ret;
1407}
1408
1409#define CIM_CTL_BASE 0x2000
1410
1420int t3_cim_ctl_blk_read(adapter_t *adap, unsigned int addr, unsigned int n,
1421 unsigned int *valp)
1422{
1423 int ret = 0;
1424
1426 return -EBUSY;
1427
1428 for ( ; !ret && n--; addr += 4) {
1431 0, 5, 2);
1432 if (!ret)
1433 *valp++ = t3_read_reg(adap, A_CIM_HOST_ACC_DATA);
1434 }
1435 return ret;
1436}
1437
1438static void t3_gate_rx_traffic(struct cmac *mac, u32 *rx_cfg,
1439 u32 *rx_hash_high, u32 *rx_hash_low)
1440{
1441 /* stop Rx unicast traffic */
1443
1444 /* stop broadcast, multicast, promiscuous mode traffic */
1445 *rx_cfg = t3_read_reg(mac->adapter, A_XGM_RX_CFG + mac->offset);
1448 F_DISBCAST);
1449
1450 *rx_hash_high = t3_read_reg(mac->adapter, A_XGM_RX_HASH_HIGH +
1451 mac->offset);
1453
1454 *rx_hash_low = t3_read_reg(mac->adapter, A_XGM_RX_HASH_LOW +
1455 mac->offset);
1457
1458 /* Leave time to drain max RX fifo */
1459 msleep(1);
1460}
1461
1462static void t3_open_rx_traffic(struct cmac *mac, u32 rx_cfg,
1463 u32 rx_hash_high, u32 rx_hash_low)
1464{
1468 rx_cfg);
1470 rx_hash_high);
1472 rx_hash_low);
1473}
1474
1476{
1477 struct port_info *pi = adap2pinfo(adapter, port_id);
1478 struct cmac *mac = &pi->mac;
1479 uint32_t rx_cfg, rx_hash_high, rx_hash_low;
1480 int link_fault;
1481
1482 /* stop rx */
1483 t3_gate_rx_traffic(mac, &rx_cfg, &rx_hash_high, &rx_hash_low);
1485
1486 /* clear status and make sure intr is enabled */
1489
1490 /* restart rx */
1492 t3_open_rx_traffic(mac, rx_cfg, rx_hash_high, rx_hash_low);
1493
1495 return (link_fault & F_LINKFAULTCHANGE ? 1 : 0);
1496}
1497
1499{
1500 struct port_info *pi = adap2pinfo(adapter, port_id);
1501 struct cmac *mac = &pi->mac;
1502
1503 if (adapter->params.nports <= 2) {
1510 }
1511}
1512
1523{
1524 int link_ok, speed, duplex, fc, link_fault, link_state;
1525 struct port_info *pi = adap2pinfo(adapter, port_id);
1526 struct cphy *phy = &pi->phy;
1527 struct cmac *mac = &pi->mac;
1528 struct link_config *lc = &pi->link_config;
1529
1530 link_ok = lc->link_ok;
1531 speed = lc->speed;
1532 duplex = lc->duplex;
1533 fc = lc->fc;
1534 link_fault = 0;
1535
1536 phy->ops->get_link_status(phy, &link_state, &speed, &duplex, &fc);
1537 link_ok = (link_state == PHY_LINK_UP);
1538 if (link_state != PHY_LINK_PARTIAL)
1539 phy->rst = 0;
1540 else if (++phy->rst == 3) {
1541 phy->ops->reset(phy, 0);
1542 phy->rst = 0;
1543 }
1544
1545 if (link_ok == 0)
1546 pi->link_fault = LF_NO;
1547
1548 if (lc->requested_fc & PAUSE_AUTONEG)
1549 fc &= lc->requested_fc;
1550 else
1551 fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
1552
1553 /* Update mac speed before checking for link fault. */
1554 if (link_ok && speed >= 0 && lc->autoneg == AUTONEG_ENABLE &&
1555 (speed != lc->speed || duplex != lc->duplex || fc != lc->fc))
1557
1558 /*
1559 * Check for link faults if any of these is true:
1560 * a) A link fault is suspected, and PHY says link ok
1561 * b) PHY link transitioned from down -> up
1562 */
1563 if (adapter->params.nports <= 2 &&
1564 ((pi->link_fault && link_ok) || (!lc->link_ok && link_ok))) {
1565
1567 if (link_fault) {
1568 if (pi->link_fault != LF_YES) {
1570 pi->link_fault = LF_YES;
1571 }
1572
1573 if (uses_xaui(adapter)) {
1574 if (adapter->params.rev >= T3_REV_C)
1576 else
1578 }
1579
1580 /* Don't report link up */
1581 link_ok = 0;
1582 } else {
1583 /* clear faults here if this was a false alarm. */
1584 if (pi->link_fault == LF_MAYBE &&
1585 link_ok && lc->link_ok)
1587
1588 pi->link_fault = LF_NO;
1589 }
1590 }
1591
1592 if (link_ok == lc->link_ok && speed == lc->speed &&
1593 duplex == lc->duplex && fc == lc->fc)
1594 return; /* nothing changed */
1595
1596 lc->link_ok = (unsigned char)link_ok;
1597 lc->speed = speed < 0 ? SPEED_INVALID : speed;
1598 lc->duplex = duplex < 0 ? DUPLEX_INVALID : duplex;
1599 lc->fc = fc;
1600
1601 if (link_ok) {
1602
1603 /* down -> up, or up -> up with changed settings */
1604
1605 if (adapter->params.rev > 0 && uses_xaui(adapter)) {
1606
1607 if (adapter->params.rev >= T3_REV_C)
1609 else
1611
1614 }
1615
1616 /* disable TX FIFO drain */
1618 F_ENDROPPKT, 0);
1619
1622 F_CLRSTATS, 1);
1624
1625 } else {
1626
1627 /* up -> down */
1628
1629 if (adapter->params.rev > 0 && uses_xaui(adapter)) {
1632 }
1633
1635 if (adapter->params.nports <= 2) {
1638 F_XGM_INT, 0);
1639
1641
1642 /*
1643 * Make sure Tx FIFO continues to drain, even as rxen is
1644 * left high to help detect and indicate remote faults.
1645 */
1653 }
1654 }
1655
1657 mac->was_reset);
1658 mac->was_reset = 0;
1659}
1660
1674int t3_link_start(struct cphy *phy, struct cmac *mac, struct link_config *lc)
1675{
1676 unsigned int fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
1677
1678 lc->link_ok = 0;
1679 if (lc->supported & SUPPORTED_Autoneg) {
1681 if (fc) {
1683 if (fc & PAUSE_RX)
1685 }
1686
1688
1689 if (lc->autoneg == AUTONEG_DISABLE) {
1690 lc->speed = lc->requested_speed;
1691 lc->duplex = lc->requested_duplex;
1692 lc->fc = (unsigned char)fc;
1694 fc);
1695 /* Also disables autoneg */
1696 phy->ops->set_speed_duplex(phy, lc->speed, lc->duplex);
1697 /* PR 5666. Power phy up when doing an ifup */
1698 if (!is_10G(phy->adapter))
1699 phy->ops->power_down(phy, 0);
1700 } else
1702 } else {
1704 lc->fc = (unsigned char)fc;
1705 phy->ops->reset(phy, 0);
1706 }
1707 return 0;
1708}
1709
1718void t3_set_vlan_accel(adapter_t *adapter, unsigned int ports, int on)
1719{
1721 ports << S_VLANEXTRACTIONENABLE,
1722 on ? (ports << S_VLANEXTRACTIONENABLE) : 0);
1723}
1724
1726 unsigned int mask; /* bits to check in interrupt status */
1727 const char *msg; /* message to print or NULL */
1728 short stat_idx; /* stat counter to increment or -1 */
1729 unsigned short fatal; /* whether the condition reported is fatal */
1730};
1731
1747static int t3_handle_intr_status(adapter_t *adapter, unsigned int reg,
1748 unsigned int mask,
1749 const struct intr_info *acts,
1750 unsigned long *stats)
1751{
1752 int fatal = 0;
1753 unsigned int status = t3_read_reg(adapter, reg) & mask;
1754
1755 for ( ; acts->mask; ++acts) {
1756 if (!(status & acts->mask)) continue;
1757 if (acts->fatal) {
1758 fatal++;
1759 CH_ALERT(adapter, "%s (0x%x)\n",
1760 acts->msg, status & acts->mask);
1761 status &= ~acts->mask;
1762 } else if (acts->msg)
1763 CH_WARN(adapter, "%s (0x%x)\n",
1764 acts->msg, status & acts->mask);
1765 if (acts->stat_idx >= 0)
1766 stats[acts->stat_idx]++;
1767 }
1768 if (status) /* clear processed interrupts */
1769 t3_write_reg(adapter, reg, status);
1770 return fatal;
1771}
1772
1773#define SGE_INTR_MASK (F_RSPQDISABLED | \
1774 F_UC_REQ_FRAMINGERROR | F_R_REQ_FRAMINGERROR | \
1775 F_CPPARITYERROR | F_OCPARITYERROR | F_RCPARITYERROR | \
1776 F_IRPARITYERROR | V_ITPARITYERROR(M_ITPARITYERROR) | \
1777 V_FLPARITYERROR(M_FLPARITYERROR) | F_LODRBPARITYERROR | \
1778 F_HIDRBPARITYERROR | F_LORCQPARITYERROR | \
1779 F_HIRCQPARITYERROR)
1780#define MC5_INTR_MASK (F_PARITYERR | F_ACTRGNFULL | F_UNKNOWNCMD | \
1781 F_REQQPARERR | F_DISPQPARERR | F_DELACTEMPTY | \
1782 F_NFASRCHFAIL)
1783#define MC7_INTR_MASK (F_AE | F_UE | F_CE | V_PE(M_PE))
1784#define XGM_INTR_MASK (V_TXFIFO_PRTY_ERR(M_TXFIFO_PRTY_ERR) | \
1785 V_RXFIFO_PRTY_ERR(M_RXFIFO_PRTY_ERR) | \
1786 F_TXFIFO_UNDERRUN)
1787#define PCIX_INTR_MASK (F_MSTDETPARERR | F_SIGTARABT | F_RCVTARABT | \
1788 F_RCVMSTABT | F_SIGSYSERR | F_DETPARERR | \
1789 F_SPLCMPDIS | F_UNXSPLCMP | F_RCVSPLCMPERR | \
1790 F_DETCORECCERR | F_DETUNCECCERR | F_PIOPARERR | \
1791 V_WFPARERR(M_WFPARERR) | V_RFPARERR(M_RFPARERR) | \
1792 V_CFPARERR(M_CFPARERR) /* | V_MSIXPARERR(M_MSIXPARERR) */)
1793#define PCIE_INTR_MASK (F_UNXSPLCPLERRR | F_UNXSPLCPLERRC | F_PCIE_PIOPARERR |\
1794 F_PCIE_WFPARERR | F_PCIE_RFPARERR | F_PCIE_CFPARERR | \
1795 /* V_PCIE_MSIXPARERR(M_PCIE_MSIXPARERR) | */ \
1796 F_RETRYBUFPARERR | F_RETRYLUTPARERR | F_RXPARERR | \
1797 F_TXPARERR | V_BISTERR(M_BISTERR))
1798#define ULPRX_INTR_MASK (F_PARERRDATA | F_PARERRPCMD | F_ARBPF1PERR | \
1799 F_ARBPF0PERR | F_ARBFPERR | F_PCMDMUXPERR | \
1800 F_DATASELFRAMEERR1 | F_DATASELFRAMEERR0)
1801#define ULPTX_INTR_MASK 0xfc
1802#define CPLSW_INTR_MASK (F_CIM_OP_MAP_PERR | F_TP_FRAMING_ERROR | \
1803 F_SGE_FRAMING_ERROR | F_CIM_FRAMING_ERROR | \
1804 F_ZERO_SWITCH_ERROR)
1805#define CIM_INTR_MASK (F_BLKWRPLINT | F_BLKRDPLINT | F_BLKWRCTLINT | \
1806 F_BLKRDCTLINT | F_BLKWRFLASHINT | F_BLKRDFLASHINT | \
1807 F_SGLWRFLASHINT | F_WRBLKFLASHINT | F_BLKWRBOOTINT | \
1808 F_FLASHRANGEINT | F_SDRAMRANGEINT | F_RSVDSPACEINT | \
1809 F_DRAMPARERR | F_ICACHEPARERR | F_DCACHEPARERR | \
1810 F_OBQSGEPARERR | F_OBQULPHIPARERR | F_OBQULPLOPARERR | \
1811 F_IBQSGELOPARERR | F_IBQSGEHIPARERR | F_IBQULPPARERR | \
1812 F_IBQTPPARERR | F_ITAGPARERR | F_DTAGPARERR)
1813#define PMTX_INTR_MASK (F_ZERO_C_CMD_ERROR | ICSPI_FRM_ERR | OESPI_FRM_ERR | \
1814 V_ICSPI_PAR_ERROR(M_ICSPI_PAR_ERROR) | \
1815 V_OESPI_PAR_ERROR(M_OESPI_PAR_ERROR))
1816#define PMRX_INTR_MASK (F_ZERO_E_CMD_ERROR | IESPI_FRM_ERR | OCSPI_FRM_ERR | \
1817 V_IESPI_PAR_ERROR(M_IESPI_PAR_ERROR) | \
1818 V_OCSPI_PAR_ERROR(M_OCSPI_PAR_ERROR))
1819#define MPS_INTR_MASK (V_TX0TPPARERRENB(M_TX0TPPARERRENB) | \
1820 V_TX1TPPARERRENB(M_TX1TPPARERRENB) | \
1821 V_RXTPPARERRENB(M_RXTPPARERRENB) | \
1822 V_MCAPARERRENB(M_MCAPARERRENB))
1823#define XGM_EXTRA_INTR_MASK (F_LINKFAULTCHANGE)
1824#define PL_INTR_MASK (F_T3DBG | F_XGMAC0_0 | F_XGMAC0_1 | F_MC5A | F_PM1_TX | \
1825 F_PM1_RX | F_ULP2_TX | F_ULP2_RX | F_TP1 | F_CIM | \
1826 F_MC7_CM | F_MC7_PMTX | F_MC7_PMRX | F_SGE3 | F_PCIM0 | \
1827 F_MPS0 | F_CPL_SWITCH)
1828/*
1829 * Interrupt handler for the PCIX1 module.
1830 */
1832{
1833 static struct intr_info pcix1_intr_info[] = {
1834 { F_MSTDETPARERR, "PCI master detected parity error", -1, 1 },
1835 { F_SIGTARABT, "PCI signaled target abort", -1, 1 },
1836 { F_RCVTARABT, "PCI received target abort", -1, 1 },
1837 { F_RCVMSTABT, "PCI received master abort", -1, 1 },
1838 { F_SIGSYSERR, "PCI signaled system error", -1, 1 },
1839 { F_DETPARERR, "PCI detected parity error", -1, 1 },
1840 { F_SPLCMPDIS, "PCI split completion discarded", -1, 1 },
1841 { F_UNXSPLCMP, "PCI unexpected split completion error", -1, 1 },
1842 { F_RCVSPLCMPERR, "PCI received split completion error", -1,
1843 1 },
1844 { F_DETCORECCERR, "PCI correctable ECC error",
1845 STAT_PCI_CORR_ECC, 0 },
1846 { F_DETUNCECCERR, "PCI uncorrectable ECC error", -1, 1 },
1847 { F_PIOPARERR, "PCI PIO FIFO parity error", -1, 1 },
1848 { V_WFPARERR(M_WFPARERR), "PCI write FIFO parity error", -1,
1849 1 },
1850 { V_RFPARERR(M_RFPARERR), "PCI read FIFO parity error", -1,
1851 1 },
1852 { V_CFPARERR(M_CFPARERR), "PCI command FIFO parity error", -1,
1853 1 },
1854 { V_MSIXPARERR(M_MSIXPARERR), "PCI MSI-X table/PBA parity "
1855 "error", -1, 1 },
1856 { 0 }
1857 };
1858
1860 pcix1_intr_info, adapter->irq_stats))
1862}
1863
1864/*
1865 * Interrupt handler for the PCIE module.
1866 */
1868{
1869 static struct intr_info pcie_intr_info[] = {
1870 { F_PEXERR, "PCI PEX error", -1, 1 },
1872 "PCI unexpected split completion DMA read error", -1, 1 },
1874 "PCI unexpected split completion DMA command error", -1, 1 },
1875 { F_PCIE_PIOPARERR, "PCI PIO FIFO parity error", -1, 1 },
1876 { F_PCIE_WFPARERR, "PCI write FIFO parity error", -1, 1 },
1877 { F_PCIE_RFPARERR, "PCI read FIFO parity error", -1, 1 },
1878 { F_PCIE_CFPARERR, "PCI command FIFO parity error", -1, 1 },
1880 "PCI MSI-X table/PBA parity error", -1, 1 },
1881 { F_RETRYBUFPARERR, "PCI retry buffer parity error", -1, 1 },
1882 { F_RETRYLUTPARERR, "PCI retry LUT parity error", -1, 1 },
1883 { F_RXPARERR, "PCI Rx parity error", -1, 1 },
1884 { F_TXPARERR, "PCI Tx parity error", -1, 1 },
1885 { V_BISTERR(M_BISTERR), "PCI BIST error", -1, 1 },
1886 { 0 }
1887 };
1888
1890 CH_ALERT(adapter, "PEX error code 0x%x\n",
1892
1894 pcie_intr_info, adapter->irq_stats))
1896}
1897
1898/*
1899 * TP interrupt handler.
1900 */
1902{
1903 static struct intr_info tp_intr_info[] = {
1904 { 0xffffff, "TP parity error", -1, 1 },
1905 { 0x1000000, "TP out of Rx pages", -1, 1 },
1906 { 0x2000000, "TP out of Tx pages", -1, 1 },
1907 { 0 }
1908 };
1909 static struct intr_info tp_intr_info_t3c[] = {
1910 { 0x1fffffff, "TP parity error", -1, 1 },
1911 { F_FLMRXFLSTEMPTY, "TP out of Rx pages", -1, 1 },
1912 { F_FLMTXFLSTEMPTY, "TP out of Tx pages", -1, 1 },
1913 { 0 }
1914 };
1915
1918 tp_intr_info : tp_intr_info_t3c, NULL))
1920}
1921
1922/*
1923 * CIM interrupt handler.
1924 */
1926{
1927 static struct intr_info cim_intr_info[] = {
1928 { F_RSVDSPACEINT, "CIM reserved space write", -1, 1 },
1929 { F_SDRAMRANGEINT, "CIM SDRAM address out of range", -1, 1 },
1930 { F_FLASHRANGEINT, "CIM flash address out of range", -1, 1 },
1931 { F_BLKWRBOOTINT, "CIM block write to boot space", -1, 1 },
1932 { F_WRBLKFLASHINT, "CIM write to cached flash space", -1, 1 },
1933 { F_SGLWRFLASHINT, "CIM single write to flash space", -1, 1 },
1934 { F_BLKRDFLASHINT, "CIM block read from flash space", -1, 1 },
1935 { F_BLKWRFLASHINT, "CIM block write to flash space", -1, 1 },
1936 { F_BLKRDCTLINT, "CIM block read from CTL space", -1, 1 },
1937 { F_BLKWRCTLINT, "CIM block write to CTL space", -1, 1 },
1938 { F_BLKRDPLINT, "CIM block read from PL space", -1, 1 },
1939 { F_BLKWRPLINT, "CIM block write to PL space", -1, 1 },
1940 { F_DRAMPARERR, "CIM DRAM parity error", -1, 1 },
1941 { F_ICACHEPARERR, "CIM icache parity error", -1, 1 },
1942 { F_DCACHEPARERR, "CIM dcache parity error", -1, 1 },
1943 { F_OBQSGEPARERR, "CIM OBQ SGE parity error", -1, 1 },
1944 { F_OBQULPHIPARERR, "CIM OBQ ULPHI parity error", -1, 1 },
1945 { F_OBQULPLOPARERR, "CIM OBQ ULPLO parity error", -1, 1 },
1946 { F_IBQSGELOPARERR, "CIM IBQ SGELO parity error", -1, 1 },
1947 { F_IBQSGEHIPARERR, "CIM IBQ SGEHI parity error", -1, 1 },
1948 { F_IBQULPPARERR, "CIM IBQ ULP parity error", -1, 1 },
1949 { F_IBQTPPARERR, "CIM IBQ TP parity error", -1, 1 },
1950 { F_ITAGPARERR, "CIM itag parity error", -1, 1 },
1951 { F_DTAGPARERR, "CIM dtag parity error", -1, 1 },
1952 { 0 }
1953 };
1954
1956 cim_intr_info, NULL))
1958}
1959
1960/*
1961 * ULP RX interrupt handler.
1962 */
1964{
1965 static struct intr_info ulprx_intr_info[] = {
1966 { F_PARERRDATA, "ULP RX data parity error", -1, 1 },
1967 { F_PARERRPCMD, "ULP RX command parity error", -1, 1 },
1968 { F_ARBPF1PERR, "ULP RX ArbPF1 parity error", -1, 1 },
1969 { F_ARBPF0PERR, "ULP RX ArbPF0 parity error", -1, 1 },
1970 { F_ARBFPERR, "ULP RX ArbF parity error", -1, 1 },
1971 { F_PCMDMUXPERR, "ULP RX PCMDMUX parity error", -1, 1 },
1972 { F_DATASELFRAMEERR1, "ULP RX frame error", -1, 1 },
1973 { F_DATASELFRAMEERR0, "ULP RX frame error", -1, 1 },
1974 { 0 }
1975 };
1976
1978 ulprx_intr_info, NULL))
1980}
1981
1982/*
1983 * ULP TX interrupt handler.
1984 */
1986{
1987 static struct intr_info ulptx_intr_info[] = {
1988 { F_PBL_BOUND_ERR_CH0, "ULP TX channel 0 PBL out of bounds",
1990 { F_PBL_BOUND_ERR_CH1, "ULP TX channel 1 PBL out of bounds",
1992 { 0xfc, "ULP TX parity error", -1, 1 },
1993 { 0 }
1994 };
1995
1997 ulptx_intr_info, adapter->irq_stats))
1999}
2000
2001#define ICSPI_FRM_ERR (F_ICSPI0_FIFO2X_RX_FRAMING_ERROR | \
2002 F_ICSPI1_FIFO2X_RX_FRAMING_ERROR | F_ICSPI0_RX_FRAMING_ERROR | \
2003 F_ICSPI1_RX_FRAMING_ERROR | F_ICSPI0_TX_FRAMING_ERROR | \
2004 F_ICSPI1_TX_FRAMING_ERROR)
2005#define OESPI_FRM_ERR (F_OESPI0_RX_FRAMING_ERROR | \
2006 F_OESPI1_RX_FRAMING_ERROR | F_OESPI0_TX_FRAMING_ERROR | \
2007 F_OESPI1_TX_FRAMING_ERROR | F_OESPI0_OFIFO2X_TX_FRAMING_ERROR | \
2008 F_OESPI1_OFIFO2X_TX_FRAMING_ERROR)
2009
2010/*
2011 * PM TX interrupt handler.
2012 */
2014{
2015 static struct intr_info pmtx_intr_info[] = {
2016 { F_ZERO_C_CMD_ERROR, "PMTX 0-length pcmd", -1, 1 },
2017 { ICSPI_FRM_ERR, "PMTX ispi framing error", -1, 1 },
2018 { OESPI_FRM_ERR, "PMTX ospi framing error", -1, 1 },
2020 "PMTX ispi parity error", -1, 1 },
2022 "PMTX ospi parity error", -1, 1 },
2023 { 0 }
2024 };
2025
2027 pmtx_intr_info, NULL))
2029}
2030
2031#define IESPI_FRM_ERR (F_IESPI0_FIFO2X_RX_FRAMING_ERROR | \
2032 F_IESPI1_FIFO2X_RX_FRAMING_ERROR | F_IESPI0_RX_FRAMING_ERROR | \
2033 F_IESPI1_RX_FRAMING_ERROR | F_IESPI0_TX_FRAMING_ERROR | \
2034 F_IESPI1_TX_FRAMING_ERROR)
2035#define OCSPI_FRM_ERR (F_OCSPI0_RX_FRAMING_ERROR | \
2036 F_OCSPI1_RX_FRAMING_ERROR | F_OCSPI0_TX_FRAMING_ERROR | \
2037 F_OCSPI1_TX_FRAMING_ERROR | F_OCSPI0_OFIFO2X_TX_FRAMING_ERROR | \
2038 F_OCSPI1_OFIFO2X_TX_FRAMING_ERROR)
2039
2040/*
2041 * PM RX interrupt handler.
2042 */
2044{
2045 static struct intr_info pmrx_intr_info[] = {
2046 { F_ZERO_E_CMD_ERROR, "PMRX 0-length pcmd", -1, 1 },
2047 { IESPI_FRM_ERR, "PMRX ispi framing error", -1, 1 },
2048 { OCSPI_FRM_ERR, "PMRX ospi framing error", -1, 1 },
2050 "PMRX ispi parity error", -1, 1 },
2052 "PMRX ospi parity error", -1, 1 },
2053 { 0 }
2054 };
2055
2057 pmrx_intr_info, NULL))
2059}
2060
2061/*
2062 * CPL switch interrupt handler.
2063 */
2065{
2066 static struct intr_info cplsw_intr_info[] = {
2067 { F_CIM_OP_MAP_PERR, "CPL switch CIM parity error", -1, 1 },
2068 { F_CIM_OVFL_ERROR, "CPL switch CIM overflow", -1, 1 },
2069 { F_TP_FRAMING_ERROR, "CPL switch TP framing error", -1, 1 },
2070 { F_SGE_FRAMING_ERROR, "CPL switch SGE framing error", -1, 1 },
2071 { F_CIM_FRAMING_ERROR, "CPL switch CIM framing error", -1, 1 },
2072 { F_ZERO_SWITCH_ERROR, "CPL switch no-switch error", -1, 1 },
2073 { 0 }
2074 };
2075
2077 cplsw_intr_info, NULL))
2079}
2080
2081/*
2082 * MPS interrupt handler.
2083 */
2085{
2086 static struct intr_info mps_intr_info[] = {
2087 { 0x1ff, "MPS parity error", -1, 1 },
2088 { 0 }
2089 };
2090
2092 mps_intr_info, NULL))
2094}
2095
2096#define MC7_INTR_FATAL (F_UE | V_PE(M_PE) | F_AE)
2097
2098/*
2099 * MC7 interrupt handler.
2100 */
2101static void mc7_intr_handler(struct mc7 *mc7)
2102{
2105
2106 if (cause & F_CE) {
2107 mc7->stats.corr_err++;
2108 CH_WARN(adapter, "%s MC7 correctable error at addr 0x%x, "
2109 "data 0x%x 0x%x 0x%x\n", mc7->name,
2114 }
2115
2116 if (cause & F_UE) {
2117 mc7->stats.uncorr_err++;
2118 CH_ALERT(adapter, "%s MC7 uncorrectable error at addr 0x%x, "
2119 "data 0x%x 0x%x 0x%x\n", mc7->name,
2124 }
2125
2126 if (G_PE(cause)) {
2127 mc7->stats.parity_err++;
2128 CH_ALERT(adapter, "%s MC7 parity error 0x%x\n",
2129 mc7->name, G_PE(cause));
2130 }
2131
2132 if (cause & F_AE) {
2133 u32 addr = 0;
2134
2135 if (adapter->params.rev > 0)
2136 addr = t3_read_reg(adapter,
2138 mc7->stats.addr_err++;
2139 CH_ALERT(adapter, "%s MC7 address error: 0x%x\n",
2140 mc7->name, addr);
2141 }
2142
2143 if (cause & MC7_INTR_FATAL)
2145
2147}
2148
2149#define XGM_INTR_FATAL (V_TXFIFO_PRTY_ERR(M_TXFIFO_PRTY_ERR) | \
2150 V_RXFIFO_PRTY_ERR(M_RXFIFO_PRTY_ERR))
2151/*
2152 * XGMAC interrupt handler.
2153 */
2154static int mac_intr_handler(adapter_t *adap, unsigned int idx)
2155{
2156 u32 cause;
2157 struct port_info *pi;
2158 struct cmac *mac;
2159
2160 idx = idx == 0 ? 0 : adapter_info(adap)->nports0; /* MAC idx -> port */
2161 pi = adap2pinfo(adap, idx);
2162 mac = &pi->mac;
2163
2164 /*
2165 * We mask out interrupt causes for which we're not taking interrupts.
2166 * This allows us to use polling logic to monitor some of the other
2167 * conditions when taking interrupts would impose too much load on the
2168 * system.
2169 */
2170 cause = (t3_read_reg(adap, A_XGM_INT_CAUSE + mac->offset)
2171 & ~(F_RXFIFO_OVERFLOW));
2172
2173 if (cause & V_TXFIFO_PRTY_ERR(M_TXFIFO_PRTY_ERR)) {
2175 CH_ALERT(adap, "port%d: MAC TX FIFO parity error\n", idx);
2176 }
2177 if (cause & V_RXFIFO_PRTY_ERR(M_RXFIFO_PRTY_ERR)) {
2179 CH_ALERT(adap, "port%d: MAC RX FIFO parity error\n", idx);
2180 }
2181 if (cause & F_TXFIFO_UNDERRUN)
2183 if (cause & F_RXFIFO_OVERFLOW)
2185 if (cause & V_SERDES_LOS(M_SERDES_LOS))
2187 if (cause & F_XAUIPCSCTCERR)
2189 if (cause & F_XAUIPCSALIGNCHANGE)
2191 if (cause & F_XGM_INT &
2194 F_XGM_INT, 0);
2195
2196 /* link fault suspected */
2197 pi->link_fault = LF_MAYBE;
2198 t3_os_link_intr(pi);
2199 }
2200
2201 if (cause & XGM_INTR_FATAL)
2202 t3_fatal_err(adap);
2203
2204 t3_write_reg(adap, A_XGM_INT_CAUSE + mac->offset, cause);
2205 return cause != 0;
2206}
2207
2208/*
2209 * Interrupt handler for PHY events.
2210 */
2212{
2214
2216 struct port_info *p = adap2pinfo(adapter, i);
2217
2218 if (!(p->phy.caps & SUPPORTED_IRQ))
2219 continue;
2220
2221 if (cause & (1 << adapter_info(adapter)->gpio_intr[i])) {
2222 int phy_cause = p->phy.ops->intr_handler(&p->phy);
2223
2224 if (phy_cause & cphy_cause_link_change)
2225 t3_os_link_intr(p);
2226 if (phy_cause & cphy_cause_fifo_error)
2227 p->phy.fifo_errors++;
2228 if (phy_cause & cphy_cause_module_change)
2230 if (phy_cause & cphy_cause_alarm)
2231 CH_WARN(adapter, "Operation affected due to "
2232 "adverse environment. Check the spec "
2233 "sheet for corrective action.");
2234 }
2235 }
2236
2238 return 0;
2239}
2240
2250{
2252
2253 cause &= adapter->slow_intr_mask;
2254 if (!cause)
2255 return 0;
2256 if (cause & F_PCIM0) {
2257 if (is_pcie(adapter))
2259 else
2261 }
2262 if (cause & F_SGE3)
2264 if (cause & F_MC7_PMRX)
2266 if (cause & F_MC7_PMTX)
2268 if (cause & F_MC7_CM)
2270 if (cause & F_CIM)
2272 if (cause & F_TP1)
2274 if (cause & F_ULP2_RX)
2276 if (cause & F_ULP2_TX)
2278 if (cause & F_PM1_RX)
2280 if (cause & F_PM1_TX)
2282 if (cause & F_CPL_SWITCH)
2284 if (cause & F_MPS0)
2286 if (cause & F_MC5A)
2288 if (cause & F_XGMAC0_0)
2290 if (cause & F_XGMAC0_1)
2292 if (cause & F_T3DBG)
2294
2295 /* Clear the interrupts just processed. */
2297 (void) t3_read_reg(adapter, A_PL_INT_CAUSE0); /* flush */
2298 return 1;
2299}
2300
2301static unsigned int calc_gpio_intr(adapter_t *adap)
2302{
2303 unsigned int i, gpi_intr = 0;
2304
2305 for_each_port(adap, i)
2306 if ((adap2pinfo(adap, i)->phy.caps & SUPPORTED_IRQ) &&
2307 adapter_info(adap)->gpio_intr[i])
2308 gpi_intr |= 1 << adapter_info(adap)->gpio_intr[i];
2309 return gpi_intr;
2310}
2311
2321{
2322 static struct addr_val_pair intr_en_avp[] = {
2325 MC7_INTR_MASK },
2327 MC7_INTR_MASK },
2334 };
2335
2337
2338 t3_write_regs(adapter, intr_en_avp, ARRAY_SIZE(intr_en_avp), 0);
2340 adapter->params.rev >= T3_REV_C ? 0x2bfffff : 0x3bfffff);
2342
2343 if (adapter->params.rev > 0) {
2349 } else {
2352 }
2353
2355
2356 if (is_pcie(adapter))
2358 else
2361 (void) t3_read_reg(adapter, A_PL_INT_ENABLE0); /* flush */
2362}
2363
2372{
2374 (void) t3_read_reg(adapter, A_PL_INT_ENABLE0); /* flush */
2376}
2377
2385{
2386 static const unsigned int cause_reg_addr[] = {
2403 };
2404 unsigned int i;
2405
2406 /* Clear PHY and MAC interrupts for each port. */
2409
2410 for (i = 0; i < ARRAY_SIZE(cause_reg_addr); ++i)
2411 t3_write_reg(adapter, cause_reg_addr[i], 0xffffffff);
2412
2413 if (is_pcie(adapter))
2414 t3_write_reg(adapter, A_PCIE_PEX_ERR, 0xffffffff);
2415 t3_write_reg(adapter, A_PL_INT_CAUSE0, 0xffffffff);
2416 (void) t3_read_reg(adapter, A_PL_INT_CAUSE0); /* flush */
2417}
2418
2420{
2421 struct port_info *pi = adap2pinfo(adapter, idx);
2422
2425}
2426
2428{
2429 struct port_info *pi = adap2pinfo(adapter, idx);
2430
2432 0x7ff);
2433}
2434
2444{
2445 struct port_info *pi = adap2pinfo(adapter, idx);
2446
2448 pi->phy.ops->intr_enable(&pi->phy);
2449}
2450
2460{
2461 struct port_info *pi = adap2pinfo(adapter, idx);
2462
2464 pi->phy.ops->intr_disable(&pi->phy);
2465}
2466
2476{
2477 struct port_info *pi = adap2pinfo(adapter, idx);
2478
2479 t3_write_reg(adapter, A_XGM_INT_CAUSE + pi->mac.offset, 0xffffffff);
2480 pi->phy.ops->intr_clear(&pi->phy);
2481}
2482
2483#define SG_CONTEXT_CMD_ATTEMPTS 100
2484
2494static int t3_sge_write_context(adapter_t *adapter, unsigned int id,
2495 unsigned int type)
2496{
2497 if (type == F_RESPONSEQ) {
2498 /*
2499 * Can't write the Response Queue Context bits for
2500 * Interrupt Armed or the Reserve bits after the chip
2501 * has been initialized out of reset. Writing to these
2502 * bits can confuse the hardware.
2503 */
2508 } else {
2513 }
2515 V_CONTEXT_CMD_OPCODE(1) | type | V_CONTEXT(id));
2518}
2519
2531static int clear_sge_ctxt(adapter_t *adap, unsigned int id, unsigned int type)
2532{
2537 t3_write_reg(adap, A_SG_CONTEXT_MASK0, 0xffffffff);
2538 t3_write_reg(adap, A_SG_CONTEXT_MASK1, 0xffffffff);
2539 t3_write_reg(adap, A_SG_CONTEXT_MASK2, 0xffffffff);
2540 t3_write_reg(adap, A_SG_CONTEXT_MASK3, 0xffffffff);
2542 V_CONTEXT_CMD_OPCODE(1) | type | V_CONTEXT(id));
2545}
2546
2564int t3_sge_init_ecntxt(adapter_t *adapter, unsigned int id, int gts_enable,
2565 enum sge_context_type type, int respq, u64 base_addr,
2566 unsigned int size, unsigned int token, int gen,
2567 unsigned int cidx)
2568{
2569 unsigned int credits = type == SGE_CNTXT_OFLD ? 0 : FW_WR_NUM;
2570
2571 if (base_addr & 0xfff) /* must be 4K aligned */
2572 return -EINVAL;
2574 return -EBUSY;
2575
2576 base_addr >>= 12;
2578 V_EC_CREDITS(credits) | V_EC_GTS(gts_enable));
2580 V_EC_BASE_LO((u32)base_addr & 0xffff));
2581 base_addr >>= 16;
2583 base_addr >>= 32;
2585 V_EC_BASE_HI((u32)base_addr & 0xf) | V_EC_RESPQ(respq) |
2586 V_EC_TYPE(type) | V_EC_GEN(gen) | V_EC_UP_TOKEN(token) |
2587 F_EC_VALID);
2589}
2590
2607int t3_sge_init_flcntxt(adapter_t *adapter, unsigned int id, int gts_enable,
2608 u64 base_addr, unsigned int size, unsigned int bsize,
2609 unsigned int cong_thres, int gen, unsigned int cidx)
2610{
2611 if (base_addr & 0xfff) /* must be 4K aligned */
2612 return -EINVAL;
2614 return -EBUSY;
2615
2616 base_addr >>= 12;
2618 base_addr >>= 32;
2620 V_FL_BASE_HI((u32)base_addr) |
2623 V_FL_GEN(gen) | V_FL_INDEX_HI(cidx >> 12) |
2626 V_FL_ENTRY_SIZE_HI(bsize >> (32 - S_FL_ENTRY_SIZE_LO)) |
2627 V_FL_CONG_THRES(cong_thres) | V_FL_GTS(gts_enable));
2629}
2630
2646int t3_sge_init_rspcntxt(adapter_t *adapter, unsigned int id, int irq_vec_idx,
2647 u64 base_addr, unsigned int size,
2648 unsigned int fl_thres, int gen, unsigned int cidx)
2649{
2650 unsigned int ctrl, intr = 0;
2651
2652 if (base_addr & 0xfff) /* must be 4K aligned */
2653 return -EINVAL;
2655 return -EBUSY;
2656
2657 base_addr >>= 12;
2659 V_CQ_INDEX(cidx));
2661 base_addr >>= 32;
2663 if ((irq_vec_idx > 0) ||
2664 ((irq_vec_idx == 0) && !(ctrl & F_ONEINTMULTQ)))
2665 intr = F_RQ_INTR_EN;
2666 if (irq_vec_idx >= 0)
2667 intr |= V_RQ_MSI_VEC(irq_vec_idx);
2669 V_CQ_BASE_HI((u32)base_addr) | intr | V_RQ_GEN(gen));
2672}
2673
2689int t3_sge_init_cqcntxt(adapter_t *adapter, unsigned int id, u64 base_addr,
2690 unsigned int size, int rspq, int ovfl_mode,
2691 unsigned int credits, unsigned int credit_thres)
2692{
2693 if (base_addr & 0xfff) /* must be 4K aligned */
2694 return -EINVAL;
2696 return -EBUSY;
2697
2698 base_addr >>= 12;
2701 base_addr >>= 32;
2703 V_CQ_BASE_HI((u32)base_addr) | V_CQ_RSPQ(rspq) |
2704 V_CQ_GEN(1) | V_CQ_OVERFLOW_MODE(ovfl_mode) |
2705 V_CQ_ERR(ovfl_mode));
2707 V_CQ_CREDIT_THRES(credit_thres));
2708 return t3_sge_write_context(adapter, id, F_CQ);
2709}
2710
2720int t3_sge_enable_ecntxt(adapter_t *adapter, unsigned int id, int enable)
2721{
2723 return -EBUSY;
2724
2734}
2735
2745{
2747 return -EBUSY;
2748
2758}
2759
2769{
2771 return -EBUSY;
2772
2782}
2783
2793{
2795 return -EBUSY;
2796
2806}
2807
2822int t3_sge_cqcntxt_op(adapter_t *adapter, unsigned int id, unsigned int op,
2823 unsigned int credits)
2824{
2825 u32 val;
2826
2828 return -EBUSY;
2829
2830 t3_write_reg(adapter, A_SG_CONTEXT_DATA0, credits << 16);
2832 V_CONTEXT(id) | F_CQ);
2834 0, SG_CONTEXT_CMD_ATTEMPTS, 1, &val))
2835 return -EIO;
2836
2837 if (op >= 2 && op < 7) {
2838 if (adapter->params.rev > 0)
2839 return G_CQ_INDEX(val);
2840
2846 return -EIO;
2848 }
2849 return 0;
2850}
2851
2862static int t3_sge_read_context(unsigned int type, adapter_t *adapter,
2863 unsigned int id, u32 data[4])
2864{
2866 return -EBUSY;
2867
2869 V_CONTEXT_CMD_OPCODE(0) | type | V_CONTEXT(id));
2872 return -EIO;
2877 return 0;
2878}
2879
2889int t3_sge_read_ecntxt(adapter_t *adapter, unsigned int id, u32 data[4])
2890{
2891 if (id >= 65536)
2892 return -EINVAL;
2893 return t3_sge_read_context(F_EGRESS, adapter, id, data);
2894}
2895
2905int t3_sge_read_cq(adapter_t *adapter, unsigned int id, u32 data[4])
2906{
2907 if (id >= 65536)
2908 return -EINVAL;
2909 return t3_sge_read_context(F_CQ, adapter, id, data);
2910}
2911
2921int t3_sge_read_fl(adapter_t *adapter, unsigned int id, u32 data[4])
2922{
2923 if (id >= SGE_QSETS * 2)
2924 return -EINVAL;
2925 return t3_sge_read_context(F_FREELIST, adapter, id, data);
2926}
2927
2937int t3_sge_read_rspq(adapter_t *adapter, unsigned int id, u32 data[4])
2938{
2939 if (id >= SGE_QSETS)
2940 return -EINVAL;
2941 return t3_sge_read_context(F_RESPONSEQ, adapter, id, data);
2942}
2943
2956void t3_config_rss(adapter_t *adapter, unsigned int rss_config, const u8 *cpus,
2957 const u16 *rspq)
2958{
2959 int i, j, cpu_idx = 0, q_idx = 0;
2960
2961 if (cpus)
2962 for (i = 0; i < RSS_TABLE_SIZE; ++i) {
2963 u32 val = i << 16;
2964
2965 for (j = 0; j < 2; ++j) {
2966 val |= (cpus[cpu_idx++] & 0x3f) << (8 * j);
2967 if (cpus[cpu_idx] == 0xff)
2968 cpu_idx = 0;
2969 }
2971 }
2972
2973 if (rspq)
2974 for (i = 0; i < RSS_TABLE_SIZE; ++i) {
2976 (i << 16) | rspq[q_idx++]);
2977 if (rspq[q_idx] == 0xffff)
2978 q_idx = 0;
2979 }
2980
2981 t3_write_reg(adapter, A_TP_RSS_CONFIG, rss_config);
2982}
2983
2993{
2994 int i;
2995 u32 val;
2996
2997 if (lkup)
2998 for (i = 0; i < RSS_TABLE_SIZE; ++i) {
3000 0xffff0000 | i);
3002 if (!(val & 0x80000000))
3003 return -EAGAIN;
3004 *lkup++ = (u8)val;
3005 *lkup++ = (u8)(val >> 8);
3006 }
3007
3008 if (map)
3009 for (i = 0; i < RSS_TABLE_SIZE; ++i) {
3011 0xffff0000 | i);
3013 if (!(val & 0x80000000))
3014 return -EAGAIN;
3015 *map++ = (u16)val;
3016 }
3017 return 0;
3018}
3019
3027void t3_tp_set_offload_mode(adapter_t *adap, int enable)
3028{
3029 if (is_offload(adap) || !enable)
3031 V_NICMODE(!enable));
3032}
3033
3043static void tp_wr_bits_indirect(adapter_t *adap, unsigned int addr,
3044 unsigned int mask, unsigned int val)
3045{
3046 t3_write_reg(adap, A_TP_PIO_ADDR, addr);
3047 val |= t3_read_reg(adap, A_TP_PIO_DATA) & ~mask;
3048 t3_write_reg(adap, A_TP_PIO_DATA, val);
3049}
3050
3058{
3063}
3064
3072{
3073 /* note that we don't want to revert to NIC-only mode */
3078}
3079
3089static inline unsigned int pm_num_pages(unsigned int mem_size,
3090 unsigned int pg_size)
3091{
3092 unsigned int n = mem_size / pg_size;
3093
3094 return n - n % 24;
3095}
3096
3097#define mem_region(adap, start, size, reg) \
3098 t3_write_reg((adap), A_ ## reg, (start)); \
3099 start += size
3100
3109static void partition_mem(adapter_t *adap, const struct tp_params *p)
3110{
3111 unsigned int m, pstructs, tids = t3_mc5_size(&adap->mc5);
3112 unsigned int timers = 0, timers_shift = 22;
3113
3114 if (adap->params.rev > 0) {
3115 if (tids <= 16 * 1024) {
3116 timers = 1;
3117 timers_shift = 16;
3118 } else if (tids <= 64 * 1024) {
3119 timers = 2;
3120 timers_shift = 18;
3121 } else if (tids <= 256 * 1024) {
3122 timers = 3;
3123 timers_shift = 20;
3124 }
3125 }
3126
3128 p->chan_rx_size | (p->chan_tx_size >> 16));
3129
3134 V_TXDATAACKIDX(fls(p->tx_pg_size) - 12));
3135
3139
3140 pstructs = p->rx_num_pgs + p->tx_num_pgs;
3141 /* Add a bit of headroom and make multiple of 24 */
3142 pstructs += 48;
3143 pstructs -= pstructs % 24;
3144 t3_write_reg(adap, A_TP_CMM_MM_MAX_PSTRUCT, pstructs);
3145
3146 m = tids * TCB_SIZE;
3147 mem_region(adap, m, (64 << 10) * 64, SG_EGR_CNTX_BADDR);
3148 mem_region(adap, m, (64 << 10) * 64, SG_CQ_CONTEXT_BADDR);
3150 m += ((p->ntimer_qs - 1) << timers_shift) + (1 << 22);
3151 mem_region(adap, m, pstructs * 64, TP_CMM_MM_BASE);
3152 mem_region(adap, m, 64 * (pstructs / 24), TP_CMM_MM_PS_FLST_BASE);
3153 mem_region(adap, m, 64 * (p->rx_num_pgs / 24), TP_CMM_MM_RX_FLST_BASE);
3154 mem_region(adap, m, 64 * (p->tx_num_pgs / 24), TP_CMM_MM_TX_FLST_BASE);
3155
3156 m = (m + 4095) & ~0xfff;
3159
3160 tids = (p->cm_size - m - (3 << 20)) / 3072 - 32;
3161 m = t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
3162 adap->params.mc5.nfilters - adap->params.mc5.nroutes;
3163 if (tids < m)
3164 adap->params.mc5.nservers += m - tids;
3165}
3166
3167static inline void tp_wr_indirect(adapter_t *adap, unsigned int addr, u32 val)
3168{
3169 t3_write_reg(adap, A_TP_PIO_ADDR, addr);
3170 t3_write_reg(adap, A_TP_PIO_DATA, val);
3171}
3172
3173static inline u32 tp_rd_indirect(adapter_t *adap, unsigned int addr)
3174{
3175 t3_write_reg(adap, A_TP_PIO_ADDR, addr);
3176 return t3_read_reg(adap, A_TP_PIO_DATA);
3177}
3178
3179static void tp_config(adapter_t *adap, const struct tp_params *p)
3180{
3186 V_TIMESTAMPSMODE(1) | V_SACKMODE(1) | V_SACKRX(1));
3188 V_AUTOSTATE2(1) | V_AUTOSTATE1(0) |
3189 V_BYTETHRESHOLD(26880) | V_MSSTHRESHOLD(2) |
3193 t3_write_reg(adap, A_TP_TX_RESOURCE_LIMIT, 0x18141814);
3194 t3_write_reg(adap, A_TP_PARA_REG4, 0x5050105);
3196 adap->params.rev > 0 ? F_ENABLEESND :
3207
3208 if (adap->params.rev > 0) {
3213 tp_wr_indirect(adap, A_TP_VLAN_PRI_MAP, 0xfa50);
3214 tp_wr_indirect(adap, A_TP_MAC_MATCH_MAP0, 0xfac688);
3215 tp_wr_indirect(adap, A_TP_MAC_MATCH_MAP1, 0xfac688);
3216 } else
3218
3219 if (adap->params.rev == T3_REV_C)
3223
3227 t3_write_reg(adap, A_TP_MOD_RATE_LIMIT, 0xf2200000);
3228
3229 if (adap->params.nports > 2) {
3236 V_BITPOS1(49) | V_BITPOS2(50) | V_BITPOS3(51) |
3239 tp_wr_indirect(adap, A_TP_PREAMBLE_MSB, 0xfb000000);
3240 tp_wr_indirect(adap, A_TP_PREAMBLE_LSB, 0xd5);
3242 }
3243}
3244
3245/* TCP timer values in ms */
3246#define TP_DACK_TIMER 50
3247#define TP_RTO_MIN 250
3248
3257static void tp_set_timers(adapter_t *adap, unsigned int core_clk)
3258{
3259 unsigned int tre = adap->params.tp.tre;
3260 unsigned int dack_re = adap->params.tp.dack_re;
3261 unsigned int tstamp_re = fls(core_clk / 1000); /* 1ms, at least */
3262 unsigned int tps = core_clk >> tre;
3263
3265 V_DELAYEDACKRESOLUTION(dack_re) |
3266 V_TIMESTAMPRESOLUTION(tstamp_re));
3268 (core_clk >> dack_re) / (1000 / TP_DACK_TIMER));
3269 t3_write_reg(adap, A_TP_TCP_BACKOFF_REG0, 0x3020100);
3270 t3_write_reg(adap, A_TP_TCP_BACKOFF_REG1, 0x7060504);
3271 t3_write_reg(adap, A_TP_TCP_BACKOFF_REG2, 0xb0a0908);
3272 t3_write_reg(adap, A_TP_TCP_BACKOFF_REG3, 0xf0e0d0c);
3276 V_KEEPALIVEMAX(9));
3277
3278#define SECONDS * tps
3279
3280 t3_write_reg(adap, A_TP_MSL,
3281 adap->params.rev > 0 ? 0 : 2 SECONDS);
3282 t3_write_reg(adap, A_TP_RXT_MIN, tps / (1000 / TP_RTO_MIN));
3286 t3_write_reg(adap, A_TP_KEEP_IDLE, 7200 SECONDS);
3290
3291#undef SECONDS
3292}
3293
3302int t3_tp_set_coalescing_size(adapter_t *adap, unsigned int size, int psh)
3303{
3304 u32 val;
3305
3306 if (size > MAX_RX_COALESCING_LEN)
3307 return -EINVAL;
3308
3309 val = t3_read_reg(adap, A_TP_PARA_REG3);
3311
3312 if (size) {
3313 val |= F_RXCOALESCEENABLE;
3314 if (psh)
3315 val |= F_RXCOALESCEPSHEN;
3316 size = min(MAX_RX_COALESCING_LEN, size);
3319 }
3320 t3_write_reg(adap, A_TP_PARA_REG3, val);
3321 return 0;
3322}
3323
3332void t3_tp_set_max_rxsize(adapter_t *adap, unsigned int size)
3333{
3335 V_PMMAXXFERLEN0(size) | V_PMMAXXFERLEN1(size));
3336}
3337
3338static void __devinit init_mtus(unsigned short mtus[])
3339{
3340 /*
3341 * See draft-mathis-plpmtud-00.txt for the values. The min is 88 so
3342 * it can accommodate max size TCP/IP headers when SACK and timestamps
3343 * are enabled and still have at least 8 bytes of payload.
3344 */
3345 mtus[0] = 88;
3346 mtus[1] = 88;
3347 mtus[2] = 256;
3348 mtus[3] = 512;
3349 mtus[4] = 576;
3350 mtus[5] = 1024;
3351 mtus[6] = 1280;
3352 mtus[7] = 1492;
3353 mtus[8] = 1500;
3354 mtus[9] = 2002;
3355 mtus[10] = 2048;
3356 mtus[11] = 4096;
3357 mtus[12] = 4352;
3358 mtus[13] = 8192;
3359 mtus[14] = 9000;
3360 mtus[15] = 9600;
3361}
3362
3370static void __devinit init_cong_ctrl(unsigned short *a, unsigned short *b)
3371{
3372 a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = 1;
3373 a[9] = 2;
3374 a[10] = 3;
3375 a[11] = 4;
3376 a[12] = 5;
3377 a[13] = 6;
3378 a[14] = 7;
3379 a[15] = 8;
3380 a[16] = 9;
3381 a[17] = 10;
3382 a[18] = 14;
3383 a[19] = 17;
3384 a[20] = 21;
3385 a[21] = 25;
3386 a[22] = 30;
3387 a[23] = 35;
3388 a[24] = 45;
3389 a[25] = 60;
3390 a[26] = 80;
3391 a[27] = 100;
3392 a[28] = 200;
3393 a[29] = 300;
3394 a[30] = 400;
3395 a[31] = 500;
3396
3397 b[0] = b[1] = b[2] = b[3] = b[4] = b[5] = b[6] = b[7] = b[8] = 0;
3398 b[9] = b[10] = 1;
3399 b[11] = b[12] = 2;
3400 b[13] = b[14] = b[15] = b[16] = 3;
3401 b[17] = b[18] = b[19] = b[20] = b[21] = 4;
3402 b[22] = b[23] = b[24] = b[25] = b[26] = b[27] = 5;
3403 b[28] = b[29] = 6;
3404 b[30] = b[31] = 7;
3405}
3406
3407/* The minimum additive increment value for the congestion control table */
3408#define CC_MIN_INCR 2U
3409
3422void t3_load_mtus(adapter_t *adap, unsigned short mtus[NMTUS],
3423 unsigned short alpha[NCCTRL_WIN],
3424 unsigned short beta[NCCTRL_WIN], unsigned short mtu_cap)
3425{
3426 static const unsigned int avg_pkts[NCCTRL_WIN] = {
3427 2, 6, 10, 14, 20, 28, 40, 56, 80, 112, 160, 224, 320, 448, 640,
3428 896, 1281, 1792, 2560, 3584, 5120, 7168, 10240, 14336, 20480,
3429 28672, 40960, 57344, 81920, 114688, 163840, 229376 };
3430
3431 unsigned int i, w;
3432
3433 for (i = 0; i < NMTUS; ++i) {
3434 unsigned int mtu = min(mtus[i], mtu_cap);
3435 unsigned int log2 = fls(mtu);
3436
3437 if (!(mtu & ((1 << log2) >> 2))) /* round */
3438 log2--;
3440 (i << 24) | (log2 << 16) | mtu);
3441
3442 for (w = 0; w < NCCTRL_WIN; ++w) {
3443 unsigned int inc;
3444
3445 inc = max(((mtu - 40) * alpha[w]) / avg_pkts[w],
3446 CC_MIN_INCR);
3447
3448 t3_write_reg(adap, A_TP_CCTRL_TABLE, (i << 21) |
3449 (w << 16) | (beta[w] << 13) | inc);
3450 }
3451 }
3452}
3453
3461void t3_read_hw_mtus(adapter_t *adap, unsigned short mtus[NMTUS])
3462{
3463 int i;
3464
3465 for (i = 0; i < NMTUS; ++i) {
3466 unsigned int val;
3467
3468 t3_write_reg(adap, A_TP_MTU_TABLE, 0xff000000 | i);
3469 val = t3_read_reg(adap, A_TP_MTU_TABLE);
3470 mtus[i] = val & 0x3fff;
3471 }
3472}
3473
3483 unsigned short incr[NMTUS][NCCTRL_WIN])
3484{
3485 unsigned int mtu, w;
3486
3487 for (mtu = 0; mtu < NMTUS; ++mtu)
3488 for (w = 0; w < NCCTRL_WIN; ++w) {
3490 0xffff0000 | (mtu << 5) | w);
3491 incr[mtu][w] = (unsigned short)t3_read_reg(adap,
3492 A_TP_CCTRL_TABLE) & 0x1fff;
3493 }
3494}
3495
3504{
3506 sizeof(*tps) / sizeof(u32), 0);
3507}
3508
3516void t3_read_pace_tbl(adapter_t *adap, unsigned int pace_vals[NTX_SCHED])
3517{
3518 unsigned int i, tick_ns = dack_ticks_to_usec(adap, 1000);
3519
3520 for (i = 0; i < NTX_SCHED; i++) {
3521 t3_write_reg(adap, A_TP_PACE_TABLE, 0xffff0000 + i);
3522 pace_vals[i] = t3_read_reg(adap, A_TP_PACE_TABLE) * tick_ns;
3523 }
3524}
3525
3535void t3_set_pace_tbl(adapter_t *adap, unsigned int *pace_vals,
3536 unsigned int start, unsigned int n)
3537{
3538 unsigned int tick_ns = dack_ticks_to_usec(adap, 1000);
3539
3540 for ( ; n; n--, start++, pace_vals++)
3541 t3_write_reg(adap, A_TP_PACE_TABLE, (start << 16) |
3542 ((*pace_vals + tick_ns / 2) / tick_ns));
3543}
3544
3545#define ulp_region(adap, name, start, len) \
3546 t3_write_reg((adap), A_ULPRX_ ## name ## _LLIMIT, (start)); \
3547 t3_write_reg((adap), A_ULPRX_ ## name ## _ULIMIT, \
3548 (start) + (len) - 1); \
3549 start += len
3550
3551#define ulptx_region(adap, name, start, len) \
3552 t3_write_reg((adap), A_ULPTX_ ## name ## _LLIMIT, (start)); \
3553 t3_write_reg((adap), A_ULPTX_ ## name ## _ULIMIT, \
3554 (start) + (len) - 1)
3555
3556static void ulp_config(adapter_t *adap, const struct tp_params *p)
3557{
3558 unsigned int m = p->chan_rx_size;
3559
3560 ulp_region(adap, ISCSI, m, p->chan_rx_size / 8);
3561 ulp_region(adap, TDDP, m, p->chan_rx_size / 8);
3562 ulptx_region(adap, TPT, m, p->chan_rx_size / 4);
3563 ulp_region(adap, STAG, m, p->chan_rx_size / 4);
3564 ulp_region(adap, RQ, m, p->chan_rx_size / 4);
3565 ulptx_region(adap, PBL, m, p->chan_rx_size / 4);
3566 ulp_region(adap, PBL, m, p->chan_rx_size / 4);
3567 t3_write_reg(adap, A_ULPRX_TDDP_TAGMASK, 0xffffffff);
3568}
3569
3570
3578int t3_set_proto_sram(adapter_t *adap, const u8 *data)
3579{
3580 int i;
3581 const u32 *buf = (const u32 *)data;
3582
3583 for (i = 0; i < PROTO_SRAM_LINES; i++) {
3589
3590 t3_write_reg(adap, A_TP_EMBED_OP_FIELD0, i << 1 | 1 << 31);
3591 if (t3_wait_op_done(adap, A_TP_EMBED_OP_FIELD0, 1, 1, 5, 1))
3592 return -EIO;
3593 }
3594 return 0;
3595}
3596
3608 int filter_index, int invert, int enable)
3609{
3610 u32 addr, key[4], mask[4];
3611
3612 key[0] = tp->sport | (tp->sip << 16);
3613 key[1] = (tp->sip >> 16) | (tp->dport << 16);
3614 key[2] = tp->dip;
3615 key[3] = tp->proto | (tp->vlan << 8) | (tp->intf << 20);
3616
3617 mask[0] = tp->sport_mask | (tp->sip_mask << 16);
3618 mask[1] = (tp->sip_mask >> 16) | (tp->dport_mask << 16);
3619 mask[2] = tp->dip_mask;
3620 mask[3] = tp->proto_mask | (tp->vlan_mask << 8) | (tp->intf_mask << 20);
3621
3622 if (invert)
3623 key[3] |= (1 << 29);
3624 if (enable)
3625 key[3] |= (1 << 28);
3626
3627 addr = filter_index ? A_TP_RX_TRC_KEY0 : A_TP_TX_TRC_KEY0;
3628 tp_wr_indirect(adapter, addr++, key[0]);
3629 tp_wr_indirect(adapter, addr++, mask[0]);
3630 tp_wr_indirect(adapter, addr++, key[1]);
3631 tp_wr_indirect(adapter, addr++, mask[1]);
3632 tp_wr_indirect(adapter, addr++, key[2]);
3633 tp_wr_indirect(adapter, addr++, mask[2]);
3634 tp_wr_indirect(adapter, addr++, key[3]);
3635 tp_wr_indirect(adapter, addr, mask[3]);
3637}
3638
3650 int filter_index, int *inverted, int *enabled)
3651{
3652 u32 addr, key[4], mask[4];
3653
3654 addr = filter_index ? A_TP_RX_TRC_KEY0 : A_TP_TX_TRC_KEY0;
3655 key[0] = tp_rd_indirect(adapter, addr++);
3656 mask[0] = tp_rd_indirect(adapter, addr++);
3657 key[1] = tp_rd_indirect(adapter, addr++);
3658 mask[1] = tp_rd_indirect(adapter, addr++);
3659 key[2] = tp_rd_indirect(adapter, addr++);
3660 mask[2] = tp_rd_indirect(adapter, addr++);
3661 key[3] = tp_rd_indirect(adapter, addr++);
3662 mask[3] = tp_rd_indirect(adapter, addr);
3663
3664 tp->sport = key[0] & 0xffff;
3665 tp->sip = (key[0] >> 16) | ((key[1] & 0xffff) << 16);
3666 tp->dport = key[1] >> 16;
3667 tp->dip = key[2];
3668 tp->proto = key[3] & 0xff;
3669 tp->vlan = key[3] >> 8;
3670 tp->intf = key[3] >> 20;
3671
3672 tp->sport_mask = mask[0] & 0xffff;
3673 tp->sip_mask = (mask[0] >> 16) | ((mask[1] & 0xffff) << 16);
3674 tp->dport_mask = mask[1] >> 16;
3675 tp->dip_mask = mask[2];
3676 tp->proto_mask = mask[3] & 0xff;
3677 tp->vlan_mask = mask[3] >> 8;
3678 tp->intf_mask = mask[3] >> 20;
3679
3680 *inverted = key[3] & (1 << 29);
3681 *enabled = key[3] & (1 << 28);
3682}
3683
3692int t3_config_sched(adapter_t *adap, unsigned int kbps, int sched)
3693{
3694 unsigned int v, tps, cpt, bpt, delta, mindelta = ~0;
3695 unsigned int clk = adap->params.vpd.cclk * 1000;
3696 unsigned int selected_cpt = 0, selected_bpt = 0;
3697
3698 if (kbps > 0) {
3699 kbps *= 125; /* -> bytes */
3700 for (cpt = 1; cpt <= 255; cpt++) {
3701 tps = clk / cpt;
3702 bpt = (kbps + tps / 2) / tps;
3703 if (bpt > 0 && bpt <= 255) {
3704 v = bpt * tps;
3705 delta = v >= kbps ? v - kbps : kbps - v;
3706 if (delta < mindelta) {
3707 mindelta = delta;
3708 selected_cpt = cpt;
3709 selected_bpt = bpt;
3710 }
3711 } else if (selected_cpt)
3712 break;
3713 }
3714 if (!selected_cpt)
3715 return -EINVAL;
3716 }
3718 A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2);
3719 v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
3720 if (sched & 1)
3721 v = (v & 0xffff) | (selected_cpt << 16) | (selected_bpt << 24);
3722 else
3723 v = (v & 0xffff0000) | selected_cpt | (selected_bpt << 8);
3725 return 0;
3726}
3727
3736int t3_set_sched_ipg(adapter_t *adap, int sched, unsigned int ipg)
3737{
3738 unsigned int v, addr = A_TP_TX_MOD_Q1_Q0_TIMER_SEPARATOR - sched / 2;
3739
3740 /* convert ipg to nearest number of core clocks */
3741 ipg *= core_ticks_per_usec(adap);
3742 ipg = (ipg + 5000) / 10000;
3743 if (ipg > 0xffff)
3744 return -EINVAL;
3745
3746 t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
3747 v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
3748 if (sched & 1)
3749 v = (v & 0xffff) | (ipg << 16);
3750 else
3751 v = (v & 0xffff0000) | ipg;
3754 return 0;
3755}
3756
3766void t3_get_tx_sched(adapter_t *adap, unsigned int sched, unsigned int *kbps,
3767 unsigned int *ipg)
3768{
3769 unsigned int v, addr, bpt, cpt;
3770
3771 if (kbps) {
3772 addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2;
3773 t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
3774 v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
3775 if (sched & 1)
3776 v >>= 16;
3777 bpt = (v >> 8) & 0xff;
3778 cpt = v & 0xff;
3779 if (!cpt)
3780 *kbps = 0; /* scheduler disabled */
3781 else {
3782 v = (adap->params.vpd.cclk * 1000) / cpt;
3783 *kbps = (v * bpt) / 125;
3784 }
3785 }
3786 if (ipg) {
3787 addr = A_TP_TX_MOD_Q1_Q0_TIMER_SEPARATOR - sched / 2;
3788 t3_write_reg(adap, A_TP_TM_PIO_ADDR, addr);
3789 v = t3_read_reg(adap, A_TP_TM_PIO_DATA);
3790 if (sched & 1)
3791 v >>= 16;
3792 v &= 0xffff;
3793 *ipg = (10000 * v) / core_ticks_per_usec(adap);
3794 }
3795}
3796
3804static int tp_init(adapter_t *adap, const struct tp_params *p)
3805{
3806 int busy = 0;
3807
3808 tp_config(adap, p);
3809 t3_set_vlan_accel(adap, 3, 0);
3810
3811 if (is_offload(adap)) {
3812 tp_set_timers(adap, adap->params.vpd.cclk * 1000);
3815 0, 1000, 5);
3816 if (busy)
3817 CH_ERR(adap, "TP initialization timed out\n");
3818 }
3819
3820 if (!busy)
3822 return busy;
3823}
3824
3832int t3_mps_set_active_ports(adapter_t *adap, unsigned int port_mask)
3833{
3834 if (port_mask & ~((1 << adap->params.nports) - 1))
3835 return -EINVAL;
3837 port_mask << S_PORT0ACTIVE);
3838 return 0;
3839}
3840
3849static void chan_init_hw(adapter_t *adap, unsigned int chan_map)
3850{
3851 int i;
3852
3853 if (chan_map != 3) { /* one channel */
3857 (chan_map == 1 ? F_TPTXPORT0EN | F_PORT0ACTIVE :
3860 chan_map == 1 ? 0xffffffff : 0);
3861 if (chan_map == 2)
3864 t3_write_reg(adap, A_TP_TX_MOD_QUE_TABLE, (12 << 16) | 0xd9c8);
3865 t3_write_reg(adap, A_TP_TX_MOD_QUE_TABLE, (13 << 16) | 0xfbea);
3866 } else { /* two channels */
3870 V_D1_WEIGHT(16) | V_D0_WEIGHT(16));
3873 F_ENFORCEPKT);
3874 t3_write_reg(adap, A_PM1_TX_CFG, 0x80008000);
3878 for (i = 0; i < 16; i++)
3880 (i << 16) | 0x1010);
3881 t3_write_reg(adap, A_TP_TX_MOD_QUE_TABLE, (12 << 16) | 0xba98);
3882 t3_write_reg(adap, A_TP_TX_MOD_QUE_TABLE, (13 << 16) | 0xfedc);
3883 }
3884}
3885
3887{
3888 if (uses_xaui(adapter)) {
3889 unsigned int v, i;
3890
3891 for (i = 0; i < 5; ++i) {
3894 msleep(1);
3896 if (!(v & (F_XGM_CALFAULT | F_CALBUSY))) {
3898 V_XAUIIMP(G_CALIMP(v) >> 2));
3899 return 0;
3900 }
3901 }
3902 CH_ERR(adapter, "MAC calibration failed\n");
3903 return -1;
3904 } else {
3906 V_RGMIIIMPPD(2) | V_RGMIIIMPPU(3));
3909 }
3910 return 0;
3911}
3912
3914{
3915 if (!uses_xaui(adapter)) {
3922 0);
3925 }
3926}
3927
3929 unsigned char ActToPreDly;
3930 unsigned char ActToRdWrDly;
3931 unsigned char PreCyc;
3932 unsigned char RefCyc[5];
3933 unsigned char BkCyc;
3934 unsigned char WrToRdDly;
3935 unsigned char RdToWrDly;
3936};
3937
3938/*
3939 * Write a value to a register and check that the write completed. These
3940 * writes normally complete in a cycle or two, so one read should suffice.
3941 * The very first read exists to flush the posted write to the device.
3942 */
3943static int wrreg_wait(adapter_t *adapter, unsigned int addr, u32 val)
3944{
3945 t3_write_reg(adapter, addr, val);
3946 (void) t3_read_reg(adapter, addr); /* flush */
3947 if (!(t3_read_reg(adapter, addr) & F_BUSY))
3948 return 0;
3949 CH_ERR(adapter, "write to MC7 register 0x%x timed out\n", addr);
3950 return -EIO;
3951}
3952
3953static int mc7_init(struct mc7 *mc7, unsigned int mc7_clock, int mem_type)
3954{
3955 static const unsigned int mc7_mode[] = {
3956 0x632, 0x642, 0x652, 0x432, 0x442
3957 };
3958 static const struct mc7_timing_params mc7_timings[] = {
3959 { 12, 3, 4, { 20, 28, 34, 52, 0 }, 15, 6, 4 },
3960 { 12, 4, 5, { 20, 28, 34, 52, 0 }, 16, 7, 4 },
3961 { 12, 5, 6, { 20, 28, 34, 52, 0 }, 17, 8, 4 },
3962 { 9, 3, 4, { 15, 21, 26, 39, 0 }, 12, 6, 4 },
3963 { 9, 4, 5, { 15, 21, 26, 39, 0 }, 13, 7, 4 }
3964 };
3965
3966 u32 val;
3967 unsigned int width, density, slow, attempts;
3969 const struct mc7_timing_params *p = &mc7_timings[mem_type];
3970
3971 if (!mc7->size)
3972 return 0;
3973
3975 slow = val & F_SLOW;
3976 width = G_WIDTH(val);
3977 density = G_DEN(val);
3978
3980 val = t3_read_reg(adapter, mc7->offset + A_MC7_CFG); /* flush */
3981 msleep(1);
3982
3983 if (!slow) {
3986 msleep(1);
3989 CH_ERR(adapter, "%s MC7 calibration timed out\n",
3990 mc7->name);
3991 goto out_fail;
3992 }
3993 }
3994
3998 V_REFCYC(p->RefCyc[density]) | V_BKCYC(p->BkCyc) |
4000
4002 val | F_CLKEN | F_TERM150);
4003 (void) t3_read_reg(adapter, mc7->offset + A_MC7_CFG); /* flush */
4004
4005 if (!slow)
4007 F_DLLENB);
4008 udelay(1);
4009
4010 val = slow ? 3 : 6;
4011 if (wrreg_wait(adapter, mc7->offset + A_MC7_PRE, 0) ||
4015 goto out_fail;
4016
4017 if (!slow) {
4020 F_DLLRST, 0);
4021 udelay(5);
4022 }
4023
4024 if (wrreg_wait(adapter, mc7->offset + A_MC7_PRE, 0) ||
4028 mc7_mode[mem_type]) ||
4029 wrreg_wait(adapter, mc7->offset + A_MC7_EXT_MODE1, val | 0x380) ||
4031 goto out_fail;
4032
4033 /* clock value is in KHz */
4034 mc7_clock = mc7_clock * 7812 + mc7_clock / 2; /* ns */
4035 mc7_clock /= 1000000; /* KHz->MHz, ns->us */
4036
4038 F_PERREFEN | V_PREREFDIV(mc7_clock));
4039 (void) t3_read_reg(adapter, mc7->offset + A_MC7_REF); /* flush */
4040
4046 (mc7->size << width) - 1);
4048 (void) t3_read_reg(adapter, mc7->offset + A_MC7_BIST_OP); /* flush */
4049
4050 attempts = 50;
4051 do {
4052 msleep(250);
4054 } while ((val & F_BUSY) && --attempts);
4055 if (val & F_BUSY) {
4056 CH_ERR(adapter, "%s MC7 BIST timed out\n", mc7->name);
4057 goto out_fail;
4058 }
4059
4060 /* Enable normal memory accesses. */
4062 return 0;
4063
4064 out_fail:
4065 return -1;
4066}
4067
4068static void config_pcie(adapter_t *adap)
4069{
4070 static const u16 ack_lat[4][6] = {
4071 { 237, 416, 559, 1071, 2095, 4143 },
4072 { 128, 217, 289, 545, 1057, 2081 },
4073 { 73, 118, 154, 282, 538, 1050 },
4074 { 67, 107, 86, 150, 278, 534 }
4075 };
4076 static const u16 rpl_tmr[4][6] = {
4077 { 711, 1248, 1677, 3213, 6285, 12429 },
4078 { 384, 651, 867, 1635, 3171, 6243 },
4079 { 219, 354, 462, 846, 1614, 3150 },
4080 { 201, 321, 258, 450, 834, 1602 }
4081 };
4082
4083 u16 val, devid;
4084 unsigned int log2_width, pldsize;
4085 unsigned int fst_trn_rx, fst_trn_tx, acklat, rpllmt;
4086
4089 &val);
4090 pldsize = (val & PCI_EXP_DEVCTL_PAYLOAD) >> 5;
4091
4092 /*
4093 * Gen2 adapter pcie bridge compatibility requires minimum
4094 * Max_Read_Request_size
4095 */
4096 t3_os_pci_read_config_2(adap, 0x2, &devid);
4097 if (devid == 0x37) {
4101 pldsize = 0;
4102 }
4103
4106 &val);
4107
4108 fst_trn_tx = G_NUMFSTTRNSEQ(t3_read_reg(adap, A_PCIE_PEX_CTRL0));
4109 fst_trn_rx = adap->params.rev == 0 ? fst_trn_tx :
4111 log2_width = fls(adap->params.pci.width) - 1;
4112 acklat = ack_lat[log2_width][pldsize];
4113 if (val & 1) /* check LOsEnable */
4114 acklat += fst_trn_tx * 4;
4115 rpllmt = rpl_tmr[log2_width][pldsize] + fst_trn_rx * 4;
4116
4117 if (adap->params.rev == 0)
4120 V_T3A_ACKLAT(acklat));
4121 else
4123 V_ACKLAT(acklat));
4124
4126 V_REPLAYLMT(rpllmt));
4127
4128 t3_write_reg(adap, A_PCIE_PEX_ERR, 0xffffffff);
4132}
4133
4148{
4149 int err = -EIO, attempts, i;
4150 const struct vpd_params *vpd = &adapter->params.vpd;
4151
4152 if (adapter->params.rev > 0)
4154 else if (calibrate_xgm(adapter))
4155 goto out_err;
4156
4157 if (adapter->params.nports > 2)
4159
4160 if (vpd->mclk) {
4162
4163 if (mc7_init(&adapter->pmrx, vpd->mclk, vpd->mem_timing) ||
4164 mc7_init(&adapter->pmtx, vpd->mclk, vpd->mem_timing) ||
4165 mc7_init(&adapter->cm, vpd->mclk, vpd->mem_timing) ||
4169 goto out_err;
4170
4171 for (i = 0; i < 32; i++)
4172 if (clear_sge_ctxt(adapter, i, F_CQ))
4173 goto out_err;
4174 }
4175
4177 goto out_err;
4178
4183 min(adapter->params.sge.max_pkt_size, 16384U));
4185 if (is_pcie(adapter))
4187 else
4190
4191 if (adapter->params.rev == T3_REV_C)
4194
4195 t3_write_reg(adapter, A_PM1_RX_CFG, 0xffffffff);
4201
4203
4204 t3_write_reg(adapter, A_CIM_HOST_ACC_DATA, vpd->uclk | fw_params);
4207 (void) t3_read_reg(adapter, A_CIM_BOOT_CFG); /* flush */
4208
4209 attempts = 100;
4210 do { /* wait for uP to initialize */
4211 msleep(20);
4212 } while (t3_read_reg(adapter, A_CIM_HOST_ACC_DATA) && --attempts);
4213 if (!attempts) {
4214 CH_ERR(adapter, "uP initialization timed out\n");
4215 goto out_err;
4216 }
4217
4218 err = 0;
4219 out_err:
4220 return err;
4221}
4222
4232{
4233 static unsigned short speed_map[] = { 33, 66, 100, 133 };
4234 u32 pci_mode, pcie_cap;
4235
4237 if (pcie_cap) {
4238 u16 val;
4239
4241 p->pcie_cap_addr = pcie_cap;
4243 &val);
4244 p->width = (val >> 4) & 0x3f;
4245 return;
4246 }
4247
4248 pci_mode = t3_read_reg(adapter, A_PCIX_MODE);
4249 p->speed = speed_map[G_PCLKRANGE(pci_mode)];
4250 p->width = (pci_mode & F_64BIT) ? 64 : 32;
4251 pci_mode = G_PCIXINITPAT(pci_mode);
4252 if (pci_mode == 0)
4254 else if (pci_mode < 4)
4256 else if (pci_mode < 8)
4258 else
4260}
4261
4272 unsigned int caps)
4273{
4274 lc->supported = caps;
4277 lc->requested_fc = lc->fc = PAUSE_RX | PAUSE_TX;
4278 if (lc->supported & SUPPORTED_Autoneg) {
4279 lc->advertising = lc->supported;
4280 lc->autoneg = AUTONEG_ENABLE;
4282 } else {
4283 lc->advertising = 0;
4285 }
4286}
4287
4295static unsigned int __devinit mc7_calc_size(u32 cfg)
4296{
4297 unsigned int width = G_WIDTH(cfg);
4298 unsigned int banks = !!(cfg & F_BKS) + 1;
4299 unsigned int org = !!(cfg & F_ORG) + 1;
4300 unsigned int density = G_DEN(cfg);
4301 unsigned int MBs = ((256 << density) * banks) / (org << width);
4302
4303 return MBs << 20;
4304}
4305
4307 unsigned int base_addr, const char *name)
4308{
4309 u32 cfg;
4310
4311 mc7->adapter = adapter;
4312 mc7->name = name;
4313 mc7->offset = base_addr - MC7_PMRX_BASE_ADDR;
4315 mc7->size = G_DEN(cfg) == M_DEN ? 0 : mc7_calc_size(cfg);
4316 mc7->width = G_WIDTH(cfg);
4317}
4318
4319void mac_prep(struct cmac *mac, adapter_t *adapter, int index)
4320{
4321 u16 devid;
4322
4323 mac->adapter = adapter;
4325 if (mac->multiport) {
4326 mac->ext_port = (unsigned char)index;
4327 mac->nucast = 8;
4328 } else
4329 mac->nucast = 1;
4330
4331 /* Gen2 adapter uses VPD xauicfg[] to notify driver which MAC
4332 is connected to each port, its suppose to be using xgmac0 for both ports
4333 */
4334 t3_os_pci_read_config_2(adapter, 0x2, &devid);
4335
4336 if (mac->multiport ||
4337 (!adapter->params.vpd.xauicfg[1] && (devid==0x37)))
4338 index = 0;
4339
4341
4342 if (adapter->params.rev == 0 && uses_xaui(adapter)) {
4344 is_10G(adapter) ? 0x2901c04 : 0x2301c04);
4346 F_ENRGMII, 0);
4347 }
4348}
4349
4360{
4362 3 : 2);
4363 u32 gpio_out = ai->gpio_out;
4364
4365 mi1_init(adapter, ai);
4366 t3_write_reg(adapter, A_I2C_CFG, /* set for 80KHz */
4367 V_I2C_CLKDIV(adapter->params.vpd.cclk / 80 - 1));
4369 gpio_out | F_GPIO0_OEN | F_GPIO0_OUT_VAL);
4372
4373 if (adapter->params.rev == 0 || !uses_xaui(adapter))
4374 val |= F_ENRGMII;
4375
4376 /* Enable MAC clocks so we can access the registers */
4379
4380 val |= F_CLKDIVRESET_;
4385}
4386
4394{
4395 int i, save_and_restore_pcie =
4397 uint16_t devid = 0;
4398
4399 if (save_and_restore_pcie)
4402
4403 /*
4404 * Delay. Give Some time to device to reset fully.
4405 * XXX The delay time should be modified.
4406 */
4407 for (i = 0; i < 10; i++) {
4408 msleep(50);
4409 t3_os_pci_read_config_2(adapter, 0x00, &devid);
4410 if (devid == 0x1425)
4411 break;
4412 }
4413
4414 if (devid != 0x1425)
4415 return -1;
4416
4417 if (save_and_restore_pcie)
4419 return 0;
4420}
4421
4422static int init_parity(adapter_t *adap)
4423{
4424 int i, err, addr;
4425
4427 return -EBUSY;
4428
4429 for (err = i = 0; !err && i < 16; i++)
4430 err = clear_sge_ctxt(adap, i, F_EGRESS);
4431 for (i = 0xfff0; !err && i <= 0xffff; i++)
4432 err = clear_sge_ctxt(adap, i, F_EGRESS);
4433 for (i = 0; !err && i < SGE_QSETS; i++)
4434 err = clear_sge_ctxt(adap, i, F_RESPONSEQ);
4435 if (err)
4436 return err;
4437
4439 for (i = 0; i < 4; i++)
4440 for (addr = 0; addr <= M_IBQDBGADDR; addr++) {
4442 F_IBQDBGWR | V_IBQDBGQID(i) |
4443 V_IBQDBGADDR(addr));
4445 F_IBQDBGBUSY, 0, 2, 1);
4446 if (err)
4447 return err;
4448 }
4449 return 0;
4450}
4451
4462 const struct adapter_info *ai, int reset)
4463{
4464 int ret;
4465 unsigned int i, j = 0;
4466
4468
4469 adapter->params.info = ai;
4470 adapter->params.nports = ai->nports0 + ai->nports1;
4471 adapter->params.chan_map = (!!ai->nports0) | (!!ai->nports1 << 1);
4473
4474 /*
4475 * We used to only run the "adapter check task" once a second if
4476 * we had PHYs which didn't support interrupts (we would check
4477 * their link status once a second). Now we check other conditions
4478 * in that routine which would [potentially] impose a very high
4479 * interrupt load on the system. As such, we now always scan the
4480 * adapter state once a second ...
4481 */
4483
4484 if (adapter->params.nports > 2)
4486 else
4491
4493 if (ret < 0)
4494 return ret;
4495
4496 if (reset && t3_reset_adapter(adapter))
4497 return -1;
4498
4499 if (adapter->params.vpd.mclk) {
4500 struct tp_params *p = &adapter->params.tp;
4501
4505
4506 p->nchan = adapter->params.chan_map == 3 ? 2 : 1;
4509 p->cm_size = t3_mc7_size(&adapter->cm);
4510 p->chan_rx_size = p->pmrx_size / 2; /* only 1 Rx channel */
4511 p->chan_tx_size = p->pmtx_size / p->nchan;
4512 p->rx_pg_size = 64 * 1024;
4513 p->tx_pg_size = is_10G(adapter) ? 64 * 1024 : 16 * 1024;
4516 p->ntimer_qs = p->cm_size >= (128 << 20) ||
4517 adapter->params.rev > 0 ? 12 : 6;
4518 p->tre = fls(adapter->params.vpd.cclk / (1000 / TP_TMR_RES)) -
4519 1;
4520 p->dack_re = fls(adapter->params.vpd.cclk / 10) - 1; /* 100us */
4521 }
4522
4526
4528
4529 if (is_offload(adapter)) {
4531 /* PR 6487. TOE and filtering are mutually exclusive */
4535
4538 }
4539
4541 ret = init_parity(adapter);
4542 if (ret)
4543 return ret;
4544
4545 if (adapter->params.nports > 2 &&
4547 return ret;
4548
4550 u8 hw_addr[6];
4551 const struct port_type_info *pti;
4552 struct port_info *p = adap2pinfo(adapter, i);
4553
4554 for (;;) {
4555 unsigned port_type = adapter->params.vpd.port_type[j];
4556 if (port_type) {
4558 pti = &port_types[port_type];
4559 break;
4560 } else
4561 return -EINVAL;
4562 }
4563 j++;
4565 return -EINVAL;
4566 }
4567 ret = pti->phy_prep(p, ai->phy_base_addr + j,
4568 ai->mdio_ops);
4569 if (ret)
4570 return ret;
4571 mac_prep(&p->mac, adapter, j);
4572 ++j;
4573
4574 /*
4575 * The VPD EEPROM stores the base Ethernet address for the
4576 * card. A port's address is derived from the base by adding
4577 * the port's index to the base's low octet.
4578 */
4579 memcpy(hw_addr, adapter->params.vpd.eth_base, 5);
4580 hw_addr[5] = adapter->params.vpd.eth_base[5] + i;
4581
4584 p->phy.ops->power_down(&p->phy, 1);
4585
4586 /*
4587 * If the PHY doesn't support interrupts for link status
4588 * changes, schedule a scan of the adapter links at least
4589 * once a second.
4590 */
4591 if (!(p->phy.caps & SUPPORTED_IRQ) &&
4594 }
4595
4596 return 0;
4597}
4598
4609{
4610 unsigned int i;
4611 int ret, j = 0;
4612
4613 early_hw_init(adap, adap->params.info);
4614 ret = init_parity(adap);
4615 if (ret)
4616 return ret;
4617
4618 if (adap->params.nports > 2 &&
4619 (ret = t3_vsc7323_init(adap, adap->params.nports)))
4620 return ret;
4621
4622 for_each_port(adap, i) {
4623 const struct port_type_info *pti;
4624 struct port_info *p = adap2pinfo(adap, i);
4625
4626 for (;;) {
4627 unsigned port_type = adap->params.vpd.port_type[j];
4628 if (port_type) {
4630 pti = &port_types[port_type];
4631 break;
4632 } else
4633 return -EINVAL;
4634 }
4635 j++;
4636 if (j >= ARRAY_SIZE(adap->params.vpd.port_type))
4637 return -EINVAL;
4638 }
4639 ret = pti->phy_prep(p, p->phy.addr, NULL);
4640 if (ret)
4641 return ret;
4642 p->phy.ops->power_down(&p->phy, 1);
4643 }
4644 return 0;
4645}
4646
4648{
4651}
4652
4654{
4655 u32 val;
4656
4657 val = port ? F_PORT1ACTIVE : F_PORT0ACTIVE;
4659 val);
4660}
4661
4663{
4666}
4667
4669{
4672}
4673
4674static int t3_cim_hac_read(adapter_t *adapter, u32 addr, u32 *val)
4675{
4676 u32 v;
4677
4680 F_HOSTBUSY, 0, 10, 10, &v))
4681 return -EIO;
4682
4684
4685 return 0;
4686}
4687
4689{
4690 u32 v;
4691
4693
4694 addr |= F_HOSTWRITE;
4696
4698 F_HOSTBUSY, 0, 10, 5, &v))
4699 return -EIO;
4700 return 0;
4701}
4702
4703int t3_get_up_la(adapter_t *adapter, u32 *stopped, u32 *index,
4704 u32 *size, void *data)
4705{
4706 u32 v, *buf = data;
4707 int i, cnt, ret;
4708
4709 if (*size < LA_ENTRIES * 4)
4710 return -EINVAL;
4711
4712 ret = t3_cim_hac_read(adapter, LA_CTRL, &v);
4713 if (ret)
4714 goto out;
4715
4716 *stopped = !(v & 1);
4717
4718 /* Freeze LA */
4719 if (!*stopped) {
4720 ret = t3_cim_hac_write(adapter, LA_CTRL, 0);
4721 if (ret)
4722 goto out;
4723 }
4724
4725 for (i = 0; i < LA_ENTRIES; i++) {
4726 v = (i << 2) | (1 << 1);
4727 ret = t3_cim_hac_write(adapter, LA_CTRL, v);
4728 if (ret)
4729 goto out;
4730
4731 ret = t3_cim_hac_read(adapter, LA_CTRL, &v);
4732 if (ret)
4733 goto out;
4734
4735 cnt = 20;
4736 while ((v & (1 << 1)) && cnt) {
4737 udelay(5);
4738 --cnt;
4739 ret = t3_cim_hac_read(adapter, LA_CTRL, &v);
4740 if (ret)
4741 goto out;
4742 }
4743
4744 if (v & (1 << 1))
4745 return -EIO;
4746
4747 ret = t3_cim_hac_read(adapter, LA_DATA, &v);
4748 if (ret)
4749 goto out;
4750
4751 *buf++ = v;
4752 }
4753
4754 ret = t3_cim_hac_read(adapter, LA_CTRL, &v);
4755 if (ret)
4756 goto out;
4757
4758 *index = (v >> 16) + 4;
4759 *size = LA_ENTRIES * 4;
4760out:
4761 /* Unfreeze LA */
4763 return ret;
4764}
4765
4766int t3_get_up_ioqs(adapter_t *adapter, u32 *size, void *data)
4767{
4768 u32 v, *buf = data;
4769 int i, j, ret;
4770
4771 if (*size < IOQ_ENTRIES * sizeof(struct t3_ioq_entry))
4772 return -EINVAL;
4773
4774 for (i = 0; i < 4; i++) {
4775 ret = t3_cim_hac_read(adapter, (4 * i), &v);
4776 if (ret)
4777 goto out;
4778
4779 *buf++ = v;
4780 }
4781
4782 for (i = 0; i < IOQ_ENTRIES; i++) {
4783 u32 base_addr = 0x10 * (i + 1);
4784
4785 for (j = 0; j < 4; j++) {
4786 ret = t3_cim_hac_read(adapter, base_addr + 4 * j, &v);
4787 if (ret)
4788 goto out;
4789
4790 *buf++ = v;
4791 }
4792 }
4793
4794 *size = IOQ_ENTRIES * sizeof(struct t3_ioq_entry);
4795
4796out:
4797 return ret;
4798}
4799
#define MDIO_UNLOCK(adapter)
Definition: cxgb_adapter.h:410
uint8_t hw_addr[ETHER_ADDR_LEN]
Definition: cxgb_adapter.h:18
void t3_sge_err_intr_handler(adapter_t *adapter)
Definition: cxgb_sge.c:522
static __inline void t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)
Definition: cxgb_adapter.h:437
#define MDIO_LOCK(adapter)
Definition: cxgb_adapter.h:409
static __inline uint32_t t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
Definition: cxgb_adapter.h:431
static __inline void t3_os_pci_read_config_4(adapter_t *adapter, int reg, uint32_t *val)
Definition: cxgb_adapter.h:443
int t3_os_pci_save_state(struct adapter *adapter)
Definition: cxgb_main.c:1193
int t3_os_pci_restore_state(struct adapter *adapter)
Definition: cxgb_main.c:1206
void t3_os_phymod_changed(struct adapter *adap, int port_id)
Definition: cxgb_main.c:1264
uint32_t port_id
Definition: cxgb_adapter.h:11
struct adapter * adapter
Definition: cxgb_adapter.h:0
static __inline void t3_os_pci_read_config_2(adapter_t *adapter, int reg, uint16_t *val)
Definition: cxgb_adapter.h:455
int t3_os_find_pci_capability(adapter_t *adapter, int cap)
Definition: cxgb_main.c:1153
const struct port_type_info * port_type
Definition: cxgb_adapter.h:4
void t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed, int duplex, int fc, int mac_was_reset)
Definition: cxgb_main.c:1232
struct cmac mac
Definition: cxgb_adapter.h:6
void t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[])
Definition: cxgb_main.c:1285
static __inline struct port_info * adap2pinfo(struct adapter *adap, int idx)
Definition: cxgb_adapter.h:474
static __inline void t3_os_pci_write_config_2(adapter_t *adapter, int reg, uint16_t val)
Definition: cxgb_adapter.h:461
static __inline void t3_os_pci_write_config_4(adapter_t *adapter, int reg, uint32_t val)
Definition: cxgb_adapter.h:449
void t3_os_link_intr(struct port_info *)
Definition: cxgb_main.c:2315
@ LF_MAYBE
Definition: cxgb_adapter.h:87
@ LF_YES
Definition: cxgb_adapter.h:88
@ LF_NO
Definition: cxgb_adapter.h:86
struct cphy phy
Definition: cxgb_adapter.h:5
int link_fault
Definition: cxgb_adapter.h:16
int t3_ael2005_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
int t3_qt2045_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
int t3_ael1002_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
Definition: cxgb_ael1002.c:345
int t3_ael2020_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
int t3_ael1006_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
Definition: cxgb_ael1002.c:427
int t3_xaui_direct_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
int t3_aq100x_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
Definition: cxgb_aq100x.c:465
static int mdio_read(struct cphy *phy, int mmd, int reg, unsigned int *valp)
Definition: cxgb_common.h:592
@ PAUSE_AUTONEG
Definition: cxgb_common.h:56
@ PAUSE_TX
Definition: cxgb_common.h:55
@ PAUSE_RX
Definition: cxgb_common.h:54
@ IOQ_ENTRIES
Definition: cxgb_common.h:111
int t3_vsc7323_init(adapter_t *adap, int nports)
Definition: cxgb_vsc7323.c:113
int t3_vsc8211_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
Definition: cxgb_vsc8211.c:430
@ SGE_QSETS
Definition: cxgb_common.h:115
void t3_mac_disable_exact_filters(struct cmac *mac)
Definition: cxgb_xgmac.c:367
void t3_sge_prep(adapter_t *adap, struct sge_params *p)
Definition: cxgb_sge.c:550
void t3_mac_enable_exact_filters(struct cmac *mac)
Definition: cxgb_xgmac.c:378
static int is_10G(const adapter_t *adap)
Definition: cxgb_common.h:652
#define G_TP_VERSION_MAJOR(x)
Definition: cxgb_common.h:83
static unsigned int core_ticks_per_usec(const adapter_t *adap)
Definition: cxgb_common.h:662
static unsigned int t3_mc7_size(const struct mc7 *p)
Definition: cxgb_common.h:470
#define XGM_REG(reg_addr, idx)
Definition: cxgb_common.h:628
@ TP_VERSION_MAJOR
Definition: cxgb_common.h:75
@ TP_VERSION_MINOR
Definition: cxgb_common.h:76
int t3_mac_set_speed_duplex_fc(struct cmac *mac, int speed, int duplex, int fc)
Definition: cxgb_xgmac.c:570
@ MAC_DIRECTION_RX
Definition: cxgb_common.h:496
@ MAC_DIRECTION_TX
Definition: cxgb_common.h:497
sge_context_type
Definition: cxgb_common.h:120
@ SGE_CNTXT_OFLD
Definition: cxgb_common.h:123
void t3_mc5_prep(adapter_t *adapter, struct mc5 *mc5, int mode)
Definition: cxgb_mc5.c:473
int t3_mac_enable(struct cmac *mac, int which)
Definition: cxgb_xgmac.c:648
static unsigned int t3_mc5_size(const struct mc5 *p)
Definition: cxgb_common.h:456
static int uses_xaui(const adapter_t *adap)
Definition: cxgb_common.h:647
#define G_TP_VERSION_MINOR(x)
Definition: cxgb_common.h:89
int t3_mac_init(struct cmac *mac)
Definition: cxgb_xgmac.c:141
#define SPEED_INVALID
Definition: cxgb_common.h:444
@ PHY_LINK_UP
Definition: cxgb_common.h:549
@ PHY_LINK_PARTIAL
Definition: cxgb_common.h:550
#define MAC_STATS_ACCUM_SECS
Definition: cxgb_common.h:623
#define VSC_STATS_ACCUM_SECS
Definition: cxgb_common.h:626
int t3_mac_disable(struct cmac *mac, int which)
Definition: cxgb_xgmac.c:700
@ EEPROMSIZE
Definition: cxgb_common.h:39
@ TCB_SIZE
Definition: cxgb_common.h:43
@ NCCTRL_WIN
Definition: cxgb_common.h:45
@ ECNUM_LEN
Definition: cxgb_common.h:41
@ NMTUS
Definition: cxgb_common.h:44
@ SERNUM_LEN
Definition: cxgb_common.h:40
@ RSS_TABLE_SIZE
Definition: cxgb_common.h:42
@ NTX_SCHED
Definition: cxgb_common.h:46
@ PROTO_SRAM_LINES
Definition: cxgb_common.h:47
static int is_offload(const adapter_t *adap)
Definition: cxgb_common.h:657
int t3_mc5_init(struct mc5 *mc5, unsigned int nservers, unsigned int nfilters, unsigned int nroutes)
Definition: cxgb_mc5.c:329
@ cphy_cause_fifo_error
Definition: cxgb_common.h:531
@ cphy_cause_module_change
Definition: cxgb_common.h:532
@ cphy_cause_link_change
Definition: cxgb_common.h:530
@ cphy_cause_alarm
Definition: cxgb_common.h:533
@ MC5_MODE_144_BIT
Definition: cxgb_common.h:343
#define MAX_RX_COALESCING_LEN
Definition: cxgb_common.h:51
static unsigned int is_pcie(const adapter_t *adap)
Definition: cxgb_common.h:673
#define DUPLEX_INVALID
Definition: cxgb_common.h:445
@ LASI_STAT
Definition: cxgb_common.h:519
@ LASI_CTRL
Definition: cxgb_common.h:516
#define for_each_port(adapter, iter)
Definition: cxgb_common.h:642
static int t3_wait_op_done(adapter_t *adapter, int reg, u32 mask, int polarity, int attempts, int delay)
Definition: cxgb_common.h:684
#define adapter_info(adap)
Definition: cxgb_common.h:645
void t3_mc5_intr_handler(struct mc5 *mc5)
Definition: cxgb_mc5.c:430
@ T3_REV_B2
Definition: cxgb_common.h:410
@ T3_REV_A
Definition: cxgb_common.h:408
@ T3_REV_C
Definition: cxgb_common.h:411
@ DEFAULT_NSERVERS
Definition: cxgb_common.h:337
@ MDIO_DEV_PMA_PMD
Definition: cxgb_common.h:503
@ STAT_ULP_CH1_PBL_OOB
Definition: cxgb_common.h:68
@ STAT_PCI_CORR_ECC
Definition: cxgb_common.h:69
@ STAT_ULP_CH0_PBL_OOB
Definition: cxgb_common.h:67
static int mdio_write(struct cphy *phy, int mmd, int reg, unsigned int val)
Definition: cxgb_common.h:598
void t3c_pcs_force_los(struct cmac *mac)
Definition: cxgb_xgmac.c:108
@ FW_VERSION_MINOR
Definition: cxgb_common.h:100
@ FW_VERSION_MAJOR
Definition: cxgb_common.h:99
@ SUPPORTED_IRQ
Definition: cxgb_common.h:63
@ LA_CTRL
Definition: cxgb_common.h:105
@ LA_ENTRIES
Definition: cxgb_common.h:107
@ LA_DATA
Definition: cxgb_common.h:106
void t3_fatal_err(adapter_t *adapter)
Definition: cxgb_main.c:1134
void t3_sge_init(adapter_t *adap, struct sge_params *p)
Definition: cxgb_sge.c:430
@ PCI_VARIANT_PCIE
Definition: cxgb_common.h:384
@ PCI_VARIANT_PCIX_MODE1_PARITY
Definition: cxgb_common.h:381
@ PCI_VARIANT_PCIX_266_MODE2
Definition: cxgb_common.h:383
@ PCI_VARIANT_PCI
Definition: cxgb_common.h:380
@ PCI_VARIANT_PCIX_MODE1_ECC
Definition: cxgb_common.h:382
void t3b_pcs_reset(struct cmac *mac)
Definition: cxgb_xgmac.c:97
int t3_mv88e1xxx_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
static unsigned int dack_ticks_to_usec(const adapter_t *adap, unsigned int ticks)
Definition: cxgb_common.h:667
int t3_tn1010_phy_prep(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *mdio_ops)
Definition: cxgb_tn1010.c:214
@ MAX_VPD_BYTES
Definition: cxgb_common.h:369
#define G_FW_VERSION_MINOR(x)
#define G_FW_VERSION_TYPE(x)
#define FW_WR_NUM
#define G_FW_VERSION_MAJOR(x)
#define ADVERTISE_1000XHALF
Definition: cxgb_osdep.h:160
#define ADVERTISED_1000baseT_Full
Definition: cxgb_osdep.h:246
#define ADVERTISE_1000XPSE_ASYM
Definition: cxgb_osdep.h:162
#define ADVERTISED_Pause
Definition: cxgb_osdep.h:254
#define cpu_to_le32(x)
Definition: cxgb_osdep.h:192
#define BMCR_SPEED100
Definition: cxgb_osdep.h:139
#define ADVERTISE_PAUSE_ASYM
Definition: cxgb_osdep.h:150
@ TP_TMR_RES
Definition: cxgb_osdep.h:55
#define SPEED_100
Definition: cxgb_osdep.h:264
#define MII_ADVERTISE
Definition: cxgb_osdep.h:146
#define SUPPORTED_AUI
Definition: cxgb_osdep.h:232
#define AUTONEG_DISABLE
Definition: cxgb_osdep.h:260
#define PCI_VPD_ADDR
Definition: cxgb_osdep.h:171
#define AUTONEG_ENABLE
Definition: cxgb_osdep.h:261
#define ADVERTISE_1000HALF
Definition: cxgb_osdep.h:152
#define __devinit
Definition: cxgb_osdep.h:187
uint64_t u64
Definition: cxgb_osdep.h:203
#define PCI_VPD_ADDR_F
Definition: cxgb_osdep.h:172
#define le32_to_cpu(x)
Definition: cxgb_osdep.h:190
#define SPEED_1000
Definition: cxgb_osdep.h:265
#define ADVERTISE_10HALF
Definition: cxgb_osdep.h:155
#define PCI_VPD_DATA
Definition: cxgb_osdep.h:173
#define ADVERTISE_100FULL
Definition: cxgb_osdep.h:156
#define swab32(x)
Definition: cxgb_osdep.h:193
#define ARRAY_SIZE(x)
Definition: cxgb_osdep.h:189
#define le16_to_cpu(x)
Definition: cxgb_osdep.h:191
#define udelay(x)
Definition: cxgb_osdep.h:188
#define ADVERTISE_1000XPAUSE
Definition: cxgb_osdep.h:163
#define simple_strtoul(...)
Definition: cxgb_osdep.h:195
#define SUPPORTED_10000baseT_Full
Definition: cxgb_osdep.h:236
#define DUPLEX_FULL
Definition: cxgb_osdep.h:268
#define SUPPORTED_Autoneg
Definition: cxgb_osdep.h:230
#define ADVERTISED_100baseT_Half
Definition: cxgb_osdep.h:243
#define MII_CTRL1000
Definition: cxgb_osdep.h:147
#define ADVERTISED_100baseT_Full
Definition: cxgb_osdep.h:244
#define PCI_EXP_LNKCTL
Definition: cxgb_osdep.h:179
#define BMCR_SPEED1000
Definition: cxgb_osdep.h:138
uint8_t u8
Definition: cxgb_osdep.h:200
#define ADVERTISED_10baseT_Full
Definition: cxgb_osdep.h:242
#define ADVERTISE_1000FULL
Definition: cxgb_osdep.h:153
#define PCI_EXP_DEVCTL
Definition: cxgb_osdep.h:176
#define PCI_CAP_ID_EXP
Definition: cxgb_osdep.h:175
#define PCI_EXP_LNKSTA
Definition: cxgb_osdep.h:180
#define ADVERTISE_10FULL
Definition: cxgb_osdep.h:154
#define BMCR_ANENABLE
Definition: cxgb_osdep.h:137
#define ADVERTISED_1000baseT_Half
Definition: cxgb_osdep.h:245
#define PCI_EXP_DEVCTL_READRQ
Definition: cxgb_osdep.h:178
#define ADVERTISE_100HALF
Definition: cxgb_osdep.h:157
#define ADVERTISED_10baseT_Half
Definition: cxgb_osdep.h:241
#define CH_WARN(adap, fmt,...)
Definition: cxgb_osdep.h:124
#define CH_ERR(adap, fmt,...)
Definition: cxgb_osdep.h:123
uint16_t u16
Definition: cxgb_osdep.h:201
#define CH_ALERT(adap, fmt,...)
Definition: cxgb_osdep.h:125
#define ADVERTISED_Asym_Pause
Definition: cxgb_osdep.h:255
#define PCI_CAP_ID_VPD
Definition: cxgb_osdep.h:170
#define ADVERTISE_PAUSE_CAP
Definition: cxgb_osdep.h:149
#define PCI_EXP_DEVCTL_PAYLOAD
Definition: cxgb_osdep.h:177
#define BMCR_FULLDPLX
Definition: cxgb_osdep.h:141
uint32_t u32
Definition: cxgb_osdep.h:202
#define ADVERTISE_1000XFULL
Definition: cxgb_osdep.h:161
#define cpu_to_be32(x)
Definition: cxgb_osdep.h:132
#define A_TP_VLAN_PRI_MAP
Definition: cxgb_regs.h:5202
#define F_GPIO11_OEN
Definition: cxgb_regs.h:2112
#define XGMAC0_0_BASE_ADDR
Definition: cxgb_regs.h:7086
#define V_IPTTL(x)
Definition: cxgb_regs.h:3640
#define F_RCVMSTABT
Definition: cxgb_regs.h:641
#define F_PCIE_PIOPARERR
Definition: cxgb_regs.h:989
#define A_TP_PMM_RX_MAX_PAGE
Definition: cxgb_regs.h:3681
#define V_WRTORDDLY(x)
Definition: cxgb_regs.h:2849
#define V_PCIE_MSIXPARERR(x)
Definition: cxgb_regs.h:972
#define A_TP_FINWAIT2_TIMER
Definition: cxgb_regs.h:4363
#define V_PERSHIFTBACKOFFMAX(x)
Definition: cxgb_regs.h:4396
#define F_64BIT
Definition: cxgb_regs.h:724
#define A_TP_TX_MOD_QUE_TABLE
Definition: cxgb_regs.h:4580
#define A_MC7_PARM
Definition: cxgb_regs.h:2820
#define A_XGM_RX_HASH_HIGH
Definition: cxgb_regs.h:7185
#define F_IBQTPPARERR
Definition: cxgb_regs.h:3134
#define V_CLKDIV(x)
Definition: cxgb_regs.h:6278
#define F_GPIO2_OEN
Definition: cxgb_regs.h:2148
#define F_RETRYBUFPARERR
Definition: cxgb_regs.h:968
#define F_IBQDBGBUSY
Definition: cxgb_regs.h:3372
#define V_SACKRX(x)
Definition: cxgb_regs.h:3712
#define F_MTUENABLE
Definition: cxgb_regs.h:3705
#define F_SIGTARABT
Definition: cxgb_regs.h:649
#define F_OBQULPHIPARERR
Definition: cxgb_regs.h:3154
#define A_TP_PERS_MIN
Definition: cxgb_regs.h:4321
#define F_FATALPERREN
Definition: cxgb_regs.h:6470
#define A_TP_RX_TRC_KEY0
Definition: cxgb_regs.h:5122
#define A_TP_TX_MOD_QUEUE_WEIGHT0
Definition: cxgb_regs.h:4647
#define V_T3A_ACKLAT(x)
Definition: cxgb_regs.h:1294
#define S_GPIO1
Definition: cxgb_regs.h:2366
#define V_RXMAPMODE(x)
Definition: cxgb_regs.h:5140
#define A_CIM_HOST_INT_CAUSE
Definition: cxgb_regs.h:3236
#define V_ACKLAT(x)
Definition: cxgb_regs.h:1284
#define A_TP_CMM_TIMER_BASE
Definition: cxgb_regs.h:3658
#define A_MC7_UE_ADDR
Definition: cxgb_regs.h:2991
#define F_ENABLELINKDWNDRST
Definition: cxgb_regs.h:1040
#define A_CIM_HOST_INT_ENABLE
Definition: cxgb_regs.h:3122
#define F_UE
Definition: cxgb_regs.h:3055
#define F_RXFBARBPRIO
Definition: cxgb_regs.h:3464
#define G_I2C_DATA(x)
Definition: cxgb_regs.h:6252
#define M_IESPI_PAR_ERROR
Definition: cxgb_regs.h:5668
#define F_GPIO0_OEN
Definition: cxgb_regs.h:2156
#define A_T3DBG_INT_ENABLE
Definition: cxgb_regs.h:2304
#define A_XGM_RX_CFG
Definition: cxgb_regs.h:7130
#define A_TP_TX_MOD_Q1_Q0_TIMER_SEPARATOR
Definition: cxgb_regs.h:5072
#define A_TP_PMM_SIZE
Definition: cxgb_regs.h:3670
#define A_TP_CCTRL_TABLE
Definition: cxgb_regs.h:4466
#define A_TP_EMBED_OP_FIELD2
Definition: cxgb_regs.h:5065
#define V_WINDOWSCALEMODE(x)
Definition: cxgb_regs.h:3722
#define F_GPIO5_OUT_VAL
Definition: cxgb_regs.h:2184
#define A_PCIE_CFG
Definition: cxgb_regs.h:1024
#define F_INTFFROMTXPKT
Definition: cxgb_regs.h:5341
#define M_RFPARERR
Definition: cxgb_regs.h:598
#define A_TP_MOD_RATE_LIMIT
Definition: cxgb_regs.h:4691
#define F_TXPACINGENABLE
Definition: cxgb_regs.h:3582
#define F_DLLENB
Definition: cxgb_regs.h:2814
#define A_TP_KEEP_INTVL
Definition: cxgb_regs.h:4342
#define A_MC7_EXT_MODE1
Definition: cxgb_regs.h:2750
#define A_TP_PMM_TX_MAX_PAGE
Definition: cxgb_regs.h:3689
#define A_MC7_INT_CAUSE
Definition: cxgb_regs.h:3061
#define M_PCIE_MSIXPARERR
Definition: cxgb_regs.h:971
#define A_TP_MAC_MATCH_MAP1
Definition: cxgb_regs.h:5286
#define F_ENFORCEPKT
Definition: cxgb_regs.h:5761
#define F_IBQULPPARERR
Definition: cxgb_regs.h:3138
#define A_PL_INT_ENABLE0
Definition: cxgb_regs.h:6369
#define A_PL_REV
Definition: cxgb_regs.h:6484
#define F_ITAGPARERR
Definition: cxgb_regs.h:3130
#define F_PORT1ACTIVE
Definition: cxgb_regs.h:5794
#define F_ENABLETXPORTFROMDA2
Definition: cxgb_regs.h:3912
#define F_SPLCMPDIS
Definition: cxgb_regs.h:629
#define A_ULPTX_INT_CAUSE
Definition: cxgb_regs.h:5548
#define F_SGL_CAL_EN
Definition: cxgb_regs.h:6550
#define A_XGM_XGM_INT_DISABLE
Definition: cxgb_regs.h:7270
#define A_ULPTX_INT_ENABLE
Definition: cxgb_regs.h:5514
#define V_OP(x)
Definition: cxgb_regs.h:3008
#define A_XGM_RGMII_IMP
Definition: cxgb_regs.h:7482
#define V_PHYADDR(x)
Definition: cxgb_regs.h:6302
#define V_PMMAXXFERLEN1(x)
Definition: cxgb_regs.h:4275
#define A_MPS_INT_ENABLE
Definition: cxgb_regs.h:5867
#define S_GPIO3
Definition: cxgb_regs.h:2358
#define A_XGM_PORT_CFG
Definition: cxgb_regs.h:7603
#define A_PCIE_MODE
Definition: cxgb_regs.h:1076
#define A_MC7_BIST_ADDR_BEG
Definition: cxgb_regs.h:3011
#define A_T3DBG_GPIO_ACT_LOW
Definition: cxgb_regs.h:2466
#define A_TP_PREAMBLE_MSB
Definition: cxgb_regs.h:5329
#define A_TP_TX_MOD_QUEUE_WEIGHT1
Definition: cxgb_regs.h:4625
#define A_SG_CONTEXT_DATA1
Definition: cxgb_regs.h:196
#define A_MPS_INT_CAUSE
Definition: cxgb_regs.h:5889
#define A_SG_INT_ENABLE
Definition: cxgb_regs.h:539
#define F_MC7_CM
Definition: cxgb_regs.h:6445
#define A_TP_KEEP_IDLE
Definition: cxgb_regs.h:4335
#define A_TP_RESET
Definition: cxgb_regs.h:4715
#define V_MSIXPARERR(x)
Definition: cxgb_regs.h:589
#define F_MSTDETPARERR
Definition: cxgb_regs.h:653
#define F_ZERO_E_CMD_ERROR
Definition: cxgb_regs.h:5617
#define F_BLKWRCTLINT
Definition: cxgb_regs.h:3260
#define F_ZERO_SWITCH_ERROR
Definition: cxgb_regs.h:5980
#define G_CALIMP(x)
Definition: cxgb_regs.h:7515
#define A_TP_PC_CONFIG
Definition: cxgb_regs.h:3769
#define A_CIM_SDRAM_BASE_ADDR
Definition: cxgb_regs.h:3101
#define F_DLLRST
Definition: cxgb_regs.h:2818
#define M_TABLELATENCYDELTA
Definition: cxgb_regs.h:3884
#define A_PM1_TX_CFG
Definition: cxgb_regs.h:5682
#define A_PCIE_INT_ENABLE
Definition: cxgb_regs.h:947
#define F_DRAMPARERR
Definition: cxgb_regs.h:3170
#define F_RSVDSPACEINT
Definition: cxgb_regs.h:3300
#define A_XGM_INT_CAUSE
Definition: cxgb_regs.h:7721
#define F_TXFBARBPRIO
Definition: cxgb_regs.h:3468
#define F_UNXSPLCPLERRR
Definition: cxgb_regs.h:997
#define A_TP_PARA_REG7
Definition: cxgb_regs.h:4271
#define A_MC7_EXT_MODE2
Definition: cxgb_regs.h:2766
#define V_IESPI_PAR_ERROR(x)
Definition: cxgb_regs.h:5669
#define F_BLKWRPLINT
Definition: cxgb_regs.h:3252
#define A_MC7_BIST_ADDR_END
Definition: cxgb_regs.h:3018
#define V_SYNSHIFTMAX(x)
Definition: cxgb_regs.h:4381
#define A_MC7_ERR_ADDR
Definition: cxgb_regs.h:2945
#define V_OCSPI_PAR_ERROR(x)
Definition: cxgb_regs.h:5674
#define F_CE
Definition: cxgb_regs.h:3059
#define S_GPIO4
Definition: cxgb_regs.h:2354
#define F_TXFIFO_UNDERRUN
Definition: cxgb_regs.h:7675
#define F_PIOPARERR
Definition: cxgb_regs.h:609
#define A_I2C_OP
Definition: cxgb_regs.h:6243
#define F_FLMTXFLSTEMPTY
Definition: cxgb_regs.h:4761
#define F_SGE3
Definition: cxgb_regs.h:6461
#define F_CHDRAFULL
Definition: cxgb_regs.h:3952
#define A_TP_EMBED_OP_FIELD3
Definition: cxgb_regs.h:5066
#define A_PCIX_INT_ENABLE
Definition: cxgb_regs.h:585
#define F_BLKWRBOOTINT
Definition: cxgb_regs.h:3284
#define A_SG_CONTEXT_DATA0
Definition: cxgb_regs.h:195
#define V_D1_WEIGHT(x)
Definition: cxgb_regs.h:5587
#define A_SF_OP
Definition: cxgb_regs.h:6359
#define F_GPIO4_OEN
Definition: cxgb_regs.h:2140
#define A_MC7_CAL
Definition: cxgb_regs.h:2884
#define F_DATASELFRAMEERR1
Definition: cxgb_regs.h:5398
#define M_SERDES_LOS
Definition: cxgb_regs.h:7717
#define A_MC7_MODE
Definition: cxgb_regs.h:2743
#define F_CRSTWRMMODE
Definition: cxgb_regs.h:1074
#define A_SG_CONTROL
Definition: cxgb_regs.h:37
#define V_BISTERR(x)
Definition: cxgb_regs.h:951
#define V_RXCOALESCESIZE(x)
Definition: cxgb_regs.h:4075
#define V_NICMODE(x)
Definition: cxgb_regs.h:3480
#define V_RXTSHIFTMAXR1(x)
Definition: cxgb_regs.h:4386
#define A_TP_INT_ENABLE
Definition: cxgb_regs.h:4757
#define F_XGMAC0_1
Definition: cxgb_regs.h:6385
#define F_CFG_RR_ARB
Definition: cxgb_regs.h:5512
#define F_CAL_FAULT
Definition: cxgb_regs.h:2892
#define F_FILTEREN
Definition: cxgb_regs.h:6634
#define F_PREEN
Definition: cxgb_regs.h:6288
#define F_IPV6ENABLE
Definition: cxgb_regs.h:3477
#define F_PCIE_CFPARERR
Definition: cxgb_regs.h:977
#define S_PORT0ACTIVE
Definition: cxgb_regs.h:5796
#define V_I2C_DATA(x)
Definition: cxgb_regs.h:6251
#define A_TP_CMM_MM_MAX_PSTRUCT
Definition: cxgb_regs.h:4750
#define A_XGM_XAUI_IMP
Definition: cxgb_regs.h:7506
#define A_TP_MAC_MATCH_MAP0
Definition: cxgb_regs.h:5244
#define A_ULPTX_DMA_WEIGHT
Definition: cxgb_regs.h:5583
#define F_IFEN
Definition: cxgb_regs.h:2699
#define M_ICSPI_PAR_ERROR
Definition: cxgb_regs.h:5743
#define V_AUTOSTATE1(x)
Definition: cxgb_regs.h:3744
#define A_TP_RXT_MIN
Definition: cxgb_regs.h:4307
#define A_TP_OUT_CONFIG
Definition: cxgb_regs.h:3523
#define A_SG_CONTEXT_DATA2
Definition: cxgb_regs.h:197
#define F_SIGSYSERR
Definition: cxgb_regs.h:637
#define V_REFCYC(x)
Definition: cxgb_regs.h:2839
#define F_ARBFPERR
Definition: cxgb_regs.h:5406
#define F_RESPONSEQ
Definition: cxgb_regs.h:180
#define F_TPTXPORT0EN
Definition: cxgb_regs.h:5790
#define A_MC7_BD_DATA1
Definition: cxgb_regs.h:3003
#define A_TP_INIT_SRTT
Definition: cxgb_regs.h:4349
#define F_RXCOALESCEPSHEN
Definition: cxgb_regs.h:4137
#define V_BITPOS3(x)
Definition: cxgb_regs.h:5311
#define A_TP_TX_TRC_KEY0
Definition: cxgb_regs.h:5079
#define F_PM1_RX
Definition: cxgb_regs.h:6425
#define A_CIM_BOOT_CFG
Definition: cxgb_regs.h:3072
#define F_PCIM0
Definition: cxgb_regs.h:6457
#define V_ACTTORDWRDLY(x)
Definition: cxgb_regs.h:2829
#define A_I2C_CFG
Definition: cxgb_regs.h:6235
#define V_DELAYEDACKRESOLUTION(x)
Definition: cxgb_regs.h:4297
#define F_TXPACEAUTO
Definition: cxgb_regs.h:4112
#define A_TP_GLOBAL_CONFIG
Definition: cxgb_regs.h:3569
#define F_DETCORECCERR
Definition: cxgb_regs.h:617
#define A_TP_EMBED_OP_FIELD0
Definition: cxgb_regs.h:5063
#define V_TIMERRESOLUTION(x)
Definition: cxgb_regs.h:4287
#define F_AE
Definition: cxgb_regs.h:3046
#define A_ULPRX_INT_ENABLE
Definition: cxgb_regs.h:5390
#define F_UNXSPLCMP
Definition: cxgb_regs.h:625
#define A_TP_PACE_TABLE
Definition: cxgb_regs.h:4465
#define F_EGRESS
Definition: cxgb_regs.h:184
#define V_PORTSPEED(x)
Definition: cxgb_regs.h:7615
#define F_I2C_WRITE
Definition: cxgb_regs.h:6269
#define G_PE(x)
Definition: cxgb_regs.h:3051
#define A_SG_INT_CAUSE
Definition: cxgb_regs.h:431
#define S_GPIO5
Definition: cxgb_regs.h:2350
#define V_BOOTADDR(x)
Definition: cxgb_regs.h:3076
#define V_SACKMODE(x)
Definition: cxgb_regs.h:3717
#define F_CLKEN
Definition: cxgb_regs.h:2741
#define A_PCIX_MODE
Definition: cxgb_regs.h:706
#define F_CALRESET
Definition: cxgb_regs.h:7486
#define M_T3A_ACKLAT
Definition: cxgb_regs.h:1293
#define V_REPLAYLMT(x)
Definition: cxgb_regs.h:1260
#define A_MI1_OP
Definition: cxgb_regs.h:6317
#define A_PM1_RX_CFG
Definition: cxgb_regs.h:5598
#define A_MC7_CE_DATA2
Definition: cxgb_regs.h:2984
#define F_ENHASHMCAST
Definition: cxgb_regs.h:7174
#define F_MPS0
Definition: cxgb_regs.h:6417
#define V_MSSTHRESHOLD(x)
Definition: cxgb_regs.h:3754
#define F_AUTOENABLE
Definition: cxgb_regs.h:3763
#define F_SLOW
Definition: cxgb_regs.h:2711
#define A_CPL_INTR_CAUSE
Definition: cxgb_regs.h:5982
#define A_MPS_CFG
Definition: cxgb_regs.h:5757
#define A_XGM_RX_CTRL
Definition: cxgb_regs.h:7124
#define G_PCLKRANGE(x)
Definition: cxgb_regs.h:711
#define A_MC7_CFG
Definition: cxgb_regs.h:2691
#define F_I2C_ACK
Definition: cxgb_regs.h:6260
#define F_TXEN
Definition: cxgb_regs.h:7100
#define A_TP_PARA_REG2
Definition: cxgb_regs.h:4066
#define A_TP_PARA_REG4
Definition: cxgb_regs.h:4139
#define M_ST
Definition: cxgb_regs.h:6282
#define V_PMMAXXFERLEN0(x)
Definition: cxgb_regs.h:4280
#define A_XGM_XGM_INT_ENABLE
Definition: cxgb_regs.h:7269
#define V_CONTEXT_CMD_OPCODE(x)
Definition: cxgb_regs.h:162
#define XGMAC0_1_BASE_ADDR
Definition: cxgb_regs.h:8387
#define A_MC5_DB_INT_ENABLE
Definition: cxgb_regs.h:6787
#define F_MC7_PMRX
Definition: cxgb_regs.h:6453
#define V_RGMIIIMPPU(x)
Definition: cxgb_regs.h:7503
#define A_PCIE_PEX_CTRL1
Definition: cxgb_regs.h:1271
#define F_I2C_READ
Definition: cxgb_regs.h:6268
#define F_PEXERR
Definition: cxgb_regs.h:1021
#define F_MC7_PMTX
Definition: cxgb_regs.h:6449
#define F_CIM_FRAMING_ERROR
Definition: cxgb_regs.h:5976
#define A_MC7_INT_ENABLE
Definition: cxgb_regs.h:3042
#define F_SGLWRFLASHINT
Definition: cxgb_regs.h:3276
#define V_BITPOS0(x)
Definition: cxgb_regs.h:5326
#define F_GPIO6_OUT_VAL
Definition: cxgb_regs.h:2180
#define F_RETRYLUTPARERR
Definition: cxgb_regs.h:964
#define M_OESPI_PAR_ERROR
Definition: cxgb_regs.h:5748
#define F_FLSTINITENABLE
Definition: cxgb_regs.h:4719
#define A_MC7_BIST_OP
Definition: cxgb_regs.h:3026
#define V_PERSHIFTMAX(x)
Definition: cxgb_regs.h:4401
#define M_TXDATAACKIDX
Definition: cxgb_regs.h:4089
#define A_MC7_BD_ADDR
Definition: cxgb_regs.h:2995
#define F_LOCKTID
Definition: cxgb_regs.h:3785
#define V_CONTEXT(x)
Definition: cxgb_regs.h:192
#define A_TP_TCP_BACKOFF_REG2
Definition: cxgb_regs.h:3998
#define A_TP_RSS_MAP_TABLE
Definition: cxgb_regs.h:4469
#define A_TP_EMBED_OP_FIELD4
Definition: cxgb_regs.h:5067
#define V_MTUDEFAULT(x)
Definition: cxgb_regs.h:3700
#define F_TXPACEAUTOSTRICT
Definition: cxgb_regs.h:4104
#define V_TABLELATENCYDELTA(x)
Definition: cxgb_regs.h:3885
#define F_TCPCHECKSUMOFFLOAD
Definition: cxgb_regs.h:3627
#define A_MI1_CFG
Definition: cxgb_regs.h:6274
#define A_PM1_RX_INT_CAUSE
Definition: cxgb_regs.h:5677
#define F_ARBPF0PERR
Definition: cxgb_regs.h:5410
#define F_ORG
Definition: cxgb_regs.h:2728
#define V_MAXRXDATA(x)
Definition: cxgb_regs.h:4070
#define M_TXFIFO_PRTY_ERR
Definition: cxgb_regs.h:7664
#define V_IBQDBGADDR(x)
Definition: cxgb_regs.h:3358
#define F_SDRAMRANGEINT
Definition: cxgb_regs.h:3296
#define A_CIM_SDRAM_ADDR_SIZE
Definition: cxgb_regs.h:3108
#define A_TP_DACK_CONFIG
Definition: cxgb_regs.h:3730
#define A_MI1_ADDR
Definition: cxgb_regs.h:6298
#define A_PCIE_INT_CAUSE
Definition: cxgb_regs.h:1023
#define F_FREELIST
Definition: cxgb_regs.h:188
#define V_KEEPALIVEMAX(x)
Definition: cxgb_regs.h:4406
#define F_DMASTOPEN
Definition: cxgb_regs.h:660
#define F_IBQSGEHIPARERR
Definition: cxgb_regs.h:3142
#define V_PREREFDIV(x)
Definition: cxgb_regs.h:2785
#define F_CLRSTATS
Definition: cxgb_regs.h:7290
#define A_TP_TCP_BACKOFF_REG1
Definition: cxgb_regs.h:3976
#define A_TP_TIMER_RESOLUTION
Definition: cxgb_regs.h:4283
#define S_VLANEXTRACTIONENABLE
Definition: cxgb_regs.h:3533
#define A_SG_CONTEXT_MASK1
Definition: cxgb_regs.h:200
#define F_ROUND_ROBIN
Definition: cxgb_regs.h:5372
#define F_GPIO6_OEN
Definition: cxgb_regs.h:2132
#define F_BLKRDPLINT
Definition: cxgb_regs.h:3256
#define F_HOSTWRITE
Definition: cxgb_regs.h:3346
#define F_FLMRXFLSTEMPTY
Definition: cxgb_regs.h:4765
#define A_XGM_TXFIFO_CFG
Definition: cxgb_regs.h:7340
#define A_SG_CONTEXT_CMD
Definition: cxgb_regs.h:158
#define F_CONTEXT_CMD_BUSY
Definition: cxgb_regs.h:167
#define G_WIDTH(x)
Definition: cxgb_regs.h:2716
#define A_MC7_DLL
Definition: cxgb_regs.h:2792
#define F_ENABLEEXTRACT
Definition: cxgb_regs.h:5307
#define F_CALUPDATE
Definition: cxgb_regs.h:7490
#define M_CFPARERR
Definition: cxgb_regs.h:593
#define V_BASE1(x)
Definition: cxgb_regs.h:564
#define A_XGM_TX_CTRL
Definition: cxgb_regs.h:7088
#define F_ULP2_TX
Definition: cxgb_regs.h:6429
#define F_IBQDBGEN
Definition: cxgb_regs.h:3376
#define F_ENABLEEXTRACTIONSFD
Definition: cxgb_regs.h:5303
#define F_ULP2_RX
Definition: cxgb_regs.h:6433
#define F_ZERO_C_CMD_ERROR
Definition: cxgb_regs.h:5692
#define F_TXTOSQUEUEMAPMODE
Definition: cxgb_regs.h:3793
#define F_ENABLEEPCMDAFULL
Definition: cxgb_regs.h:3805
#define A_MC5_DB_CONFIG
Definition: cxgb_regs.h:6594
#define F_ENABLETXPORTFROMDA
Definition: cxgb_regs.h:3928
#define A_PCIE_PEX_CTRL0
Definition: cxgb_regs.h:1243
#define V_ICSPI_PAR_ERROR(x)
Definition: cxgb_regs.h:5744
#define V_IBQDBGQID(x)
Definition: cxgb_regs.h:3363
#define F_ENABLELINKDOWNRST
Definition: cxgb_regs.h:1044
#define V_TX_MOD_QUEUE_REQ_MAP(x)
Definition: cxgb_regs.h:4622
#define F_ENDROPPKT
Definition: cxgb_regs.h:7356
#define G_DEN(x)
Definition: cxgb_regs.h:2733
#define A_TP_MSL
Definition: cxgb_regs.h:4300
#define V_CFPARERR(x)
Definition: cxgb_regs.h:594
#define A_MC7_CE_ADDR
Definition: cxgb_regs.h:2981
#define M_OCSPI_PAR_ERROR
Definition: cxgb_regs.h:5673
#define F_CIM_OP_MAP_PERR
Definition: cxgb_regs.h:5960
#define V_TIMESTAMPRESOLUTION(x)
Definition: cxgb_regs.h:4292
#define F_ICACHEPARERR
Definition: cxgb_regs.h:3166
#define A_TP_IN_CONFIG
Definition: cxgb_regs.h:3460
#define A_PL_INT_CAUSE0
Definition: cxgb_regs.h:6463
#define F_PCIE_WFPARERR
Definition: cxgb_regs.h:985
#define A_TP_RSS_LKP_TABLE
Definition: cxgb_regs.h:4470
#define A_TP_MIB_RDATA
Definition: cxgb_regs.h:4726
#define S_GPIO2
Definition: cxgb_regs.h:2362
#define A_TP_TCP_BACKOFF_REG0
Definition: cxgb_regs.h:3954
#define F_PCIE_DMASTOPEN
Definition: cxgb_regs.h:1028
#define A_TP_MIB_INDEX
Definition: cxgb_regs.h:4725
#define F_XAUIPCSCTCERR
Definition: cxgb_regs.h:7693
#define A_MC7_BD_DATA0
Definition: cxgb_regs.h:3002
#define A_PCIX_CFG
Definition: cxgb_regs.h:656
#define A_PM1_RX_MODE
Definition: cxgb_regs.h:5599
#define V_DACK_MODE(x)
Definition: cxgb_regs.h:3766
#define V_XAUIIMP(x)
Definition: cxgb_regs.h:7519
#define A_XGM_XAUI_ACT_CTRL
Definition: cxgb_regs.h:7722
#define A_MC7_UE_DATA1
Definition: cxgb_regs.h:2993
#define F_PORT0ACTIVE
Definition: cxgb_regs.h:5798
#define F_DETUNCECCERR
Definition: cxgb_regs.h:613
#define F_PARERRDATA
Definition: cxgb_regs.h:5422
#define A_SG_RSPQ_FL_STATUS
Definition: cxgb_regs.h:250
#define A_SG_CONTEXT_MASK2
Definition: cxgb_regs.h:201
#define F_HOSTBUSY
Definition: cxgb_regs.h:3342
#define F_COPYALLFRAMES
Definition: cxgb_regs.h:7182
#define MC7_CM_BASE_ADDR
Definition: cxgb_regs.h:3067
#define A_TP_TX_MOD_Q1_Q0_RATE_LIMIT
Definition: cxgb_regs.h:5077
#define A_MC7_UE_DATA2
Definition: cxgb_regs.h:2994
#define V_ST(x)
Definition: cxgb_regs.h:6283
#define V_OESPI_PAR_ERROR(x)
Definition: cxgb_regs.h:5749
#define M_IBQDBGADDR
Definition: cxgb_regs.h:3357
#define F_PM1_TX
Definition: cxgb_regs.h:6421
#define A_PM1_TX_INT_ENABLE
Definition: cxgb_regs.h:5688
#define V_RXTSHIFTMAXR2(x)
Definition: cxgb_regs.h:4391
#define A_TP_EGRESS_CONFIG
Definition: cxgb_regs.h:5331
#define F_IBQDBGWR
Definition: cxgb_regs.h:3368
#define A_TP_PARA_REG3
Definition: cxgb_regs.h:4078
#define F_RXPARERR
Definition: cxgb_regs.h:960
#define F_TPRXPORTEN
Definition: cxgb_regs.h:5782
#define F_RXEN
Definition: cxgb_regs.h:7128
#define F_TERM150
Definition: cxgb_regs.h:2707
#define A_TP_QOS_RX_MAP_MODE
Definition: cxgb_regs.h:5132
#define A_PCIE_PEX_ERR
Definition: cxgb_regs.h:1345
#define A_MC5_DB_INT_CAUSE
Definition: cxgb_regs.h:6858
#define F_REWRITEFORCETOSIZE
Definition: cxgb_regs.h:5335
#define V_BYTECNT(x)
Definition: cxgb_regs.h:6363
#define A_MC7_UE_DATA0
Definition: cxgb_regs.h:2992
#define V_D0_WEIGHT(x)
Definition: cxgb_regs.h:5592
#define V_AUTOSTATE2(x)
Definition: cxgb_regs.h:3739
#define F_CLKDIVRESET_
Definition: cxgb_regs.h:7611
#define F_GPIO1_OEN
Definition: cxgb_regs.h:2152
#define M_DEN
Definition: cxgb_regs.h:2731
#define A_TP_RSS_CONFIG
Definition: cxgb_regs.h:4471
#define V_REGADDR(x)
Definition: cxgb_regs.h:6307
#define F_BKS
Definition: cxgb_regs.h:2724
#define A_SG_CONTEXT_MASK0
Definition: cxgb_regs.h:199
#define S_GPIO9
Definition: cxgb_regs.h:2334
#define A_TP_SHIFT_CNT
Definition: cxgb_regs.h:4377
#define F_ECCGENEN
Definition: cxgb_regs.h:2979
#define F_I2C_CONT
Definition: cxgb_regs.h:6264
#define F_CIM
Definition: cxgb_regs.h:6441
#define F_DCACHEPARERR
Definition: cxgb_regs.h:3162
#define F_RXCONGESTIONMODE
Definition: cxgb_regs.h:3821
#define F_RCVSPLCMPERR
Definition: cxgb_regs.h:621
#define A_SG_CONTEXT_DATA3
Definition: cxgb_regs.h:198
#define F_TXCONGESTIONMODE
Definition: cxgb_regs.h:3837
#define A_MC7_REF
Definition: cxgb_regs.h:2781
#define G_NUMFSTTRNSEQRX(x)
Definition: cxgb_regs.h:1106
#define F_T3DBG
Definition: cxgb_regs.h:6381
#define A_XGM_STAT_CTRL
Definition: cxgb_regs.h:7278
#define F_XAUIPCSALIGNCHANGE
Definition: cxgb_regs.h:7697
#define A_TP_PROXY_FLOW_CNTL
Definition: cxgb_regs.h:5017
#define F_SGE_FRAMING_ERROR
Definition: cxgb_regs.h:5972
#define A_XGM_RX_HASH_LOW
Definition: cxgb_regs.h:7184
#define M_REPLAYLMT
Definition: cxgb_regs.h:1259
#define V_RDTOWRDLY(x)
Definition: cxgb_regs.h:2854
#define A_TP_INT_CAUSE
Definition: cxgb_regs.h:4883
#define A_MC7_CE_DATA1
Definition: cxgb_regs.h:2983
#define V_WFPARERR(x)
Definition: cxgb_regs.h:604
#define A_PL_RST
Definition: cxgb_regs.h:6466
#define A_PM1_RX_INT_ENABLE
Definition: cxgb_regs.h:5613
#define F_GPIO7_OEN
Definition: cxgb_regs.h:2128
#define A_CIM_IBQ_DBG_CFG
Definition: cxgb_regs.h:3354
#define F_BUSY
Definition: cxgb_regs.h:2888
#define M_BISTERR
Definition: cxgb_regs.h:950
#define F_TXACTENABLE
Definition: cxgb_regs.h:7726
#define M_MSIXPARERR
Definition: cxgb_regs.h:588
#define F_CQ
Definition: cxgb_regs.h:176
#define F_XGM_CALFAULT
Definition: cxgb_regs.h:7510
#define A_TP_EMBED_OP_FIELD5
Definition: cxgb_regs.h:5068
#define A_TP_PIO_ADDR
Definition: cxgb_regs.h:4713
#define F_ENABLEIPV6RSS
Definition: cxgb_regs.h:3904
#define A_MC7_PRE
Definition: cxgb_regs.h:2780
#define F_GPIO0_OUT_VAL
Definition: cxgb_regs.h:2204
#define F_ENABLEINSERTIONSFD
Definition: cxgb_regs.h:5295
#define F_ENABLEESND
Definition: cxgb_regs.h:4201
#define V_PRECYC(x)
Definition: cxgb_regs.h:2834
#define F_GPIO2_OUT_VAL
Definition: cxgb_regs.h:2196
#define F_DISBCAST
Definition: cxgb_regs.h:7178
#define A_PM1_TX_INT_CAUSE
Definition: cxgb_regs.h:5752
#define A_XGM_SERDES_CTRL
Definition: cxgb_regs.h:7402
#define F_TXDEFERENABLE
Definition: cxgb_regs.h:3817
#define F_LINKFAULTCHANGE
Definition: cxgb_regs.h:7230
#define V_SERDES_LOS(x)
Definition: cxgb_regs.h:7718
#define M_RXMAPMODE
Definition: cxgb_regs.h:5139
#define F_PCIE_RFPARERR
Definition: cxgb_regs.h:981
#define A_XGM_INT_STATUS
Definition: cxgb_regs.h:7222
#define F_CLIDECEN
Definition: cxgb_regs.h:664
#define F_CRSTWRM
Definition: cxgb_regs.h:6482
#define F_ENABLEOCSPIFULL
Definition: cxgb_regs.h:3777
#define F_PATHMTU
Definition: cxgb_regs.h:3611
#define F_XGMAC0_0
Definition: cxgb_regs.h:6389
#define A_SG_OCO_BASE
Definition: cxgb_regs.h:560
#define F_FLASHRANGEINT
Definition: cxgb_regs.h:3292
#define A_MC7_BD_OP
Definition: cxgb_regs.h:3005
#define F_ARBPF1PERR
Definition: cxgb_regs.h:5414
#define MC7_PMRX_BASE_ADDR
Definition: cxgb_regs.h:2689
#define F_ENABLERXPORTFROMADDR
Definition: cxgb_regs.h:3924
#define V_BITPOS2(x)
Definition: cxgb_regs.h:5316
#define F_BLKWRFLASHINT
Definition: cxgb_regs.h:3268
#define F_OBQULPLOPARERR
Definition: cxgb_regs.h:3150
#define M_FIVETUPLELOOKUP
Definition: cxgb_regs.h:3605
#define A_TP_PMM_TX_PAGE_SIZE
Definition: cxgb_regs.h:3688
#define A_TP_TM_PIO_DATA
Definition: cxgb_regs.h:4579
#define F_UNXSPLCPLERRC
Definition: cxgb_regs.h:993
#define V_BITPOS1(x)
Definition: cxgb_regs.h:5321
#define F_ENABLEINSERTION
Definition: cxgb_regs.h:5299
#define A_T3DBG_GPIO_EN
Definition: cxgb_regs.h:2108
#define A_TP_PIO_DATA
Definition: cxgb_regs.h:4714
#define F_GPIO7_OUT_VAL
Definition: cxgb_regs.h:2176
#define A_TP_INTF_FROM_TX_PKT
Definition: cxgb_regs.h:5337
#define F_PCMDMUXPERR
Definition: cxgb_regs.h:5402
#define A_CIM_HOST_ACC_CTRL
Definition: cxgb_regs.h:3338
#define F_GPIO1_OUT_VAL
Definition: cxgb_regs.h:2200
#define F_I2C_BUSY
Definition: cxgb_regs.h:6256
#define V_TXFIFO_PRTY_ERR(x)
Definition: cxgb_regs.h:7665
#define A_TP_PERS_MAX
Definition: cxgb_regs.h:4328
#define F_TXPARERR
Definition: cxgb_regs.h:956
#define G_NUMFSTTRNSEQ(x)
Definition: cxgb_regs.h:1256
#define A_MC5_DB_SERVER_INDEX
Definition: cxgb_regs.h:6698
#define A_MC7_BIST_DATA
Definition: cxgb_regs.h:3025
#define F_UDPCHECKSUMOFFLOAD
Definition: cxgb_regs.h:3623
#define F_CALBUSY
Definition: cxgb_regs.h:1196
#define V_CMTIMERMAXNUM(x)
Definition: cxgb_regs.h:3662
#define F_XGM_INT
Definition: cxgb_regs.h:7705
#define F_RDY
Definition: cxgb_regs.h:2737
#define F_MC5A
Definition: cxgb_regs.h:6393
#define V_TIMESTAMPSMODE(x)
Definition: cxgb_regs.h:3727
#define A_MC7_ECC
Definition: cxgb_regs.h:2961
#define A_TP_PMM_RX_BASE
Definition: cxgb_regs.h:3679
#define M_RXFIFO_PRTY_ERR
Definition: cxgb_regs.h:7669
#define A_PCIX_INT_CAUSE
Definition: cxgb_regs.h:655
#define F_PBL_BOUND_ERR_CH0
Definition: cxgb_regs.h:5546
#define V_RXFIFO_PRTY_ERR(x)
Definition: cxgb_regs.h:7670
#define A_TP_TCP_BACKOFF_REG3
Definition: cxgb_regs.h:4020
#define A_TP_PARA_REG6
Definition: cxgb_regs.h:4188
#define F_DISBLEDAPARBIT0
Definition: cxgb_regs.h:3892
#define A_SG_CONTEXT_MASK3
Definition: cxgb_regs.h:202
#define MC7_PMTX_BASE_ADDR
Definition: cxgb_regs.h:3064
#define A_T3DBG_INT_CAUSE
Definition: cxgb_regs.h:2378
#define A_TP_MTU_TABLE
Definition: cxgb_regs.h:4468
#define A_ULPRX_TDDP_TAGMASK
Definition: cxgb_regs.h:5486
#define A_CIM_HOST_ACC_DATA
Definition: cxgb_regs.h:3353
#define F_PERREFEN
Definition: cxgb_regs.h:2790
#define V_CONT(x)
Definition: cxgb_regs.h:3034
#define F_PCIE_CLIDECEN
Definition: cxgb_regs.h:1060
#define A_MC7_EXT_MODE3
Definition: cxgb_regs.h:2773
#define V_ACTTOPREDLY(x)
Definition: cxgb_regs.h:2824
#define F_HEARBEATDACK
Definition: cxgb_regs.h:3833
#define F_CPL_SWITCH
Definition: cxgb_regs.h:6413
#define F_PBL_BOUND_ERR_CH1
Definition: cxgb_regs.h:5542
#define F_DETPARERR
Definition: cxgb_regs.h:633
#define F_GPIO5_OEN
Definition: cxgb_regs.h:2136
#define F_TPRESET
Definition: cxgb_regs.h:4723
#define A_TP_TCP_OPTIONS
Definition: cxgb_regs.h:3696
#define A_TP_TM_PIO_ADDR
Definition: cxgb_regs.h:4578
#define F_CIM_OVFL_ERROR
Definition: cxgb_regs.h:5964
#define A_ULPRX_CTL
Definition: cxgb_regs.h:5358
#define V_BKCYC(x)
Definition: cxgb_regs.h:2844
#define F_IBQSGELOPARERR
Definition: cxgb_regs.h:3146
#define A_MC7_CE_DATA0
Definition: cxgb_regs.h:2982
#define F_IPCHECKSUMOFFLOAD
Definition: cxgb_regs.h:3619
#define A_TP_PREAMBLE_LSB
Definition: cxgb_regs.h:5330
#define F_ENRGMII
Definition: cxgb_regs.h:7620
#define F_OBQSGEPARERR
Definition: cxgb_regs.h:3158
#define F_GPIO10_OUT_VAL
Definition: cxgb_regs.h:2164
#define A_TP_PC_CONFIG2
Definition: cxgb_regs.h:3888
#define A_TP_PMM_RX_PAGE_SIZE
Definition: cxgb_regs.h:3680
#define F_PARERRPCMD
Definition: cxgb_regs.h:5418
#define A_SF_DATA
Definition: cxgb_regs.h:6358
#define F_RXFIFO_OVERFLOW
Definition: cxgb_regs.h:7679
#define A_I2C_DATA
Definition: cxgb_regs.h:6242
#define V_TXDATAACKIDX(x)
Definition: cxgb_regs.h:4090
#define V_RFPARERR(x)
Definition: cxgb_regs.h:599
#define M_WFPARERR
Definition: cxgb_regs.h:603
#define V_RGMIIIMPPD(x)
Definition: cxgb_regs.h:7498
#define A_ULPTX_CONFIG
Definition: cxgb_regs.h:5504
#define V_MDI_OP(x)
Definition: cxgb_regs.h:6325
#define A_XGM_INT_ENABLE
Definition: cxgb_regs.h:7641
#define G_PCIXINITPAT(x)
Definition: cxgb_regs.h:716
#define F_TP1
Definition: cxgb_regs.h:6437
#define F_ONEINTMULTQ
Definition: cxgb_regs.h:108
#define F_RCVTARABT
Definition: cxgb_regs.h:645
#define A_TP_TX_RESOURCE_LIMIT
Definition: cxgb_regs.h:4581
#define A_TP_PMM_TX_BASE
Definition: cxgb_regs.h:3677
#define A_MI1_DATA
Definition: cxgb_regs.h:6310
#define A_TP_EMBED_OP_FIELD1
Definition: cxgb_regs.h:5064
#define V_AUTOSTATE3(x)
Definition: cxgb_regs.h:3734
#define A_ULPRX_INT_CAUSE
Definition: cxgb_regs.h:5428
#define V_BYTETHRESHOLD(x)
Definition: cxgb_regs.h:3749
#define F_RXCOALESCEENABLE
Definition: cxgb_regs.h:4133
#define A_TP_TX_MOD_QUEUE_REQ_MAP
Definition: cxgb_regs.h:4603
#define F_DATASELFRAMEERR0
Definition: cxgb_regs.h:5394
#define F_XGM_IMPSETUPDATE
Definition: cxgb_regs.h:7494
#define V_FIVETUPLELOOKUP(x)
Definition: cxgb_regs.h:3606
#define A_CPL_INTR_ENABLE
Definition: cxgb_regs.h:5956
#define F_TP_FRAMING_ERROR
Definition: cxgb_regs.h:5968
#define F_TXPACEFIXED
Definition: cxgb_regs.h:4108
#define F_AUTOCAREFUL
Definition: cxgb_regs.h:3759
#define F_T3A_ENABLEESND
Definition: cxgb_regs.h:4253
#define F_NICMODE
Definition: cxgb_regs.h:3481
#define V_I2C_CLKDIV(x)
Definition: cxgb_regs.h:6239
#define M_ACKLAT
Definition: cxgb_regs.h:1283
#define F_ENABLENONOFDTNLSYN
Definition: cxgb_regs.h:3900
#define F_WRBLKFLASHINT
Definition: cxgb_regs.h:3280
#define F_TPTXPORT1EN
Definition: cxgb_regs.h:5786
#define F_ECCCHKEN
Definition: cxgb_regs.h:2975
#define F_DTAGPARERR
Definition: cxgb_regs.h:3126
#define F_GPIO10_OEN
Definition: cxgb_regs.h:2116
#define A_PM1_TX_MODE
Definition: cxgb_regs.h:5683
#define A_TP_DACK_TIMER
Definition: cxgb_regs.h:4356
#define A_TP_MOD_CHANNEL_WEIGHT
Definition: cxgb_regs.h:4669
#define F_CFG_CQE_SOP_MASK
Definition: cxgb_regs.h:5508
#define A_TP_INGRESS_CONFIG
Definition: cxgb_regs.h:5287
#define A_CIM_IBQ_DBG_DATA
Definition: cxgb_regs.h:3402
#define A_TP_RXT_MAX
Definition: cxgb_regs.h:4314
#define F_BLKRDFLASHINT
Definition: cxgb_regs.h:3272
#define F_ENABLEARPMISS
Definition: cxgb_regs.h:3896
#define F_LOOKUPEVERYPKT
Definition: cxgb_regs.h:5291
#define F_GPIO4_OUT_VAL
Definition: cxgb_regs.h:2188
#define F_BLKRDCTLINT
Definition: cxgb_regs.h:3264
#define F_EC_VALID
Definition: cxgb_sge_defs.h:89
#define M_CQ_SIZE
#define V_RQ_MSI_VEC(x)
Definition: cxgb_sge_defs.h:93
#define V_FL_CONG_THRES(x)
#define V_CQ_OVERFLOW_MODE(x)
#define M_FL_ENTRY_SIZE_LO
#define V_EC_BASE_HI(x)
Definition: cxgb_sge_defs.h:65
#define S_FL_ENTRY_SIZE_LO
#define V_CQ_CREDITS(x)
#define V_FL_INDEX_LO(x)
#define V_EC_RESPQ(x)
Definition: cxgb_sge_defs.h:70
#define V_FL_SIZE(x)
#define V_EC_CREDITS(x)
Definition: cxgb_sge_defs.h:41
#define V_CQ_GEN(x)
#define V_EC_INDEX(x)
Definition: cxgb_sge_defs.h:50
#define V_FL_ENTRY_SIZE_LO(x)
#define V_CQ_SIZE(x)
#define V_FL_ENTRY_SIZE_HI(x)
#define V_FL_INDEX_HI(x)
#define V_EC_UP_TOKEN(x)
Definition: cxgb_sge_defs.h:84
#define M_FL_SIZE
#define V_CQ_CREDIT_THRES(x)
#define V_CQ_RSPQ(x)
#define V_CQ_INDEX(x)
#define V_FL_BASE_HI(x)
#define V_EC_GTS(x)
Definition: cxgb_sge_defs.h:45
#define V_FL_GEN(x)
#define G_CQ_INDEX(x)
#define V_CQ_ERR(x)
#define V_EC_GEN(x)
Definition: cxgb_sge_defs.h:79
#define V_CQ_BASE_HI(x)
#define V_EC_SIZE(x)
Definition: cxgb_sge_defs.h:55
#define V_EC_VALID(x)
Definition: cxgb_sge_defs.h:88
#define V_FL_GTS(x)
#define V_RQ_GEN(x)
#define V_EC_BASE_LO(x)
Definition: cxgb_sge_defs.h:60
#define M_FL_INDEX_LO
#define V_EC_TYPE(x)
Definition: cxgb_sge_defs.h:75
#define F_RQ_INTR_EN
Definition: cxgb_sge_defs.h:98
int t3_set_proto_sram(adapter_t *adap, const u8 *data)
Definition: cxgb_t3_hw.c:3578
int t3_get_up_ioqs(adapter_t *adapter, u32 *size, void *data)
Definition: cxgb_t3_hw.c:4766
void t3_disable_filters(adapter_t *adap)
Definition: cxgb_t3_hw.c:3071
void t3_query_trace_filter(adapter_t *adapter, struct trace_params *tp, int filter_index, int *inverted, int *enabled)
Definition: cxgb_t3_hw.c:3649
#define CIM_CTL_BASE
Definition: cxgb_t3_hw.c:1409
int t3_load_fw(adapter_t *adapter, const u8 *fw_data, unsigned int size)
Definition: cxgb_t3_hw.c:1297
#define PMRX_INTR_MASK
Definition: cxgb_t3_hw.c:1816
#define OCSPI_FRM_ERR
Definition: cxgb_t3_hw.c:2035
static int t3_cim_hac_write(adapter_t *adapter, u32 addr, u32 val)
Definition: cxgb_t3_hw.c:4688
#define TP_RTO_MIN
Definition: cxgb_t3_hw.c:3247
void t3_tp_get_mib_stats(adapter_t *adap, struct tp_mib_stats *tps)
Definition: cxgb_t3_hw.c:3503
int t3_check_fw_version(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1232
static struct port_type_info port_types[]
Definition: cxgb_t3_hw.c:597
int t3_sge_disable_fl(adapter_t *adapter, unsigned int id)
Definition: cxgb_t3_hw.c:2744
int t3_mdio_change_bits(struct cphy *phy, int mmd, int reg, unsigned int clear, unsigned int set)
Definition: cxgb_t3_hw.c:372
void t3_read_hw_mtus(adapter_t *adap, unsigned short mtus[NMTUS])
Definition: cxgb_t3_hw.c:3461
static int mi1_ext_read(adapter_t *adapter, int phy_addr, int mmd_addr, int reg_addr, unsigned int *valp)
Definition: cxgb_t3_hw.c:311
int t3_seeprom_read(adapter_t *adapter, u32 addr, u32 *data)
Definition: cxgb_t3_hw.c:658
int t3_get_fw_version(adapter_t *adapter, u32 *vers)
Definition: cxgb_t3_hw.c:1216
#define ICSPI_FRM_ERR
Definition: cxgb_t3_hw.c:2001
int t3_tp_set_coalescing_size(adapter_t *adap, unsigned int size, int psh)
Definition: cxgb_t3_hw.c:3302
int t3_slow_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2249
@ FW_FLASH_BOOT_ADDR
Definition: cxgb_t3_hw.c:933
@ BOOT_MIN_SIZE
Definition: cxgb_t3_hw.c:943
@ FW_MAX_SIZE
Definition: cxgb_t3_hw.c:937
@ BOOT_MAX_SIZE
Definition: cxgb_t3_hw.c:944
@ SF_WR_ENABLE
Definition: cxgb_t3_hw.c:929
@ FW_MAX_SIZE_PRE8
Definition: cxgb_t3_hw.c:938
@ SF_PROG_PAGE
Definition: cxgb_t3_hw.c:926
@ SF_SIZE
Definition: cxgb_t3_hw.c:923
@ SF_RD_DATA_FAST
Definition: cxgb_t3_hw.c:930
@ FW_MIN_SIZE
Definition: cxgb_t3_hw.c:936
@ SF_RD_STATUS
Definition: cxgb_t3_hw.c:928
@ FW_VERS_ADDR_PRE8
Definition: cxgb_t3_hw.c:935
@ BOOT_SIZE_INC
Definition: cxgb_t3_hw.c:942
@ FW_VERS_ADDR
Definition: cxgb_t3_hw.c:934
@ SF_ATTEMPTS
Definition: cxgb_t3_hw.c:921
@ SF_SEC_SIZE
Definition: cxgb_t3_hw.c:922
@ BOOT_FLASH_BOOT_ADDR
Definition: cxgb_t3_hw.c:940
@ SF_WR_DISABLE
Definition: cxgb_t3_hw.c:927
@ SF_ERASE_SECTOR
Definition: cxgb_t3_hw.c:931
@ BOOT_SIGNATURE
Definition: cxgb_t3_hw.c:941
int t3_get_up_la(adapter_t *adapter, u32 *stopped, u32 *index, u32 *size, void *data)
Definition: cxgb_t3_hw.c:4703
static unsigned int hex2int(unsigned char c)
Definition: cxgb_t3_hw.c:731
void t3_link_changed(adapter_t *adapter, int port_id)
Definition: cxgb_t3_hw.c:1522
static int clear_sge_ctxt(adapter_t *adap, unsigned int id, unsigned int type)
Definition: cxgb_t3_hw.c:2531
static int phy_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2211
#define TP_DACK_TIMER
Definition: cxgb_t3_hw.c:3246
static int tp_init(adapter_t *adap, const struct tp_params *p)
Definition: cxgb_t3_hw.c:3804
static void t3_open_rx_traffic(struct cmac *mac, u32 rx_cfg, u32 rx_hash_high, u32 rx_hash_low)
Definition: cxgb_t3_hw.c:1462
#define MDIO_ATTEMPTS
Definition: cxgb_t3_hw.c:259
static int t3_sge_read_context(unsigned int type, adapter_t *adapter, unsigned int id, u32 data[4])
Definition: cxgb_t3_hw.c:2862
int t3_sge_read_cq(adapter_t *adapter, unsigned int id, u32 data[4])
Definition: cxgb_t3_hw.c:2905
static struct mdio_ops mi1_mdio_ops
Definition: cxgb_t3_hw.c:303
#define PCIX_INTR_MASK
Definition: cxgb_t3_hw.c:1787
void t3_write_regs(adapter_t *adapter, const struct addr_val_pair *p, int n, unsigned int offset)
Definition: cxgb_t3_hw.c:84
void t3_failover_done(adapter_t *adapter, int port)
Definition: cxgb_t3_hw.c:4662
int t3_phy_reset(struct cphy *phy, int mmd, int wait)
Definition: cxgb_t3_hw.c:396
static void t3_gate_rx_traffic(struct cmac *mac, u32 *rx_cfg, u32 *rx_hash_high, u32 *rx_hash_low)
Definition: cxgb_t3_hw.c:1438
static int sf1_write(adapter_t *adapter, unsigned int byte_cnt, int cont, u32 val)
Definition: cxgb_t3_hw.c:985
int t3_sge_init_ecntxt(adapter_t *adapter, unsigned int id, int gts_enable, enum sge_context_type type, int respq, u64 base_addr, unsigned int size, unsigned int token, int gen, unsigned int cidx)
Definition: cxgb_t3_hw.c:2564
int t3_seeprom_write(adapter_t *adapter, u32 addr, u32 data)
Definition: cxgb_t3_hw.c:691
#define ULPRX_INTR_MASK
Definition: cxgb_t3_hw.c:1798
int t3_reset_adapter(adapter_t *adapter)
Definition: cxgb_t3_hw.c:4393
#define PCIE_INTR_MASK
Definition: cxgb_t3_hw.c:1793
static void __devinit mc7_prep(adapter_t *adapter, struct mc7 *mc7, unsigned int base_addr, const char *name)
Definition: cxgb_t3_hw.c:4306
static int get_vpd_params(adapter_t *adapter, struct vpd_params *p)
Definition: cxgb_t3_hw.c:862
static void tp_set_timers(adapter_t *adap, unsigned int core_clk)
Definition: cxgb_t3_hw.c:3257
static int t3_write_flash(adapter_t *adapter, unsigned int addr, unsigned int n, const u8 *data, int byte_oriented)
Definition: cxgb_t3_hw.c:1075
int t3_i2c_read8(adapter_t *adapter, int chained, u8 *valp)
Definition: cxgb_t3_hw.c:208
void t3_enable_filters(adapter_t *adap)
Definition: cxgb_t3_hw.c:3057
#define XGM_INTR_FATAL
Definition: cxgb_t3_hw.c:2149
int t3_load_boot(adapter_t *adapter, u8 *boot_data, unsigned int size)
Definition: cxgb_t3_hw.c:1361
int t3_i2c_write8(adapter_t *adapter, int chained, u8 val)
Definition: cxgb_t3_hw.c:232
static void tp_wr_bits_indirect(adapter_t *adap, unsigned int addr, unsigned int mask, unsigned int val)
Definition: cxgb_t3_hw.c:3043
#define SECONDS
static struct adapter_info t3_adap_info[]
Definition: cxgb_t3_hw.c:545
int t3_read_vpd(adapter_t *adapter, struct generic_vpd *vpd)
Definition: cxgb_t3_hw.c:840
static void __devinit init_cong_ctrl(unsigned short *a, unsigned short *b)
Definition: cxgb_t3_hw.c:3370
void t3_port_intr_disable(adapter_t *adapter, int idx)
Definition: cxgb_t3_hw.c:2459
int __devinit t3_prep_adapter(adapter_t *adapter, const struct adapter_info *ai, int reset)
Definition: cxgb_t3_hw.c:4461
static void ulprx_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1963
#define I2C_ATTEMPTS
Definition: cxgb_t3_hw.c:198
static void config_pcie(adapter_t *adap)
Definition: cxgb_t3_hw.c:4068
int t3_link_start(struct cphy *phy, struct cmac *mac, struct link_config *lc)
Definition: cxgb_t3_hw.c:1674
int t3_sge_cqcntxt_op(adapter_t *adapter, unsigned int id, unsigned int op, unsigned int credits)
Definition: cxgb_t3_hw.c:2822
int t3_mi1_read(adapter_t *adapter, int phy_addr, int mmd_addr, int reg_addr, unsigned int *valp)
Definition: cxgb_t3_hw.c:264
static int t3_handle_intr_status(adapter_t *adapter, unsigned int reg, unsigned int mask, const struct intr_info *acts, unsigned long *stats)
Definition: cxgb_t3_hw.c:1747
#define EEPROM_STAT_ADDR
Definition: cxgb_t3_hw.c:644
void t3_read_pace_tbl(adapter_t *adap, unsigned int pace_vals[NTX_SCHED])
Definition: cxgb_t3_hw.c:3516
void t3_failover_clear(adapter_t *adapter)
Definition: cxgb_t3_hw.c:4668
void early_hw_init(adapter_t *adapter, const struct adapter_info *ai)
Definition: cxgb_t3_hw.c:4359
fw_version_type
Definition: cxgb_t3_hw.c:1202
@ FW_VERSION_N3
Definition: cxgb_t3_hw.c:1203
@ FW_VERSION_T3
Definition: cxgb_t3_hw.c:1204
static void __devinit init_link_config(struct link_config *lc, unsigned int caps)
Definition: cxgb_t3_hw.c:4271
#define CIM_INTR_MASK
Definition: cxgb_t3_hw.c:1805
void t3_intr_clear(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2384
static int get_desc_len(adapter_t *adapter, u32 offset)
Definition: cxgb_t3_hw.c:744
int t3_sge_init_rspcntxt(adapter_t *adapter, unsigned int id, int irq_vec_idx, u64 base_addr, unsigned int size, unsigned int fl_thres, int gen, unsigned int cidx)
Definition: cxgb_t3_hw.c:2646
static void mps_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2084
int t3_mps_set_active_ports(adapter_t *adap, unsigned int port_mask)
Definition: cxgb_t3_hw.c:3832
#define PMTX_INTR_MASK
Definition: cxgb_t3_hw.c:1813
static unsigned int pm_num_pages(unsigned int mem_size, unsigned int pg_size)
Definition: cxgb_t3_hw.c:3089
static int mi1_ext_write(adapter_t *adapter, int phy_addr, int mmd_addr, int reg_addr, unsigned int val)
Definition: cxgb_t3_hw.c:334
#define MC7_INTR_MASK
Definition: cxgb_t3_hw.c:1783
int t3_phy_lasi_intr_handler(struct cphy *phy)
Definition: cxgb_t3_hw.c:535
int t3_sge_read_rspq(adapter_t *adapter, unsigned int id, u32 data[4])
Definition: cxgb_t3_hw.c:2937
static void pci_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1831
#define PL_INTR_MASK
Definition: cxgb_t3_hw.c:1824
static void cplsw_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2064
static int t3_flash_erase_sectors(adapter_t *adapter, int start, int end)
Definition: cxgb_t3_hw.c:1271
#define ulp_region(adap, name, start, len)
Definition: cxgb_t3_hw.c:3545
int t3_sge_read_fl(adapter_t *adapter, unsigned int id, u32 data[4])
Definition: cxgb_t3_hw.c:2921
#define SGE_INTR_MASK
Definition: cxgb_t3_hw.c:1773
#define MC7_INTR_FATAL
Definition: cxgb_t3_hw.c:2096
void t3_set_reg_field(adapter_t *adapter, unsigned int addr, u32 mask, u32 val)
Definition: cxgb_t3_hw.c:103
static unsigned int __devinit mc7_calc_size(u32 cfg)
Definition: cxgb_t3_hw.c:4295
const struct adapter_info * t3_get_adapter_info(unsigned int id)
Definition: cxgb_t3_hw.c:587
int t3_phy_lasi_intr_clear(struct cphy *phy)
Definition: cxgb_t3_hw.c:528
static int mc7_init(struct mc7 *mc7, unsigned int mc7_clock, int mem_type)
Definition: cxgb_t3_hw.c:3953
int t3_init_hw(adapter_t *adapter, u32 fw_params)
Definition: cxgb_t3_hw.c:4147
void t3_get_cong_cntl_tab(adapter_t *adap, unsigned short incr[NMTUS][NCCTRL_WIN])
Definition: cxgb_t3_hw.c:3482
int t3_sge_read_ecntxt(adapter_t *adapter, unsigned int id, u32 data[4])
Definition: cxgb_t3_hw.c:2889
__FBSDID("$FreeBSD$")
struct boot_header_s boot_header_t
void t3_config_trace_filter(adapter_t *adapter, const struct trace_params *tp, int filter_index, int invert, int enable)
Definition: cxgb_t3_hw.c:3607
#define CC_MIN_INCR
Definition: cxgb_t3_hw.c:3408
static void pmrx_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2043
static void pcie_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1867
static void mc7_intr_handler(struct mc7 *mc7)
Definition: cxgb_t3_hw.c:2101
static void t3_read_indirect(adapter_t *adap, unsigned int addr_reg, unsigned int data_reg, u32 *vals, unsigned int nregs, unsigned int start_idx)
Definition: cxgb_t3_hw.c:123
static void __devinit get_pci_mode(adapter_t *adapter, struct pci_params *p)
Definition: cxgb_t3_hw.c:4231
static void partition_mem(adapter_t *adap, const struct tp_params *p)
Definition: cxgb_t3_hw.c:3109
static struct mdio_ops mi1_mdio_ext_ops
Definition: cxgb_t3_hw.c:356
static int sf1_read(adapter_t *adapter, unsigned int byte_cnt, int cont, u32 *valp)
Definition: cxgb_t3_hw.c:958
int t3_set_sched_ipg(adapter_t *adap, int sched, unsigned int ipg)
Definition: cxgb_t3_hw.c:3736
int t3_phy_advertise(struct cphy *phy, unsigned int advert)
Definition: cxgb_t3_hw.c:425
void t3_port_intr_enable(adapter_t *adapter, int idx)
Definition: cxgb_t3_hw.c:2443
static void ulp_config(adapter_t *adap, const struct tp_params *p)
Definition: cxgb_t3_hw.c:3556
static void tp_wr_indirect(adapter_t *adap, unsigned int addr, u32 val)
Definition: cxgb_t3_hw.c:3167
static void __devinit init_mtus(unsigned short mtus[])
Definition: cxgb_t3_hw.c:3338
int t3_get_vpd_len(adapter_t *adapter, struct generic_vpd *vpd)
Definition: cxgb_t3_hw.c:808
#define CPLSW_INTR_MASK
Definition: cxgb_t3_hw.c:1802
void t3_intr_enable(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2320
int t3_cim_ctl_blk_read(adapter_t *adap, unsigned int addr, unsigned int n, unsigned int *valp)
Definition: cxgb_t3_hw.c:1420
void t3_xgm_intr_disable(adapter_t *adapter, int idx)
Definition: cxgb_t3_hw.c:2427
static u32 tp_rd_indirect(adapter_t *adap, unsigned int addr)
Definition: cxgb_t3_hw.c:3173
#define msleep
Definition: cxgb_t3_hw.c:38
int t3_sge_disable_cqcntxt(adapter_t *adapter, unsigned int id)
Definition: cxgb_t3_hw.c:2792
static void mi1_init(adapter_t *adap, const struct adapter_info *ai)
Definition: cxgb_t3_hw.c:251
static void chan_init_hw(adapter_t *adap, unsigned int chan_map)
Definition: cxgb_t3_hw.c:3849
static int flash_wait_op(adapter_t *adapter, int attempts, int delay)
Definition: cxgb_t3_hw.c:1006
static unsigned int calc_gpio_intr(adapter_t *adap)
Definition: cxgb_t3_hw.c:2301
void t3_port_failover(adapter_t *adapter, int port)
Definition: cxgb_t3_hw.c:4653
static void pmtx_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2013
static int is_end_tag(adapter_t *adapter, u32 offset)
Definition: cxgb_t3_hw.c:781
int t3_check_tpsram(adapter_t *adapter, const u8 *tp_sram, unsigned int size)
Definition: cxgb_t3_hw.c:1184
int t3_phy_lasi_intr_enable(struct cphy *phy)
Definition: cxgb_t3_hw.c:518
static int mac_intr_handler(adapter_t *adap, unsigned int idx)
Definition: cxgb_t3_hw.c:2154
void t3_xgm_intr_enable(adapter_t *adapter, int idx)
Definition: cxgb_t3_hw.c:2419
#define SG_CONTEXT_CMD_ATTEMPTS
Definition: cxgb_t3_hw.c:2483
#define EEPROM_MAX_POLL
Definition: cxgb_t3_hw.c:643
int t3_phy_advertise_fiber(struct cphy *phy, unsigned int advert)
Definition: cxgb_t3_hw.c:468
void t3_get_tx_sched(adapter_t *adap, unsigned int sched, unsigned int *kbps, unsigned int *ipg)
Definition: cxgb_t3_hw.c:3766
#define ULPTX_INTR_MASK
Definition: cxgb_t3_hw.c:1801
static void t3_clear_faults(adapter_t *adapter, int port_id)
Definition: cxgb_t3_hw.c:1498
static void tp_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1901
int t3_check_tpsram_version(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1145
#define MPS_INTR_MASK
Definition: cxgb_t3_hw.c:1819
int t3_sge_enable_ecntxt(adapter_t *adapter, unsigned int id, int enable)
Definition: cxgb_t3_hw.c:2720
#define IESPI_FRM_ERR
Definition: cxgb_t3_hw.c:2031
static void tp_config(adapter_t *adap, const struct tp_params *p)
Definition: cxgb_t3_hw.c:3179
void t3_config_rss(adapter_t *adapter, unsigned int rss_config, const u8 *cpus, const u16 *rspq)
Definition: cxgb_t3_hw.c:2956
void t3_led_ready(adapter_t *adapter)
Definition: cxgb_t3_hw.c:4647
#define ulptx_region(adap, name, start, len)
Definition: cxgb_t3_hw.c:3551
static void calibrate_xgm_t3b(adapter_t *adapter)
Definition: cxgb_t3_hw.c:3913
static int wrreg_wait(adapter_t *adapter, unsigned int addr, u32 val)
Definition: cxgb_t3_hw.c:3943
static void ulptx_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1985
int t3_phy_lasi_intr_disable(struct cphy *phy)
Definition: cxgb_t3_hw.c:523
#define OESPI_FRM_ERR
Definition: cxgb_t3_hw.c:2005
#define XGM_INTR_MASK
Definition: cxgb_t3_hw.c:1784
void t3_set_pace_tbl(adapter_t *adap, unsigned int *pace_vals, unsigned int start, unsigned int n)
Definition: cxgb_t3_hw.c:3535
void mac_prep(struct cmac *mac, adapter_t *adapter, int index)
Definition: cxgb_t3_hw.c:4319
static int t3_sge_write_context(adapter_t *adapter, unsigned int id, unsigned int type)
Definition: cxgb_t3_hw.c:2494
static void cim_intr_handler(adapter_t *adapter)
Definition: cxgb_t3_hw.c:1925
int t3_config_sched(adapter_t *adap, unsigned int kbps, int sched)
Definition: cxgb_t3_hw.c:3692
int t3_wait_op_done_val(adapter_t *adapter, int reg, u32 mask, int polarity, int attempts, int delay, u32 *valp)
Definition: cxgb_t3_hw.c:55
#define MC5_INTR_MASK
Definition: cxgb_t3_hw.c:1780
static int calibrate_xgm(adapter_t *adapter)
Definition: cxgb_t3_hw.c:3886
int t3_mi1_write(adapter_t *adapter, int phy_addr, int mmd_addr, int reg_addr, unsigned int val)
Definition: cxgb_t3_hw.c:284
static int init_parity(adapter_t *adap)
Definition: cxgb_t3_hw.c:4422
static int t3_cim_hac_read(adapter_t *adapter, u32 addr, u32 *val)
Definition: cxgb_t3_hw.c:4674
void t3_tp_set_max_rxsize(adapter_t *adap, unsigned int size)
Definition: cxgb_t3_hw.c:3332
int t3_read_rss(adapter_t *adapter, u8 *lkup, u16 *map)
Definition: cxgb_t3_hw.c:2992
int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex)
Definition: cxgb_t3_hw.c:492
#define mem_region(adap, start, size, reg)
Definition: cxgb_t3_hw.c:3097
int t3_mc7_bd_read(struct mc7 *mc7, unsigned int start, unsigned int n, u64 *buf)
Definition: cxgb_t3_hw.c:144
int t3_get_tp_version(adapter_t *adapter, u32 *vers)
Definition: cxgb_t3_hw.c:1124
int t3_reinit_adapter(adapter_t *adap)
Definition: cxgb_t3_hw.c:4608
void t3_load_mtus(adapter_t *adap, unsigned short mtus[NMTUS], unsigned short alpha[NCCTRL_WIN], unsigned short beta[NCCTRL_WIN], unsigned short mtu_cap)
Definition: cxgb_t3_hw.c:3422
#define XGM_EXTRA_INTR_MASK
Definition: cxgb_t3_hw.c:1823
int t3_sge_init_cqcntxt(adapter_t *adapter, unsigned int id, u64 base_addr, unsigned int size, int rspq, int ovfl_mode, unsigned int credits, unsigned int credit_thres)
Definition: cxgb_t3_hw.c:2689
int t3_read_flash(adapter_t *adapter, unsigned int addr, unsigned int nwords, u32 *data, int byte_oriented)
Definition: cxgb_t3_hw.c:1037
void t3_set_vlan_accel(adapter_t *adapter, unsigned int ports, int on)
Definition: cxgb_t3_hw.c:1718
int t3_sge_disable_rspcntxt(adapter_t *adapter, unsigned int id)
Definition: cxgb_t3_hw.c:2768
static int t3_detect_link_fault(adapter_t *adapter, int port_id)
Definition: cxgb_t3_hw.c:1475
void t3_intr_disable(adapter_t *adapter)
Definition: cxgb_t3_hw.c:2371
void t3_tp_set_offload_mode(adapter_t *adap, int enable)
Definition: cxgb_t3_hw.c:3027
#define VPD_BASE
Definition: cxgb_t3_hw.c:645
int t3_seeprom_wp(adapter_t *adapter, int enable)
Definition: cxgb_t3_hw.c:723
int t3_sge_init_flcntxt(adapter_t *adapter, unsigned int id, int gts_enable, u64 base_addr, unsigned int size, unsigned int bsize, unsigned int cong_thres, int gen, unsigned int cidx)
Definition: cxgb_t3_hw.c:2607
void t3_port_intr_clear(adapter_t *adapter, int idx)
Definition: cxgb_t3_hw.c:2475
unsigned char nports0
Definition: cxgb_common.h:157
unsigned char nports1
Definition: cxgb_common.h:158
unsigned int gpio_out
Definition: cxgb_common.h:160
const struct mdio_ops * mdio_ops
Definition: cxgb_common.h:163
unsigned char phy_base_addr
Definition: cxgb_common.h:159
unsigned int stats_update_period
Definition: cxgb_common.h:401
unsigned int rev
Definition: cxgb_common.h:403
unsigned short a_wnd[NCCTRL_WIN]
Definition: cxgb_common.h:397
struct tp_params tp
Definition: cxgb_common.h:390
unsigned int chan_map
Definition: cxgb_common.h:400
unsigned short mtus[NMTUS]
Definition: cxgb_common.h:396
const struct adapter_info * info
Definition: cxgb_common.h:394
unsigned int nports
Definition: cxgb_common.h:399
struct pci_params pci
Definition: cxgb_common.h:392
unsigned int offload
Definition: cxgb_common.h:404
struct mc5_params mc5
Definition: cxgb_common.h:389
struct sge_params sge
Definition: cxgb_common.h:388
unsigned int linkpoll_period
Definition: cxgb_common.h:402
struct vpd_params vpd
Definition: cxgb_common.h:391
unsigned short b_wnd[NCCTRL_WIN]
Definition: cxgb_common.h:398
struct mc7 cm
Definition: cxgb_adapter.h:370
unsigned int slow_intr_mask
Definition: cxgb_adapter.h:363
struct mc7 pmtx
Definition: cxgb_adapter.h:369
struct mc5 mc5
Definition: cxgb_adapter.h:371
struct mc7 pmrx
Definition: cxgb_adapter.h:368
struct adapter_params params
Definition: cxgb_adapter.h:362
unsigned long irq_stats[IRQ_NUM_STATS]
Definition: cxgb_adapter.h:364
unsigned int reg_addr
Definition: cxgb_common.h:632
unsigned int val
Definition: cxgb_common.h:633
u8 exheader[2]
Definition: cxgb_t3_hw.c:916
u8 signature[2]
Definition: cxgb_t3_hw.c:912
u8 reserved[19]
Definition: cxgb_t3_hw.c:915
unsigned char ext_port
Definition: cxgb_common.h:480
struct mac_stats stats
Definition: cxgb_common.h:492
unsigned char multiport
Definition: cxgb_common.h:479
unsigned char nucast
Definition: cxgb_common.h:478
unsigned int offset
Definition: cxgb_common.h:477
unsigned int was_reset
Definition: cxgb_common.h:490
adapter_t * adapter
Definition: cxgb_common.h:476
int(* power_down)(struct cphy *phy, int enable)
Definition: cxgb_common.h:570
int(* reset)(struct cphy *phy, int wait)
Definition: cxgb_common.h:555
int(* intr_disable)(struct cphy *phy)
Definition: cxgb_common.h:558
int(* intr_handler)(struct cphy *phy)
Definition: cxgb_common.h:560
int(* intr_enable)(struct cphy *phy)
Definition: cxgb_common.h:557
int(* advertise)(struct cphy *phy, unsigned int advertise_map)
Definition: cxgb_common.h:565
int(* set_speed_duplex)(struct cphy *phy, int speed, int duplex)
Definition: cxgb_common.h:567
int(* autoneg_enable)(struct cphy *phy)
Definition: cxgb_common.h:562
int(* intr_clear)(struct cphy *phy)
Definition: cxgb_common.h:559
int(* get_link_status)(struct cphy *phy, int *link_state, int *speed, int *duplex, int *fc)
Definition: cxgb_common.h:568
unsigned int caps
Definition: cxgb_common.h:579
u8 addr
Definition: cxgb_common.h:575
const struct cphy_ops * ops
Definition: cxgb_common.h:584
adapter_t * adapter
Definition: cxgb_common.h:580
unsigned long fifo_errors
Definition: cxgb_common.h:583
u8 rst
Definition: cxgb_common.h:577
unsigned int mask
Definition: cxgb_t3_hw.c:1726
const char * msg
Definition: cxgb_t3_hw.c:1727
short stat_idx
Definition: cxgb_t3_hw.c:1728
unsigned short fatal
Definition: cxgb_t3_hw.c:1729
unsigned long rx_fifo_ovfl
Definition: cxgb_common.h:239
unsigned long xaui_pcs_align_change
Definition: cxgb_common.h:242
unsigned long tx_fifo_parity_err
Definition: cxgb_common.h:236
unsigned long link_faults
Definition: cxgb_common.h:247
unsigned long xaui_pcs_ctc_err
Definition: cxgb_common.h:241
unsigned long rx_fifo_parity_err
Definition: cxgb_common.h:237
unsigned long serdes_signal_loss
Definition: cxgb_common.h:240
unsigned long tx_fifo_urun
Definition: cxgb_common.h:238
unsigned int nservers
Definition: cxgb_common.h:330
unsigned int nroutes
Definition: cxgb_common.h:332
unsigned int nfilters
Definition: cxgb_common.h:331
unsigned long addr_err
Definition: cxgb_common.h:181
unsigned long corr_err
Definition: cxgb_common.h:178
unsigned long parity_err
Definition: cxgb_common.h:180
unsigned long uncorr_err
Definition: cxgb_common.h:179
unsigned char PreCyc
Definition: cxgb_t3_hw.c:3931
unsigned char BkCyc
Definition: cxgb_t3_hw.c:3933
unsigned char RefCyc[5]
Definition: cxgb_t3_hw.c:3932
unsigned char ActToPreDly
Definition: cxgb_t3_hw.c:3929
unsigned char RdToWrDly
Definition: cxgb_t3_hw.c:3935
unsigned char ActToRdWrDly
Definition: cxgb_t3_hw.c:3930
unsigned char WrToRdDly
Definition: cxgb_t3_hw.c:3934
unsigned int size
Definition: cxgb_common.h:463
adapter_t * adapter
Definition: cxgb_common.h:462
unsigned int width
Definition: cxgb_common.h:464
const char * name
Definition: cxgb_common.h:466
unsigned int offset
Definition: cxgb_common.h:465
struct mc7_stats stats
Definition: cxgb_common.h:467
unsigned int vpd_cap_addr
Definition: cxgb_common.h:372
unsigned int pcie_cap_addr
Definition: cxgb_common.h:373
unsigned short speed
Definition: cxgb_common.h:374
unsigned char width
Definition: cxgb_common.h:375
unsigned char variant
Definition: cxgb_common.h:376
uint32_t port_id
Definition: cxgb_adapter.h:103
int link_fault
Definition: cxgb_adapter.h:108
struct cmac mac
Definition: cxgb_adapter.h:98
struct cphy phy
Definition: cxgb_adapter.h:97
struct link_config link_config
Definition: cxgb_adapter.h:100
int(* phy_prep)(pinfo_t *pinfo, int phy_addr, const struct mdio_ops *ops)
Definition: cxgb_t3_hw.c:593
unsigned int max_pkt_size
Definition: cxgb_common.h:324
Definition: cxgb_ioctl.h:205
VPD_ENTRY(port1, 2)
u8 id_tag
Definition: cxgb_t3_hw.c:619
VPD_ENTRY(xaui0cfg, 6)
VPD_ENTRY(na, 12)
VPD_ENTRY(mdc, 6)
VPD_ENTRY(cclk, 6)
u8 id_data[16]
Definition: cxgb_t3_hw.c:621
VPD_ENTRY(port3, 2)
u8 vpdr_len[2]
Definition: cxgb_t3_hw.c:623
VPD_ENTRY(xaui1cfg, 6)
VPD_ENTRY(mclk, 6)
VPD_ENTRY(pn, 16)
VPD_ENTRY(port2, 2)
VPD_ENTRY(port0, 2)
VPD_ENTRY(ec, ECNUM_LEN)
u8 id_len[2]
Definition: cxgb_t3_hw.c:620
VPD_ENTRY(uclk, 6)
u8 vpdr_tag
Definition: cxgb_t3_hw.c:622
VPD_ENTRY(rv, 1)
VPD_ENTRY(sn, SERNUM_LEN)
VPD_ENTRY(mt, 2)
u32 pad
Definition: cxgb_t3_hw.c:640
unsigned int pmtx_size
Definition: cxgb_common.h:297
unsigned int rx_num_pgs
Definition: cxgb_common.h:303
unsigned int rx_pg_size
Definition: cxgb_common.h:301
unsigned int ntimer_qs
Definition: cxgb_common.h:305
unsigned int tx_pg_size
Definition: cxgb_common.h:302
unsigned int nchan
Definition: cxgb_common.h:295
unsigned int chan_tx_size
Definition: cxgb_common.h:300
unsigned int cm_size
Definition: cxgb_common.h:298
unsigned int tx_num_pgs
Definition: cxgb_common.h:304
unsigned int dack_re
Definition: cxgb_common.h:307
unsigned int tre
Definition: cxgb_common.h:306
unsigned int chan_rx_size
Definition: cxgb_common.h:299
unsigned int pmrx_size
Definition: cxgb_common.h:296
u8 sn[SERNUM_LEN+1]
Definition: cxgb_common.h:356
u8 ec[ECNUM_LEN+1]
Definition: cxgb_common.h:357
unsigned int uclk
Definition: cxgb_common.h:353
unsigned int mclk
Definition: cxgb_common.h:352
unsigned short xauicfg[2]
Definition: cxgb_common.h:360
u8 port_type[MAX_NPORTS]
Definition: cxgb_common.h:359
unsigned int mdc
Definition: cxgb_common.h:354
u8 eth_base[6]
Definition: cxgb_common.h:358
unsigned int mem_timing
Definition: cxgb_common.h:355
unsigned int cclk
Definition: cxgb_common.h:351