Date: Tue, 20 Dec 2005 19:09:04 GMT From: Warner Losh <imp@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 88463 for review Message-ID: <200512201909.jBKJ94lQ021854@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=88463 Change 88463 by imp@imp_Speedy on 2005/12/20 19:08:20 IFC @88461 # I had to hand merge the lcore.s changes that cognet and I made # to this branch, I don't know if they were merged correctly. # I can boot the compressed kernel now. Woo Hoo! Affected files ... .. //depot/projects/arm/src/sys/alpha/alpha/clock.c#4 integrate .. //depot/projects/arm/src/sys/alpha/alpha/elf_machdep.c#2 integrate .. //depot/projects/arm/src/sys/alpha/linux/linux_sysvec.c#3 integrate .. //depot/projects/arm/src/sys/amd64/amd64/apic_vector.S#5 integrate .. //depot/projects/arm/src/sys/amd64/amd64/busdma_machdep.c#5 integrate .. //depot/projects/arm/src/sys/amd64/amd64/elf_machdep.c#3 integrate .. //depot/projects/arm/src/sys/amd64/amd64/local_apic.c#6 integrate .. //depot/projects/arm/src/sys/amd64/isa/clock.c#5 integrate .. //depot/projects/arm/src/sys/amd64/linux32/linux32_sysvec.c#3 integrate .. //depot/projects/arm/src/sys/arm/arm/elf_trampoline.c#4 integrate .. //depot/projects/arm/src/sys/arm/arm/locore.S#15 integrate .. //depot/projects/arm/src/sys/arm/conf/KB920X#9 edit .. //depot/projects/arm/src/sys/boot/common/bootstrap.h#2 integrate .. //depot/projects/arm/src/sys/boot/common/load_elf.c#2 integrate .. //depot/projects/arm/src/sys/boot/common/load_elf_obj.c#2 integrate .. //depot/projects/arm/src/sys/boot/common/reloc_elf.c#2 integrate .. //depot/projects/arm/src/sys/boot/i386/libi386/Makefile#3 integrate .. //depot/projects/arm/src/sys/boot/i386/libi386/biosdisk.c#2 integrate .. //depot/projects/arm/src/sys/boot/i386/libi386/biospnp.c#2 integrate .. //depot/projects/arm/src/sys/boot/i386/libi386/biossmap.c#2 integrate .. //depot/projects/arm/src/sys/boot/i386/libi386/i386_copy.c#2 integrate .. //depot/projects/arm/src/sys/boot/i386/loader/main.c#3 integrate .. //depot/projects/arm/src/sys/boot/pc98/libpc98/Makefile#3 integrate .. //depot/projects/arm/src/sys/cam/scsi/scsi_da.c#4 integrate .. //depot/projects/arm/src/sys/compat/linux/linux_ioctl.c#3 integrate .. //depot/projects/arm/src/sys/compat/linux/linux_mib.c#2 integrate .. //depot/projects/arm/src/sys/compat/linux/linux_mib.h#2 integrate .. //depot/projects/arm/src/sys/compat/ndis/subr_ndis.c#5 integrate .. //depot/projects/arm/src/sys/compat/ndis/subr_ntoskrnl.c#7 integrate .. //depot/projects/arm/src/sys/conf/Makefile.arm#7 integrate .. //depot/projects/arm/src/sys/contrib/pf/net/pf.c#4 integrate .. //depot/projects/arm/src/sys/contrib/pf/net/pfvar.h#3 integrate .. //depot/projects/arm/src/sys/dev/amr/amr.c#6 integrate .. //depot/projects/arm/src/sys/dev/amr/amr_cam.c#3 integrate .. //depot/projects/arm/src/sys/dev/amr/amr_disk.c#3 integrate .. //depot/projects/arm/src/sys/dev/amr/amr_pci.c#4 integrate .. //depot/projects/arm/src/sys/dev/amr/amrio.h#2 integrate .. //depot/projects/arm/src/sys/dev/amr/amrreg.h#2 integrate .. //depot/projects/arm/src/sys/dev/amr/amrvar.h#3 integrate .. //depot/projects/arm/src/sys/dev/ata/ata-chipset.c#5 integrate .. //depot/projects/arm/src/sys/dev/ata/ata-pci.h#4 integrate .. //depot/projects/arm/src/sys/dev/ata/ata-raid.c#5 integrate .. //depot/projects/arm/src/sys/dev/ata/ata-raid.h#5 integrate .. //depot/projects/arm/src/sys/dev/bge/if_bge.c#5 integrate .. //depot/projects/arm/src/sys/dev/bge/if_bgereg.h#5 integrate .. //depot/projects/arm/src/sys/dev/ciss/ciss.c#5 integrate .. //depot/projects/arm/src/sys/dev/cp/cpddk.c#2 integrate .. //depot/projects/arm/src/sys/dev/em/if_em.c#8 integrate .. //depot/projects/arm/src/sys/dev/if_ndis/if_ndis.c#5 integrate .. //depot/projects/arm/src/sys/dev/isp/isp_pci.c#4 integrate .. //depot/projects/arm/src/sys/dev/ixgb/if_ixgb.c#4 integrate .. //depot/projects/arm/src/sys/dev/nge/if_nge.c#4 integrate .. //depot/projects/arm/src/sys/dev/re/if_re.c#6 integrate .. //depot/projects/arm/src/sys/dev/smbus/smb.c#2 integrate .. //depot/projects/arm/src/sys/dev/smbus/smbus.c#2 integrate .. //depot/projects/arm/src/sys/dev/sound/usb/uaudio.c#3 integrate .. //depot/projects/arm/src/sys/dev/ti/if_ti.c#2 integrate .. //depot/projects/arm/src/sys/dev/ti/if_tireg.h#2 integrate .. //depot/projects/arm/src/sys/dev/txp/if_txp.c#4 integrate .. //depot/projects/arm/src/sys/dev/usb/ugen.c#2 integrate .. //depot/projects/arm/src/sys/dev/usb/umass.c#4 integrate .. //depot/projects/arm/src/sys/dev/usb/usb_quirks.c#3 integrate .. //depot/projects/arm/src/sys/dev/usb/usbdevs#5 integrate .. //depot/projects/arm/src/sys/dev/vge/if_vge.c#4 integrate .. //depot/projects/arm/src/sys/fs/nullfs/null_vfsops.c#3 integrate .. //depot/projects/arm/src/sys/fs/nwfs/nwfs_vfsops.c#3 integrate .. //depot/projects/arm/src/sys/fs/smbfs/smbfs_vfsops.c#4 integrate .. //depot/projects/arm/src/sys/geom/nop/g_nop.c#3 integrate .. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/support/kdb.c#2 integrate .. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_freebsd.h#2 integrate .. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_mountops.c#2 integrate .. //depot/projects/arm/src/sys/i386/i386/apic_vector.s#5 integrate .. //depot/projects/arm/src/sys/i386/i386/local_apic.c#5 integrate .. //depot/projects/arm/src/sys/i386/isa/clock.c#4 integrate .. //depot/projects/arm/src/sys/i386/linux/linux_sysvec.c#3 integrate .. //depot/projects/arm/src/sys/ia64/ia64/elf_machdep.c#3 integrate .. //depot/projects/arm/src/sys/kern/imgact_elf.c#3 integrate .. //depot/projects/arm/src/sys/kern/kern_clock.c#3 integrate .. //depot/projects/arm/src/sys/kern/kern_mutex.c#3 integrate .. //depot/projects/arm/src/sys/kern/kern_switch.c#3 integrate .. //depot/projects/arm/src/sys/kern/kern_sx.c#2 integrate .. //depot/projects/arm/src/sys/kern/link_elf.c#3 integrate .. //depot/projects/arm/src/sys/kern/link_elf_obj.c#3 integrate .. //depot/projects/arm/src/sys/kern/sched_ule.c#4 integrate .. //depot/projects/arm/src/sys/kern/subr_prof.c#3 integrate .. //depot/projects/arm/src/sys/kern/sys_pipe.c#3 integrate .. //depot/projects/arm/src/sys/kern/uipc_mbuf.c#8 integrate .. //depot/projects/arm/src/sys/kern/uipc_mqueue.c#3 integrate .. //depot/projects/arm/src/sys/kern/uipc_usrreq.c#4 integrate .. //depot/projects/arm/src/sys/kern/vfs_default.c#5 integrate .. //depot/projects/arm/src/sys/kern/vfs_mount.c#7 integrate .. //depot/projects/arm/src/sys/kern/vfs_syscalls.c#4 integrate .. //depot/projects/arm/src/sys/kern/vfs_vnops.c#5 integrate .. //depot/projects/arm/src/sys/kern/vnode_if.src#4 integrate .. //depot/projects/arm/src/sys/net/bridgestp.c#2 integrate .. //depot/projects/arm/src/sys/net/if_bridge.c#3 integrate .. //depot/projects/arm/src/sys/net/if_bridgevar.h#2 integrate .. //depot/projects/arm/src/sys/net/if_ethersubr.c#6 integrate .. //depot/projects/arm/src/sys/net/if_vlan_var.h#4 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211.c#4 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_input.c#5 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_ioctl.c#5 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_ioctl.h#4 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_node.c#5 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_proto.c#4 integrate .. //depot/projects/arm/src/sys/net80211/ieee80211_var.h#4 integrate .. //depot/projects/arm/src/sys/netinet/if_ether.c#5 integrate .. //depot/projects/arm/src/sys/netinet/in.h#4 integrate .. //depot/projects/arm/src/sys/netinet/ip_fw.h#4 integrate .. //depot/projects/arm/src/sys/netinet/ip_fw2.c#6 integrate .. //depot/projects/arm/src/sys/netinet/ip_mroute.c#5 integrate .. //depot/projects/arm/src/sys/netinet/raw_ip.c#3 integrate .. //depot/projects/arm/src/sys/netinet/tcp_usrreq.c#5 integrate .. //depot/projects/arm/src/sys/netinet/udp_usrreq.c#5 integrate .. //depot/projects/arm/src/sys/nfsclient/nfs_socket.c#5 integrate .. //depot/projects/arm/src/sys/pc98/cbus/sio.c#2 integrate .. //depot/projects/arm/src/sys/pci/amdpm.c#4 integrate .. //depot/projects/arm/src/sys/powerpc/include/frame.h#2 integrate .. //depot/projects/arm/src/sys/powerpc/powerpc/genassym.c#2 integrate .. //depot/projects/arm/src/sys/sparc64/sparc64/elf_machdep.c#2 integrate .. //depot/projects/arm/src/sys/sys/elf32.h#2 integrate .. //depot/projects/arm/src/sys/sys/elf64.h#2 integrate .. //depot/projects/arm/src/sys/sys/elf_common.h#2 integrate .. //depot/projects/arm/src/sys/sys/elf_generic.h#2 integrate .. //depot/projects/arm/src/sys/sys/imgact_elf.h#2 integrate .. //depot/projects/arm/src/sys/sys/ktr.h#5 integrate .. //depot/projects/arm/src/sys/sys/linker.h#2 integrate .. //depot/projects/arm/src/sys/sys/lock.h#4 integrate .. //depot/projects/arm/src/sys/sys/mount.h#5 integrate .. //depot/projects/arm/src/sys/sys/param.h#6 integrate .. //depot/projects/arm/src/sys/sys/resourcevar.h#3 integrate .. //depot/projects/arm/src/sys/sys/vnode.h#6 integrate .. //depot/projects/arm/src/sys/tools/vnode_if.awk#3 integrate .. //depot/projects/arm/src/sys/ufs/ufs/quota.h#2 integrate .. //depot/projects/arm/src/sys/ufs/ufs/ufs_quota.c#3 integrate .. //depot/projects/arm/src/sys/ufs/ufs/ufs_vfsops.c#4 integrate .. //depot/projects/arm/src/sys/vm/vm_extern.h#3 integrate .. //depot/projects/arm/src/sys/vm/vm_fault.c#4 integrate .. //depot/projects/arm/src/sys/vm/vm_glue.c#3 integrate .. //depot/projects/arm/src/sys/vm/vm_page.c#4 integrate Differences ... ==== //depot/projects/arm/src/sys/alpha/alpha/clock.c#4 (text+ko) ==== @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/clock.c,v 1.40 2005/11/20 01:31:29 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/clock.c,v 1.41 2005/12/14 21:42:12 jhb Exp $"); #include "opt_clock.h" @@ -158,8 +158,8 @@ static u_int32_t last_time; static void handleclock(void* arg); -static void -calibrate_clocks(u_int32_t firmware_freq, u_int32_t *pcc, u_int32_t *timer); +static void calibrate_clocks(u_int32_t firmware_freq, u_int32_t *pcc, + u_int32_t *timer); static void set_timer_freq(u_int freq, int intr_freq); void ==== //depot/projects/arm/src/sys/alpha/alpha/elf_machdep.c#2 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/elf_machdep.c,v 1.19 2004/08/11 02:35:04 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/elf_machdep.c,v 1.20 2005/12/18 04:52:34 marcel Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -121,7 +121,7 @@ Elf_Addr *where; Elf_Addr addr; Elf_Addr addend; - Elf_Word rtype, symidx; + Elf_Size rtype, symidx; const Elf_Rel *rel; const Elf_Rela *rela; ==== //depot/projects/arm/src/sys/alpha/linux/linux_sysvec.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_sysvec.c,v 1.96 2005/10/14 12:43:43 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/linux/linux_sysvec.c,v 1.97 2005/12/15 16:30:41 jhb Exp $"); /* XXX we use functions that might not exist. */ #include "opt_compat.h" @@ -265,7 +265,6 @@ linux_ioctl_unregister_handler(*lihp); if (bootverbose) printf("Linux ELF exec handler removed\n"); - linux_mib_destroy(); } else printf("Could not deinstall ELF interpreter entry\n"); break; ==== //depot/projects/arm/src/sys/amd64/amd64/apic_vector.S#5 (text+ko) ==== @@ -28,7 +28,7 @@ * SUCH DAMAGE. * * from: vector.s, 386BSD 0.1 unknown origin - * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.106 2005/12/08 18:33:29 jhb Exp $ + * $FreeBSD: src/sys/amd64/amd64/apic_vector.S,v 1.107 2005/12/14 21:47:01 jhb Exp $ */ /* @@ -171,8 +171,7 @@ iretq /* - * Forward hardclock to another CPU. Pushes a clockframe and calls - * forwarded_hardclock(). + * Handler for IPIs sent via the per-cpu IPI bitmap. */ .text SUPERALIGN_TEXT ==== //depot/projects/arm/src/sys/amd64/amd64/busdma_machdep.c#5 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.71 2005/11/24 15:28:32 le Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.72 2005/12/16 05:57:18 scottl Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -49,7 +49,7 @@ #include <machine/bus.h> #include <machine/md_var.h> -#define MAX_BPAGES 512 +#define MAX_BPAGES 8192 struct bounce_zone; ==== //depot/projects/arm/src/sys/amd64/amd64/elf_machdep.c#3 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/elf_machdep.c,v 1.23 2005/09/27 18:18:23 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/elf_machdep.c,v 1.24 2005/12/18 04:52:35 marcel Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -119,7 +119,7 @@ Elf32_Addr *where32, val32; Elf_Addr addr; Elf_Addr addend; - Elf_Word rtype, symidx; + Elf_Size rtype, symidx; const Elf_Rel *rel; const Elf_Rela *rela; ==== //depot/projects/arm/src/sys/amd64/amd64/local_apic.c#6 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.20 2005/12/08 18:33:29 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.22 2005/12/13 18:29:09 jhb Exp $"); #include "opt_hwpmc_hooks.h" ==== //depot/projects/arm/src/sys/amd64/isa/clock.c#5 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.222 2005/07/13 15:43:19 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/isa/clock.c,v 1.223 2005/12/12 22:27:07 peter Exp $"); /* * Routines to handle clock hardware. @@ -61,6 +61,7 @@ #include <sys/kernel.h> #include <sys/limits.h> #include <sys/module.h> +#include <sys/sched.h> #include <sys/sysctl.h> #include <sys/cons.h> #include <sys/power.h> @@ -269,7 +270,21 @@ int getit_calls = 1; int n1; static int state = 0; +#endif + if (tsc_freq != 0 && !tsc_is_broken) { + uint64_t start, end, now; + + sched_pin(); + start = rdtsc(); + end = start + (tsc_freq * n) / 1000000; + do { + now = rdtsc(); + } while (now < end || (now > start && end < start)); + sched_unpin(); + return; + } +#ifdef DELAYDEBUG if (state == 0) { state = 1; for (n1 = 1; n1 <= 10000000; n1 *= 10) ==== //depot/projects/arm/src/sys/amd64/linux32/linux32_sysvec.c#3 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.12 2005/11/02 21:18:07 ps Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.13 2005/12/15 16:30:41 jhb Exp $"); /* XXX we use functions that might not exist. */ #include "opt_compat.h" @@ -1083,7 +1083,6 @@ linux_ioctl_unregister_handler(*lihp); if (bootverbose) printf("Linux ELF exec handler removed\n"); - linux_mib_destroy(); } else printf("Could not deinstall ELF interpreter entry\n"); break; ==== //depot/projects/arm/src/sys/arm/arm/elf_trampoline.c#4 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.3 2005/12/05 12:55:46 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.4 2005/12/20 01:28:17 cognet Exp $"); #include <machine/asm.h> #include <sys/types.h> #include <sys/elf32.h> @@ -47,9 +47,10 @@ { const char *s = src; char *d = dst; - + while (len) { - if (len >= 4 && !((vm_offset_t)d & 3) && !((vm_offset_t)s & 3)) { + if (0 && len >= 4 && !((vm_offset_t)d & 3) && + !((vm_offset_t)s & 3)) { *(uint32_t *)d = *(uint32_t *)s; s += 4; d += 4; @@ -83,6 +84,29 @@ void _start(void) { + int physaddr = KERNPHYSADDR; + int tmp1; + + __asm __volatile("adr %0, 2f\n" + "bic %0, %0, #0xff000000\n" + "bic sp, sp, #0xff000000\n" + "and %1, %1, #0xff000000\n" + "orr %0, %0, %1\n" + "orr sp, sp, %1\n" + "mrc p15, 0, %1, c1, c0, 0\n" + "bic %1, %1, #1\n" /* Disable MMU */ + "orr %1, %1, #(4 | 8)\n" /* Add DC enable, + WBUF enable */ + "orr %1, %1, #0x1000\n" /* Add IC enable */ + "orr %1, %1, #(0x800)\n" /* BPRD enable */ + + "mcr p15, 0, %1, c1, c0, 0\n" + "nop\n" + "nop\n" + "nop\n" + "mov pc, %0\n" + "2: nop\n" + : "=r" (tmp1), "+r" (physaddr)); __start(); } @@ -156,6 +180,7 @@ char slide[GZ_WSIZE]; orig_input = kernel; + memcnt = memtot = 0; i_input = (char *)kernel + GZ_HEAD; if (((char *)kernel)[3] & 0x18) { while (*i_input) @@ -173,7 +198,6 @@ #endif - void * load_kernel(unsigned int kstart, unsigned int curaddr,unsigned int func_end, int d) @@ -194,6 +218,7 @@ entry_point = (void*)eh->e_entry; memcpy(phdr, (void *)(kstart + eh->e_phoff ), eh->e_phnum * sizeof(phdr[0])); + /* Determine lastaddr. */ for (i = 0; i < eh->e_phnum; i++) { if (lastaddr < (phdr[i].p_vaddr - KERNVIRTADDR + curaddr @@ -204,9 +229,12 @@ /* Save the symbol tables, as there're about to be scratched. */ lastaddr = roundup(lastaddr, sizeof(long)); + shdr = (Elf_Shdr *)lastaddr; + lastaddr += sizeof(*shdr) * eh->e_shnum; + memcpy(shdr, (void *)(kstart + eh->e_shoff), + sizeof(*shdr) * eh->e_shnum); if (eh->e_shnum * eh->e_shentsize != 0 && eh->e_shoff != 0) { - shdr = (Elf_Shdr *)(kstart + eh->e_shoff); for (i = 0; i < eh->e_shnum; i++) { if (shdr[i].sh_type == SHT_SYMTAB) { for (j = 0; j < eh->e_phnum; j++) { @@ -295,6 +323,10 @@ *((Elf_Addr *)curaddr + 2) = lastaddr - curaddr + KERNVIRTADDR; } else *(Elf_Addr *)curaddr = 0; + /* Invalidate the instruction cache. */ + __asm __volatile("mcr p15, 0, %0, c7, c5, 0\n" + "mcr p15, 0, %0, c7, c10, 4\n" + : : "r" (curaddr)); /* Jump to the entry point. */ ((void(*)(void))(entry_point - KERNVIRTADDR + curaddr))(); __asm __volatile(".globl func_end\n" ==== //depot/projects/arm/src/sys/arm/arm/locore.S#15 (text+ko) ==== @@ -37,7 +37,7 @@ #include <machine/asm.h> #include <machine/armreg.h> #include <machine/pte.h> -__FBSDID("$FreeBSD: src/sys/arm/arm/locore.S,v 1.11 2005/10/03 14:10:55 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/locore.S,v 1.12 2005/12/20 01:29:17 cognet Exp $"); /* What size should this really be ? It is only used by init_arm() */ #define INIT_ARM_STACK_SIZE 2048 @@ -140,12 +140,13 @@ Lstart_off: .word start_inram-_C_LABEL(_start) start_inram: adr r7, Lunmapped - bic r7, r7, #0xff000000 - orr r7, r7, #PHYSADDR /* Disable MMU for a while */ mrc p15, 0, r2, c1, c0, 0 - bic r2, r2, #CPU_CONTROL_MMU_ENABLE + bic r2, r2, #(CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE |\ + CPU_CONTROL_WBUF_ENABLE) + bic r2, r2, #(CPU_CONTROL_IC_ENABLE) + bic r2, r2, #(CPU_CONTROL_BPRD_ENABLE) mcr p15, 0, r2, c1, c0, 0 nop @@ -159,6 +160,8 @@ /* build page table from scratch */ ldr r0, Lstartup_pagetable adr r4, mmu_init_table + bic r4, r4, #0xff000000 + orr r4, r4, #PHYSADDR b 3f 2: @@ -181,25 +184,27 @@ /* Set the Domain Access register. Very important! */ mov r0, #((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT) mcr p15, 0, r0, c3, c0, 0 - /* Enable MMU */ mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #CPU_CONTROL_MMU_ENABLE mcr p15, 0, r0, c1, c0, 0 + nop + nop + nop CPWAIT(r0) - bl mmu_done +#endif mmu_done: -#endif + nop adr r1, .Lstart ldmia r1, {r1, r2, sp} /* Set initial stack and */ sub r2, r2, r1 /* get zero init data */ mov r3, #0 - .L1: str r3, [r1], #0x0004 /* get zero init data */ subs r2, r2, #4 bgt .L1 + ldr pc, .Lvirt_done mov r0, pc #if KERNVIRTADDR > KERNPHYSADDR @@ -218,7 +223,6 @@ sub pc, pc, r5 #endif virt_done: - nop LED1ON mov fp, #0 /* trace back starts here */ bl _C_LABEL(initarm) /* Off we go */ @@ -260,6 +264,8 @@ .word _end .word svcstk + INIT_ARM_STACK_SIZE +.Lvirt_done: + .word virt_done .Lmainreturned: .asciz "main() returned" .align 0 ==== //depot/projects/arm/src/sys/arm/conf/KB920X#9 (text+ko) ==== @@ -42,7 +42,7 @@ #options UFS_ACL #Support for access control lists #options UFS_DIRHASH #Improve performance on big directories options MD_ROOT #MD is a potential root device -options MD_ROOT_SIZE=4096 # 4MB ram disk +options MD_ROOT_SIZE=1024 # 3MB ram disk options ROOTDEVNAME=\"ufs:md0\" #options NFSCLIENT #Network Filesystem Client #options NFSSERVER #Network Filesystem Server @@ -67,7 +67,6 @@ device loop device ether device nexus -#device saarm device uart # Debugging for use in -current ==== //depot/projects/arm/src/sys/boot/common/bootstrap.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.41 2004/08/29 00:48:41 iedowse Exp $ + * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.42 2005/12/18 04:52:35 marcel Exp $ */ #include <sys/types.h> @@ -240,7 +240,7 @@ #define ELF_RELOC_RELA 2 struct elf_file; -typedef Elf_Addr (symaddr_fn)(struct elf_file *ef, Elf_Word symidx); +typedef Elf_Addr (symaddr_fn)(struct elf_file *ef, Elf_Size symidx); int __elfN(loadfile)(char *filename, u_int64_t dest, struct preloaded_file **result); int __elfN(obj_loadfile)(char *filename, u_int64_t dest, ==== //depot/projects/arm/src/sys/boot/common/load_elf.c#2 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.32 2004/08/28 23:03:05 iedowse Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/common/load_elf.c,v 1.33 2005/12/18 04:52:35 marcel Exp $"); #include <sys/param.h> #include <sys/exec.h> @@ -744,7 +744,7 @@ } static Elf_Addr -__elfN(symaddr)(struct elf_file *ef, Elf_Word symidx) +__elfN(symaddr)(struct elf_file *ef, Elf_Size symidx) { /* Symbol lookup by index not required here. */ ==== //depot/projects/arm/src/sys/boot/common/load_elf_obj.c#2 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/common/load_elf_obj.c,v 1.1 2004/08/29 00:48:41 iedowse Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/common/load_elf_obj.c,v 1.2 2005/12/18 04:52:35 marcel Exp $"); #include <sys/param.h> #include <sys/exec.h> @@ -70,7 +70,7 @@ Elf_Addr p, void *val, size_t len); static int __elfN(obj_parse_modmetadata)(struct preloaded_file *mp, elf_file_t ef); -static Elf_Addr __elfN(obj_symaddr)(struct elf_file *ef, Elf_Word symidx); +static Elf_Addr __elfN(obj_symaddr)(struct elf_file *ef, Elf_Size symidx); const char *__elfN(obj_kerneltype) = "elf kernel"; const char *__elfN(obj_moduletype) = "elf obj module"; @@ -495,7 +495,7 @@ /* Look up the address of a specified symbol. */ static Elf_Addr -__elfN(obj_symaddr)(struct elf_file *ef, Elf_Word symidx) +__elfN(obj_symaddr)(struct elf_file *ef, Elf_Size symidx) { Elf_Sym sym; Elf_Addr base; ==== //depot/projects/arm/src/sys/boot/common/reloc_elf.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/common/reloc_elf.c,v 1.1 2004/08/28 23:03:05 iedowse Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/common/reloc_elf.c,v 1.2 2005/12/18 04:52:35 marcel Exp $"); #include <sys/types.h> #include <machine/elf.h> @@ -54,7 +54,7 @@ int reltype, Elf_Addr relbase, Elf_Addr dataaddr, void *data, size_t len) { #ifdef __sparc__ - Elf_Word w; + Elf_Size w; const Elf_Rela *a; switch (reltype) { @@ -81,7 +81,7 @@ #elif defined(__i386__) && __ELF_WORD_SIZE == 64 Elf64_Addr *where, val; Elf_Addr addend, addr; - Elf_Word rtype, symidx; + Elf_Size rtype, symidx; const Elf_Rel *rel; const Elf_Rela *rela; @@ -138,7 +138,7 @@ return (0); #elif defined(__i386__) && __ELF_WORD_SIZE == 32 Elf_Addr addend, addr, *where, val; - Elf_Word rtype, symidx; + Elf_Size rtype, symidx; const Elf_Rel *rel; const Elf_Rela *rela; ==== //depot/projects/arm/src/sys/boot/i386/libi386/Makefile#3 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/i386/libi386/Makefile,v 1.38 2005/07/14 19:52:22 jkim Exp $ +# $FreeBSD: src/sys/boot/i386/libi386/Makefile,v 1.39 2005/12/19 09:00:11 sobomax Exp $ # LIB= i386 INTERNALLIB= @@ -24,6 +24,9 @@ # Include simple terminal emulation (cons25-compatible) CFLAGS+= -DTERM_EMU +# XXX: make alloca() useable +CFLAGS+= -Dalloca=__builtin_alloca + CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \ -I${.CURDIR}/../../../contrib/dev/acpica \ -I${.CURDIR}/../../.. -I. ==== //depot/projects/arm/src/sys/boot/i386/libi386/biosdisk.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biosdisk.c,v 1.45 2004/09/21 06:46:44 wes Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biosdisk.c,v 1.46 2005/12/19 09:00:11 sobomax Exp $"); /* * BIOS disk device handling. @@ -861,17 +861,18 @@ p = dest; /* Decide whether we have to bounce */ - if ((od->od_unit < 0x80) && - ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) { + if (VTOP(dest) >> 20 != 0 || ((od->od_unit < 0x80) && + ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16)))) { /* - * There is a 64k physical boundary somewhere in the destination buffer, so we have + * There is a 64k physical boundary somewhere in the destination buffer, or the + * destination buffer is above first 1MB of physical memory so we have * to arrange a suitable bounce buffer. Allocate a buffer twice as large as we * need to. Use the bottom half unless there is a break there, in which case we * use the top half. */ x = min(FLOPPY_BOUNCEBUF, (unsigned)blks); - bbuf = malloc(x * 2 * BIOSDISK_SECSIZE); + bbuf = alloca(x * 2 * BIOSDISK_SECSIZE); if (((u_int32_t)VTOP(bbuf) & 0xffff0000) == ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) { breg = bbuf; } else { @@ -960,8 +961,6 @@ DEBUG("ax = 0x%04x cx = 0x%04x dx = 0x%04x status 0x%x", 0x200 | x, ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec, (hd << 8) | od->od_unit, (v86.eax >> 8) & 0xff); if (result) { - if (bbuf != NULL) - free(bbuf); return(-1); } if (bbuf != NULL) @@ -972,8 +971,6 @@ } /* hexdump(dest, (blks * BIOSDISK_SECSIZE)); */ - if (bbuf != NULL) - free(bbuf); return(0); } @@ -993,18 +990,18 @@ p = dest; /* Decide whether we have to bounce */ - if ((od->od_unit < 0x80) && - ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16))) { + if (VTOP(dest) >> 20 != 0 || ((od->od_unit < 0x80) && + ((VTOP(dest) >> 16) != (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16)))) { /* - * There is a 64k physical boundary somewhere in the destination buffer, so we have + * There is a 64k physical boundary somewhere in the destination buffer, or the + * destination buffer is above first 1MB of physical memory so we have * to arrange a suitable bounce buffer. Allocate a buffer twice as large as we * need to. Use the bottom half unless there is a break there, in which case we * use the top half. */ - x = min(FLOPPY_BOUNCEBUF, (unsigned)blks); - bbuf = malloc(x * 2 * BIOSDISK_SECSIZE); + bbuf = alloca(x * 2 * BIOSDISK_SECSIZE); if (((u_int32_t)VTOP(bbuf) & 0xffff0000) == ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) { breg = bbuf; } else { @@ -1104,15 +1101,11 @@ DEBUG("ax = 0x%04x cx = 0x%04x dx = 0x%04x status 0x%x", 0x200 | x, ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec, (hd << 8) | od->od_unit, (v86.eax >> 8) & 0xff); if (result) { - if (bbuf != NULL) - free(bbuf); return(-1); } } /* hexdump(dest, (blks * BIOSDISK_SECSIZE)); */ - if (bbuf != NULL) - free(bbuf); return(0); } static int ==== //depot/projects/arm/src/sys/boot/i386/libi386/biospnp.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biospnp.c,v 1.9 2003/08/25 23:28:31 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biospnp.c,v 1.10 2005/12/19 09:00:11 sobomax Exp $"); /* * PnP BIOS enumerator. @@ -165,7 +165,7 @@ if (biospnp_init()) return; - devNodeBuffer = (struct pnp_devNode *)malloc(pnp_NodeSize); + devNodeBuffer = (struct pnp_devNode *)alloca(pnp_NodeSize); Node = 0; count = 1000; while((Node != 0xff) && (count-- > 0)) { ==== //depot/projects/arm/src/sys/boot/i386/libi386/biossmap.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biossmap.c,v 1.3 2004/11/08 23:59:44 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biossmap.c,v 1.4 2005/12/19 09:00:11 sobomax Exp $"); /* * Obtain memory configuration information from the BIOS @@ -86,9 +86,10 @@ v86.eax = 0xe820; v86.ecx = sizeof(struct smap); v86.edx = SMAPSIG; - v86.es = VTOPSEG(&smapbase[smaplen]); - v86.edi = VTOPOFF(&smapbase[smaplen]); + v86.es = VTOPSEG(&smap); + v86.edi = VTOPOFF(&smap); v86int(); + bcopy(&smap, &smapbase[smaplen], sizeof(struct smap)); smaplen++; if ((v86.efl & 1) || (v86.eax != SMAPSIG)) break; ==== //depot/projects/arm/src/sys/boot/i386/libi386/i386_copy.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/i386_copy.c,v 1.10 2003/08/25 23:28:31 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/i386_copy.c,v 1.11 2005/12/19 09:00:11 sobomax Exp $"); /* * MD primitives supporting placement of module data @@ -37,8 +37,6 @@ #include "libi386.h" #include "btxv86.h" -#define READIN_BUF (16 * 1024) - ssize_t i386_copyin(const void *src, vm_offset_t dest, const size_t len) { @@ -67,25 +65,11 @@ ssize_t i386_readin(const int fd, vm_offset_t dest, const size_t len) { - void *buf; - size_t resid, chunk, get; - ssize_t got; - if (dest + len >= memtop) - return(0); + if (dest + len >= memtop) { + errno = EFBIG; + return(-1); + } - chunk = min(READIN_BUF, len); - buf = malloc(chunk); - if (buf == NULL) - return(0); - - for (resid = len; resid > 0; resid -= got, dest += got) { - get = min(chunk, resid); - got = read(fd, buf, get); - if (got <= 0) - break; - bcopy(buf, PTOV(dest), (size_t)got); - } - free(buf); - return(len - resid); + return (read(fd, PTOV(dest), len)); } ==== //depot/projects/arm/src/sys/boot/i386/loader/main.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.33 2005/09/22 15:14:13 ru Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.35 2005/12/19 18:39:01 sobomax Exp $"); /* * MD bootstrap main() and assorted miscellaneous @@ -72,6 +72,9 @@ /* XXX debugging */ extern char end[]; +static void *heap_top; +static void *heap_bottom; + int main(void) { @@ -88,7 +91,14 @@ */ bios_getmem(); - setheap((void *)end, (void *)bios_basemem); +#ifdef LOADER_BZIP2_SUPPORT + heap_top = PTOV(0x400000); + heap_bottom = PTOV(0x100000); +#else + heap_top = (void *)bios_basemem; + heap_bottom = (void *)end; +#endif + setheap(heap_bottom, heap_top); /* * XXX Chicken-and-egg problem; we want to have console output early, but some @@ -269,7 +279,8 @@ command_heap(int argc, char *argv[]) { mallocstats(); - printf("heap base at %p, top at %p\n", end, sbrk(0)); + printf("heap base at %p, top at %p, upper limit at %p\n", heap_bottom, + sbrk(0), heap_top); return(CMD_OK); } ==== //depot/projects/arm/src/sys/boot/pc98/libpc98/Makefile#3 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/boot/pc98/libpc98/Makefile,v 1.22 2005/05/08 14:17:28 nyan Exp $ +# $FreeBSD: src/sys/boot/pc98/libpc98/Makefile,v 1.23 2005/12/20 08:54:30 sobomax Exp $ # LIB= pc98 INTERNALLIB= @@ -24,6 +24,9 @@ # Include simple terminal emulation (cons25-compatible) CFLAGS+= -DTERM_EMU +# XXX: make alloca() useable +CFLAGS+= -Dalloca=__builtin_alloca + CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \ -I${.CURDIR}/../../i386/libi386 \ -I${.CURDIR}/../../.. -I. ==== //depot/projects/arm/src/sys/cam/scsi/scsi_da.c#4 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.181 2005/11/18 02:43:49 jdp Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.183 2005/12/19 03:43:48 pjd Exp $"); #include <sys/param.h> @@ -351,8 +351,17 @@ * Kingston DataTraveler II+ USB Pen-Drive. * Reported by: Pawel Jakub Dawidek <pjd@FreeBSD.org> */ - {T_DIRECT, SIP_MEDIA_REMOVABLE, "Kingston" , "DataTraveler II+", "*"}, - /*quirks*/ DA_Q_NO_SYNC_CACHE + {T_DIRECT, SIP_MEDIA_REMOVABLE, "Kingston" , "DataTraveler II+", + "*"}, /*quirks*/ DA_Q_NO_SYNC_CACHE + }, + { + /* + * Motorola E398 Mobile Phone (TransFlash memory card). + * Reported by: Wojciech A. Koszek <dunstan@FreeBSD.czest.pl> + * PR: usb/89889 + */ + {T_DIRECT, SIP_MEDIA_REMOVABLE, "Motorola" , "Motorola Phone", + "*"}, /*quirks*/ DA_Q_NO_SYNC_CACHE }, }; ==== //depot/projects/arm/src/sys/compat/linux/linux_ioctl.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.130 2005/08/28 13:11:08 delphij Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.131 2005/12/13 15:32:52 delphij Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -806,22 +806,22 @@ } >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200512201909.jBKJ94lQ021854>