diff options
Diffstat (limited to 'ANDROID_3.4.5/arch/x86/boot')
51 files changed, 0 insertions, 7881 deletions
diff --git a/ANDROID_3.4.5/arch/x86/boot/Makefile b/ANDROID_3.4.5/arch/x86/boot/Makefile deleted file mode 100644 index 5a747dd8..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/Makefile +++ /dev/null @@ -1,194 +0,0 @@ -# -# arch/x86/boot/Makefile -# -# This file is subject to the terms and conditions of the GNU General Public -# License. See the file "COPYING" in the main directory of this archive -# for more details. -# -# Copyright (C) 1994 by Linus Torvalds -# Changed by many, many contributors over the years. -# - -# If you want to preset the SVGA mode, uncomment the next line and -# set SVGA_MODE to whatever number you want. -# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode. -# The number is the same as you would ordinarily press at bootup. - -SVGA_MODE := -DSVGA_MODE=NORMAL_VGA - -targets := vmlinux.bin setup.bin setup.elf bzImage -targets += fdimage fdimage144 fdimage288 image.iso mtools.conf -subdir- := compressed - -setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpucheck.o -setup-y += early_serial_console.o edd.o header.o main.o mca.o memory.o -setup-y += pm.o pmjump.o printf.o regs.o string.o tty.o video.o -setup-y += video-mode.o version.o -setup-$(CONFIG_X86_APM_BOOT) += apm.o - -# The link order of the video-*.o modules can matter. In particular, -# video-vga.o *must* be listed first, followed by video-vesa.o. -# Hardware-specific drivers should follow in the order they should be -# probed, and video-bios.o should typically be last. -setup-y += video-vga.o -setup-y += video-vesa.o -setup-y += video-bios.o - -targets += $(setup-y) -hostprogs-y := mkcpustr tools/build - -HOST_EXTRACFLAGS += -I$(srctree)/tools/include $(LINUXINCLUDE) \ - -D__EXPORTED_HEADERS__ - -$(obj)/cpu.o: $(obj)/cpustr.h - -quiet_cmd_cpustr = CPUSTR $@ - cmd_cpustr = $(obj)/mkcpustr > $@ -targets += cpustr.h -$(obj)/cpustr.h: $(obj)/mkcpustr FORCE - $(call if_changed,cpustr) - -# --------------------------------------------------------------------------- - -# How to compile the 16-bit code. Note we always compile for -march=i386, -# that way we can complain to the user if the CPU is insufficient. -KBUILD_CFLAGS := $(LINUXINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \ - -DDISABLE_BRANCH_PROFILING \ - -Wall -Wstrict-prototypes \ - -march=i386 -mregparm=3 \ - -include $(srctree)/$(src)/code16gcc.h \ - -fno-strict-aliasing -fomit-frame-pointer \ - $(call cc-option, -ffreestanding) \ - $(call cc-option, -fno-toplevel-reorder,\ - $(call cc-option, -fno-unit-at-a-time)) \ - $(call cc-option, -fno-stack-protector) \ - $(call cc-option, -mpreferred-stack-boundary=2) -KBUILD_CFLAGS += $(call cc-option, -m32) -KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ -GCOV_PROFILE := n - -$(obj)/bzImage: asflags-y := $(SVGA_MODE) - -quiet_cmd_image = BUILD $@ -cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin > $@ - -$(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE - $(call if_changed,image) - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' - -OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S -$(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE - $(call if_changed,objcopy) - -SETUP_OBJS = $(addprefix $(obj)/,$(setup-y)) - -sed-voffset := -e 's/^\([0-9a-fA-F]*\) . \(_text\|_end\)$$/\#define VO_\2 0x\1/p' - -quiet_cmd_voffset = VOFFSET $@ - cmd_voffset = $(NM) $< | sed -n $(sed-voffset) > $@ - -targets += voffset.h -$(obj)/voffset.h: vmlinux FORCE - $(call if_changed,voffset) - -sed-zoffset := -e 's/^\([0-9a-fA-F]*\) . \(startup_32\|input_data\|_end\|z_.*\)$$/\#define ZO_\2 0x\1/p' - -quiet_cmd_zoffset = ZOFFSET $@ - cmd_zoffset = $(NM) $< | sed -n $(sed-zoffset) > $@ - -targets += zoffset.h -$(obj)/zoffset.h: $(obj)/compressed/vmlinux FORCE - $(call if_changed,zoffset) - - -AFLAGS_header.o += -I$(obj) -$(obj)/header.o: $(obj)/voffset.h $(obj)/zoffset.h - -LDFLAGS_setup.elf := -T -$(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE - $(call if_changed,ld) - -OBJCOPYFLAGS_setup.bin := -O binary -$(obj)/setup.bin: $(obj)/setup.elf FORCE - $(call if_changed,objcopy) - -$(obj)/compressed/vmlinux: FORCE - $(Q)$(MAKE) $(build)=$(obj)/compressed $@ - -# Set this if you want to pass append arguments to the -# bzdisk/fdimage/isoimage kernel -FDARGS = -# Set this if you want an initrd included with the -# bzdisk/fdimage/isoimage kernel -FDINITRD = - -image_cmdline = default linux $(FDARGS) $(if $(FDINITRD),initrd=initrd.img,) - -$(obj)/mtools.conf: $(src)/mtools.conf.in - sed -e 's|@OBJ@|$(obj)|g' < $< > $@ - -# This requires write access to /dev/fd0 -bzdisk: $(obj)/bzImage $(obj)/mtools.conf - MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync - syslinux /dev/fd0 ; sync - echo '$(image_cmdline)' | \ - MTOOLSRC=$(src)/mtools.conf mcopy - a:syslinux.cfg - if [ -f '$(FDINITRD)' ] ; then \ - MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' a:initrd.img ; \ - fi - MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage a:linux ; sync - -# These require being root or having syslinux 2.02 or higher installed -fdimage fdimage144: $(obj)/bzImage $(obj)/mtools.conf - dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440 - MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync - syslinux $(obj)/fdimage ; sync - echo '$(image_cmdline)' | \ - MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg - if [ -f '$(FDINITRD)' ] ; then \ - MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' v:initrd.img ; \ - fi - MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage v:linux ; sync - -fdimage288: $(obj)/bzImage $(obj)/mtools.conf - dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880 - MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync - syslinux $(obj)/fdimage ; sync - echo '$(image_cmdline)' | \ - MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg - if [ -f '$(FDINITRD)' ] ; then \ - MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' w:initrd.img ; \ - fi - MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage w:linux ; sync - -isoimage: $(obj)/bzImage - -rm -rf $(obj)/isoimage - mkdir $(obj)/isoimage - for i in lib lib64 share end ; do \ - if [ -f /usr/$$i/syslinux/isolinux.bin ] ; then \ - cp /usr/$$i/syslinux/isolinux.bin $(obj)/isoimage ; \ - break ; \ - fi ; \ - if [ $$i = end ] ; then exit 1 ; fi ; \ - done - cp $(obj)/bzImage $(obj)/isoimage/linux - echo '$(image_cmdline)' > $(obj)/isoimage/isolinux.cfg - if [ -f '$(FDINITRD)' ] ; then \ - cp '$(FDINITRD)' $(obj)/isoimage/initrd.img ; \ - fi - mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - $(obj)/isoimage - isohybrid $(obj)/image.iso 2>/dev/null || true - rm -rf $(obj)/isoimage - -bzlilo: $(obj)/bzImage - if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi - if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi - cat $(obj)/bzImage > $(INSTALL_PATH)/vmlinuz - cp System.map $(INSTALL_PATH)/ - if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi - -install: - sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(obj)/bzImage \ - System.map "$(INSTALL_PATH)" diff --git a/ANDROID_3.4.5/arch/x86/boot/a20.c b/ANDROID_3.4.5/arch/x86/boot/a20.c deleted file mode 100644 index 64a31a6d..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/a20.c +++ /dev/null @@ -1,165 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007-2008 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Enable A20 gate (return -1 on failure) - */ - -#include "boot.h" - -#define MAX_8042_LOOPS 100000 -#define MAX_8042_FF 32 - -static int empty_8042(void) -{ - u8 status; - int loops = MAX_8042_LOOPS; - int ffs = MAX_8042_FF; - - while (loops--) { - io_delay(); - - status = inb(0x64); - if (status == 0xff) { - /* FF is a plausible, but very unlikely status */ - if (!--ffs) - return -1; /* Assume no KBC present */ - } - if (status & 1) { - /* Read and discard input data */ - io_delay(); - (void)inb(0x60); - } else if (!(status & 2)) { - /* Buffers empty, finished! */ - return 0; - } - } - - return -1; -} - -/* Returns nonzero if the A20 line is enabled. The memory address - used as a test is the int $0x80 vector, which should be safe. */ - -#define A20_TEST_ADDR (4*0x80) -#define A20_TEST_SHORT 32 -#define A20_TEST_LONG 2097152 /* 2^21 */ - -static int a20_test(int loops) -{ - int ok = 0; - int saved, ctr; - - set_fs(0x0000); - set_gs(0xffff); - - saved = ctr = rdfs32(A20_TEST_ADDR); - - while (loops--) { - wrfs32(++ctr, A20_TEST_ADDR); - io_delay(); /* Serialize and make delay constant */ - ok = rdgs32(A20_TEST_ADDR+0x10) ^ ctr; - if (ok) - break; - } - - wrfs32(saved, A20_TEST_ADDR); - return ok; -} - -/* Quick test to see if A20 is already enabled */ -static int a20_test_short(void) -{ - return a20_test(A20_TEST_SHORT); -} - -/* Longer test that actually waits for A20 to come on line; this - is useful when dealing with the KBC or other slow external circuitry. */ -static int a20_test_long(void) -{ - return a20_test(A20_TEST_LONG); -} - -static void enable_a20_bios(void) -{ - struct biosregs ireg; - - initregs(&ireg); - ireg.ax = 0x2401; - intcall(0x15, &ireg, NULL); -} - -static void enable_a20_kbc(void) -{ - empty_8042(); - - outb(0xd1, 0x64); /* Command write */ - empty_8042(); - - outb(0xdf, 0x60); /* A20 on */ - empty_8042(); - - outb(0xff, 0x64); /* Null command, but UHCI wants it */ - empty_8042(); -} - -static void enable_a20_fast(void) -{ - u8 port_a; - - port_a = inb(0x92); /* Configuration port A */ - port_a |= 0x02; /* Enable A20 */ - port_a &= ~0x01; /* Do not reset machine */ - outb(port_a, 0x92); -} - -/* - * Actual routine to enable A20; return 0 on ok, -1 on failure - */ - -#define A20_ENABLE_LOOPS 255 /* Number of times to try */ - -int enable_a20(void) -{ - int loops = A20_ENABLE_LOOPS; - int kbc_err; - - while (loops--) { - /* First, check to see if A20 is already enabled - (legacy free, etc.) */ - if (a20_test_short()) - return 0; - - /* Next, try the BIOS (INT 0x15, AX=0x2401) */ - enable_a20_bios(); - if (a20_test_short()) - return 0; - - /* Try enabling A20 through the keyboard controller */ - kbc_err = empty_8042(); - - if (a20_test_short()) - return 0; /* BIOS worked, but with delayed reaction */ - - if (!kbc_err) { - enable_a20_kbc(); - if (a20_test_long()) - return 0; - } - - /* Finally, try enabling the "fast A20 gate" */ - enable_a20_fast(); - if (a20_test_long()) - return 0; - } - - return -1; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/apm.c b/ANDROID_3.4.5/arch/x86/boot/apm.c deleted file mode 100644 index ee274834..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/apm.c +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * Original APM BIOS checking by Stephen Rothwell, May 1994 - * (sfr@canb.auug.org.au) - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Get APM BIOS information - */ - -#include "boot.h" - -int query_apm_bios(void) -{ - struct biosregs ireg, oreg; - - /* APM BIOS installation check */ - initregs(&ireg); - ireg.ah = 0x53; - intcall(0x15, &ireg, &oreg); - - if (oreg.flags & X86_EFLAGS_CF) - return -1; /* No APM BIOS */ - - if (oreg.bx != 0x504d) /* "PM" signature */ - return -1; - - if (!(oreg.cx & 0x02)) /* 32 bits supported? */ - return -1; - - /* Disconnect first, just in case */ - ireg.al = 0x04; - intcall(0x15, &ireg, NULL); - - /* 32-bit connect */ - ireg.al = 0x03; - intcall(0x15, &ireg, &oreg); - - boot_params.apm_bios_info.cseg = oreg.ax; - boot_params.apm_bios_info.offset = oreg.ebx; - boot_params.apm_bios_info.cseg_16 = oreg.cx; - boot_params.apm_bios_info.dseg = oreg.dx; - boot_params.apm_bios_info.cseg_len = oreg.si; - boot_params.apm_bios_info.cseg_16_len = oreg.hsi; - boot_params.apm_bios_info.dseg_len = oreg.di; - - if (oreg.flags & X86_EFLAGS_CF) - return -1; - - /* Redo the installation check as the 32-bit connect; - some BIOSes return different flags this way... */ - - ireg.al = 0x00; - intcall(0x15, &ireg, &oreg); - - if ((oreg.eflags & X86_EFLAGS_CF) || oreg.bx != 0x504d) { - /* Failure with 32-bit connect, try to disconect and ignore */ - ireg.al = 0x04; - intcall(0x15, &ireg, NULL); - return -1; - } - - boot_params.apm_bios_info.version = oreg.ax; - boot_params.apm_bios_info.flags = oreg.cx; - return 0; -} - diff --git a/ANDROID_3.4.5/arch/x86/boot/bioscall.S b/ANDROID_3.4.5/arch/x86/boot/bioscall.S deleted file mode 100644 index 1dfbf64e..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/bioscall.S +++ /dev/null @@ -1,82 +0,0 @@ -/* ----------------------------------------------------------------------- - * - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2 or (at your - * option) any later version; incorporated herein by reference. - * - * ----------------------------------------------------------------------- */ - -/* - * "Glove box" for BIOS calls. Avoids the constant problems with BIOSes - * touching registers they shouldn't be. - */ - - .code16gcc - .text - .globl intcall - .type intcall, @function -intcall: - /* Self-modify the INT instruction. Ugly, but works. */ - cmpb %al, 3f - je 1f - movb %al, 3f - jmp 1f /* Synchronize pipeline */ -1: - /* Save state */ - pushfl - pushw %fs - pushw %gs - pushal - - /* Copy input state to stack frame */ - subw $44, %sp - movw %dx, %si - movw %sp, %di - movw $11, %cx - rep; movsd - - /* Pop full state from the stack */ - popal - popw %gs - popw %fs - popw %es - popw %ds - popfl - - /* Actual INT */ - .byte 0xcd /* INT opcode */ -3: .byte 0 - - /* Push full state to the stack */ - pushfl - pushw %ds - pushw %es - pushw %fs - pushw %gs - pushal - - /* Re-establish C environment invariants */ - cld - movzwl %sp, %esp - movw %cs, %ax - movw %ax, %ds - movw %ax, %es - - /* Copy output state from stack frame */ - movw 68(%esp), %di /* Original %cx == 3rd argument */ - andw %di, %di - jz 4f - movw %sp, %si - movw $11, %cx - rep; movsd -4: addw $44, %sp - - /* Restore state and return */ - popal - popw %gs - popw %fs - popfl - retl - .size intcall, .-intcall diff --git a/ANDROID_3.4.5/arch/x86/boot/bitops.h b/ANDROID_3.4.5/arch/x86/boot/bitops.h deleted file mode 100644 index 878e4b99..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/bitops.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Very simple bitops for the boot code. - */ - -#ifndef BOOT_BITOPS_H -#define BOOT_BITOPS_H -#define _LINUX_BITOPS_H /* Inhibit inclusion of <linux/bitops.h> */ - -static inline int constant_test_bit(int nr, const void *addr) -{ - const u32 *p = (const u32 *)addr; - return ((1UL << (nr & 31)) & (p[nr >> 5])) != 0; -} -static inline int variable_test_bit(int nr, const void *addr) -{ - u8 v; - const u32 *p = (const u32 *)addr; - - asm("btl %2,%1; setc %0" : "=qm" (v) : "m" (*p), "Ir" (nr)); - return v; -} - -#define test_bit(nr,addr) \ -(__builtin_constant_p(nr) ? \ - constant_test_bit((nr),(addr)) : \ - variable_test_bit((nr),(addr))) - -static inline void set_bit(int nr, void *addr) -{ - asm("btsl %1,%0" : "+m" (*(u32 *)addr) : "Ir" (nr)); -} - -#endif /* BOOT_BITOPS_H */ diff --git a/ANDROID_3.4.5/arch/x86/boot/boot.h b/ANDROID_3.4.5/arch/x86/boot/boot.h deleted file mode 100644 index 18997e5a..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/boot.h +++ /dev/null @@ -1,369 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Header file for the real-mode kernel code - */ - -#ifndef BOOT_BOOT_H -#define BOOT_BOOT_H - -#define STACK_SIZE 512 /* Minimum number of bytes for stack */ - -#ifndef __ASSEMBLY__ - -#include <stdarg.h> -#include <linux/types.h> -#include <linux/edd.h> -#include <asm/boot.h> -#include <asm/setup.h> -#include "bitops.h" -#include <asm/cpufeature.h> -#include <asm/processor-flags.h> -#include "ctype.h" - -/* Useful macros */ -#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) - -#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) - -extern struct setup_header hdr; -extern struct boot_params boot_params; - -#define cpu_relax() asm volatile("rep; nop") - -/* Basic port I/O */ -static inline void outb(u8 v, u16 port) -{ - asm volatile("outb %0,%1" : : "a" (v), "dN" (port)); -} -static inline u8 inb(u16 port) -{ - u8 v; - asm volatile("inb %1,%0" : "=a" (v) : "dN" (port)); - return v; -} - -static inline void outw(u16 v, u16 port) -{ - asm volatile("outw %0,%1" : : "a" (v), "dN" (port)); -} -static inline u16 inw(u16 port) -{ - u16 v; - asm volatile("inw %1,%0" : "=a" (v) : "dN" (port)); - return v; -} - -static inline void outl(u32 v, u16 port) -{ - asm volatile("outl %0,%1" : : "a" (v), "dN" (port)); -} -static inline u32 inl(u16 port) -{ - u32 v; - asm volatile("inl %1,%0" : "=a" (v) : "dN" (port)); - return v; -} - -static inline void io_delay(void) -{ - const u16 DELAY_PORT = 0x80; - asm volatile("outb %%al,%0" : : "dN" (DELAY_PORT)); -} - -/* These functions are used to reference data in other segments. */ - -static inline u16 ds(void) -{ - u16 seg; - asm("movw %%ds,%0" : "=rm" (seg)); - return seg; -} - -static inline void set_fs(u16 seg) -{ - asm volatile("movw %0,%%fs" : : "rm" (seg)); -} -static inline u16 fs(void) -{ - u16 seg; - asm volatile("movw %%fs,%0" : "=rm" (seg)); - return seg; -} - -static inline void set_gs(u16 seg) -{ - asm volatile("movw %0,%%gs" : : "rm" (seg)); -} -static inline u16 gs(void) -{ - u16 seg; - asm volatile("movw %%gs,%0" : "=rm" (seg)); - return seg; -} - -typedef unsigned int addr_t; - -static inline u8 rdfs8(addr_t addr) -{ - u8 v; - asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr)); - return v; -} -static inline u16 rdfs16(addr_t addr) -{ - u16 v; - asm volatile("movw %%fs:%1,%0" : "=r" (v) : "m" (*(u16 *)addr)); - return v; -} -static inline u32 rdfs32(addr_t addr) -{ - u32 v; - asm volatile("movl %%fs:%1,%0" : "=r" (v) : "m" (*(u32 *)addr)); - return v; -} - -static inline void wrfs8(u8 v, addr_t addr) -{ - asm volatile("movb %1,%%fs:%0" : "+m" (*(u8 *)addr) : "qi" (v)); -} -static inline void wrfs16(u16 v, addr_t addr) -{ - asm volatile("movw %1,%%fs:%0" : "+m" (*(u16 *)addr) : "ri" (v)); -} -static inline void wrfs32(u32 v, addr_t addr) -{ - asm volatile("movl %1,%%fs:%0" : "+m" (*(u32 *)addr) : "ri" (v)); -} - -static inline u8 rdgs8(addr_t addr) -{ - u8 v; - asm volatile("movb %%gs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr)); - return v; -} -static inline u16 rdgs16(addr_t addr) -{ - u16 v; - asm volatile("movw %%gs:%1,%0" : "=r" (v) : "m" (*(u16 *)addr)); - return v; -} -static inline u32 rdgs32(addr_t addr) -{ - u32 v; - asm volatile("movl %%gs:%1,%0" : "=r" (v) : "m" (*(u32 *)addr)); - return v; -} - -static inline void wrgs8(u8 v, addr_t addr) -{ - asm volatile("movb %1,%%gs:%0" : "+m" (*(u8 *)addr) : "qi" (v)); -} -static inline void wrgs16(u16 v, addr_t addr) -{ - asm volatile("movw %1,%%gs:%0" : "+m" (*(u16 *)addr) : "ri" (v)); -} -static inline void wrgs32(u32 v, addr_t addr) -{ - asm volatile("movl %1,%%gs:%0" : "+m" (*(u32 *)addr) : "ri" (v)); -} - -/* Note: these only return true/false, not a signed return value! */ -static inline int memcmp(const void *s1, const void *s2, size_t len) -{ - u8 diff; - asm("repe; cmpsb; setnz %0" - : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len)); - return diff; -} - -static inline int memcmp_fs(const void *s1, addr_t s2, size_t len) -{ - u8 diff; - asm volatile("fs; repe; cmpsb; setnz %0" - : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len)); - return diff; -} -static inline int memcmp_gs(const void *s1, addr_t s2, size_t len) -{ - u8 diff; - asm volatile("gs; repe; cmpsb; setnz %0" - : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len)); - return diff; -} - -/* Heap -- available for dynamic lists. */ -extern char _end[]; -extern char *HEAP; -extern char *heap_end; -#define RESET_HEAP() ((void *)( HEAP = _end )) -static inline char *__get_heap(size_t s, size_t a, size_t n) -{ - char *tmp; - - HEAP = (char *)(((size_t)HEAP+(a-1)) & ~(a-1)); - tmp = HEAP; - HEAP += s*n; - return tmp; -} -#define GET_HEAP(type, n) \ - ((type *)__get_heap(sizeof(type),__alignof__(type),(n))) - -static inline bool heap_free(size_t n) -{ - return (int)(heap_end-HEAP) >= (int)n; -} - -/* copy.S */ - -void copy_to_fs(addr_t dst, void *src, size_t len); -void *copy_from_fs(void *dst, addr_t src, size_t len); -void copy_to_gs(addr_t dst, void *src, size_t len); -void *copy_from_gs(void *dst, addr_t src, size_t len); -void *memcpy(void *dst, void *src, size_t len); -void *memset(void *dst, int c, size_t len); - -#define memcpy(d,s,l) __builtin_memcpy(d,s,l) -#define memset(d,c,l) __builtin_memset(d,c,l) - -/* a20.c */ -int enable_a20(void); - -/* apm.c */ -int query_apm_bios(void); - -/* bioscall.c */ -struct biosregs { - union { - struct { - u32 edi; - u32 esi; - u32 ebp; - u32 _esp; - u32 ebx; - u32 edx; - u32 ecx; - u32 eax; - u32 _fsgs; - u32 _dses; - u32 eflags; - }; - struct { - u16 di, hdi; - u16 si, hsi; - u16 bp, hbp; - u16 _sp, _hsp; - u16 bx, hbx; - u16 dx, hdx; - u16 cx, hcx; - u16 ax, hax; - u16 gs, fs; - u16 es, ds; - u16 flags, hflags; - }; - struct { - u8 dil, dih, edi2, edi3; - u8 sil, sih, esi2, esi3; - u8 bpl, bph, ebp2, ebp3; - u8 _spl, _sph, _esp2, _esp3; - u8 bl, bh, ebx2, ebx3; - u8 dl, dh, edx2, edx3; - u8 cl, ch, ecx2, ecx3; - u8 al, ah, eax2, eax3; - }; - }; -}; -void intcall(u8 int_no, const struct biosregs *ireg, struct biosregs *oreg); - -/* cmdline.c */ -int __cmdline_find_option(u32 cmdline_ptr, const char *option, char *buffer, int bufsize); -int __cmdline_find_option_bool(u32 cmdline_ptr, const char *option); -static inline int cmdline_find_option(const char *option, char *buffer, int bufsize) -{ - return __cmdline_find_option(boot_params.hdr.cmd_line_ptr, option, buffer, bufsize); -} - -static inline int cmdline_find_option_bool(const char *option) -{ - return __cmdline_find_option_bool(boot_params.hdr.cmd_line_ptr, option); -} - - -/* cpu.c, cpucheck.c */ -struct cpu_features { - int level; /* Family, or 64 for x86-64 */ - int model; - u32 flags[NCAPINTS]; -}; -extern struct cpu_features cpu; -int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr); -int validate_cpu(void); - -/* early_serial_console.c */ -extern int early_serial_base; -void console_init(void); - -/* edd.c */ -void query_edd(void); - -/* header.S */ -void __attribute__((noreturn)) die(void); - -/* mca.c */ -int query_mca(void); - -/* memory.c */ -int detect_memory(void); - -/* pm.c */ -void __attribute__((noreturn)) go_to_protected_mode(void); - -/* pmjump.S */ -void __attribute__((noreturn)) - protected_mode_jump(u32 entrypoint, u32 bootparams); - -/* printf.c */ -int sprintf(char *buf, const char *fmt, ...); -int vsprintf(char *buf, const char *fmt, va_list args); -int printf(const char *fmt, ...); - -/* regs.c */ -void initregs(struct biosregs *regs); - -/* string.c */ -int strcmp(const char *str1, const char *str2); -int strncmp(const char *cs, const char *ct, size_t count); -size_t strnlen(const char *s, size_t maxlen); -unsigned int atou(const char *s); -unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base); - -/* tty.c */ -void puts(const char *); -void putchar(int); -int getchar(void); -void kbd_flush(void); -int getchar_timeout(void); - -/* video.c */ -void set_video(void); - -/* video-mode.c */ -int set_mode(u16 mode); -int mode_defined(u16 mode); -void probe_cards(int unsafe); - -/* video-vesa.c */ -void vesa_store_edid(void); - -#endif /* __ASSEMBLY__ */ - -#endif /* BOOT_BOOT_H */ diff --git a/ANDROID_3.4.5/arch/x86/boot/cmdline.c b/ANDROID_3.4.5/arch/x86/boot/cmdline.c deleted file mode 100644 index 6b3b6f70..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/cmdline.c +++ /dev/null @@ -1,158 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Simple command-line parser for early boot. - */ - -#include "boot.h" - -static inline int myisspace(u8 c) -{ - return c <= ' '; /* Close enough approximation */ -} - -/* - * Find a non-boolean option, that is, "option=argument". In accordance - * with standard Linux practice, if this option is repeated, this returns - * the last instance on the command line. - * - * Returns the length of the argument (regardless of if it was - * truncated to fit in the buffer), or -1 on not found. - */ -int __cmdline_find_option(u32 cmdline_ptr, const char *option, char *buffer, int bufsize) -{ - addr_t cptr; - char c; - int len = -1; - const char *opptr = NULL; - char *bufptr = buffer; - enum { - st_wordstart, /* Start of word/after whitespace */ - st_wordcmp, /* Comparing this word */ - st_wordskip, /* Miscompare, skip */ - st_bufcpy /* Copying this to buffer */ - } state = st_wordstart; - - if (!cmdline_ptr || cmdline_ptr >= 0x100000) - return -1; /* No command line, or inaccessible */ - - cptr = cmdline_ptr & 0xf; - set_fs(cmdline_ptr >> 4); - - while (cptr < 0x10000 && (c = rdfs8(cptr++))) { - switch (state) { - case st_wordstart: - if (myisspace(c)) - break; - - /* else */ - state = st_wordcmp; - opptr = option; - /* fall through */ - - case st_wordcmp: - if (c == '=' && !*opptr) { - len = 0; - bufptr = buffer; - state = st_bufcpy; - } else if (myisspace(c)) { - state = st_wordstart; - } else if (c != *opptr++) { - state = st_wordskip; - } - break; - - case st_wordskip: - if (myisspace(c)) - state = st_wordstart; - break; - - case st_bufcpy: - if (myisspace(c)) { - state = st_wordstart; - } else { - if (len < bufsize-1) - *bufptr++ = c; - len++; - } - break; - } - } - - if (bufsize) - *bufptr = '\0'; - - return len; -} - -/* - * Find a boolean option (like quiet,noapic,nosmp....) - * - * Returns the position of that option (starts counting with 1) - * or 0 on not found - */ -int __cmdline_find_option_bool(u32 cmdline_ptr, const char *option) -{ - addr_t cptr; - char c; - int pos = 0, wstart = 0; - const char *opptr = NULL; - enum { - st_wordstart, /* Start of word/after whitespace */ - st_wordcmp, /* Comparing this word */ - st_wordskip, /* Miscompare, skip */ - } state = st_wordstart; - - if (!cmdline_ptr || cmdline_ptr >= 0x100000) - return -1; /* No command line, or inaccessible */ - - cptr = cmdline_ptr & 0xf; - set_fs(cmdline_ptr >> 4); - - while (cptr < 0x10000) { - c = rdfs8(cptr++); - pos++; - - switch (state) { - case st_wordstart: - if (!c) - return 0; - else if (myisspace(c)) - break; - - state = st_wordcmp; - opptr = option; - wstart = pos; - /* fall through */ - - case st_wordcmp: - if (!*opptr) - if (!c || myisspace(c)) - return wstart; - else - state = st_wordskip; - else if (!c) - return 0; - else if (c != *opptr++) - state = st_wordskip; - break; - - case st_wordskip: - if (!c) - return 0; - else if (myisspace(c)) - state = st_wordstart; - break; - } - } - - return 0; /* Buffer overrun */ -} diff --git a/ANDROID_3.4.5/arch/x86/boot/code16gcc.h b/ANDROID_3.4.5/arch/x86/boot/code16gcc.h deleted file mode 100644 index d93e4801..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/code16gcc.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * code16gcc.h - * - * This file is -include'd when compiling 16-bit C code. - * Note: this asm() needs to be emitted before gcc emits any code. - * Depending on gcc version, this requires -fno-unit-at-a-time or - * -fno-toplevel-reorder. - * - * Hopefully gcc will eventually have a real -m16 option so we can - * drop this hack long term. - */ - -#ifndef __ASSEMBLY__ -asm(".code16gcc"); -#endif diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/Makefile b/ANDROID_3.4.5/arch/x86/boot/compressed/Makefile deleted file mode 100644 index e398bb5d..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -# -# linux/arch/x86/boot/compressed/Makefile -# -# create a compressed vmlinux image from the original vmlinux -# - -targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o - -KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 -KBUILD_CFLAGS += -fno-strict-aliasing -fPIC -KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING -cflags-$(CONFIG_X86_32) := -march=i386 -cflags-$(CONFIG_X86_64) := -mcmodel=small -KBUILD_CFLAGS += $(cflags-y) -KBUILD_CFLAGS += $(call cc-option,-ffreestanding) -KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) - -KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ -GCOV_PROFILE := n - -LDFLAGS := -m elf_$(UTS_MACHINE) -LDFLAGS_vmlinux := -T - -hostprogs-y := mkpiggy -HOST_EXTRACFLAGS += -I$(srctree)/tools/include - -VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ - $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ - $(obj)/piggy.o - -ifeq ($(CONFIG_EFI_STUB), y) - VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o -endif - -$(obj)/vmlinux: $(VMLINUX_OBJS) FORCE - $(call if_changed,ld) - @: - -OBJCOPYFLAGS_vmlinux.bin := -R .comment -S -$(obj)/vmlinux.bin: vmlinux FORCE - $(call if_changed,objcopy) - -targets += vmlinux.bin.all vmlinux.relocs - -CMD_RELOCS = arch/x86/tools/relocs -quiet_cmd_relocs = RELOCS $@ - cmd_relocs = $(CMD_RELOCS) $< > $@;$(CMD_RELOCS) --abs-relocs $< -$(obj)/vmlinux.relocs: vmlinux FORCE - $(call if_changed,relocs) - -vmlinux.bin.all-y := $(obj)/vmlinux.bin -vmlinux.bin.all-$(CONFIG_X86_NEED_RELOCS) += $(obj)/vmlinux.relocs - -$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE - $(call if_changed,gzip) -$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE - $(call if_changed,bzip2) -$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE - $(call if_changed,lzma) -$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE - $(call if_changed,xzkern) -$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE - $(call if_changed,lzo) - -suffix-$(CONFIG_KERNEL_GZIP) := gz -suffix-$(CONFIG_KERNEL_BZIP2) := bz2 -suffix-$(CONFIG_KERNEL_LZMA) := lzma -suffix-$(CONFIG_KERNEL_XZ) := xz -suffix-$(CONFIG_KERNEL_LZO) := lzo - -quiet_cmd_mkpiggy = MKPIGGY $@ - cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false ) - -targets += piggy.S -$(obj)/piggy.S: $(obj)/vmlinux.bin.$(suffix-y) $(obj)/mkpiggy FORCE - $(call if_changed,mkpiggy) diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/cmdline.c b/ANDROID_3.4.5/arch/x86/boot/compressed/cmdline.c deleted file mode 100644 index cb62f786..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/cmdline.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "misc.h" - -static unsigned long fs; -static inline void set_fs(unsigned long seg) -{ - fs = seg << 4; /* shift it back */ -} -typedef unsigned long addr_t; -static inline char rdfs8(addr_t addr) -{ - return *((char *)(fs + addr)); -} -#include "../cmdline.c" -int cmdline_find_option(const char *option, char *buffer, int bufsize) -{ - return __cmdline_find_option(real_mode->hdr.cmd_line_ptr, option, buffer, bufsize); -} -int cmdline_find_option_bool(const char *option) -{ - return __cmdline_find_option_bool(real_mode->hdr.cmd_line_ptr, option); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/early_serial_console.c b/ANDROID_3.4.5/arch/x86/boot/compressed/early_serial_console.c deleted file mode 100644 index 261e81fb..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/early_serial_console.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "misc.h" - -int early_serial_base; - -#include "../early_serial_console.c" diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.c b/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.c deleted file mode 100644 index 0cdfc0d2..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.c +++ /dev/null @@ -1,1022 +0,0 @@ -/* ----------------------------------------------------------------------- - * - * Copyright 2011 Intel Corporation; author Matt Fleming - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -#include <linux/efi.h> -#include <asm/efi.h> -#include <asm/setup.h> -#include <asm/desc.h> - -#include "eboot.h" - -static efi_system_table_t *sys_table; - -static efi_status_t __get_map(efi_memory_desc_t **map, unsigned long *map_size, - unsigned long *desc_size) -{ - efi_memory_desc_t *m = NULL; - efi_status_t status; - unsigned long key; - u32 desc_version; - - *map_size = sizeof(*m) * 32; -again: - /* - * Add an additional efi_memory_desc_t because we're doing an - * allocation which may be in a new descriptor region. - */ - *map_size += sizeof(*m); - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, *map_size, (void **)&m); - if (status != EFI_SUCCESS) - goto fail; - - status = efi_call_phys5(sys_table->boottime->get_memory_map, map_size, - m, &key, desc_size, &desc_version); - if (status == EFI_BUFFER_TOO_SMALL) { - efi_call_phys1(sys_table->boottime->free_pool, m); - goto again; - } - - if (status != EFI_SUCCESS) - efi_call_phys1(sys_table->boottime->free_pool, m); - -fail: - *map = m; - return status; -} - -/* - * Allocate at the highest possible address that is not above 'max'. - */ -static efi_status_t high_alloc(unsigned long size, unsigned long align, - unsigned long *addr, unsigned long max) -{ - unsigned long map_size, desc_size; - efi_memory_desc_t *map; - efi_status_t status; - unsigned long nr_pages; - u64 max_addr = 0; - int i; - - status = __get_map(&map, &map_size, &desc_size); - if (status != EFI_SUCCESS) - goto fail; - - nr_pages = round_up(size, EFI_PAGE_SIZE) / EFI_PAGE_SIZE; -again: - for (i = 0; i < map_size / desc_size; i++) { - efi_memory_desc_t *desc; - unsigned long m = (unsigned long)map; - u64 start, end; - - desc = (efi_memory_desc_t *)(m + (i * desc_size)); - if (desc->type != EFI_CONVENTIONAL_MEMORY) - continue; - - if (desc->num_pages < nr_pages) - continue; - - start = desc->phys_addr; - end = start + desc->num_pages * (1UL << EFI_PAGE_SHIFT); - - if ((start + size) > end || (start + size) > max) - continue; - - if (end - size > max) - end = max; - - if (round_down(end - size, align) < start) - continue; - - start = round_down(end - size, align); - - /* - * Don't allocate at 0x0. It will confuse code that - * checks pointers against NULL. - */ - if (start == 0x0) - continue; - - if (start > max_addr) - max_addr = start; - } - - if (!max_addr) - status = EFI_NOT_FOUND; - else { - status = efi_call_phys4(sys_table->boottime->allocate_pages, - EFI_ALLOCATE_ADDRESS, EFI_LOADER_DATA, - nr_pages, &max_addr); - if (status != EFI_SUCCESS) { - max = max_addr; - max_addr = 0; - goto again; - } - - *addr = max_addr; - } - -free_pool: - efi_call_phys1(sys_table->boottime->free_pool, map); - -fail: - return status; -} - -/* - * Allocate at the lowest possible address. - */ -static efi_status_t low_alloc(unsigned long size, unsigned long align, - unsigned long *addr) -{ - unsigned long map_size, desc_size; - efi_memory_desc_t *map; - efi_status_t status; - unsigned long nr_pages; - int i; - - status = __get_map(&map, &map_size, &desc_size); - if (status != EFI_SUCCESS) - goto fail; - - nr_pages = round_up(size, EFI_PAGE_SIZE) / EFI_PAGE_SIZE; - for (i = 0; i < map_size / desc_size; i++) { - efi_memory_desc_t *desc; - unsigned long m = (unsigned long)map; - u64 start, end; - - desc = (efi_memory_desc_t *)(m + (i * desc_size)); - - if (desc->type != EFI_CONVENTIONAL_MEMORY) - continue; - - if (desc->num_pages < nr_pages) - continue; - - start = desc->phys_addr; - end = start + desc->num_pages * (1UL << EFI_PAGE_SHIFT); - - /* - * Don't allocate at 0x0. It will confuse code that - * checks pointers against NULL. Skip the first 8 - * bytes so we start at a nice even number. - */ - if (start == 0x0) - start += 8; - - start = round_up(start, align); - if ((start + size) > end) - continue; - - status = efi_call_phys4(sys_table->boottime->allocate_pages, - EFI_ALLOCATE_ADDRESS, EFI_LOADER_DATA, - nr_pages, &start); - if (status == EFI_SUCCESS) { - *addr = start; - break; - } - } - - if (i == map_size / desc_size) - status = EFI_NOT_FOUND; - -free_pool: - efi_call_phys1(sys_table->boottime->free_pool, map); -fail: - return status; -} - -static void low_free(unsigned long size, unsigned long addr) -{ - unsigned long nr_pages; - - nr_pages = round_up(size, EFI_PAGE_SIZE) / EFI_PAGE_SIZE; - efi_call_phys2(sys_table->boottime->free_pages, addr, size); -} - -static void find_bits(unsigned long mask, u8 *pos, u8 *size) -{ - u8 first, len; - - first = 0; - len = 0; - - if (mask) { - while (!(mask & 0x1)) { - mask = mask >> 1; - first++; - } - - while (mask & 0x1) { - mask = mask >> 1; - len++; - } - } - - *pos = first; - *size = len; -} - -/* - * See if we have Graphics Output Protocol - */ -static efi_status_t setup_gop(struct screen_info *si, efi_guid_t *proto, - unsigned long size) -{ - struct efi_graphics_output_protocol *gop, *first_gop; - struct efi_pixel_bitmask pixel_info; - unsigned long nr_gops; - efi_status_t status; - void **gop_handle; - u16 width, height; - u32 fb_base, fb_size; - u32 pixels_per_scan_line; - int pixel_format; - int i; - - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, size, &gop_handle); - if (status != EFI_SUCCESS) - return status; - - status = efi_call_phys5(sys_table->boottime->locate_handle, - EFI_LOCATE_BY_PROTOCOL, proto, - NULL, &size, gop_handle); - if (status != EFI_SUCCESS) - goto free_handle; - - first_gop = NULL; - - nr_gops = size / sizeof(void *); - for (i = 0; i < nr_gops; i++) { - struct efi_graphics_output_mode_info *info; - efi_guid_t pciio_proto = EFI_PCI_IO_PROTOCOL_GUID; - void *pciio; - void *h = gop_handle[i]; - - status = efi_call_phys3(sys_table->boottime->handle_protocol, - h, proto, &gop); - if (status != EFI_SUCCESS) - continue; - - efi_call_phys3(sys_table->boottime->handle_protocol, - h, &pciio_proto, &pciio); - - status = efi_call_phys4(gop->query_mode, gop, - gop->mode->mode, &size, &info); - if (status == EFI_SUCCESS && (!first_gop || pciio)) { - /* - * Apple provide GOPs that are not backed by - * real hardware (they're used to handle - * multiple displays). The workaround is to - * search for a GOP implementing the PCIIO - * protocol, and if one isn't found, to just - * fallback to the first GOP. - */ - width = info->horizontal_resolution; - height = info->vertical_resolution; - fb_base = gop->mode->frame_buffer_base; - fb_size = gop->mode->frame_buffer_size; - pixel_format = info->pixel_format; - pixel_info = info->pixel_information; - pixels_per_scan_line = info->pixels_per_scan_line; - - /* - * Once we've found a GOP supporting PCIIO, - * don't bother looking any further. - */ - if (pciio) - break; - - first_gop = gop; - } - } - - /* Did we find any GOPs? */ - if (!first_gop) - goto free_handle; - - /* EFI framebuffer */ - si->orig_video_isVGA = VIDEO_TYPE_EFI; - - si->lfb_width = width; - si->lfb_height = height; - si->lfb_base = fb_base; - si->lfb_size = fb_size; - si->pages = 1; - - if (pixel_format == PIXEL_RGB_RESERVED_8BIT_PER_COLOR) { - si->lfb_depth = 32; - si->lfb_linelength = pixels_per_scan_line * 4; - si->red_size = 8; - si->red_pos = 0; - si->green_size = 8; - si->green_pos = 8; - si->blue_size = 8; - si->blue_pos = 16; - si->rsvd_size = 8; - si->rsvd_pos = 24; - } else if (pixel_format == PIXEL_BGR_RESERVED_8BIT_PER_COLOR) { - si->lfb_depth = 32; - si->lfb_linelength = pixels_per_scan_line * 4; - si->red_size = 8; - si->red_pos = 16; - si->green_size = 8; - si->green_pos = 8; - si->blue_size = 8; - si->blue_pos = 0; - si->rsvd_size = 8; - si->rsvd_pos = 24; - } else if (pixel_format == PIXEL_BIT_MASK) { - find_bits(pixel_info.red_mask, &si->red_pos, &si->red_size); - find_bits(pixel_info.green_mask, &si->green_pos, - &si->green_size); - find_bits(pixel_info.blue_mask, &si->blue_pos, &si->blue_size); - find_bits(pixel_info.reserved_mask, &si->rsvd_pos, - &si->rsvd_size); - si->lfb_depth = si->red_size + si->green_size + - si->blue_size + si->rsvd_size; - si->lfb_linelength = (pixels_per_scan_line * si->lfb_depth) / 8; - } else { - si->lfb_depth = 4; - si->lfb_linelength = si->lfb_width / 2; - si->red_size = 0; - si->red_pos = 0; - si->green_size = 0; - si->green_pos = 0; - si->blue_size = 0; - si->blue_pos = 0; - si->rsvd_size = 0; - si->rsvd_pos = 0; - } - -free_handle: - efi_call_phys1(sys_table->boottime->free_pool, gop_handle); - return status; -} - -/* - * See if we have Universal Graphics Adapter (UGA) protocol - */ -static efi_status_t setup_uga(struct screen_info *si, efi_guid_t *uga_proto, - unsigned long size) -{ - struct efi_uga_draw_protocol *uga, *first_uga; - unsigned long nr_ugas; - efi_status_t status; - u32 width, height; - void **uga_handle = NULL; - int i; - - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, size, &uga_handle); - if (status != EFI_SUCCESS) - return status; - - status = efi_call_phys5(sys_table->boottime->locate_handle, - EFI_LOCATE_BY_PROTOCOL, uga_proto, - NULL, &size, uga_handle); - if (status != EFI_SUCCESS) - goto free_handle; - - first_uga = NULL; - - nr_ugas = size / sizeof(void *); - for (i = 0; i < nr_ugas; i++) { - efi_guid_t pciio_proto = EFI_PCI_IO_PROTOCOL_GUID; - void *handle = uga_handle[i]; - u32 w, h, depth, refresh; - void *pciio; - - status = efi_call_phys3(sys_table->boottime->handle_protocol, - handle, uga_proto, &uga); - if (status != EFI_SUCCESS) - continue; - - efi_call_phys3(sys_table->boottime->handle_protocol, - handle, &pciio_proto, &pciio); - - status = efi_call_phys5(uga->get_mode, uga, &w, &h, - &depth, &refresh); - if (status == EFI_SUCCESS && (!first_uga || pciio)) { - width = w; - height = h; - - /* - * Once we've found a UGA supporting PCIIO, - * don't bother looking any further. - */ - if (pciio) - break; - - first_uga = uga; - } - } - - if (!first_uga) - goto free_handle; - - /* EFI framebuffer */ - si->orig_video_isVGA = VIDEO_TYPE_EFI; - - si->lfb_depth = 32; - si->lfb_width = width; - si->lfb_height = height; - - si->red_size = 8; - si->red_pos = 16; - si->green_size = 8; - si->green_pos = 8; - si->blue_size = 8; - si->blue_pos = 0; - si->rsvd_size = 8; - si->rsvd_pos = 24; - - -free_handle: - efi_call_phys1(sys_table->boottime->free_pool, uga_handle); - return status; -} - -void setup_graphics(struct boot_params *boot_params) -{ - efi_guid_t graphics_proto = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID; - struct screen_info *si; - efi_guid_t uga_proto = EFI_UGA_PROTOCOL_GUID; - efi_status_t status; - unsigned long size; - void **gop_handle = NULL; - void **uga_handle = NULL; - - si = &boot_params->screen_info; - memset(si, 0, sizeof(*si)); - - size = 0; - status = efi_call_phys5(sys_table->boottime->locate_handle, - EFI_LOCATE_BY_PROTOCOL, &graphics_proto, - NULL, &size, gop_handle); - if (status == EFI_BUFFER_TOO_SMALL) - status = setup_gop(si, &graphics_proto, size); - - if (status != EFI_SUCCESS) { - size = 0; - status = efi_call_phys5(sys_table->boottime->locate_handle, - EFI_LOCATE_BY_PROTOCOL, &uga_proto, - NULL, &size, uga_handle); - if (status == EFI_BUFFER_TOO_SMALL) - setup_uga(si, &uga_proto, size); - } -} - -struct initrd { - efi_file_handle_t *handle; - u64 size; -}; - -/* - * Check the cmdline for a LILO-style initrd= arguments. - * - * We only support loading an initrd from the same filesystem as the - * kernel image. - */ -static efi_status_t handle_ramdisks(efi_loaded_image_t *image, - struct setup_header *hdr) -{ - struct initrd *initrds; - unsigned long initrd_addr; - efi_guid_t fs_proto = EFI_FILE_SYSTEM_GUID; - u64 initrd_total; - efi_file_io_interface_t *io; - efi_file_handle_t *fh; - efi_status_t status; - int nr_initrds; - char *str; - int i, j, k; - - initrd_addr = 0; - initrd_total = 0; - - str = (char *)(unsigned long)hdr->cmd_line_ptr; - - j = 0; /* See close_handles */ - - if (!str || !*str) - return EFI_SUCCESS; - - for (nr_initrds = 0; *str; nr_initrds++) { - str = strstr(str, "initrd="); - if (!str) - break; - - str += 7; - - /* Skip any leading slashes */ - while (*str == '/' || *str == '\\') - str++; - - while (*str && *str != ' ' && *str != '\n') - str++; - } - - if (!nr_initrds) - return EFI_SUCCESS; - - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, - nr_initrds * sizeof(*initrds), - &initrds); - if (status != EFI_SUCCESS) - goto fail; - - str = (char *)(unsigned long)hdr->cmd_line_ptr; - for (i = 0; i < nr_initrds; i++) { - struct initrd *initrd; - efi_file_handle_t *h; - efi_file_info_t *info; - efi_char16_t filename_16[256]; - unsigned long info_sz; - efi_guid_t info_guid = EFI_FILE_INFO_ID; - efi_char16_t *p; - u64 file_sz; - - str = strstr(str, "initrd="); - if (!str) - break; - - str += 7; - - initrd = &initrds[i]; - p = filename_16; - - /* Skip any leading slashes */ - while (*str == '/' || *str == '\\') - str++; - - while (*str && *str != ' ' && *str != '\n') { - if ((u8 *)p >= (u8 *)filename_16 + sizeof(filename_16)) - break; - - *p++ = *str++; - } - - *p = '\0'; - - /* Only open the volume once. */ - if (!i) { - efi_boot_services_t *boottime; - - boottime = sys_table->boottime; - - status = efi_call_phys3(boottime->handle_protocol, - image->device_handle, &fs_proto, &io); - if (status != EFI_SUCCESS) - goto free_initrds; - - status = efi_call_phys2(io->open_volume, io, &fh); - if (status != EFI_SUCCESS) - goto free_initrds; - } - - status = efi_call_phys5(fh->open, fh, &h, filename_16, - EFI_FILE_MODE_READ, (u64)0); - if (status != EFI_SUCCESS) - goto close_handles; - - initrd->handle = h; - - info_sz = 0; - status = efi_call_phys4(h->get_info, h, &info_guid, - &info_sz, NULL); - if (status != EFI_BUFFER_TOO_SMALL) - goto close_handles; - -grow: - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, info_sz, &info); - if (status != EFI_SUCCESS) - goto close_handles; - - status = efi_call_phys4(h->get_info, h, &info_guid, - &info_sz, info); - if (status == EFI_BUFFER_TOO_SMALL) { - efi_call_phys1(sys_table->boottime->free_pool, info); - goto grow; - } - - file_sz = info->file_size; - efi_call_phys1(sys_table->boottime->free_pool, info); - - if (status != EFI_SUCCESS) - goto close_handles; - - initrd->size = file_sz; - initrd_total += file_sz; - } - - if (initrd_total) { - unsigned long addr; - - /* - * Multiple initrd's need to be at consecutive - * addresses in memory, so allocate enough memory for - * all the initrd's. - */ - status = high_alloc(initrd_total, 0x1000, - &initrd_addr, hdr->initrd_addr_max); - if (status != EFI_SUCCESS) - goto close_handles; - - /* We've run out of free low memory. */ - if (initrd_addr > hdr->initrd_addr_max) { - status = EFI_INVALID_PARAMETER; - goto free_initrd_total; - } - - addr = initrd_addr; - for (j = 0; j < nr_initrds; j++) { - u64 size; - - size = initrds[j].size; - while (size) { - u64 chunksize; - if (size > EFI_READ_CHUNK_SIZE) - chunksize = EFI_READ_CHUNK_SIZE; - else - chunksize = size; - status = efi_call_phys3(fh->read, - initrds[j].handle, - &chunksize, addr); - if (status != EFI_SUCCESS) - goto free_initrd_total; - addr += chunksize; - size -= chunksize; - } - - efi_call_phys1(fh->close, initrds[j].handle); - } - - } - - efi_call_phys1(sys_table->boottime->free_pool, initrds); - - hdr->ramdisk_image = initrd_addr; - hdr->ramdisk_size = initrd_total; - - return status; - -free_initrd_total: - low_free(initrd_total, initrd_addr); - -close_handles: - for (k = j; k < nr_initrds; k++) - efi_call_phys1(fh->close, initrds[k].handle); -free_initrds: - efi_call_phys1(sys_table->boottime->free_pool, initrds); -fail: - hdr->ramdisk_image = 0; - hdr->ramdisk_size = 0; - - return status; -} - -/* - * Because the x86 boot code expects to be passed a boot_params we - * need to create one ourselves (usually the bootloader would create - * one for us). - */ -static efi_status_t make_boot_params(struct boot_params *boot_params, - efi_loaded_image_t *image, - void *handle) -{ - struct efi_info *efi = &boot_params->efi_info; - struct apm_bios_info *bi = &boot_params->apm_bios_info; - struct sys_desc_table *sdt = &boot_params->sys_desc_table; - struct e820entry *e820_map = &boot_params->e820_map[0]; - struct e820entry *prev = NULL; - struct setup_header *hdr = &boot_params->hdr; - unsigned long size, key, desc_size, _size; - efi_memory_desc_t *mem_map; - void *options = image->load_options; - u32 load_options_size = image->load_options_size / 2; /* ASCII */ - int options_size = 0; - efi_status_t status; - __u32 desc_version; - unsigned long cmdline; - u8 nr_entries; - u16 *s2; - u8 *s1; - int i; - - hdr->type_of_loader = 0x21; - - /* Convert unicode cmdline to ascii */ - cmdline = 0; - s2 = (u16 *)options; - - if (s2) { - while (*s2 && *s2 != '\n' && options_size < load_options_size) { - s2++; - options_size++; - } - - if (options_size) { - if (options_size > hdr->cmdline_size) - options_size = hdr->cmdline_size; - - options_size++; /* NUL termination */ - - status = low_alloc(options_size, 1, &cmdline); - if (status != EFI_SUCCESS) - goto fail; - - s1 = (u8 *)(unsigned long)cmdline; - s2 = (u16 *)options; - - for (i = 0; i < options_size - 1; i++) - *s1++ = *s2++; - - *s1 = '\0'; - } - } - - hdr->cmd_line_ptr = cmdline; - - hdr->ramdisk_image = 0; - hdr->ramdisk_size = 0; - - status = handle_ramdisks(image, hdr); - if (status != EFI_SUCCESS) - goto free_cmdline; - - setup_graphics(boot_params); - - /* Clear APM BIOS info */ - memset(bi, 0, sizeof(*bi)); - - memset(sdt, 0, sizeof(*sdt)); - - memcpy(&efi->efi_loader_signature, EFI_LOADER_SIGNATURE, sizeof(__u32)); - - size = sizeof(*mem_map) * 32; - -again: - size += sizeof(*mem_map); - _size = size; - status = low_alloc(size, 1, (unsigned long *)&mem_map); - if (status != EFI_SUCCESS) - goto free_cmdline; - - status = efi_call_phys5(sys_table->boottime->get_memory_map, &size, - mem_map, &key, &desc_size, &desc_version); - if (status == EFI_BUFFER_TOO_SMALL) { - low_free(_size, (unsigned long)mem_map); - goto again; - } - - if (status != EFI_SUCCESS) - goto free_mem_map; - - efi->efi_systab = (unsigned long)sys_table; - efi->efi_memdesc_size = desc_size; - efi->efi_memdesc_version = desc_version; - efi->efi_memmap = (unsigned long)mem_map; - efi->efi_memmap_size = size; - -#ifdef CONFIG_X86_64 - efi->efi_systab_hi = (unsigned long)sys_table >> 32; - efi->efi_memmap_hi = (unsigned long)mem_map >> 32; -#endif - - /* Might as well exit boot services now */ - status = efi_call_phys2(sys_table->boottime->exit_boot_services, - handle, key); - if (status != EFI_SUCCESS) - goto free_mem_map; - - /* Historic? */ - boot_params->alt_mem_k = 32 * 1024; - - /* - * Convert the EFI memory map to E820. - */ - nr_entries = 0; - for (i = 0; i < size / desc_size; i++) { - efi_memory_desc_t *d; - unsigned int e820_type = 0; - unsigned long m = (unsigned long)mem_map; - - d = (efi_memory_desc_t *)(m + (i * desc_size)); - switch (d->type) { - case EFI_RESERVED_TYPE: - case EFI_RUNTIME_SERVICES_CODE: - case EFI_RUNTIME_SERVICES_DATA: - case EFI_MEMORY_MAPPED_IO: - case EFI_MEMORY_MAPPED_IO_PORT_SPACE: - case EFI_PAL_CODE: - e820_type = E820_RESERVED; - break; - - case EFI_UNUSABLE_MEMORY: - e820_type = E820_UNUSABLE; - break; - - case EFI_ACPI_RECLAIM_MEMORY: - e820_type = E820_ACPI; - break; - - case EFI_LOADER_CODE: - case EFI_LOADER_DATA: - case EFI_BOOT_SERVICES_CODE: - case EFI_BOOT_SERVICES_DATA: - case EFI_CONVENTIONAL_MEMORY: - e820_type = E820_RAM; - break; - - case EFI_ACPI_MEMORY_NVS: - e820_type = E820_NVS; - break; - - default: - continue; - } - - /* Merge adjacent mappings */ - if (prev && prev->type == e820_type && - (prev->addr + prev->size) == d->phys_addr) - prev->size += d->num_pages << 12; - else { - e820_map->addr = d->phys_addr; - e820_map->size = d->num_pages << 12; - e820_map->type = e820_type; - prev = e820_map++; - nr_entries++; - } - } - - boot_params->e820_entries = nr_entries; - - return EFI_SUCCESS; - -free_mem_map: - low_free(_size, (unsigned long)mem_map); -free_cmdline: - if (options_size) - low_free(options_size, hdr->cmd_line_ptr); -fail: - return status; -} - -/* - * On success we return a pointer to a boot_params structure, and NULL - * on failure. - */ -struct boot_params *efi_main(void *handle, efi_system_table_t *_table) -{ - struct boot_params *boot_params; - unsigned long start, nr_pages; - struct desc_ptr *gdt, *idt; - efi_loaded_image_t *image; - struct setup_header *hdr; - efi_status_t status; - efi_guid_t proto = LOADED_IMAGE_PROTOCOL_GUID; - struct desc_struct *desc; - - sys_table = _table; - - /* Check if we were booted by the EFI firmware */ - if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) - goto fail; - - status = efi_call_phys3(sys_table->boottime->handle_protocol, - handle, &proto, (void *)&image); - if (status != EFI_SUCCESS) - goto fail; - - status = low_alloc(0x4000, 1, (unsigned long *)&boot_params); - if (status != EFI_SUCCESS) - goto fail; - - memset(boot_params, 0x0, 0x4000); - - /* Copy first two sectors to boot_params */ - memcpy(boot_params, image->image_base, 1024); - - hdr = &boot_params->hdr; - - /* - * The EFI firmware loader could have placed the kernel image - * anywhere in memory, but the kernel has various restrictions - * on the max physical address it can run at. Attempt to move - * the kernel to boot_params.pref_address, or as low as - * possible. - */ - start = hdr->pref_address; - nr_pages = round_up(hdr->init_size, EFI_PAGE_SIZE) / EFI_PAGE_SIZE; - - status = efi_call_phys4(sys_table->boottime->allocate_pages, - EFI_ALLOCATE_ADDRESS, EFI_LOADER_DATA, - nr_pages, &start); - if (status != EFI_SUCCESS) { - status = low_alloc(hdr->init_size, hdr->kernel_alignment, - &start); - if (status != EFI_SUCCESS) - goto fail; - } - - hdr->code32_start = (__u32)start; - hdr->pref_address = (__u64)(unsigned long)image->image_base; - - memcpy((void *)start, image->image_base, image->image_size); - - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, sizeof(*gdt), - (void **)&gdt); - if (status != EFI_SUCCESS) - goto fail; - - gdt->size = 0x800; - status = low_alloc(gdt->size, 8, (unsigned long *)&gdt->address); - if (status != EFI_SUCCESS) - goto fail; - - status = efi_call_phys3(sys_table->boottime->allocate_pool, - EFI_LOADER_DATA, sizeof(*idt), - (void **)&idt); - if (status != EFI_SUCCESS) - goto fail; - - idt->size = 0; - idt->address = 0; - - status = make_boot_params(boot_params, image, handle); - if (status != EFI_SUCCESS) - goto fail; - - memset((char *)gdt->address, 0x0, gdt->size); - desc = (struct desc_struct *)gdt->address; - - /* The first GDT is a dummy and the second is unused. */ - desc += 2; - - desc->limit0 = 0xffff; - desc->base0 = 0x0000; - desc->base1 = 0x0000; - desc->type = SEG_TYPE_CODE | SEG_TYPE_EXEC_READ; - desc->s = DESC_TYPE_CODE_DATA; - desc->dpl = 0; - desc->p = 1; - desc->limit = 0xf; - desc->avl = 0; - desc->l = 0; - desc->d = SEG_OP_SIZE_32BIT; - desc->g = SEG_GRANULARITY_4KB; - desc->base2 = 0x00; - - desc++; - desc->limit0 = 0xffff; - desc->base0 = 0x0000; - desc->base1 = 0x0000; - desc->type = SEG_TYPE_DATA | SEG_TYPE_READ_WRITE; - desc->s = DESC_TYPE_CODE_DATA; - desc->dpl = 0; - desc->p = 1; - desc->limit = 0xf; - desc->avl = 0; - desc->l = 0; - desc->d = SEG_OP_SIZE_32BIT; - desc->g = SEG_GRANULARITY_4KB; - desc->base2 = 0x00; - -#ifdef CONFIG_X86_64 - /* Task segment value */ - desc++; - desc->limit0 = 0x0000; - desc->base0 = 0x0000; - desc->base1 = 0x0000; - desc->type = SEG_TYPE_TSS; - desc->s = 0; - desc->dpl = 0; - desc->p = 1; - desc->limit = 0x0; - desc->avl = 0; - desc->l = 0; - desc->d = 0; - desc->g = SEG_GRANULARITY_4KB; - desc->base2 = 0x00; -#endif /* CONFIG_X86_64 */ - - asm volatile ("lidt %0" : : "m" (*idt)); - asm volatile ("lgdt %0" : : "m" (*gdt)); - - asm volatile("cli"); - - return boot_params; -fail: - return NULL; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.h b/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.h deleted file mode 100644 index 39251663..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/eboot.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef BOOT_COMPRESSED_EBOOT_H -#define BOOT_COMPRESSED_EBOOT_H - -#define SEG_TYPE_DATA (0 << 3) -#define SEG_TYPE_READ_WRITE (1 << 1) -#define SEG_TYPE_CODE (1 << 3) -#define SEG_TYPE_EXEC_READ (1 << 1) -#define SEG_TYPE_TSS ((1 << 3) | (1 << 0)) -#define SEG_OP_SIZE_32BIT (1 << 0) -#define SEG_GRANULARITY_4KB (1 << 0) - -#define DESC_TYPE_CODE_DATA (1 << 0) - -#define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) -#define EFI_READ_CHUNK_SIZE (1024 * 1024) - -#define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0 -#define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1 -#define PIXEL_BIT_MASK 2 -#define PIXEL_BLT_ONLY 3 -#define PIXEL_FORMAT_MAX 4 - -struct efi_pixel_bitmask { - u32 red_mask; - u32 green_mask; - u32 blue_mask; - u32 reserved_mask; -}; - -struct efi_graphics_output_mode_info { - u32 version; - u32 horizontal_resolution; - u32 vertical_resolution; - int pixel_format; - struct efi_pixel_bitmask pixel_information; - u32 pixels_per_scan_line; -} __packed; - -struct efi_graphics_output_protocol_mode { - u32 max_mode; - u32 mode; - unsigned long info; - unsigned long size_of_info; - u64 frame_buffer_base; - unsigned long frame_buffer_size; -} __packed; - -struct efi_graphics_output_protocol { - void *query_mode; - unsigned long set_mode; - unsigned long blt; - struct efi_graphics_output_protocol_mode *mode; -}; - -struct efi_uga_draw_protocol { - void *get_mode; - void *set_mode; - void *blt; -}; - -#endif /* BOOT_COMPRESSED_EBOOT_H */ diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_32.S b/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_32.S deleted file mode 100644 index a53440e8..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_32.S +++ /dev/null @@ -1,86 +0,0 @@ -/* - * EFI call stub for IA32. - * - * This stub allows us to make EFI calls in physical mode with interrupts - * turned off. Note that this implementation is different from the one in - * arch/x86/platform/efi/efi_stub_32.S because we're _already_ in physical - * mode at this point. - */ - -#include <linux/linkage.h> -#include <asm/page_types.h> - -/* - * efi_call_phys(void *, ...) is a function with variable parameters. - * All the callers of this function assure that all the parameters are 4-bytes. - */ - -/* - * In gcc calling convention, EBX, ESP, EBP, ESI and EDI are all callee save. - * So we'd better save all of them at the beginning of this function and restore - * at the end no matter how many we use, because we can not assure EFI runtime - * service functions will comply with gcc calling convention, too. - */ - -.text -ENTRY(efi_call_phys) - /* - * 0. The function can only be called in Linux kernel. So CS has been - * set to 0x0010, DS and SS have been set to 0x0018. In EFI, I found - * the values of these registers are the same. And, the corresponding - * GDT entries are identical. So I will do nothing about segment reg - * and GDT, but change GDT base register in prelog and epilog. - */ - - /* - * 1. Because we haven't been relocated by this point we need to - * use relative addressing. - */ - call 1f -1: popl %edx - subl $1b, %edx - - /* - * 2. Now on the top of stack is the return - * address in the caller of efi_call_phys(), then parameter 1, - * parameter 2, ..., param n. To make things easy, we save the return - * address of efi_call_phys in a global variable. - */ - popl %ecx - movl %ecx, saved_return_addr(%edx) - /* get the function pointer into ECX*/ - popl %ecx - movl %ecx, efi_rt_function_ptr(%edx) - - /* - * 3. Call the physical function. - */ - call *%ecx - - /* - * 4. Balance the stack. And because EAX contain the return value, - * we'd better not clobber it. We need to calculate our address - * again because %ecx and %edx are not preserved across EFI function - * calls. - */ - call 1f -1: popl %edx - subl $1b, %edx - - movl efi_rt_function_ptr(%edx), %ecx - pushl %ecx - - /* - * 10. Push the saved return address onto the stack and return. - */ - movl saved_return_addr(%edx), %ecx - pushl %ecx - ret -ENDPROC(efi_call_phys) -.previous - -.data -saved_return_addr: - .long 0 -efi_rt_function_ptr: - .long 0 diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_64.S b/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_64.S deleted file mode 100644 index cedc60de..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/efi_stub_64.S +++ /dev/null @@ -1 +0,0 @@ -#include "../../platform/efi/efi_stub_64.S" diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/head_32.S b/ANDROID_3.4.5/arch/x86/boot/compressed/head_32.S deleted file mode 100644 index c85e3ac9..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/head_32.S +++ /dev/null @@ -1,225 +0,0 @@ -/* - * linux/boot/head.S - * - * Copyright (C) 1991, 1992, 1993 Linus Torvalds - */ - -/* - * head.S contains the 32-bit startup code. - * - * NOTE!!! Startup happens at absolute address 0x00001000, which is also where - * the page directory will exist. The startup code will be overwritten by - * the page directory. [According to comments etc elsewhere on a compressed - * kernel it will end up at 0x1000 + 1Mb I hope so as I assume this. - AC] - * - * Page 0 is deliberately kept safe, since System Management Mode code in - * laptops may need to access the BIOS data stored there. This is also - * useful for future device drivers that either access the BIOS via VM86 - * mode. - */ - -/* - * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 - */ - .text - -#include <linux/init.h> -#include <linux/linkage.h> -#include <asm/segment.h> -#include <asm/page_types.h> -#include <asm/boot.h> -#include <asm/asm-offsets.h> - - __HEAD -ENTRY(startup_32) -#ifdef CONFIG_EFI_STUB - jmp preferred_addr - - .balign 0x10 - /* - * We don't need the return address, so set up the stack so - * efi_main() can find its arugments. - */ - add $0x4, %esp - - call efi_main - cmpl $0, %eax - movl %eax, %esi - jne 2f -1: - /* EFI init failed, so hang. */ - hlt - jmp 1b -2: - call 3f -3: - popl %eax - subl $3b, %eax - subl BP_pref_address(%esi), %eax - add BP_code32_start(%esi), %eax - leal preferred_addr(%eax), %eax - jmp *%eax - -preferred_addr: -#endif - cld - /* - * Test KEEP_SEGMENTS flag to see if the bootloader is asking - * us to not reload segments - */ - testb $(1<<6), BP_loadflags(%esi) - jnz 1f - - cli - movl $__BOOT_DS, %eax - movl %eax, %ds - movl %eax, %es - movl %eax, %fs - movl %eax, %gs - movl %eax, %ss -1: - -/* - * Calculate the delta between where we were compiled to run - * at and where we were actually loaded at. This can only be done - * with a short local call on x86. Nothing else will tell us what - * address we are running at. The reserved chunk of the real-mode - * data at 0x1e4 (defined as a scratch field) are used as the stack - * for this calculation. Only 4 bytes are needed. - */ - leal (BP_scratch+4)(%esi), %esp - call 1f -1: popl %ebp - subl $1b, %ebp - -/* - * %ebp contains the address we are loaded at by the boot loader and %ebx - * contains the address where we should move the kernel image temporarily - * for safe in-place decompression. - */ - -#ifdef CONFIG_RELOCATABLE - movl %ebp, %ebx - movl BP_kernel_alignment(%esi), %eax - decl %eax - addl %eax, %ebx - notl %eax - andl %eax, %ebx -#else - movl $LOAD_PHYSICAL_ADDR, %ebx -#endif - - /* Target address to relocate to for decompression */ - addl $z_extract_offset, %ebx - - /* Set up the stack */ - leal boot_stack_end(%ebx), %esp - - /* Zero EFLAGS */ - pushl $0 - popfl - -/* - * Copy the compressed kernel to the end of our buffer - * where decompression in place becomes safe. - */ - pushl %esi - leal (_bss-4)(%ebp), %esi - leal (_bss-4)(%ebx), %edi - movl $(_bss - startup_32), %ecx - shrl $2, %ecx - std - rep movsl - cld - popl %esi - -/* - * Jump to the relocated address. - */ - leal relocated(%ebx), %eax - jmp *%eax -ENDPROC(startup_32) - - .text -relocated: - -/* - * Clear BSS (stack is currently empty) - */ - xorl %eax, %eax - leal _bss(%ebx), %edi - leal _ebss(%ebx), %ecx - subl %edi, %ecx - shrl $2, %ecx - rep stosl - -/* - * Adjust our own GOT - */ - leal _got(%ebx), %edx - leal _egot(%ebx), %ecx -1: - cmpl %ecx, %edx - jae 2f - addl %ebx, (%edx) - addl $4, %edx - jmp 1b -2: - -/* - * Do the decompression, and jump to the new kernel.. - */ - leal z_extract_offset_negative(%ebx), %ebp - /* push arguments for decompress_kernel: */ - pushl %ebp /* output address */ - pushl $z_input_len /* input_len */ - leal input_data(%ebx), %eax - pushl %eax /* input_data */ - leal boot_heap(%ebx), %eax - pushl %eax /* heap area */ - pushl %esi /* real mode pointer */ - call decompress_kernel - addl $20, %esp - -#if CONFIG_RELOCATABLE -/* - * Find the address of the relocations. - */ - leal z_output_len(%ebp), %edi - -/* - * Calculate the delta between where vmlinux was compiled to run - * and where it was actually loaded. - */ - movl %ebp, %ebx - subl $LOAD_PHYSICAL_ADDR, %ebx - jz 2f /* Nothing to be done if loaded at compiled addr. */ -/* - * Process relocations. - */ - -1: subl $4, %edi - movl (%edi), %ecx - testl %ecx, %ecx - jz 2f - addl %ebx, -__PAGE_OFFSET(%ebx, %ecx) - jmp 1b -2: -#endif - -/* - * Jump to the decompressed kernel. - */ - xorl %ebx, %ebx - jmp *%ebp - -/* - * Stack and heap for uncompression - */ - .bss - .balign 4 -boot_heap: - .fill BOOT_HEAP_SIZE, 1, 0 -boot_stack: - .fill BOOT_STACK_SIZE, 1, 0 -boot_stack_end: diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/head_64.S b/ANDROID_3.4.5/arch/x86/boot/compressed/head_64.S deleted file mode 100644 index 87e03a13..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/head_64.S +++ /dev/null @@ -1,371 +0,0 @@ -/* - * linux/boot/head.S - * - * Copyright (C) 1991, 1992, 1993 Linus Torvalds - */ - -/* - * head.S contains the 32-bit startup code. - * - * NOTE!!! Startup happens at absolute address 0x00001000, which is also where - * the page directory will exist. The startup code will be overwritten by - * the page directory. [According to comments etc elsewhere on a compressed - * kernel it will end up at 0x1000 + 1Mb I hope so as I assume this. - AC] - * - * Page 0 is deliberately kept safe, since System Management Mode code in - * laptops may need to access the BIOS data stored there. This is also - * useful for future device drivers that either access the BIOS via VM86 - * mode. - */ - -/* - * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 - */ - .code32 - .text - -#include <linux/init.h> -#include <linux/linkage.h> -#include <asm/segment.h> -#include <asm/pgtable_types.h> -#include <asm/page_types.h> -#include <asm/boot.h> -#include <asm/msr.h> -#include <asm/processor-flags.h> -#include <asm/asm-offsets.h> - - __HEAD - .code32 -ENTRY(startup_32) - cld - /* - * Test KEEP_SEGMENTS flag to see if the bootloader is asking - * us to not reload segments - */ - testb $(1<<6), BP_loadflags(%esi) - jnz 1f - - cli - movl $(__KERNEL_DS), %eax - movl %eax, %ds - movl %eax, %es - movl %eax, %ss -1: - -/* - * Calculate the delta between where we were compiled to run - * at and where we were actually loaded at. This can only be done - * with a short local call on x86. Nothing else will tell us what - * address we are running at. The reserved chunk of the real-mode - * data at 0x1e4 (defined as a scratch field) are used as the stack - * for this calculation. Only 4 bytes are needed. - */ - leal (BP_scratch+4)(%esi), %esp - call 1f -1: popl %ebp - subl $1b, %ebp - -/* setup a stack and make sure cpu supports long mode. */ - movl $boot_stack_end, %eax - addl %ebp, %eax - movl %eax, %esp - - call verify_cpu - testl %eax, %eax - jnz no_longmode - -/* - * Compute the delta between where we were compiled to run at - * and where the code will actually run at. - * - * %ebp contains the address we are loaded at by the boot loader and %ebx - * contains the address where we should move the kernel image temporarily - * for safe in-place decompression. - */ - -#ifdef CONFIG_RELOCATABLE - movl %ebp, %ebx - movl BP_kernel_alignment(%esi), %eax - decl %eax - addl %eax, %ebx - notl %eax - andl %eax, %ebx -#else - movl $LOAD_PHYSICAL_ADDR, %ebx -#endif - - /* Target address to relocate to for decompression */ - addl $z_extract_offset, %ebx - -/* - * Prepare for entering 64 bit mode - */ - - /* Load new GDT with the 64bit segments using 32bit descriptor */ - leal gdt(%ebp), %eax - movl %eax, gdt+2(%ebp) - lgdt gdt(%ebp) - - /* Enable PAE mode */ - movl $(X86_CR4_PAE), %eax - movl %eax, %cr4 - - /* - * Build early 4G boot pagetable - */ - /* Initialize Page tables to 0 */ - leal pgtable(%ebx), %edi - xorl %eax, %eax - movl $((4096*6)/4), %ecx - rep stosl - - /* Build Level 4 */ - leal pgtable + 0(%ebx), %edi - leal 0x1007 (%edi), %eax - movl %eax, 0(%edi) - - /* Build Level 3 */ - leal pgtable + 0x1000(%ebx), %edi - leal 0x1007(%edi), %eax - movl $4, %ecx -1: movl %eax, 0x00(%edi) - addl $0x00001000, %eax - addl $8, %edi - decl %ecx - jnz 1b - - /* Build Level 2 */ - leal pgtable + 0x2000(%ebx), %edi - movl $0x00000183, %eax - movl $2048, %ecx -1: movl %eax, 0(%edi) - addl $0x00200000, %eax - addl $8, %edi - decl %ecx - jnz 1b - - /* Enable the boot page tables */ - leal pgtable(%ebx), %eax - movl %eax, %cr3 - - /* Enable Long mode in EFER (Extended Feature Enable Register) */ - movl $MSR_EFER, %ecx - rdmsr - btsl $_EFER_LME, %eax - wrmsr - - /* - * Setup for the jump to 64bit mode - * - * When the jump is performend we will be in long mode but - * in 32bit compatibility mode with EFER.LME = 1, CS.L = 0, CS.D = 1 - * (and in turn EFER.LMA = 1). To jump into 64bit mode we use - * the new gdt/idt that has __KERNEL_CS with CS.L = 1. - * We place all of the values on our mini stack so lret can - * used to perform that far jump. - */ - pushl $__KERNEL_CS - leal startup_64(%ebp), %eax - pushl %eax - - /* Enter paged protected Mode, activating Long Mode */ - movl $(X86_CR0_PG | X86_CR0_PE), %eax /* Enable Paging and Protected mode */ - movl %eax, %cr0 - - /* Jump from 32bit compatibility mode into 64bit mode. */ - lret -ENDPROC(startup_32) - -no_longmode: - /* This isn't an x86-64 CPU so hang */ -1: - hlt - jmp 1b - -#include "../../kernel/verify_cpu.S" - - /* - * Be careful here startup_64 needs to be at a predictable - * address so I can export it in an ELF header. Bootloaders - * should look at the ELF header to find this address, as - * it may change in the future. - */ - .code64 - .org 0x200 -ENTRY(startup_64) - /* - * We come here either from startup_32 or directly from a - * 64bit bootloader. If we come here from a bootloader we depend on - * an identity mapped page table being provied that maps our - * entire text+data+bss and hopefully all of memory. - */ -#ifdef CONFIG_EFI_STUB - /* - * The entry point for the PE/COFF executable is 0x210, so only - * legacy boot loaders will execute this jmp. - */ - jmp preferred_addr - - .org 0x210 - mov %rcx, %rdi - mov %rdx, %rsi - call efi_main - movq %rax,%rsi - cmpq $0,%rax - jne 2f -1: - /* EFI init failed, so hang. */ - hlt - jmp 1b -2: - call 3f -3: - popq %rax - subq $3b, %rax - subq BP_pref_address(%rsi), %rax - add BP_code32_start(%esi), %eax - leaq preferred_addr(%rax), %rax - jmp *%rax - -preferred_addr: -#endif - - /* Setup data segments. */ - xorl %eax, %eax - movl %eax, %ds - movl %eax, %es - movl %eax, %ss - movl %eax, %fs - movl %eax, %gs - lldt %ax - movl $0x20, %eax - ltr %ax - - /* - * Compute the decompressed kernel start address. It is where - * we were loaded at aligned to a 2M boundary. %rbp contains the - * decompressed kernel start address. - * - * If it is a relocatable kernel then decompress and run the kernel - * from load address aligned to 2MB addr, otherwise decompress and - * run the kernel from LOAD_PHYSICAL_ADDR - * - * We cannot rely on the calculation done in 32-bit mode, since we - * may have been invoked via the 64-bit entry point. - */ - - /* Start with the delta to where the kernel will run at. */ -#ifdef CONFIG_RELOCATABLE - leaq startup_32(%rip) /* - $startup_32 */, %rbp - movl BP_kernel_alignment(%rsi), %eax - decl %eax - addq %rax, %rbp - notq %rax - andq %rax, %rbp -#else - movq $LOAD_PHYSICAL_ADDR, %rbp -#endif - - /* Target address to relocate to for decompression */ - leaq z_extract_offset(%rbp), %rbx - - /* Set up the stack */ - leaq boot_stack_end(%rbx), %rsp - - /* Zero EFLAGS */ - pushq $0 - popfq - -/* - * Copy the compressed kernel to the end of our buffer - * where decompression in place becomes safe. - */ - pushq %rsi - leaq (_bss-8)(%rip), %rsi - leaq (_bss-8)(%rbx), %rdi - movq $_bss /* - $startup_32 */, %rcx - shrq $3, %rcx - std - rep movsq - cld - popq %rsi - -/* - * Jump to the relocated address. - */ - leaq relocated(%rbx), %rax - jmp *%rax - - .text -relocated: - -/* - * Clear BSS (stack is currently empty) - */ - xorl %eax, %eax - leaq _bss(%rip), %rdi - leaq _ebss(%rip), %rcx - subq %rdi, %rcx - shrq $3, %rcx - rep stosq - -/* - * Adjust our own GOT - */ - leaq _got(%rip), %rdx - leaq _egot(%rip), %rcx -1: - cmpq %rcx, %rdx - jae 2f - addq %rbx, (%rdx) - addq $8, %rdx - jmp 1b -2: - -/* - * Do the decompression, and jump to the new kernel.. - */ - pushq %rsi /* Save the real mode argument */ - movq %rsi, %rdi /* real mode address */ - leaq boot_heap(%rip), %rsi /* malloc area for uncompression */ - leaq input_data(%rip), %rdx /* input_data */ - movl $z_input_len, %ecx /* input_len */ - movq %rbp, %r8 /* output target address */ - call decompress_kernel - popq %rsi - -/* - * Jump to the decompressed kernel. - */ - jmp *%rbp - - .data -gdt: - .word gdt_end - gdt - .long gdt - .word 0 - .quad 0x0000000000000000 /* NULL descriptor */ - .quad 0x00af9a000000ffff /* __KERNEL_CS */ - .quad 0x00cf92000000ffff /* __KERNEL_DS */ - .quad 0x0080890000000000 /* TS descriptor */ - .quad 0x0000000000000000 /* TS continued */ -gdt_end: - -/* - * Stack and heap for uncompression - */ - .bss - .balign 4 -boot_heap: - .fill BOOT_HEAP_SIZE, 1, 0 -boot_stack: - .fill BOOT_STACK_SIZE, 1, 0 -boot_stack_end: - -/* - * Space for page tables (not in .bss so not zeroed) - */ - .section ".pgtable","a",@nobits - .balign 4096 -pgtable: - .fill 6*4096, 1, 0 diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/misc.c b/ANDROID_3.4.5/arch/x86/boot/compressed/misc.c deleted file mode 100644 index 7116dcba..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/misc.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * misc.c - * - * This is a collection of several routines from gzip-1.0.3 - * adapted for Linux. - * - * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994 - * puts by Nick Holloway 1993, better puts by Martin Mares 1995 - * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 - */ - -#include "misc.h" - -/* WARNING!! - * This code is compiled with -fPIC and it is relocated dynamically - * at run time, but no relocation processing is performed. - * This means that it is not safe to place pointers in static structures. - */ - -/* - * Getting to provable safe in place decompression is hard. - * Worst case behaviours need to be analyzed. - * Background information: - * - * The file layout is: - * magic[2] - * method[1] - * flags[1] - * timestamp[4] - * extraflags[1] - * os[1] - * compressed data blocks[N] - * crc[4] orig_len[4] - * - * resulting in 18 bytes of non compressed data overhead. - * - * Files divided into blocks - * 1 bit (last block flag) - * 2 bits (block type) - * - * 1 block occurs every 32K -1 bytes or when there 50% compression - * has been achieved. The smallest block type encoding is always used. - * - * stored: - * 32 bits length in bytes. - * - * fixed: - * magic fixed tree. - * symbols. - * - * dynamic: - * dynamic tree encoding. - * symbols. - * - * - * The buffer for decompression in place is the length of the - * uncompressed data, plus a small amount extra to keep the algorithm safe. - * The compressed data is placed at the end of the buffer. The output - * pointer is placed at the start of the buffer and the input pointer - * is placed where the compressed data starts. Problems will occur - * when the output pointer overruns the input pointer. - * - * The output pointer can only overrun the input pointer if the input - * pointer is moving faster than the output pointer. A condition only - * triggered by data whose compressed form is larger than the uncompressed - * form. - * - * The worst case at the block level is a growth of the compressed data - * of 5 bytes per 32767 bytes. - * - * The worst case internal to a compressed block is very hard to figure. - * The worst case can at least be boundined by having one bit that represents - * 32764 bytes and then all of the rest of the bytes representing the very - * very last byte. - * - * All of which is enough to compute an amount of extra data that is required - * to be safe. To avoid problems at the block level allocating 5 extra bytes - * per 32767 bytes of data is sufficient. To avoind problems internal to a - * block adding an extra 32767 bytes (the worst case uncompressed block size) - * is sufficient, to ensure that in the worst case the decompressed data for - * block will stop the byte before the compressed data for a block begins. - * To avoid problems with the compressed data's meta information an extra 18 - * bytes are needed. Leading to the formula: - * - * extra_bytes = (uncompressed_size >> 12) + 32768 + 18 + decompressor_size. - * - * Adding 8 bytes per 32K is a bit excessive but much easier to calculate. - * Adding 32768 instead of 32767 just makes for round numbers. - * Adding the decompressor_size is necessary as it musht live after all - * of the data as well. Last I measured the decompressor is about 14K. - * 10K of actual data and 4K of bss. - * - */ - -/* - * gzip declarations - */ -#define STATIC static - -#undef memset -#undef memcpy -#define memzero(s, n) memset((s), 0, (n)) - - -static void error(char *m); - -/* - * This is set up by the setup-routine at boot-time - */ -struct boot_params *real_mode; /* Pointer to real-mode data */ -static int quiet; -static int debug; - -void *memset(void *s, int c, size_t n); -void *memcpy(void *dest, const void *src, size_t n); - -#ifdef CONFIG_X86_64 -#define memptr long -#else -#define memptr unsigned -#endif - -static memptr free_mem_ptr; -static memptr free_mem_end_ptr; - -static char *vidmem; -static int vidport; -static int lines, cols; - -#ifdef CONFIG_KERNEL_GZIP -#include "../../../../lib/decompress_inflate.c" -#endif - -#ifdef CONFIG_KERNEL_BZIP2 -#include "../../../../lib/decompress_bunzip2.c" -#endif - -#ifdef CONFIG_KERNEL_LZMA -#include "../../../../lib/decompress_unlzma.c" -#endif - -#ifdef CONFIG_KERNEL_XZ -#include "../../../../lib/decompress_unxz.c" -#endif - -#ifdef CONFIG_KERNEL_LZO -#include "../../../../lib/decompress_unlzo.c" -#endif - -static void scroll(void) -{ - int i; - - memcpy(vidmem, vidmem + cols * 2, (lines - 1) * cols * 2); - for (i = (lines - 1) * cols * 2; i < lines * cols * 2; i += 2) - vidmem[i] = ' '; -} - -#define XMTRDY 0x20 - -#define TXR 0 /* Transmit register (WRITE) */ -#define LSR 5 /* Line Status */ -static void serial_putchar(int ch) -{ - unsigned timeout = 0xffff; - - while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) - cpu_relax(); - - outb(ch, early_serial_base + TXR); -} - -void __putstr(int error, const char *s) -{ - int x, y, pos; - char c; - -#ifndef CONFIG_X86_VERBOSE_BOOTUP - if (!error) - return; -#endif - if (early_serial_base) { - const char *str = s; - while (*str) { - if (*str == '\n') - serial_putchar('\r'); - serial_putchar(*str++); - } - } - - if (real_mode->screen_info.orig_video_mode == 0 && - lines == 0 && cols == 0) - return; - - x = real_mode->screen_info.orig_x; - y = real_mode->screen_info.orig_y; - - while ((c = *s++) != '\0') { - if (c == '\n') { - x = 0; - if (++y >= lines) { - scroll(); - y--; - } - } else { - vidmem[(x + cols * y) * 2] = c; - if (++x >= cols) { - x = 0; - if (++y >= lines) { - scroll(); - y--; - } - } - } - } - - real_mode->screen_info.orig_x = x; - real_mode->screen_info.orig_y = y; - - pos = (x + cols * y) * 2; /* Update cursor position */ - outb(14, vidport); - outb(0xff & (pos >> 9), vidport+1); - outb(15, vidport); - outb(0xff & (pos >> 1), vidport+1); -} - -void *memset(void *s, int c, size_t n) -{ - int i; - char *ss = s; - - for (i = 0; i < n; i++) - ss[i] = c; - return s; -} -#ifdef CONFIG_X86_32 -void *memcpy(void *dest, const void *src, size_t n) -{ - int d0, d1, d2; - asm volatile( - "rep ; movsl\n\t" - "movl %4,%%ecx\n\t" - "rep ; movsb\n\t" - : "=&c" (d0), "=&D" (d1), "=&S" (d2) - : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src) - : "memory"); - - return dest; -} -#else -void *memcpy(void *dest, const void *src, size_t n) -{ - long d0, d1, d2; - asm volatile( - "rep ; movsq\n\t" - "movq %4,%%rcx\n\t" - "rep ; movsb\n\t" - : "=&c" (d0), "=&D" (d1), "=&S" (d2) - : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src) - : "memory"); - - return dest; -} -#endif - -static void error(char *x) -{ - __putstr(1, "\n\n"); - __putstr(1, x); - __putstr(1, "\n\n -- System halted"); - - while (1) - asm("hlt"); -} - -static void parse_elf(void *output) -{ -#ifdef CONFIG_X86_64 - Elf64_Ehdr ehdr; - Elf64_Phdr *phdrs, *phdr; -#else - Elf32_Ehdr ehdr; - Elf32_Phdr *phdrs, *phdr; -#endif - void *dest; - int i; - - memcpy(&ehdr, output, sizeof(ehdr)); - if (ehdr.e_ident[EI_MAG0] != ELFMAG0 || - ehdr.e_ident[EI_MAG1] != ELFMAG1 || - ehdr.e_ident[EI_MAG2] != ELFMAG2 || - ehdr.e_ident[EI_MAG3] != ELFMAG3) { - error("Kernel is not a valid ELF file"); - return; - } - - if (!quiet) - putstr("Parsing ELF... "); - - phdrs = malloc(sizeof(*phdrs) * ehdr.e_phnum); - if (!phdrs) - error("Failed to allocate space for phdrs"); - - memcpy(phdrs, output + ehdr.e_phoff, sizeof(*phdrs) * ehdr.e_phnum); - - for (i = 0; i < ehdr.e_phnum; i++) { - phdr = &phdrs[i]; - - switch (phdr->p_type) { - case PT_LOAD: -#ifdef CONFIG_RELOCATABLE - dest = output; - dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR); -#else - dest = (void *)(phdr->p_paddr); -#endif - memcpy(dest, - output + phdr->p_offset, - phdr->p_filesz); - break; - default: /* Ignore other PT_* */ break; - } - } - - free(phdrs); -} - -asmlinkage void decompress_kernel(void *rmode, memptr heap, - unsigned char *input_data, - unsigned long input_len, - unsigned char *output) -{ - real_mode = rmode; - - if (cmdline_find_option_bool("quiet")) - quiet = 1; - if (cmdline_find_option_bool("debug")) - debug = 1; - - if (real_mode->screen_info.orig_video_mode == 7) { - vidmem = (char *) 0xb0000; - vidport = 0x3b4; - } else { - vidmem = (char *) 0xb8000; - vidport = 0x3d4; - } - - lines = real_mode->screen_info.orig_video_lines; - cols = real_mode->screen_info.orig_video_cols; - - console_init(); - if (debug) - putstr("early console in decompress_kernel\n"); - - free_mem_ptr = heap; /* Heap */ - free_mem_end_ptr = heap + BOOT_HEAP_SIZE; - - if ((unsigned long)output & (MIN_KERNEL_ALIGN - 1)) - error("Destination address inappropriately aligned"); -#ifdef CONFIG_X86_64 - if (heap > 0x3fffffffffffUL) - error("Destination address too large"); -#else - if (heap > ((-__PAGE_OFFSET-(128<<20)-1) & 0x7fffffff)) - error("Destination address too large"); -#endif -#ifndef CONFIG_RELOCATABLE - if ((unsigned long)output != LOAD_PHYSICAL_ADDR) - error("Wrong destination address"); -#endif - - if (!quiet) - putstr("\nDecompressing Linux... "); - decompress(input_data, input_len, NULL, NULL, output, NULL, error); - parse_elf(output); - if (!quiet) - putstr("done.\nBooting the kernel.\n"); - return; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/misc.h b/ANDROID_3.4.5/arch/x86/boot/compressed/misc.h deleted file mode 100644 index 3f19c81a..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/misc.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef BOOT_COMPRESSED_MISC_H -#define BOOT_COMPRESSED_MISC_H - -/* - * we have to be careful, because no indirections are allowed here, and - * paravirt_ops is a kind of one. As it will only run in baremetal anyway, - * we just keep it from happening - */ -#undef CONFIG_PARAVIRT -#ifdef CONFIG_X86_32 -#define _ASM_X86_DESC_H 1 -#endif - -#include <linux/linkage.h> -#include <linux/screen_info.h> -#include <linux/elf.h> -#include <linux/io.h> -#include <asm/page.h> -#include <asm/boot.h> -#include <asm/bootparam.h> - -#define BOOT_BOOT_H -#include "../ctype.h" - -/* misc.c */ -extern struct boot_params *real_mode; /* Pointer to real-mode data */ -void __putstr(int error, const char *s); -#define putstr(__x) __putstr(0, __x) -#define puts(__x) __putstr(0, __x) - -/* cmdline.c */ -int cmdline_find_option(const char *option, char *buffer, int bufsize); -int cmdline_find_option_bool(const char *option); - -/* early_serial_console.c */ -extern int early_serial_base; -void console_init(void); - -#endif diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/mkpiggy.c b/ANDROID_3.4.5/arch/x86/boot/compressed/mkpiggy.c deleted file mode 100644 index 958a6414..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/mkpiggy.c +++ /dev/null @@ -1,95 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright (C) 2009 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License version - * 2 as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. - * - * H. Peter Anvin <hpa@linux.intel.com> - * - * ----------------------------------------------------------------------- */ - -/* - * Compute the desired load offset from a compressed program; outputs - * a small assembly wrapper with the appropriate symbols defined. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <inttypes.h> -#include <tools/le_byteshift.h> - -int main(int argc, char *argv[]) -{ - uint32_t olen; - long ilen; - unsigned long offs; - FILE *f; - - if (argc < 2) { - fprintf(stderr, "Usage: %s compressed_file\n", argv[0]); - return 1; - } - - /* Get the information for the compressed kernel image first */ - - f = fopen(argv[1], "r"); - if (!f) { - perror(argv[1]); - return 1; - } - - - if (fseek(f, -4L, SEEK_END)) { - perror(argv[1]); - } - - if (fread(&olen, sizeof(olen), 1, f) != 1) { - perror(argv[1]); - return 1; - } - - ilen = ftell(f); - olen = get_unaligned_le32(&olen); - fclose(f); - - /* - * Now we have the input (compressed) and output (uncompressed) - * sizes, compute the necessary decompression offset... - */ - - offs = (olen > ilen) ? olen - ilen : 0; - offs += olen >> 12; /* Add 8 bytes for each 32K block */ - offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */ - offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ - - printf(".section \".rodata..compressed\",\"a\",@progbits\n"); - printf(".globl z_input_len\n"); - printf("z_input_len = %lu\n", ilen); - printf(".globl z_output_len\n"); - printf("z_output_len = %lu\n", (unsigned long)olen); - printf(".globl z_extract_offset\n"); - printf("z_extract_offset = 0x%lx\n", offs); - /* z_extract_offset_negative allows simplification of head_32.S */ - printf(".globl z_extract_offset_negative\n"); - printf("z_extract_offset_negative = -0x%lx\n", offs); - - printf(".globl input_data, input_data_end\n"); - printf("input_data:\n"); - printf(".incbin \"%s\"\n", argv[1]); - printf("input_data_end:\n"); - - return 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/string.c b/ANDROID_3.4.5/arch/x86/boot/compressed/string.c deleted file mode 100644 index ffb9c5c9..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/string.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "misc.h" - -int memcmp(const void *s1, const void *s2, size_t len) -{ - u8 diff; - asm("repe; cmpsb; setnz %0" - : "=qm" (diff), "+D" (s1), "+S" (s2), "+c" (len)); - return diff; -} - -#include "../string.c" diff --git a/ANDROID_3.4.5/arch/x86/boot/compressed/vmlinux.lds.S b/ANDROID_3.4.5/arch/x86/boot/compressed/vmlinux.lds.S deleted file mode 100644 index 34d047c9..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/compressed/vmlinux.lds.S +++ /dev/null @@ -1,74 +0,0 @@ -#include <asm-generic/vmlinux.lds.h> - -OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) - -#undef i386 - -#include <asm/cache.h> -#include <asm/page_types.h> - -#ifdef CONFIG_X86_64 -OUTPUT_ARCH(i386:x86-64) -ENTRY(startup_64) -#else -OUTPUT_ARCH(i386) -ENTRY(startup_32) -#endif - -SECTIONS -{ - /* Be careful parts of head_64.S assume startup_32 is at - * address 0. - */ - . = 0; - .head.text : { - _head = . ; - HEAD_TEXT - _ehead = . ; - } - .rodata..compressed : { - *(.rodata..compressed) - } - .text : { - _text = .; /* Text */ - *(.text) - *(.text.*) - _etext = . ; - } - .rodata : { - _rodata = . ; - *(.rodata) /* read-only data */ - *(.rodata.*) - _erodata = . ; - } - .got : { - _got = .; - KEEP(*(.got.plt)) - KEEP(*(.got)) - _egot = .; - } - .data : { - _data = . ; - *(.data) - *(.data.*) - _edata = . ; - } - . = ALIGN(L1_CACHE_BYTES); - .bss : { - _bss = . ; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(8); /* For convenience during zeroing */ - _ebss = .; - } -#ifdef CONFIG_X86_64 - . = ALIGN(PAGE_SIZE); - .pgtable : { - _pgtable = . ; - *(.pgtable) - _epgtable = . ; - } -#endif - _end = .; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/copy.S b/ANDROID_3.4.5/arch/x86/boot/copy.S deleted file mode 100644 index 11f272c6..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/copy.S +++ /dev/null @@ -1,87 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -#include <linux/linkage.h> - -/* - * Memory copy routines - */ - - .code16gcc - .text - -GLOBAL(memcpy) - pushw %si - pushw %di - movw %ax, %di - movw %dx, %si - pushw %cx - shrw $2, %cx - rep; movsl - popw %cx - andw $3, %cx - rep; movsb - popw %di - popw %si - ret -ENDPROC(memcpy) - -GLOBAL(memset) - pushw %di - movw %ax, %di - movzbl %dl, %eax - imull $0x01010101,%eax - pushw %cx - shrw $2, %cx - rep; stosl - popw %cx - andw $3, %cx - rep; stosb - popw %di - ret -ENDPROC(memset) - -GLOBAL(copy_from_fs) - pushw %ds - pushw %fs - popw %ds - call memcpy - popw %ds - ret -ENDPROC(copy_from_fs) - -GLOBAL(copy_to_fs) - pushw %es - pushw %fs - popw %es - call memcpy - popw %es - ret -ENDPROC(copy_to_fs) - -#if 0 /* Not currently used, but can be enabled as needed */ -GLOBAL(copy_from_gs) - pushw %ds - pushw %gs - popw %ds - call memcpy - popw %ds - ret -ENDPROC(copy_from_gs) - -GLOBAL(copy_to_gs) - pushw %es - pushw %gs - popw %es - call memcpy - popw %es - ret -ENDPROC(copy_to_gs) -#endif diff --git a/ANDROID_3.4.5/arch/x86/boot/cpu.c b/ANDROID_3.4.5/arch/x86/boot/cpu.c deleted file mode 100644 index 6ec6bb6e..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/cpu.c +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007-2008 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * arch/x86/boot/cpu.c - * - * Check for obligatory CPU features and abort if the features are not - * present. - */ - -#include "boot.h" -#include "cpustr.h" - -static char *cpu_name(int level) -{ - static char buf[6]; - - if (level == 64) { - return "x86-64"; - } else { - if (level == 15) - level = 6; - sprintf(buf, "i%d86", level); - return buf; - } -} - -int validate_cpu(void) -{ - u32 *err_flags; - int cpu_level, req_level; - const unsigned char *msg_strs; - - check_cpu(&cpu_level, &req_level, &err_flags); - - if (cpu_level < req_level) { - printf("This kernel requires an %s CPU, ", - cpu_name(req_level)); - printf("but only detected an %s CPU.\n", - cpu_name(cpu_level)); - return -1; - } - - if (err_flags) { - int i, j; - puts("This kernel requires the following features " - "not present on the CPU:\n"); - - msg_strs = (const unsigned char *)x86_cap_strs; - - for (i = 0; i < NCAPINTS; i++) { - u32 e = err_flags[i]; - - for (j = 0; j < 32; j++) { - if (msg_strs[0] < i || - (msg_strs[0] == i && msg_strs[1] < j)) { - /* Skip to the next string */ - msg_strs += 2; - while (*msg_strs++) - ; - } - if (e & 1) { - if (msg_strs[0] == i && - msg_strs[1] == j && - msg_strs[2]) - printf("%s ", msg_strs+2); - else - printf("%d:%d ", i, j); - } - e >>= 1; - } - } - putchar('\n'); - return -1; - } else { - return 0; - } -} diff --git a/ANDROID_3.4.5/arch/x86/boot/cpucheck.c b/ANDROID_3.4.5/arch/x86/boot/cpucheck.c deleted file mode 100644 index 4d3ff037..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/cpucheck.c +++ /dev/null @@ -1,252 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Check for obligatory CPU features and abort if the features are not - * present. This code should be compilable as 16-, 32- or 64-bit - * code, so be very careful with types and inline assembly. - * - * This code should not contain any messages; that requires an - * additional wrapper. - * - * As written, this code is not safe for inclusion into the kernel - * proper (after FPU initialization, in particular). - */ - -#ifdef _SETUP -# include "boot.h" -#endif -#include <linux/types.h> -#include <asm/processor-flags.h> -#include <asm/required-features.h> -#include <asm/msr-index.h> - -struct cpu_features cpu; -static u32 cpu_vendor[3]; -static u32 err_flags[NCAPINTS]; - -static const int req_level = CONFIG_X86_MINIMUM_CPU_FAMILY; - -static const u32 req_flags[NCAPINTS] = -{ - REQUIRED_MASK0, - REQUIRED_MASK1, - 0, /* REQUIRED_MASK2 not implemented in this file */ - 0, /* REQUIRED_MASK3 not implemented in this file */ - REQUIRED_MASK4, - 0, /* REQUIRED_MASK5 not implemented in this file */ - REQUIRED_MASK6, - 0, /* REQUIRED_MASK7 not implemented in this file */ -}; - -#define A32(a, b, c, d) (((d) << 24)+((c) << 16)+((b) << 8)+(a)) - -static int is_amd(void) -{ - return cpu_vendor[0] == A32('A', 'u', 't', 'h') && - cpu_vendor[1] == A32('e', 'n', 't', 'i') && - cpu_vendor[2] == A32('c', 'A', 'M', 'D'); -} - -static int is_centaur(void) -{ - return cpu_vendor[0] == A32('C', 'e', 'n', 't') && - cpu_vendor[1] == A32('a', 'u', 'r', 'H') && - cpu_vendor[2] == A32('a', 'u', 'l', 's'); -} - -static int is_transmeta(void) -{ - return cpu_vendor[0] == A32('G', 'e', 'n', 'u') && - cpu_vendor[1] == A32('i', 'n', 'e', 'T') && - cpu_vendor[2] == A32('M', 'x', '8', '6'); -} - -static int has_fpu(void) -{ - u16 fcw = -1, fsw = -1; - u32 cr0; - - asm("movl %%cr0,%0" : "=r" (cr0)); - if (cr0 & (X86_CR0_EM|X86_CR0_TS)) { - cr0 &= ~(X86_CR0_EM|X86_CR0_TS); - asm volatile("movl %0,%%cr0" : : "r" (cr0)); - } - - asm volatile("fninit ; fnstsw %0 ; fnstcw %1" - : "+m" (fsw), "+m" (fcw)); - - return fsw == 0 && (fcw & 0x103f) == 0x003f; -} - -static int has_eflag(u32 mask) -{ - u32 f0, f1; - - asm("pushfl ; " - "pushfl ; " - "popl %0 ; " - "movl %0,%1 ; " - "xorl %2,%1 ; " - "pushl %1 ; " - "popfl ; " - "pushfl ; " - "popl %1 ; " - "popfl" - : "=&r" (f0), "=&r" (f1) - : "ri" (mask)); - - return !!((f0^f1) & mask); -} - -static void get_flags(void) -{ - u32 max_intel_level, max_amd_level; - u32 tfms; - - if (has_fpu()) - set_bit(X86_FEATURE_FPU, cpu.flags); - - if (has_eflag(X86_EFLAGS_ID)) { - asm("cpuid" - : "=a" (max_intel_level), - "=b" (cpu_vendor[0]), - "=d" (cpu_vendor[1]), - "=c" (cpu_vendor[2]) - : "a" (0)); - - if (max_intel_level >= 0x00000001 && - max_intel_level <= 0x0000ffff) { - asm("cpuid" - : "=a" (tfms), - "=c" (cpu.flags[4]), - "=d" (cpu.flags[0]) - : "a" (0x00000001) - : "ebx"); - cpu.level = (tfms >> 8) & 15; - cpu.model = (tfms >> 4) & 15; - if (cpu.level >= 6) - cpu.model += ((tfms >> 16) & 0xf) << 4; - } - - asm("cpuid" - : "=a" (max_amd_level) - : "a" (0x80000000) - : "ebx", "ecx", "edx"); - - if (max_amd_level >= 0x80000001 && - max_amd_level <= 0x8000ffff) { - u32 eax = 0x80000001; - asm("cpuid" - : "+a" (eax), - "=c" (cpu.flags[6]), - "=d" (cpu.flags[1]) - : : "ebx"); - } - } -} - -/* Returns a bitmask of which words we have error bits in */ -static int check_flags(void) -{ - u32 err; - int i; - - err = 0; - for (i = 0; i < NCAPINTS; i++) { - err_flags[i] = req_flags[i] & ~cpu.flags[i]; - if (err_flags[i]) - err |= 1 << i; - } - - return err; -} - -/* - * Returns -1 on error. - * - * *cpu_level is set to the current CPU level; *req_level to the required - * level. x86-64 is considered level 64 for this purpose. - * - * *err_flags_ptr is set to the flags error array if there are flags missing. - */ -int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr) -{ - int err; - - memset(&cpu.flags, 0, sizeof cpu.flags); - cpu.level = 3; - - if (has_eflag(X86_EFLAGS_AC)) - cpu.level = 4; - - get_flags(); - err = check_flags(); - - if (test_bit(X86_FEATURE_LM, cpu.flags)) - cpu.level = 64; - - if (err == 0x01 && - !(err_flags[0] & - ~((1 << X86_FEATURE_XMM)|(1 << X86_FEATURE_XMM2))) && - is_amd()) { - /* If this is an AMD and we're only missing SSE+SSE2, try to - turn them on */ - - u32 ecx = MSR_K7_HWCR; - u32 eax, edx; - - asm("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx)); - eax &= ~(1 << 15); - asm("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx)); - - get_flags(); /* Make sure it really did something */ - err = check_flags(); - } else if (err == 0x01 && - !(err_flags[0] & ~(1 << X86_FEATURE_CX8)) && - is_centaur() && cpu.model >= 6) { - /* If this is a VIA C3, we might have to enable CX8 - explicitly */ - - u32 ecx = MSR_VIA_FCR; - u32 eax, edx; - - asm("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx)); - eax |= (1<<1)|(1<<7); - asm("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx)); - - set_bit(X86_FEATURE_CX8, cpu.flags); - err = check_flags(); - } else if (err == 0x01 && is_transmeta()) { - /* Transmeta might have masked feature bits in word 0 */ - - u32 ecx = 0x80860004; - u32 eax, edx; - u32 level = 1; - - asm("rdmsr" : "=a" (eax), "=d" (edx) : "c" (ecx)); - asm("wrmsr" : : "a" (~0), "d" (edx), "c" (ecx)); - asm("cpuid" - : "+a" (level), "=d" (cpu.flags[0]) - : : "ecx", "ebx"); - asm("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx)); - - err = check_flags(); - } - - if (err_flags_ptr) - *err_flags_ptr = err ? err_flags : NULL; - if (cpu_level_ptr) - *cpu_level_ptr = cpu.level; - if (req_level_ptr) - *req_level_ptr = req_level; - - return (cpu.level < req_level || err) ? -1 : 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/ctype.h b/ANDROID_3.4.5/arch/x86/boot/ctype.h deleted file mode 100644 index 25e13403..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/ctype.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef BOOT_ISDIGIT_H - -#define BOOT_ISDIGIT_H - -static inline int isdigit(int ch) -{ - return (ch >= '0') && (ch <= '9'); -} - -static inline int isxdigit(int ch) -{ - if (isdigit(ch)) - return true; - - if ((ch >= 'a') && (ch <= 'f')) - return true; - - return (ch >= 'A') && (ch <= 'F'); -} - -#endif diff --git a/ANDROID_3.4.5/arch/x86/boot/early_serial_console.c b/ANDROID_3.4.5/arch/x86/boot/early_serial_console.c deleted file mode 100644 index 5df2869c..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/early_serial_console.c +++ /dev/null @@ -1,151 +0,0 @@ -#include "boot.h" - -#define DEFAULT_SERIAL_PORT 0x3f8 /* ttyS0 */ - -#define XMTRDY 0x20 - -#define DLAB 0x80 - -#define TXR 0 /* Transmit register (WRITE) */ -#define RXR 0 /* Receive register (READ) */ -#define IER 1 /* Interrupt Enable */ -#define IIR 2 /* Interrupt ID */ -#define FCR 2 /* FIFO control */ -#define LCR 3 /* Line control */ -#define MCR 4 /* Modem control */ -#define LSR 5 /* Line Status */ -#define MSR 6 /* Modem Status */ -#define DLL 0 /* Divisor Latch Low */ -#define DLH 1 /* Divisor latch High */ - -#define DEFAULT_BAUD 9600 - -static void early_serial_init(int port, int baud) -{ - unsigned char c; - unsigned divisor; - - outb(0x3, port + LCR); /* 8n1 */ - outb(0, port + IER); /* no interrupt */ - outb(0, port + FCR); /* no fifo */ - outb(0x3, port + MCR); /* DTR + RTS */ - - divisor = 115200 / baud; - c = inb(port + LCR); - outb(c | DLAB, port + LCR); - outb(divisor & 0xff, port + DLL); - outb((divisor >> 8) & 0xff, port + DLH); - outb(c & ~DLAB, port + LCR); - - early_serial_base = port; -} - -static void parse_earlyprintk(void) -{ - int baud = DEFAULT_BAUD; - char arg[32]; - int pos = 0; - int port = 0; - - if (cmdline_find_option("earlyprintk", arg, sizeof arg) > 0) { - char *e; - - if (!strncmp(arg, "serial", 6)) { - port = DEFAULT_SERIAL_PORT; - pos += 6; - } - - if (arg[pos] == ',') - pos++; - - /* - * make sure we have - * "serial,0x3f8,115200" - * "serial,ttyS0,115200" - * "ttyS0,115200" - */ - if (pos == 7 && !strncmp(arg + pos, "0x", 2)) { - port = simple_strtoull(arg + pos, &e, 16); - if (port == 0 || arg + pos == e) - port = DEFAULT_SERIAL_PORT; - else - pos = e - arg; - } else if (!strncmp(arg + pos, "ttyS", 4)) { - static const int bases[] = { 0x3f8, 0x2f8 }; - int idx = 0; - - if (!strncmp(arg + pos, "ttyS", 4)) - pos += 4; - - if (arg[pos++] == '1') - idx = 1; - - port = bases[idx]; - } - - if (arg[pos] == ',') - pos++; - - baud = simple_strtoull(arg + pos, &e, 0); - if (baud == 0 || arg + pos == e) - baud = DEFAULT_BAUD; - } - - if (port) - early_serial_init(port, baud); -} - -#define BASE_BAUD (1843200/16) -static unsigned int probe_baud(int port) -{ - unsigned char lcr, dll, dlh; - unsigned int quot; - - lcr = inb(port + LCR); - outb(lcr | DLAB, port + LCR); - dll = inb(port + DLL); - dlh = inb(port + DLH); - outb(lcr, port + LCR); - quot = (dlh << 8) | dll; - - return BASE_BAUD / quot; -} - -static void parse_console_uart8250(void) -{ - char optstr[64], *options; - int baud = DEFAULT_BAUD; - int port = 0; - - /* - * console=uart8250,io,0x3f8,115200n8 - * need to make sure it is last one console ! - */ - if (cmdline_find_option("console", optstr, sizeof optstr) <= 0) - return; - - options = optstr; - - if (!strncmp(options, "uart8250,io,", 12)) - port = simple_strtoull(options + 12, &options, 0); - else if (!strncmp(options, "uart,io,", 8)) - port = simple_strtoull(options + 8, &options, 0); - else - return; - - if (options && (options[0] == ',')) - baud = simple_strtoull(options + 1, &options, 0); - else - baud = probe_baud(port); - - if (port) - early_serial_init(port, baud); -} - -void console_init(void) -{ - parse_earlyprintk(); - - if (!early_serial_base) - parse_console_uart8250(); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/edd.c b/ANDROID_3.4.5/arch/x86/boot/edd.c deleted file mode 100644 index c501a5b4..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/edd.c +++ /dev/null @@ -1,181 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Get EDD BIOS disk information - */ - -#include "boot.h" -#include <linux/edd.h> - -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) - -/* - * Read the MBR (first sector) from a specific device. - */ -static int read_mbr(u8 devno, void *buf) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ax = 0x0201; /* Legacy Read, one sector */ - ireg.cx = 0x0001; /* Sector 0-0-1 */ - ireg.dl = devno; - ireg.bx = (size_t)buf; - - intcall(0x13, &ireg, &oreg); - - return -(oreg.eflags & X86_EFLAGS_CF); /* 0 or -1 */ -} - -static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig) -{ - int sector_size; - char *mbrbuf_ptr, *mbrbuf_end; - u32 buf_base, mbr_base; - extern char _end[]; - u16 mbr_magic; - - sector_size = ei->params.bytes_per_sector; - if (!sector_size) - sector_size = 512; /* Best available guess */ - - /* Produce a naturally aligned buffer on the heap */ - buf_base = (ds() << 4) + (u32)&_end; - mbr_base = (buf_base+sector_size-1) & ~(sector_size-1); - mbrbuf_ptr = _end + (mbr_base-buf_base); - mbrbuf_end = mbrbuf_ptr + sector_size; - - /* Make sure we actually have space on the heap... */ - if (!(boot_params.hdr.loadflags & CAN_USE_HEAP)) - return -1; - if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr) - return -1; - - memset(mbrbuf_ptr, 0, sector_size); - if (read_mbr(devno, mbrbuf_ptr)) - return -1; - - *mbrsig = *(u32 *)&mbrbuf_ptr[EDD_MBR_SIG_OFFSET]; - mbr_magic = *(u16 *)&mbrbuf_ptr[510]; - - /* check for valid MBR magic */ - return mbr_magic == 0xAA55 ? 0 : -1; -} - -static int get_edd_info(u8 devno, struct edd_info *ei) -{ - struct biosregs ireg, oreg; - - memset(ei, 0, sizeof *ei); - - /* Check Extensions Present */ - - initregs(&ireg); - ireg.ah = 0x41; - ireg.bx = EDDMAGIC1; - ireg.dl = devno; - intcall(0x13, &ireg, &oreg); - - if (oreg.eflags & X86_EFLAGS_CF) - return -1; /* No extended information */ - - if (oreg.bx != EDDMAGIC2) - return -1; - - ei->device = devno; - ei->version = oreg.ah; /* EDD version number */ - ei->interface_support = oreg.cx; /* EDD functionality subsets */ - - /* Extended Get Device Parameters */ - - ei->params.length = sizeof(ei->params); - ireg.ah = 0x48; - ireg.si = (size_t)&ei->params; - intcall(0x13, &ireg, &oreg); - - /* Get legacy CHS parameters */ - - /* Ralf Brown recommends setting ES:DI to 0:0 */ - ireg.ah = 0x08; - ireg.es = 0; - intcall(0x13, &ireg, &oreg); - - if (!(oreg.eflags & X86_EFLAGS_CF)) { - ei->legacy_max_cylinder = oreg.ch + ((oreg.cl & 0xc0) << 2); - ei->legacy_max_head = oreg.dh; - ei->legacy_sectors_per_track = oreg.cl & 0x3f; - } - - return 0; -} - -void query_edd(void) -{ - char eddarg[8]; - int do_mbr = 1; -#ifdef CONFIG_EDD_OFF - int do_edd = 0; -#else - int do_edd = 1; -#endif - int be_quiet; - int devno; - struct edd_info ei, *edp; - u32 *mbrptr; - - if (cmdline_find_option("edd", eddarg, sizeof eddarg) > 0) { - if (!strcmp(eddarg, "skipmbr") || !strcmp(eddarg, "skip")) { - do_edd = 1; - do_mbr = 0; - } - else if (!strcmp(eddarg, "off")) - do_edd = 0; - else if (!strcmp(eddarg, "on")) - do_edd = 1; - } - - be_quiet = cmdline_find_option_bool("quiet"); - - edp = boot_params.eddbuf; - mbrptr = boot_params.edd_mbr_sig_buffer; - - if (!do_edd) - return; - - /* Bugs in OnBoard or AddOnCards Bios may hang the EDD probe, - * so give a hint if this happens. - */ - - if (!be_quiet) - printf("Probing EDD (edd=off to disable)... "); - - for (devno = 0x80; devno < 0x80+EDD_MBR_SIG_MAX; devno++) { - /* - * Scan the BIOS-supported hard disks and query EDD - * information... - */ - if (!get_edd_info(devno, &ei) - && boot_params.eddbuf_entries < EDDMAXNR) { - memcpy(edp, &ei, sizeof ei); - edp++; - boot_params.eddbuf_entries++; - } - - if (do_mbr && !read_mbr_sig(devno, &ei, mbrptr++)) - boot_params.edd_mbr_sig_buf_entries = devno-0x80+1; - } - - if (!be_quiet) - printf("ok\n"); -} - -#endif diff --git a/ANDROID_3.4.5/arch/x86/boot/header.S b/ANDROID_3.4.5/arch/x86/boot/header.S deleted file mode 100644 index f1bbeeb0..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/header.S +++ /dev/null @@ -1,478 +0,0 @@ -/* - * header.S - * - * Copyright (C) 1991, 1992 Linus Torvalds - * - * Based on bootsect.S and setup.S - * modified by more people than can be counted - * - * Rewritten as a common file by H. Peter Anvin (Apr 2007) - * - * BIG FAT NOTE: We're in real mode using 64k segments. Therefore segment - * addresses must be multiplied by 16 to obtain their respective linear - * addresses. To avoid confusion, linear addresses are written using leading - * hex while segment addresses are written as segment:offset. - * - */ - -#include <asm/segment.h> -#include <generated/utsrelease.h> -#include <asm/boot.h> -#include <asm/e820.h> -#include <asm/page_types.h> -#include <asm/setup.h> -#include "boot.h" -#include "voffset.h" -#include "zoffset.h" - -BOOTSEG = 0x07C0 /* original address of boot-sector */ -SYSSEG = 0x1000 /* historical load address >> 4 */ - -#ifndef SVGA_MODE -#define SVGA_MODE ASK_VGA -#endif - -#ifndef RAMDISK -#define RAMDISK 0 -#endif - -#ifndef ROOT_RDONLY -#define ROOT_RDONLY 1 -#endif - - .code16 - .section ".bstext", "ax" - - .global bootsect_start -bootsect_start: -#ifdef CONFIG_EFI_STUB - # "MZ", MS-DOS header - .byte 0x4d - .byte 0x5a -#endif - - # Normalize the start address - ljmp $BOOTSEG, $start2 - -start2: - movw %cs, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %ss - xorw %sp, %sp - sti - cld - - movw $bugger_off_msg, %si - -msg_loop: - lodsb - andb %al, %al - jz bs_die - movb $0xe, %ah - movw $7, %bx - int $0x10 - jmp msg_loop - -bs_die: - # Allow the user to press a key, then reboot - xorw %ax, %ax - int $0x16 - int $0x19 - - # int 0x19 should never return. In case it does anyway, - # invoke the BIOS reset code... - ljmp $0xf000,$0xfff0 - -#ifdef CONFIG_EFI_STUB - .org 0x3c - # - # Offset to the PE header. - # - .long pe_header -#endif /* CONFIG_EFI_STUB */ - - .section ".bsdata", "a" -bugger_off_msg: - .ascii "Direct booting from floppy is no longer supported.\r\n" - .ascii "Please use a boot loader program instead.\r\n" - .ascii "\n" - .ascii "Remove disk and press any key to reboot . . .\r\n" - .byte 0 - -#ifdef CONFIG_EFI_STUB -pe_header: - .ascii "PE" - .word 0 - -coff_header: -#ifdef CONFIG_X86_32 - .word 0x14c # i386 -#else - .word 0x8664 # x86-64 -#endif - .word 2 # nr_sections - .long 0 # TimeDateStamp - .long 0 # PointerToSymbolTable - .long 1 # NumberOfSymbols - .word section_table - optional_header # SizeOfOptionalHeader -#ifdef CONFIG_X86_32 - .word 0x306 # Characteristics. - # IMAGE_FILE_32BIT_MACHINE | - # IMAGE_FILE_DEBUG_STRIPPED | - # IMAGE_FILE_EXECUTABLE_IMAGE | - # IMAGE_FILE_LINE_NUMS_STRIPPED -#else - .word 0x206 # Characteristics - # IMAGE_FILE_DEBUG_STRIPPED | - # IMAGE_FILE_EXECUTABLE_IMAGE | - # IMAGE_FILE_LINE_NUMS_STRIPPED -#endif - -optional_header: -#ifdef CONFIG_X86_32 - .word 0x10b # PE32 format -#else - .word 0x20b # PE32+ format -#endif - .byte 0x02 # MajorLinkerVersion - .byte 0x14 # MinorLinkerVersion - - # Filled in by build.c - .long 0 # SizeOfCode - - .long 0 # SizeOfInitializedData - .long 0 # SizeOfUninitializedData - - # Filled in by build.c - .long 0x0000 # AddressOfEntryPoint - - .long 0x0000 # BaseOfCode -#ifdef CONFIG_X86_32 - .long 0 # data -#endif - -extra_header_fields: -#ifdef CONFIG_X86_32 - .long 0 # ImageBase -#else - .quad 0 # ImageBase -#endif - .long 0x1000 # SectionAlignment - .long 0x200 # FileAlignment - .word 0 # MajorOperatingSystemVersion - .word 0 # MinorOperatingSystemVersion - .word 0 # MajorImageVersion - .word 0 # MinorImageVersion - .word 0 # MajorSubsystemVersion - .word 0 # MinorSubsystemVersion - .long 0 # Win32VersionValue - - # - # The size of the bzImage is written in tools/build.c - # - .long 0 # SizeOfImage - - .long 0x200 # SizeOfHeaders - .long 0 # CheckSum - .word 0xa # Subsystem (EFI application) - .word 0 # DllCharacteristics -#ifdef CONFIG_X86_32 - .long 0 # SizeOfStackReserve - .long 0 # SizeOfStackCommit - .long 0 # SizeOfHeapReserve - .long 0 # SizeOfHeapCommit -#else - .quad 0 # SizeOfStackReserve - .quad 0 # SizeOfStackCommit - .quad 0 # SizeOfHeapReserve - .quad 0 # SizeOfHeapCommit -#endif - .long 0 # LoaderFlags - .long 0x1 # NumberOfRvaAndSizes - - .quad 0 # ExportTable - .quad 0 # ImportTable - .quad 0 # ResourceTable - .quad 0 # ExceptionTable - .quad 0 # CertificationTable - .quad 0 # BaseRelocationTable - - # Section table -section_table: - .ascii ".text" - .byte 0 - .byte 0 - .byte 0 - .long 0 - .long 0x0 # startup_{32,64} - .long 0 # Size of initialized data - # on disk - .long 0x0 # startup_{32,64} - .long 0 # PointerToRelocations - .long 0 # PointerToLineNumbers - .word 0 # NumberOfRelocations - .word 0 # NumberOfLineNumbers - .long 0x60500020 # Characteristics (section flags) - - # - # The EFI application loader requires a relocation section - # because EFI applications are relocatable and not having - # this section seems to confuse it. But since we don't need - # the loader to fixup any relocs for us just fill it with a - # single dummy reloc. - # - .ascii ".reloc" - .byte 0 - .byte 0 - .long reloc_end - reloc_start - .long reloc_start - .long reloc_end - reloc_start # SizeOfRawData - .long reloc_start # PointerToRawData - .long 0 # PointerToRelocations - .long 0 # PointerToLineNumbers - .word 0 # NumberOfRelocations - .word 0 # NumberOfLineNumbers - .long 0x42100040 # Characteristics (section flags) -#endif /* CONFIG_EFI_STUB */ - - # Kernel attributes; used by setup. This is part 1 of the - # header, from the old boot sector. - - .section ".header", "a" - .globl hdr -hdr: -setup_sects: .byte 0 /* Filled in by build.c */ -root_flags: .word ROOT_RDONLY -syssize: .long 0 /* Filled in by build.c */ -ram_size: .word 0 /* Obsolete */ -vid_mode: .word SVGA_MODE -root_dev: .word 0 /* Filled in by build.c */ -boot_flag: .word 0xAA55 - - # offset 512, entry point - - .globl _start -_start: - # Explicitly enter this as bytes, or the assembler - # tries to generate a 3-byte jump here, which causes - # everything else to push off to the wrong offset. - .byte 0xeb # short (2-byte) jump - .byte start_of_setup-1f -1: - - # Part 2 of the header, from the old setup.S - - .ascii "HdrS" # header signature - .word 0x020a # header version number (>= 0x0105) - # or else old loadlin-1.5 will fail) - .globl realmode_swtch -realmode_swtch: .word 0, 0 # default_switch, SETUPSEG -start_sys_seg: .word SYSSEG # obsolete and meaningless, but just - # in case something decided to "use" it - .word kernel_version-512 # pointing to kernel version string - # above section of header is compatible - # with loadlin-1.5 (header v1.5). Don't - # change it. - -type_of_loader: .byte 0 # 0 means ancient bootloader, newer - # bootloaders know to change this. - # See Documentation/x86/boot.txt for - # assigned ids - -# flags, unused bits must be zero (RFU) bit within loadflags -loadflags: -LOADED_HIGH = 1 # If set, the kernel is loaded high -CAN_USE_HEAP = 0x80 # If set, the loader also has set - # heap_end_ptr to tell how much - # space behind setup.S can be used for - # heap purposes. - # Only the loader knows what is free - .byte LOADED_HIGH - -setup_move_size: .word 0x8000 # size to move, when setup is not - # loaded at 0x90000. We will move setup - # to 0x90000 then just before jumping - # into the kernel. However, only the - # loader knows how much data behind - # us also needs to be loaded. - -code32_start: # here loaders can put a different - # start address for 32-bit code. - .long 0x100000 # 0x100000 = default for big kernel - -ramdisk_image: .long 0 # address of loaded ramdisk image - # Here the loader puts the 32-bit - # address where it loaded the image. - # This only will be read by the kernel. - -ramdisk_size: .long 0 # its size in bytes - -bootsect_kludge: - .long 0 # obsolete - -heap_end_ptr: .word _end+STACK_SIZE-512 - # (Header version 0x0201 or later) - # space from here (exclusive) down to - # end of setup code can be used by setup - # for local heap purposes. - -ext_loader_ver: - .byte 0 # Extended boot loader version -ext_loader_type: - .byte 0 # Extended boot loader type - -cmd_line_ptr: .long 0 # (Header version 0x0202 or later) - # If nonzero, a 32-bit pointer - # to the kernel command line. - # The command line should be - # located between the start of - # setup and the end of low - # memory (0xa0000), or it may - # get overwritten before it - # gets read. If this field is - # used, there is no longer - # anything magical about the - # 0x90000 segment; the setup - # can be located anywhere in - # low memory 0x10000 or higher. - -ramdisk_max: .long 0x7fffffff - # (Header version 0x0203 or later) - # The highest safe address for - # the contents of an initrd - # The current kernel allows up to 4 GB, - # but leave it at 2 GB to avoid - # possible bootloader bugs. - -kernel_alignment: .long CONFIG_PHYSICAL_ALIGN #physical addr alignment - #required for protected mode - #kernel -#ifdef CONFIG_RELOCATABLE -relocatable_kernel: .byte 1 -#else -relocatable_kernel: .byte 0 -#endif -min_alignment: .byte MIN_KERNEL_ALIGN_LG2 # minimum alignment -pad3: .word 0 - -cmdline_size: .long COMMAND_LINE_SIZE-1 #length of the command line, - #added with boot protocol - #version 2.06 - -hardware_subarch: .long 0 # subarchitecture, added with 2.07 - # default to 0 for normal x86 PC - -hardware_subarch_data: .quad 0 - -payload_offset: .long ZO_input_data -payload_length: .long ZO_z_input_len - -setup_data: .quad 0 # 64-bit physical pointer to - # single linked list of - # struct setup_data - -pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr - -#define ZO_INIT_SIZE (ZO__end - ZO_startup_32 + ZO_z_extract_offset) -#define VO_INIT_SIZE (VO__end - VO__text) -#if ZO_INIT_SIZE > VO_INIT_SIZE -#define INIT_SIZE ZO_INIT_SIZE -#else -#define INIT_SIZE VO_INIT_SIZE -#endif -init_size: .long INIT_SIZE # kernel initialization size - -# End of setup header ##################################################### - - .section ".entrytext", "ax" -start_of_setup: -#ifdef SAFE_RESET_DISK_CONTROLLER -# Reset the disk controller. - movw $0x0000, %ax # Reset disk controller - movb $0x80, %dl # All disks - int $0x13 -#endif - -# Force %es = %ds - movw %ds, %ax - movw %ax, %es - cld - -# Apparently some ancient versions of LILO invoked the kernel with %ss != %ds, -# which happened to work by accident for the old code. Recalculate the stack -# pointer if %ss is invalid. Otherwise leave it alone, LOADLIN sets up the -# stack behind its own code, so we can't blindly put it directly past the heap. - - movw %ss, %dx - cmpw %ax, %dx # %ds == %ss? - movw %sp, %dx - je 2f # -> assume %sp is reasonably set - - # Invalid %ss, make up a new stack - movw $_end, %dx - testb $CAN_USE_HEAP, loadflags - jz 1f - movw heap_end_ptr, %dx -1: addw $STACK_SIZE, %dx - jnc 2f - xorw %dx, %dx # Prevent wraparound - -2: # Now %dx should point to the end of our stack space - andw $~3, %dx # dword align (might as well...) - jnz 3f - movw $0xfffc, %dx # Make sure we're not zero -3: movw %ax, %ss - movzwl %dx, %esp # Clear upper half of %esp - sti # Now we should have a working stack - -# We will have entered with %cs = %ds+0x20, normalize %cs so -# it is on par with the other segments. - pushw %ds - pushw $6f - lretw -6: - -# Check signature at end of setup - cmpl $0x5a5aaa55, setup_sig - jne setup_bad - -# Zero the bss - movw $__bss_start, %di - movw $_end+3, %cx - xorl %eax, %eax - subw %di, %cx - shrw $2, %cx - rep; stosl - -# Jump to C code (should not return) - calll main - -# Setup corrupt somehow... -setup_bad: - movl $setup_corrupt, %eax - calll puts - # Fall through... - - .globl die - .type die, @function -die: - hlt - jmp die - - .size die, .-die - - .section ".initdata", "a" -setup_corrupt: - .byte 7 - .string "No setup signature found...\n" - - .data -dummy: .long 0 - - .section .reloc -reloc_start: - .long dummy - reloc_start - .long 10 - .word 0 -reloc_end: diff --git a/ANDROID_3.4.5/arch/x86/boot/install.sh b/ANDROID_3.4.5/arch/x86/boot/install.sh deleted file mode 100644 index d13ec1c3..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/install.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -# -# This file is subject to the terms and conditions of the GNU General Public -# License. See the file "COPYING" in the main directory of this archive -# for more details. -# -# Copyright (C) 1995 by Linus Torvalds -# -# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin -# -# "make install" script for i386 architecture -# -# Arguments: -# $1 - kernel version -# $2 - kernel image file -# $3 - kernel map file -# $4 - default install path (blank if root directory) -# - -verify () { - if [ ! -f "$1" ]; then - echo "" 1>&2 - echo " *** Missing file: $1" 1>&2 - echo ' *** You need to run "make" before "make install".' 1>&2 - echo "" 1>&2 - exit 1 - fi -} - -# Make sure the files actually exist -verify "$2" -verify "$3" - -# User may have a custom install script - -if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi -if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi - -# Default install - same as make zlilo - -if [ -f $4/vmlinuz ]; then - mv $4/vmlinuz $4/vmlinuz.old -fi - -if [ -f $4/System.map ]; then - mv $4/System.map $4/System.old -fi - -cat $2 > $4/vmlinuz -cp $3 $4/System.map - -if [ -x /sbin/lilo ]; then - /sbin/lilo -elif [ -x /etc/lilo/install ]; then - /etc/lilo/install -else - sync - echo "Cannot find LILO." -fi diff --git a/ANDROID_3.4.5/arch/x86/boot/main.c b/ANDROID_3.4.5/arch/x86/boot/main.c deleted file mode 100644 index 40358c89..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/main.c +++ /dev/null @@ -1,178 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Main module for the real-mode kernel code - */ - -#include "boot.h" - -struct boot_params boot_params __attribute__((aligned(16))); - -char *HEAP = _end; -char *heap_end = _end; /* Default end of heap = no heap */ - -/* - * Copy the header into the boot parameter block. Since this - * screws up the old-style command line protocol, adjust by - * filling in the new-style command line pointer instead. - */ - -static void copy_boot_params(void) -{ - struct old_cmdline { - u16 cl_magic; - u16 cl_offset; - }; - const struct old_cmdline * const oldcmd = - (const struct old_cmdline *)OLD_CL_ADDRESS; - - BUILD_BUG_ON(sizeof boot_params != 4096); - memcpy(&boot_params.hdr, &hdr, sizeof hdr); - - if (!boot_params.hdr.cmd_line_ptr && - oldcmd->cl_magic == OLD_CL_MAGIC) { - /* Old-style command line protocol. */ - u16 cmdline_seg; - - /* Figure out if the command line falls in the region - of memory that an old kernel would have copied up - to 0x90000... */ - if (oldcmd->cl_offset < boot_params.hdr.setup_move_size) - cmdline_seg = ds(); - else - cmdline_seg = 0x9000; - - boot_params.hdr.cmd_line_ptr = - (cmdline_seg << 4) + oldcmd->cl_offset; - } -} - -/* - * Set the keyboard repeat rate to maximum. Unclear why this - * is done here; this might be possible to kill off as stale code. - */ -static void keyboard_set_repeat(void) -{ - struct biosregs ireg; - initregs(&ireg); - ireg.ax = 0x0305; - intcall(0x16, &ireg, NULL); -} - -/* - * Get Intel SpeedStep (IST) information. - */ -static void query_ist(void) -{ - struct biosregs ireg, oreg; - - /* Some older BIOSes apparently crash on this call, so filter - it from machines too old to have SpeedStep at all. */ - if (cpu.level < 6) - return; - - initregs(&ireg); - ireg.ax = 0xe980; /* IST Support */ - ireg.edx = 0x47534943; /* Request value */ - intcall(0x15, &ireg, &oreg); - - boot_params.ist_info.signature = oreg.eax; - boot_params.ist_info.command = oreg.ebx; - boot_params.ist_info.event = oreg.ecx; - boot_params.ist_info.perf_level = oreg.edx; -} - -/* - * Tell the BIOS what CPU mode we intend to run in. - */ -static void set_bios_mode(void) -{ -#ifdef CONFIG_X86_64 - struct biosregs ireg; - - initregs(&ireg); - ireg.ax = 0xec00; - ireg.bx = 2; - intcall(0x15, &ireg, NULL); -#endif -} - -static void init_heap(void) -{ - char *stack_end; - - if (boot_params.hdr.loadflags & CAN_USE_HEAP) { - asm("leal %P1(%%esp),%0" - : "=r" (stack_end) : "i" (-STACK_SIZE)); - - heap_end = (char *) - ((size_t)boot_params.hdr.heap_end_ptr + 0x200); - if (heap_end > stack_end) - heap_end = stack_end; - } else { - /* Boot protocol 2.00 only, no heap available */ - puts("WARNING: Ancient bootloader, some functionality " - "may be limited!\n"); - } -} - -void main(void) -{ - /* First, copy the boot header into the "zeropage" */ - copy_boot_params(); - - /* Initialize the early-boot console */ - console_init(); - if (cmdline_find_option_bool("debug")) - puts("early console in setup code\n"); - - /* End of heap check */ - init_heap(); - - /* Make sure we have all the proper CPU support */ - if (validate_cpu()) { - puts("Unable to boot - please use a kernel appropriate " - "for your CPU.\n"); - die(); - } - - /* Tell the BIOS what CPU mode we intend to run in. */ - set_bios_mode(); - - /* Detect memory layout */ - detect_memory(); - - /* Set keyboard repeat rate (why?) */ - keyboard_set_repeat(); - - /* Query MCA information */ - query_mca(); - - /* Query Intel SpeedStep (IST) information */ - query_ist(); - - /* Query APM information */ -#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE) - query_apm_bios(); -#endif - - /* Query EDD information */ -#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) - query_edd(); -#endif - - /* Set the video mode */ - set_video(); - - /* Do the last things and invoke protected mode */ - go_to_protected_mode(); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/mca.c b/ANDROID_3.4.5/arch/x86/boot/mca.c deleted file mode 100644 index a95a5311..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/mca.c +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Get the MCA system description table - */ - -#include "boot.h" - -int query_mca(void) -{ - struct biosregs ireg, oreg; - u16 len; - - initregs(&ireg); - ireg.ah = 0xc0; - intcall(0x15, &ireg, &oreg); - - if (oreg.eflags & X86_EFLAGS_CF) - return -1; /* No MCA present */ - - set_fs(oreg.es); - len = rdfs16(oreg.bx); - - if (len > sizeof(boot_params.sys_desc_table)) - len = sizeof(boot_params.sys_desc_table); - - copy_from_fs(&boot_params.sys_desc_table, oreg.bx, len); - return 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/memory.c b/ANDROID_3.4.5/arch/x86/boot/memory.c deleted file mode 100644 index db75d07c..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/memory.c +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Memory detection code - */ - -#include "boot.h" - -#define SMAP 0x534d4150 /* ASCII "SMAP" */ - -static int detect_memory_e820(void) -{ - int count = 0; - struct biosregs ireg, oreg; - struct e820entry *desc = boot_params.e820_map; - static struct e820entry buf; /* static so it is zeroed */ - - initregs(&ireg); - ireg.ax = 0xe820; - ireg.cx = sizeof buf; - ireg.edx = SMAP; - ireg.di = (size_t)&buf; - - /* - * Note: at least one BIOS is known which assumes that the - * buffer pointed to by one e820 call is the same one as - * the previous call, and only changes modified fields. Therefore, - * we use a temporary buffer and copy the results entry by entry. - * - * This routine deliberately does not try to account for - * ACPI 3+ extended attributes. This is because there are - * BIOSes in the field which report zero for the valid bit for - * all ranges, and we don't currently make any use of the - * other attribute bits. Revisit this if we see the extended - * attribute bits deployed in a meaningful way in the future. - */ - - do { - intcall(0x15, &ireg, &oreg); - ireg.ebx = oreg.ebx; /* for next iteration... */ - - /* BIOSes which terminate the chain with CF = 1 as opposed - to %ebx = 0 don't always report the SMAP signature on - the final, failing, probe. */ - if (oreg.eflags & X86_EFLAGS_CF) - break; - - /* Some BIOSes stop returning SMAP in the middle of - the search loop. We don't know exactly how the BIOS - screwed up the map at that point, we might have a - partial map, the full map, or complete garbage, so - just return failure. */ - if (oreg.eax != SMAP) { - count = 0; - break; - } - - *desc++ = buf; - count++; - } while (ireg.ebx && count < ARRAY_SIZE(boot_params.e820_map)); - - return boot_params.e820_entries = count; -} - -static int detect_memory_e801(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ax = 0xe801; - intcall(0x15, &ireg, &oreg); - - if (oreg.eflags & X86_EFLAGS_CF) - return -1; - - /* Do we really need to do this? */ - if (oreg.cx || oreg.dx) { - oreg.ax = oreg.cx; - oreg.bx = oreg.dx; - } - - if (oreg.ax > 15*1024) { - return -1; /* Bogus! */ - } else if (oreg.ax == 15*1024) { - boot_params.alt_mem_k = (oreg.bx << 6) + oreg.ax; - } else { - /* - * This ignores memory above 16MB if we have a memory - * hole there. If someone actually finds a machine - * with a memory hole at 16MB and no support for - * 0E820h they should probably generate a fake e820 - * map. - */ - boot_params.alt_mem_k = oreg.ax; - } - - return 0; -} - -static int detect_memory_88(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ah = 0x88; - intcall(0x15, &ireg, &oreg); - - boot_params.screen_info.ext_mem_k = oreg.ax; - - return -(oreg.eflags & X86_EFLAGS_CF); /* 0 or -1 */ -} - -int detect_memory(void) -{ - int err = -1; - - if (detect_memory_e820() > 0) - err = 0; - - if (!detect_memory_e801()) - err = 0; - - if (!detect_memory_88()) - err = 0; - - return err; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/mkcpustr.c b/ANDROID_3.4.5/arch/x86/boot/mkcpustr.c deleted file mode 100644 index 919257f5..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/mkcpustr.c +++ /dev/null @@ -1,49 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright 2008 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2 or (at your - * option) any later version; incorporated herein by reference. - * - * ----------------------------------------------------------------------- */ - -/* - * This is a host program to preprocess the CPU strings into a - * compact format suitable for the setup code. - */ - -#include <stdio.h> - -#include "../kernel/cpu/capflags.c" - -int main(void) -{ - int i, j; - const char *str; - - printf("static const char x86_cap_strs[] =\n"); - - for (i = 0; i < NCAPINTS; i++) { - for (j = 0; j < 32; j++) { - str = x86_cap_flags[i*32+j]; - - if (i == NCAPINTS-1 && j == 31) { - /* The last entry must be unconditional; this - also consumes the compiler-added null - character */ - if (!str) - str = ""; - printf("\t\"\\x%02x\\x%02x\"\"%s\"\n", - i, j, str); - } else if (str) { - printf("#if REQUIRED_MASK%d & (1 << %d)\n" - "\t\"\\x%02x\\x%02x\"\"%s\\0\"\n" - "#endif\n", - i, j, i, j, str); - } - } - } - printf("\t;\n"); - return 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/mtools.conf.in b/ANDROID_3.4.5/arch/x86/boot/mtools.conf.in deleted file mode 100644 index efd6d249..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/mtools.conf.in +++ /dev/null @@ -1,17 +0,0 @@ -# -# mtools configuration file for "make (b)zdisk" -# - -# Actual floppy drive -drive a: - file="/dev/fd0" - -# 1.44 MB floppy disk image -drive v: - file="@OBJ@/fdimage" cylinders=80 heads=2 sectors=18 filter - -# 2.88 MB floppy disk image (mostly for virtual uses) -drive w: - file="@OBJ@/fdimage" cylinders=80 heads=2 sectors=36 filter - - diff --git a/ANDROID_3.4.5/arch/x86/boot/pm.c b/ANDROID_3.4.5/arch/x86/boot/pm.c deleted file mode 100644 index 8062f891..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/pm.c +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Prepare the machine for transition to protected mode. - */ - -#include "boot.h" -#include <asm/segment.h> - -/* - * Invoke the realmode switch hook if present; otherwise - * disable all interrupts. - */ -static void realmode_switch_hook(void) -{ - if (boot_params.hdr.realmode_swtch) { - asm volatile("lcallw *%0" - : : "m" (boot_params.hdr.realmode_swtch) - : "eax", "ebx", "ecx", "edx"); - } else { - asm volatile("cli"); - outb(0x80, 0x70); /* Disable NMI */ - io_delay(); - } -} - -/* - * Disable all interrupts at the legacy PIC. - */ -static void mask_all_interrupts(void) -{ - outb(0xff, 0xa1); /* Mask all interrupts on the secondary PIC */ - io_delay(); - outb(0xfb, 0x21); /* Mask all but cascade on the primary PIC */ - io_delay(); -} - -/* - * Reset IGNNE# if asserted in the FPU. - */ -static void reset_coprocessor(void) -{ - outb(0, 0xf0); - io_delay(); - outb(0, 0xf1); - io_delay(); -} - -/* - * Set up the GDT - */ - -struct gdt_ptr { - u16 len; - u32 ptr; -} __attribute__((packed)); - -static void setup_gdt(void) -{ - /* There are machines which are known to not boot with the GDT - being 8-byte unaligned. Intel recommends 16 byte alignment. */ - static const u64 boot_gdt[] __attribute__((aligned(16))) = { - /* CS: code, read/execute, 4 GB, base 0 */ - [GDT_ENTRY_BOOT_CS] = GDT_ENTRY(0xc09b, 0, 0xfffff), - /* DS: data, read/write, 4 GB, base 0 */ - [GDT_ENTRY_BOOT_DS] = GDT_ENTRY(0xc093, 0, 0xfffff), - /* TSS: 32-bit tss, 104 bytes, base 4096 */ - /* We only have a TSS here to keep Intel VT happy; - we don't actually use it for anything. */ - [GDT_ENTRY_BOOT_TSS] = GDT_ENTRY(0x0089, 4096, 103), - }; - /* Xen HVM incorrectly stores a pointer to the gdt_ptr, instead - of the gdt_ptr contents. Thus, make it static so it will - stay in memory, at least long enough that we switch to the - proper kernel GDT. */ - static struct gdt_ptr gdt; - - gdt.len = sizeof(boot_gdt)-1; - gdt.ptr = (u32)&boot_gdt + (ds() << 4); - - asm volatile("lgdtl %0" : : "m" (gdt)); -} - -/* - * Set up the IDT - */ -static void setup_idt(void) -{ - static const struct gdt_ptr null_idt = {0, 0}; - asm volatile("lidtl %0" : : "m" (null_idt)); -} - -/* - * Actual invocation sequence - */ -void go_to_protected_mode(void) -{ - /* Hook before leaving real mode, also disables interrupts */ - realmode_switch_hook(); - - /* Enable the A20 gate */ - if (enable_a20()) { - puts("A20 gate not responding, unable to boot...\n"); - die(); - } - - /* Reset coprocessor (IGNNE#) */ - reset_coprocessor(); - - /* Mask all interrupts in the PIC */ - mask_all_interrupts(); - - /* Actual transition to protected mode... */ - setup_idt(); - setup_gdt(); - protected_mode_jump(boot_params.hdr.code32_start, - (u32)&boot_params + (ds() << 4)); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/pmjump.S b/ANDROID_3.4.5/arch/x86/boot/pmjump.S deleted file mode 100644 index 3e0edc6d..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/pmjump.S +++ /dev/null @@ -1,77 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * The actual transition into protected mode - */ - -#include <asm/boot.h> -#include <asm/processor-flags.h> -#include <asm/segment.h> -#include <linux/linkage.h> - - .text - .code16 - -/* - * void protected_mode_jump(u32 entrypoint, u32 bootparams); - */ -GLOBAL(protected_mode_jump) - movl %edx, %esi # Pointer to boot_params table - - xorl %ebx, %ebx - movw %cs, %bx - shll $4, %ebx - addl %ebx, 2f - jmp 1f # Short jump to serialize on 386/486 -1: - - movw $__BOOT_DS, %cx - movw $__BOOT_TSS, %di - - movl %cr0, %edx - orb $X86_CR0_PE, %dl # Protected mode - movl %edx, %cr0 - - # Transition to 32-bit mode - .byte 0x66, 0xea # ljmpl opcode -2: .long in_pm32 # offset - .word __BOOT_CS # segment -ENDPROC(protected_mode_jump) - - .code32 - .section ".text32","ax" -GLOBAL(in_pm32) - # Set up data segments for flat 32-bit mode - movl %ecx, %ds - movl %ecx, %es - movl %ecx, %fs - movl %ecx, %gs - movl %ecx, %ss - # The 32-bit code sets up its own stack, but this way we do have - # a valid stack if some debugging hack wants to use it. - addl %ebx, %esp - - # Set up TR to make Intel VT happy - ltr %di - - # Clear registers to allow for future extensions to the - # 32-bit boot protocol - xorl %ecx, %ecx - xorl %edx, %edx - xorl %ebx, %ebx - xorl %ebp, %ebp - xorl %edi, %edi - - # Set up LDTR to make Intel VT happy - lldt %cx - - jmpl *%eax # Jump to the 32-bit entrypoint -ENDPROC(in_pm32) diff --git a/ANDROID_3.4.5/arch/x86/boot/printf.c b/ANDROID_3.4.5/arch/x86/boot/printf.c deleted file mode 100644 index cdac91ca..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/printf.c +++ /dev/null @@ -1,309 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Oh, it's a waste of space, but oh-so-yummy for debugging. This - * version of printf() does not include 64-bit support. "Live with - * it." - * - */ - -#include "boot.h" - -static int skip_atoi(const char **s) -{ - int i = 0; - - while (isdigit(**s)) - i = i * 10 + *((*s)++) - '0'; - return i; -} - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SMALL 32 /* Must be 32 == 0x20 */ -#define SPECIAL 64 /* 0x */ - -#define __do_div(n, base) ({ \ -int __res; \ -__res = ((unsigned long) n) % (unsigned) base; \ -n = ((unsigned long) n) / (unsigned) base; \ -__res; }) - -static char *number(char *str, long num, int base, int size, int precision, - int type) -{ - /* we are called with base 8, 10 or 16, only, thus don't need "G..." */ - static const char digits[16] = "0123456789ABCDEF"; /* "GHIJKLMNOPQRSTUVWXYZ"; */ - - char tmp[66]; - char c, sign, locase; - int i; - - /* locase = 0 or 0x20. ORing digits or letters with 'locase' - * produces same digits or (maybe lowercased) letters */ - locase = (type & SMALL); - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return NULL; - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = '-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++] = '0'; - else - while (num != 0) - tmp[i++] = (digits[__do_div(num, base)] | locase); - if (i > precision) - precision = i; - size -= precision; - if (!(type & (ZEROPAD + LEFT))) - while (size-- > 0) - *str++ = ' '; - if (sign) - *str++ = sign; - if (type & SPECIAL) { - if (base == 8) - *str++ = '0'; - else if (base == 16) { - *str++ = '0'; - *str++ = ('X' | locase); - } - } - if (!(type & LEFT)) - while (size-- > 0) - *str++ = c; - while (i < precision--) - *str++ = '0'; - while (i-- > 0) - *str++ = tmp[i]; - while (size-- > 0) - *str++ = ' '; - return str; -} - -int vsprintf(char *buf, const char *fmt, va_list args) -{ - int len; - unsigned long num; - int i, base; - char *str; - const char *s; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier; /* 'h', 'l', or 'L' for integer fields */ - - for (str = buf; *fmt; ++fmt) { - if (*fmt != '%') { - *str++ = *fmt; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case '-': - flags |= LEFT; - goto repeat; - case '+': - flags |= PLUS; - goto repeat; - case ' ': - flags |= SPACE; - goto repeat; - case '#': - flags |= SPECIAL; - goto repeat; - case '0': - flags |= ZEROPAD; - goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == '.') { - ++fmt; - if (isdigit(*fmt)) - precision = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = -1; - if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { - qualifier = *fmt; - ++fmt; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case 'c': - if (!(flags & LEFT)) - while (--field_width > 0) - *str++ = ' '; - *str++ = (unsigned char)va_arg(args, int); - while (--field_width > 0) - *str++ = ' '; - continue; - - case 's': - s = va_arg(args, char *); - len = strnlen(s, precision); - - if (!(flags & LEFT)) - while (len < field_width--) - *str++ = ' '; - for (i = 0; i < len; ++i) - *str++ = *s++; - while (len < field_width--) - *str++ = ' '; - continue; - - case 'p': - if (field_width == -1) { - field_width = 2 * sizeof(void *); - flags |= ZEROPAD; - } - str = number(str, - (unsigned long)va_arg(args, void *), 16, - field_width, precision, flags); - continue; - - case 'n': - if (qualifier == 'l') { - long *ip = va_arg(args, long *); - *ip = (str - buf); - } else { - int *ip = va_arg(args, int *); - *ip = (str - buf); - } - continue; - - case '%': - *str++ = '%'; - continue; - - /* integer number formats - set up the flags and "break" */ - case 'o': - base = 8; - break; - - case 'x': - flags |= SMALL; - case 'X': - base = 16; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - *str++ = '%'; - if (*fmt) - *str++ = *fmt; - else - --fmt; - continue; - } - if (qualifier == 'l') - num = va_arg(args, unsigned long); - else if (qualifier == 'h') { - num = (unsigned short)va_arg(args, int); - if (flags & SIGN) - num = (short)num; - } else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - str = number(str, num, base, field_width, precision, flags); - } - *str = '\0'; - return str - buf; -} - -int sprintf(char *buf, const char *fmt, ...) -{ - va_list args; - int i; - - va_start(args, fmt); - i = vsprintf(buf, fmt, args); - va_end(args); - return i; -} - -int printf(const char *fmt, ...) -{ - char printf_buf[1024]; - va_list args; - int printed; - - va_start(args, fmt); - printed = vsprintf(printf_buf, fmt, args); - va_end(args); - - puts(printf_buf); - - return printed; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/regs.c b/ANDROID_3.4.5/arch/x86/boot/regs.c deleted file mode 100644 index 958019b1..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/regs.c +++ /dev/null @@ -1,29 +0,0 @@ -/* ----------------------------------------------------------------------- - * - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2 or (at your - * option) any later version; incorporated herein by reference. - * - * ----------------------------------------------------------------------- */ - -/* - * Simple helper function for initializing a register set. - * - * Note that this sets EFLAGS_CF in the input register set; this - * makes it easier to catch functions which do nothing but don't - * explicitly set CF. - */ - -#include "boot.h" - -void initregs(struct biosregs *reg) -{ - memset(reg, 0, sizeof *reg); - reg->eflags |= X86_EFLAGS_CF; - reg->ds = ds(); - reg->es = ds(); - reg->fs = fs(); - reg->gs = gs(); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/setup.ld b/ANDROID_3.4.5/arch/x86/boot/setup.ld deleted file mode 100644 index 03c06836..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/setup.ld +++ /dev/null @@ -1,64 +0,0 @@ -/* - * setup.ld - * - * Linker script for the i386 setup code - */ -OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") -OUTPUT_ARCH(i386) -ENTRY(_start) - -SECTIONS -{ - . = 0; - .bstext : { *(.bstext) } - .bsdata : { *(.bsdata) } - - . = 497; - .header : { *(.header) } - .entrytext : { *(.entrytext) } - .inittext : { *(.inittext) } - .initdata : { *(.initdata) } - __end_init = .; - - .text : { *(.text) } - .text32 : { *(.text32) } - - . = ALIGN(16); - .rodata : { *(.rodata*) } - - .videocards : { - video_cards = .; - *(.videocards) - video_cards_end = .; - } - - . = ALIGN(16); - .data : { *(.data*) } - - .signature : { - setup_sig = .; - LONG(0x5a5aaa55) - } - - - . = ALIGN(16); - .bss : - { - __bss_start = .; - *(.bss) - __bss_end = .; - } - . = ALIGN(16); - _end = .; - - /DISCARD/ : { *(.note*) } - - /* - * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: - */ - . = ASSERT(_end <= 0x8000, "Setup too big!"); - . = ASSERT(hdr == 0x1f1, "The setup header has the wrong offset!"); - /* Necessary for the very-old-loader check to work... */ - . = ASSERT(__end_init <= 5*512, "init sections too big!"); - -} diff --git a/ANDROID_3.4.5/arch/x86/boot/string.c b/ANDROID_3.4.5/arch/x86/boot/string.c deleted file mode 100644 index 574dedfe..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/string.c +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Very basic string functions - */ - -#include "boot.h" - -int strcmp(const char *str1, const char *str2) -{ - const unsigned char *s1 = (const unsigned char *)str1; - const unsigned char *s2 = (const unsigned char *)str2; - int delta = 0; - - while (*s1 || *s2) { - delta = *s2 - *s1; - if (delta) - return delta; - s1++; - s2++; - } - return 0; -} - -int strncmp(const char *cs, const char *ct, size_t count) -{ - unsigned char c1, c2; - - while (count) { - c1 = *cs++; - c2 = *ct++; - if (c1 != c2) - return c1 < c2 ? -1 : 1; - if (!c1) - break; - count--; - } - return 0; -} - -size_t strnlen(const char *s, size_t maxlen) -{ - const char *es = s; - while (*es && maxlen) { - es++; - maxlen--; - } - - return (es - s); -} - -unsigned int atou(const char *s) -{ - unsigned int i = 0; - while (isdigit(*s)) - i = i * 10 + (*s++ - '0'); - return i; -} - -/* Works only for digits and letters, but small and fast */ -#define TOLOWER(x) ((x) | 0x20) - -static unsigned int simple_guess_base(const char *cp) -{ - if (cp[0] == '0') { - if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2])) - return 16; - else - return 8; - } else { - return 10; - } -} - -/** - * simple_strtoull - convert a string to an unsigned long long - * @cp: The start of the string - * @endp: A pointer to the end of the parsed string will be placed here - * @base: The number base to use - */ - -unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) -{ - unsigned long long result = 0; - - if (!base) - base = simple_guess_base(cp); - - if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x') - cp += 2; - - while (isxdigit(*cp)) { - unsigned int value; - - value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10; - if (value >= base) - break; - result = result * base + value; - cp++; - } - if (endp) - *endp = (char *)cp; - - return result; -} - -/** - * strlen - Find the length of a string - * @s: The string to be sized - */ -size_t strlen(const char *s) -{ - const char *sc; - - for (sc = s; *sc != '\0'; ++sc) - /* nothing */; - return sc - s; -} - -/** - * strstr - Find the first substring in a %NUL terminated string - * @s1: The string to be searched - * @s2: The string to search for - */ -char *strstr(const char *s1, const char *s2) -{ - size_t l1, l2; - - l2 = strlen(s2); - if (!l2) - return (char *)s1; - l1 = strlen(s1); - while (l1 >= l2) { - l1--; - if (!memcmp(s1, s2, l2)) - return (char *)s1; - s1++; - } - return NULL; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/tools/build.c b/ANDROID_3.4.5/arch/x86/boot/tools/build.c deleted file mode 100644 index 24443a33..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/tools/build.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright (C) 1997 Martin Mares - * Copyright (C) 2007 H. Peter Anvin - */ - -/* - * This file builds a disk-image from two different files: - * - * - setup: 8086 machine code, sets up system parm - * - system: 80386 code for actual system - * - * It does some checking that all files are of the correct type, and - * just writes the result to stdout, removing headers and padding to - * the right amount. It also writes some system data to stderr. - */ - -/* - * Changes by tytso to allow root device specification - * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 - * Cross compiling fixes by Gertjan van Wingerde, July 1996 - * Rewritten by Martin Mares, April 1997 - * Substantially overhauled by H. Peter Anvin, April 2007 - */ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/mman.h> -#include <tools/le_byteshift.h> - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; - -#define DEFAULT_MAJOR_ROOT 0 -#define DEFAULT_MINOR_ROOT 0 -#define DEFAULT_ROOT_DEV (DEFAULT_MAJOR_ROOT << 8 | DEFAULT_MINOR_ROOT) - -/* Minimal number of setup sectors */ -#define SETUP_SECT_MIN 5 -#define SETUP_SECT_MAX 64 - -/* This must be large enough to hold the entire setup */ -u8 buf[SETUP_SECT_MAX*512]; -int is_big_kernel; - -/*----------------------------------------------------------------------*/ - -static const u32 crctab32[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d -}; - -static u32 partial_crc32_one(u8 c, u32 crc) -{ - return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8); -} - -static u32 partial_crc32(const u8 *s, int len, u32 crc) -{ - while (len--) - crc = partial_crc32_one(*s++, crc); - return crc; -} - -static void die(const char * str, ...) -{ - va_list args; - va_start(args, str); - vfprintf(stderr, str, args); - fputc('\n', stderr); - exit(1); -} - -static void usage(void) -{ - die("Usage: build setup system [> image]"); -} - -int main(int argc, char ** argv) -{ -#ifdef CONFIG_EFI_STUB - unsigned int file_sz, pe_header; -#endif - unsigned int i, sz, setup_sectors; - int c; - u32 sys_size; - struct stat sb; - FILE *file; - int fd; - void *kernel; - u32 crc = 0xffffffffUL; - - if (argc != 3) - usage(); - - /* Copy the setup code */ - file = fopen(argv[1], "r"); - if (!file) - die("Unable to open `%s': %m", argv[1]); - c = fread(buf, 1, sizeof(buf), file); - if (ferror(file)) - die("read-error on `setup'"); - if (c < 1024) - die("The setup must be at least 1024 bytes"); - if (get_unaligned_le16(&buf[510]) != 0xAA55) - die("Boot block hasn't got boot flag (0xAA55)"); - fclose(file); - - /* Pad unused space with zeros */ - setup_sectors = (c + 511) / 512; - if (setup_sectors < SETUP_SECT_MIN) - setup_sectors = SETUP_SECT_MIN; - i = setup_sectors*512; - memset(buf+c, 0, i-c); - - /* Set the default root device */ - put_unaligned_le16(DEFAULT_ROOT_DEV, &buf[508]); - - fprintf(stderr, "Setup is %d bytes (padded to %d bytes).\n", c, i); - - /* Open and stat the kernel file */ - fd = open(argv[2], O_RDONLY); - if (fd < 0) - die("Unable to open `%s': %m", argv[2]); - if (fstat(fd, &sb)) - die("Unable to stat `%s': %m", argv[2]); - sz = sb.st_size; - fprintf (stderr, "System is %d kB\n", (sz+1023)/1024); - kernel = mmap(NULL, sz, PROT_READ, MAP_SHARED, fd, 0); - if (kernel == MAP_FAILED) - die("Unable to mmap '%s': %m", argv[2]); - /* Number of 16-byte paragraphs, including space for a 4-byte CRC */ - sys_size = (sz + 15 + 4) / 16; - - /* Patch the setup code with the appropriate size parameters */ - buf[0x1f1] = setup_sectors-1; - put_unaligned_le32(sys_size, &buf[0x1f4]); - -#ifdef CONFIG_EFI_STUB - file_sz = sz + i + ((sys_size * 16) - sz); - - pe_header = get_unaligned_le32(&buf[0x3c]); - - /* Size of code */ - put_unaligned_le32(file_sz, &buf[pe_header + 0x1c]); - - /* Size of image */ - put_unaligned_le32(file_sz, &buf[pe_header + 0x50]); - -#ifdef CONFIG_X86_32 - /* - * Address of entry point. - * - * The EFI stub entry point is +16 bytes from the start of - * the .text section. - */ - put_unaligned_le32(i + 16, &buf[pe_header + 0x28]); - - /* .text size */ - put_unaligned_le32(file_sz, &buf[pe_header + 0xb0]); - - /* .text size of initialised data */ - put_unaligned_le32(file_sz, &buf[pe_header + 0xb8]); -#else - /* - * Address of entry point. startup_32 is at the beginning and - * the 64-bit entry point (startup_64) is always 512 bytes - * after. The EFI stub entry point is 16 bytes after that, as - * the first instruction allows legacy loaders to jump over - * the EFI stub initialisation - */ - put_unaligned_le32(i + 528, &buf[pe_header + 0x28]); - - /* .text size */ - put_unaligned_le32(file_sz, &buf[pe_header + 0xc0]); - - /* .text size of initialised data */ - put_unaligned_le32(file_sz, &buf[pe_header + 0xc8]); - -#endif /* CONFIG_X86_32 */ -#endif /* CONFIG_EFI_STUB */ - - crc = partial_crc32(buf, i, crc); - if (fwrite(buf, 1, i, stdout) != i) - die("Writing setup failed"); - - /* Copy the kernel code */ - crc = partial_crc32(kernel, sz, crc); - if (fwrite(kernel, 1, sz, stdout) != sz) - die("Writing kernel failed"); - - /* Add padding leaving 4 bytes for the checksum */ - while (sz++ < (sys_size*16) - 4) { - crc = partial_crc32_one('\0', crc); - if (fwrite("\0", 1, 1, stdout) != 1) - die("Writing padding failed"); - } - - /* Write the CRC */ - fprintf(stderr, "CRC %x\n", crc); - put_unaligned_le32(crc, buf); - if (fwrite(buf, 1, 4, stdout) != 4) - die("Writing CRC failed"); - - close(fd); - - /* Everything is OK */ - return 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/tty.c b/ANDROID_3.4.5/arch/x86/boot/tty.c deleted file mode 100644 index def2451f..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/tty.c +++ /dev/null @@ -1,139 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Very simple screen and serial I/O - */ - -#include "boot.h" - -int early_serial_base; - -#define XMTRDY 0x20 - -#define TXR 0 /* Transmit register (WRITE) */ -#define LSR 5 /* Line Status */ - -/* - * These functions are in .inittext so they can be used to signal - * error during initialization. - */ - -static void __attribute__((section(".inittext"))) serial_putchar(int ch) -{ - unsigned timeout = 0xffff; - - while ((inb(early_serial_base + LSR) & XMTRDY) == 0 && --timeout) - cpu_relax(); - - outb(ch, early_serial_base + TXR); -} - -static void __attribute__((section(".inittext"))) bios_putchar(int ch) -{ - struct biosregs ireg; - - initregs(&ireg); - ireg.bx = 0x0007; - ireg.cx = 0x0001; - ireg.ah = 0x0e; - ireg.al = ch; - intcall(0x10, &ireg, NULL); -} - -void __attribute__((section(".inittext"))) putchar(int ch) -{ - if (ch == '\n') - putchar('\r'); /* \n -> \r\n */ - - bios_putchar(ch); - - if (early_serial_base != 0) - serial_putchar(ch); -} - -void __attribute__((section(".inittext"))) puts(const char *str) -{ - while (*str) - putchar(*str++); -} - -/* - * Read the CMOS clock through the BIOS, and return the - * seconds in BCD. - */ - -static u8 gettime(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ah = 0x02; - intcall(0x1a, &ireg, &oreg); - - return oreg.dh; -} - -/* - * Read from the keyboard - */ -int getchar(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - /* ireg.ah = 0x00; */ - intcall(0x16, &ireg, &oreg); - - return oreg.al; -} - -static int kbd_pending(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ah = 0x01; - intcall(0x16, &ireg, &oreg); - - return !(oreg.eflags & X86_EFLAGS_ZF); -} - -void kbd_flush(void) -{ - for (;;) { - if (!kbd_pending()) - break; - getchar(); - } -} - -int getchar_timeout(void) -{ - int cnt = 30; - int t0, t1; - - t0 = gettime(); - - while (cnt) { - if (kbd_pending()) - return getchar(); - - t1 = gettime(); - if (t0 != t1) { - cnt--; - t0 = t1; - } - } - - return 0; /* Timeout! */ -} - diff --git a/ANDROID_3.4.5/arch/x86/boot/version.c b/ANDROID_3.4.5/arch/x86/boot/version.c deleted file mode 100644 index 2b15aa48..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/version.c +++ /dev/null @@ -1,21 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Kernel version string - */ - -#include "boot.h" -#include <generated/utsrelease.h> -#include <generated/compile.h> - -const char kernel_version[] = - UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") " - UTS_VERSION; diff --git a/ANDROID_3.4.5/arch/x86/boot/vesa.h b/ANDROID_3.4.5/arch/x86/boot/vesa.h deleted file mode 100644 index 468e4446..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/vesa.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright 1999-2007 H. Peter Anvin - All Rights Reserved - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, Inc., 53 Temple Place Ste 330, - * Boston MA 02111-1307, USA; either version 2 of the License, or - * (at your option) any later version; incorporated herein by reference. - * - * ----------------------------------------------------------------------- */ - -#ifndef BOOT_VESA_H -#define BOOT_VESA_H - -typedef struct { - u16 off, seg; -} far_ptr; - -/* VESA General Information table */ -struct vesa_general_info { - u32 signature; /* 0 Magic number = "VESA" */ - u16 version; /* 4 */ - far_ptr vendor_string; /* 6 */ - u32 capabilities; /* 10 */ - far_ptr video_mode_ptr; /* 14 */ - u16 total_memory; /* 18 */ - - u8 reserved[236]; /* 20 */ -} __attribute__ ((packed)); - -#define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24)) - -struct vesa_mode_info { - u16 mode_attr; /* 0 */ - u8 win_attr[2]; /* 2 */ - u16 win_grain; /* 4 */ - u16 win_size; /* 6 */ - u16 win_seg[2]; /* 8 */ - far_ptr win_scheme; /* 12 */ - u16 logical_scan; /* 16 */ - - u16 h_res; /* 18 */ - u16 v_res; /* 20 */ - u8 char_width; /* 22 */ - u8 char_height; /* 23 */ - u8 memory_planes; /* 24 */ - u8 bpp; /* 25 */ - u8 banks; /* 26 */ - u8 memory_layout; /* 27 */ - u8 bank_size; /* 28 */ - u8 image_planes; /* 29 */ - u8 page_function; /* 30 */ - - u8 rmask; /* 31 */ - u8 rpos; /* 32 */ - u8 gmask; /* 33 */ - u8 gpos; /* 34 */ - u8 bmask; /* 35 */ - u8 bpos; /* 36 */ - u8 resv_mask; /* 37 */ - u8 resv_pos; /* 38 */ - u8 dcm_info; /* 39 */ - - u32 lfb_ptr; /* 40 Linear frame buffer address */ - u32 offscreen_ptr; /* 44 Offscreen memory address */ - u16 offscreen_size; /* 48 */ - - u8 reserved[206]; /* 50 */ -} __attribute__ ((packed)); - -#endif /* LIB_SYS_VESA_H */ diff --git a/ANDROID_3.4.5/arch/x86/boot/video-bios.c b/ANDROID_3.4.5/arch/x86/boot/video-bios.c deleted file mode 100644 index 49e0c188..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video-bios.c +++ /dev/null @@ -1,128 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Standard video BIOS modes - * - * We have two options for this; silent and scanned. - */ - -#include "boot.h" -#include "video.h" - -static __videocard video_bios; - -/* Set a conventional BIOS mode */ -static int set_bios_mode(u8 mode); - -static int bios_set_mode(struct mode_info *mi) -{ - return set_bios_mode(mi->mode - VIDEO_FIRST_BIOS); -} - -static int set_bios_mode(u8 mode) -{ - struct biosregs ireg, oreg; - u8 new_mode; - - initregs(&ireg); - ireg.al = mode; /* AH=0x00 Set Video Mode */ - intcall(0x10, &ireg, NULL); - - ireg.ah = 0x0f; /* Get Current Video Mode */ - intcall(0x10, &ireg, &oreg); - - do_restore = 1; /* Assume video contents were lost */ - - /* Not all BIOSes are clean with the top bit */ - new_mode = oreg.al & 0x7f; - - if (new_mode == mode) - return 0; /* Mode change OK */ - -#ifndef _WAKEUP - if (new_mode != boot_params.screen_info.orig_video_mode) { - /* Mode setting failed, but we didn't end up where we - started. That's bad. Try to revert to the original - video mode. */ - ireg.ax = boot_params.screen_info.orig_video_mode; - intcall(0x10, &ireg, NULL); - } -#endif - return -1; -} - -static int bios_probe(void) -{ - u8 mode; -#ifdef _WAKEUP - u8 saved_mode = 0x03; -#else - u8 saved_mode = boot_params.screen_info.orig_video_mode; -#endif - u16 crtc; - struct mode_info *mi; - int nmodes = 0; - - if (adapter != ADAPTER_EGA && adapter != ADAPTER_VGA) - return 0; - - set_fs(0); - crtc = vga_crtc(); - - video_bios.modes = GET_HEAP(struct mode_info, 0); - - for (mode = 0x14; mode <= 0x7f; mode++) { - if (!heap_free(sizeof(struct mode_info))) - break; - - if (mode_defined(VIDEO_FIRST_BIOS+mode)) - continue; - - if (set_bios_mode(mode)) - continue; - - /* Try to verify that it's a text mode. */ - - /* Attribute Controller: make graphics controller disabled */ - if (in_idx(0x3c0, 0x10) & 0x01) - continue; - - /* Graphics Controller: verify Alpha addressing enabled */ - if (in_idx(0x3ce, 0x06) & 0x01) - continue; - - /* CRTC cursor location low should be zero(?) */ - if (in_idx(crtc, 0x0f)) - continue; - - mi = GET_HEAP(struct mode_info, 1); - mi->mode = VIDEO_FIRST_BIOS+mode; - mi->depth = 0; /* text */ - mi->x = rdfs16(0x44a); - mi->y = rdfs8(0x484)+1; - nmodes++; - } - - set_bios_mode(saved_mode); - - return nmodes; -} - -static __videocard video_bios = -{ - .card_name = "BIOS", - .probe = bios_probe, - .set_mode = bios_set_mode, - .unsafe = 1, - .xmode_first = VIDEO_FIRST_BIOS, - .xmode_n = 0x80, -}; diff --git a/ANDROID_3.4.5/arch/x86/boot/video-mode.c b/ANDROID_3.4.5/arch/x86/boot/video-mode.c deleted file mode 100644 index 748e8d06..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video-mode.c +++ /dev/null @@ -1,173 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007-2008 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * arch/i386/boot/video-mode.c - * - * Set the video mode. This is separated out into a different - * file in order to be shared with the ACPI wakeup code. - */ - -#include "boot.h" -#include "video.h" -#include "vesa.h" - -/* - * Common variables - */ -int adapter; /* 0=CGA/MDA/HGC, 1=EGA, 2=VGA+ */ -u16 video_segment; -int force_x, force_y; /* Don't query the BIOS for cols/rows */ - -int do_restore; /* Screen contents changed during mode flip */ -int graphic_mode; /* Graphic mode with linear frame buffer */ - -/* Probe the video drivers and have them generate their mode lists. */ -void probe_cards(int unsafe) -{ - struct card_info *card; - static u8 probed[2]; - - if (probed[unsafe]) - return; - - probed[unsafe] = 1; - - for (card = video_cards; card < video_cards_end; card++) { - if (card->unsafe == unsafe) { - if (card->probe) - card->nmodes = card->probe(); - else - card->nmodes = 0; - } - } -} - -/* Test if a mode is defined */ -int mode_defined(u16 mode) -{ - struct card_info *card; - struct mode_info *mi; - int i; - - for (card = video_cards; card < video_cards_end; card++) { - mi = card->modes; - for (i = 0; i < card->nmodes; i++, mi++) { - if (mi->mode == mode) - return 1; - } - } - - return 0; -} - -/* Set mode (without recalc) */ -static int raw_set_mode(u16 mode, u16 *real_mode) -{ - int nmode, i; - struct card_info *card; - struct mode_info *mi; - - /* Drop the recalc bit if set */ - mode &= ~VIDEO_RECALC; - - /* Scan for mode based on fixed ID, position, or resolution */ - nmode = 0; - for (card = video_cards; card < video_cards_end; card++) { - mi = card->modes; - for (i = 0; i < card->nmodes; i++, mi++) { - int visible = mi->x || mi->y; - - if ((mode == nmode && visible) || - mode == mi->mode || - mode == (mi->y << 8)+mi->x) { - *real_mode = mi->mode; - return card->set_mode(mi); - } - - if (visible) - nmode++; - } - } - - /* Nothing found? Is it an "exceptional" (unprobed) mode? */ - for (card = video_cards; card < video_cards_end; card++) { - if (mode >= card->xmode_first && - mode < card->xmode_first+card->xmode_n) { - struct mode_info mix; - *real_mode = mix.mode = mode; - mix.x = mix.y = 0; - return card->set_mode(&mix); - } - } - - /* Otherwise, failure... */ - return -1; -} - -/* - * Recalculate the vertical video cutoff (hack!) - */ -static void vga_recalc_vertical(void) -{ - unsigned int font_size, rows; - u16 crtc; - u8 pt, ov; - - set_fs(0); - font_size = rdfs8(0x485); /* BIOS: font size (pixels) */ - rows = force_y ? force_y : rdfs8(0x484)+1; /* Text rows */ - - rows *= font_size; /* Visible scan lines */ - rows--; /* ... minus one */ - - crtc = vga_crtc(); - - pt = in_idx(crtc, 0x11); - pt &= ~0x80; /* Unlock CR0-7 */ - out_idx(pt, crtc, 0x11); - - out_idx((u8)rows, crtc, 0x12); /* Lower height register */ - - ov = in_idx(crtc, 0x07); /* Overflow register */ - ov &= 0xbd; - ov |= (rows >> (8-1)) & 0x02; - ov |= (rows >> (9-6)) & 0x40; - out_idx(ov, crtc, 0x07); -} - -/* Set mode (with recalc if specified) */ -int set_mode(u16 mode) -{ - int rv; - u16 real_mode; - - /* Very special mode numbers... */ - if (mode == VIDEO_CURRENT_MODE) - return 0; /* Nothing to do... */ - else if (mode == NORMAL_VGA) - mode = VIDEO_80x25; - else if (mode == EXTENDED_VGA) - mode = VIDEO_8POINT; - - rv = raw_set_mode(mode, &real_mode); - if (rv) - return rv; - - if (mode & VIDEO_RECALC) - vga_recalc_vertical(); - - /* Save the canonical mode number for the kernel, not - an alias, size specification or menu position */ -#ifndef _WAKEUP - boot_params.hdr.vid_mode = real_mode; -#endif - return 0; -} diff --git a/ANDROID_3.4.5/arch/x86/boot/video-vesa.c b/ANDROID_3.4.5/arch/x86/boot/video-vesa.c deleted file mode 100644 index 11e8c6eb..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video-vesa.c +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * VESA text modes - */ - -#include "boot.h" -#include "video.h" -#include "vesa.h" - -/* VESA information */ -static struct vesa_general_info vginfo; -static struct vesa_mode_info vminfo; - -static __videocard video_vesa; - -#ifndef _WAKEUP -static void vesa_store_mode_params_graphics(void); -#else /* _WAKEUP */ -static inline void vesa_store_mode_params_graphics(void) {} -#endif /* _WAKEUP */ - -static int vesa_probe(void) -{ - struct biosregs ireg, oreg; - u16 mode; - addr_t mode_ptr; - struct mode_info *mi; - int nmodes = 0; - - video_vesa.modes = GET_HEAP(struct mode_info, 0); - - initregs(&ireg); - ireg.ax = 0x4f00; - ireg.di = (size_t)&vginfo; - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f || - vginfo.signature != VESA_MAGIC || - vginfo.version < 0x0102) - return 0; /* Not present */ - - set_fs(vginfo.video_mode_ptr.seg); - mode_ptr = vginfo.video_mode_ptr.off; - - while ((mode = rdfs16(mode_ptr)) != 0xffff) { - mode_ptr += 2; - - if (!heap_free(sizeof(struct mode_info))) - break; /* Heap full, can't save mode info */ - - if (mode & ~0x1ff) - continue; - - memset(&vminfo, 0, sizeof vminfo); /* Just in case... */ - - ireg.ax = 0x4f01; - ireg.cx = mode; - ireg.di = (size_t)&vminfo; - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f) - continue; - - if ((vminfo.mode_attr & 0x15) == 0x05) { - /* Text Mode, TTY BIOS supported, - supported by hardware */ - mi = GET_HEAP(struct mode_info, 1); - mi->mode = mode + VIDEO_FIRST_VESA; - mi->depth = 0; /* text */ - mi->x = vminfo.h_res; - mi->y = vminfo.v_res; - nmodes++; - } else if ((vminfo.mode_attr & 0x99) == 0x99 && - (vminfo.memory_layout == 4 || - vminfo.memory_layout == 6) && - vminfo.memory_planes == 1) { -#ifdef CONFIG_FB_BOOT_VESA_SUPPORT - /* Graphics mode, color, linear frame buffer - supported. Only register the mode if - if framebuffer is configured, however, - otherwise the user will be left without a screen. */ - mi = GET_HEAP(struct mode_info, 1); - mi->mode = mode + VIDEO_FIRST_VESA; - mi->depth = vminfo.bpp; - mi->x = vminfo.h_res; - mi->y = vminfo.v_res; - nmodes++; -#endif - } - } - - return nmodes; -} - -static int vesa_set_mode(struct mode_info *mode) -{ - struct biosregs ireg, oreg; - int is_graphic; - u16 vesa_mode = mode->mode - VIDEO_FIRST_VESA; - - memset(&vminfo, 0, sizeof vminfo); /* Just in case... */ - - initregs(&ireg); - ireg.ax = 0x4f01; - ireg.cx = vesa_mode; - ireg.di = (size_t)&vminfo; - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f) - return -1; - - if ((vminfo.mode_attr & 0x15) == 0x05) { - /* It's a supported text mode */ - is_graphic = 0; -#ifdef CONFIG_FB_BOOT_VESA_SUPPORT - } else if ((vminfo.mode_attr & 0x99) == 0x99) { - /* It's a graphics mode with linear frame buffer */ - is_graphic = 1; - vesa_mode |= 0x4000; /* Request linear frame buffer */ -#endif - } else { - return -1; /* Invalid mode */ - } - - - initregs(&ireg); - ireg.ax = 0x4f02; - ireg.bx = vesa_mode; - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f) - return -1; - - graphic_mode = is_graphic; - if (!is_graphic) { - /* Text mode */ - force_x = mode->x; - force_y = mode->y; - do_restore = 1; - } else { - /* Graphics mode */ - vesa_store_mode_params_graphics(); - } - - return 0; -} - - -#ifndef _WAKEUP - -/* Switch DAC to 8-bit mode */ -static void vesa_dac_set_8bits(void) -{ - struct biosregs ireg, oreg; - u8 dac_size = 6; - - /* If possible, switch the DAC to 8-bit mode */ - if (vginfo.capabilities & 1) { - initregs(&ireg); - ireg.ax = 0x4f08; - ireg.bh = 0x08; - intcall(0x10, &ireg, &oreg); - if (oreg.ax == 0x004f) - dac_size = oreg.bh; - } - - /* Set the color sizes to the DAC size, and offsets to 0 */ - boot_params.screen_info.red_size = dac_size; - boot_params.screen_info.green_size = dac_size; - boot_params.screen_info.blue_size = dac_size; - boot_params.screen_info.rsvd_size = dac_size; - - boot_params.screen_info.red_pos = 0; - boot_params.screen_info.green_pos = 0; - boot_params.screen_info.blue_pos = 0; - boot_params.screen_info.rsvd_pos = 0; -} - -/* Save the VESA protected mode info */ -static void vesa_store_pm_info(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ax = 0x4f0a; - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f) - return; - - boot_params.screen_info.vesapm_seg = oreg.es; - boot_params.screen_info.vesapm_off = oreg.di; -} - -/* - * Save video mode parameters for graphics mode - */ -static void vesa_store_mode_params_graphics(void) -{ - /* Tell the kernel we're in VESA graphics mode */ - boot_params.screen_info.orig_video_isVGA = VIDEO_TYPE_VLFB; - - /* Mode parameters */ - boot_params.screen_info.vesa_attributes = vminfo.mode_attr; - boot_params.screen_info.lfb_linelength = vminfo.logical_scan; - boot_params.screen_info.lfb_width = vminfo.h_res; - boot_params.screen_info.lfb_height = vminfo.v_res; - boot_params.screen_info.lfb_depth = vminfo.bpp; - boot_params.screen_info.pages = vminfo.image_planes; - boot_params.screen_info.lfb_base = vminfo.lfb_ptr; - memcpy(&boot_params.screen_info.red_size, - &vminfo.rmask, 8); - - /* General parameters */ - boot_params.screen_info.lfb_size = vginfo.total_memory; - - if (vminfo.bpp <= 8) - vesa_dac_set_8bits(); - - vesa_store_pm_info(); -} - -/* - * Save EDID information for the kernel; this is invoked, separately, - * after mode-setting. - */ -void vesa_store_edid(void) -{ -#ifdef CONFIG_FIRMWARE_EDID - struct biosregs ireg, oreg; - - /* Apparently used as a nonsense token... */ - memset(&boot_params.edid_info, 0x13, sizeof boot_params.edid_info); - - if (vginfo.version < 0x0200) - return; /* EDID requires VBE 2.0+ */ - - initregs(&ireg); - ireg.ax = 0x4f15; /* VBE DDC */ - /* ireg.bx = 0x0000; */ /* Report DDC capabilities */ - /* ireg.cx = 0; */ /* Controller 0 */ - ireg.es = 0; /* ES:DI must be 0 by spec */ - intcall(0x10, &ireg, &oreg); - - if (oreg.ax != 0x004f) - return; /* No EDID */ - - /* BH = time in seconds to transfer EDD information */ - /* BL = DDC level supported */ - - ireg.ax = 0x4f15; /* VBE DDC */ - ireg.bx = 0x0001; /* Read EDID */ - /* ireg.cx = 0; */ /* Controller 0 */ - /* ireg.dx = 0; */ /* EDID block number */ - ireg.es = ds(); - ireg.di =(size_t)&boot_params.edid_info; /* (ES:)Pointer to block */ - intcall(0x10, &ireg, &oreg); -#endif /* CONFIG_FIRMWARE_EDID */ -} - -#endif /* not _WAKEUP */ - -static __videocard video_vesa = -{ - .card_name = "VESA", - .probe = vesa_probe, - .set_mode = vesa_set_mode, - .xmode_first = VIDEO_FIRST_VESA, - .xmode_n = 0x200, -}; diff --git a/ANDROID_3.4.5/arch/x86/boot/video-vga.c b/ANDROID_3.4.5/arch/x86/boot/video-vga.c deleted file mode 100644 index 45bc9402..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video-vga.c +++ /dev/null @@ -1,288 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Common all-VGA modes - */ - -#include "boot.h" -#include "video.h" - -static struct mode_info vga_modes[] = { - { VIDEO_80x25, 80, 25, 0 }, - { VIDEO_8POINT, 80, 50, 0 }, - { VIDEO_80x43, 80, 43, 0 }, - { VIDEO_80x28, 80, 28, 0 }, - { VIDEO_80x30, 80, 30, 0 }, - { VIDEO_80x34, 80, 34, 0 }, - { VIDEO_80x60, 80, 60, 0 }, -}; - -static struct mode_info ega_modes[] = { - { VIDEO_80x25, 80, 25, 0 }, - { VIDEO_8POINT, 80, 43, 0 }, -}; - -static struct mode_info cga_modes[] = { - { VIDEO_80x25, 80, 25, 0 }, -}; - -static __videocard video_vga; - -/* Set basic 80x25 mode */ -static u8 vga_set_basic_mode(void) -{ - struct biosregs ireg, oreg; - u8 mode; - - initregs(&ireg); - - /* Query current mode */ - ireg.ax = 0x0f00; - intcall(0x10, &ireg, &oreg); - mode = oreg.al; - - if (mode != 3 && mode != 7) - mode = 3; - - /* Set the mode */ - ireg.ax = mode; /* AH=0: set mode */ - intcall(0x10, &ireg, NULL); - do_restore = 1; - return mode; -} - -static void vga_set_8font(void) -{ - /* Set 8x8 font - 80x43 on EGA, 80x50 on VGA */ - struct biosregs ireg; - - initregs(&ireg); - - /* Set 8x8 font */ - ireg.ax = 0x1112; - /* ireg.bl = 0; */ - intcall(0x10, &ireg, NULL); - - /* Use alternate print screen */ - ireg.ax = 0x1200; - ireg.bl = 0x20; - intcall(0x10, &ireg, NULL); - - /* Turn off cursor emulation */ - ireg.ax = 0x1201; - ireg.bl = 0x34; - intcall(0x10, &ireg, NULL); - - /* Cursor is scan lines 6-7 */ - ireg.ax = 0x0100; - ireg.cx = 0x0607; - intcall(0x10, &ireg, NULL); -} - -static void vga_set_14font(void) -{ - /* Set 9x14 font - 80x28 on VGA */ - struct biosregs ireg; - - initregs(&ireg); - - /* Set 9x14 font */ - ireg.ax = 0x1111; - /* ireg.bl = 0; */ - intcall(0x10, &ireg, NULL); - - /* Turn off cursor emulation */ - ireg.ax = 0x1201; - ireg.bl = 0x34; - intcall(0x10, &ireg, NULL); - - /* Cursor is scan lines 11-12 */ - ireg.ax = 0x0100; - ireg.cx = 0x0b0c; - intcall(0x10, &ireg, NULL); -} - -static void vga_set_80x43(void) -{ - /* Set 80x43 mode on VGA (not EGA) */ - struct biosregs ireg; - - initregs(&ireg); - - /* Set 350 scans */ - ireg.ax = 0x1201; - ireg.bl = 0x30; - intcall(0x10, &ireg, NULL); - - /* Reset video mode */ - ireg.ax = 0x0003; - intcall(0x10, &ireg, NULL); - - vga_set_8font(); -} - -/* I/O address of the VGA CRTC */ -u16 vga_crtc(void) -{ - return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4; -} - -static void vga_set_480_scanlines(void) -{ - u16 crtc; /* CRTC base address */ - u8 csel; /* CRTC miscellaneous output register */ - - crtc = vga_crtc(); - - out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */ - out_idx(0x0b, crtc, 0x06); /* Vertical total */ - out_idx(0x3e, crtc, 0x07); /* Vertical overflow */ - out_idx(0xea, crtc, 0x10); /* Vertical sync start */ - out_idx(0xdf, crtc, 0x12); /* Vertical display end */ - out_idx(0xe7, crtc, 0x15); /* Vertical blank start */ - out_idx(0x04, crtc, 0x16); /* Vertical blank end */ - csel = inb(0x3cc); - csel &= 0x0d; - csel |= 0xe2; - outb(csel, 0x3c2); -} - -static void vga_set_vertical_end(int lines) -{ - u16 crtc; /* CRTC base address */ - u8 ovfw; /* CRTC overflow register */ - int end = lines-1; - - crtc = vga_crtc(); - - ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40); - - out_idx(ovfw, crtc, 0x07); /* Vertical overflow */ - out_idx(end, crtc, 0x12); /* Vertical display end */ -} - -static void vga_set_80x30(void) -{ - vga_set_480_scanlines(); - vga_set_vertical_end(30*16); -} - -static void vga_set_80x34(void) -{ - vga_set_480_scanlines(); - vga_set_14font(); - vga_set_vertical_end(34*14); -} - -static void vga_set_80x60(void) -{ - vga_set_480_scanlines(); - vga_set_8font(); - vga_set_vertical_end(60*8); -} - -static int vga_set_mode(struct mode_info *mode) -{ - /* Set the basic mode */ - vga_set_basic_mode(); - - /* Override a possibly broken BIOS */ - force_x = mode->x; - force_y = mode->y; - - switch (mode->mode) { - case VIDEO_80x25: - break; - case VIDEO_8POINT: - vga_set_8font(); - break; - case VIDEO_80x43: - vga_set_80x43(); - break; - case VIDEO_80x28: - vga_set_14font(); - break; - case VIDEO_80x30: - vga_set_80x30(); - break; - case VIDEO_80x34: - vga_set_80x34(); - break; - case VIDEO_80x60: - vga_set_80x60(); - break; - } - - return 0; -} - -/* - * Note: this probe includes basic information required by all - * systems. It should be executed first, by making sure - * video-vga.c is listed first in the Makefile. - */ -static int vga_probe(void) -{ - static const char *card_name[] = { - "CGA/MDA/HGC", "EGA", "VGA" - }; - static struct mode_info *mode_lists[] = { - cga_modes, - ega_modes, - vga_modes, - }; - static int mode_count[] = { - sizeof(cga_modes)/sizeof(struct mode_info), - sizeof(ega_modes)/sizeof(struct mode_info), - sizeof(vga_modes)/sizeof(struct mode_info), - }; - - struct biosregs ireg, oreg; - - initregs(&ireg); - - ireg.ax = 0x1200; - ireg.bl = 0x10; /* Check EGA/VGA */ - intcall(0x10, &ireg, &oreg); - -#ifndef _WAKEUP - boot_params.screen_info.orig_video_ega_bx = oreg.bx; -#endif - - /* If we have MDA/CGA/HGC then BL will be unchanged at 0x10 */ - if (oreg.bl != 0x10) { - /* EGA/VGA */ - ireg.ax = 0x1a00; - intcall(0x10, &ireg, &oreg); - - if (oreg.al == 0x1a) { - adapter = ADAPTER_VGA; -#ifndef _WAKEUP - boot_params.screen_info.orig_video_isVGA = 1; -#endif - } else { - adapter = ADAPTER_EGA; - } - } else { - adapter = ADAPTER_CGA; - } - - video_vga.modes = mode_lists[adapter]; - video_vga.card_name = card_name[adapter]; - return mode_count[adapter]; -} - -static __videocard video_vga = { - .card_name = "VGA", - .probe = vga_probe, - .set_mode = vga_set_mode, -}; diff --git a/ANDROID_3.4.5/arch/x86/boot/video.c b/ANDROID_3.4.5/arch/x86/boot/video.c deleted file mode 100644 index 43eda284..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video.c +++ /dev/null @@ -1,341 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * Copyright 2009 Intel Corporation; author H. Peter Anvin - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Select video mode - */ - -#include "boot.h" -#include "video.h" -#include "vesa.h" - -static void store_cursor_position(void) -{ - struct biosregs ireg, oreg; - - initregs(&ireg); - ireg.ah = 0x03; - intcall(0x10, &ireg, &oreg); - - boot_params.screen_info.orig_x = oreg.dl; - boot_params.screen_info.orig_y = oreg.dh; - - if (oreg.ch & 0x20) - boot_params.screen_info.flags |= VIDEO_FLAGS_NOCURSOR; - - if ((oreg.ch & 0x1f) > (oreg.cl & 0x1f)) - boot_params.screen_info.flags |= VIDEO_FLAGS_NOCURSOR; -} - -static void store_video_mode(void) -{ - struct biosregs ireg, oreg; - - /* N.B.: the saving of the video page here is a bit silly, - since we pretty much assume page 0 everywhere. */ - initregs(&ireg); - ireg.ah = 0x0f; - intcall(0x10, &ireg, &oreg); - - /* Not all BIOSes are clean with respect to the top bit */ - boot_params.screen_info.orig_video_mode = oreg.al & 0x7f; - boot_params.screen_info.orig_video_page = oreg.bh; -} - -/* - * Store the video mode parameters for later usage by the kernel. - * This is done by asking the BIOS except for the rows/columns - * parameters in the default 80x25 mode -- these are set directly, - * because some very obscure BIOSes supply insane values. - */ -static void store_mode_params(void) -{ - u16 font_size; - int x, y; - - /* For graphics mode, it is up to the mode-setting driver - (currently only video-vesa.c) to store the parameters */ - if (graphic_mode) - return; - - store_cursor_position(); - store_video_mode(); - - if (boot_params.screen_info.orig_video_mode == 0x07) { - /* MDA, HGC, or VGA in monochrome mode */ - video_segment = 0xb000; - } else { - /* CGA, EGA, VGA and so forth */ - video_segment = 0xb800; - } - - set_fs(0); - font_size = rdfs16(0x485); /* Font size, BIOS area */ - boot_params.screen_info.orig_video_points = font_size; - - x = rdfs16(0x44a); - y = (adapter == ADAPTER_CGA) ? 25 : rdfs8(0x484)+1; - - if (force_x) - x = force_x; - if (force_y) - y = force_y; - - boot_params.screen_info.orig_video_cols = x; - boot_params.screen_info.orig_video_lines = y; -} - -static unsigned int get_entry(void) -{ - char entry_buf[4]; - int i, len = 0; - int key; - unsigned int v; - - do { - key = getchar(); - - if (key == '\b') { - if (len > 0) { - puts("\b \b"); - len--; - } - } else if ((key >= '0' && key <= '9') || - (key >= 'A' && key <= 'Z') || - (key >= 'a' && key <= 'z')) { - if (len < sizeof entry_buf) { - entry_buf[len++] = key; - putchar(key); - } - } - } while (key != '\r'); - putchar('\n'); - - if (len == 0) - return VIDEO_CURRENT_MODE; /* Default */ - - v = 0; - for (i = 0; i < len; i++) { - v <<= 4; - key = entry_buf[i] | 0x20; - v += (key > '9') ? key-'a'+10 : key-'0'; - } - - return v; -} - -static void display_menu(void) -{ - struct card_info *card; - struct mode_info *mi; - char ch; - int i; - int nmodes; - int modes_per_line; - int col; - - nmodes = 0; - for (card = video_cards; card < video_cards_end; card++) - nmodes += card->nmodes; - - modes_per_line = 1; - if (nmodes >= 20) - modes_per_line = 3; - - for (col = 0; col < modes_per_line; col++) - puts("Mode: Resolution: Type: "); - putchar('\n'); - - col = 0; - ch = '0'; - for (card = video_cards; card < video_cards_end; card++) { - mi = card->modes; - for (i = 0; i < card->nmodes; i++, mi++) { - char resbuf[32]; - int visible = mi->x && mi->y; - u16 mode_id = mi->mode ? mi->mode : - (mi->y << 8)+mi->x; - - if (!visible) - continue; /* Hidden mode */ - - if (mi->depth) - sprintf(resbuf, "%dx%d", mi->y, mi->depth); - else - sprintf(resbuf, "%d", mi->y); - - printf("%c %03X %4dx%-7s %-6s", - ch, mode_id, mi->x, resbuf, card->card_name); - col++; - if (col >= modes_per_line) { - putchar('\n'); - col = 0; - } - - if (ch == '9') - ch = 'a'; - else if (ch == 'z' || ch == ' ') - ch = ' '; /* Out of keys... */ - else - ch++; - } - } - if (col) - putchar('\n'); -} - -#define H(x) ((x)-'a'+10) -#define SCAN ((H('s')<<12)+(H('c')<<8)+(H('a')<<4)+H('n')) - -static unsigned int mode_menu(void) -{ - int key; - unsigned int sel; - - puts("Press <ENTER> to see video modes available, " - "<SPACE> to continue, or wait 30 sec\n"); - - kbd_flush(); - while (1) { - key = getchar_timeout(); - if (key == ' ' || key == 0) - return VIDEO_CURRENT_MODE; /* Default */ - if (key == '\r') - break; - putchar('\a'); /* Beep! */ - } - - - for (;;) { - display_menu(); - - puts("Enter a video mode or \"scan\" to scan for " - "additional modes: "); - sel = get_entry(); - if (sel != SCAN) - return sel; - - probe_cards(1); - } -} - -/* Save screen content to the heap */ -static struct saved_screen { - int x, y; - int curx, cury; - u16 *data; -} saved; - -static void save_screen(void) -{ - /* Should be called after store_mode_params() */ - saved.x = boot_params.screen_info.orig_video_cols; - saved.y = boot_params.screen_info.orig_video_lines; - saved.curx = boot_params.screen_info.orig_x; - saved.cury = boot_params.screen_info.orig_y; - - if (!heap_free(saved.x*saved.y*sizeof(u16)+512)) - return; /* Not enough heap to save the screen */ - - saved.data = GET_HEAP(u16, saved.x*saved.y); - - set_fs(video_segment); - copy_from_fs(saved.data, 0, saved.x*saved.y*sizeof(u16)); -} - -static void restore_screen(void) -{ - /* Should be called after store_mode_params() */ - int xs = boot_params.screen_info.orig_video_cols; - int ys = boot_params.screen_info.orig_video_lines; - int y; - addr_t dst = 0; - u16 *src = saved.data; - struct biosregs ireg; - - if (graphic_mode) - return; /* Can't restore onto a graphic mode */ - - if (!src) - return; /* No saved screen contents */ - - /* Restore screen contents */ - - set_fs(video_segment); - for (y = 0; y < ys; y++) { - int npad; - - if (y < saved.y) { - int copy = (xs < saved.x) ? xs : saved.x; - copy_to_fs(dst, src, copy*sizeof(u16)); - dst += copy*sizeof(u16); - src += saved.x; - npad = (xs < saved.x) ? 0 : xs-saved.x; - } else { - npad = xs; - } - - /* Writes "npad" blank characters to - video_segment:dst and advances dst */ - asm volatile("pushw %%es ; " - "movw %2,%%es ; " - "shrw %%cx ; " - "jnc 1f ; " - "stosw \n\t" - "1: rep;stosl ; " - "popw %%es" - : "+D" (dst), "+c" (npad) - : "bdS" (video_segment), - "a" (0x07200720)); - } - - /* Restore cursor position */ - if (saved.curx >= xs) - saved.curx = xs-1; - if (saved.cury >= ys) - saved.cury = ys-1; - - initregs(&ireg); - ireg.ah = 0x02; /* Set cursor position */ - ireg.dh = saved.cury; - ireg.dl = saved.curx; - intcall(0x10, &ireg, NULL); - - store_cursor_position(); -} - -void set_video(void) -{ - u16 mode = boot_params.hdr.vid_mode; - - RESET_HEAP(); - - store_mode_params(); - save_screen(); - probe_cards(0); - - for (;;) { - if (mode == ASK_VGA) - mode = mode_menu(); - - if (!set_mode(mode)) - break; - - printf("Undefined video mode number: %x\n", mode); - mode = ASK_VGA; - } - boot_params.hdr.vid_mode = mode; - vesa_store_edid(); - store_mode_params(); - - if (do_restore) - restore_screen(); -} diff --git a/ANDROID_3.4.5/arch/x86/boot/video.h b/ANDROID_3.4.5/arch/x86/boot/video.h deleted file mode 100644 index ff339c5d..00000000 --- a/ANDROID_3.4.5/arch/x86/boot/video.h +++ /dev/null @@ -1,121 +0,0 @@ -/* -*- linux-c -*- ------------------------------------------------------- * - * - * Copyright (C) 1991, 1992 Linus Torvalds - * Copyright 2007 rPath, Inc. - All Rights Reserved - * - * This file is part of the Linux kernel, and is made available under - * the terms of the GNU General Public License version 2. - * - * ----------------------------------------------------------------------- */ - -/* - * Header file for the real-mode video probing code - */ - -#ifndef BOOT_VIDEO_H -#define BOOT_VIDEO_H - -#include <linux/types.h> - -/* - * This code uses an extended set of video mode numbers. These include: - * Aliases for standard modes - * NORMAL_VGA (-1) - * EXTENDED_VGA (-2) - * ASK_VGA (-3) - * Video modes numbered by menu position -- NOT RECOMMENDED because of lack - * of compatibility when extending the table. These are between 0x00 and 0xff. - */ -#define VIDEO_FIRST_MENU 0x0000 - -/* Standard BIOS video modes (BIOS number + 0x0100) */ -#define VIDEO_FIRST_BIOS 0x0100 - -/* VESA BIOS video modes (VESA number + 0x0200) */ -#define VIDEO_FIRST_VESA 0x0200 - -/* Video7 special modes (BIOS number + 0x0900) */ -#define VIDEO_FIRST_V7 0x0900 - -/* Special video modes */ -#define VIDEO_FIRST_SPECIAL 0x0f00 -#define VIDEO_80x25 0x0f00 -#define VIDEO_8POINT 0x0f01 -#define VIDEO_80x43 0x0f02 -#define VIDEO_80x28 0x0f03 -#define VIDEO_CURRENT_MODE 0x0f04 -#define VIDEO_80x30 0x0f05 -#define VIDEO_80x34 0x0f06 -#define VIDEO_80x60 0x0f07 -#define VIDEO_GFX_HACK 0x0f08 -#define VIDEO_LAST_SPECIAL 0x0f09 - -/* Video modes given by resolution */ -#define VIDEO_FIRST_RESOLUTION 0x1000 - -/* The "recalculate timings" flag */ -#define VIDEO_RECALC 0x8000 - -void store_screen(void); -#define DO_STORE() store_screen() - -/* - * Mode table structures - */ - -struct mode_info { - u16 mode; /* Mode number (vga= style) */ - u16 x, y; /* Width, height */ - u16 depth; /* Bits per pixel, 0 for text mode */ -}; - -struct card_info { - const char *card_name; - int (*set_mode)(struct mode_info *mode); - int (*probe)(void); - struct mode_info *modes; - int nmodes; /* Number of probed modes so far */ - int unsafe; /* Probing is unsafe, only do after "scan" */ - u16 xmode_first; /* Unprobed modes to try to call anyway */ - u16 xmode_n; /* Size of unprobed mode range */ -}; - -#define __videocard struct card_info __attribute__((section(".videocards"))) -extern struct card_info video_cards[], video_cards_end[]; - -int mode_defined(u16 mode); /* video.c */ - -/* Basic video information */ -#define ADAPTER_CGA 0 /* CGA/MDA/HGC */ -#define ADAPTER_EGA 1 -#define ADAPTER_VGA 2 - -extern int adapter; -extern u16 video_segment; -extern int force_x, force_y; /* Don't query the BIOS for cols/rows */ -extern int do_restore; /* Restore screen contents */ -extern int graphic_mode; /* Graphics mode with linear frame buffer */ - -/* Accessing VGA indexed registers */ -static inline u8 in_idx(u16 port, u8 index) -{ - outb(index, port); - return inb(port+1); -} - -static inline void out_idx(u8 v, u16 port, u8 index) -{ - outw(index+(v << 8), port); -} - -/* Writes a value to an indexed port and then reads the port again */ -static inline u8 tst_idx(u8 v, u16 port, u8 index) -{ - out_idx(port, index, v); - return in_idx(port, index); -} - -/* Get the I/O port of the VGA CRTC */ -u16 vga_crtc(void); /* video-vga.c */ - -#endif /* BOOT_VIDEO_H */ |