} >> >> +static int pci_ecam_register_mmio_handler(struct domain *d, >> + struct pci_host_bridge *bridge, >> + const struct mmio_handler_ops >> *ops) >> +{ >> + struct pci_config_window *cfg = bridge->sysdata; >> + >> + register_mmio_handler(d, ops, cfg->phys_addr, cfg->size, NULL); >> + return 0; >> +} > Given that struct pci_config_window is generic (it is not specific to > one bridge), I wonder if we even need the .register_mmio_handler > callback here. > > In fact, pci_host_bridge->sysdata doesn't even need to be a void*, it > could be a struct pci_config_window*, right?
Rahul, this actually may change your series. Do you think we can do that? > > We could simply call: > > register_mmio_handler(d, ops, cfg->phys_addr, cfg->size, NULL); > > for each bridge directly from domain_vpci_init ? If Rahul changes the API then we can probably do that.