|
@@ -185,16 +185,26 @@ void t3_os_link_changed(struct adapter *adapter, int port_id, int link_stat,
|
|
|
int speed, int duplex, int pause)
|
|
|
{
|
|
|
struct net_device *dev = adapter->port[port_id];
|
|
|
+ struct port_info *pi = netdev_priv(dev);
|
|
|
+ struct cmac *mac = &pi->mac;
|
|
|
|
|
|
/* Skip changes from disabled ports. */
|
|
|
if (!netif_running(dev))
|
|
|
return;
|
|
|
|
|
|
if (link_stat != netif_carrier_ok(dev)) {
|
|
|
- if (link_stat)
|
|
|
+ if (link_stat) {
|
|
|
+ t3_set_reg_field(adapter,
|
|
|
+ A_XGM_TXFIFO_CFG + mac->offset,
|
|
|
+ F_ENDROPPKT, 0);
|
|
|
netif_carrier_on(dev);
|
|
|
- else
|
|
|
+ } else {
|
|
|
netif_carrier_off(dev);
|
|
|
+ t3_set_reg_field(adapter,
|
|
|
+ A_XGM_TXFIFO_CFG + mac->offset,
|
|
|
+ F_ENDROPPKT, F_ENDROPPKT);
|
|
|
+ }
|
|
|
+
|
|
|
link_report(dev);
|
|
|
}
|
|
|
}
|
|
@@ -407,7 +417,7 @@ static void quiesce_rx(struct adapter *adap)
|
|
|
static int setup_sge_qsets(struct adapter *adap)
|
|
|
{
|
|
|
int i, j, err, irq_idx = 0, qset_idx = 0, dummy_dev_idx = 0;
|
|
|
- unsigned int ntxq = is_offload(adap) ? SGE_TXQ_PER_SET : 1;
|
|
|
+ unsigned int ntxq = SGE_TXQ_PER_SET;
|
|
|
|
|
|
if (adap->params.rev > 0 && !(adap->flags & USING_MSI))
|
|
|
irq_idx = -1;
|
|
@@ -485,12 +495,14 @@ static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
|
|
|
static ssize_t set_nfilters(struct net_device *dev, unsigned int val)
|
|
|
{
|
|
|
struct adapter *adap = dev->priv;
|
|
|
+ int min_tids = is_offload(adap) ? MC5_MIN_TIDS : 0;
|
|
|
|
|
|
if (adap->flags & FULL_INIT_DONE)
|
|
|
return -EBUSY;
|
|
|
if (val && adap->params.rev == 0)
|
|
|
return -EINVAL;
|
|
|
- if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers)
|
|
|
+ if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
|
|
|
+ min_tids)
|
|
|
return -EINVAL;
|
|
|
adap->params.mc5.nfilters = val;
|
|
|
return 0;
|
|
@@ -508,7 +520,8 @@ static ssize_t set_nservers(struct net_device *dev, unsigned int val)
|
|
|
|
|
|
if (adap->flags & FULL_INIT_DONE)
|
|
|
return -EBUSY;
|
|
|
- if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters)
|
|
|
+ if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters -
|
|
|
+ MC5_MIN_TIDS)
|
|
|
return -EINVAL;
|
|
|
adap->params.mc5.nservers = val;
|
|
|
return 0;
|
|
@@ -708,7 +721,7 @@ static void bind_qsets(struct adapter *adap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#define FW_FNAME "t3fw-%d.%d.bin"
|
|
|
+#define FW_FNAME "t3fw-%d.%d.%d.bin"
|
|
|
|
|
|
static int upgrade_fw(struct adapter *adap)
|
|
|
{
|
|
@@ -718,7 +731,7 @@ static int upgrade_fw(struct adapter *adap)
|
|
|
struct device *dev = &adap->pdev->dev;
|
|
|
|
|
|
snprintf(buf, sizeof(buf), FW_FNAME, FW_VERSION_MAJOR,
|
|
|
- FW_VERSION_MINOR);
|
|
|
+ FW_VERSION_MINOR, FW_VERSION_MICRO);
|
|
|
ret = request_firmware(&fw, buf, dev);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev, "could not upgrade firmware: unable to load %s\n",
|
|
@@ -919,7 +932,7 @@ static int cxgb_open(struct net_device *dev)
|
|
|
return err;
|
|
|
|
|
|
set_bit(pi->port_id, &adapter->open_device_map);
|
|
|
- if (!ofld_disable) {
|
|
|
+ if (is_offload(adapter) && !ofld_disable) {
|
|
|
err = offload_open(dev);
|
|
|
if (err)
|
|
|
printk(KERN_WARNING
|
|
@@ -2116,7 +2129,7 @@ static void check_t3b2_mac(struct adapter *adapter)
|
|
|
continue;
|
|
|
|
|
|
status = 0;
|
|
|
- if (netif_running(dev))
|
|
|
+ if (netif_running(dev) && netif_carrier_ok(dev))
|
|
|
status = t3b2_mac_watchdog_task(&p->mac);
|
|
|
if (status == 1)
|
|
|
p->mac.stats.num_toggled++;
|
|
@@ -2267,9 +2280,9 @@ static void __devinit print_port_info(struct adapter *adap,
|
|
|
|
|
|
if (!test_bit(i, &adap->registered_device_map))
|
|
|
continue;
|
|
|
- printk(KERN_INFO "%s: %s %s RNIC (rev %d) %s%s\n",
|
|
|
+ printk(KERN_INFO "%s: %s %s %sNIC (rev %d) %s%s\n",
|
|
|
dev->name, ai->desc, pi->port_type->desc,
|
|
|
- adap->params.rev, buf,
|
|
|
+ is_offload(adap) ? "R" : "", adap->params.rev, buf,
|
|
|
(adap->flags & USING_MSIX) ? " MSI-X" :
|
|
|
(adap->flags & USING_MSI) ? " MSI" : "");
|
|
|
if (adap->name == dev->name && adap->params.vpd.mclk)
|