| /* |
| * Copyright (C) 2009 Juergen Beisert, Pengutronix |
| * |
| * This code was inspired by the GRUB2 project. |
| * |
| * 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; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * 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., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| * |
| */ |
| |
| /** |
| * @file |
| * @brief Query the memory layout information from the BIOS |
| * |
| * Note: This function is running in flat and real mode. Due to some |
| * other restrictions it must running from an address space below 0x10000 |
| */ |
| |
| /** |
| * @fn unsigned short bios_get_memsize(void) |
| * @brief Does a BIOS call "INT 15H, AH=88H" to get extended memory size |
| * @return Extended memory size in KB |
| * |
| * @note This call is limited to 64 MiB. So, if the system provides more than |
| * 64 MiB of memory, still 64 MiB are reported. |
| * |
| */ |
| |
| |
| .section .boot.text.bios_get_memsize, "ax" |
| .code32 |
| .globl bios_get_memsize |
| .type bios_get_memsize, @function |
| |
| .extern prot_to_real |
| |
| bios_get_memsize: |
| |
| pushl %ebp |
| |
| call prot_to_real /* enter real mode */ |
| .code16 |
| |
| movb $0x88, %ah |
| int $0x15 |
| |
| movw %ax, %dx |
| |
| DATA32 call real_to_prot |
| |
| .code32 |
| |
| movw %dx, %ax |
| |
| popl %ebp |
| ret |
| |
| .size bios_get_memsize, .-bios_get_memsize |
| |