diff --git a/arch/ppc64/Makefile b/arch/ppc64/Makefile index 84fa0c34d8b6c06897c526560ecd875b7dd70420..3ba80c9682cf7f769f487f5099c1ff64bec6075f 100644 --- a/arch/ppc64/Makefile +++ b/arch/ppc64/Makefile @@ -13,61 +13,47 @@ # Adjusted for PPC64 by Tom Gall # -KERNELLOAD =0xc000000000000000 +KERNELLOAD = 0xc000000000000000 LDFLAGS := -m elf64ppc -LDFLAGS_vmlinux = -Bstatic \ - -e $(KERNELLOAD) -Ttext $(KERNELLOAD) +LDFLAGS_vmlinux = -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD) LDFLAGS_BLOB := --format binary --oformat elf64-powerpc -CFLAGS := $(CFLAGS) -msoft-float -pipe \ +CFLAGS += -msoft-float -pipe \ -Wno-uninitialized -mminimal-toc -mtraceback=full \ -finline-limit-2000 -mcpu=power4 -CPP = $(CC) -E $(CFLAGS) - HEAD := arch/ppc64/kernel/head.o -core-y += arch/ppc64/kernel/ arch/ppc64/mm/ arch/ppc64/lib/ -core-$(CONFIG_XMON) += arch/ppc64/xmon/ - -# FIXME: is drivers- right ? -drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/ - -makeboot = $(call descend,arch/ppc64/boot,$(1)) - -ifdef CONFIG_PPC_PSERIES -BOOT_TARGETS = zImage zImage.initrd -endif +libs-y += arch/ppc64/lib/ +core-y += arch/ppc64/kernel/ +core-y += arch/ppc64/mm/ +core-$(CONFIG_XMON) += arch/ppc64/xmon/ +drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/ -ifdef CONFIG_PPC_ISERIES -BOOT_TARGETS = vmlinux.sminitrd vmlinux.initrd vmlinux.sm -endif +makeboot =$(Q)$(MAKE) -f scripts/Makefile.build obj=arch/ppc64/boot $(1) -$(BOOT_TARGETS): vmlinux - @$(call makeboot,arch/ppc64/boot/$@) +boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd +boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm +$(boottarget-y): vmlinux + $(call makeboot,arch/ppc64/boot/$@) %_config: arch/ppc64/configs/%_defconfig rm -f .config arch/ppc64/defconfig cp -f arch/ppc64/configs/$(@:config=defconfig) arch/ppc64/defconfig archclean: - @$(call makeboot,clean) + $(Q)$(MAKE) -f scripts/Makefile.clean obj=arch/ppc64/boot -archmrproper: +prepare: include/asm-ppc64/offsets.h - -prepare: include/asm-$(ARCH)/offsets.h - -arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \ +arch/ppc64/kernel/asm-offsets.s: include/asm include/linux/version.h \ include/config/MARKER -include/asm-$(ARCH)/offsets.h.tmp: arch/$(ARCH)/kernel/asm-offsets.s - @$(generate-asm-offsets.h) < $< > $@ - -include/asm-$(ARCH)/offsets.h: include/asm-$(ARCH)/offsets.h.tmp +include/asm-ppc64/offsets.h: arch/ppc64/kernel/asm-offsets.s @echo -n ' Generating $@' + @$(generate-asm-offsets.h) < $< > $@.tmp @$(update-if-changed) -CLEAN_FILES += include/asm-$(ARCH)/offsets.h.tmp \ - include/asm-$(ARCH)/offsets.h +CLEAN_FILES += include/asm-ppc64/offsets.h.tmp \ + include/asm-ppc64/offsets.h diff --git a/arch/ppc64/boot/Makefile b/arch/ppc64/boot/Makefile index 8172219a09b5d8f3fa73c7dfa77f8d6713fb53ce..ac1f5a109a8a3ee57e5ce00f2b571065dbf931b7 100644 --- a/arch/ppc64/boot/Makefile +++ b/arch/ppc64/boot/Makefile @@ -23,92 +23,88 @@ CROSS32_COMPILE = #CROSS32_COMPILE = /usr/local/ppc/bin/powerpc-linux- -BOOTCC = $(CROSS32_COMPILE)gcc -BOOTCFLAGS = $(HOSTCFLAGS) -I$(objtree)/include -BOOTLD = $(CROSS32_COMPILE)ld -BOOTAS = $(CROSS32_COMPILE)as -BOOTAFLAGS = -D__ASSEMBLY__ $(HOSTCFLAGS) - -$(obj)/start.o: $(obj)/start.c - $(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $< - -$(obj)/main.o: $(obj)/main.c - $(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $< - -$(obj)/zlib.o: $(obj)/zlib.c - $(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $< - -$(obj)/imagesize.o: $(obj)/imagesize.c - $(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $< - -$(obj)/no_initrd.o: $(obj)/no_initrd.c - $(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $< - -$(obj)/crt0.o: $(obj)/crt0.S - $(BOOTCC) $(BOOTAFLAGS) -traditional -c -o $*.o $< - -CFLAGS = $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS -LD_ARGS = -Ttext 0x00400000 -e _start -OBJCOPYFLAGS := -S -O binary - -OBJS = $(addprefix $(obj)/,crt0.o start.o main.o zlib.o image.o imagesize.o) - -ifeq ($(CONFIG_PPC_ISERIES),y) - -boot: vmlinux.sm - -$(obj)/addSystemMap: $(obj)/addSystemMap.c - $(HOSTCC) $(HOSTCFLAGS) -o $@ $< - -$(obj)/vmlinux.sm: vmlinux $(obj)/addSystemMap - $(obj)/addSystemMap System.map vmlinux $(obj)/vmlinux.sm - -$(obj)/addRamDisk: $(obj)/addRamDisk.c - $(HOSTCC) $(HOSTCFLAGS) -o $@ $< - -$(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map - $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map vmlinux $(obj)/vmlinux.initrd - -$(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map - $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map $(obj)/vmlinux.sm $(obj)/vmlinux.sminitrd - -else -boot: zImage -endif - -$(obj)/piggyback: $(obj)/piggyback.c - $(HOSTCC) $(HOSTCFLAGS) -DKERNELBASE=$(KERNELBASE) -o $@ $< - -$(obj)/addnote: $(obj)/addnote.c - $(HOSTCC) $(HOSTCFLAGS) -o $@ $< - -$(obj)/image.o: $(obj)/piggyback $(obj)/vmlinux.gz - $(obj)/piggyback $(obj)/image < $(obj)/vmlinux.gz | $(BOOTAS) -o $@ - -$(obj)/sysmap.o: $(obj)/piggyback System.map - $(obj)/piggyback $(obj)/sysmap < System.map | $(BOOTAS) -o $(obj)/sysmap.o - -$(obj)/initrd.o: $(obj)/ramdisk.image.gz $(obj)/piggyback - $(obj)/piggyback $(obj)/initrd < $(obj)/ramdisk.image.gz | $(BOOTAS) -o $(obj)/initrd.o - -$(obj)/zImage: $(OBJS) $(obj)/no_initrd.o $(obj)/addnote - $(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $(obj)/no_initrd.o - $(obj)/addnote $@ - -$(obj)/zImage.initrd: $(OBJS) $(obj)/initrd.o $(obj)/addnote - $(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $(obj)/initrd.o - ./addnote $@ - -$(obj)/vmlinux.gz: vmlinux - $(OBJCOPY) $(OBJCOPYFLAGS) vmlinux $(obj)/vmlinux - ls -l $(obj)/vmlinux | awk '{printf "/* generated -- do not edit! */\nint uncompressed_size = %d;\n", $$5}' > $(obj)/imagesize.c - $(CROSS_COMPILE)nm -n vmlinux | tail -1 | awk '{printf "long vmlinux_end = 0x%s;\n", substr($$1,8)}' >> $(obj)/imagesize.c - gzip -vf9 $(obj)/vmlinux - -$(obj)/imagesize.c: $(obj)/vmlinux.gz - -clean: - @rm -f $(OBJS) - @rm -f $(addprefix $(obj)/,piggyback note addnote zImage \ - zImage.initrd vmlinux.gz no_initrd.o imagesize.c addSystemMap \ - vmlinux.sm addRamDisk vmlinux.initrd vmlinux.sminitrd) +BOOTCC := $(CROSS32_COMPILE)gcc +BOOTCFLAGS := $(HOSTCFLAGS) -Iinclude +BOOTLD := $(CROSS32_COMPILE)ld +BOOTAS := $(CROSS32_COMPILE)as +BOOTAFLAGS := -D__ASSEMBLY__ $(HOSTCFLAGS) + +CFLAGS := $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS +LD_ARGS := -Ttext 0x00400000 -e _start +OBJCOPYFLAGS := -S -O binary + +obj-boot := start.o main.o zlib.o imagesize.o no_initrd.o +OBJS := crt0.o start.o main.o zlib.o imagesize.o image.o +obj-boot := $(addprefix $(obj)/,$(obj-boot)) +OBJS := $(addprefix $(obj)/,$(OBJS)) +targets += $(obj-boot) $(addprefix $(obj)/,image.c image.o) + +quiet_cmd_bootcc = BOOTCC $@ + cmd_bootcc = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $< +$(obj-boot): %.o: %.c FORCE + $(call if_changed_dep,bootcc) + +quiet_cmd_bootas = BOOTAS $@ + cmd_bootas = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -traditional \ + -c -o $@ $< +$(obj)/crt0.o: %.o: %.S FORCE + $(call if_changed_dep,bootas) + +host-progs := piggyback addnote addSystemMap addRamDisk +HOSTCFLAGS_piggyback.o := -DKERNELBASE=$(KERNELBASE) +EXTRA_TARGETS += zImage zImage.initrd vmlinux.bin vmlinux.gz \ + vmlinux.sm vmlinux.initrd vmlinux.sminitrd \ + sysmap.o initrd.o + +quiet_cmd_sysmap = SYSMAP $@ + cmd_sysmap = $(obj)/addSystemMap System.map $< $@ +$(obj)/vmlinux.sm: vmlinux $(obj)/addSystemMap System.map FORCE + $(call if_changed,sysmap) + +quiet_cmd_ramdisk = RAMDISK $@ + cmd_ramdisk = $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map $< $@ +$(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.map FORCE + $(call if_changed,ramdisk) + +$(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE + $(call if_changed,ramdisk) + + +quiet_cmd_piggy = PIGGY $@ + cmd_piggy = $(obj)/piggyback $(@:.o=) < $< | $(BOOTAS) -o $@ + +$(obj)/image.o: $(obj)/vmlinux.gz $(obj)/piggyback FORCE + $(call if_changed,piggy) + +$(obj)/sysmap.o: System.map $(obj)/piggyback FORCE + $(call if_changed,piggy) + +$(obj)/initrd.o: $(obj)/ramdisk.image.gz $(obj)/piggyback FORCE + $(call if_changed,piggy) + +quiet_cmd_addnote = ADDNOTE $@ + cmd_addnote = $(BOOTLD) $(LD_ARGS) -T $(obj)/zImage.lds -o $@ $(OBJS) $<\ + && $(obj)/addnote $@ + +$(obj)/zImage: $(obj)/no_initrd.o $(OBJS) $(obj)/addnote FORCE + $(call if_changed,addnote) + +$(obj)/zImage.initrd: $(obj)/initrd.o $(OBJS) $(obj)/addnote FORCE + $(call if_changed,addnote) + +$(obj)/vmlinux.bin: vmlinux FORCE + $(call if_changed,objcopy) + +$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE + $(call if_changed,gzip) + +$(obj)/imagesize.c: vmlinux + @echo Generating $@ + ls -l vmlinux | \ + awk '{printf "/* generated -- do not edit! */\n" \ + "int uncompressed_size = %d;\n", $$5}' > $(obj)/imagesize.c + $(CROSS_COMPILE)nm -n vmlinux | tail -1 | \ + awk '{printf "long vmlinux_end = 0x%s;\n", substr($$1,8)}' \ + >> $(obj)/imagesize.c + +clean-files := $(targets) diff --git a/arch/ppc64/boot/main.c b/arch/ppc64/boot/main.c index be0f398681ee727495324190a27f42b4de917e55..8d14d7172480b2a9be0907825695d447e79be5cd 100644 --- a/arch/ppc64/boot/main.c +++ b/arch/ppc64/boot/main.c @@ -14,6 +14,8 @@ #include <asm/page.h> #include <asm/bootinfo.h> +#undef DEBUG + void memmove(void *dst, void *im, int len); extern void *finddevice(const char *); @@ -90,7 +92,9 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom) for(claim_addr = PROG_START; claim_addr <= PROG_START * 8; claim_addr += 0x100000) { +#ifdef DEBUG printf(" trying: 0x%08lx\n\r", claim_addr); +#endif dst = claim(claim_addr, uncompressed_size, 0); if (dst != (void *)-1) break; } @@ -118,6 +122,7 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom) bi_recs = make_bi_recs((unsigned long)dst + vmlinux_end); kernel_entry = (kernel_entry_t)dst; +#ifdef DEBUG printf( "kernel:\n\r" " entry addr = 0x%lx\n\r" " a1 = 0x%lx,\n\r" @@ -126,6 +131,7 @@ chrpboot(unsigned long a1, unsigned long a2, void *prom) " bi_recs = 0x%lx,\n\r", (unsigned long)kernel_entry, a1, a2, (unsigned long)prom, (unsigned long)bi_recs); +#endif kernel_entry( a1, a2, prom, bi_recs ); diff --git a/arch/ppc64/kernel/Makefile b/arch/ppc64/kernel/Makefile index a92f400bedbdbf60e0aa701d736e3f5203abcd7b..e044b9cf60038fcc25d1dc6118743ba4bdd04e76 100644 --- a/arch/ppc64/kernel/Makefile +++ b/arch/ppc64/kernel/Makefile @@ -1,40 +1,32 @@ # -# Makefile for the linux kernel. +# Makefile for the linux ppc64 kernel. # -EXTRA_CFLAGS = -mno-minimal-toc - -KHEAD := head.o - -EXTRA_TARGETS := $(KHEAD) - -export-objs := ppc_ksyms.o +EXTRA_CFLAGS += -mno-minimal-toc +EXTRA_TARGETS := head.o +export-objs := ppc_ksyms.o obj-y := ppc_ksyms.o setup.o entry.o traps.o irq.o idle.o \ time.o process.o signal.o syscalls.o misc.o ptrace.o \ align.o semaphore.o bitops.o stab.o htab.o pacaData.o \ - LparData.o udbg.o binfmt_elf32.o sys_ppc32.o sys32.o \ - ioctl32.o ptrace32.o signal32.o open_pic.o xics.o \ - pmc.o mf_proc.o proc_pmc.o iSeries_setup.o \ - ItLpQueue.o hvCall.o mf.o HvLpEvent.o ras.o \ - iSeries_proc.o HvCall.o HvLpConfig.o \ - rtc.o init_task.o pSeries_htab.o - -obj-$(CONFIG_PCI) += pci.o pci_dn.o pci_dma.o - -ifeq ($(CONFIG_PPC_ISERIES),y) -obj-$(CONFIG_PCI) += iSeries_pci.o iSeries_pci_reset.o iSeries_IoMmTable.o iSeries_irq.o iSeries_VpdInfo.o XmPciLpEvent.o -endif -ifeq ($(CONFIG_PPC_PSERIES),y) -obj-$(CONFIG_PCI) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o eeh.o - -obj-y += rtasd.o nvram.o -endif - -obj-$(CONFIG_RTAS_FLASH) += rtas_flash.o - -obj-$(CONFIG_SMP) += smp.o - -obj-$(CONFIG_PROFILING) += profile.o - -obj-y += prom.o lmb.o rtas.o rtas-proc.o chrp_setup.o i8259.o + udbg.o binfmt_elf32.o sys_ppc32.o sys32.o ioctl32.o \ + ptrace32.o signal32.o pmc.o rtc.o init_task.o \ + lmb.o pci.o pci_dn.o pci_dma.o + +obj-$(CONFIG_PPC_ISERIES) += iSeries_pci.o iSeries_pci_reset.o \ + iSeries_IoMmTable.o iSeries_irq.o \ + iSeries_VpdInfo.o XmPciLpEvent.o \ + HvCall.o HvLpConfig.o LparData.o mf_proc.o \ + proc_pmc.o iSeries_setup.o ItLpQueue.o hvCall.o \ + mf.o HvLpEvent.o iSeries_proc.o + +obj-$(CONFIG_PPC_PSERIES) += pSeries_pci.o pSeries_lpar.o pSeries_hvCall.o \ + eeh.o rtasd.o nvram.o + +# Change this to pSeries only once we've got iSeries up to date +obj-y += open_pic.o xics.o pSeries_htab.o rtas.o \ + rtas-proc.o chrp_setup.o i8259.o ras.o prom.o + +obj-$(CONFIG_RTAS_FLASH) += rtas_flash.o +obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_PROFILING) += profile.o diff --git a/arch/ppc64/kernel/chrp_setup.c b/arch/ppc64/kernel/chrp_setup.c index 121429be09f7cef4c1e185205303332c2e70588b..a387af93058da390c5f69363faf6da8e2196d392 100644 --- a/arch/ppc64/kernel/chrp_setup.c +++ b/arch/ppc64/kernel/chrp_setup.c @@ -60,7 +60,7 @@ #include "i8259.h" #include "open_pic.h" -#include "xics.h" +#include <asm/xics.h> #include <asm/ppcdebug.h> extern volatile unsigned char *chrp_int_ack_special; diff --git a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S index ab0821860c4a39e34902d79f0a6d3c7fd1ff8c87..3f89ee8d2ab1caca9adb11a7b214cf086863c14e 100644 --- a/arch/ppc64/kernel/head.S +++ b/arch/ppc64/kernel/head.S @@ -79,7 +79,7 @@ _stext: _STATIC(__start) b .__start_initialization_pSeries - +#ifdef CONFIG_PPC_ISERIES /* At offset 0x20, there is a pointer to iSeries LPAR data. * This is required by the hypervisor */ . = 0x20 @@ -90,9 +90,7 @@ _STATIC(__start) * between physical addresses and absolute addresses) and * to the pidhash table (also used by the debugger) */ .llong msChunks-KERNELBASE -#ifdef CONFIG_PPC_ISERIES .llong pidhash-KERNELBASE -#endif /* Offset 0x38 - Pointer to start of embedded System.map */ .globl embedded_sysmap_start @@ -102,6 +100,7 @@ embedded_sysmap_start: .globl embedded_sysmap_end embedded_sysmap_end: .llong 0 +#endif /* Secondary processors spin on this value until it goes to 1. */ .globl __secondary_hold_spinloop @@ -365,11 +364,15 @@ __start_interupts: * point to itVpdAreas. On pSeries native, this value is not used. */ . = 0x4000 - .globl __end_interupts + .globl __end_interrupts .globl __start_naca __end_interupts: __start_naca: +#ifdef CONFIG_PPC_ISERIES .llong itVpdAreas +#else + .llong 0x0 +#endif .llong 0x0 .llong 0x0 .llong paca @@ -390,6 +393,7 @@ __start_stab: .globl __end_stab __end_stab: +#ifdef CONFIG_PPC_ISERIES /* * The iSeries LPAR map is at this fixed address * so that the HvReleaseData structure can address @@ -503,7 +507,7 @@ maskable_exception_exit: mfspr r21,SPRG1 mfspr r20,SPRG2 rfid - +#endif /* * Data area reserved for FWNMI option. */ @@ -1217,7 +1221,7 @@ _GLOBAL(pseries_secondary_smp_init) #endif #endif b 1b /* Loop until told to go */ - +#ifdef CONFIG_PPC_ISERIES _GLOBAL(__start_initialization_iSeries) LOADADDR(r1,init_thread_union) @@ -1241,6 +1245,7 @@ _GLOBAL(__start_initialization_iSeries) bl .iSeries_fixup_klimit b .start_here_common +#endif _GLOBAL(__start_initialization_pSeries) mr r31,r3 /* save parameters */ @@ -1248,9 +1253,6 @@ _GLOBAL(__start_initialization_pSeries) mr r29,r5 mr r28,r6 mr r27,r7 - mr r26,r8 /* YABOOT: debug_print() routine */ - mr r25,r9 /* YABOOT: debug_delay() routine */ - mr r24,r10 /* YABOOT: debug_prom() routine */ bl .enable_64b_mode @@ -1295,9 +1297,6 @@ _GLOBAL(__start_initialization_pSeries) mr r5,r29 mr r6,r28 mr r7,r27 - mr r8,r26 - mr r9,r25 - mr r10,r24 bl .prom_init diff --git a/arch/ppc64/kernel/ioctl32.c b/arch/ppc64/kernel/ioctl32.c index f78eb2dfaeeb36ad9231f05dde5f2f066c100e00..00e9d511d8b8f3db798bf107e36b9953705c5fe6 100644 --- a/arch/ppc64/kernel/ioctl32.c +++ b/arch/ppc64/kernel/ioctl32.c @@ -1722,9 +1722,9 @@ out: if (data) struct loop_info32 { int lo_number; /* ioctl r/o */ - __kernel_dev_t32 lo_device; /* ioctl r/o */ + compat_dev_t lo_device; /* ioctl r/o */ unsigned int lo_inode; /* ioctl r/o */ - __kernel_dev_t32 lo_rdevice; /* ioctl r/o */ + compat_dev_t lo_rdevice; /* ioctl r/o */ int lo_offset; int lo_encrypt_type; int lo_encrypt_key_size; /* ioctl w/o */ @@ -2054,7 +2054,7 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a set_fs(old_fs); if (err >= 0) - err = put_user(kuid, (__kernel_uid_t32 *)arg); + err = put_user(kuid, (compat_uid_t *)arg); return err; } @@ -3656,7 +3656,7 @@ struct ioctl_trans { #define HANDLE_IOCTL(cmd,handler) { cmd, (unsigned long)handler, 0 } #define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int) -#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, __kernel_uid_t32) +#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, compat_uid_t) static struct ioctl_trans ioctl_translations[] = { /* List here explicitly which ioctl's need translation, @@ -3705,6 +3705,7 @@ COMPATIBLE_IOCTL(TIOCSSERIAL), COMPATIBLE_IOCTL(TIOCSERGETLSR), COMPATIBLE_IOCTL(TIOCSLTC), /* Big F */ +#if 0 COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO), COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO), COMPATIBLE_IOCTL(FBIOPAN_DISPLAY), @@ -3715,6 +3716,7 @@ COMPATIBLE_IOCTL(FBIOGET_CURSORSTATE), COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE), COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP), COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP), +#endif #if 0 COMPATIBLE_IOCTL(FBIOBLANK), #endif @@ -4391,10 +4393,12 @@ HANDLE_IOCTL(GIO_FONTX, do_fontx_ioctl), HANDLE_IOCTL(PIO_UNIMAP, do_unimap_ioctl), HANDLE_IOCTL(GIO_UNIMAP, do_unimap_ioctl), HANDLE_IOCTL(KDFONTOP, do_kdfontop_ioctl), +#if 0 HANDLE_IOCTL(FBIOGET_FSCREENINFO, do_fbioget_fscreeninfo_ioctl), HANDLE_IOCTL(FBIOGETCMAP, do_fbiogetcmap_ioctl), HANDLE_IOCTL(FBIOPUTCMAP, do_fbioputcmap_ioctl), #endif +#endif HANDLE_IOCTL(EXT2_IOC32_GETFLAGS, do_ext2_ioctl), HANDLE_IOCTL(EXT2_IOC32_SETFLAGS, do_ext2_ioctl), HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl), diff --git a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S index a91729af66e857d4733ccd5cb1a6947a021b275b..236111b5719bf74b21a28ce08507808526bdfd3a 100644 --- a/arch/ppc64/kernel/misc.S +++ b/arch/ppc64/kernel/misc.S @@ -398,46 +398,6 @@ _GLOBAL(_outsl_ns) bdnz 00b blr -/* - * Extended precision shifts - * - * R3/R4 has 64 bit value - * R5 has shift count - * result in R3/R4 - * - * ashrdi3: XXXYYY/ZZZAAA -> SSSXXX/YYYZZZ - * ashldi3: XXXYYY/ZZZAAA -> YYYZZZ/AAA000 - * lshrdi3: XXXYYY/ZZZAAA -> 000XXX/YYYZZZ - */ -/* MIKEC: These may no longer be needed...what does gcc expect ? */ - -_GLOBAL(__ashrdi3) - li r6,32 - sub r6,r6,r5 - slw r7,r3,r6 /* isolate YYY */ - srw r4,r4,r5 /* isolate ZZZ */ - or r4,r4,r7 /* YYYZZZ */ - sraw r3,r3,r5 /* SSSXXX */ - blr - -_GLOBAL(__ashldi3) - li r6,32 - sub r6,r6,r5 - srw r7,r4,r6 /* isolate ZZZ */ - slw r4,r4,r5 /* AAA000 */ - slw r3,r3,r5 /* YYY--- */ - or r3,r3,r7 /* YYYZZZ */ - blr - -_GLOBAL(__lshrdi3) - li r6,32 - sub r6,r6,r5 - slw r7,r3,r6 /* isolate YYY */ - srw r4,r4,r5 /* isolate ZZZ */ - or r4,r4,r7 /* YYYZZZ */ - srw r3,r3,r5 /* 000XXX */ - blr - _GLOBAL(abs) cmpi 0,r3,0 bge 10f @@ -551,7 +511,7 @@ _GLOBAL(sys_call_table32) .llong .sys_rmdir /* 40 */ .llong .sys_dup .llong .sys_pipe - .llong .sys32_times + .llong .compat_sys_times .llong .sys_ni_syscall /* old prof syscall */ .llong .sys_brk /* 45 */ .llong .sys_setgid @@ -614,9 +574,9 @@ _GLOBAL(sys_call_table32) .llong .sys32_syslog .llong .compat_sys_setitimer .llong .compat_sys_getitimer /* 105 */ - .llong .sys32_newstat - .llong .sys32_newlstat - .llong .sys32_newfstat + .llong .compat_sys_newstat + .llong .compat_sys_newlstat + .llong .compat_sys_newfstat .llong .sys_uname .llong .sys_ni_syscall /* 110 old iopl syscall */ .llong .sys_vhangup diff --git a/arch/ppc64/kernel/pSeries_pci.c b/arch/ppc64/kernel/pSeries_pci.c index 2796e420aaf1c464ef5c10b4c6369571c0c31d88..df3609a8c019f08124d8cb413f26ec80400453be 100644 --- a/arch/ppc64/kernel/pSeries_pci.c +++ b/arch/ppc64/kernel/pSeries_pci.c @@ -40,7 +40,6 @@ #include <asm/naca.h> #include <asm/pci_dma.h> -#include "xics.h" #include "open_pic.h" #include "pci.h" @@ -402,7 +401,7 @@ alloc_phb(struct device_node *dev, char *model, unsigned int addr_size_words) * Python ***************************************************************/ if (strstr(model, "Python")) { - unsigned long chip_regs; + void *chip_regs; volatile u32 *tmp, i; PPCDBG(PPCDBG_PHBINIT, "\tCreate python\n"); @@ -608,10 +607,6 @@ pSeries_pcibios_fixup(void) pci_read_irq_line(dev); PPCDBGCALL(PPCDBG_PHBINIT, dumpPci_Dev(dev) ); } - - if (naca->interrupt_controller == IC_PPC_XIC) { - xics_isa_init(); - } } /*********************************************************************** diff --git a/arch/ppc64/kernel/pci_dma.c b/arch/ppc64/kernel/pci_dma.c index d127758c84018bfe15427b6317d3b821672df48b..ac815895bf2ac897b1b88de23d8ff9ac9c00b5e1 100644 --- a/arch/ppc64/kernel/pci_dma.c +++ b/arch/ppc64/kernel/pci_dma.c @@ -147,6 +147,7 @@ static unsigned long __inline__ count_leading_zeros64( unsigned long x ) return lz; } +#ifdef CONFIG_PPC_ISERIES static void tce_build_iSeries(struct TceTable *tbl, long tcenum, unsigned long uaddr, int direction ) { @@ -180,7 +181,9 @@ static void tce_build_iSeries(struct TceTable *tbl, long tcenum, panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", setTceRc); } } +#endif +#ifdef CONFIG_PPC_PSERIES static void tce_build_pSeries(struct TceTable *tbl, long tcenum, unsigned long uaddr, int direction ) { @@ -199,8 +202,8 @@ static void tce_build_pSeries(struct TceTable *tbl, long tcenum, tce_addr = ((union Tce *)tbl->base) + tcenum; *tce_addr = (union Tce)tce.wholeTce; - } +#endif /* * Build a TceTable structure. This contains a multi-level bit map which @@ -548,6 +551,7 @@ static inline dma_addr_t get_tces( struct TceTable *tbl, unsigned order, void *p return retTce; } +#ifdef CONFIG_PPC_ISERIES static void tce_free_one_iSeries( struct TceTable *tbl, long tcenum ) { u64 set_tce_rc; @@ -560,7 +564,9 @@ static void tce_free_one_iSeries( struct TceTable *tbl, long tcenum ) panic("PCI_DMA: HvCallXm_setTce failed, Rc: 0x%lx\n", set_tce_rc); } +#endif +#ifdef CONFIG_PPC_PSERIES static void tce_free_one_pSeries( struct TceTable *tbl, long tcenum ) { union Tce tce; @@ -572,6 +578,7 @@ static void tce_free_one_pSeries( struct TceTable *tbl, long tcenum ) *tce_addr = (union Tce)tce.wholeTce; } +#endif static void tce_free(struct TceTable *tbl, dma_addr_t dma_addr, unsigned order, unsigned num_pages) @@ -609,6 +616,7 @@ static void tce_free(struct TceTable *tbl, dma_addr_t dma_addr, free_tce_range( tbl, free_tce, order ); } +#ifdef CONFIG_PPC_ISERIES void __init create_virtual_bus_tce_table(void) { struct TceTable *t; @@ -661,6 +669,7 @@ void __init create_virtual_bus_tce_table(void) } else printk( "Virtual Bus VIO TCE table failed.\n"); } +#endif void create_tce_tables_for_buses(struct list_head *bus_list) { @@ -842,6 +851,7 @@ static struct TceTable* findHwTceTable(struct TceTable * newTceTable ) static void getTceTableParmsiSeries(struct iSeries_Device_Node* DevNode, struct TceTable* newTceTable ) { +#ifdef CONFIG_PPC_ISERIES struct TceTableManagerCB* pciBusTceTableParms = (struct TceTableManagerCB*)kmalloc( sizeof(struct TceTableManagerCB), GFP_KERNEL ); if(pciBusTceTableParms == NULL) panic("PCI_DMA: TCE Table Allocation failed."); @@ -872,6 +882,7 @@ static void getTceTableParmsiSeries(struct iSeries_Device_Node* DevNode, newTceTable->tceType = TCE_PCI; kfree(pciBusTceTableParms); +#endif } static void getTceTableParmsPSeries(struct pci_controller *phb, @@ -1440,15 +1451,19 @@ void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, } #endif +#ifdef CONFIG_PPC_PSERIES /* These are called very early. */ void tce_init_pSeries(void) { ppc_md.tce_build = tce_build_pSeries; ppc_md.tce_free_one = tce_free_one_pSeries; } +#endif +#ifdef CONFIG_PPC_ISERIES void tce_init_iSeries(void) { ppc_md.tce_build = tce_build_iSeries; ppc_md.tce_free_one = tce_free_one_iSeries; } +#endif diff --git a/arch/ppc64/kernel/prom.c b/arch/ppc64/kernel/prom.c index 764ecb508ca79fc89f37691b6c9039052d2d2048..ebde1f0c29204268d833872ec232d363a2ab9ddd 100644 --- a/arch/ppc64/kernel/prom.c +++ b/arch/ppc64/kernel/prom.c @@ -15,10 +15,6 @@ * 2 of the License, or (at your option) any later version. */ -#if 0 -#define DEBUG_YABOOT -#endif - #if 0 #define DEBUG_PROM #endif @@ -32,22 +28,6 @@ #include <linux/threads.h> #include <linux/spinlock.h> #include <linux/blk.h> - -#ifdef DEBUG_YABOOT -#define call_yaboot(FUNC,...) \ - do { \ - if (FUNC) { \ - struct prom_t *_prom = PTRRELOC(&prom); \ - unsigned long prom_entry = _prom->entry;\ - _prom->entry = (unsigned long)(FUNC); \ - enter_prom(__VA_ARGS__); \ - _prom->entry = prom_entry; \ - } \ - } while (0) -#else -#define call_yaboot(FUNC,...) do { ; } while (0) -#endif - #include <linux/types.h> #include <linux/pci.h> #include <asm/prom.h> @@ -65,16 +45,14 @@ #include <asm/bitops.h> #include <asm/naca.h> #include <asm/pci.h> -#include "open_pic.h" #include <asm/bootinfo.h> #include <asm/ppcdebug.h> +#include "open_pic.h" #ifdef CONFIG_FB #include <asm/linux_logo.h> #endif -extern char _end[]; - /* * prom_init() is called very early on, before the kernel text * and data have been mapped to KERNELBASE. At this point the code @@ -131,12 +109,7 @@ struct pci_intr_map { typedef unsigned long interpret_func(struct device_node *, unsigned long, int, int); -#if 0 static interpret_func interpret_pci_props; -#endif -static unsigned long interpret_pci_props(struct device_node *, unsigned long, - int, int); - static interpret_func interpret_isa_props; static interpret_func interpret_root_props; @@ -156,9 +129,6 @@ struct prom_t prom = { 0, /* version */ 32, /* encode_phys_size */ 0 /* bi_rec pointer */ -#ifdef DEBUG_YABOOT - ,NULL /* yaboot */ -#endif }; @@ -170,9 +140,6 @@ extern struct rtas_t rtas; extern unsigned long klimit; extern unsigned long embedded_sysmap_end; extern struct lmb lmb; -#ifdef CONFIG_MSCHUNKS -extern struct msChunks msChunks; -#endif /* CONFIG_MSCHUNKS */ #define MAX_PHB 16 * 3 // 16 Towers * 3 PHBs/tower struct _of_tce_table of_tce_table[MAX_PHB + 1] = {{0, 0, 0}}; @@ -203,12 +170,6 @@ static struct bi_record * prom_bi_rec_verify(struct bi_record *); static unsigned long prom_bi_rec_reserve(unsigned long); static struct device_node *find_phandle(phandle); -#ifdef CONFIG_MSCHUNKS -static unsigned long prom_initialize_mschunks(unsigned long); -#ifdef DEBUG_PROM -void prom_dump_mschunks_mapping(void); -#endif /* DEBUG_PROM */ -#endif /* CONFIG_MSCHUNKS */ #ifdef DEBUG_PROM void prom_dump_lmb(void); #endif @@ -217,8 +178,6 @@ extern unsigned long reloc_offset(void); extern void enter_prom(void *dummy,...); -void cacheable_memzero(void *, unsigned int); - extern char cmd_line[512]; /* XXX */ unsigned long dev_tree_size; @@ -545,20 +504,6 @@ prom_initialize_lmb(unsigned long mem) unsigned long lmb_base, lmb_size; unsigned long num_regs, bytes_per_reg = (_prom->encode_phys_size*2)/8; -#ifdef CONFIG_MSCHUNKS - unsigned long max_addr = 0; -#if 1 - /* Fix me: 630 3G-4G IO hack here... -Peter (PPPBBB) */ - unsigned long io_base = 3UL<<30; - unsigned long io_size = 1UL<<30; - unsigned long have_630 = 1; /* assume we have a 630 */ - -#else - unsigned long io_base = <real io base here>; - unsigned long io_size = <real io size here>; -#endif -#endif /* CONFIG_MSCHUNKS */ - lmb_init(); for (node = 0; prom_next_node(&node); ) { @@ -581,42 +526,17 @@ prom_initialize_lmb(unsigned long mem) lmb_size = reg.addr64[i].size; } -#ifdef CONFIG_MSCHUNKS - if ( lmb_addrs_overlap(lmb_base,lmb_size, - io_base,io_size) ) { - /* If we really have dram here, then we don't - * have a 630! -Peter - */ - have_630 = 0; - } -#endif /* CONFIG_MSCHUNKS */ if ( lmb_add(lmb_base, lmb_size) < 0 ) prom_print(RELOC("Too many LMB's, discarding this one...\n")); -#ifdef CONFIG_MSCHUNKS - else if ( max_addr < (lmb_base+lmb_size-1) ) - max_addr = lmb_base+lmb_size-1; -#endif /* CONFIG_MSCHUNKS */ } } -#ifdef CONFIG_MSCHUNKS - if ( have_630 && lmb_addrs_overlap(0,max_addr,io_base,io_size) ) - lmb_add_io(io_base, io_size); -#endif /* CONFIG_MSCHUNKS */ - lmb_analyze(); #ifdef DEBUG_PROM prom_dump_lmb(); #endif /* DEBUG_PROM */ -#ifdef CONFIG_MSCHUNKS - mem = prom_initialize_mschunks(mem); -#ifdef DEBUG_PROM - prom_dump_mschunks_mapping(); -#endif /* DEBUG_PROM */ -#endif /* CONFIG_MSCHUNKS */ - return mem; } @@ -718,96 +638,6 @@ unsigned long prom_strtoul(const char *cp) return result; } - -#ifdef CONFIG_MSCHUNKS -static unsigned long -prom_initialize_mschunks(unsigned long mem) -{ - unsigned long offset = reloc_offset(); - struct lmb *_lmb = PTRRELOC(&lmb); - struct msChunks *_msChunks = PTRRELOC(&msChunks); - unsigned long i, pchunk = 0; - unsigned long addr_range = _lmb->memory.size + _lmb->memory.iosize; - unsigned long chunk_size = _lmb->memory.lcd_size; - - - mem = msChunks_alloc(mem, addr_range / chunk_size, chunk_size); - - /* First create phys -> abs mapping for memory/dram */ - for (i=0; i < _lmb->memory.cnt ;i++) { - unsigned long base = _lmb->memory.region[i].base; - unsigned long size = _lmb->memory.region[i].size; - unsigned long achunk = addr_to_chunk(base); - unsigned long end_achunk = addr_to_chunk(base+size); - - if(_lmb->memory.region[i].type != LMB_MEMORY_AREA) - continue; - - _lmb->memory.region[i].physbase = chunk_to_addr(pchunk); - for (; achunk < end_achunk ;) { - PTRRELOC(_msChunks->abs)[pchunk++] = achunk++; - } - } - -#ifdef CONFIG_MSCHUNKS - /* Now create phys -> abs mapping for IO */ - for (i=0; i < _lmb->memory.cnt ;i++) { - unsigned long base = _lmb->memory.region[i].base; - unsigned long size = _lmb->memory.region[i].size; - unsigned long achunk = addr_to_chunk(base); - unsigned long end_achunk = addr_to_chunk(base+size); - - if(_lmb->memory.region[i].type != LMB_IO_AREA) - continue; - - _lmb->memory.region[i].physbase = chunk_to_addr(pchunk); - for (; achunk < end_achunk ;) { - PTRRELOC(_msChunks->abs)[pchunk++] = achunk++; - } - } -#endif /* CONFIG_MSCHUNKS */ - - return mem; -} - -#ifdef DEBUG_PROM -void -prom_dump_mschunks_mapping(void) -{ - unsigned long offset = reloc_offset(); - struct msChunks *_msChunks = PTRRELOC(&msChunks); - unsigned long chunk; - - prom_print(RELOC("\nprom_dump_mschunks_mapping:\n")); - prom_print(RELOC(" msChunks.num_chunks = 0x")); - prom_print_hex(_msChunks->num_chunks); - prom_print_nl(); - prom_print(RELOC(" msChunks.chunk_size = 0x")); - prom_print_hex(_msChunks->chunk_size); - prom_print_nl(); - prom_print(RELOC(" msChunks.chunk_shift = 0x")); - prom_print_hex(_msChunks->chunk_shift); - prom_print_nl(); - prom_print(RELOC(" msChunks.chunk_mask = 0x")); - prom_print_hex(_msChunks->chunk_mask); - prom_print_nl(); - prom_print(RELOC(" msChunks.abs = 0x")); - prom_print_hex(_msChunks->abs); - prom_print_nl(); - - prom_print(RELOC(" msChunks mapping:\n")); - for(chunk=0; chunk < _msChunks->num_chunks ;chunk++) { - prom_print(RELOC(" phys 0x")); - prom_print_hex(chunk); - prom_print(RELOC(" -> abs 0x")); - prom_print_hex(PTRRELOC(_msChunks->abs)[chunk]); - prom_print_nl(); - } - -} -#endif /* DEBUG_PROM */ -#endif /* CONFIG_MSCHUNKS */ - #ifdef DEBUG_PROM void prom_dump_lmb(void) @@ -1213,26 +1043,28 @@ prom_hold_cpus(unsigned long mem) unsigned long __init prom_init(unsigned long r3, unsigned long r4, unsigned long pp, - unsigned long r6, unsigned long r7, yaboot_debug_t *yaboot) + unsigned long r6, unsigned long r7) { - int chrp = 0; unsigned long mem; - ihandle prom_mmu, prom_op, prom_root, prom_cpu; + ihandle prom_root, prom_cpu; phandle cpu_pkg; unsigned long offset = reloc_offset(); long l; char *p, *d; unsigned long phys; u32 getprop_rval; - struct naca_struct *_naca = RELOC(naca); + struct naca_struct *_naca = RELOC(naca); struct paca_struct *_xPaca = PTRRELOC(&paca[0]); struct prom_t *_prom = PTRRELOC(&prom); /* Default machine type. */ _naca->platform = PLATFORM_PSERIES; + +#if 0 /* Reset klimit to take into account the embedded system map */ if (RELOC(embedded_sysmap_end)) RELOC(klimit) = __va(PAGE_ALIGN(RELOC(embedded_sysmap_end))); +#endif /* Get a handle to the prom entry point before anything else */ _prom->entry = pp; @@ -1241,33 +1073,10 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp, RELOC(klimit) = PTRUNRELOC((unsigned long)_prom->bi_recs + _prom->bi_recs->data[1]); } -#ifdef DEBUG_YABOOT - call_yaboot(yaboot->dummy,offset>>32,offset&0xffffffff); - call_yaboot(yaboot->printf, RELOC("offset = 0x%08x%08x\n"), LONG_MSW(offset), LONG_LSW(offset)); -#endif - - /* Default */ - phys = KERNELBASE - offset; - -#ifdef DEBUG_YABOOT - call_yaboot(yaboot->printf, RELOC("phys = 0x%08x%08x\n"), LONG_MSW(phys), LONG_LSW(phys)); -#endif - - -#ifdef DEBUG_YABOOT - _prom->yaboot = yaboot; - call_yaboot(yaboot->printf, RELOC("pp = 0x%08x%08x\n"), LONG_MSW(pp), LONG_LSW(pp)); - call_yaboot(yaboot->printf, RELOC("prom = 0x%08x%08x\n"), LONG_MSW(_prom->entry), LONG_LSW(_prom->entry)); -#endif - /* First get a handle for the stdout device */ _prom->chosen = (ihandle)call_prom(RELOC("finddevice"), 1, 1, RELOC("/chosen")); -#ifdef DEBUG_YABOOT - call_yaboot(yaboot->printf, RELOC("prom->chosen = 0x%08x%08x\n"), LONG_MSW(_prom->chosen), LONG_LSW(_prom->chosen)); -#endif - if ((long)_prom->chosen <= 0) prom_exit(); @@ -1278,22 +1087,7 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp, _prom->stdout = (ihandle)(unsigned long)getprop_rval; -#ifdef DEBUG_YABOOT - if (_prom->stdout == 0) { - call_yaboot(yaboot->printf, RELOC("prom->stdout = 0x%08x%08x\n"), LONG_MSW(_prom->stdout), LONG_LSW(_prom->stdout)); - } - - call_yaboot(yaboot->printf, RELOC("prom->stdout = 0x%08x%08x\n"), LONG_MSW(_prom->stdout), LONG_LSW(_prom->stdout)); -#endif - -#ifdef DEBUG_YABOOT - call_yaboot(yaboot->printf, RELOC("Location: 0x11\n")); -#endif - mem = RELOC(klimit) - offset; -#ifdef DEBUG_YABOOT - call_yaboot(yaboot->printf, RELOC("Location: 0x11b\n")); -#endif /* Get the full OF pathname of the stdout device */ p = (char *) mem; @@ -1311,34 +1105,6 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp, } _prom->encode_phys_size = (getprop_rval==1) ? 32 : 64; -#ifdef DEBUG_PROM - prom_print(RELOC("DRENG: Detect OF version...\n")); -#endif - /* Find the OF version */ - prom_op = (ihandle)call_prom(RELOC("finddevice"), 1, 1, RELOC("/openprom")); - if (prom_op != (ihandle)-1) { - char model[64]; - long sz; - sz = (long)call_prom(RELOC("getprop"), 4, 1, prom_op, - RELOC("model"), model, 64); - if (sz > 0) { - char *c; - /* hack to skip the ibm chrp firmware # */ - if ( strncmp(model,RELOC("IBM"),3) ) { - for (c = model; *c; c++) - if (*c >= '0' && *c <= '9') { - _prom->version = *c - '0'; - break; - } - } - else - chrp = 1; - } - } - if (_prom->version >= 3) - prom_print(RELOC("OF Version 3 detected.\n")); - - /* Determine which cpu is actually running right _now_ */ if ((long)call_prom(RELOC("getprop"), 4, 1, _prom->chosen, RELOC("cpu"), &getprop_rval, @@ -1408,35 +1174,9 @@ prom_init(unsigned long r3, unsigned long r4, unsigned long pp, if (_naca->platform == PLATFORM_PSERIES) prom_initialize_tce_table(); - if ((long) call_prom(RELOC("getprop"), 4, 1, - _prom->chosen, - RELOC("mmu"), - &getprop_rval, - sizeof(getprop_rval)) <= 0) { - prom_print(RELOC(" no MMU found\n")); - prom_exit(); - } - - /* We assume the phys. address size is 3 cells */ - RELOC(prom_mmu) = (ihandle)(unsigned long)getprop_rval; - - if ((long)call_prom(RELOC("call-method"), 4, 4, - RELOC("translate"), - prom_mmu, - (void *)(KERNELBASE - offset), - (void *)1) != 0) { - prom_print(RELOC(" (translate failed) ")); - } else { - prom_print(RELOC(" (translate ok) ")); - phys = (unsigned long)_prom->args.rets[3]; - } - - /* If OpenFirmware version >= 3, then use quiesce call */ - if (_prom->version >= 3) { - prom_print(RELOC("Calling quiesce ...\n")); - call_prom(RELOC("quiesce"), 0, 0); - phys = KERNELBASE - offset; - } + prom_print(RELOC("Calling quiesce ...\n")); + call_prom(RELOC("quiesce"), 0, 0); + phys = KERNELBASE - offset; prom_print(RELOC("returning from prom_init\n")); return phys; @@ -1527,14 +1267,14 @@ check_display(unsigned long mem) RELOC(default_colors)[i*3+2]) != 0) break; -#ifdef CONFIG_FB +#ifdef CONFIG_FRAMEBUFFER_CONSOLE for (i = 0; i < LINUX_LOGO_COLORS; i++) if (prom_set_color(ih, i + 32, RELOC(linux_logo_red)[i], RELOC(linux_logo_green)[i], RELOC(linux_logo_blue)[i]) != 0) break; -#endif /* CONFIG_FB */ +#endif /* CONFIG_FRAMEBUFFER_CONSOLE */ /* * If this display is the device that OF is using for stdout, diff --git a/arch/ppc64/kernel/rtc.c b/arch/ppc64/kernel/rtc.c index 5ace02abc1bc2315efb19fec2aab0d20ac388c98..72e65910a44236832e75cbc3d9e9119dcecda6ca 100644 --- a/arch/ppc64/kernel/rtc.c +++ b/arch/ppc64/kernel/rtc.c @@ -257,6 +257,7 @@ static int rtc_read_proc(char *page, char **start, off_t off, return len; } +#ifdef CONFIG_PPC_ISERIES /* * Get the RTC from the virtual service processor * This requires flowing LpEvents to the primary partition @@ -270,60 +271,6 @@ void iSeries_get_rtc_time(struct rtc_time *rtc_tm) rtc_tm->tm_mon--; } - -void pSeries_get_rtc_time(struct rtc_time *rtc_tm) -{ - unsigned long ret[8]; - int error; - int count; - - /* - * error -2 is clock busy, we keep retrying a few times to see - * if it will come good -- paulus - */ - count = 0; - do { - error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret); - } while (error == -2 && ++count < 1000); - - if (error != 0) { - printk(KERN_WARNING "error: reading the clock failed (%d)\n", - error); - return; - } - - rtc_tm->tm_sec = ret[5]; - rtc_tm->tm_min = ret[4]; - rtc_tm->tm_hour = ret[3]; - rtc_tm->tm_mday = ret[2]; - rtc_tm->tm_mon = ret[1] - 1; - rtc_tm->tm_year = ret[0] - 1900; -} - -int pSeries_set_rtc_time(struct rtc_time *tm) -{ - int error; - int count; - - /* - * error -2 is clock busy, we keep retrying a few times to see - * if it will come good -- paulus - */ - count = 0; - do { - error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL, - tm->tm_year + 1900, tm->tm_mon + 1, - tm->tm_mday, tm->tm_hour, tm->tm_min, - tm->tm_sec, 0); - } while (error == -2 && ++count < 1000); - - if (error != 0) - printk(KERN_WARNING "error: setting the clock failed (%d)\n", - error); - - return 0; -} - /* * Set the RTC in the virtual service processor * This requires flowing LpEvents to the primary partition @@ -379,3 +326,59 @@ void iSeries_get_boot_time(struct rtc_time *tm) tm->tm_year -= 1900; tm->tm_mon -= 1; } +#endif + +#ifdef CONFIG_PPC_PSERIES +void pSeries_get_rtc_time(struct rtc_time *rtc_tm) +{ + unsigned long ret[8]; + int error; + int count; + + /* + * error -2 is clock busy, we keep retrying a few times to see + * if it will come good -- paulus + */ + count = 0; + do { + error = rtas_call(rtas_token("get-time-of-day"), 0, 8, (void *)&ret); + } while (error == -2 && ++count < 1000); + + if (error != 0) { + printk(KERN_WARNING "error: reading the clock failed (%d)\n", + error); + return; + } + + rtc_tm->tm_sec = ret[5]; + rtc_tm->tm_min = ret[4]; + rtc_tm->tm_hour = ret[3]; + rtc_tm->tm_mday = ret[2]; + rtc_tm->tm_mon = ret[1] - 1; + rtc_tm->tm_year = ret[0] - 1900; +} + +int pSeries_set_rtc_time(struct rtc_time *tm) +{ + int error; + int count; + + /* + * error -2 is clock busy, we keep retrying a few times to see + * if it will come good -- paulus + */ + count = 0; + do { + error = rtas_call(rtas_token("set-time-of-day"), 7, 1, NULL, + tm->tm_year + 1900, tm->tm_mon + 1, + tm->tm_mday, tm->tm_hour, tm->tm_min, + tm->tm_sec, 0); + } while (error == -2 && ++count < 1000); + + if (error != 0) + printk(KERN_WARNING "error: setting the clock failed (%d)\n", + error); + + return 0; +} +#endif diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c index 38b1c3c64b3f1976bdce42d8917c012b193a6139..2472fcc916e485e294a21b2a4d351c45f451c7e1 100644 --- a/arch/ppc64/kernel/setup.c +++ b/arch/ppc64/kernel/setup.c @@ -153,14 +153,18 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5, debugger_dabr_match = xmon_dabr_match; #endif +#ifdef CONFIG_PPC_ISERIES /* pSeries systems are identified in prom.c via OF. */ if ( itLpNaca.xLparInstalled == 1 ) naca->platform = PLATFORM_ISERIES_LPAR; +#endif switch (naca->platform) { +#ifdef CONFIG_PPC_ISERIES case PLATFORM_ISERIES_LPAR: iSeries_init_early(); break; +#endif #ifdef CONFIG_PPC_PSERIES case PLATFORM_PSERIES: @@ -215,9 +219,11 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5, mm_init_ppc64(); switch (naca->platform) { +#ifdef CONFIG_PPC_ISERIES case PLATFORM_ISERIES_LPAR: iSeries_init(); break; +#endif default: /* The following relies on the device tree being */ /* fully configured. */ diff --git a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c index 7db75666d20549d2d06620ec62e64a179ce0d491..0718fa5e49a649146db297ed7f90941db88e4cab 100644 --- a/arch/ppc64/kernel/smp.c +++ b/arch/ppc64/kernel/smp.c @@ -86,6 +86,7 @@ static inline void set_tb(unsigned int upper, unsigned int lower) mttbl(lower); } +#ifdef CONFIG_PPC_ISERIES void iSeries_smp_message_recv( struct pt_regs * regs ) { int cpu = smp_processor_id(); @@ -117,7 +118,6 @@ static void smp_iSeries_message_pass(int target, int msg, unsigned long data, in } } -#ifdef CONFIG_PPC_ISERIES static int smp_iSeries_numProcs(void) { unsigned np, i; @@ -132,7 +132,6 @@ static int smp_iSeries_numProcs(void) } return np; } -#endif static int smp_iSeries_probe(void) { @@ -189,13 +188,12 @@ void __init smp_init_iSeries(void) smp_ops->probe = smp_iSeries_probe; smp_ops->kick_cpu = smp_iSeries_kick_cpu; smp_ops->setup_cpu = smp_iSeries_setup_cpu; -#ifdef CONFIG_PPC_ISERIES #warning fix for iseries naca->processorCount = smp_iSeries_numProcs(); -#endif } +#endif - +#ifdef CONFIG_PPC_PSERIES static void smp_openpic_message_pass(int target, int msg, unsigned long data, int wait) { @@ -257,6 +255,7 @@ smp_kick_cpu(int nr) */ paca[nr].xProcStart = 1; } +#endif static void __init smp_space_timers(unsigned int max_cpus) { @@ -273,6 +272,7 @@ static void __init smp_space_timers(unsigned int max_cpus) } } +#ifdef CONFIG_PPC_PSERIES static void __devinit pSeries_setup_cpu(int cpu) { if (OpenPIC_Addr) { @@ -361,6 +361,7 @@ void __init smp_init_pSeries(void) smp_ops->kick_cpu = smp_kick_cpu; smp_ops->setup_cpu = pSeries_setup_cpu; } +#endif void smp_local_timer_interrupt(struct pt_regs * regs) { diff --git a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c index 57c86dc1f4e36bb615b2c52a1d684f65b8b463e5..55a7b6e2edfb5ed49c13add6a1fd728de0dedf34 100644 --- a/arch/ppc64/kernel/sys_ppc32.c +++ b/arch/ppc64/kernel/sys_ppc32.c @@ -300,16 +300,16 @@ asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg struct ncp_mount_data32_v3 { int version; unsigned int ncp_fd; - __kernel_uid_t32 mounted_uid; - __kernel_pid_t32 wdog_pid; + compat_uid_t mounted_uid; + compat_pid_t wdog_pid; unsigned char mounted_vol[NCP_VOLNAME_LEN + 1]; unsigned int time_out; unsigned int retry_count; unsigned int flags; - __kernel_uid_t32 uid; - __kernel_gid_t32 gid; - __kernel_mode_t32 file_mode; - __kernel_mode_t32 dir_mode; + compat_uid_t uid; + compat_gid_t gid; + compat_mode_t file_mode; + compat_mode_t dir_mode; }; struct ncp_mount_data32_v4 { @@ -380,11 +380,11 @@ static void *do_ncp_super_data_conv(void *raw_data) struct smb_mount_data32 { int version; - __kernel_uid_t32 mounted_uid; - __kernel_uid_t32 uid; - __kernel_gid_t32 gid; - __kernel_mode_t32 file_mode; - __kernel_mode_t32 dir_mode; + compat_uid_t mounted_uid; + compat_uid_t uid; + compat_gid_t gid; + compat_mode_t file_mode; + compat_mode_t dir_mode; }; static void *do_smb_super_data_conv(void *raw_data) @@ -802,10 +802,13 @@ asmlinkage int ppc32_select(u32 n, u32* inp, u32* outp, u32* exp, u32 tvp_x) return sys32_select((int)n, inp, outp, exp, tvp_x); } -static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf) +int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) { int err; + if (stat->size > MAX_NON_LFS) + return -EOVERFLOW; + err = put_user(stat->dev, &statbuf->st_dev); err |= put_user(stat->ino, &statbuf->st_ino); err |= put_user(stat->mode, &statbuf->st_mode); @@ -813,8 +816,6 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf) err |= put_user(stat->uid, &statbuf->st_uid); err |= put_user(stat->gid, &statbuf->st_gid); err |= put_user(stat->rdev, &statbuf->st_rdev); - if (stat->size > MAX_NON_LFS) - return -EOVERFLOW; err |= put_user(stat->size, &statbuf->st_size); err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); err |= put_user(0, &statbuf->__unused1); @@ -830,39 +831,6 @@ static int cp_new_stat32(struct kstat *stat, struct stat32 *statbuf) return err; } -asmlinkage long sys32_newstat(char* filename, struct stat32* statbuf) -{ - struct kstat stat; - int error = vfs_stat(filename, &stat); - - if (!error) - error = cp_new_stat32(&stat, statbuf); - - return error; -} - -asmlinkage long sys32_newlstat(char * filename, struct stat32 *statbuf) -{ - struct kstat stat; - int error = vfs_lstat(filename, &stat); - - if (!error) - error = cp_new_stat32(&stat, statbuf); - - return error; -} - -asmlinkage long sys32_newfstat(unsigned int fd, struct stat32 *statbuf) -{ - struct kstat stat; - int error = vfs_fstat(fd, &stat); - - if (!error) - error = cp_new_stat32(&stat, statbuf); - - return error; -} - static inline int put_statfs (struct statfs32 *ubuf, struct statfs *kbuf) { int err; @@ -1492,27 +1460,27 @@ struct nfsctl_client32 { struct nfsctl_export32 { s8 ex32_client[NFSCLNT_IDMAX+1]; s8 ex32_path[NFS_MAXPATHLEN+1]; - __kernel_dev_t32 ex32_dev; - __kernel_ino_t32 ex32_ino; + compat_dev_t ex32_dev; + compat_ino_t ex32_ino; s32 ex32_flags; - __kernel_uid_t32 ex32_anon_uid; - __kernel_gid_t32 ex32_anon_gid; + compat_uid_t ex32_anon_uid; + compat_gid_t ex32_anon_gid; }; struct nfsctl_uidmap32 { u32 ug32_ident; /* char * */ - __kernel_uid_t32 ug32_uidbase; + compat_uid_t ug32_uidbase; s32 ug32_uidlen; u32 ug32_udimap; /* uid_t * */ - __kernel_uid_t32 ug32_gidbase; + compat_uid_t ug32_gidbase; s32 ug32_gidlen; u32 ug32_gdimap; /* gid_t * */ }; struct nfsctl_fhparm32 { struct sockaddr gf32_addr; - __kernel_dev_t32 gf32_dev; - __kernel_ino_t32 gf32_ino; + compat_dev_t gf32_dev; + compat_ino_t gf32_ino; s32 gf32_version; }; @@ -1645,7 +1613,7 @@ static int nfs_uud32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) return -ENOMEM; for(i = 0; i < karg->ca_umap.ug_uidlen; i++) err |= __get_user(karg->ca_umap.ug_udimap[i], - &(((__kernel_uid_t32 *)A(uaddr))[i])); + &(((compat_uid_t *)A(uaddr))[i])); err |= __get_user(karg->ca_umap.ug_gidbase, &arg32->ca32_umap.ug32_gidbase); err |= __get_user(karg->ca_umap.ug_uidlen, @@ -1659,7 +1627,7 @@ static int nfs_uud32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32) return -ENOMEM; for(i = 0; i < karg->ca_umap.ug_gidlen; i++) err |= __get_user(karg->ca_umap.ug_gdimap[i], - &(((__kernel_gid_t32 *)A(uaddr))[i])); + &(((compat_gid_t *)A(uaddr))[i])); return err; } @@ -2076,37 +2044,6 @@ asmlinkage long sys32_settimeofday(struct compat_timeval *tv, struct timezone *t } -struct tms32 { - __kernel_clock_t32 tms_utime; - __kernel_clock_t32 tms_stime; - __kernel_clock_t32 tms_cutime; - __kernel_clock_t32 tms_cstime; -}; - -extern asmlinkage long sys_times(struct tms * tbuf); - -asmlinkage long sys32_times(struct tms32 *tbuf) -{ - struct tms t; - long ret; - mm_segment_t old_fs = get_fs (); - int err; - - set_fs (KERNEL_DS); - ret = sys_times(tbuf ? &t : NULL); - set_fs (old_fs); - if (tbuf) { - err = put_user (t.tms_utime, &tbuf->tms_utime); - err |= __put_user (t.tms_stime, &tbuf->tms_stime); - err |= __put_user (t.tms_cutime, &tbuf->tms_cutime); - err |= __put_user (t.tms_cstime, &tbuf->tms_cstime); - if (err) - ret = -EFAULT; - } - - return ret; -} - struct msgbuf32 { s32 mtype; char mtext[1]; }; struct semid_ds32 { @@ -2159,8 +2096,8 @@ struct msqid64_ds32 { unsigned int msg_cbytes; unsigned int msg_qnum; unsigned int msg_qbytes; - __kernel_pid_t32 msg_lspid; - __kernel_pid_t32 msg_lrpid; + compat_pid_t msg_lspid; + compat_pid_t msg_lrpid; unsigned int __unused4; unsigned int __unused5; }; @@ -2189,8 +2126,8 @@ struct shmid64_ds32 { compat_time_t shm_ctime; unsigned int __unused4; compat_size_t shm_segsz; - __kernel_pid_t32 shm_cpid; - __kernel_pid_t32 shm_lpid; + compat_pid_t shm_cpid; + compat_pid_t shm_lpid; unsigned int shm_nattch; unsigned int __unused5; unsigned int __unused6; @@ -2712,7 +2649,7 @@ extern asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t* offset, siz * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode) * and the register representation of a signed int (msr in 64-bit mode) is performed. */ -asmlinkage long sys32_sendfile(u32 out_fd, u32 in_fd, __kernel_off_t32* offset, u32 count) +asmlinkage long sys32_sendfile(u32 out_fd, u32 in_fd, compat_off_t* offset, u32 count) { mm_segment_t old_fs = get_fs(); int ret; @@ -4296,7 +4233,7 @@ asmlinkage long sys32_time(compat_time_t* tloc) extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_setaffinity(__kernel_pid_t32 pid, unsigned int len, +asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -4320,7 +4257,7 @@ asmlinkage int sys32_sched_setaffinity(__kernel_pid_t32 pid, unsigned int len, extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_getaffinity(__kernel_pid_t32 pid, unsigned int len, +asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; diff --git a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c index fa5816bc5bba463e46d44fd59dfbfe812f9e782e..4ab5eb9916fd28863e6e5582d3a80baeaf0793a6 100644 --- a/arch/ppc64/kernel/time.c +++ b/arch/ppc64/kernel/time.c @@ -301,9 +301,11 @@ int timer_interrupt(struct pt_regs * regs) next_dec = lpaca->default_decr; set_dec(next_dec); +#ifdef CONFIG_PPC_ISERIES lpq = lpaca->lpQueuePtr; if (lpq && ItLpQueue_isLpIntPending(lpq)) lpEvent_count += ItLpQueue_process(lpq, regs); +#endif irq_exit(); @@ -458,9 +460,11 @@ void __init time_init(void) ppc_md.calibrate_decr(); - if ( ! piranha_simulator ) { +#ifdef CONFIG_PPC_ISERIES + if (!piranha_simulator) +#endif ppc_md.get_boot_time(&tm); - } + write_lock_irqsave(&xtime_lock, flags); xtime.tv_sec = mktime(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); diff --git a/arch/ppc64/kernel/xics.c b/arch/ppc64/kernel/xics.c index 477580671eb57f02d5447fb2a8b62b9edb27d3ae..7110dd65ef78fa234149d259042b27a2df9c32c4 100644 --- a/arch/ppc64/kernel/xics.c +++ b/arch/ppc64/kernel/xics.c @@ -22,7 +22,7 @@ #include <asm/naca.h> #include <asm/rtas.h> #include "i8259.h" -#include "xics.h" +#include <asm/xics.h> #include <asm/ppcdebug.h> #include <asm/machdep.h> @@ -430,15 +430,6 @@ xics_init_IRQ( void ) ppc64_boot_msg(0x21, "XICS Done"); } -void xics_isa_init(void) -{ - return; - if (request_irq(xics_irq_8259_cascade + XICS_IRQ_OFFSET, no_action, - 0, "8259 cascade", 0)) - printk(KERN_ERR "xics_init_IRQ: couldn't get 8259 cascade\n"); - i8259_init(); -} - void xics_set_affinity(unsigned int virq, unsigned long cpumask) { irq_desc_t *desc = irq_desc + virq; diff --git a/arch/ppc64/lib/Makefile b/arch/ppc64/lib/Makefile index ee78c4aba382329b4b879d85e369f8bb90f58638..441c4f989386ed352525e0b65231264939b839f3 100644 --- a/arch/ppc64/lib/Makefile +++ b/arch/ppc64/lib/Makefile @@ -2,7 +2,9 @@ # Makefile for ppc64-specific library files.. # -export-objs := dec_and_lock.o +L_TARGET = lib.a -obj-y := checksum.o dec_and_lock.o string.o strcase.o copypage.o \ - memcpy.o copyuser.o +export-objs := dec_and_lock.o + +obj-y := checksum.o dec_and_lock.o string.o strcase.o +obj-y += copypage.o memcpy.o copyuser.o diff --git a/arch/ppc64/mm/Makefile b/arch/ppc64/mm/Makefile index 1c37b9024c0a0b9f1fb084c82eb60f250556ffa0..19679827f1e0e9db5ba8090effd6806f7fd26054 100644 --- a/arch/ppc64/mm/Makefile +++ b/arch/ppc64/mm/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux ppc-specific parts of the memory manager. # -EXTRA_CFLAGS = -mno-minimal-toc +EXTRA_CFLAGS += -mno-minimal-toc -obj-y := fault.o init.o extable.o imalloc.o +obj-y := fault.o init.o extable.o imalloc.o obj-$(CONFIG_DISCONTIGMEM) += numa.o diff --git a/arch/ppc64/oprofile/Makefile b/arch/ppc64/oprofile/Makefile index 191180628bca2857926b28e74f2344c23962e0b4..b3a71ef1c80c6834f15be7c3706cc102fc316850 100644 --- a/arch/ppc64/oprofile/Makefile +++ b/arch/ppc64/oprofile/Makefile @@ -1,8 +1,8 @@ obj-$(CONFIG_OPROFILE) += oprofile.o -DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \ +DRIVER_OBJS := $(addprefix ../../../drivers/oprofile/, \ oprof.o cpu_buffer.o buffer_sync.o \ event_buffer.o oprofile_files.o \ oprofilefs.o oprofile_stats.o ) -oprofile-y := $(DRIVER_OBJS) init.o timer_int.o +oprofile-y := $(DRIVER_OBJS) init.o timer_int.o diff --git a/arch/ppc64/xmon/Makefile b/arch/ppc64/xmon/Makefile index bb90495aaf9bb482d53dc1ca6158c69a63a35f80..fb21a7088d3ec12087cf2b4fca0317066bd2de96 100644 --- a/arch/ppc64/xmon/Makefile +++ b/arch/ppc64/xmon/Makefile @@ -1,5 +1,5 @@ # Makefile for xmon -EXTRA_CFLAGS = -mno-minimal-toc +EXTRA_CFLAGS += -mno-minimal-toc -obj-y := start.o xmon.o ppc-dis.o ppc-opc.o subr_prf.o setjmp.o +obj-y := start.o xmon.o ppc-dis.o ppc-opc.o subr_prf.o setjmp.o diff --git a/arch/ppc64/xmon/start.c b/arch/ppc64/xmon/start.c index d715be66953de837afc46d61f68b9fa07fb35d52..12df10a98a5fb0d711ead8ae506ed7d8c5bb9e4f 100644 --- a/arch/ppc64/xmon/start.c +++ b/arch/ppc64/xmon/start.c @@ -14,29 +14,13 @@ #include <asm/page.h> #include <asm/prom.h> #include <asm/processor.h> - -/* Transition to udbg isn't quite done yet...but very close. */ -#define USE_UDBG -#ifdef USE_UDBG #include <asm/udbg.h> -#endif -#ifndef USE_UDBG -static volatile unsigned char *sccc, *sccd; -#endif -unsigned long TXRDY, RXRDY; extern void xmon_printf(const char *fmt, ...); static int xmon_expect(const char *str, unsigned int timeout); -#ifndef USE_UDBG -static int console = 0; -#endif -static int via_modem = 0; -/* static int xmon_use_sccb = 0; --Unused */ - #define TB_SPEED 25000000 -extern void *comport1; static inline unsigned int readtb(void) { unsigned int ret; @@ -45,16 +29,10 @@ static inline unsigned int readtb(void) return ret; } -#ifndef USE_UDBG -void buf_access(void) +static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs, + struct tty_struct *tty) { - sccd[3] &= ~0x80; /* reset DLAB */ -} -#endif - -static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs, struct tty_struct *tty) -{ - xmon(pt_regs); + xmon(pt_regs); } static struct sysrq_key_op sysrq_xmon_op = { @@ -68,50 +46,12 @@ xmon_map_scc(void) { /* This maybe isn't the best place to register sysrq 'x' */ __sysrq_put_key_op('x', &sysrq_xmon_op); -#ifndef USE_UDBG - /* should already be mapped by the kernel boot */ - sccd = (volatile unsigned char *) (((unsigned long)comport1)); - sccc = (volatile unsigned char *) (((unsigned long)comport1)+5); - TXRDY = 0x20; - RXRDY = 1; -#endif } -static int scc_initialized = 0; - -void xmon_init_scc(void); -extern void pmu_poll(void); - int xmon_write(void *handle, void *ptr, int nb) { -#ifdef USE_UDBG return udbg_write(ptr, nb); -#else - char *p = ptr; - int i, c, ct; - - if (!scc_initialized) - xmon_init_scc(); - ct = 0; - for (i = 0; i < nb; ++i) { - while ((*sccc & TXRDY) == 0) { - } - c = p[i]; - if (c == '\n' && !ct) { - c = '\r'; - ct = 1; - --i; - } else { - if (console) - printk("%c", c); - ct = 0; - } - buf_access(); - *sccd = c; - } - return i; -#endif } int xmon_wants_key; @@ -119,68 +59,15 @@ int xmon_wants_key; int xmon_read(void *handle, void *ptr, int nb) { -#ifdef USE_UDBG return udbg_read(ptr, nb); -#else - char *p = ptr; - int i, c; - - if (!scc_initialized) - xmon_init_scc(); - for (i = 0; i < nb; ++i) { - do { - while ((*sccc & RXRDY) == 0) - ; - buf_access(); - c = *sccd; - } while (c == 0x11 || c == 0x13); - *p++ = c; - } - return i; -#endif } int xmon_read_poll(void) { -#ifdef USE_UDBG return udbg_getc_poll(); -#else - if ((*sccc & RXRDY) == 0) { - return -1; - } - buf_access(); - return *sccd; -#endif } -void -xmon_init_scc() -{ -#ifndef USE_UDBG - sccd[3] = 0x83; eieio(); /* LCR = 8N1 + DLAB */ - sccd[0] = 12; eieio(); /* DLL = 9600 baud */ - sccd[1] = 0; eieio(); - sccd[2] = 0; eieio(); /* FCR = 0 */ - sccd[3] = 3; eieio(); /* LCR = 8N1 */ - sccd[1] = 0; eieio(); /* IER = 0 */ -#endif - - scc_initialized = 1; - if (via_modem) { - for (;;) { - xmon_write(0, "ATE1V1\r", 7); - if (xmon_expect("OK", 5)) { - xmon_write(0, "ATA\r", 4); - if (xmon_expect("CONNECT", 40)) - break; - } - xmon_write(0, "+++", 3); - xmon_expect("OK", 3); - } - } -} - void *xmon_stdin; void *xmon_stdout; void *xmon_stderr; diff --git a/include/asm-ppc64/compat.h b/include/asm-ppc64/compat.h index a397383110cda8a9c6abac068b9024d1982d925a..84513bd7d86e00cbe67a0cb06d47ae3f0fc7834c 100644 --- a/include/asm-ppc64/compat.h +++ b/include/asm-ppc64/compat.h @@ -5,9 +5,20 @@ */ #include <linux/types.h> +#define COMPAT_USER_HZ 100 + typedef u32 compat_size_t; typedef s32 compat_ssize_t; typedef s32 compat_time_t; +typedef s32 compat_clock_t; +typedef s32 compat_pid_t; +typedef u32 compat_uid_t; +typedef u32 compat_gid_t; +typedef u32 compat_mode_t; +typedef u32 compat_ino_t; +typedef u32 compat_dev_t; +typedef s32 compat_off_t; +typedef s16 compat_nlink_t; struct compat_timespec { compat_time_t tv_sec; @@ -19,4 +30,24 @@ struct compat_timeval { s32 tv_usec; }; +struct compat_stat { + compat_dev_t st_dev; + compat_ino_t st_ino; + compat_mode_t st_mode; + compat_nlink_t st_nlink; + compat_uid_t st_uid; + compat_gid_t st_gid; + compat_dev_t st_rdev; + compat_off_t st_size; + compat_off_t st_blksize; + compat_off_t st_blocks; + compat_time_t st_atime; + u32 __unused1; + compat_time_t st_mtime; + u32 __unused2; + compat_time_t st_ctime; + u32 __unused3; + u32 __unused4[2]; +}; + #endif /* _ASM_PPC64_COMPAT_H */ diff --git a/include/asm-ppc64/page.h b/include/asm-ppc64/page.h index 7eb130cd1ab8457d962486b99ef76d9d0797d3aa..feabff500b6cd967d85dfa4dcd58280fdabb70e5 100644 --- a/include/asm-ppc64/page.h +++ b/include/asm-ppc64/page.h @@ -48,7 +48,7 @@ static __inline__ void clear_page(void *addr) lines = naca->dCacheL1LinesPerPage; __asm__ __volatile__( -" mtctr %1\n\ + "mtctr %1 # clear_page\n\ 1: dcbz 0,%0\n\ add %0,%0,%3\n\ bdnz+ 1b" diff --git a/include/asm-ppc64/pgtable.h b/include/asm-ppc64/pgtable.h index 80d3977cf73f791a20f46b493cc35015fc48e1f6..3b13d9cd1fd80a2b0445c0dcba21e7b747d31374 100644 --- a/include/asm-ppc64/pgtable.h +++ b/include/asm-ppc64/pgtable.h @@ -267,8 +267,8 @@ static inline unsigned long pte_update( pte_t *p, unsigned long clr, { unsigned long old, tmp; - __asm__ __volatile__("\n\ -1: ldarx %0,0,%3 \n\ + __asm__ __volatile__( + "1: ldarx %0,0,%3 # pte_update\n\ andc %1,%0,%4 \n\ or %1,%1,%5 \n\ stdcx. %1,0,%3 \n\ diff --git a/include/asm-ppc64/ppc32.h b/include/asm-ppc64/ppc32.h index 1b39c490820528da916cdbdacf2e9a4308609205..5b601337ffaaeaa8c069d38eb439046ade70da03 100644 --- a/include/asm-ppc64/ppc32.h +++ b/include/asm-ppc64/ppc32.h @@ -44,19 +44,9 @@ typedef __kernel_fsid_t __kernel_fsid_t32; }) /* These are here to support 32-bit syscalls on a 64-bit kernel. */ -typedef int __kernel_ptrdiff_t32; -typedef int __kernel_clock_t32; -typedef int __kernel_pid_t32; typedef unsigned short __kernel_ipc_pid_t32; -typedef unsigned int __kernel_uid_t32; -typedef unsigned int __kernel_gid_t32; -typedef unsigned int __kernel_dev_t32; -typedef unsigned int __kernel_ino_t32; -typedef unsigned int __kernel_mode_t32; typedef unsigned int __kernel_umode_t32; -typedef short __kernel_nlink_t32; typedef int __kernel_daddr_t32; -typedef int __kernel_off_t32; typedef unsigned int __kernel_caddr_t32; typedef int __kernel_loff_t32; @@ -88,8 +78,8 @@ typedef struct siginfo32 { /* kill() */ struct { - __kernel_pid_t32 _pid; /* sender's pid */ - __kernel_uid_t32 _uid; /* sender's uid */ + compat_pid_t _pid; /* sender's pid */ + compat_uid_t _uid; /* sender's uid */ } _kill; /* POSIX.1b timers */ @@ -100,18 +90,18 @@ typedef struct siginfo32 { /* POSIX.1b signals */ struct { - __kernel_pid_t32 _pid; /* sender's pid */ - __kernel_uid_t32 _uid; /* sender's uid */ + compat_pid_t _pid; /* sender's pid */ + compat_uid_t _uid; /* sender's uid */ sigval_t32 _sigval; } _rt; /* SIGCHLD */ struct { - __kernel_pid_t32 _pid; /* which child */ - __kernel_uid_t32 _uid; /* sender's uid */ + compat_pid_t _pid; /* which child */ + compat_uid_t _uid; /* sender's uid */ int _status; /* exit code */ - __kernel_clock_t32 _utime; - __kernel_clock_t32 _stime; + compat_clock_t _utime; + compat_clock_t _stime; } _sigchld; /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */ @@ -164,32 +154,12 @@ typedef struct sigaltstack_32 { struct flock32 { short l_type; short l_whence; - __kernel_off_t32 l_start; - __kernel_off_t32 l_len; - __kernel_pid_t32 l_pid; + compat_off_t l_start; + compat_off_t l_len; + compat_pid_t l_pid; short __unused; }; -struct stat32 { - __kernel_dev_t32 st_dev; /* 2 */ - __kernel_ino_t32 st_ino; /* 4 */ - __kernel_mode_t32 st_mode; /* 2 */ - short st_nlink; /* 2 */ - __kernel_uid_t32 st_uid; /* 2 */ - __kernel_gid_t32 st_gid; /* 2 */ - __kernel_dev_t32 st_rdev; /* 2 */ - __kernel_off_t32 st_size; /* 4 */ - __kernel_off_t32 st_blksize; /* 4 */ - __kernel_off_t32 st_blocks; /* 4 */ - compat_time_t st_atime; /* 4 */ - unsigned int __unused1; /* 4 */ - compat_time_t st_mtime; /* 4 */ - unsigned int __unused2; /* 4 */ - compat_time_t st_ctime; /* 4 */ - unsigned int __unused3; /* 4 */ - unsigned int __unused4[2]; /* 2*4 */ -}; - struct sigcontext32 { unsigned int _unused[4]; int signal; diff --git a/include/asm-ppc64/prom.h b/include/asm-ppc64/prom.h index dbe1889b31845e2c494f25c0a070c97994b24f58..1af24acffb7ee6959f2aecd3864d383e0ecc6bd6 100644 --- a/include/asm-ppc64/prom.h +++ b/include/asm-ppc64/prom.h @@ -155,12 +155,6 @@ struct prom_args { prom_arg_t *rets; /* Pointer to return values in args[16]. */ }; -typedef struct { - u32 printf; /* void (*printf)(char *, ...); */ - u32 memdump; /* void (*memdump)(unsigned char *, unsigned long); */ - u32 dummy; /* void (*dummy)(void); */ -} yaboot_debug_t; - struct prom_t { unsigned long entry; ihandle chosen; @@ -171,9 +165,6 @@ struct prom_t { unsigned long version; unsigned long encode_phys_size; struct bi_record *bi_recs; -#ifdef DEBUG_YABOOT - yaboot_debug_t *yaboot; -#endif }; extern struct prom_t prom; @@ -183,7 +174,7 @@ extern int boot_cpuid; /* Prototypes */ extern void abort(void); extern unsigned long prom_init(unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, yaboot_debug_t *); + unsigned long, unsigned long); extern void prom_print(const char *msg); extern void relocate_nodes(void); extern void finish_device_tree(void); diff --git a/arch/ppc64/kernel/xics.h b/include/asm-ppc64/xics.h similarity index 61% rename from arch/ppc64/kernel/xics.h rename to include/asm-ppc64/xics.h index 7db4efb6b8087f0421f2573ade0a742c921b30d7..8db0fc4445eeafad4030c92882a45074344d8b57 100644 --- a/arch/ppc64/kernel/xics.h +++ b/include/asm-ppc64/xics.h @@ -1,5 +1,5 @@ /* - * arch/ppc/kernel/xics.h + * arch/ppc64/kernel/xics.h * * Copyright 2000 IBM Corporation. * @@ -9,14 +9,10 @@ * 2 of the License, or (at your option) any later version. */ -#ifndef _PPC_KERNEL_XICS_H -#define _PPC_KERNEL_XICS_H - -extern struct hw_interrupt_type xics_pic; -extern struct hw_interrupt_type xics_8259_pic; +#ifndef _PPC64_KERNEL_XICS_H +#define _PPC64_KERNEL_XICS_H void xics_init_IRQ(void); int xics_get_irq(struct pt_regs *); -void xics_isa_init(void); -#endif /* _PPC_KERNEL_XICS_H */ +#endif /* _PPC64_KERNEL_XICS_H */