mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
e1000e: Fix EIAC register implementation
This patch fixes 2 issues: 1. Bits set in EIAC register should be cleared from IMS when EIAM is not used. 2. Only bit that corresonds to the interrupt being raised should be cleared. See spec. 10.2.4.7 Interrupt Auto Clear Signed-off-by: Dmitry Fleytman <dmitry@daynix.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
4100c026b6
commit
b38636b837
1 changed files with 9 additions and 5 deletions
|
@ -2015,13 +2015,17 @@ e1000e_msix_notify_one(E1000ECore *core, uint32_t cause, uint32_t int_cfg)
|
|||
|
||||
trace_e1000e_irq_icr_clear_eiac(core->mac[ICR], core->mac[EIAC]);
|
||||
|
||||
if (core->mac[EIAC] & E1000_ICR_OTHER) {
|
||||
effective_eiac = (core->mac[EIAC] & E1000_EIAC_MASK) |
|
||||
E1000_ICR_OTHER_CAUSES;
|
||||
} else {
|
||||
effective_eiac = core->mac[EIAC] & E1000_EIAC_MASK;
|
||||
effective_eiac = core->mac[EIAC] & cause;
|
||||
|
||||
if (effective_eiac == E1000_ICR_OTHER) {
|
||||
effective_eiac |= E1000_ICR_OTHER_CAUSES;
|
||||
}
|
||||
|
||||
core->mac[ICR] &= ~effective_eiac;
|
||||
|
||||
if (!(core->mac[CTRL_EXT] & E1000_CTRL_EXT_IAME)) {
|
||||
core->mac[IMS] &= ~effective_eiac;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue