Skip to content

Commit

Permalink
cnic: Add function pointers to arm IRQ for different devices.
Browse files Browse the repository at this point in the history
This will make it easier to exit IRQ loop and re-arm IRQ on devices that
don't support FCoE.

Reviewed-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michael Chan authored and David S. Miller committed Sep 10, 2012
1 parent f81b0ac commit 8cc0e02
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
26 changes: 22 additions & 4 deletions drivers/net/ethernet/broadcom/cnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -3078,6 +3078,22 @@ static void cnic_ack_bnx2x_e2_msix(struct cnic_dev *dev)
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)
{
u32 last_status = *info->status_idx_ptr;
Expand Down Expand Up @@ -3115,8 +3131,7 @@ static void cnic_service_bnx2x_bh(unsigned long data)
cp->kcq1.sw_prod_idx + MAX_KCQ_IDX);

if (!BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, USTORM_ID,
status_idx, IGU_INT_ENABLE, 1);
cp->arm_int(dev, status_idx);
break;
}

Expand Down Expand Up @@ -5520,10 +5535,13 @@ static struct cnic_dev *init_bnx2x_cnic(struct net_device *dev)
cp->stop_cm = cnic_cm_stop_bnx2x_hw;
cp->enable_int = cnic_enable_bnx2x_int;
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;
else
cp->arm_int = cnic_arm_bnx2x_e2_msix;
} else {
cp->ack_int = cnic_ack_bnx2x_msix;
cp->arm_int = cnic_arm_bnx2x_msix;
}
cp->close_conn = cnic_close_bnx2x_conn;
return cdev;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/broadcom/cnic.h
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ struct cnic_local {
void (*enable_int)(struct cnic_dev *);
void (*disable_int_sync)(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);
};

Expand Down

0 comments on commit 8cc0e02

Please sign in to comment.