Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9085cdfa authored by Francois Romieu's avatar Francois Romieu
Browse files

r8169: irq mask helpers.



Signed-off-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
Cc: Hayes Wang <hayeswang@realtek.com>
parent 3e990ff5
Loading
Loading
Loading
Loading
+30 −7
Original line number Diff line number Diff line
@@ -1184,6 +1184,29 @@ static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
	return value;
}

static u16 rtl_get_events(struct rtl8169_private *tp)
{
	void __iomem *ioaddr = tp->mmio_addr;

	return RTL_R16(IntrStatus);
}

static void rtl_ack_events(struct rtl8169_private *tp, u16 bits)
{
	void __iomem *ioaddr = tp->mmio_addr;

	RTL_W16(IntrStatus, bits);
	mmiowb();
}

static void rtl_irq_disable(struct rtl8169_private *tp)
{
	void __iomem *ioaddr = tp->mmio_addr;

	RTL_W16(IntrMask, 0);
	mmiowb();
}

static void rtl_irq_enable(struct rtl8169_private *tp, u16 bits)
{
	void __iomem *ioaddr = tp->mmio_addr;
@@ -1195,8 +1218,8 @@ static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp)
{
	void __iomem *ioaddr = tp->mmio_addr;

	RTL_W16(IntrMask, 0x0000);
	RTL_W16(IntrStatus, tp->intr_event);
	rtl_irq_disable(tp);
	rtl_ack_events(tp, tp->intr_event);
	RTL_R8(ChipCmd);
}

@@ -4057,11 +4080,11 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

	rtl_init_rxcfg(tp);

	RTL_W16(IntrMask, 0x0000);
	rtl_irq_disable(tp);

	rtl_hw_reset(tp);

	RTL_W16(IntrStatus, 0xffff);
	rtl_ack_events(tp, 0xffff);

	pci_set_master(pdev);

@@ -5775,12 +5798,12 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
	struct rtl8169_private *tp = netdev_priv(dev);
	void __iomem *ioaddr = tp->mmio_addr;
	int handled = 0;
	int status;
	u16 status;

	/* loop handling interrupts until we have no new ones or
	 * we hit a invalid/hotplug case.
	 */
	status = RTL_R16(IntrStatus);
	status = rtl_get_events(tp);
	while (status && status != 0xffff) {
		status &= tp->intr_event;
		if (!status)
@@ -5839,7 +5862,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
		 */
		RTL_W16(IntrStatus,
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
		status = RTL_R16(IntrStatus);
		status = rtl_get_events(tp);
	}
done:
	return IRQ_RETVAL(handled);