106 Commits

Author SHA1 Message Date
Martin Whitaker
13efd906f1 Guard against an AP starting more than once. 2022-02-03 19:48:27 +00:00
Martin Whitaker
e37fbbd429 Set stack alignment to 16 bytes.
This needs to be done in the ldscripts.
2022-02-02 18:23:23 +00:00
Martin Whitaker
1888f5c611 Add change to tests/test.c missed in commit dcac5270. 2022-02-02 15:33:25 +00:00
Martin Whitaker
7acb81e302 Fix assembler warning about unsized bts instruction. 2022-02-02 12:52:44 +00:00
Martin Whitaker
dcac527068 Don't make assumptions about usable memory.
When using a legacy BIOS, the memory regions used by the BIOS are well
defined. This is not the case when using a UEFI BIOS. So include the
stack area in the BSS so the loader knows how much memory to allocate,
and check we have space to relocate the program to either low or high
memory.

There are still some assumptions in the USB driver code that need to
be fixed.
2022-02-02 12:20:39 +00:00
Martin Whitaker
fb0f1a7fe5 Don't start APs until after dummy runs have finished.
This should significantly improve startup time on machines with many
cores, as the barriers become no-ops during the dummy runs.
2022-02-01 23:50:49 +00:00
Martin Whitaker
fd141c59c7 Use "CPU core" in preference to "CPU" in comments. 2022-02-01 15:42:44 +00:00
Martin Whitaker
da0d2a9fc3 The apic_id_to_cpu_num[] map needs to be unsigned to support > 256 cores. 2022-02-01 15:40:52 +00:00
Martin Whitaker
ccab9ab081 Fix operation with a subset of CPU cores enabled.
The last commit removed too much - there are a couple of places where
we need to use a virtual CPU number rather than a physical CPU number.
2022-02-01 15:38:06 +00:00
Martin Whitaker
16d55b7dad Remove distinction between physical and virtual CPUs.
This is no longer needed, now we can display as many CPUs as we can
physically handle.
2022-01-31 22:59:14 +00:00
Martin Whitaker
4100a44b12 Properly protect the startup stack with a mutex.
Because we start the APs sequentially, it is unlikely they will coincide
for the brief period that they use the temporary startup stack, but we
should guard against it. This allows us to remove the mutex around the
restart of each AP when relocating, which should improve test times.
2022-01-31 21:54:24 +00:00
Martin Whitaker
17093a96f9 Optimise the AP startup code to reduce the startup delay. 2022-01-31 19:47:32 +00:00
Martin Whitaker
7c3e7d536c Allow cursor keys to be used in CPU mode and error mode config menus. 2022-01-30 15:47:17 +00:00
Martin Whitaker
e13b8bbb83 Increase config pop-up window width.
Also add more constant definitions to better parameterise the layout.
2022-01-30 15:37:13 +00:00
Martin Whitaker
f348add314 Remap numeric keypad to cursor keys. 2022-01-30 15:18:25 +00:00
Martin Whitaker
4589c7dad4 Recognise cursor keys and map them to 'l', 'r', 'u', 'd'. 2022-01-30 15:12:42 +00:00
Martin Whitaker
151870cc0b Display enabled CPUs as a scrollable list in the config menu.
This removes a constraint on the number of CPU cores we can support.
2022-01-30 15:12:04 +00:00
Martin Whitaker
ab278566e4 Bypass start barriers during dummy runs.
This should speed up the dummy runs on distributed SMP systems.
2022-01-29 17:11:46 +00:00
Martin Whitaker
c5e9fa4e18 Increase maximum number of APs to 256. 2022-01-29 16:13:05 +00:00
Martin Whitaker
ed02a3baef Support display of more than 32 CPU cores in the config menu. 2022-01-29 16:00:33 +00:00
Martin Whitaker
fe4374e818 Allocate the main program stacks after the loaded program.
After we relocate the program, we restart it. So there is no need to copy
over the old stack contents. This allows us to increase the maximum number
of APs without a run time overhead. The maximum number of APs will still
be limited by the size of low memory.
2022-01-29 15:17:00 +00:00
Martin Whitaker
73bfc1878a Blank the full field when displaying the active CPU core. 2022-01-29 15:06:21 +00:00
Martin Whitaker
f04cb1adb6 Make spinner rotate at a constant speed. 2022-01-29 15:06:21 +00:00
Martin Whitaker
3c69cd07b7 Guard against missing TSC and divide by zero in elapsed time calculations. 2022-01-29 15:06:21 +00:00
Martin Whitaker
09890bf0cd Support more than 32 CPU cores in main display.
Either one core is active or all enabled cores are active, so we don't
really need a separate spinner for each core.
2022-01-29 15:06:05 +00:00
Martin Whitaker
4791206bbd Use consistent CPU sequencing mode abbreviations in config menu. 2022-01-28 21:57:39 +00:00
Martin Whitaker
01365ab2e7 A few more code tweaks and comment typo fixes in the EHCI driver. 2022-01-28 19:55:31 +00:00
Martin Whitaker
8509e3320a Minor code tweaks - no functional change. 2022-01-23 17:55:57 +00:00
Martin Whitaker
563c8a1ee7 Add support for EHCI USB controller. 2022-01-23 17:38:50 +00:00
Martin Whitaker
5b56d76e03 Minor fixes and refactoring in preparation for EHCI support. 2022-01-23 17:34:08 +00:00
Martin Whitaker
79ec174a82 Update known limitations in README, now USB hubs are supported. 2022-01-09 21:45:07 +00:00
Martin Whitaker
0fded3e321 Store pmem temporary arrays on the stack to reduce memory footprint.
Now we have more stack space available for the BSP during initialisation,
we no longer need to store the temporary data off stack.
2022-01-09 21:27:44 +00:00
Martin Whitaker
0aa1b1fa97 Rearrange stack space to reduce memory footprint.
The BSP only needs extra stack space during program initialisation. The APs
aren't running at that point, so by positioning the BSP stack above the AP
stacks, it can extend down into the AP stack space without causing any
problems.
2022-01-09 21:25:16 +00:00
Martin Whitaker
a454174f3f Fis startup stack address calculations. 2022-01-09 19:26:56 +00:00
Martin Whitaker
4400ec6f17 Rename usbkbd to usbhcd to better reflect the new design. 2022-01-08 23:14:50 +00:00
Martin Whitaker
52a87c5d40 Add support for USB hubs.
This refactors the USB driver code into a more object-oriented design,
with usbkbd.c being the base class and ohci.c and xhci.c being subclasses.
This makes the code that performs USB device enumeration independent of
the host controller.
2022-01-08 23:00:28 +00:00
Martin Whitaker
84da9f7553 Refactor USB driver code to prepare for supporting USB hubs. 2021-12-29 18:17:46 +00:00
Martin Whitaker
a4c62cae97 XHCI: don't scan USB3 ports - keyboards will only be found on USB2 ports. 2021-12-28 16:14:29 +00:00
Martin Whitaker
e5663fc8f9 Added more detail to the README. 2021-12-24 15:04:02 +00:00
Martin Whitaker
e19dc26e33 Fix markdown in README. 2021-12-24 00:21:12 +00:00
Martin Whitaker
5684d0bb7a Add boot command line options and keyboard selection to README. 2021-12-24 00:13:19 +00:00
Martin Whitaker
5d4a370692 Add grub-iso directoru to .gitignore. 2021-12-23 19:24:49 +00:00
Martin Whitaker
ea28112e08 Update the version number to show this is a development version. 2021-12-23 19:14:03 +00:00
Martin Whitaker
9785d8f8b9 Map USB controller registers into the reserved area of virtual memory.
This ensures they are accessible when the test is running, and if they
are physically mapped above 4GB.
2021-12-23 17:45:26 +00:00
Martin Whitaker
733919966d Add support for boot command line options. 2021-12-23 14:08:02 +00:00
Martin Whitaker
ad6c7d0455 Use F10 (or '0'), not ESC to exit menus.
This avoids accidentally rebooting by pressing the key too many times.
2021-12-23 11:11:42 +00:00
Martin Whitaker
d9fee4dcbb Flush caches between writing and verifying test data.
Mostly we write and read large chunks of data which will make it likely
that the data is no longer in the cache when we come to verify it. But
this is not always true, and in any case, we shouldn't rely on it.
2021-12-23 11:00:10 +00:00
Martin Whitaker
11c0c6c2f5 Use atomic memory read/write functions in tests.
This ensures compiler optimisations won't interfere with the tests.
2021-12-23 10:07:55 +00:00
Martin Whitaker
eb58a63ad4 XHCI: add device attach time delay after starting the controller. 2021-12-22 19:08:14 +00:00
Martin Whitaker
8069b8724b Initial support for native USB keyboard interface.
This adds support for USB keyboards connected directly to an OHCI
or XHCI controller.
2021-12-22 17:31:06 +00:00