Revision cde844fa

b/hw/grlib_gptimer.c
68 68

  
69 69
struct GPTimerUnit {
70 70
    SysBusDevice  busdev;
71
    MemoryRegion iomem;
71 72

  
72 73
    uint32_t nr_timers;         /* Number of timers available */
73 74
    uint32_t freq_hz;           /* System frequency */
......
153 154
    }
154 155
}
155 156

  
156
static uint32_t grlib_gptimer_readl(void *opaque, target_phys_addr_t addr)
157
static uint64_t grlib_gptimer_read(void *opaque, target_phys_addr_t addr,
158
                                   unsigned size)
157 159
{
158 160
    GPTimerUnit        *unit  = opaque;
159 161
    target_phys_addr_t  timer_addr;
......
211 213
    return 0;
212 214
}
213 215

  
214
static void
215
grlib_gptimer_writel(void *opaque, target_phys_addr_t addr, uint32_t value)
216
static void grlib_gptimer_write(void *opaque, target_phys_addr_t addr,
217
                                uint64_t value, unsigned size)
216 218
{
217 219
    GPTimerUnit        *unit = opaque;
218 220
    target_phys_addr_t  timer_addr;
......
299 301
    trace_grlib_gptimer_writel(-1, addr, value);
300 302
}
301 303

  
302
static CPUReadMemoryFunc * const grlib_gptimer_read[] = {
303
    NULL, NULL, grlib_gptimer_readl,
304
};
305

  
306
static CPUWriteMemoryFunc * const grlib_gptimer_write[] = {
307
    NULL, NULL, grlib_gptimer_writel,
304
static const MemoryRegionOps grlib_gptimer_ops = {
305
    .read = grlib_gptimer_read,
306
    .write = grlib_gptimer_write,
307
    .endianness = DEVICE_NATIVE_ENDIAN,
308
    .valid = {
309
        .min_access_size = 4,
310
        .max_access_size = 4,
311
    },
308 312
};
309 313

  
310 314
static void grlib_gptimer_reset(DeviceState *d)
......
340 344
{
341 345
    GPTimerUnit  *unit = FROM_SYSBUS(typeof(*unit), dev);
342 346
    unsigned int  i;
343
    int           timer_regs;
344 347

  
345 348
    assert(unit->nr_timers > 0);
346 349
    assert(unit->nr_timers <= GPTIMER_MAX_TIMERS);
......
361 364
        ptimer_set_freq(timer->ptimer, unit->freq_hz);
362 365
    }
363 366

  
364
    timer_regs = cpu_register_io_memory(grlib_gptimer_read,
365
                                        grlib_gptimer_write,
366
                                        unit, DEVICE_NATIVE_ENDIAN);
367
    if (timer_regs < 0) {
368
        return -1;
369
    }
367
    memory_region_init_io(&unit->iomem, &grlib_gptimer_ops, unit, "gptimer",
368
                          UNIT_REG_SIZE + GPTIMER_REG_SIZE * unit->nr_timers);
370 369

  
371
    sysbus_init_mmio(dev, UNIT_REG_SIZE + GPTIMER_REG_SIZE * unit->nr_timers,
372
                     timer_regs);
370
    sysbus_init_mmio_region(dev, &unit->iomem);
373 371
    return 0;
374 372
}
375 373

  

Also available in: Unified diff