Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jul 2009 19:19:13 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r195948 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include powerpc/mambo powerpc/powerpc
Message-ID:  <200907291919.n6TJJDfU079979@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Wed Jul 29 19:19:13 2009
New Revision: 195948
URL: http://svn.freebsd.org/changeset/base/195948

Log:
  Virtual memory now really works, and the kernel boots to the point of
  running through device detection and complaining about not being able
  to find a PIC. Trap handling (especially for user-space) still has a
  ways to go.

Added:
  projects/ppc64/sys/powerpc/mambo/
  projects/ppc64/sys/powerpc/mambo/mambo_console.c
  projects/ppc64/sys/powerpc/mambo/mambocall.S
  projects/ppc64/sys/powerpc/mambo/mambocall.h
Modified:
  projects/ppc64/sys/conf/files.powerpc64
  projects/ppc64/sys/conf/options.powerpc64
  projects/ppc64/sys/powerpc/aim/ofw_machdep.c
  projects/ppc64/sys/powerpc/aim/platform_chrp.c
  projects/ppc64/sys/powerpc/aim64/locore.S
  projects/ppc64/sys/powerpc/aim64/machdep.c
  projects/ppc64/sys/powerpc/aim64/trap_subr.S
  projects/ppc64/sys/powerpc/include/param.h
  projects/ppc64/sys/powerpc/include/pcpu.h
  projects/ppc64/sys/powerpc/include/pmap.h
  projects/ppc64/sys/powerpc/include/spr.h
  projects/ppc64/sys/powerpc/include/sr.h
  projects/ppc64/sys/powerpc/include/trap_aim.h
  projects/ppc64/sys/powerpc/include/vmparam.h
  projects/ppc64/sys/powerpc/powerpc/cpu.c
  projects/ppc64/sys/powerpc/powerpc/genassym.c

Modified: projects/ppc64/sys/conf/files.powerpc64
==============================================================================
--- projects/ppc64/sys/conf/files.powerpc64	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/conf/files.powerpc64	Wed Jul 29 19:19:13 2009	(r195948)
@@ -34,7 +34,6 @@ dev/ofw/ofw_bus_subr.c		optional	aim
 dev/ofw/ofw_console.c		optional	aim
 dev/ofw/ofw_disk.c		optional	ofwd aim
 dev/ofw/ofw_iicbus.c		optional	iicbus aim
-dev/ofw/ofw_standard.c		optional	aim
 dev/powermac_nvram/powermac_nvram.c optional	powermac_nvram powermac
 dev/scc/scc_bfe_macio.c		optional	scc powermac
 dev/sound/macio/aoa.c		optional	snd_davbus | snd_ai2s powermac
@@ -71,6 +70,8 @@ powerpc/aim64/mmu_oea64.c	optional	aim
 powerpc/aim64/swtch.S		optional	aim
 powerpc/cpufreq/dfs.c		optional	cpufreq
 powerpc/cpufreq/pcr.c		optional	cpufreq aim
+powerpc/mambo/mambocall.S	optional	mambo
+powerpc/mambo/mambo_console.c	optional	mambo
 powerpc/ofw/ofw_cpu.c		optional	aim
 powerpc/ofw/ofw_pcibus.c	optional	pci aim
 powerpc/ofw/ofw_pcib_pci.c	optional	pci aim

Modified: projects/ppc64/sys/conf/options.powerpc64
==============================================================================
--- projects/ppc64/sys/conf/options.powerpc64	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/conf/options.powerpc64	Wed Jul 29 19:19:13 2009	(r195948)
@@ -3,6 +3,7 @@
 
 AIM			opt_global.h
 E500			opt_global.h
+MAMBO
 
 GFB_DEBUG		opt_gfb.h
 GFB_NO_FONT_LOADING	opt_gfb.h

Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/ofw_machdep.c	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -83,7 +83,7 @@ struct {
 } ofwcall_funcdesc;
 #endif
 	
-
+int		ofw_real_mode_entry(void *);
 static int	openfirmware(void *args);
 
 /*
@@ -286,10 +286,14 @@ OF_initial_setup(void *fdt_ptr, void *ju
 		 * For PPC64, we need to hack up a function descriptor object
 		 * to be able to call a memory address.
 		 */
-		ofwcall_funcdesc.funcptr = openfirm;
-		ofwcall_funcdesc.toc = 0;
-		ofwcall_funcdesc.env = 0;
-		ofwcall = (int (*)(void *))(&ofwcall_funcdesc);
+		if (ofw_real_mode) {
+			ofwcall = ofw_real_mode_entry;
+		} else {
+			ofwcall_funcdesc.funcptr = openfirm;
+			ofwcall_funcdesc.toc = 0;
+			ofwcall_funcdesc.env = 0;
+			ofwcall = (int (*)(void *))&ofwcall_funcdesc;
+		}
 	#else
 		ofwcall = openfirm;
 	#endif
@@ -334,15 +338,6 @@ openfirmware(void *args)
 	if (pmap_bootstrapped && ofw_real_mode)
 		args = (void *)pmap_kextract((vm_offset_t)args);
 
-	__asm __volatile(	"\t"
-		"sync\n\t"
-		"mfmsr  %0\n\t"
-		"mtmsr  %1\n\t"
-		"isync\n"
-		: "=r" (oldmsr)
-		: "r" (ofmsr[0])
-	);
-
 	ofw_sprg_prepare();
 
 	if (pmap_bootstrapped && !ofw_real_mode) {
@@ -364,8 +359,23 @@ openfirmware(void *args)
 		isync();
 	}
 
+	__asm __volatile(	"\t"
+		"sync\n\t"
+		"mfmsr  %0\n\t"
+		"mtmsr  %1\n\t"
+		"isync\n"
+		: "=r" (oldmsr)
+		: "r" (ofmsr[0])
+	);
+
        	result = ofwcall(args);
 
+	__asm(	"\t"
+		"mtmsr  %0\n\t"
+		"isync\n"
+		: : "r" (oldmsr)
+	);
+
 	if (pmap_bootstrapped && !ofw_real_mode) {
 		/*
 		 * Restore the kernel's addr space. The isync() doesn;t
@@ -380,12 +390,6 @@ openfirmware(void *args)
 
 	ofw_sprg_restore();
 
-	__asm(	"\t"
-		"mtmsr  %0\n\t"
-		"isync\n"
-		: : "r" (oldmsr)
-	);
-
 	return (result);
 }
 

Modified: projects/ppc64/sys/powerpc/aim/platform_chrp.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/platform_chrp.c	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/aim/platform_chrp.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -85,7 +85,7 @@ PLATFORM_DEF(chrp_platform);
 static int
 chrp_probe(platform_t plat)
 {
-	if (OF_finddevice("/memory") != -1)
+	if (OF_finddevice("/memory") != -1 || OF_finddevice("/memory@0") != -1)
 		return (BUS_PROBE_GENERIC);
 
 	return (ENXIO);

Modified: projects/ppc64/sys/powerpc/aim64/locore.S
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/locore.S	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/aim64/locore.S	Wed Jul 29 19:19:13 2009	(r195948)
@@ -180,13 +180,43 @@ ASENTRY(__start)
 	nop
 	mr	%r1, %r3
 	li	%r3, 0
-	stw	%r3, 0(%r1)
+	std	%r3, 0(%r1)
 	bl	.mi_startup
 	nop
 	b	.OF_exit
 	nop
 
 /*
+ * PPC64 ABI TOC base
+ */
+
+        .align  3
+tocbase:
+        .llong  .TOC.@tocbase
+
+/*
+ * Open Firmware Real-mode Entry Point. This is a huge pain.
+ */
+
+ASENTRY(ofw_real_mode_entry)
+	mflr	0
+	lis	31,openfirmware_entry@ha
+	ld	31,openfirmware_entry@l(31) /* read client interface handler */
+
+	mfmsr	30
+	mtsprg3	30
+	andi.	30, 30, ~(PSL_DR | PSL_IR | PSL_EE)@l
+	mtmsrd	30
+
+	mtctr	31
+	bctrl
+
+	mfsprg3	30
+	mtmsrd	30
+	mtlr 	0
+	blr
+
+/*
  * int setfault()
  *
  * Similar to setjmp to setup for handling faults on accesses to user memory.

Modified: projects/ppc64/sys/powerpc/aim64/machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/machdep.c	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/aim64/machdep.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -451,7 +451,7 @@ powerpc_init(u_int startkernel, u_int en
 	 */
 	thread0.td_pcb = (struct pcb *)
 	    ((thread0.td_kstack + thread0.td_kstack_pages * PAGE_SIZE -
-	    sizeof(struct pcb)) & ~15);
+	    sizeof(struct pcb)) & ~15UL);
 	bzero((void *)thread0.td_pcb, sizeof(struct pcb));
 	pc->pc_curpcb = thread0.td_pcb;
 
@@ -464,7 +464,7 @@ powerpc_init(u_int startkernel, u_int en
 		    "Boot flags requested debugger");
 #endif
 
-	return (((uintptr_t)thread0.td_pcb - 16) & ~15);
+	return (((uintptr_t)thread0.td_pcb - 16) & ~15UL);
 }
 
 void

Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S
==============================================================================
--- projects/ppc64/sys/powerpc/aim64/trap_subr.S	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/aim64/trap_subr.S	Wed Jul 29 19:19:13 2009	(r195948)
@@ -43,31 +43,62 @@
  * Save/restore segment registers
  */
 
-#define RESTORE_SRS(pmap, sr) \
-	slbia; 
+/*
+ * Restore SRs for a pmap
+ *
+ * Requires that r27-r31 be scratch, with r27 initialized to the pmap
+ */
+
+restoresrs: 
+	slbia;
+	li	%r29, 0;
+	mr	%r28, %r27
+	lwz	%r27, PM_CONTEXT(%r27);
+instslb:
+	li	%r30, 31;
+	sld	%r30, %r27, %r30;
+	ld	%r31, PM_SR(%r28);
+
+	cmpli	0, %r31, 0;
+	beq	nslb;
+	
+	srdi	%r31, %r31, 1;
+	or	%r30, %r30, %r31;
+	sldi	%r30, %r30, 12;
+	ld	%r31, PM_SR(%r28);
+	sldi	%r31, %r31, 27;
+	or 	%r31, %r31, %r29;
+	slbmte	%r30, %r31;
+
+nslb:
+	addi	%r28, %r28, 8;
+	addi	%r29, %r29, 1;
+	cmpli	0, %r29, 63;
+	blt instslb;
+
+	blr;
 
 /*
  * User SRs are loaded through a pointer to the current pmap.
  */
-#define RESTORE_USER_SRS(pmap,sr) \
-	GET_CPUINFO(pmap); \
-	lwz	pmap,PC_CURPMAP(pmap); \
-	lwzu	sr,PM_SR(pmap); \
-	RESTORE_SRS(pmap,sr)
+#define RESTORE_USER_SRS() \
+	GET_CPUINFO(%r27); \
+	ld	%r27,PC_CURPMAP(%r27); \
+	bl	restoresrs;
 
 /*
  * Kernel SRs are loaded directly from kernel_pmap_
  */
-#define RESTORE_KERN_SRS(pmap,sr) \
-	lis	pmap,CNAME(kernel_pmap_store)@ha; \
-	lwzu	sr,CNAME(kernel_pmap_store)+PM_SR@l(pmap); \
-	RESTORE_SRS(pmap,sr)
+#define RESTORE_KERN_SRS() \
+	lis	%r27,CNAME(kernel_pmap_store)@ha; \
+	addi	%r27,%r27,CNAME(kernel_pmap_store)@l; \
+	bl	restoresrs;
 
 /*
  * FRAME_SETUP assumes:
  *	SPRG1		SP (1)
  * 	SPRG3		trap type
- *	savearea	r28-r31,DAR,DSISR   (DAR & DSISR only for DSI traps)
+ *	savearea	r27-r31,DAR,DSISR   (DAR & DSISR only for DSI traps)
  *	r28		LR
  *	r29		CR
  *	r30		scratch
@@ -88,45 +119,46 @@
 	isync;								\
 	mfsprg1	%r31;			/* get saved SP */		\
 	stdu	%r31,-FRAMELEN(%r1);	/* save it in the callframe */	\
-	std	%r0, FRAME_0+8(%r1);	/* save r0 in the trapframe */	\
-	std	%r31,FRAME_1+8(%r1);	/* save SP   "      "       */	\
-	std	%r2, FRAME_2+8(%r1);	/* save r2   "      "       */	\
-	std	%r28,FRAME_LR+8(%r1);	/* save LR   "      "       */	\
-	stw	%r29,FRAME_CR+8(%r1);	/* save CR   "      "       */	\
+	std	%r0, FRAME_0+16(%r1);	/* save r0 in the trapframe */	\
+	std	%r31,FRAME_1+16(%r1);	/* save SP   "      "       */	\
+	std	%r2, FRAME_2+16(%r1);	/* save r2   "      "       */	\
+	std	%r28,FRAME_LR+16(%r1);	/* save LR   "      "       */	\
+	stw	%r29,FRAME_CR+16(%r1);	/* save CR   "      "       */	\
 	GET_CPUINFO(%r2);						\
+	ld	%r27,(savearea+CPUSAVE_R27)(%r2); /* get saved r27 */	\
 	ld	%r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */	\
 	ld	%r29,(savearea+CPUSAVE_R29)(%r2); /* get saved r29 */	\
 	ld	%r30,(savearea+CPUSAVE_R30)(%r2); /* get saved r30 */	\
 	ld	%r31,(savearea+CPUSAVE_R31)(%r2); /* get saved r31 */	\
-	std	%r3,  FRAME_3+8(%r1);	/* save r3-r31 */		\
-	std	%r4,  FRAME_4+8(%r1);					\
-	std	%r5,  FRAME_5+8(%r1);					\
-	std	%r6,  FRAME_6+8(%r1);					\
-	std	%r7,  FRAME_7+8(%r1);					\
-	std	%r8,  FRAME_8+8(%r1);					\
-	std	%r9,  FRAME_9+8(%r1);					\
-	std	%r10, FRAME_10+8(%r1);					\
-	std	%r11, FRAME_11+8(%r1);					\
-	std	%r12, FRAME_12+8(%r1);					\
-	std	%r13, FRAME_13+8(%r1);					\
-	std	%r14, FRAME_14+8(%r1);					\
-	std	%r15, FRAME_15+8(%r1);					\
-	std	%r16, FRAME_16+8(%r1);					\
-	std	%r17, FRAME_17+8(%r1);					\
-	std	%r18, FRAME_18+8(%r1);					\
-	std	%r19, FRAME_19+8(%r1);					\
-	std	%r20, FRAME_20+8(%r1);					\
-	std	%r21, FRAME_21+8(%r1);					\
-	std	%r22, FRAME_22+8(%r1);					\
-	std	%r23, FRAME_23+8(%r1);					\
-	std	%r24, FRAME_24+8(%r1);					\
-	std	%r25, FRAME_25+8(%r1);					\
-	std	%r26, FRAME_26+8(%r1);					\
-	std	%r27, FRAME_27+8(%r1);					\
-	std	%r28, FRAME_28+8(%r1);					\
-	std	%r29, FRAME_29+8(%r1);					\
-	std	%r30, FRAME_30+8(%r1);					\
-	std	%r31, FRAME_31+8(%r1);					\
+	std	%r3,  FRAME_3+16(%r1);	/* save r3-r31 */		\
+	std	%r4,  FRAME_4+16(%r1);					\
+	std	%r5,  FRAME_5+16(%r1);					\
+	std	%r6,  FRAME_6+16(%r1);					\
+	std	%r7,  FRAME_7+16(%r1);					\
+	std	%r8,  FRAME_8+16(%r1);					\
+	std	%r9,  FRAME_9+16(%r1);					\
+	std	%r10, FRAME_10+16(%r1);					\
+	std	%r11, FRAME_11+16(%r1);					\
+	std	%r12, FRAME_12+16(%r1);					\
+	std	%r13, FRAME_13+16(%r1);					\
+	std	%r14, FRAME_14+16(%r1);					\
+	std	%r15, FRAME_15+16(%r1);					\
+	std	%r16, FRAME_16+16(%r1);					\
+	std	%r17, FRAME_17+16(%r1);					\
+	std	%r18, FRAME_18+16(%r1);					\
+	std	%r19, FRAME_19+16(%r1);					\
+	std	%r20, FRAME_20+16(%r1);					\
+	std	%r21, FRAME_21+16(%r1);					\
+	std	%r22, FRAME_22+16(%r1);					\
+	std	%r23, FRAME_23+16(%r1);					\
+	std	%r24, FRAME_24+16(%r1);					\
+	std	%r25, FRAME_25+16(%r1);					\
+	std	%r26, FRAME_26+16(%r1);					\
+	std	%r27, FRAME_27+16(%r1);					\
+	std	%r28, FRAME_28+16(%r1);					\
+	std	%r29, FRAME_29+16(%r1);					\
+	std	%r30, FRAME_30+16(%r1);					\
+	std	%r31, FRAME_31+16(%r1);					\
 	ld	%r28,(savearea+CPUSAVE_AIM_DAR)(%r2);  /* saved DAR */	\
 	lwz	%r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\
 	ld	%r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */	\
@@ -134,61 +166,61 @@
 	mfxer	%r3;							\
 	mfctr	%r4;							\
 	mfsprg3	%r5;							\
-	std	%r3, FRAME_XER+8(1);	/* save xer/ctr/exc */		\
-	std	%r4, FRAME_CTR+8(1);					\
-	std	%r5, FRAME_EXC+8(1);					\
-	std	%r28,FRAME_AIM_DAR+8(1);				\
-	stw	%r29,FRAME_AIM_DSISR+8(1); /* save dsisr/srr0/srr1 */	\
-	std	%r30,FRAME_SRR0+8(1);					\
-	std	%r31,FRAME_SRR1+8(1)
+	mtlr	%r6;							\
+	stw	%r3, FRAME_XER+16(1);	/* save xer/ctr/exc */		\
+	std	%r4, FRAME_CTR+16(1);					\
+	std	%r5, FRAME_EXC+16(1);					\
+	std	%r28,FRAME_AIM_DAR+16(1);				\
+	stw	%r29,FRAME_AIM_DSISR+16(1); /* save dsisr/srr0/srr1 */	\
+	std	%r30,FRAME_SRR0+16(1);					\
+	std	%r31,FRAME_SRR1+16(1)
 
 #define	FRAME_LEAVE(savearea)						\
 /* Now restore regs: */							\
-	ld	%r2,FRAME_SRR0+8(%r1);					\
-	ld	%r3,FRAME_SRR1+8(%r1);					\
-	ld	%r4,FRAME_CTR+8(%r1);					\
-	ld	%r5,FRAME_XER+8(%r1);					\
-	ld	%r6,FRAME_LR+8(%r1);					\
+	ld	%r2,FRAME_SRR0+16(%r1);					\
+	ld	%r3,FRAME_SRR1+16(%r1);					\
+	ld	%r4,FRAME_CTR+16(%r1);					\
+	lwz	%r5,FRAME_XER+16(%r1);					\
+	ld	%r6,FRAME_LR+16(%r1);					\
 	GET_CPUINFO(%r7);						\
 	std	%r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */	\
 	std	%r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */	\
-	lwz	%r7,FRAME_CR+8(%r1);					\
+	lwz	%r7,FRAME_CR+16(%r1);					\
 	mtctr	%r4;							\
 	mtxer	%r5;							\
-	mtlr	%r6;							\
 	mtsprg1	%r7;			/* save cr */			\
-	ld	%r31,FRAME_31+8(%r1);   /* restore r0-31 */		\
-	ld	%r30,FRAME_30+8(%r1);					\
-	ld	%r29,FRAME_29+8(%r1);					\
-	ld	%r28,FRAME_28+8(%r1);					\
-	ld	%r27,FRAME_27+8(%r1);					\
-	ld	%r26,FRAME_26+8(%r1);					\
-	ld	%r25,FRAME_25+8(%r1);					\
-	ld	%r24,FRAME_24+8(%r1);					\
-	ld	%r23,FRAME_23+8(%r1);					\
-	ld	%r22,FRAME_22+8(%r1);					\
-	ld	%r21,FRAME_21+8(%r1);					\
-	ld	%r20,FRAME_20+8(%r1);					\
-	ld	%r19,FRAME_19+8(%r1);					\
-	ld	%r18,FRAME_18+8(%r1);					\
-	ld	%r17,FRAME_17+8(%r1);					\
-	ld	%r16,FRAME_16+8(%r1);					\
-	ld	%r15,FRAME_15+8(%r1);					\
-	ld	%r14,FRAME_14+8(%r1);					\
-	ld	%r13,FRAME_13+8(%r1);					\
-	ld	%r12,FRAME_12+8(%r1);					\
-	ld	%r11,FRAME_11+8(%r1);					\
-	ld	%r10,FRAME_10+8(%r1);					\
-	ld	%r9, FRAME_9+8(%r1);					\
-	ld	%r8, FRAME_8+8(%r1);					\
-	ld	%r7, FRAME_7+8(%r1);					\
-	ld	%r6, FRAME_6+8(%r1);					\
-	ld	%r5, FRAME_5+8(%r1);					\
-	ld	%r4, FRAME_4+8(%r1);					\
-	ld	%r3, FRAME_3+8(%r1);					\
-	ld	%r2, FRAME_2+8(%r1);					\
-	ld	%r0, FRAME_0+8(%r1);					\
-	ld	%r1, FRAME_1+8(%r1);					\
+	ld	%r31,FRAME_31+16(%r1);   /* restore r0-31 */		\
+	ld	%r30,FRAME_30+16(%r1);					\
+	ld	%r29,FRAME_29+16(%r1);					\
+	ld	%r28,FRAME_28+16(%r1);					\
+	ld	%r27,FRAME_27+16(%r1);					\
+	ld	%r26,FRAME_26+16(%r1);					\
+	ld	%r25,FRAME_25+16(%r1);					\
+	ld	%r24,FRAME_24+16(%r1);					\
+	ld	%r23,FRAME_23+16(%r1);					\
+	ld	%r22,FRAME_22+16(%r1);					\
+	ld	%r21,FRAME_21+16(%r1);					\
+	ld	%r20,FRAME_20+16(%r1);					\
+	ld	%r19,FRAME_19+16(%r1);					\
+	ld	%r18,FRAME_18+16(%r1);					\
+	ld	%r17,FRAME_17+16(%r1);					\
+	ld	%r16,FRAME_16+16(%r1);					\
+	ld	%r15,FRAME_15+16(%r1);					\
+	ld	%r14,FRAME_14+16(%r1);					\
+	ld	%r13,FRAME_13+16(%r1);					\
+	ld	%r12,FRAME_12+16(%r1);					\
+	ld	%r11,FRAME_11+16(%r1);					\
+	ld	%r10,FRAME_10+16(%r1);					\
+	ld	%r9, FRAME_9+16(%r1);					\
+	ld	%r8, FRAME_8+16(%r1);					\
+	ld	%r7, FRAME_7+16(%r1);					\
+	ld	%r6, FRAME_6+16(%r1);					\
+	ld	%r5, FRAME_5+16(%r1);					\
+	ld	%r4, FRAME_4+16(%r1);					\
+	ld	%r3, FRAME_3+16(%r1);					\
+	ld	%r2, FRAME_2+16(%r1);					\
+	ld	%r0, FRAME_0+16(%r1);					\
+	ld	%r1, FRAME_1+16(%r1);					\
 /* Can't touch %r1 from here on */					\
 	mtsprg2	%r2;			/* save r2 & r3 */		\
 	mtsprg3	%r3;							\
@@ -203,7 +235,7 @@
 	mtcr	%r3;							\
 	bf	17,1f;			/* branch if PSL_PR is false */	\
 /* Restore user SRs */							\
-	RESTORE_USER_SRS(%r2,%r3);					\
+	RESTORE_USER_SRS();		/* uses r27-r31 */		\
 1:	mfsprg1	%r2;			/* restore cr */		\
 	mtcr	%r2;							\
 	GET_CPUINFO(%r2);						\
@@ -236,6 +268,8 @@ CNAME(rstcode):
 	addi	%r1,%r1,(124-16)@l
 
 	lis	%r3,1@l
+	lis	%r3,tocbase@ha
+	ld	%r2,tocbase@l(%r3)
 	bla	CNAME(.pmap_cpu_bootstrap)
 	nop
 	bla	CNAME(.cpudep_ap_bootstrap)
@@ -271,7 +305,8 @@ CNAME(trapsize) = .-CNAME(trapcode)
 CNAME(alitrap):
 	mtsprg1	%r1			/* save SP */
 	GET_CPUINFO(%r1)
-	std	%r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)	/* free r28-r31 */
+	std	%r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1)	/* free r27-r31 */
+	std	%r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)
 	std	%r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1)
 	std	%r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1)
 	std	%r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1)
@@ -302,7 +337,8 @@ CNAME(alisize) = .-CNAME(alitrap)
 CNAME(dsitrap):
 	mtsprg1	%r1			/* save SP */
 	GET_CPUINFO(%r1)
-	std	%r28,(PC_DISISAVE+CPUSAVE_R28)(%r1)	/* free r28-r31 */
+	std	%r27,(PC_DISISAVE+CPUSAVE_R27)(%r1)	/* free r27-r31 */
+	std	%r28,(PC_DISISAVE+CPUSAVE_R28)(%r1)
 	std	%r29,(PC_DISISAVE+CPUSAVE_R29)(%r1)
 	std	%r30,(PC_DISISAVE+CPUSAVE_R30)(%r1)
 	std	%r31,(PC_DISISAVE+CPUSAVE_R31)(%r1)
@@ -326,6 +362,8 @@ disitrap:
 	mtsprg3	%r1
 	
 	GET_CPUINFO(%r1)
+	ld	%r31,(PC_DISISAVE+CPUSAVE_R27)(%r1)
+	std	%r31,(PC_TEMPSAVE+CPUSAVE_R27)(%r1)
 	ld	%r30,(PC_DISISAVE+CPUSAVE_R28)(%r1)
 	std	%r30,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)
 	ld	%r31,(PC_DISISAVE+CPUSAVE_R29)(%r1)
@@ -357,6 +395,8 @@ disitrap:
 	std	%r30,(PC_DBSAVE  +CPUSAVE_AIM_DAR)(%r1) /* save DAR */
 	lwz	%r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */
 	stw	%r30,(PC_DBSAVE  +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */
+	ld	%r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* get  r27 */
+	std	%r31,(PC_DBSAVE  +CPUSAVE_R27)(%r1) /* save r27 */
 	ld	%r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get  r28 */
 	std	%r30,(PC_DBSAVE  +CPUSAVE_R28)(%r1) /* save r28 */
 	ld	%r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) /* get  r29 */
@@ -378,7 +418,7 @@ realtrap:
 	bf	17,k_trap		/* branch if PSL_PR is false */
 	GET_CPUINFO(%r1)
 	ld	%r1,PC_CURPCB(%r1)
-	RESTORE_KERN_SRS(%r30,%r31)	/* enable kernel mapping */
+	RESTORE_KERN_SRS()		/* enable kernel mapping */
 	ba s_trap
 
 /*
@@ -397,7 +437,8 @@ generictrap:
 
 	/* Save interesting registers */
 	GET_CPUINFO(%r1)
-	std	%r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)	/* free r28-r31 */
+	std	%r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1)	/* free r27-r31 */
+	std	%r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)
 	std	%r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1)
 	std	%r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1)
 	std	%r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1)
@@ -421,7 +462,7 @@ s_trap:
 	GET_CPUINFO(%r1)
 u_trap:
 	ld	%r1,PC_CURPCB(%r1)
-	RESTORE_KERN_SRS(%r30,%r31)	/* enable kernel mapping */
+	RESTORE_KERN_SRS() /* enable kernel mapping */
 
 /*
  * Now the common trap catching code.
@@ -430,7 +471,9 @@ k_trap:
 	FRAME_SETUP(PC_TEMPSAVE)
 /* Call C interrupt dispatcher: */
 trapagain:
-	addi	%r3,%r1,8
+	lis	%r3,tocbase@ha
+	ld	%r2,tocbase@l(%r3)
+	addi	%r3,%r1,16
 	bl	CNAME(.powerpc_interrupt)
 	nop
 	bl	CNAME(.trapexit)
@@ -478,6 +521,7 @@ ASENTRY(breakpoint)
 	mtmsr	%r3			/* disable interrupts */
 	isync
 	GET_CPUINFO(%r3)
+	std	%r27,(PC_DBSAVE+CPUSAVE_R27)(%r3)
 	std	%r28,(PC_DBSAVE+CPUSAVE_R28)(%r3)
 	std	%r29,(PC_DBSAVE+CPUSAVE_R29)(%r3)
 	std	%r30,(PC_DBSAVE+CPUSAVE_R30)(%r3)
@@ -502,7 +546,9 @@ dbtrap:
 
 	FRAME_SETUP(PC_DBSAVE)
 /* Call C trap code: */
-	addi	%r3,%r1,8
+	lis	%r3,tocbase@ha
+	ld	%r2,tocbase@l(%r3)
+	addi	%r3,%r1,16
 	bl	CNAME(.db_trap_glue)
 	nop
 	or.	%r3,%r3,%r3
@@ -514,6 +560,7 @@ dbtrap:
 	FRAME_LEAVE(PC_DBSAVE)
 	mtsprg1	%r1			/* prepare for entrance to realtrap */
 	GET_CPUINFO(%r1)
+	std	%r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1)
 	std	%r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1)
 	std	%r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1)
 	std	%r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1)
@@ -551,6 +598,7 @@ CNAME(dblow):
 1:
 	/* Privileged, so drop to KDB */
 	GET_CPUINFO(%r1)
+	std	%r27,(PC_DBSAVE+CPUSAVE_R27)(%r1)	/* free r27 */
 	std	%r28,(PC_DBSAVE+CPUSAVE_R28)(%r1)	/* free r28 */
         mfsprg2	%r28				/* r29 holds cr...  */
         std	%r28,(PC_DBSAVE+CPUSAVE_R29)(%r1)	/* free r29 */

Modified: projects/ppc64/sys/powerpc/include/param.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/param.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/param.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -95,7 +95,7 @@
 
 #define	PAGE_SHIFT	12
 #define	PAGE_SIZE	(1 << PAGE_SHIFT)	/* Page size */
-#define	PAGE_MASK	(PAGE_SIZE - 1)
+#define	PAGE_MASK	(vm_offset_t)(PAGE_SIZE - 1)
 #define	NPTEPG		(PAGE_SIZE/(sizeof (pt_entry_t)))
 
 #ifndef KSTACK_PAGES

Modified: projects/ppc64/sys/powerpc/include/pcpu.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/pcpu.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/pcpu.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -34,7 +34,7 @@
 #include <machine/tlb.h>
 
 struct pmap;
-#define	CPUSAVE_LEN	8
+#define	CPUSAVE_LEN	9
 
 #define	PCPU_MD_COMMON_FIELDS						\
 	int		pc_inside_intr;					\
@@ -66,10 +66,11 @@ struct pmap;
 	int		pc_tid_next;
 
 /* Definitions for register offsets within the exception tmp save areas */
-#define	CPUSAVE_R28	0		/* where r28 gets saved */
-#define	CPUSAVE_R29	1		/* where r29 gets saved */
-#define	CPUSAVE_R30	2		/* where r30 gets saved */
-#define	CPUSAVE_R31	3		/* where r31 gets saved */
+#define	CPUSAVE_R27	0		/* where r27 gets saved */
+#define	CPUSAVE_R28	1		/* where r28 gets saved */
+#define	CPUSAVE_R29	2		/* where r29 gets saved */
+#define	CPUSAVE_R30	3		/* where r30 gets saved */
+#define	CPUSAVE_R31	4		/* where r31 gets saved */
 #define	CPUSAVE_AIM_DAR		4	/* where SPR_DAR gets saved */
 #define	CPUSAVE_AIM_DSISR	5	/* where SPR_DSISR gets saved */
 #define	CPUSAVE_BOOKE_DEAR	4	/* where SPR_DEAR gets saved */

Modified: projects/ppc64/sys/powerpc/include/pmap.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/pmap.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/pmap.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -84,9 +84,16 @@ struct pmap_md {
 #define	NPMAPS		32768
 #endif /* !defined(NPMAPS) */
 
+#ifdef __powerpc64__
+#define NSEGS	64	/* Typical SLB size. */
+#else
+#define NSEGS	16
+#endif
+
 struct	pmap {
 	struct	mtx	pm_mtx;
-	u_int		pm_sr[16];
+	
+	register_t	pm_sr[NSEGS];
 	u_int		pm_active;
 	u_int		pm_context;
 

Modified: projects/ppc64/sys/powerpc/include/spr.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/spr.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/spr.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -161,6 +161,7 @@
 #define	  IBM970MP		  0x0044
 #define	  IBM970GX		  0x0045
 #define	  MPC860		  0x0050
+#define	  IBMCELLBE		  0x0070
 #define	  MPC8240		  0x0081
 #define	  IBM405GP		  0x4011
 #define	  IBM405L		  0x4161

Modified: projects/ppc64/sys/powerpc/include/sr.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/sr.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/sr.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -49,7 +49,7 @@
 #define	KERNEL_SEGMENT	(0xfffff0 + KERNEL_SR)
 #define	KERNEL2_SEGMENT	(0xfffff0 + KERNEL2_SR)
 #define	EMPTY_SEGMENT	0xfffff0
-#define	USER_ADDR	((void *)(USER_SR << ADDR_SR_SHFT))
+#define	USER_ADDR	((void *)((register_t)USER_SR << ADDR_SR_SHFT))
 #define	SEGMENT_LENGTH	0x10000000
 #define	SEGMENT_MASK	0xf0000000
 

Modified: projects/ppc64/sys/powerpc/include/trap_aim.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/trap_aim.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/trap_aim.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -39,7 +39,9 @@
 #define	EXC_RST		0x0100		/* Reset; all but IBM4xx */
 #define	EXC_MCHK	0x0200		/* Machine Check */
 #define	EXC_DSI		0x0300		/* Data Storage Interrupt */
+#define	EXC_DSE		0x0380		/* Data Segment Interrupt */
 #define	EXC_ISI		0x0400		/* Instruction Storage Interrupt */
+#define	EXC_ISE		0x0480		/* Instruction Segment Interrupt */
 #define	EXC_EXI		0x0500		/* External Interrupt */
 #define	EXC_ALI		0x0600		/* Alignment Interrupt */
 #define	EXC_PGM		0x0700		/* Program Interrupt */

Modified: projects/ppc64/sys/powerpc/include/vmparam.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/vmparam.h	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/include/vmparam.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -95,9 +95,9 @@
 
 #if defined(AIM)	/* AIM */
 
-#define	KERNBASE		0x00100000	/* start of kernel virtual */
+#define	KERNBASE		0x00100000UL	/* start of kernel virtual */
 
-#define	VM_MIN_KERNEL_ADDRESS	((vm_offset_t)(KERNEL_SR << ADDR_SR_SHFT))
+#define	VM_MIN_KERNEL_ADDRESS	((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT)
 #define	VM_MAX_KERNEL_ADDRESS	(VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH - 1)
 
 /*

Added: projects/ppc64/sys/powerpc/mambo/mambo_console.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ppc64/sys/powerpc/mambo/mambo_console.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -0,0 +1,220 @@
+/*-
+ * Copyright (C) 2001 Benno Rice.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/dev/mambo/mambo_console.c 193018 2009-05-29 06:41:23Z ed $");
+
+#include "opt_comconsole.h"
+#include "opt_ofw.h"
+
+#include <sys/param.h>
+#include <sys/kdb.h>
+#include <sys/kernel.h>
+#include <sys/priv.h>
+#include <sys/systm.h>
+#include <sys/types.h>
+#include <sys/conf.h>
+#include <sys/cons.h>
+#include <sys/consio.h>
+#include <sys/tty.h>
+
+#include <dev/ofw/openfirm.h>
+
+#include <ddb/ddb.h>
+
+#include "mambocall.h"
+
+#ifndef	MAMBOCONS_POLL_HZ
+#define	MAMBOCONS_POLL_HZ	4
+#endif
+#define MAMBOBURSTLEN	128	/* max number of bytes to write in one chunk */
+
+#define MAMBO_CONSOLE_WRITE	0
+#define MAMBO_CONSOLE_READ	0
+
+static tsw_open_t mambotty_open;
+static tsw_close_t mambotty_close;
+static tsw_outwakeup_t mambotty_outwakeup;
+
+static struct ttydevsw mambo_ttydevsw = {
+	.tsw_flags	= TF_NOPREFIX,
+	.tsw_open	= mambotty_open,
+	.tsw_close	= mambotty_close,
+	.tsw_outwakeup	= mambotty_outwakeup,
+};
+
+static int			polltime;
+static struct callout_handle	mambo_timeouthandle
+    = CALLOUT_HANDLE_INITIALIZER(&mambo_timeouthandle);
+
+#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+static int			alt_break_state;
+#endif
+
+static void	mambo_timeout(void *);
+
+static cn_probe_t	mambo_cnprobe;
+static cn_init_t	mambo_cninit;
+static cn_term_t	mambo_cnterm;
+static cn_getc_t	mambo_cngetc;
+static cn_putc_t	mambo_cnputc;
+
+CONSOLE_DRIVER(mambo);
+
+static void
+cn_drvinit(void *unused)
+{
+	char output[32];
+	struct tty *tp;
+
+	if (mambo_consdev.cn_pri != CN_DEAD &&
+	    mambo_consdev.cn_name[0] != '\0') {
+		if (OF_finddevice("/mambo") == -1)
+			return;
+
+		tp = tty_alloc(&mambo_ttydevsw, NULL);
+		tty_makedev(tp, NULL, "%s", output);
+		tty_makealias(tp, "mambocons");
+	}
+}
+
+SYSINIT(cndev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, cn_drvinit, NULL);
+
+static int
+mambotty_open(struct tty *tp)
+{
+	polltime = hz / MAMBOCONS_POLL_HZ;
+	if (polltime < 1)
+		polltime = 1;
+
+	mambo_timeouthandle = timeout(mambo_timeout, tp, polltime);
+
+	return (0);
+}
+
+static void
+mambotty_close(struct tty *tp)
+{
+
+	/* XXX Should be replaced with callout_stop(9) */
+	untimeout(mambo_timeout, tp, mambo_timeouthandle);
+}
+
+static void
+mambotty_outwakeup(struct tty *tp)
+{
+	int len;
+	u_char buf[MAMBOBURSTLEN];
+
+	for (;;) {
+		len = ttydisc_getc(tp, buf, sizeof buf);
+		if (len == 0)
+			break;
+		mambocall(MAMBO_CONSOLE_WRITE, buf, (register_t)len, 1UL);
+	}
+}
+
+static void
+mambo_timeout(void *v)
+{
+	struct	tty *tp;
+	int 	c;
+
+	tp = (struct tty *)v;
+
+	tty_lock(tp);
+	while ((c = mambo_cngetc(NULL)) != -1)
+		ttydisc_rint(tp, c, 0);
+	ttydisc_rint_done(tp);
+	tty_unlock(tp);
+
+	mambo_timeouthandle = timeout(mambo_timeout, tp, polltime);
+}
+
+static void
+mambo_cnprobe(struct consdev *cp)
+{
+	if (OF_finddevice("/mambo") == -1) {
+		cp->cn_pri = CN_DEAD;
+		return;
+	}
+
+	cp->cn_pri = CN_NORMAL;
+}
+
+static void
+mambo_cninit(struct consdev *cp)
+{
+
+	/* XXX: This is the alias, but that should be good enough */
+	strcpy(cp->cn_name, "mambocons");
+}
+
+static void
+mambo_cnterm(struct consdev *cp)
+{
+}
+
+static int
+mambo_cngetc(struct consdev *cp)
+{
+	unsigned char ch;
+
+	ch = mambocall(MAMBO_CONSOLE_READ);
+
+	if (ch > 0) {
+#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+		int kdb_brk;
+
+		if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
+			switch (kdb_brk) {
+			case KDB_REQ_DEBUGGER:
+				kdb_enter(KDB_WHY_BREAK,
+				    "Break sequence on console");
+				break;
+			case KDB_REQ_PANIC:
+				kdb_panic("Panic sequence on console");
+				break;
+			case KDB_REQ_REBOOT:
+				kdb_reboot();
+				break;
+
+			}
+		}
+#endif
+		return (ch);
+	}
+
+	return (-1);
+}
+
+static void
+mambo_cnputc(struct consdev *cp, int c)
+{
+	char cbuf;
+
+	cbuf = c;
+	mambocall(MAMBO_CONSOLE_WRITE, &cbuf, 1UL, 1UL);
+}

Added: projects/ppc64/sys/powerpc/mambo/mambocall.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ppc64/sys/powerpc/mambo/mambocall.S	Wed Jul 29 19:19:13 2009	(r195948)
@@ -0,0 +1,12 @@
+#include <machine/asm.h>	
+
+	.text
+
+ASENTRY(mambocall)
+	/*
+	 * Use the special Mambo callout opcode and whatever arguments we
+	 * were passed. Then return whatever Mambo returned. 
+	 */
+	.long 0x000EAEB0
+	blr
+

Added: projects/ppc64/sys/powerpc/mambo/mambocall.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ppc64/sys/powerpc/mambo/mambocall.h	Wed Jul 29 19:19:13 2009	(r195948)
@@ -0,0 +1,35 @@
+/*-
+ * Copyright 2008 by Nathan Whitehorn. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/powerpc/powermac/maciovar.h,v 1.8 2008/04/26 18:35:44 marcel Exp $
+ */
+
+#ifndef _MAMBO_MAMBOCALL_H_
+#define _MAMBO_MAMBOCALL_H_
+
+int mambocall(int op, ...);
+
+#endif /* _MAMBO_MAMBOCALL_H_ */

Modified: projects/ppc64/sys/powerpc/powerpc/cpu.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/cpu.c	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/powerpc/cpu.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -96,6 +96,7 @@ static const struct cputab models[] = {
         { "IBM PowerPC 970FX",		IBM970FX,	REVFMT_MAJMIN },
         { "IBM PowerPC 970GX",		IBM970GX,	REVFMT_MAJMIN },
         { "IBM PowerPC 970MP",		IBM970MP,	REVFMT_MAJMIN },
+        { "IBM Cell Broadband Engine",	IBMCELLBE,	REVFMT_MAJMIN },
         { "Motorola PowerPC 7400",	MPC7400,	REVFMT_MAJMIN },
         { "Motorola PowerPC 7410",	MPC7410,	REVFMT_MAJMIN },
         { "Motorola PowerPC 7450",	MPC7450,	REVFMT_MAJMIN },

Modified: projects/ppc64/sys/powerpc/powerpc/genassym.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/genassym.c	Wed Jul 29 19:07:24 2009	(r195947)
+++ projects/ppc64/sys/powerpc/powerpc/genassym.c	Wed Jul 29 19:19:13 2009	(r195948)
@@ -70,33 +70,34 @@ ASSYM(PC_BOOKE_TLB_LEVEL, offsetof(struc
 ASSYM(PC_BOOKE_TLB_LOCK, offsetof(struct pcpu, pc_booke_tlb_lock));
 #endif
 
-ASSYM(CPUSAVE_R28, CPUSAVE_R28*4);
-ASSYM(CPUSAVE_R29, CPUSAVE_R29*4);
-ASSYM(CPUSAVE_R30, CPUSAVE_R30*4);
-ASSYM(CPUSAVE_R31, CPUSAVE_R31*4);
-ASSYM(CPUSAVE_SRR0, CPUSAVE_SRR0*4);
-ASSYM(CPUSAVE_SRR1, CPUSAVE_SRR1*4);
-ASSYM(CPUSAVE_AIM_DAR, CPUSAVE_AIM_DAR*4);
-ASSYM(CPUSAVE_AIM_DSISR, CPUSAVE_AIM_DSISR*4);
-ASSYM(CPUSAVE_BOOKE_DEAR, CPUSAVE_BOOKE_DEAR*4);
-ASSYM(CPUSAVE_BOOKE_ESR, CPUSAVE_BOOKE_ESR*4);
-
-ASSYM(TLBSAVE_BOOKE_LR, TLBSAVE_BOOKE_LR*4);
-ASSYM(TLBSAVE_BOOKE_CR, TLBSAVE_BOOKE_CR*4);
-ASSYM(TLBSAVE_BOOKE_SRR0, TLBSAVE_BOOKE_SRR0*4);
-ASSYM(TLBSAVE_BOOKE_SRR1, TLBSAVE_BOOKE_SRR1*4);
-ASSYM(TLBSAVE_BOOKE_R20, TLBSAVE_BOOKE_R20*4);
-ASSYM(TLBSAVE_BOOKE_R21, TLBSAVE_BOOKE_R21*4);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907291919.n6TJJDfU079979>