git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Unifying External Interrupt System (#51)
[lunaix-os.git]
/
lunaix-os
/
hal
/
char
/
uart
/
16x50_pci.c
diff --git
a/lunaix-os/hal/char/uart/16x50_pci.c
b/lunaix-os/hal/char/uart/16x50_pci.c
index 20beda12244206a04454e5e132c5b9cd18483d26..bba016fd09959ec5994d183a1651b05838245569 100644
(file)
--- a/
lunaix-os/hal/char/uart/16x50_pci.c
+++ b/
lunaix-os/hal/char/uart/16x50_pci.c
@@
-1,5
+1,4
@@
#include <lunaix/device.h>
#include <lunaix/device.h>
-#include <asm-generic/isrm.h>
#include <lunaix/syslog.h>
#include <lunaix/mm/mmio.h>
#include <lunaix/syslog.h>
#include <lunaix/mm/mmio.h>
@@
-15,23
+14,14
@@
static DEFINE_LLIST(pci_ports);
static void
static void
-uart_msi_irq_handler(const struct hart_state* hstate)
+uart_msi_irq_handler(
irq_t irq,
const struct hart_state* hstate)
{
{
- int vector;
struct uart16550* uart;
struct uart16550* uart;
- vector = hart_vector_stamp(hstate);
- uart = (struct uart16550*)isrm_get_payload(hstate);
+ uart = irq_payload(irq, struct uart16550);
assert(uart);
assert(uart);
- uart_handle_irq(vector, uart);
-}
-
-static void
-uart_intx_irq_handler(const struct hart_state* hstate)
-{
- int vector = hart_vector_stamp(hstate);
- uart_handle_irq_overlap(vector, &pci_ports);
+ uart_handle_irq(irq, uart);
}
static bool
}
static bool
@@
-56,7
+46,7
@@
pci16x50_pci_create(struct device_def* def, morph_t* obj)
struct pci_probe* probe;
struct uart16550* uart;
struct serial_dev* sdev;
struct pci_probe* probe;
struct uart16550* uart;
struct serial_dev* sdev;
-
msi_vector_t msiv
;
+
irq_t irq
;
probe = changeling_reveal(obj, pci_probe_morpher);
probe = changeling_reveal(obj, pci_probe_morpher);
@@
-102,16
+92,16
@@
pci16x50_pci_create(struct device_def* def, morph_t* obj)
sdev = uart_create_serial(uart, &def->class, &pci_ports, "PCI");
sdev = uart_create_serial(uart, &def->class, &pci_ports, "PCI");
- msiv = pci_msi_setup_simple(probe, uart_msi_irq_handler);
- isrm_set_payload(msi_vect(msiv), __ptr(uart));
+ irq = pci_declare_msi_irq(uart_msi_irq_handler, probe);
+ irq_set_payload(irq, uart);
+ pci_assign_msi(probe, irq, NULL);
- INFO("base: 0x%x (%s),
irq=%d (%s)
",
+ INFO("base: 0x%x (%s),
%s
",
bar->start,
pci_bar_mmio_space(bar) ? "mmio" : "pmio",
bar->start,
pci_bar_mmio_space(bar) ? "mmio" : "pmio",
- msi_vect(msiv),
pci_capability_msi(probe) ? "msi" : "intx, re-routed");
pci_capability_msi(probe) ? "msi" : "intx, re-routed");
- uart->i
v = msi_vect(msiv)
;
+ uart->i
rq = irq
;
pci_bind_instance(probe, sdev->dev);
}
pci_bind_instance(probe, sdev->dev);
}