summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdt/dwpcie.c
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-07-14 15:42:19 +0000
committerpatrick <patrick@openbsd.org>2020-07-14 15:42:19 +0000
commitd67371fd44d448d849c184b07f62dff67f3a6d4e (patch)
tree3bf72cce552b5b1b5c3f5509a7adf7f03d3b2fc9 /sys/dev/fdt/dwpcie.c
parentExtend the interrupt API on arm64 and armv7 to be able to pass around (diff)
downloadwireguard-openbsd-d67371fd44d448d849c184b07f62dff67f3a6d4e.tar.xz
wireguard-openbsd-d67371fd44d448d849c184b07f62dff67f3a6d4e.zip
Implement pci_intr_establish_cpu() on arm64 and armv7. The function pointer
in the chipset tag for establishing interrupts now takes a struct cpu_info *. The normal pci_intr_establish() macro passes NULL as ci, which indicates that the primary CPU is to be used. The PCI controller drivers can then simply pass the ci on to our arm64/armv7 interrupt establish "framework". Prompted by dlg@ ok kettenis@
Diffstat (limited to 'sys/dev/fdt/dwpcie.c')
-rw-r--r--sys/dev/fdt/dwpcie.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/sys/dev/fdt/dwpcie.c b/sys/dev/fdt/dwpcie.c
index cb91df25940..8b416e188e2 100644
--- a/sys/dev/fdt/dwpcie.c
+++ b/sys/dev/fdt/dwpcie.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dwpcie.c,v 1.21 2020/05/23 22:16:39 patrick Exp $ */
+/* $OpenBSD: dwpcie.c,v 1.22 2020/07/14 15:42:19 patrick Exp $ */
/*
* Copyright (c) 2018 Mark Kettenis <kettenis@openbsd.org>
*
@@ -245,12 +245,9 @@ void dwpcie_conf_write(void *, pcitag_t, int, pcireg_t);
int dwpcie_intr_map(struct pci_attach_args *, pci_intr_handle_t *);
const char *dwpcie_intr_string(void *, pci_intr_handle_t);
void *dwpcie_intr_establish(void *, pci_intr_handle_t, int,
- int (*)(void *), void *, char *);
+ struct cpu_info *, int (*)(void *), void *, char *);
void dwpcie_intr_disestablish(void *, void *);
-void *dwpcie_armada8k_intr_establish(void *, pci_intr_handle_t, int,
- int (*)(void *), void *, char *);
-
int dwpcie_bs_iomap(bus_space_tag_t, bus_addr_t, bus_size_t, int,
bus_space_handle_t *);
int dwpcie_bs_memmap(bus_space_tag_t, bus_addr_t, bus_size_t, int,
@@ -1043,7 +1040,7 @@ dwpcie_intr_string(void *v, pci_intr_handle_t ih)
void *
dwpcie_intr_establish(void *v, pci_intr_handle_t ih, int level,
- int (*func)(void *), void *arg, char *name)
+ struct cpu_info *ci, int (*func)(void *), void *arg, char *name)
{
struct dwpcie_softc *sc = v;
void *cookie;
@@ -1055,8 +1052,8 @@ dwpcie_intr_establish(void *v, pci_intr_handle_t ih, int level,
/* Assume hardware passes Requester ID as sideband data. */
data = pci_requester_id(ih.ih_pc, ih.ih_tag);
- cookie = fdt_intr_establish_msi(sc->sc_node, &addr,
- &data, level, func, arg, (void *)name);
+ cookie = fdt_intr_establish_msi_cpu(sc->sc_node, &addr,
+ &data, level, ci, func, arg, (void *)name);
if (cookie == NULL)
return NULL;
@@ -1077,8 +1074,8 @@ dwpcie_intr_establish(void *v, pci_intr_handle_t ih, int level,
reg[1] = reg[2] = 0;
reg[3] = ih.ih_intrpin;
- cookie = fdt_intr_establish_imap(sc->sc_node, reg,
- sizeof(reg), level, func, arg, name);
+ cookie = fdt_intr_establish_imap_cpu(sc->sc_node, reg,
+ sizeof(reg), level, ci, func, arg, name);
}
return cookie;