Figuring out hardware, networking stuff, timelines. All planning.

master
James T. Martin 2020-07-15 10:33:56 -07:00
parent 0ef35c4653
commit a93d72ec30
Signed by: james
GPG Key ID: 4B7F3DA9351E577C
3 changed files with 167 additions and 0 deletions

107
docs/hardware.md Normal file
View File

@ -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

40
docs/network.md Normal file
View File

@ -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

20
docs/timeline.md Normal file
View File

@ -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