On Fri, 4 Jun 2021 at 09:47, <c...@etri.re.kr> wrote: > The sysbus_mmio_map function checks if the given mmio range number (here 0) > is between 0 and num_mmios of the SyBusDevice. > > But when is the num_mmios value inside the struct SysBusDevice determined? I > couldn’t follow it up.
num_mmios starts at zero, and every time the device calls sysbus_init_mmio() it is incremented. The assertion in sysbus_mmio_map() is checking "did the caller ask for an MMIO region which the device didn't create?". > And SysBusDevice includes DeviceState, then does the > s = SYS_BUS_DEVICE(dev) statement allocates the > SysBusDevice on memory? No. This is a typechecked cast of a pointer. It's equivalent to "s = (SysBusDevice *)dev;" except that it will assert if "dev" is not actually a pointer to an instance of SysBusDevice. thanks -- PMM