|
@@ -5384,6 +5384,19 @@ void igb_update_stats(struct igb_adapter *adapter,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void igb_tsync_interrupt(struct igb_adapter *adapter)
|
|
|
+{
|
|
|
+ struct e1000_hw *hw = &adapter->hw;
|
|
|
+ u32 tsicr = rd32(E1000_TSICR);
|
|
|
+
|
|
|
+ if (tsicr & E1000_TSICR_TXTS) {
|
|
|
+ /* acknowledge the interrupt */
|
|
|
+ wr32(E1000_TSICR, E1000_TSICR_TXTS);
|
|
|
+ /* retrieve hardware timestamp */
|
|
|
+ schedule_work(&adapter->ptp_tx_work);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static irqreturn_t igb_msix_other(int irq, void *data)
|
|
|
{
|
|
|
struct igb_adapter *adapter = data;
|
|
@@ -5415,16 +5428,8 @@ static irqreturn_t igb_msix_other(int irq, void *data)
|
|
|
mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
|
|
}
|
|
|
|
|
|
- if (icr & E1000_ICR_TS) {
|
|
|
- u32 tsicr = rd32(E1000_TSICR);
|
|
|
-
|
|
|
- if (tsicr & E1000_TSICR_TXTS) {
|
|
|
- /* acknowledge the interrupt */
|
|
|
- wr32(E1000_TSICR, E1000_TSICR_TXTS);
|
|
|
- /* retrieve hardware timestamp */
|
|
|
- schedule_work(&adapter->ptp_tx_work);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (icr & E1000_ICR_TS)
|
|
|
+ igb_tsync_interrupt(adapter);
|
|
|
|
|
|
wr32(E1000_EIMS, adapter->eims_other);
|
|
|
|
|
@@ -6203,16 +6208,8 @@ static irqreturn_t igb_intr_msi(int irq, void *data)
|
|
|
mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
|
|
}
|
|
|
|
|
|
- if (icr & E1000_ICR_TS) {
|
|
|
- u32 tsicr = rd32(E1000_TSICR);
|
|
|
-
|
|
|
- if (tsicr & E1000_TSICR_TXTS) {
|
|
|
- /* acknowledge the interrupt */
|
|
|
- wr32(E1000_TSICR, E1000_TSICR_TXTS);
|
|
|
- /* retrieve hardware timestamp */
|
|
|
- schedule_work(&adapter->ptp_tx_work);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (icr & E1000_ICR_TS)
|
|
|
+ igb_tsync_interrupt(adapter);
|
|
|
|
|
|
napi_schedule(&q_vector->napi);
|
|
|
|
|
@@ -6257,16 +6254,8 @@ static irqreturn_t igb_intr(int irq, void *data)
|
|
|
mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
|
|
}
|
|
|
|
|
|
- if (icr & E1000_ICR_TS) {
|
|
|
- u32 tsicr = rd32(E1000_TSICR);
|
|
|
-
|
|
|
- if (tsicr & E1000_TSICR_TXTS) {
|
|
|
- /* acknowledge the interrupt */
|
|
|
- wr32(E1000_TSICR, E1000_TSICR_TXTS);
|
|
|
- /* retrieve hardware timestamp */
|
|
|
- schedule_work(&adapter->ptp_tx_work);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (icr & E1000_ICR_TS)
|
|
|
+ igb_tsync_interrupt(adapter);
|
|
|
|
|
|
napi_schedule(&q_vector->napi);
|
|
|
|