diff options
| author | Michael Brown | 2016-02-19 20:43:04 +0100 |
|---|---|---|
| committer | Michael Brown | 2016-02-21 00:09:36 +0100 |
| commit | ea203e4fe1c60504023ea2604604d8092f24effc (patch) | |
| tree | a35f62d6dc59334ad9118020ac1adabc567069ac /src/usr | |
| parent | [build] Fix building on older versions of binutils (diff) | |
| download | ipxe-ea203e4fe1c60504023ea2604604d8092f24effc.tar.gz ipxe-ea203e4fe1c60504023ea2604604d8092f24effc.tar.xz ipxe-ea203e4fe1c60504023ea2604604d8092f24effc.zip | |
[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>
Diffstat (limited to 'src/usr')
0 files changed, 0 insertions, 0 deletions
