diff --git a/docs/hardware.md b/docs/hardware.md new file mode 100644 index 0000000..ec22de3 --- /dev/null +++ b/docs/hardware.md @@ -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 diff --git a/docs/network.md b/docs/network.md new file mode 100644 index 0000000..b3caec8 --- /dev/null +++ b/docs/network.md @@ -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 diff --git a/docs/timeline.md b/docs/timeline.md new file mode 100644 index 0000000..9d550a6 --- /dev/null +++ b/docs/timeline.md @@ -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