[librm] Add phys_call() wrapper for calling code with physical addressing
authorMichael Brown <mcb30@ipxe.org>
Fri, 19 Feb 2016 19:43:04 +0000 (19:43 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sat, 20 Feb 2016 23:09:36 +0000 (23:09 +0000)
commitea203e4fe1c60504023ea2604604d8092f24effc
treea35f62d6dc59334ad9118020ac1adabc567069ac
parenta4923354e31f83c17b9c5befadb801b80c9f9cc1
[librm] Add phys_call() wrapper for calling code with physical addressing

Add a phys_call() wrapper function (analogous to the existing
real_call() wrapper function) for calling code with flat physical
addressing, and use this wrapper within the PHYS_CODE() macro.

Move the relevant functionality inside librm.S, where it more
naturally belongs.

The COMBOOT code currently uses explicit calls to _virt_to_phys and
_phys_to_virt.  These will need to be rewritten if our COMBOOT support
is ever generalised to be able to run in a 64-bit build.
Specifically:

  - com32_exec_loop() should be restructured to use PHYS_CODE()

  - com32_wrapper.S should be restructured to use an equivalent of
    prot_call(), passing parameters via a struct i386_all_regs

  - there appears to be no need for com32_wrapper.S to switch between
    external and internal stacks; this could be omitted to simplify
    the design.

For now, librm.S continues to expose _virt_to_phys and _phys_to_virt
for use by com32.c and com32_wrapper.S.  Similarly, librm.S continues
to expose _intr_to_virt for use by gdbidt.S.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/core/virtaddr.S [deleted file]
src/arch/x86/include/librm.h
src/arch/x86/transitions/librm.S