Figuring out hardware, networking stuff, timelines. All planning.
parent
0ef35c4653
commit
a93d72ec30
|
@ -0,0 +1,107 @@
|
||||||
|
# Hardware
|
||||||
|
## Minimum viable product
|
||||||
|
* CPU: any x86_64
|
||||||
|
* Storage: NVMe
|
||||||
|
* Graphics: VGA
|
||||||
|
* PnP: PS/2 keyboard
|
||||||
|
* My laptop keyboard is represented as a PS/2 keyboard, so this is actual hardware!
|
||||||
|
|
||||||
|
## Very important
|
||||||
|
* PnP: Clock
|
||||||
|
* Sound: Intel HD Audio
|
||||||
|
* Network:
|
||||||
|
* QEMU: VirtIO network
|
||||||
|
* Physical:
|
||||||
|
* Qualcomm Atheros QCA6174 802.11ac
|
||||||
|
* USB wireless adapter
|
||||||
|
* I have a few of these. This would require USB support first obviously.
|
||||||
|
* RTL8153 Ethernet via Thunderbolt 3 dock
|
||||||
|
* Probably not a viable option because it'd require supporting my dock.
|
||||||
|
|
||||||
|
## Important
|
||||||
|
* PnP: PS/2 mouse
|
||||||
|
* USB:
|
||||||
|
* Controllers: xHCI
|
||||||
|
* Devices: HID, audio
|
||||||
|
* Graphics: Intel HD Graphics 630
|
||||||
|
* Not supported by QEMU.
|
||||||
|
|
||||||
|
## Less important
|
||||||
|
* USB devices: storage, bluetooth, hub
|
||||||
|
* Bluetooth devices: keyboard, mouse
|
||||||
|
* Thunderbolt 3: controller, bridge, NHI (what is this?)
|
||||||
|
* Not supported by QEMU.
|
||||||
|
|
||||||
|
## Unimportant
|
||||||
|
* CPU security mitigations (as listed by lscpu)
|
||||||
|
* Graphics: AMD Polaris 22 XL [Radeon RX Vega M GL]
|
||||||
|
* Not supported by QEMU.
|
||||||
|
* Not very important thanks to Intel HD graphics. I don't expect to be doing a lot of gaming!
|
||||||
|
* Graphics: VirtIO GPU
|
||||||
|
* Necessary to get better than VGA graphics on QEMU (I think?)
|
||||||
|
* Possibly easier than supporting real graphics cards?
|
||||||
|
* If this is true, maybe it'd be worth implementing first?
|
||||||
|
* Power management: ACPI
|
||||||
|
* USB devices:
|
||||||
|
* billboard
|
||||||
|
* To my understanding this is just an error reporting mechanism.
|
||||||
|
* MIDI over USB
|
||||||
|
* Not very useful without a good synthesizer (might be a fun toy anyway)
|
||||||
|
* Maybe not supported by QEMU?
|
||||||
|
* wacom
|
||||||
|
* Not very useful without a good drawing program
|
||||||
|
* webcam
|
||||||
|
* It's something I'd use in theory, at least.
|
||||||
|
|
||||||
|
## Very unimportant
|
||||||
|
Hardware I don't even have, but is very common and makes it on the wishlist at least.
|
||||||
|
|
||||||
|
* Storage: ACPI, SCSI & UAS, eSATA, ATAPI
|
||||||
|
* ACPI especially. Most drives aren't SSD drives!
|
||||||
|
* USB controllers: OHCI, UHCI, EHCI
|
||||||
|
* Probably not too difficult. I wouldn't be surprised if they end up getting implemented while working my way up to xHCI anyway.
|
||||||
|
* A computer with literally no USB 2.0 ports like mine is still pretty niche, probably!
|
||||||
|
* Network: USB ethernet & wireless adapters
|
||||||
|
* Good because any computer can use them.
|
||||||
|
|
||||||
|
## Don't care
|
||||||
|
Hardware I *do* have, but don't care about supporting for the foreseeable future.
|
||||||
|
|
||||||
|
* SD card reader
|
||||||
|
* Fingerprint reader
|
||||||
|
* Intel ME
|
||||||
|
|
||||||
|
## Needs research
|
||||||
|
* USB device family: billboard
|
||||||
|
* lsusb reports at least one but I don't know what it does
|
||||||
|
* USB:
|
||||||
|
* Microchip Technology, Inc. (formerly SMSC) USB5537B
|
||||||
|
* (totally empty): Pretty sure this is my USB drive. Don't know why it's shwoing up empty.
|
||||||
|
* Thunderbolt 3:
|
||||||
|
* I'm guessing I need to support all of these for my thunderbolt 3 dock to work,
|
||||||
|
but I don't actually know what does what, specifically.
|
||||||
|
* I'm pretty sure I don't need this for the ports to work as USB 3 ports. (And if it does, I'm fucked!!)
|
||||||
|
* PCI bridge: Intel Corporation JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] (rev 02)
|
||||||
|
* System peripheral: Intel Corporation JHL6540 Thunderbolt 3 NHI (C step) [Alpine Ridge 4C 2016] (rev 02)
|
||||||
|
* PCI bridge: Intel Corporation DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015]
|
||||||
|
* USB controller: Intel Corporation JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine Ridge 4C 2016] (rev 02)
|
||||||
|
* Does this need a different, non-xHCI driver?
|
||||||
|
* Apparently power-related:
|
||||||
|
* I'm not sure what drivers for these would actually do.
|
||||||
|
Am I supposed to read out data from them, or control them in some way, or..?
|
||||||
|
* I think I can probably get away with ignoring these for now.
|
||||||
|
* Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem
|
||||||
|
* Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem
|
||||||
|
* Memory controller: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller
|
||||||
|
* Apparently input-related:
|
||||||
|
* Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Serial IO I2C Controller
|
||||||
|
* I think this has to do with the touch screen and touch pad (I have 2 controllers shown)
|
||||||
|
* Might actually be worth implementing if it means freeing up a USB port until I get thunderbolt 3 working
|
||||||
|
* MIght actually be worth implementing if it means I can defer implementing USB entirely
|
||||||
|
* Don't know:
|
||||||
|
* SMBus: Intel Corporation 100 Series/C230 Series Chipset Family SMBus
|
||||||
|
* A bus controller obviously, but I don't know what uses this bus that I need to support.
|
||||||
|
* Non-VGA unclassified device: Intel Corporation 100 Series/C230 Series Chipset Family Integrated Sensor Hub
|
||||||
|
* kernel.org says this is some kind of co-processor but I don't know
|
||||||
|
if it's just optional to save power or if it's necessary to support some hardware,
|
||||||
|
and for that matter, what hardware it's actually applicable to
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Network
|
||||||
|
Protocols I need to support for a working network stack.
|
||||||
|
|
||||||
|
## Minimum Viable Product
|
||||||
|
* Link layer: Ethernet
|
||||||
|
* Internet layer: IPv6, ICMPv6
|
||||||
|
* Transport layer: TCP, UDP
|
||||||
|
* Application layer: DNS, HTTP/1.0
|
||||||
|
|
||||||
|
## Very important
|
||||||
|
* Link layer: 802.11ac, 802.11n, WPA2, WPA3
|
||||||
|
* Internet layer: IPv4, ICMP, IGMP
|
||||||
|
* Application layer: DHCP
|
||||||
|
|
||||||
|
## Important
|
||||||
|
* Application layer:
|
||||||
|
* TLS:
|
||||||
|
* Versions: 1.3
|
||||||
|
* Ciphers: AES GCM (128, 256), ChaCha20-Poly1305
|
||||||
|
* MACs: AEAD, HMAC-SHA256/384
|
||||||
|
* Certificates: RSA, EC
|
||||||
|
* Curves: secp512r1, secp384r1, secp256r1, x25519, ed25519, x448, ed448
|
||||||
|
* HTTPS
|
||||||
|
* IRCS
|
||||||
|
* DNS over HTTPS
|
||||||
|
|
||||||
|
## Less important
|
||||||
|
* Application layer:
|
||||||
|
* HTTP/2, ALPN
|
||||||
|
* TLS 1.2
|
||||||
|
* IMAP
|
||||||
|
* SMTP
|
||||||
|
* SSH
|
||||||
|
|
||||||
|
## Unimportant
|
||||||
|
* Transport layer: QUIC
|
||||||
|
* Application layer:
|
||||||
|
* HTTP/3
|
||||||
|
* TLS MACs: GOST 28147-89 IMIT, GOST R 34.11-94
|
||||||
|
* Other: HSTS + preloading, OCSP stapling, certificate transparency, session resumption
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Timeline
|
||||||
|
A tentative short-term timeline for what to do next.
|
||||||
|
|
||||||
|
## Leaving UEFI
|
||||||
|
* Transition from UEFI stdout to UEFI GOP
|
||||||
|
* Transition from UEFI GOP to real graphics drivers:
|
||||||
|
* VirtIO GPU
|
||||||
|
* Intel HD Graphics 630
|
||||||
|
* Transition from UEFI stdin to a PS/2 keyboard
|
||||||
|
* Transition from UEFI allocation to a custom allocator
|
||||||
|
* RTC support continues even after exiting UEFI boot services.
|
||||||
|
|
||||||
|
## Multiprocessing
|
||||||
|
* Support for basic relocatable executables
|
||||||
|
* Single-processor scheduler
|
||||||
|
* Multi-processor scheduling
|
||||||
|
|
||||||
|
## Accessing storage
|
||||||
|
* NVMe driver
|
||||||
|
* FAT32 support
|
Loading…
Reference in New Issue