Commit c1d532d2 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

r8169: change interrupt mask type to u32

RTL8125 uses a 32 bit interrupt mask even though only bits in the
lower 16 bits are used. Change interrupt mask size to u32 to be
prepared and reintroduce helper rtl_get_events.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1a4f1a02
...@@ -645,7 +645,7 @@ struct rtl8169_private { ...@@ -645,7 +645,7 @@ struct rtl8169_private {
struct page *Rx_databuff[NUM_RX_DESC]; /* Rx data buffers */ struct page *Rx_databuff[NUM_RX_DESC]; /* Rx data buffers */
struct ring_info tx_skb[NUM_TX_DESC]; /* Tx data buffers */ struct ring_info tx_skb[NUM_TX_DESC]; /* Tx data buffers */
u16 cp_cmd; u16 cp_cmd;
u16 irq_mask; u32 irq_mask;
struct clk *clk; struct clk *clk;
struct { struct {
...@@ -1313,7 +1313,12 @@ static u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr) ...@@ -1313,7 +1313,12 @@ static u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr)
RTL_R32(tp, EFUSEAR) & EFUSEAR_DATA_MASK : ~0; RTL_R32(tp, EFUSEAR) & EFUSEAR_DATA_MASK : ~0;
} }
static void rtl_ack_events(struct rtl8169_private *tp, u16 bits) static u32 rtl_get_events(struct rtl8169_private *tp)
{
return RTL_R16(tp, IntrStatus);
}
static void rtl_ack_events(struct rtl8169_private *tp, u32 bits)
{ {
RTL_W16(tp, IntrStatus, bits); RTL_W16(tp, IntrStatus, bits);
} }
...@@ -1337,7 +1342,7 @@ static void rtl_irq_enable(struct rtl8169_private *tp) ...@@ -1337,7 +1342,7 @@ static void rtl_irq_enable(struct rtl8169_private *tp)
static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp) static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp)
{ {
rtl_irq_disable(tp); rtl_irq_disable(tp);
rtl_ack_events(tp, 0xffff); rtl_ack_events(tp, 0xffffffff);
/* PCI commit */ /* PCI commit */
RTL_R8(tp, ChipCmd); RTL_R8(tp, ChipCmd);
} }
...@@ -5854,9 +5859,10 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget ...@@ -5854,9 +5859,10 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance) static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
{ {
struct rtl8169_private *tp = dev_instance; struct rtl8169_private *tp = dev_instance;
u16 status = RTL_R16(tp, IntrStatus); u32 status = rtl_get_events(tp);
if (!tp->irq_enabled || status == 0xffff || !(status & tp->irq_mask)) if (!tp->irq_enabled || (status & 0xffff) == 0xffff ||
!(status & tp->irq_mask))
return IRQ_NONE; return IRQ_NONE;
if (unlikely(status & SYSErr)) { if (unlikely(status & SYSErr)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment