diff -r ef86ff3c8514 linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability.c --- a/linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability.c Wed Apr 26 19:40:00 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability.c Thu May 4 10:54:49 2006 @@ -61,11 +61,15 @@ extern struct pciback_config_capability pciback_config_capability_vpd; extern struct pciback_config_capability pciback_config_capability_pm; +extern struct pciback_config_capability pciback_config_capability_msi; +extern struct pciback_config_capability pciback_config_capability_msx; int pciback_config_capability_init(void) { register_capability(&pciback_config_capability_vpd); register_capability(&pciback_config_capability_pm); + register_capability(&pciback_config_capability_msi); + register_capability(&pciback_config_capability_msix); return 0; } diff -r ef86ff3c8514 linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability_msi.c --- /dev/null Wed Apr 26 19:40:00 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability_msi.c Thu May 4 10:54:49 2006 @@ -0,0 +1,32 @@ +/* + * PCI Backend - Configuration space overlay for Message Signaled Interrupts + * + * Author: Ryan Wilson + */ + +#include +#include "conf_space.h" +#include "conf_space_capability.h" + +static struct config_field caplist_msi[] = { + /* we must protect against writes to the flags field which + * could enable MSI */ + { + .offset = PCI_MSI_FLAGS, + .size = 2, + .u.w.read = pciback_read_config_word, + }, + { + .size = 0, + }, +}; + +struct pciback_config_capability pciback_config_capability_msi = { + .capability = PCI_CAP_ID_MSI, + .fields = caplist_msi, +}; + +struct pciback_config_capability pciback_config_capability_msix = { + .capability = PCI_CAP_ID_MSIX, + .fields = caplist_msi, +};