| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| | |
|
| |
|
|
|
|
| |
int13_boot() now does its own segment register save and restore, ready
for the removal of segment register restoration from the libkir
generic code.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Ignore carry flag for INT 15,88; the Ralf Brown interrupt list says
that CF is unreliable for this call.
|
| |
|
|
| |
completely.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the only one we actually use). This allows REAL_EXEC fragments to
contain proper references to constraints (e.g. "%w0"), rather than having
to force the use of specific registers.
Note that the "num_constraints" parameter is now completely obsolete, and
that we can probably reduce the syntax to something like
__asm__ __volatile__ ( REAL_CODE ( "asm statements" )
: output constraints
: input constraints
: clobber );
which would look much more natural, and avoid the need to always specify
a clobber list.
Add userptr_t to libkir.h, to allow it to at least compile.
|
| |
|
|
| |
and creating a memory map that's easier to work with than the E820 map.
|
| |
|
|
|
| |
down to base memory, since it is now in the base-memory-resident
.text16 section).
|
| |
|
|
|
|
| |
usual __{text,data}16 trick work with arrays. gcc seems to accept the
__asm__ ( asmlabel ) only after the [] of the array declaration, not
before.
|
| |
|
|
|
|
|
|
|
|
| |
We now split e820 regions around ourselves, rather than just
truncating the e820 region. This avoids the worst-case scenario of
losing all memory over 4GB.
It's more important to get the memory map right now that we're
expecting to still be loaded when the OS starts in several situations
(e.g. Linux with UNDI driver, any OS with iSCSI/AoE boot, etc.).
|
| |
|
|
|
|
|
|
| |
Tidied up debug messages; the log now contains one line per INT 13
operation, looking like
INT 13,08 (80): Get drive parameters
INT 13,02 (80): Read: C/H/S 0/47/14 = LBA 0xb9e <-> 1084:0000 (count 106)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the kernel), which encapsulates the information needed to refer to an
external buffer. Under normal operation, this can just be a void *
equivalent, but under -DKEEP_IT_REAL it would be a segoff_t equivalent.
Use this concept to avoid the need for bounce buffers in int13.c,
which reduces memory usage and opens up the possibility of using
multi-sector reads.
Extend the block-device API and the SCSI block device implementation
to support multi-sector reads.
Update iscsi.c to use user buffers.
Move the obsolete portions of realmode.h to old_realmode.h.
MS-DOS now boots an order of magnitude faster over iSCSI (~10 seconds
from power-up to C:> prompt in bochs).
|
| |
|
|
| |
about format errors for %zX arguments.
|
| |
|
|
|
|
|
|
|
|
| |
typical build will now include 880 bytes of PCI support code, compared to
2327 bytes in Etherboot 5.4.
(There is a slight cost of around 5 extra bytes per access to a
non-constant config space address; this should be an overall win.
Driver-specific accesses will usually be to constant addresses, for
which there is no additional cost.)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Generic PCI code now handles 64-bit BARs correctly when setting
"membase"; drivers should need to call pci_bar_start() only if they want
to use BARs other than the first memory or I/O BAR.
Split rarely-used PCI functions out into pciextra.c.
Core PCI code is now 662 bytes (down from 1308 bytes in Etherboot 5.4).
284 bytes of this saving comes from the pci/pciextra split.
Cosmetic changes to lots of drivers (e.g. vendor_id->vendor in order to
match the names used in Linux).
|
| | |
|
| |
|
|
| |
linear calls to load the MS-DOS boot sector in my test setup.
|
| | |
|
| |
|
|
| |
don't conform to BBS (e.g. the one created by mkdosfs).
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
interrupts hooked.
|
| | |
|
| | |
|
| |
|
|
| |
devices).
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Add method for hooking real-mode interrupt vectors.
|
| |
|
|
|
|
|
| |
Use .text16.data section with "aw" attributes, to avoid section type
conflicts when placing both code and data into .text16.
Add __from_{text16,data16}.
|
| |
|
|
| |
Avoid optimisation errors under -fstrict-aliasing.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
between the low half stored in the static variable rm_sp, and the high
half stored on the prot_call() stack, because:
Just using the stack would screw up when a prot_call()ed routine
executes a real_call(); it would have no way to find the current top of
the RM stack.
Extending rm_sp to rm_esp would not be safe, because the guarantee that
rm_sp must return to the correct value by the time an external
real-mode call returns applies only to %sp, not to %esp.
|
| |
|
|
|
| |
interrupt vectors, for example, will be easiest to handle if placed in
.text16.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
from protected-mode code.
Set up %ds to point to .data16 in prot_to_real, so that code specified
via REAL_EXEC() and friends can access variables in .data16.
Move most real-mode librm variables from .text16 to .data16.
|
| |
|
|
|
| |
.data16. librm will need to supply "char *data16", i.e. the virtual
address of the start of .data16.
|
| |
|
|
|
|
|
| |
portions such as the stack) during the installation process.
init_fns() are called from main(). We need to think about initial
control flow some more.
|
| | |
|
| |
|
|
|
| |
install_prealloc. I *think* these will suffice for all the 16-bit
prefixes.
|
| |
|
|
|
| |
However, it's worth adding a .size directive so that objdump reports the
correct sizes for the code fragments.
|
| |
|
|
|
| |
advantage of the fact that we have to have a permanently-resident block
in base memory.
|