예제 #1
0
static void xlnx_zynqmp_ipi_init(Object *obj)
{
    XlnxZynqMPIPI *s = XLNX_ZYNQMP_IPI(obj);
    DeviceState *dev = DEVICE(obj);
    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
    RegisterInfoArray *reg_array;
    char *irq_name;
    int i;

    memory_region_init(&s->iomem, obj, TYPE_XLNX_ZYNQMP_IPI,
                       R_XLNX_ZYNQMP_IPI_MAX * 4);
    reg_array =
        register_init_block32(DEVICE(obj), xlnx_zynqmp_ipi_regs_info,
                              ARRAY_SIZE(xlnx_zynqmp_ipi_regs_info),
                              s->regs_info, s->regs,
                              &xlnx_zynqmp_ipi_ops,
                              XLNX_ZYNQMP_IPI_ERR_DEBUG,
                              R_XLNX_ZYNQMP_IPI_MAX * 4);
    memory_region_add_subregion(&s->iomem,
                                0x0,
                                &reg_array->mem);
    sysbus_init_mmio(sbd, &s->iomem);
    sysbus_init_irq(sbd, &s->irq);

    for (i = 0; i < NUM_IPIS; i++) {
        qdev_init_gpio_out_named(dev, &s->irq_trig_out[i],
                                 index_array_names[i], 1);

        irq_name = g_strdup_printf("OBS_%s", index_array_names[i]);
        qdev_init_gpio_out_named(dev, &s->irq_obs_out[i],
                                 irq_name, 1);
        g_free(irq_name);
    }
}
예제 #2
0
static void pmc_anlg_init(Object *obj)
{
    PmcAnalog *s = PMC_ANALOG(obj);
    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
    RegisterInfoArray *reg_array;

    memory_region_init(&s->iomem, obj, TYPE_PMC_ANALOG, PMC_ANLG_R_MAX * 4);
    reg_array =
        register_init_block32(DEVICE(obj), pmc_anlg_regs_info,
                              ARRAY_SIZE(pmc_anlg_regs_info),
                              s->regs_info, s->regs,
                              &pmc_anlg_ops,
                              PMC_ANALOG_ERR_DEBUG,
                              PMC_ANLG_R_MAX * 4);
    memory_region_add_subregion(&s->iomem,
                                0x0,
                                &reg_array->mem);
    sysbus_init_mmio(sbd, &s->iomem);
    sysbus_init_irq(sbd, &s->irq_pmc_anlg_imr);
}
예제 #3
0
static void xpio_dci_component_init(Object *obj)
{
    XPIO_DCI_COMPONENT *s = XILINX_XPIO_DCI_COMPONENT(obj);
    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
    RegisterInfoArray *reg_array;

    memory_region_init(&s->iomem, obj, TYPE_XILINX_XPIO_DCI_COMPONENT,
                       XPIO_DCI_COMPONENT_R_MAX * 4);
    reg_array =
        register_init_block32(DEVICE(obj), xpio_dci_component_regs_info,
                              ARRAY_SIZE(xpio_dci_component_regs_info),
                              s->regs_info, s->regs,
                              &xpio_dci_component_ops,
                              XILINX_XPIO_DCI_COMPONENT_ERR_DEBUG,
                              XPIO_DCI_COMPONENT_R_MAX * 4);
    memory_region_add_subregion(&s->iomem,
                                0x0,
                                &reg_array->mem);
    sysbus_init_mmio(sbd, &s->iomem);
}
예제 #4
0
static void pmc_tamper_init(Object *obj)
{
    PmcTamper *s = XILINX_PMC_TAMPER(obj);
    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
    RegisterInfoArray *reg_array;
    unsigned int i;

    for (i = 0; i < ARRAY_SIZE(s->iomem); i++) {
        memory_region_init(&s->iomem[i], obj, TYPE_XILINX_PMC_TAMPER, R_MAX * 4);
        reg_array =
            register_init_block32(DEVICE(obj), pmc_tamper_regs_info,
                                  ARRAY_SIZE(pmc_tamper_regs_info),
                                  s->regs_info, s->regs,
                                  &pmc_tamper_ops,
                                  XILINX_PMC_TAMPER_ERR_DEBUG,
                                  R_MAX * 4);
        memory_region_add_subregion(&s->iomem[i],
                                0x0,
                                &reg_array->mem);
       sysbus_init_mmio(sbd, &s->iomem[i]);
    }
}