|
@@ -149,33 +149,31 @@ static void netxen_nic_update_cmd_consumer(struct netxen_adapter *adapter,
|
|
|
|
|
|
#define ADAPTER_LIST_SIZE 12
|
|
#define ADAPTER_LIST_SIZE 12
|
|
|
|
|
|
|
|
+static uint32_t msi_tgt_status[4] = {
|
|
|
|
+ ISR_INT_TARGET_STATUS, ISR_INT_TARGET_STATUS_F1,
|
|
|
|
+ ISR_INT_TARGET_STATUS_F2, ISR_INT_TARGET_STATUS_F3
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static uint32_t sw_int_mask[4] = {
|
|
|
|
+ CRB_SW_INT_MASK_0, CRB_SW_INT_MASK_1,
|
|
|
|
+ CRB_SW_INT_MASK_2, CRB_SW_INT_MASK_3
|
|
|
|
+};
|
|
|
|
+
|
|
static void netxen_nic_disable_int(struct netxen_adapter *adapter)
|
|
static void netxen_nic_disable_int(struct netxen_adapter *adapter)
|
|
{
|
|
{
|
|
- uint32_t mask = 0x7ff;
|
|
|
|
|
|
+ u32 mask = 0x7ff;
|
|
int retries = 32;
|
|
int retries = 32;
|
|
|
|
+ int port = adapter->portnum;
|
|
|
|
+ int pci_fn = adapter->ahw.pci_func;
|
|
|
|
|
|
- DPRINTK(1, INFO, "Entered ISR Disable \n");
|
|
|
|
-
|
|
|
|
- switch (adapter->portnum) {
|
|
|
|
- case 0:
|
|
|
|
- writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_0));
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_1));
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_2));
|
|
|
|
- break;
|
|
|
|
- case 3:
|
|
|
|
- writel(0x0, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_3));
|
|
|
|
- break;
|
|
|
|
|
|
+ if (adapter->msi_mode != MSI_MODE_MULTIFUNC) {
|
|
|
|
+ writel(0x0, NETXEN_CRB_NORMALIZE(adapter, sw_int_mask[port]));
|
|
}
|
|
}
|
|
|
|
|
|
if (adapter->intr_scheme != -1 &&
|
|
if (adapter->intr_scheme != -1 &&
|
|
adapter->intr_scheme != INTR_SCHEME_PERPORT)
|
|
adapter->intr_scheme != INTR_SCHEME_PERPORT)
|
|
writel(mask,PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
|
writel(mask,PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
|
|
|
|
|
- /* Window = 0 or 1 */
|
|
|
|
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
|
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
|
do {
|
|
do {
|
|
writel(0xffffffff,
|
|
writel(0xffffffff,
|
|
@@ -190,14 +188,18 @@ static void netxen_nic_disable_int(struct netxen_adapter *adapter)
|
|
printk(KERN_NOTICE "%s: Failed to disable interrupt completely\n",
|
|
printk(KERN_NOTICE "%s: Failed to disable interrupt completely\n",
|
|
netxen_nic_driver_name);
|
|
netxen_nic_driver_name);
|
|
}
|
|
}
|
|
|
|
+ } else {
|
|
|
|
+ if (adapter->msi_mode == MSI_MODE_MULTIFUNC) {
|
|
|
|
+ writel(0xffffffff, PCI_OFFSET_SECOND_RANGE(adapter,
|
|
|
|
+ msi_tgt_status[pci_fn]));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
- DPRINTK(1, INFO, "Done with Disable Int\n");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void netxen_nic_enable_int(struct netxen_adapter *adapter)
|
|
static void netxen_nic_enable_int(struct netxen_adapter *adapter)
|
|
{
|
|
{
|
|
u32 mask;
|
|
u32 mask;
|
|
|
|
+ int port = adapter->portnum;
|
|
|
|
|
|
DPRINTK(1, INFO, "Entered ISR Enable \n");
|
|
DPRINTK(1, INFO, "Entered ISR Enable \n");
|
|
|
|
|
|
@@ -218,20 +220,7 @@ static void netxen_nic_enable_int(struct netxen_adapter *adapter)
|
|
writel(mask, PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
|
writel(mask, PCI_OFFSET_SECOND_RANGE(adapter, ISR_INT_MASK));
|
|
}
|
|
}
|
|
|
|
|
|
- switch (adapter->portnum) {
|
|
|
|
- case 0:
|
|
|
|
- writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_0));
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_1));
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_2));
|
|
|
|
- break;
|
|
|
|
- case 3:
|
|
|
|
- writel(0x1, NETXEN_CRB_NORMALIZE(adapter, CRB_SW_INT_MASK_3));
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ writel(0x1, NETXEN_CRB_NORMALIZE(adapter, sw_int_mask[port]));
|
|
|
|
|
|
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
|
if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
|
|
mask = 0xbff;
|
|
mask = 0xbff;
|
|
@@ -401,6 +390,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
|
|
|
/* this will be read from FW later */
|
|
/* this will be read from FW later */
|
|
adapter->intr_scheme = -1;
|
|
adapter->intr_scheme = -1;
|
|
|
|
+ adapter->msi_mode = -1;
|
|
|
|
|
|
/* This will be reset for mezz cards */
|
|
/* This will be reset for mezz cards */
|
|
adapter->portnum = pci_func_id;
|
|
adapter->portnum = pci_func_id;
|