git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/qede/base: fix macros to check chip revision/metal
[dpdk.git]
/
drivers
/
net
/
bnxt
/
bnxt_irq.c
diff --git
a/drivers/net/bnxt/bnxt_irq.c
b/drivers/net/bnxt/bnxt_irq.c
index
e93585a
..
47cda7e
100644
(file)
--- a/
drivers/net/bnxt/bnxt_irq.c
+++ b/
drivers/net/bnxt/bnxt_irq.c
@@
-45,8
+45,7
@@
* Interrupts
*/
* Interrupts
*/
-static void bnxt_int_handler(struct rte_intr_handle *handle __rte_unused,
- void *param)
+static void bnxt_int_handler(void *param)
{
struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param;
struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
{
struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)param;
struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
@@
-67,16
+66,26
@@
static void bnxt_int_handler(struct rte_intr_handle *handle __rte_unused,
/* Handle any async event */
bnxt_handle_async_event(bp, cmp);
break;
/* Handle any async event */
bnxt_handle_async_event(bp, cmp);
break;
- case CMPL_BASE_TYPE_HWRM_FWD_RE
SP
:
+ case CMPL_BASE_TYPE_HWRM_FWD_RE
Q
:
/* Handle HWRM forwarded responses */
bnxt_handle_fwd_req(bp, cmp);
break;
default:
/* Ignore any other events */
/* Handle HWRM forwarded responses */
bnxt_handle_fwd_req(bp, cmp);
break;
default:
/* Ignore any other events */
+ if (cmp->type & rte_cpu_to_le_16(0x01)) {
+ if (!CMP_VALID(cmp, raw_cons,
+ cpr->cp_ring_struct))
+ goto no_more;
+ }
+ RTE_LOG(INFO, PMD,
+ "Ignoring %02x completion\n", CMP_TYPE(cmp));
break;
}
raw_cons = NEXT_RAW_CMP(raw_cons);
break;
}
raw_cons = NEXT_RAW_CMP(raw_cons);
- }
+
+ };
+no_more:
+ cpr->cp_raw_cons = raw_cons;
B_CP_DB_REARM(cpr, cpr->cp_raw_cons);
}
B_CP_DB_REARM(cpr, cpr->cp_raw_cons);
}
@@
-103,14
+112,15
@@
void bnxt_disable_int(struct bnxt *bp)
struct bnxt_cp_ring_info *cpr = bp->def_cp_ring;
/* Only the default completion ring */
struct bnxt_cp_ring_info *cpr = bp->def_cp_ring;
/* Only the default completion ring */
- B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
+ if (cpr != NULL && cpr->cp_doorbell != NULL)
+ B_CP_DB_DISARM(cpr);
}
void bnxt_enable_int(struct bnxt *bp)
{
struct bnxt_cp_ring_info *cpr = bp->def_cp_ring;
}
void bnxt_enable_int(struct bnxt *bp)
{
struct bnxt_cp_ring_info *cpr = bp->def_cp_ring;
- B_CP_DB_
REARM(cpr, cpr->cp_raw_cons
);
+ B_CP_DB_
ARM(cpr
);
}
int bnxt_setup_int(struct bnxt *bp)
}
int bnxt_setup_int(struct bnxt *bp)
@@
-127,7
+137,7
@@
int bnxt_setup_int(struct bnxt *bp)
for (i = 0; i < total_vecs; i++) {
bp->irq_tbl[i].vector = i;
snprintf(bp->irq_tbl[i].name, len,
for (i = 0; i < total_vecs; i++) {
bp->irq_tbl[i].vector = i;
snprintf(bp->irq_tbl[i].name, len,
- "%s-%d", bp->eth_dev->d
ata
->name, i);
+ "%s-%d", bp->eth_dev->d
evice
->name, i);
bp->irq_tbl[i].handler = bnxt_int_handler;
}
} else {
bp->irq_tbl[i].handler = bnxt_int_handler;
}
} else {
@@
-137,7
+147,7
@@
int bnxt_setup_int(struct bnxt *bp)
return 0;
setup_exit:
return 0;
setup_exit:
- RTE_LOG(ERR, PMD, "bnxt_irq_tbl setup failed");
+ RTE_LOG(ERR, PMD, "bnxt_irq_tbl setup failed
\n
");
return rc;
}
return rc;
}