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

Reply via email to