Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 203160
b: refs/heads/master
c: b177a5d
h: refs/heads/master
v: v3
  • Loading branch information
Michael Chan authored and David S. Miller committed Jun 26, 2010
1 parent 6b06fc1 commit d43a537
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 38 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 644b9d4f8b8d74f4d87f14dede5e331555d3e701
refs/heads/master: b177a5d5d876965b42788f3a05197ef385c84dcf
71 changes: 34 additions & 37 deletions trunk/drivers/net/cnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -2223,16 +2223,12 @@ static void cnic_chk_pkt_rings(struct cnic_local *cp)
clear_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags);
}

static int cnic_service_bnx2(void *data, void *status_blk)
static u32 cnic_service_bnx2_queues(struct cnic_dev *dev)
{
struct cnic_dev *dev = data;
struct cnic_local *cp = dev->cnic_priv;
u32 status_idx = *cp->kcq1.status_idx_ptr;
u32 status_idx = (u16) *cp->kcq1.status_idx_ptr;
int kcqe_cnt;

if (unlikely(!test_bit(CNIC_F_CNIC_UP, &dev->flags)))
return status_idx;

cp->kwq_con_idx = *cp->kwq_con_idx_ptr;

while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) {
Expand All @@ -2242,7 +2238,7 @@ static int cnic_service_bnx2(void *data, void *status_blk)
/* Tell compiler that status_blk fields can change. */
barrier();
if (status_idx != *cp->kcq1.status_idx_ptr) {
status_idx = *cp->kcq1.status_idx_ptr;
status_idx = (u16) *cp->kcq1.status_idx_ptr;
cp->kwq_con_idx = *cp->kwq_con_idx_ptr;
} else
break;
Expand All @@ -2251,37 +2247,29 @@ static int cnic_service_bnx2(void *data, void *status_blk)
CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx);

cnic_chk_pkt_rings(cp);

return status_idx;
}

static void cnic_service_bnx2_msix(unsigned long data)
static int cnic_service_bnx2(void *data, void *status_blk)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_dev *dev = data;
struct cnic_local *cp = dev->cnic_priv;
struct status_block_msix *status_blk = cp->status_blk.bnx2;
u32 status_idx = *cp->kcq1.status_idx_ptr;
int kcqe_cnt;

cp->kwq_con_idx = status_blk->status_cmd_consumer_index;

while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) {

service_kcqes(dev, kcqe_cnt);
if (unlikely(!test_bit(CNIC_F_CNIC_UP, &dev->flags)))
return status_idx;

/* Tell compiler that status_blk fields can change. */
barrier();
if (status_idx != *cp->kcq1.status_idx_ptr) {
status_idx = *cp->kcq1.status_idx_ptr;
cp->kwq_con_idx = status_blk->status_cmd_consumer_index;
} else
break;
}
return cnic_service_bnx2_queues(dev);
}

CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx);
static void cnic_service_bnx2_msix(unsigned long data)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_local *cp = dev->cnic_priv;

cnic_chk_pkt_rings(cp);
cp->last_status_idx = cnic_service_bnx2_queues(dev);

cp->last_status_idx = status_idx;
CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num |
BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx);
}
Expand Down Expand Up @@ -2338,27 +2326,35 @@ static void cnic_ack_bnx2x_msix(struct cnic_dev *dev)
IGU_INT_DISABLE, 0);
}

static void cnic_service_bnx2x_bh(unsigned long data)
static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_local *cp = dev->cnic_priv;
u32 status_idx = *cp->kcq1.status_idx_ptr;
u32 last_status = *info->status_idx_ptr;
int kcqe_cnt;

if (unlikely(!test_bit(CNIC_F_CNIC_UP, &dev->flags)))
return;

while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) {
while ((kcqe_cnt = cnic_get_kcqes(dev, info))) {

service_kcqes(dev, kcqe_cnt);

/* Tell compiler that sblk fields can change. */
barrier();
if (status_idx == *cp->kcq1.status_idx_ptr)
if (last_status == *info->status_idx_ptr)
break;

status_idx = *cp->kcq1.status_idx_ptr;
last_status = *info->status_idx_ptr;
}
return last_status;
}

static void cnic_service_bnx2x_bh(unsigned long data)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_local *cp = dev->cnic_priv;
u32 status_idx;

if (unlikely(!test_bit(CNIC_F_CNIC_UP, &dev->flags)))
return;

status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq1);

CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx + MAX_KCQ_IDX);
cnic_ack_bnx2x_int(dev, cp->status_blk_num, CSTORM_ID,
Expand Down Expand Up @@ -3786,6 +3782,7 @@ static int cnic_start_bnx2_hw(struct cnic_dev *dev)
cp->kcq1.hw_prod_idx_ptr =
(u16 *) &msblk->status_completion_producer_index;
cp->kcq1.status_idx_ptr = (u16 *) &msblk->status_idx;
cp->kwq_con_idx_ptr = (u16 *) &msblk->status_cmd_consumer_index;
cp->int_num = sb_id << BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT;
cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_HOST_QIDX, sb);
cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_HOST_QIDX, sb);
Expand Down

0 comments on commit d43a537

Please sign in to comment.