Lines 1492-1498
em_msix_link(void *arg)
Link Here
|
1492 |
{ |
1492 |
{ |
1493 |
struct adapter *adapter = arg; |
1493 |
struct adapter *adapter = arg; |
1494 |
u32 reg_icr; |
1494 |
u32 reg_icr; |
1495 |
bool notlink = false; |
|
|
1496 |
|
1495 |
|
1497 |
++adapter->link_irq; |
1496 |
++adapter->link_irq; |
1498 |
MPASS(adapter->hw.back != NULL); |
1497 |
MPASS(adapter->hw.back != NULL); |
Lines 1503-1519
em_msix_link(void *arg)
Link Here
|
1503 |
|
1502 |
|
1504 |
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) |
1503 |
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) |
1505 |
em_handle_link(adapter->ctx); |
1504 |
em_handle_link(adapter->ctx); |
1506 |
else |
|
|
1507 |
notlink = true; |
1508 |
|
1505 |
|
1509 |
/* Re-arm for other/spurious interrupts */ |
1506 |
/* Re-arm unconditionally */ |
1510 |
if (notlink && adapter->hw.mac.type >= igb_mac_min) { |
1507 |
if (adapter->hw.mac.type >= igb_mac_min) { |
1511 |
E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC); |
1508 |
E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC); |
1512 |
E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask); |
1509 |
E1000_WRITE_REG(&adapter->hw, E1000_EIMS, adapter->link_mask); |
1513 |
} else if (adapter->hw.mac.type == e1000_82574) { |
1510 |
} else if (adapter->hw.mac.type == e1000_82574) { |
1514 |
if (notlink) |
1511 |
E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC | |
1515 |
E1000_WRITE_REG(&adapter->hw, E1000_IMS, E1000_IMS_LSC | |
1512 |
E1000_IMS_OTHER); |
1516 |
E1000_IMS_OTHER); |
|
|
1517 |
/* |
1513 |
/* |
1518 |
* Because we must read the ICR for this interrupt it may |
1514 |
* Because we must read the ICR for this interrupt it may |
1519 |
* clear other causes using autoclear, for this reason we |
1515 |
* clear other causes using autoclear, for this reason we |