Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/mv/mpic.c
Show First 20 Lines • Show All 142 Lines • ▼ Show 20 Lines | |||||
static int mv_mpic_attach(device_t); | static int mv_mpic_attach(device_t); | ||||
uint32_t mv_mpic_get_cause(void); | uint32_t mv_mpic_get_cause(void); | ||||
uint32_t mv_mpic_get_cause_err(void); | uint32_t mv_mpic_get_cause_err(void); | ||||
uint32_t mv_mpic_get_msi(void); | uint32_t mv_mpic_get_msi(void); | ||||
static void mpic_unmask_irq(uintptr_t nb); | static void mpic_unmask_irq(uintptr_t nb); | ||||
static void mpic_mask_irq(uintptr_t nb); | static void mpic_mask_irq(uintptr_t nb); | ||||
static void mpic_mask_irq_err(uintptr_t nb); | static void mpic_mask_irq_err(uintptr_t nb); | ||||
static void mpic_unmask_irq_err(uintptr_t nb); | static void mpic_unmask_irq_err(uintptr_t nb); | ||||
static boolean_t mpic_irq_is_percpu(uintptr_t); | |||||
#ifdef INTRNG | #ifdef INTRNG | ||||
static int mpic_intr(void *arg); | static int mpic_intr(void *arg); | ||||
#endif | #endif | ||||
andrew: `ARM_INTRNG` doesn't exist. | |||||
Done Inline ActionsSure, next patch is reverting this change (https://reviews.freebsd.org/D10717). I'll correct this in second version. mw_semihalf.com: Sure, next patch is reverting this change (https://reviews.freebsd.org/D10717). I'll correct… | |||||
static void mpic_unmask_msi(void); | static void mpic_unmask_msi(void); | ||||
#define MPIC_WRITE(softc, reg, val) \ | #define MPIC_WRITE(softc, reg, val) \ | ||||
bus_space_write_4((softc)->mpic_bst, (softc)->mpic_bsh, (reg), (val)) | bus_space_write_4((softc)->mpic_bst, (softc)->mpic_bsh, (reg), (val)) | ||||
#define MPIC_READ(softc, reg) \ | #define MPIC_READ(softc, reg) \ | ||||
bus_space_read_4((softc)->mpic_bst, (softc)->mpic_bsh, (reg)) | bus_space_read_4((softc)->mpic_bst, (softc)->mpic_bsh, (reg)) | ||||
#define MPIC_CPU_WRITE(softc, reg, val) \ | #define MPIC_CPU_WRITE(softc, reg, val) \ | ||||
▲ Show 20 Lines • Show All 307 Lines • ▼ Show 20 Lines | mpic_mask_irq_err(uintptr_t nb) | ||||
uint8_t bit_off; | uint8_t bit_off; | ||||
bit_off = nb - ERR_IRQ; | bit_off = nb - ERR_IRQ; | ||||
mask = MPIC_CPU_READ(mv_mpic_sc, MPIC_ERR_MASK); | mask = MPIC_CPU_READ(mv_mpic_sc, MPIC_ERR_MASK); | ||||
mask &= ~(1 << bit_off); | mask &= ~(1 << bit_off); | ||||
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ERR_MASK, mask); | MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ERR_MASK, mask); | ||||
} | } | ||||
static boolean_t | |||||
mpic_irq_is_percpu(uintptr_t nb) | |||||
{ | |||||
if (nb < MPIC_PPI) | |||||
return TRUE; | |||||
return FALSE; | |||||
} | |||||
static void | static void | ||||
mpic_unmask_irq(uintptr_t nb) | mpic_unmask_irq(uintptr_t nb) | ||||
{ | { | ||||
if (nb < ERR_IRQ) { | if (mpic_irq_is_percpu(nb)) | ||||
MPIC_WRITE(mv_mpic_sc, MPIC_ISE, nb); | |||||
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ICM, nb); | MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ICM, nb); | ||||
} else if (nb < MSI_IRQ) | else if (nb < ERR_IRQ) | ||||
MPIC_WRITE(mv_mpic_sc, MPIC_ISE, nb); | |||||
else if (nb < MSI_IRQ) | |||||
mpic_unmask_irq_err(nb); | mpic_unmask_irq_err(nb); | ||||
if (nb == 0) | if (nb == 0) | ||||
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_IN_DRBL_MASK, 0xffffffff); | MPIC_CPU_WRITE(mv_mpic_sc, MPIC_IN_DRBL_MASK, 0xffffffff); | ||||
} | } | ||||
static void | static void | ||||
mpic_mask_irq(uintptr_t nb) | mpic_mask_irq(uintptr_t nb) | ||||
{ | { | ||||
if (nb < ERR_IRQ) { | if (mpic_irq_is_percpu(nb)) | ||||
MPIC_WRITE(mv_mpic_sc, MPIC_ICE, nb); | |||||
MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ISM, nb); | MPIC_CPU_WRITE(mv_mpic_sc, MPIC_ISM, nb); | ||||
} else if (nb < MSI_IRQ) | else if (nb < ERR_IRQ) | ||||
MPIC_WRITE(mv_mpic_sc, MPIC_ICE, nb); | |||||
else if (nb < MSI_IRQ) | |||||
mpic_mask_irq_err(nb); | mpic_mask_irq_err(nb); | ||||
} | } | ||||
uint32_t | uint32_t | ||||
mv_mpic_get_cause(void) | mv_mpic_get_cause(void) | ||||
{ | { | ||||
return (MPIC_CPU_READ(mv_mpic_sc, MPIC_IIACK)); | return (MPIC_CPU_READ(mv_mpic_sc, MPIC_IIACK)); | ||||
▲ Show 20 Lines • Show All 114 Lines • Show Last 20 Lines |
ARM_INTRNG doesn't exist.