diff options
author | Alex Williamson <alex.williamson@hp.com> | 2007-11-07 14:48:48 -0700 |
---|---|---|
committer | Alex Williamson <alex.williamson@hp.com> | 2007-11-07 14:48:48 -0700 |
commit | 1e349b81ce66eb09e206703ef9bc60d4a0e64749 (patch) | |
tree | 08043de57a49bb392ad0dfea2703089546594e6c /tools/ioemu | |
parent | d0a2f225e3296b21b963ffd835e81886c7e86184 (diff) | |
parent | 93aac4912838fdb448204651f4210c2dd9af8b1b (diff) | |
download | xen-1e349b81ce66eb09e206703ef9bc60d4a0e64749.tar.gz xen-1e349b81ce66eb09e206703ef9bc60d4a0e64749.tar.bz2 xen-1e349b81ce66eb09e206703ef9bc60d4a0e64749.zip |
merge with xen-unstable.hg (staging)
Diffstat (limited to 'tools/ioemu')
-rw-r--r-- | tools/ioemu/hw/pass-through.c | 15 | ||||
-rw-r--r-- | tools/ioemu/hw/pass-through.h | 2 | ||||
-rw-r--r-- | tools/ioemu/hw/xen_machine_fv.c | 45 |
3 files changed, 28 insertions, 34 deletions
diff --git a/tools/ioemu/hw/pass-through.c b/tools/ioemu/hw/pass-through.c index 7dd9588ba0..07a308e2cc 100644 --- a/tools/ioemu/hw/pass-through.c +++ b/tools/ioemu/hw/pass-through.c @@ -20,8 +20,8 @@ * Guy Zana <guy@neocleus.com> * * This file implements direct PCI assignment to a HVM guest - * */ + #include "vl.h" #include "pass-through.h" #include "pci/header.h" @@ -127,9 +127,10 @@ void pt_iomem_map(PCIDevice *d, int i, uint32_t e_phys, uint32_t e_size, if ( !first_map ) { /* Remove old mapping */ - ret = xc_domain_memory_mapping(xc_handle, domid, old_ebase >> 12, - assigned_device->bases[i].access.maddr >> 12, - (e_size+0xFFF) >> 12, + ret = xc_domain_memory_mapping(xc_handle, domid, + old_ebase >> XC_PAGE_SHIFT, + assigned_device->bases[i].access.maddr >> XC_PAGE_SHIFT, + (e_size+XC_PAGE_MASK) >> XC_PAGE_SHIFT, DPCI_REMOVE_MAPPING); if ( ret != 0 ) { @@ -140,9 +141,9 @@ void pt_iomem_map(PCIDevice *d, int i, uint32_t e_phys, uint32_t e_size, /* Create new mapping */ ret = xc_domain_memory_mapping(xc_handle, domid, - assigned_device->bases[i].e_physbase >> 12, - assigned_device->bases[i].access.maddr >> 12, - (e_size+0xFFF) >> 12, + assigned_device->bases[i].e_physbase >> XC_PAGE_SHIFT, + assigned_device->bases[i].access.maddr >> XC_PAGE_SHIFT, + (e_size+XC_PAGE_MASK) >> XC_PAGE_SHIFT, DPCI_ADD_MAPPING); if ( ret != 0 ) PT_LOG("Error: create new mapping failed!\n"); diff --git a/tools/ioemu/hw/pass-through.h b/tools/ioemu/hw/pass-through.h index 42f7b52d74..b05527330a 100644 --- a/tools/ioemu/hw/pass-through.h +++ b/tools/ioemu/hw/pass-through.h @@ -40,7 +40,7 @@ /* Misc PCI constants that should be moved to a separate library :) */ #define PCI_CONFIG_SIZE (256) #define PCI_EXP_DEVCAP_FLR (1 << 28) -#define PCI_EXP_DEVCTL_FLR (0x1b) +#define PCI_EXP_DEVCTL_FLR (1 << 15) #define PCI_BAR_ENTRIES (6) struct pt_region { diff --git a/tools/ioemu/hw/xen_machine_fv.c b/tools/ioemu/hw/xen_machine_fv.c index 79b53acacc..3a68b11e4f 100644 --- a/tools/ioemu/hw/xen_machine_fv.c +++ b/tools/ioemu/hw/xen_machine_fv.c @@ -27,13 +27,6 @@ #include <xen/hvm/params.h> #include <sys/mman.h> -#ifndef PAGE_SIZE -#define PAGE_SIZE XC_PAGE_SIZE -#endif -#ifndef PAGE_SHIFT -#define PAGE_SHIFT XC_PAGE_SHIFT -#endif - #if defined(MAPCACHE) #if defined(__i386__) @@ -57,7 +50,7 @@ struct map_cache { unsigned long paddr_index; uint8_t *vaddr_base; - DECLARE_BITMAP(valid_mapping, MCACHE_BUCKET_SIZE>>PAGE_SHIFT); + DECLARE_BITMAP(valid_mapping, MCACHE_BUCKET_SIZE>>XC_PAGE_SHIFT); }; static struct map_cache *mapcache_entry; @@ -71,9 +64,9 @@ static int qemu_map_cache_init(void) { unsigned long size; - nr_buckets = (((MAX_MCACHE_SIZE >> PAGE_SHIFT) + - (1UL << (MCACHE_BUCKET_SHIFT - PAGE_SHIFT)) - 1) >> - (MCACHE_BUCKET_SHIFT - PAGE_SHIFT)); + nr_buckets = (((MAX_MCACHE_SIZE >> XC_PAGE_SHIFT) + + (1UL << (MCACHE_BUCKET_SHIFT - XC_PAGE_SHIFT)) - 1) >> + (MCACHE_BUCKET_SHIFT - XC_PAGE_SHIFT)); /* * Use mmap() directly: lets us allocate a big hash table with no up-front @@ -81,7 +74,7 @@ static int qemu_map_cache_init(void) * that we actually use. All others will contain all zeroes. */ size = nr_buckets * sizeof(struct map_cache); - size = (size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); + size = (size + XC_PAGE_SIZE - 1) & ~(XC_PAGE_SIZE - 1); fprintf(logfile, "qemu_map_cache_init nr_buckets = %lx size %lu\n", nr_buckets, size); mapcache_entry = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); @@ -97,7 +90,7 @@ static void qemu_remap_bucket(struct map_cache *entry, unsigned long address_index) { uint8_t *vaddr_base; - unsigned long pfns[MCACHE_BUCKET_SIZE >> PAGE_SHIFT]; + unsigned long pfns[MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT]; unsigned int i, j; if (entry->vaddr_base != NULL) { @@ -108,11 +101,11 @@ static void qemu_remap_bucket(struct map_cache *entry, } } - for (i = 0; i < MCACHE_BUCKET_SIZE >> PAGE_SHIFT; i++) - pfns[i] = (address_index << (MCACHE_BUCKET_SHIFT-PAGE_SHIFT)) + i; + for (i = 0; i < MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT; i++) + pfns[i] = (address_index << (MCACHE_BUCKET_SHIFT-XC_PAGE_SHIFT)) + i; vaddr_base = xc_map_foreign_batch(xc_handle, domid, PROT_READ|PROT_WRITE, - pfns, MCACHE_BUCKET_SIZE >> PAGE_SHIFT); + pfns, MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT); if (vaddr_base == NULL) { fprintf(logfile, "xc_map_foreign_batch error %d\n", errno); exit(-1); @@ -121,10 +114,10 @@ static void qemu_remap_bucket(struct map_cache *entry, entry->vaddr_base = vaddr_base; entry->paddr_index = address_index; - for (i = 0; i < MCACHE_BUCKET_SIZE >> PAGE_SHIFT; i += BITS_PER_LONG) { + for (i = 0; i < MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT; i += BITS_PER_LONG) { unsigned long word = 0; - j = ((i + BITS_PER_LONG) > (MCACHE_BUCKET_SIZE >> PAGE_SHIFT)) ? - (MCACHE_BUCKET_SIZE >> PAGE_SHIFT) % BITS_PER_LONG : BITS_PER_LONG; + j = ((i + BITS_PER_LONG) > (MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT)) ? + (MCACHE_BUCKET_SIZE >> XC_PAGE_SHIFT) % BITS_PER_LONG : BITS_PER_LONG; while (j > 0) word = (word << 1) | (((pfns[i + --j] >> 28) & 0xf) != 0xf); entry->valid_mapping[i / BITS_PER_LONG] = word; @@ -143,10 +136,10 @@ uint8_t *qemu_map_cache(target_phys_addr_t phys_addr) entry = &mapcache_entry[address_index % nr_buckets]; if (entry->vaddr_base == NULL || entry->paddr_index != address_index || - !test_bit(address_offset>>PAGE_SHIFT, entry->valid_mapping)) + !test_bit(address_offset>>XC_PAGE_SHIFT, entry->valid_mapping)) qemu_remap_bucket(entry, address_index); - if (!test_bit(address_offset>>PAGE_SHIFT, entry->valid_mapping)) + if (!test_bit(address_offset>>XC_PAGE_SHIFT, entry->valid_mapping)) return NULL; last_address_index = address_index; @@ -213,7 +206,7 @@ static void xen_init_fv(uint64_t ram_size, int vga_ram_size, char *boot_device, xc_get_hvm_param(xc_handle, domid, HVM_PARAM_IOREQ_PFN, &ioreq_pfn); fprintf(logfile, "shared page at pfn %lx\n", ioreq_pfn); - shared_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + shared_page = xc_map_foreign_range(xc_handle, domid, XC_PAGE_SIZE, PROT_READ|PROT_WRITE, ioreq_pfn); if (shared_page == NULL) { fprintf(logfile, "map shared IO page returned error %d\n", errno); @@ -222,7 +215,7 @@ static void xen_init_fv(uint64_t ram_size, int vga_ram_size, char *boot_device, xc_get_hvm_param(xc_handle, domid, HVM_PARAM_BUFIOREQ_PFN, &ioreq_pfn); fprintf(logfile, "buffered io page at pfn %lx\n", ioreq_pfn); - buffered_io_page = xc_map_foreign_range(xc_handle, domid, PAGE_SIZE, + buffered_io_page = xc_map_foreign_range(xc_handle, domid, XC_PAGE_SIZE, PROT_READ|PROT_WRITE, ioreq_pfn); if (buffered_io_page == NULL) { fprintf(logfile, "map buffered IO page returned error %d\n", errno); @@ -272,9 +265,9 @@ static void xen_init_fv(uint64_t ram_size, int vga_ram_size, char *boot_device, /* VTI will not use memory between 3G~4G, so we just pass a legal pfn to make QEMU map continuous virtual memory space */ if (ram_size > MMIO_START) { - for (i = 0 ; i < (MEM_G >> PAGE_SHIFT); i++) - page_array[(MMIO_START >> PAGE_SHIFT) + i] = - (STORE_PAGE_START >> PAGE_SHIFT); + for (i = 0 ; i < (MEM_G >> XC_PAGE_SHIFT); i++) + page_array[(MMIO_START >> XC_PAGE_SHIFT) + i] = + (STORE_XC_PAGE_START >> XC_PAGE_SHIFT); } phys_ram_base = xc_map_foreign_batch(xc_handle, domid, |