From: Lei Xia Date: Mon, 16 Mar 2009 18:08:59 +0000 (-0500) Subject: Update Regitster device X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=643fbf6c339a64667edc263063de8f3345b82b3d Update Regitster device --- diff --git a/palacios/include/devices/pci.h b/palacios/include/devices/pci.h index 68ca19b..01ce86a 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); + void * priv_data; }; 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);