X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fdevices%2Fpci.h;h=68ca19be9092d628f1cdfaab2bfb13bb47191849;hb=0c921a37a41888301848b0dac847bb4e3e2f8a9b;hp=42bdabb03c2c04e0c26f5f197599bb7faa25d25a;hpb=245f2cf869618c082cf5141786c8a9d6d82a63be;p=palacios.git diff --git a/palacios/include/devices/pci.h b/palacios/include/devices/pci.h index 42bdabb..68ca19b 100644 --- a/palacios/include/devices/pci.h +++ b/palacios/include/devices/pci.h @@ -22,6 +22,8 @@ #ifndef __DEVICES_PCI_H__ #define __DEVICES_PCI_H__ +#ifdef __V3VEE__ + #include #include #include @@ -29,23 +31,29 @@ #include -#define V3_PCI_BAR_MEM 0x00 -#define V3_PCI_BAR_IO 0x01 -#define V3_PCI_BAR_MEM_PREFETCH 0x08 +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 { + int updated; + pci_bar_type_t type; + int num_resources; + int (*bar_update)(struct pci_device * pci_dev, uint_t bar); +}; struct pci_device { union { + uint8_t config_space[256]; + struct { struct pci_config_header config_header; uint8_t config_data[192]; } __attribute__((packed)); - - uint8_t config_space[256]; } __attribute__((packed)); + struct bar_reg bar[6]; + uint_t bus_num; struct rb_node dev_tree_node; @@ -56,6 +64,7 @@ struct pci_device { int (*config_update)(struct pci_device * pci_dev, uint_t reg_num, int length); + void * priv_data; }; @@ -69,8 +78,11 @@ v3_pci_register_device(struct vm_device * pci, const char * name, int dev_num, int (*config_update)(struct pci_device * pci_dev, uint_t reg_num, int length), + int (*bar_update)(struct pci_device * pci_dev, uint_t bar), void * private_data); #endif +#endif +