From: Lei Xia Date: Mon, 16 Mar 2009 18:10:35 +0000 (-0500) Subject: Merge branch 'devel' of /home/palacios/palacios into devel X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=95ca28a23f949b13c857ba0b061a2ca465683e8e;hp=f95fab77fae701c452fff93326d1cc2797d16b35;p=palacios.git Merge branch 'devel' of /home/palacios/palacios into devel Conflicts: palacios/src/devices/pci.c --- diff --git a/palacios/include/devices/pci.h b/palacios/include/devices/pci.h index 23f459c..090ac62 100644 --- a/palacios/include/devices/pci.h +++ b/palacios/include/devices/pci.h @@ -33,7 +33,7 @@ typedef enum {PCI_BAR_IO, PCI_BAR_MEM32, PCI_BAR_MEM64_LOW, PCI_BAR_MEM64_HIGH, PCI_BAR_NONE} pci_bar_type_t; -struct bar_reg { +struct v3_bar_reg { int updated; pci_bar_type_t type; int num_resources; @@ -52,7 +52,7 @@ struct pci_device { - struct bar_reg bar[6]; + struct v3_bar_reg bar[6]; uint_t bus_num; struct rb_node dev_tree_node; @@ -64,6 +64,9 @@ struct pci_device { 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); + int (*ext_rom_update)(struct pci_dev *pci_dev); + int ext_rom_update_flag; int bar_update_flag; diff --git a/palacios/src/devices/pci.c b/palacios/src/devices/pci.c index e86af94..42077e9 100644 --- a/palacios/src/devices/pci.c +++ b/palacios/src/devices/pci.c @@ -528,13 +528,16 @@ 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), int (*bar_update)(struct pci_device * pci_dev, uint_t bar), 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); @@ -576,8 +579,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);