Unify assembler function handling
Instead of adding regparm(0) to each assembler function called by coreboot, add an asmlinkage macro (like the Linux kernel does) that can be different per architecture (and that is empty on ARM right now) Change-Id: I7ad10c463f6c552f1201f77ae24ed354ac48e2d9 Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/1973 Reviewed-by: David Hendricks <dhendrix@chromium.org> Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
committed by
Ronald G. Minnich
parent
c269a9b51c
commit
399486e8fb
25
src/arch/armv7/include/arch/cpu.h
Normal file
25
src/arch/armv7/include/arch/cpu.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2012 Google, Inc
|
||||
*
|
||||
* 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; version 2 of the License.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA, 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_CPU_H__
|
||||
#define __ARCH_CPU_H__
|
||||
|
||||
#define asmlinkage
|
||||
|
||||
#endif
|
@@ -748,7 +748,7 @@ extern int lowmem_backup_size;
|
||||
#define WAKEUP_BASE 0x600
|
||||
|
||||
void (*acpi_do_wakeup)(u32 vector, u32 backup_source, u32 backup_target,
|
||||
u32 backup_size) __attribute__((regparm(0))) = (void *)WAKEUP_BASE;
|
||||
u32 backup_size) asmlinkage = (void *)WAKEUP_BASE;
|
||||
|
||||
extern unsigned char __wakeup, __wakeup_size;
|
||||
|
||||
|
@@ -1,6 +1,8 @@
|
||||
#ifndef ARCH_CPU_H
|
||||
#define ARCH_CPU_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* EFLAGS bits
|
||||
*/
|
||||
@@ -205,6 +207,9 @@ static void inline get_fms(struct cpuinfo_x86 *c, uint32_t tfms)
|
||||
c->x86_model += ((tfms >> 16) & 0xF) << 4;
|
||||
|
||||
}
|
||||
|
||||
#define asmlinkage __attribute__((regparm(0)))
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* ARCH_CPU_H */
|
||||
|
@@ -19,6 +19,9 @@
|
||||
|
||||
#ifndef __ARCH_STAGES_H
|
||||
#define __ARCH_STAGES_H
|
||||
void __attribute__((regparm(0))) copy_and_run(unsigned cpu_reset);
|
||||
void __attribute__((regparm(0))) copy_and_run_ap_code_in_car(unsigned ret_addr);
|
||||
|
||||
#include <arch/cpu.h>
|
||||
|
||||
void asmlinkage copy_and_run(unsigned cpu_reset);
|
||||
void asmlinkage copy_and_run_ap_code_in_car(unsigned ret_addr);
|
||||
#endif
|
||||
|
@@ -41,7 +41,7 @@ static void cbfs_and_run_core(const char *filename, unsigned ebp)
|
||||
);
|
||||
}
|
||||
|
||||
void __attribute__((regparm(0))) copy_and_run(unsigned cpu_reset)
|
||||
void asmlinkage copy_and_run(unsigned cpu_reset)
|
||||
{
|
||||
// FIXME fix input parameters instead normalizing them here.
|
||||
if (cpu_reset == 1) cpu_reset = -1;
|
||||
@@ -51,7 +51,7 @@ void __attribute__((regparm(0))) copy_and_run(unsigned cpu_reset)
|
||||
}
|
||||
|
||||
#if CONFIG_AP_CODE_IN_CAR
|
||||
void __attribute__((regparm(0))) copy_and_run_ap_code_in_car(unsigned ret_addr)
|
||||
void asmlinkage copy_and_run_ap_code_in_car(unsigned ret_addr)
|
||||
{
|
||||
cbfs_and_run_core(CONFIG_CBFS_PREFIX "/coreboot_ap", ret_addr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user