diff options
Diffstat (limited to 'drivers/net/benet/be_main.c')
| -rw-r--r-- | drivers/net/benet/be_main.c | 27 | 
1 files changed, 24 insertions, 3 deletions
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index 33ab8c7f14f..626b76c0ebc 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c @@ -1350,7 +1350,7 @@ static irqreturn_t be_intx(int irq, void *dev)  	int isr;  	isr = ioread32(adapter->csr + CEV_ISR0_OFFSET + -			be_pci_func(adapter) * CEV_ISR_SIZE); +		(adapter->tx_eq.q.id/ 8) * CEV_ISR_SIZE);  	if (!isr)  		return IRQ_NONE; @@ -2051,6 +2051,7 @@ static void be_unmap_pci_bars(struct be_adapter *adapter)  static int be_map_pci_bars(struct be_adapter *adapter)  {  	u8 __iomem *addr; +	int pcicfg_reg;  	addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2),  			pci_resource_len(adapter->pdev, 2)); @@ -2064,8 +2065,13 @@ static int be_map_pci_bars(struct be_adapter *adapter)  		goto pci_map_err;  	adapter->db = addr; -	addr = ioremap_nocache(pci_resource_start(adapter->pdev, 1), -			pci_resource_len(adapter->pdev, 1)); +	if (adapter->generation == BE_GEN2) +		pcicfg_reg = 1; +	else +		pcicfg_reg = 0; + +	addr = ioremap_nocache(pci_resource_start(adapter->pdev, pcicfg_reg), +			pci_resource_len(adapter->pdev, pcicfg_reg));  	if (addr == NULL)  		goto pci_map_err;  	adapter->pcicfg = addr; @@ -2162,6 +2168,7 @@ static int be_stats_init(struct be_adapter *adapter)  	cmd->va = pci_alloc_consistent(adapter->pdev, cmd->size, &cmd->dma);  	if (cmd->va == NULL)  		return -1; +	memset(cmd->va, 0, cmd->size);  	return 0;  } @@ -2240,6 +2247,20 @@ static int __devinit be_probe(struct pci_dev *pdev,  		goto rel_reg;  	}  	adapter = netdev_priv(netdev); + +	switch (pdev->device) { +	case BE_DEVICE_ID1: +	case OC_DEVICE_ID1: +		adapter->generation = BE_GEN2; +		break; +	case BE_DEVICE_ID2: +	case OC_DEVICE_ID2: +		adapter->generation = BE_GEN3; +		break; +	default: +		adapter->generation = 0; +	} +  	adapter->pdev = pdev;  	pci_set_drvdata(pdev, adapter);  	adapter->netdev = netdev;  |