diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2018-10-23 19:35:02 +0200 |
---|---|---|
committer | Paolo Bonzini <bonzini@gnu.org> | 2018-10-24 00:37:50 +0200 |
commit | 32f82f8789932397e5d79ee5af13f56b088f1ca9 (patch) | |
tree | f735bc176917abeffb61ded7f121f9ad89637fa8 | |
parent | ac9488f26528394856b94bda0797f5bd9c69a26a (diff) | |
download | qboot-32f82f8789932397e5d79ee5af13f56b088f1ca9.zip qboot-32f82f8789932397e5d79ee5af13f56b088f1ca9.tar.gz qboot-32f82f8789932397e5d79ee5af13f56b088f1ca9.tar.bz2 |
benchmark: Define exit points and values
Benchmarking IO port addresses and return values are now defined
through a dedicated header.
Each exit point can have its own IO port address and return value.
With this we are able to discriminate between similar code paths
through the QEMU process return values or between different
code paths by having the QEMU debugexit device monitoring
different IO port addresses.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r-- | benchmark.h | 13 | ||||
-rw-r--r-- | fw_cfg.c | 3 | ||||
-rw-r--r-- | linuxboot.c | 3 |
3 files changed, 17 insertions, 2 deletions
diff --git a/benchmark.h b/benchmark.h new file mode 100644 index 0000000..089c549 --- /dev/null +++ b/benchmark.h @@ -0,0 +1,13 @@ +#ifndef BENCHMARK_H +#define BENCHMARK_H + +/* IO ports for different exit points */ +#define LINUX_EXIT_PORT 0xf4 +#define FW_EXIT_PORT 0xf5 + +/* Exit point values */ +#define FW_START 1 +#define LINUX_START_FWCFG 2 +#define LINUX_START_BOOT 3 + +#endif @@ -7,6 +7,7 @@ #include "bswap.h" #include "linuxboot.h" #include "multiboot.h" +#include "benchmark.h" struct fw_cfg_file { uint32_t size; @@ -174,7 +175,7 @@ static void boot_multiboot_from_fw_cfg(void) /* Exit just before getting to vmlinuz, so that it is easy * to time/profile the firmware. */ - outb(0xf4, 1); + outb(LINUX_EXIT_PORT, LINUX_START_FWCFG); #endif fw_cfg_select(FW_CFG_KERNEL_ENTRY); diff --git a/linuxboot.c b/linuxboot.c index 65b5936..a5f1c4f 100644 --- a/linuxboot.c +++ b/linuxboot.c @@ -3,6 +3,7 @@ #include "ioport.h" #include "string.h" #include "stdio.h" +#include "benchmark.h" static inline uint16_t lduw_p(void *p) { @@ -116,7 +117,7 @@ void boot_bzimage(struct linuxboot_args *args) /* Exit just before getting to vmlinuz, so that it is easy * to time/profile the firmware. */ - outb(0xf4, 1); + outb(LINUX_EXIT_PORT, LINUX_START_BOOT); #endif asm volatile( "ljmp $0x18, $pm16_boot_linux - 0xf0000" |