summaryrefslogtreecommitdiff
path: root/ANDROID_3.4.5/arch/x86/boot/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'ANDROID_3.4.5/arch/x86/boot/memory.c')
-rw-r--r--ANDROID_3.4.5/arch/x86/boot/memory.c136
1 files changed, 0 insertions, 136 deletions
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;
-}