Skip to content

Commit 807be7e

Browse files
cvparkerjxsvoboda
authored andcommitted
Mask the ICR register in the interrupt claim pseudo-code to prevent
false interrupt claims when masked-out ICR causes are true.
1 parent 0800b26 commit 807be7e

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

uspace/drv/nic/e1k/e1k.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,16 @@ irq_cmd_t e1000_irq_commands[] = {
254254
.addr = NULL,
255255
.dstarg = 2
256256
},
257+
{
258+
.cmd = CMD_AND,
259+
.value = ICR_RXT0,
260+
.srcarg = 2,
261+
.dstarg = 1
262+
},
257263
{
258264
.cmd = CMD_PREDICATE,
259265
.value = 2,
260-
.srcarg = 2
266+
.srcarg = 1
261267
},
262268
{
263269
/* Disable interrupts until interrupt routine is finished */
@@ -1273,7 +1279,7 @@ inline static errno_t e1000_register_int_handler(nic_t *nic,
12731279

12741280
e1000_irq_code.ranges[0].base = (uintptr_t) e1000->reg_base_phys;
12751281
e1000_irq_code.cmds[0].addr = e1000->reg_base_phys + E1000_ICR;
1276-
e1000_irq_code.cmds[2].addr = e1000->reg_base_phys + E1000_IMC;
1282+
e1000_irq_code.cmds[3].addr = e1000->reg_base_phys + E1000_IMC;
12771283

12781284
errno_t rc = register_interrupt_handler(nic_get_ddf_dev(nic), e1000->irq,
12791285
e1000_interrupt_handler, &e1000_irq_code, handle);

0 commit comments

Comments
 (0)