2N/A * GRUB -- GRand Unified Bootloader 2N/A * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009,2011 Free Software Foundation, Inc. 2N/A * GRUB is free software: you can redistribute it and/or modify 2N/A * it under the terms of the GNU General Public License as published by 2N/A * the Free Software Foundation, either version 3 of the License, or 2N/A * (at your option) any later version. 2N/A * GRUB is distributed in the hope that it will be useful, 2N/A * but WITHOUT ANY WARRANTY; without even the implied warranty of 2N/A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2N/A * GNU General Public License for more details. 2N/A * You should have received a copy of the GNU General Public License 2N/A * Note: These functions defined in this file may be called from C. 2N/A * Be careful of that you must not modify some registers. Quote 2N/A 1 for registers not available across function calls. 2N/A These must include the FIXED_REGISTERS and also any 2N/A registers that can be used without being saved. 2N/A The latter must include the registers where values are returned 2N/A and the register where structure-value addresses are passed. 2N/A Aside from that, you can include as many other registers as you like. 2N/A ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg 2N/A{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 2N/A * Note: GRUB is compiled with the options -mrtd and -mregparm=3. 2N/A * So the first three arguments are passed in %eax, %edx, and %ecx, 2N/A * respectively, and if a function has a fixed number of arguments 2N/A * and the number is greater than three, the function must return 2N/A * with "ret $N" where N is ((the number of arguments) - 3) * 4. 2N/A /* copy back the decompressed part (except the modules) */ 2N/A /* copy modules before cleaning out the bss */ 2N/A /* clean out the bss */ 2N/A /* compute the bss length */ 2N/A * Call the start of main body of C code. 2N/A /* Tell the BIOS a boot failure. If this does not work, reboot. */ 2N/A /* set 0x472 to 0x0000 for cold boot (0x1234 for warm boot) */ 2N/A * int grub_pxe_call (int func, void* data, grub_uint32_t pxe_rm_entry);