X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fpci.c;h=91623848d90b4bb9d95f576fe93d8129e77ce3d5;hb=643fbf6c339a64667edc263063de8f3345b82b3d;hp=23be4f65c1838ffe67524f7c03e5c3dcd9dd33c2;hpb=0c921a37a41888301848b0dac847bb4e3e2f8a9b;p=palacios.git diff --git a/palacios/src/devices/pci.c b/palacios/src/devices/pci.c index 23be4f6..9162384 100644 --- a/palacios/src/devices/pci.c +++ b/palacios/src/devices/pci.c @@ -491,12 +491,15 @@ struct pci_device * v3_pci_register_device(struct vm_device * pci, uint_t bus_num, const char * name, int dev_num, + struct v3_pci_bar * bars, int (*config_update)(struct pci_device * pci_dev, uint_t reg_num, int length), + int (*cmd_update)(struct pci_dev *pci_dev, uchar_t io_enabled, uchar_t mem_enabled), void * private_data) { struct pci_internal * pci_state = (struct pci_internal *)pci->private_data; struct pci_bus * bus = &(pci_state->bus_list[bus_num]); struct pci_device * pci_dev = NULL; + int i; if (dev_num > MAX_BUS_DEVICES) { PrintError("Requested Invalid device number (%d)\n", dev_num); @@ -536,8 +539,21 @@ struct pci_device * v3_pci_register_device(struct vm_device * pci, pci_dev->priv_data = private_data; + + //copy bars + for (i = 0; i < 6; i ++){ + pci_dev->bar[i].updated = bars[i].updated; + pci_dev->bar[i].type = bars[i].type; + pci_dev->bar[i].num_resources = bars[i].num_resources; + pci_dev->bar[i].bar_update = bars[i].bar_update; + } + + pci_dev->cmd_update = cmd_update; + pci_dev->ext_rom_update = ext_rom_update; + // add the device add_device_to_bus(bus, pci_dev); + #ifdef DEBUG_PCI pci_dump_state(pci_state);