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