summaryrefslogtreecommitdiff
path: root/sys/dev/phy/rt8139.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/phy/rt8139.c')
-rw-r--r--sys/dev/phy/rt8139.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/sys/dev/phy/rt8139.c b/sys/dev/phy/rt8139.c
index ab8a6c0..bf71463 100644
--- a/sys/dev/phy/rt8139.c
+++ b/sys/dev/phy/rt8139.c
@@ -159,9 +159,8 @@ rt_poll(uint8_t reg, uint8_t size, uint32_t bits, bool pollset)
return val;
}
-#if defined(__x86_64__)
-__isr static void
-rt8139_pin_irq(void *sp)
+static int
+rt8139_intr(void *sp)
{
static uint32_t packet_ptr = 0;
uint16_t len;
@@ -174,7 +173,7 @@ rt8139_pin_irq(void *sp)
p += 2; /* Points to data now */
if (status & RT_TOK) {
- return;
+ return -EIO;
}
/* Update rxbuf offset in CAPR */
@@ -184,28 +183,22 @@ rt8139_pin_irq(void *sp)
}
rt_write(RT_RXBUFTAIL, 2, packet_ptr - 0x10);
rt_write(RT_INTRSTATUS, 2, RT_ACKW);
- lapic_eoi();
+ return 1; /* handled */
}
static int
rtl8139_irq_init(void)
{
- int vec;
+ struct intr_hand ih;
- vec = intr_alloc_vector("rt8139", IPL_BIO);
- if (vec < 0) {
- return vec;
+ ih.func = rt8139_intr;
+ ih.priority = IPL_BIO;
+ ih.irq = dev->irq_line;
+ if (intr_register("rt8139", &ih) == NULL) {
+ return -EIO;
}
-
- /* Map interrupt vector to IRQ */
- idt_set_desc(vec, IDT_INT_GATE, ISR(rt8139_pin_irq), 0);
- ioapic_set_vec(dev->irq_line, vec);
- ioapic_irq_unmask(dev->irq_line);
return 0;
}
-#else
-#define rtl8139_irq_init(...) -ENOTSUP
-#endif
static void
rt_init_pci(void)