Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/ti/ti_pruss.c
Show All 12 Lines | |||||
if (!poid) | if (!poid) | ||||
return (EINVAL); | return (EINVAL); | ||||
sc->sc_glob_irqen = false; | sc->sc_glob_irqen = false; | ||||
struct sysctl_oid *irq_root = SYSCTL_ADD_NODE(clist, SYSCTL_CHILDREN(poid), | struct sysctl_oid *irq_root = SYSCTL_ADD_NODE(clist, SYSCTL_CHILDREN(poid), | ||||
OID_AUTO, "irq", CTLFLAG_RD, 0, | OID_AUTO, "irq", CTLFLAG_RD, 0, | ||||
"PRUSS Host Interrupts"); | "PRUSS Host Interrupts"); | ||||
SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(poid), OID_AUTO, | SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(poid), OID_AUTO, | ||||
"global_interrupt_enable", CTLFLAG_RW | CTLTYPE_U8, | "global_interrupt_enable", | ||||
CTLFLAG_RW | CTLTYPE_U8 | CTLFLAG_NEEDGIANT, | |||||
sc, 0, ti_pruss_global_interrupt_enable, | sc, 0, ti_pruss_global_interrupt_enable, | ||||
"CU", "Global interrupt enable"); | "CU", "Global interrupt enable"); | ||||
sc->sc_bt = rman_get_bustag(sc->sc_mem_res); | sc->sc_bt = rman_get_bustag(sc->sc_mem_res); | ||||
sc->sc_bh = rman_get_bushandle(sc->sc_mem_res); | sc->sc_bh = rman_get_bushandle(sc->sc_mem_res); | ||||
if (bus_alloc_resources(dev, ti_pruss_irq_spec, sc->sc_irq_res) != 0) { | if (bus_alloc_resources(dev, ti_pruss_irq_spec, sc->sc_irq_res) != 0) { | ||||
device_printf(dev, "could not allocate interrupt resource\n"); | device_printf(dev, "could not allocate interrupt resource\n"); | ||||
ti_pruss_detach(dev); | ti_pruss_detach(dev); | ||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
ti_pruss_interrupts_clear(sc); | ti_pruss_interrupts_clear(sc); | ||||
for (i = 0; i < TI_PRUSS_IRQS; i++) { | for (i = 0; i < TI_PRUSS_IRQS; i++) { | ||||
char name[8]; | char name[8]; | ||||
snprintf(name, sizeof(name), "%d", i); | snprintf(name, sizeof(name), "%d", i); | ||||
struct sysctl_oid *irq_nodes = SYSCTL_ADD_NODE(clist, SYSCTL_CHILDREN(irq_root), | struct sysctl_oid *irq_nodes = SYSCTL_ADD_NODE(clist, SYSCTL_CHILDREN(irq_root), | ||||
OID_AUTO, name, CTLFLAG_RD, 0, | OID_AUTO, name, CTLFLAG_RD, 0, | ||||
"PRUSS Interrupts"); | "PRUSS Interrupts"); | ||||
SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | ||||
"channel", CTLFLAG_RW | CTLTYPE_STRING, sc, i, ti_pruss_channel_map, | "channel", | ||||
CTLFLAG_RW | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, | |||||
sc, i, ti_pruss_channel_map, | |||||
"A", "Channel attached to this irq"); | "A", "Channel attached to this irq"); | ||||
SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | ||||
"event", CTLFLAG_RW | CTLTYPE_STRING, sc, i, ti_pruss_event_map, | "event", CTLFLAG_RW | CTLTYPE_STRING | CTLFLAG_NEEDGIANT, | ||||
sc, i, ti_pruss_event_map, | |||||
"A", "Event attached to this irq"); | "A", "Event attached to this irq"); | ||||
SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | SYSCTL_ADD_PROC(clist, SYSCTL_CHILDREN(irq_nodes), OID_AUTO, | ||||
"enable", CTLFLAG_RW | CTLTYPE_U8, sc, i, ti_pruss_interrupt_enable, | "enable", CTLFLAG_RW | CTLTYPE_U8 | CTLFLAG_NEEDGIANT, | ||||
sc, i, ti_pruss_interrupt_enable, | |||||
"CU", "Enable/Disable interrupt"); | "CU", "Enable/Disable interrupt"); | ||||
sc->sc_irq_devs[i].event = -1; | sc->sc_irq_devs[i].event = -1; | ||||
sc->sc_irq_devs[i].channel = -1; | sc->sc_irq_devs[i].channel = -1; | ||||
sc->sc_irq_devs[i].tstamps.ctl.idx = 0; | sc->sc_irq_devs[i].tstamps.ctl.idx = 0; | ||||
if (i < TI_PRUSS_HOST_IRQS) { | if (i < TI_PRUSS_HOST_IRQS) { | ||||
ti_pruss_irq_args[i].irq = i; | ti_pruss_irq_args[i].irq = i; | ||||
Show All 12 Lines |