[PATCH 4/6] i386/shared/int16: real mode interrupt interface
Gedare Bloom
gedare at rtems.org
Fri Nov 14 02:59:27 UTC 2014
On Thu, Nov 13, 2014 at 7:27 PM, Pavel Pisa <pisa at cmp.felk.cvut.cz> wrote:
> Hello Gedare and others,
>
> On Wednesday 12 of November 2014 16:54:07 Gedare Bloom wrote:
>> On Wed, Nov 12, 2014 at 10:07 AM, Jan Dolezal <dolezj21 at fel.cvut.cz> wrote:
>> > ---
>> > c/src/lib/libbsp/i386/pc386/Makefile.am | 2 +
>> > c/src/lib/libbsp/i386/pc386/preinstall.am | 4 +
>> > c/src/lib/libbsp/i386/shared/int16/int16.c | 397
>> > +++++++++++++++++++++++++++++ c/src/lib/libbsp/i386/shared/int16/int16.h
>> > | 93 +++++++
>> > 4 files changed, 496 insertions(+)
>> > create mode 100644 c/src/lib/libbsp/i386/shared/int16/int16.c
>> > create mode 100644 c/src/lib/libbsp/i386/shared/int16/int16.h
>>
>> These new files should probably go under i386/shared/irq ?
>
> The right location for this code is questionable and I would
> personally prefer to keep it well separated from x86 protected
> mode runtime support.
>
> It is highly special. It allows to switch CPU to real mode
> and then call BIOS interrupt and then switch back to protected
> mode. The actual implementation is limited. The BIOS calls
> are allowed only during system initialization before first
> interrupt source (i.e. tick timer) is enabled.
> This is enough for video mode selection during RTEMS
> startup with mode/resolution selected as command line parameter.
>
> It would be quite usesfull (but dangerous) to support BIOS
> calls during real time executive and applications running
> state. There are next theoretical options to consider
>
> - there is VBE 3 documented VESA BIOS only solution
> to copy and patch VESA BIOS to be usable directly
> from 16-bit protected mode descriptors. It was my initial
> idea and Jan Dolezal has spent horrible amount of time
> to try this but QEMU does not include BIOS with this functionality
> and these little card which has been found to declare this
> support present has proven to be broken and we have even
> found similar conclusion about no way in this direction
> published by others. Even if the BIOS supports protected mode
> calls then it has to run with multiple selectors and this
> would require significant overhead addition to RTEMS i386
> context switch and interrupt code to preserve descriptors
> for task interrupted in 16-bit protected BIOS code
>
> - use of VM86 support of i386. This allows to run real mode
> code in the firs 1MB of linear address space mapped
> to physical address space by page tables. To support that
> mode requires to add some code to interrupt and context
> switch but overhead cab be probably limited compared
> to previous option.
>
> - use of x86 code interpreter. Complex solution which
> we have no resources to implement with correct license
> now. But this would probably fit best requirement
> of safety concerns of RTEMS grade control system.
> That solution would cause no additional overhead
> code inclusion in RTEMS context switch and allows
> to monitor and limit memory accesses from BIOS code.
> It could be used for running addon cards BIOS on non x86
> architectures as well .... But ...
>
> Generally, I suggest to keep this stuff configurable
> and not to mix it with core and allways used i386 CPU support.
>
> The name "int16" is questionable, may it be misleading.
> We spoke about "i386_rmcall" prefix for real mode calls.
> It could be even "bioscall" or "biosint" but in the fact
> this shared part of the code has no direct connection
> to BIOS. It is generic support to call real mode interrupt.
>
OK thanks for the background info. Keeping it separate makes sense.
I'd prefer realmode_int or something. This should all get explained
somewhere (developer wiki, once it is up) so we don't lose track of
these issues. x86 code interpreter is an interesting project.
-Gedare
> x86 graphics support is generally compromise driven solution.
> But if there are cases where graphics is desired to work
> on RTEMS (even on embedded non x86 targets) then there
> is significant need to support graphic on pc386 to run
> test builds of system and graphics framework on x86 (even in QEMU)
> because native architecture development and testing is faster
> and x86 is common base. And there is no other reasonably
> complex solution on x86 to support more graphics cards
> hardware variants than VESA BIOS. I.e. native drivers would be nice
> dream but there is not enough power in RTEMS community to implement
> it and maintain it for more boards and it is not RTEMS focus anyway.
> As an option, the cirrus driver can be used for pure emulated
> environment but this is far from use on any real hardware.
>
> Best wishes,
>
> Pavel
>
More information about the devel
mailing list