Commit 8cc0e028 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

cnic: Add function pointers to arm IRQ for different devices.

This will make it easier to exit IRQ loop and re-arm IRQ on devices that
don't support FCoE.
Reviewed-by: default avatarEddie Wai <eddie.wai@broadcom.com>
Reviewed-by: default avatarBhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f81b0ac4
...@@ -3078,6 +3078,22 @@ static void cnic_ack_bnx2x_e2_msix(struct cnic_dev *dev) ...@@ -3078,6 +3078,22 @@ static void cnic_ack_bnx2x_e2_msix(struct cnic_dev *dev)
IGU_INT_DISABLE, 0); IGU_INT_DISABLE, 0);
} }
static void cnic_arm_bnx2x_msix(struct cnic_dev *dev, u32 idx)
{
struct cnic_local *cp = dev->cnic_priv;
cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, idx,
IGU_INT_ENABLE, 1);
}
static void cnic_arm_bnx2x_e2_msix(struct cnic_dev *dev, u32 idx)
{
struct cnic_local *cp = dev->cnic_priv;
cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, idx,
IGU_INT_ENABLE, 1);
}
static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info) static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info)
{ {
u32 last_status = *info->status_idx_ptr; u32 last_status = *info->status_idx_ptr;
...@@ -3115,8 +3131,7 @@ static void cnic_service_bnx2x_bh(unsigned long data) ...@@ -3115,8 +3131,7 @@ static void cnic_service_bnx2x_bh(unsigned long data)
cp->kcq1.sw_prod_idx + MAX_KCQ_IDX); cp->kcq1.sw_prod_idx + MAX_KCQ_IDX);
if (!BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) { if (!BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, USTORM_ID, cp->arm_int(dev, status_idx);
status_idx, IGU_INT_ENABLE, 1);
break; break;
} }
...@@ -5520,10 +5535,13 @@ static struct cnic_dev *init_bnx2x_cnic(struct net_device *dev) ...@@ -5520,10 +5535,13 @@ static struct cnic_dev *init_bnx2x_cnic(struct net_device *dev)
cp->stop_cm = cnic_cm_stop_bnx2x_hw; cp->stop_cm = cnic_cm_stop_bnx2x_hw;
cp->enable_int = cnic_enable_bnx2x_int; cp->enable_int = cnic_enable_bnx2x_int;
cp->disable_int_sync = cnic_disable_bnx2x_int_sync; cp->disable_int_sync = cnic_disable_bnx2x_int_sync;
if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
cp->ack_int = cnic_ack_bnx2x_e2_msix; cp->ack_int = cnic_ack_bnx2x_e2_msix;
else cp->arm_int = cnic_arm_bnx2x_e2_msix;
} else {
cp->ack_int = cnic_ack_bnx2x_msix; cp->ack_int = cnic_ack_bnx2x_msix;
cp->arm_int = cnic_arm_bnx2x_msix;
}
cp->close_conn = cnic_close_bnx2x_conn; cp->close_conn = cnic_close_bnx2x_conn;
return cdev; return cdev;
} }
......
...@@ -334,6 +334,7 @@ struct cnic_local { ...@@ -334,6 +334,7 @@ struct cnic_local {
void (*enable_int)(struct cnic_dev *); void (*enable_int)(struct cnic_dev *);
void (*disable_int_sync)(struct cnic_dev *); void (*disable_int_sync)(struct cnic_dev *);
void (*ack_int)(struct cnic_dev *); void (*ack_int)(struct cnic_dev *);
void (*arm_int)(struct cnic_dev *, u32 index);
void (*close_conn)(struct cnic_sock *, u32 opcode); void (*close_conn)(struct cnic_sock *, u32 opcode);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment