It retains IA64-specific bits in code imported from elsewhere (e.g. ACPI, EFI) as well as in the public headers. It also doesn't touch the tools, mini-os, and unmodified_drivers sub-trees. --- a/MAINTAINERS +++ b/MAINTAINERS @@ -138,14 +138,6 @@ M: Tim Deegan S: Supported F: tools/debugger/kdd/ -IA64 ARCHITECTURE -M: KUWAMURA Shin'ya -S: Supported -L: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx -F: xen/arch/ia64/* -F: xen/include/asm-ia64/* -F: tools/libxc/ia64/* - INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) M: Joseph Cihula M: Gang Wei --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -58,7 +58,6 @@ subdir-$(CONFIG_COMPAT) += compat subdir-$(x86_32) += hvm subdir-$(x86_64) += hvm -subdir-$(ia64) += hvm subdir-y += libelf subdir-$(HAS_DEVICE_TREE) += libfdt --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1514,9 +1514,7 @@ gnttab_transfer( goto copyback; } -#ifndef __ia64__ /* IA64 implicitly replaces the old page in steal_page(). */ guest_physmap_remove_page(d, gop.mfn, mfn, 0); -#endif flush_tlb_mask(d->domain_dirty_cpumask); /* Find the target domain. */ --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -721,11 +721,7 @@ static void crash_save_vmcoreinfo(void) VMCOREINFO_STRUCT_SIZE(domain); VMCOREINFO_OFFSET(page_info, count_info); -#ifdef __ia64__ - VMCOREINFO_OFFSET_SUB(page_info, u.inuse, _domain); -#else VMCOREINFO_OFFSET_SUB(page_info, v.inuse, _domain); -#endif VMCOREINFO_OFFSET(domain, domain_id); VMCOREINFO_OFFSET(domain, next_in_list); --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -23,9 +23,7 @@ #include #include #include -#ifndef __ia64__ #include -#endif #include #include #include --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1141,7 +1141,7 @@ void __init scrub_heap_pages(void) * XEN-HEAP SUB-ALLOCATOR */ -#if !defined(__x86_64__) && !defined(__ia64__) +#if !defined(__x86_64__) void init_xenheap_pages(paddr_t ps, paddr_t pe) { --- a/xen/common/tmem_xen.c +++ b/xen/common/tmem_xen.c @@ -88,7 +88,7 @@ void tmh_copy_page(char *to, char*from) #endif } -#if defined(__ia64__) || defined (CONFIG_ARM) +#if defined(CONFIG_ARM) static inline void *cli_get_page(tmem_cli_mfn_t cmfn, unsigned long *pcli_mfn, pfp_t **pcli_pfp, bool_t cli_write) { --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -442,16 +442,6 @@ int set_px_pminfo(uint32_t acpi_id, stru goto out; } -#ifdef CONFIG_IA64 - /* for IA64, currently it only supports FFH */ - if (dom0_px_info->control_register.space_id != - ACPI_ADR_SPACE_FIXED_HARDWARE) - { - ret = -EINVAL; - goto out; - } -#endif - memcpy ((void *)&pxpt->control_register, (void *)&dom0_px_info->control_register, sizeof(struct xen_pct_register)); @@ -493,7 +483,6 @@ int set_px_pminfo(uint32_t acpi_id, stru { #ifdef CONFIG_X86 /* for X86, check domain coordination */ - /* for IA64, _PSD is optional for current IA64 cpufreq algorithm */ if (dom0_px_info->shared_type != CPUFREQ_SHARED_TYPE_ALL && dom0_px_info->shared_type != CPUFREQ_SHARED_TYPE_ANY && dom0_px_info->shared_type != CPUFREQ_SHARED_TYPE_HW) --- a/xen/drivers/passthrough/Makefile +++ b/xen/drivers/passthrough/Makefile @@ -1,5 +1,4 @@ subdir-$(x86) += vtd -subdir-$(ia64) += vtd subdir-$(x86) += amd subdir-$(x86_64) += x86 --- a/xen/drivers/passthrough/io.c +++ b/xen/drivers/passthrough/io.c @@ -419,7 +419,6 @@ int hvm_do_IRQ_dpci(struct domain *d, st return 1; } -#ifdef SUPPORT_MSI_REMAPPING /* called with d->event_lock held */ static void __msi_pirq_eoi(struct hvm_pirq_dpci *pirq_dpci) { @@ -479,7 +478,6 @@ static int hvm_pci_msi_assert(struct dom ? send_guest_pirq(d, pirq) : vmsi_deliver_pirq(d, pirq_dpci)); } -#endif static int _hvm_dirq_assist(struct domain *d, struct hvm_pirq_dpci *pirq_dpci, void *arg) @@ -489,13 +487,12 @@ static int _hvm_dirq_assist(struct domai if ( test_and_clear_bool(pirq_dpci->masked) ) { -#ifdef SUPPORT_MSI_REMAPPING if ( pirq_dpci->flags & HVM_IRQ_DPCI_GUEST_MSI ) { hvm_pci_msi_assert(d, pirq_dpci); return 0; } -#endif + list_for_each_entry ( digl, &pirq_dpci->digl_list, list ) { struct pirq *info = dpci_pirq(pirq_dpci); @@ -508,13 +505,11 @@ static int _hvm_dirq_assist(struct domai hvm_pci_intx_assert(d, device, intx); pirq_dpci->pending++; -#ifdef SUPPORT_MSI_REMAPPING if ( pirq_dpci->flags & HVM_IRQ_DPCI_TRANSLATE ) { /* for translated MSI to INTx interrupt, eoi as early as possible */ __msi_pirq_eoi(pirq_dpci); } -#endif } /* --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -593,17 +593,6 @@ int iommu_do_domctl( bus = (domctl->u.assign_device.machine_sbdf >> 8) & 0xff; devfn = domctl->u.assign_device.machine_sbdf & 0xff; -#ifdef __ia64__ /* XXX Is this really needed? */ - if ( device_assigned(seg, bus, devfn) ) - { - printk(XENLOG_G_ERR "XEN_DOMCTL_assign_device: " - "%04x:%02x:%02x.%u already assigned, or non-existent\n", - seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); - ret = -EINVAL; - goto assign_device_out; - } -#endif - ret = assign_device(d, seg, bus, devfn); if ( ret ) printk(XENLOG_G_ERR "XEN_DOMCTL_assign_device: " @@ -632,14 +621,6 @@ int iommu_do_domctl( bus = (domctl->u.assign_device.machine_sbdf >> 8) & 0xff; devfn = domctl->u.assign_device.machine_sbdf & 0xff; -#ifdef __ia64__ /* XXX Is this really needed? */ - if ( !device_assigned(seg, bus, devfn) ) - { - ret = -EINVAL; - goto deassign_device_out; - } -#endif - spin_lock(&pcidevs_lock); ret = deassign_device(d, seg, bus, devfn); spin_unlock(&pcidevs_lock); --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -696,7 +696,6 @@ void __init setup_dom0_pci_devices( spin_unlock(&pcidevs_lock); } -#ifdef SUPPORT_MSI_REMAPPING static int _dump_pci_devices(struct pci_seg *pseg, void *arg) { struct pci_dev *pdev; @@ -738,8 +737,6 @@ static int __init setup_dump_pcidevs(voi return 0; } __initcall(setup_dump_pcidevs); -#endif - /* * Local variables: --- a/xen/drivers/passthrough/vtd/Makefile +++ b/xen/drivers/passthrough/vtd/Makefile @@ -1,5 +1,4 @@ subdir-$(x86) += x86 -subdir-$(ia64) += ia64 obj-y += iommu.o obj-y += dmar.o --- a/xen/drivers/passthrough/vtd/intremap.c +++ b/xen/drivers/passthrough/vtd/intremap.c @@ -31,26 +31,7 @@ #include "vtd.h" #include "extern.h" -#ifdef __ia64__ -#define nr_ioapics iosapic_get_nr_iosapics() -#define nr_ioapic_entries(i) iosapic_get_nr_pins(i) -#define __io_apic_read(apic, reg) \ - (*IO_APIC_BASE(apic) = reg, *(IO_APIC_BASE(apic)+4)) -#define __io_apic_write(apic, reg, val) \ - (*IO_APIC_BASE(apic) = reg, *(IO_APIC_BASE(apic)+4) = (val)) -#define __ioapic_read_entry(apic, pin, raw) ({ \ - struct IO_xAPIC_route_entry _e_; \ - ASSERT(raw); \ - ((u32 *)&_e_)[0] = __io_apic_read(apic, 0x10 + 2 * (pin)); \ - ((u32 *)&_e_)[1] = __io_apic_read(apic, 0x11 + 2 * (pin)); \ - _e_; \ -}) -#define __ioapic_write_entry(apic, pin, raw, ent) ({ \ - ASSERT(raw); \ - __io_apic_write(apic, 0x10 + 2 * (pin), ((u32 *)&(ent))[0]); \ - __io_apic_write(apic, 0x11 + 2 * (pin), ((u32 *)&(ent))[1]); \ -}) -#else +#if defined(__i386__) || defined(__x86_64__) #include #include #define nr_ioapic_entries(i) nr_ioapic_entries[i] @@ -326,8 +307,6 @@ static int ioapic_rte_to_remap_entry(str new_ire.lo.dst = value; else new_ire.lo.dst = (value >> 24) << 8; -#else /* __ia64__ */ - new_ire.lo.dst = value >> 16; #endif } else @@ -625,12 +604,8 @@ static int msi_msg_to_remap_entry( new_ire.lo.dm = (msg->address_lo >> MSI_ADDR_DESTMODE_SHIFT) & 0x1; new_ire.lo.tm = (msg->data >> MSI_DATA_TRIGGER_SHIFT) & 0x1; new_ire.lo.dlm = (msg->data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x1; -#ifdef CONFIG_X86 /* Hardware require RH = 1 for LPR delivery mode */ new_ire.lo.rh = (new_ire.lo.dlm == dest_LowestPrio); -#else - new_ire.lo.rh = 0; -#endif new_ire.lo.avail = 0; new_ire.lo.res_1 = 0; new_ire.lo.vector = (msg->data >> MSI_DATA_VECTOR_SHIFT) & @@ -703,18 +678,6 @@ void msi_msg_write_remap_rte( msi_msg_to_remap_entry(iommu, pdev, msi_desc, msg); } -#elif defined(__ia64__) -void msi_msg_read_remap_rte( - struct msi_desc *msi_desc, struct msi_msg *msg) -{ - /* TODO. */ -} - -void msi_msg_write_remap_rte( - struct msi_desc *msi_desc, struct msi_msg *msg) -{ - /* TODO. */ -} #endif int enable_intremap(struct iommu *iommu, int eim) @@ -838,8 +801,6 @@ out: spin_unlock_irqrestore(&iommu->register_lock, flags); } -#ifndef __ia64__ - /* * This function is used to enable Interrupt remapping when * enable x2apic @@ -914,5 +875,3 @@ void iommu_disable_x2apic_IR(void) for_each_drhd_unit ( drhd ) disable_qinval(drhd->iommu); } - -#endif /* !__ia64__ */ --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -33,7 +33,7 @@ #include #include #include -#ifndef __ia64__ +#if defined(__i386__) || defined(__x86_64__) #include #include #include @@ -44,10 +44,6 @@ #include "vtd.h" #include "../ats.h" -#ifdef __ia64__ -#define nr_ioapics iosapic_get_nr_iosapics() -#endif - /* Possible unfiltered LAPIC/MSI messages from untrusted sources? */ bool_t __read_mostly untrusted_msi; @@ -1057,11 +1053,7 @@ static unsigned int dma_msi_startup(stru return 0; } -#ifndef __ia64__ static void dma_msi_end(struct irq_desc *desc, u8 vector) -#else -static void dma_msi_end(struct irq_desc *desc) -#endif { dma_msi_unmask(desc); ack_APIC_irq(); @@ -1841,7 +1833,6 @@ void iommu_pte_flush(struct domain *d, u static int vtd_ept_page_compatible(struct iommu *iommu) { -#ifndef __ia64__ u64 ept_cap, vtd_cap = iommu->cap; /* EPT is not initialised yet, so we must check the capability in @@ -1851,9 +1842,6 @@ static int vtd_ept_page_compatible(struc return ( ept_has_2mb(ept_cap) == cap_sps_2mb(vtd_cap) && ept_has_1gb(ept_cap) == cap_sps_1gb(vtd_cap) ); -#else - return 0; -#endif } /* @@ -1861,7 +1849,6 @@ static int vtd_ept_page_compatible(struc */ void iommu_set_pgd(struct domain *d) { -#ifndef __ia64__ struct hvm_iommu *hd = domain_hvm_iommu(d); mfn_t pgd_mfn; @@ -1872,7 +1859,6 @@ void iommu_set_pgd(struct domain *d) pgd_mfn = pagetable_get_mfn(p2m_get_pagetable(p2m_get_hostp2m(d))); hd->pgd_maddr = pagetable_get_paddr(pagetable_from_mfn(pgd_mfn)); -#endif } static int rmrr_identity_mapping(struct domain *d, --- a/xen/drivers/passthrough/vtd/utils.c +++ b/xen/drivers/passthrough/vtd/utils.c @@ -301,8 +301,7 @@ static void dump_iommu_info(unsigned cha } } #else - printk("%s: not implemnted on IA64 for now.\n", __func__); - /* ia64: TODO */ + printk("%s: not implemented for now\n", __func__); #endif } --- a/xen/drivers/passthrough/vtd/vtd.h +++ b/xen/drivers/passthrough/vtd/vtd.h @@ -26,44 +26,8 @@ #define MAP_ME_PHANTOM_FUNC 1 #define UNMAP_ME_PHANTOM_FUNC 0 -/* Accomodate both IOAPIC and IOSAPIC. */ -#ifndef __ia64__ +/* Allow for both IOAPIC and IOSAPIC. */ #define IO_xAPIC_route_entry IO_APIC_route_entry -#else -struct IO_xAPIC_route_entry { - __u32 vector : 8, - delivery_mode : 3, /* 000: FIXED - * 001: lowest prio - * 111: ExtINT - */ - dest_mode : 1, /* 0: physical, 1: logical */ - delivery_status : 1, - polarity : 1, - irr : 1, - trigger : 1, /* 0: edge, 1: level */ - mask : 1, /* 0: enabled, 1: disabled */ - __reserved_2 : 15; - - union { - struct { __u32 - __reserved_1 : 24, - physical_dest : 4, - __reserved_2 : 4; - } physical; - - struct { __u32 - __reserved_1 : 24, - logical_dest : 8; - } logical; - - struct { __u32 - __reserved_1 : 16, - dest_id : 16; - }; - } dest; - -} __attribute__ ((packed)); -#endif struct IO_APIC_route_remap_entry { union { --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -38,7 +38,7 @@ suffix-$(CONFIG_X86) := \#pragma pa endif public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h) -public-$(CONFIG_IA64) := $(wildcard public/arch-ia64/*.h public/arch-ia64/*/*.h) +public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h) .PHONY: all all: $(headers-y) @@ -74,8 +74,6 @@ compat/xlat.h: xlat.lst $(filter-out com mv -f $@.new $@ ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH)) -# public/arch-ia64.h explicitly bails on __STRICT_ANSI__ -ifeq ($(CONFIG_IA64),) all: headers.chk @@ -84,7 +82,6 @@ headers.chk: $(filter-out public/arch-% mv $@.new $@ endif -endif clean:: rm -rf compat headers.chk --- a/xen/include/asm-x86/hvm/irq.h +++ b/xen/include/asm-x86/hvm/irq.h @@ -104,11 +104,4 @@ struct hvm_intack hvm_vcpu_has_pending_i struct hvm_intack hvm_vcpu_ack_pending_irq(struct vcpu *v, struct hvm_intack intack); -/* - * Currently IA64 Xen doesn't support MSI. So for x86, we define this macro - * to control the conditional compilation of some MSI-related functions. - * This macro will be removed once IA64 has MSI support. - */ -#define SUPPORT_MSI_REMAPPING 1 - #endif /* __ASM_X86_HVM_IRQ_H__ */ --- a/xen/include/asm-x86/hvm/vioapic.h +++ b/xen/include/asm-x86/hvm/vioapic.h @@ -41,7 +41,7 @@ /* Direct registers. */ #define VIOAPIC_REG_SELECT 0x00 #define VIOAPIC_REG_WINDOW 0x10 -#define VIOAPIC_REG_EOI 0x40 /* IA64 IOSAPIC only */ +#define VIOAPIC_REG_EOI 0x40 /* Indirect registers. */ #define VIOAPIC_REG_APIC_ID 0x00 /* x86 IOAPIC only */ --- a/xen/include/xen/cpumask.h +++ b/xen/include/xen/cpumask.h @@ -82,7 +82,7 @@ typedef struct cpumask{ DECLARE_BITMAP(b extern unsigned int nr_cpu_ids; -#if NR_CPUS > 4 * BITS_PER_LONG && !defined(__ia64__) +#if NR_CPUS > 4 * BITS_PER_LONG /* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, * not all bits may be allocated. */ extern unsigned int nr_cpumask_bits; @@ -263,37 +263,6 @@ static inline const cpumask_t *cpumask_o return (const cpumask_t *)(p - cpu / BITS_PER_LONG); } -#if defined(__ia64__) /* XXX needs cleanup */ -#define CPU_MASK_LAST_WORD BITMAP_LAST_WORD_MASK(NR_CPUS) - -#if NR_CPUS <= BITS_PER_LONG - -#define CPU_MASK_ALL \ -/*(cpumask_t)*/ { { \ - [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} } - -#else - -#define CPU_MASK_ALL \ -/*(cpumask_t)*/ { { \ - [0 ... BITS_TO_LONGS(NR_CPUS)-2] = ~0UL, \ - [BITS_TO_LONGS(NR_CPUS)-1] = CPU_MASK_LAST_WORD \ -} } - -#endif - -#define CPU_MASK_NONE \ -/*(cpumask_t)*/ { { \ - 0UL \ -} } - -#define CPU_MASK_CPU0 \ -/*(cpumask_t)*/ { { \ - [0] = 1UL \ -} } -#endif /* __ia64__ */ - #define cpumask_bits(maskp) ((maskp)->bits) static inline int cpumask_scnprintf(char *buf, int len, --- a/xen/include/xen/efi.h +++ b/xen/include/xen/efi.h @@ -5,15 +5,11 @@ #include #endif -#if defined(__ia64__) -# include_next +#if defined(__i386__) +# define efi_enabled 0 #else - -# if defined(__i386__) -# define efi_enabled 0 -# else extern const bool_t efi_enabled; -# endif +#endif #define EFI_INVALID_TABLE_ADDR (~0UL) @@ -27,8 +23,6 @@ struct efi { extern struct efi efi; -#endif - #ifndef __ASSEMBLY__ union xenpf_efi_info; --- a/xen/include/xen/elfcore.h +++ b/xen/include/xen/elfcore.h @@ -69,9 +69,6 @@ typedef struct { unsigned long xen_phys_start; unsigned long dom0_pfn_to_mfn_frame_list_list; #endif -#if defined(__ia64__) - unsigned long dom0_mm_pgd_mfn; -#endif } crash_xen_info_t; #endif /* __ELFCOREC_H__ */ --- a/xen/include/xen/hvm/irq.h +++ b/xen/include/xen/hvm/irq.h @@ -78,8 +78,6 @@ struct hvm_girq_dpci_mapping { #define NR_LINK 4 #if defined(__i386__) || defined(__x86_64__) # define NR_HVM_IRQS VIOAPIC_NUM_PINS -#elif defined(__ia64__) -# define NR_HVM_IRQS VIOSAPIC_NUM_PINS #endif /* Protected by domain's event_lock */ --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -35,11 +35,7 @@ extern bool_t iommu_debug; extern bool_t amd_iommu_perdev_intremap; /* Does this domain have a P2M table we can use as its IOMMU pagetable? */ -#ifndef __ia64__ #define iommu_use_hap_pt(d) (hap_enabled(d) && iommu_hap_pt_share) -#else -#define iommu_use_hap_pt(d) 0 -#endif extern struct rangeset *mmio_ro_ranges; --- a/xen/include/xen/irq.h +++ b/xen/include/xen/irq.h @@ -95,37 +95,19 @@ int arch_init_one_irq_desc(struct irq_de #define irq_desc_initialized(desc) ((desc)->handler != NULL) -#if defined(__ia64__) -extern irq_desc_t irq_desc[NR_VECTORS]; - -#define setup_irq(irq, action) \ - setup_irq_vector(irq_to_vector(irq), action) - -#define release_irq(irq) \ - release_irq_vector(irq_to_vector(irq)) - -#define request_irq(irq, handler, irqflags, devname, devid) \ - request_irq_vector(irq_to_vector(irq), handler, irqflags, devname, devid) - -#elif defined(__arm__) +#if defined(__arm__) #define NR_IRQS 1024 #define nr_irqs NR_IRQS extern irq_desc_t irq_desc[NR_IRQS]; -extern int setup_irq(unsigned int irq, struct irqaction *); -extern void release_irq(unsigned int irq); -extern int request_irq(unsigned int irq, - void (*handler)(int, void *, struct cpu_user_regs *), - unsigned long irqflags, const char * devname, void *dev_id); +#endif -#else extern int setup_irq(unsigned int irq, struct irqaction *); extern void release_irq(unsigned int irq); extern int request_irq(unsigned int irq, void (*handler)(int, void *, struct cpu_user_regs *), unsigned long irqflags, const char * devname, void *dev_id); -#endif extern hw_irq_controller no_irq_type; extern void no_action(int cpl, void *dev_id, struct cpu_user_regs *regs); --- a/xen/include/xen/libelf.h +++ b/xen/include/xen/libelf.h @@ -23,7 +23,7 @@ #ifndef __XEN_LIBELF_H__ #define __XEN_LIBELF_H__ -#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(__arm__) +#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) #define XEN_ELF_LITTLE_ENDIAN #else #error define architectural endianness --- a/xen/include/xen/symbols.h +++ b/xen/include/xen/symbols.h @@ -21,13 +21,9 @@ static void __check_printsym_format(cons { } -/* ia64 and ppc64 use function descriptors, which contain the real address */ -#if defined(CONFIG_IA64) || defined(CONFIG_PPC64) -#define print_fn_descriptor_symbol(fmt, addr) \ -do { \ - unsigned long *__faddr = (unsigned long*) addr; \ - print_symbol(fmt, __faddr[0]); \ -} while (0) +#if 0 +#define print_fn_descriptor_symbol(fmt, addr) \ + print_symbol(fmt, *(unsigned long *)addr) #else #define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr) #endif