#!/bin/sh
#
# run in xen-X.X/xen directory after unpacking linux in same directory

XEN=$PWD
LINUX=$XEN/../../linux-2.6.11
LINUXPATCH=$XEN/arch/ia64/patch/linux-2.6.11
XENPATCH=$XEN/arch/ia64/patch/xen-2.0.1

cp_patch ()
{
	#diff -u $LINUX/$1 $XEN/$2 > $LINUXPATCH/$3
	cp $LINUX/$1 $XEN/$2
	patch <$LINUXPATCH/$3 $XEN/$2
}

xen_patch ()
{
	#patch <$XENPATCH/$2 $XEN/$1
	echo 'skipping patch of' $XEN/$1
}

softlink ()
{
	ln -s $LINUX/$1 $XEN/$2
}

null ()
{
	touch $XEN/$1
}


# ensure linux directory is set up
if [ ! -d $LINUX ]; then
	echo "ERROR: $LINUX directory doesn't exist"
	exit
fi

# setup

#mkdir arch/ia64
#mkdir arch/ia64/lib
#mkdir include/asm-ia64
mkdir include/asm-generic
mkdir include/asm-ia64/linux
mkdir include/asm-ia64/linux/byteorder
mkdir include/asm-ia64/sn
# use "gcc -Iinclude/asm-ia64" to find these linux includes
#ln -s $XEN/include/xen $XEN/include/linux
#ln -s $XEN/include/asm-ia64/linux $XEN/include/asm-ia64/xen 
ln -s ../slab.h include/asm-ia64/linux/slab.h

# prepare for building asm-offsets (circular dependency)
#echo '#define IA64_TASK_SIZE 0' > include/asm-ia64/asm-offsets.h
#sleep 2
#touch arch/ia64/asm-offsets.c

# patches to xen/common files
#xen_patch common/domain.c domain.c
#xen_patch common/dom_mem_ops.c dom_mem_ops.c
#xen_patch common/grant_table.c grant_table.c
#xen_patch common/kernel.c kernel.c
#xen_patch common/dom0_ops.c dom0_ops.c
#xen_patch common/memory.c memory.c
#xen_patch common/keyhandler.c keyhandler.c
#xen_patch common/softirq.c softirq.c
#xen_patch common/string.c string.c
#xen_patch common/elf.c elf.c
#xen_patch common/schedule.c schedule.c
#xen_patch drivers/char/serial.c serial.c
#xen_patch drivers/char/console.c console.c
#xen_patch include/public/xen.h xen.h
#xen_patch include/xen/grant_table.h grant_table.h
#xen_patch include/xen/init.h init.h
#xen_patch include/xen/irq.h irq.h
#xen_patch include/xen/list.h list.h
#xen_patch include/xen/sched.h sched.h
#xen_patch include/xen/slab.h slab.h
#xen_patch include/xen/time.h time.h


# arch/ia64 files

cp_patch arch/ia64/kernel/efi.c arch/ia64/efi.c efi.c
cp_patch arch/ia64/kernel/entry.S arch/ia64/entry.S entry.S
cp_patch arch/ia64/kernel/head.S arch/ia64/head.S head.S
#cp_patch arch/ia64/kernel/init_task.c arch/ia64/init_task.c init_task.c
cp_patch arch/ia64/kernel/irq_ia64.c arch/ia64/irq_ia64.c irq_ia64.c
#cp_patch arch/ia64/kernel/ivt.S arch/ia64/ivt.S ivt.S
#cp_patch arch/ia64/kernel/minstate.h arch/ia64/minstate.h minstate.h
cp_patch arch/ia64/kernel/setup.c arch/ia64/setup.c setup.c
cp_patch arch/ia64/kernel/time.c arch/ia64/time.c time.c
cp_patch arch/ia64/kernel/unaligned.c arch/ia64/unaligned.c unaligned.c
#cp_patch arch/ia64/kernel/vmlinux.lds.S arch/ia64/xen.lds.S lds.S
softlink arch/ia64/kernel/vmlinux.lds.S arch/ia64/xen.lds.S

#cp_patch mm/bootmem.c arch/ia64/mm_bootmem.c mm_bootmem.c
#cp_patch mm/page_alloc.c arch/ia64/page_alloc.c page_alloc.c
#cp_patch mm/slab.c arch/ia64/slab.c slab.c

# following renamed to avoid conflict
#cp_patch kernel/extable.c arch/ia64/linuxextable.c linuxextable.c
softlink kernel/extable.c arch/ia64/linuxextable.c

cp_patch arch/ia64/mm/contig.c arch/ia64/mm_contig.c mm_contig.c
cp_patch arch/ia64/mm/tlb.c arch/ia64/tlb.c tlb.c

#cp_patch arch/ia64/hp/sim/hpsim_irq.c arch/ia64/hpsim_irq.c hpsim_irq.c

softlink arch/ia64/kernel/efi_stub.S arch/ia64/efi_stub.S
cp_patch arch/ia64/kernel/entry.h arch/ia64/entry.h entry.h
softlink arch/ia64/kernel/ia64_ksyms.c arch/ia64/ia64_ksyms.c
softlink arch/ia64/kernel/irq_lsapic.c arch/ia64/irq_lsapic.c
softlink arch/ia64/kernel/machvec.c arch/ia64/machvec.c
softlink arch/ia64/mm/extable.c arch/ia64/extable.c
#softlink arch/ia64/kernel/pal.S arch/ia64/pal.S
cp_patch arch/ia64/kernel/pal.S arch/ia64/pal.S pal.S
softlink arch/ia64/kernel/patch.c arch/ia64/patch.c
softlink arch/ia64/kernel/sal.c arch/ia64/sal.c
softlink arch/ia64/kernel/minstate.h arch/ia64/minstate.h

softlink arch/ia64/lib/bitop.c arch/ia64/lib/bitop.c
softlink arch/ia64/lib/carta_random.S arch/ia64/lib/carta_random.S
softlink arch/ia64/lib/checksum.c arch/ia64/lib/checksum.c
softlink arch/ia64/lib/clear_page.S arch/ia64/lib/clear_page.S
softlink arch/ia64/lib/clear_user.S arch/ia64/lib/clear_user.S
softlink arch/ia64/lib/copy_page_mck.S arch/ia64/lib/copy_page_mck.S
softlink arch/ia64/lib/copy_page.S arch/ia64/lib/copy_page.S
softlink arch/ia64/lib/copy_user.S arch/ia64/lib/copy_user.S
softlink arch/ia64/lib/csum_partial_copy.c arch/ia64/lib/csum_partial_copy.c
softlink arch/ia64/lib/dec_and_lock.c arch/ia64/lib/dec_and_lock.c
softlink arch/ia64/lib/do_csum.S arch/ia64/lib/do_csum.S
softlink arch/ia64/lib/flush.S arch/ia64/lib/flush.S
softlink arch/ia64/lib/idiv32.S arch/ia64/lib/idiv32.S
softlink arch/ia64/lib/idiv64.S arch/ia64/lib/idiv64.S
softlink arch/ia64/lib/io.c arch/ia64/lib/io.c
softlink arch/ia64/lib/ip_fast_csum.S arch/ia64/lib/ip_fast_csum.S
softlink arch/ia64/lib/memcpy_mck.S arch/ia64/lib/memcpy_mck.S
softlink arch/ia64/lib/memcpy.S arch/ia64/lib/memcpy.S
softlink arch/ia64/lib/memset.S arch/ia64/lib/memset.S
softlink arch/ia64/lib/strlen.S arch/ia64/lib/strlen.S
softlink arch/ia64/lib/strlen_user.S arch/ia64/lib/strlen_user.S
softlink arch/ia64/lib/strncpy_from_user.S arch/ia64/lib/strncpy_from_user.S
softlink arch/ia64/lib/strnlen_user.S arch/ia64/lib/strnlen_user.S
softlink arch/ia64/lib/xor.S arch/ia64/lib/xor.S

softlink lib/cmdline.c arch/ia64/cmdline.c

softlink arch/ia64/hp/sim/hpsim.S arch/ia64/hpsim.S

# xen/include/asm-generic files

softlink include/asm-generic/bug.h include/asm-generic/bug.h
softlink include/asm-generic/div64.h include/asm-generic/div64.h
softlink include/asm-generic/errno.h include/asm-generic/errno.h
softlink include/asm-generic/errno-base.h include/asm-generic/errno-base.h
softlink include/asm-generic/ide_iops.h include/asm-generic/ide_iops.h
softlink include/asm-generic/iomap.h include/asm-generic/iomap.h
softlink include/asm-generic/pci-dma-compat.h include/asm-generic/pci-dma-compat.h
softlink include/asm-generic/pci.h include/asm-generic/pci.h
softlink include/asm-generic/pgtable.h include/asm-generic/pgtable.h
softlink include/asm-generic/pgtable-nopud.h include/asm-generic/pgtable-nopud.h
softlink include/asm-generic/sections.h include/asm-generic/sections.h
softlink include/asm-generic/topology.h include/asm-generic/topology.h
softlink include/asm-generic/vmlinux.lds.h include/asm-generic/vmlinux.lds.h


# xen/include/asm-ia64 files

cp_patch arch/ia64/hp/sim/hpsim_ssc.h include/asm-ia64/hpsim_ssc.h hpsim_ssc.h

#cp_patch include/asm-ia64/current.h include/asm-ia64/current.h current.h
softlink include/asm-ia64/current.h include/asm-ia64/current.h
cp_patch include/asm-ia64/gcc_intrin.h include/asm-ia64/gcc_intrin.h gcc_intrin.h
#softlink include/asm-ia64/gcc_intrin.h include/asm-ia64/gcc_intrin.h
#cp_patch include/asm-ia64/hardirq.h include/asm-ia64/hardirq.h hardirq.h
softlink include/asm-ia64/hardirq.h include/asm-ia64/hardirq.h
#cp_patch include/asm-ia64/hw_irq.h include/asm-ia64/hw_irq.h hw_irq.h
softlink include/asm-ia64/hw_irq.h include/asm-ia64/hw_irq.h
#cp_patch include/asm-ia64/ide.h include/asm-ia64/ide.h ide.h
cp_patch include/asm-ia64/io.h include/asm-ia64/io.h io.h
#cp_patch include/asm-ia64/irq.h include/asm-ia64/irq.h irq.h
softlink include/asm-ia64/irq.h include/asm-ia64/irq.h
cp_patch include/asm-ia64/kregs.h include/asm-ia64/kregs.h kregs.h
cp_patch include/asm-ia64/page.h include/asm-ia64/page.h page.h
cp_patch include/asm-ia64/processor.h include/asm-ia64/processor.h processor.h
#cp_patch include/asm-ia64/sal.h include/asm-ia64/sal.h sal.h
softlink include/asm-ia64/sal.h include/asm-ia64/sal.h
cp_patch include/asm-ia64/system.h include/asm-ia64/system.h system.h
cp_patch include/asm-ia64/types.h include/asm-ia64/types.h types.h

null include/asm-ia64/desc.h 
#null include/asm-ia64/domain_page.h
#null include/asm-ia64/flushtlb.h
null include/asm-ia64/io_apic.h
null include/asm-ia64/pdb.h
null include/asm-ia64/module.h
null include/asm-ia64/ia32.h
null include/asm-ia64/tlbflush.h

null include/asm-ia64/sn/arch.h
null include/asm-ia64/sn/geo.h
null include/asm-ia64/sn/nodepda.h
null include/asm-ia64/sn/sn_cpuid.h
cp_patch include/asm-ia64/sn/sn_sal.h include/asm-ia64/sn/sn_sal.h sn_sal.h

softlink include/asm-ia64/acpi.h include/asm-ia64/acpi.h
softlink include/asm-ia64/asmmacro.h include/asm-ia64/asmmacro.h
softlink include/asm-ia64/atomic.h include/asm-ia64/atomic.h
softlink include/asm-ia64/bitops.h include/asm-ia64/bitops.h
softlink include/asm-ia64/break.h include/asm-ia64/break.h
softlink include/asm-ia64/bug.h include/asm-ia64/bug.h
softlink include/asm-ia64/byteorder.h include/asm-ia64/byteorder.h
softlink include/asm-ia64/cacheflush.h include/asm-ia64/cacheflush.h
softlink include/asm-ia64/cache.h include/asm-ia64/cache.h
softlink include/asm-ia64/checksum.h include/asm-ia64/checksum.h
softlink include/asm-ia64/delay.h include/asm-ia64/delay.h
softlink include/asm-ia64/div64.h include/asm-ia64/div64.h
softlink include/asm-ia64/dma.h include/asm-ia64/dma.h
softlink include/asm-ia64/dma-mapping.h include/asm-ia64/dma-mapping.h
softlink include/asm-ia64/errno.h include/asm-ia64/errno.h
softlink include/asm-ia64/fpu.h include/asm-ia64/fpu.h
softlink include/asm-ia64/hdreg.h include/asm-ia64/hdreg.h
#softlink include/asm-ia64/ia32.h include/asm-ia64/ia32.h
cp_patch include/asm-ia64/ia64regs.h include/asm-ia64/ia64regs.h ia64regs.h
softlink include/asm-ia64/intrinsics.h include/asm-ia64/intrinsics.h
softlink include/asm-ia64/ioctl.h include/asm-ia64/ioctl.h
softlink include/asm-ia64/linkage.h include/asm-ia64/linkage.h
softlink include/asm-ia64/machvec.h include/asm-ia64/machvec.h
softlink include/asm-ia64/machvec_hpsim.h include/asm-ia64/machvec_hpsim.h
#softlink include/asm-ia64/mca_asm.h include/asm-ia64/mca_asm.h
cp_patch include/asm-ia64/mca_asm.h include/asm-ia64/mca_asm.h mca_asm.h
softlink include/asm-ia64/mca.h include/asm-ia64/mca.h
softlink include/asm-ia64/meminit.h include/asm-ia64/meminit.h
softlink include/asm-ia64/mman.h include/asm-ia64/mman.h
softlink include/asm-ia64/numa.h include/asm-ia64/numa.h
cp_patch include/asm-ia64/pal.h include/asm-ia64/pal.h pal.h
softlink include/asm-ia64/param.h include/asm-ia64/param.h
softlink include/asm-ia64/patch.h include/asm-ia64/patch.h
softlink include/asm-ia64/pci.h include/asm-ia64/pci.h
softlink include/asm-ia64/percpu.h include/asm-ia64/percpu.h
#softlink include/asm-ia64/pgalloc.h include/asm-ia64/pgalloc.h
cp_patch include/asm-ia64/pgalloc.h include/asm-ia64/pgalloc.h pgalloc.h
softlink include/asm-ia64/pgtable.h include/asm-ia64/pgtable.h
cp_patch include/asm-ia64/ptrace.h include/asm-ia64/ptrace.h ptrace.h
softlink include/asm-ia64/ptrace_offsets.h include/asm-ia64/ptrace_offsets.h
softlink include/asm-ia64/rse.h include/asm-ia64/rse.h
softlink include/asm-ia64/rwsem.h include/asm-ia64/rwsem.h
softlink include/asm-ia64/scatterlist.h include/asm-ia64/scatterlist.h
softlink include/asm-ia64/sections.h include/asm-ia64/sections.h
softlink include/asm-ia64/semaphore.h include/asm-ia64/semaphore.h
softlink include/asm-ia64/setup.h include/asm-ia64/setup.h
softlink include/asm-ia64/sigcontext.h include/asm-ia64/sigcontext.h
softlink include/asm-ia64/signal.h include/asm-ia64/signal.h
softlink include/asm-ia64/smp.h include/asm-ia64/smp.h
softlink include/asm-ia64/spinlock.h include/asm-ia64/spinlock.h
softlink include/asm-ia64/string.h include/asm-ia64/string.h
softlink include/asm-ia64/thread_info.h include/asm-ia64/thread_info.h
softlink include/asm-ia64/timex.h include/asm-ia64/timex.h
softlink include/asm-ia64/topology.h include/asm-ia64/topology.h
cp_patch include/asm-ia64/uaccess.h include/asm-ia64/uaccess.h uaccess.h
softlink include/asm-ia64/unaligned.h include/asm-ia64/unaligned.h
softlink include/asm-ia64/unistd.h include/asm-ia64/unistd.h
softlink include/asm-ia64/unwind.h include/asm-ia64/unwind.h
softlink include/asm-ia64/ustack.h include/asm-ia64/ustack.h

#rename this one because xen/include/asm/serial.h already exists
#there is only one use of it that must be patched -- arch/ia64/setup.c 
#softlink include/asm-ia64/serial.h include/asm-ia64/asmserial.h

# xen/include/asm-ia64/linux/*.h (== linux/include/linux/*.h)

#cp_patch include/linux/bootmem.h include/asm-ia64/linux/bootmem.h bootmem.h
cp_patch include/linux/cpumask.h include/asm-ia64/linux/cpumask.h cpumask.h
#cp_patch include/linux/dma-mapping.h include/asm-ia64/linux/dma-mapping.h dma-mapping.h
softlink include/linux/dma-mapping.h include/asm-ia64/linux/dma-mapping.h
#cp_patch include/linux/efi.h include/asm-ia64/linux/efi.h efi.h
softlink include/linux/efi.h include/asm-ia64/linux/efi.h
cp_patch include/linux/hardirq.h include/asm-ia64/linux/hardirq.h hardirq.h
#cp_patch include/linux/init_task.h include/asm-ia64/linux/init_task.h init_task.h
cp_patch include/linux/interrupt.h include/asm-ia64/linux/interrupt.h interrupt.h
#cp_patch include/linux/mmzone.h include/asm-ia64/linux/mmzone.h mmzone.h
softlink include/linux/mmzone.h include/asm-ia64/linux/mmzone.h

#cp_patch include/linux/wait.h include/asm-ia64/linux/wait.h wait.h
softlink include/linux/wait.h include/asm-ia64/linux/wait.h

#cp_patch include/linux/slab.h include/asm-ia64/slab.h slab.h

# following renamed to avoid conflict
#cp_patch include/linux/time.h include/xen/linuxtime.h linuxtime.h
softlink include/linux/time.h include/asm-ia64/linux/linuxtime.h

softlink include/linux/bcd.h include/asm-ia64/linux/bcd.h
softlink include/linux/bitmap.h include/asm-ia64/linux/bitmap.h
softlink include/linux/bitops.h include/asm-ia64/linux/bitops.h
softlink include/linux/err.h include/asm-ia64/linux/err.h
softlink include/linux/gfp.h include/asm-ia64/linux/gfp.h
softlink include/linux/initrd.h include/asm-ia64/linux/initrd.h
softlink include/linux/kmalloc_sizes.h include/asm-ia64/linux/kmalloc_sizes.h
softlink include/linux/linkage.h include/asm-ia64/linux/linkage.h
softlink include/linux/numa.h include/asm-ia64/linux/numa.h
softlink include/linux/page-flags.h include/asm-ia64/linux/page-flags.h
softlink include/linux/percpu.h include/asm-ia64/linux/percpu.h
softlink include/linux/preempt.h include/asm-ia64/linux/preempt.h
softlink include/linux/rbtree.h include/asm-ia64/linux/rbtree.h
softlink include/linux/rwsem.h include/asm-ia64/linux/rwsem.h
#softlink include/linux/seq_file.h include/asm-ia64/linux/seq_file.h
#softlink include/linux/serial_core.h include/asm-ia64/linux/serial_core.h
softlink include/linux/stddef.h include/asm-ia64/linux/stddef.h
softlink include/linux/thread_info.h include/asm-ia64/linux/thread_info.h
softlink include/linux/threads.h include/asm-ia64/linux/threads.h
softlink include/linux/timex.h include/asm-ia64/linux/timex.h
softlink include/linux/topology.h include/asm-ia64/linux/topology.h
softlink include/linux/seqlock.h include/asm-ia64/linux/seqlock.h
softlink include/linux/jiffies.h include/asm-ia64/linux/jiffies.h

softlink drivers/firmware/pcdp.h arch/ia64/pcdp.h

null include/asm-ia64/linux/file.h
null include/asm-ia64/linux/module.h
null include/asm-ia64/linux/swap.h
null include/asm-ia64/linux/device.h
null include/asm-ia64/linux/proc_fs.h
null include/asm-ia64/linux/rtc.h
null include/asm-ia64/linux/profile.h
null include/asm-ia64/linux/seqlock.h
null include/asm-ia64/linux/smp_lock.h
null include/asm-ia64/linux/tty.h
null include/asm-ia64/linux/kernel_stat.h
null include/asm-ia64/linux/ptrace.h
null include/asm-ia64/linux/random.h
null include/asm-ia64/linux/signal.h
null include/asm-ia64/linux/bootmem.h
null include/asm-ia64/linux/serial.h
null include/asm-ia64/linux/serial_core.h
null include/asm-ia64/linux/seq_file.h
null include/asm-ia64/linux/cpu.h
null include/asm-ia64/linux/ioport.h

softlink include/linux/byteorder/generic.h include/asm-ia64/linux/byteorder/generic.h
softlink include/linux/byteorder/little_endian.h include/asm-ia64/linux/byteorder/little_endian.h
softlink include/linux/byteorder/swab.h include/asm-ia64/linux/byteorder/swab.h

