Modern USB Controllers On Win98 (and Up)

[Yeo Kheng Meng] has a problem: he likes Windows 98, but he also likes his 2020 ThinkPad, which only has an xHCI USB controller– you know, the kind needed for USB 3.0, something that post-dates Windows 98 by a full decade. Drivers? Finding none existed, he decided to do it himself, or at least guide the process of using  LLMs to produce drivers for Windows 98 and up.

Some of you just stopped reading, but can you blame him for making a demonic pact for this project? Driver development isn’t really a one-man show, especially as a part-time hobby project you’re not sure anyone else will ever use. If you do want to use it, you can find the code on GitHub.

It does work, though, he admits it might be buggy. Unlike purely vibe-coded projects, [Meng] intends to address bugs put forth in the repo, at least. If you want to know how he did it, check out the link to [Meng]’s blog– which is human-authored, we can tell– and the videos embedded therein. He demonstrates it working on a 2020 ThinkPad, which should be usable even with Windows 11, and another model from 2016– neither of which have any old-style USB ports. Older laptops might, while any desktop can just use a PCI card with a USB2.0 controller– or you can do like [Meng] did prior to this project, and use the PCI card via adapters. 

[Yeo Kheng Meng] evidently gets as much of a kick out of joining old and new as we do, like running DOS a modern ThinkPad X13, and running Slack on Windows 3.11 For Workgroups on a slightly-less-modern but still 21st Century Thinkpad T400.

The Thinkpad in question, with a Linux shell open on its screen, showing that the device mode has been successfully enabled

ThinkPad X1 Carbon Turned USB Device Through Relentless Digging

In what’s perhaps one of the most impressive laptop reverse engineering posts in recent memory, [Andrey Konovalov] brings us an incredibly detailed story of how he’s discovered and successfully enabled a USB device controller in a ThinkPad X1 Carbon equipped with a 6th gen Intel CPU.

If you ever wanted to peek at the dirty secrets of a somewhat modern-day Intel CPU-based system, this write-up spares you no detail, and spans dozens of abstraction layers — from Linux drivers and modifying NVRAM to custom USB cable building and BIOS chip flashing, digging deep into undocumented PCH registers for the dessert.

All [Andrey] wanted was to avoid tinkering with an extra Raspberry Pi. While using a PCIe connected device controller, he’s found a reference to intel_xhci_usb_sw-role-switch in Linux sysfs, and dove into a rabbit hole, where he discovered that the IP core used for the laptop’s USB ports has a ‘device’ mode that can be enabled. A dig through ACPI tables confirmed this, but also highlighted that the device is disabled in BIOS. What’s more, it turned out to be locked away behind a hidden menu. Experiments in unlocking that menu ensued, in particular when it comes to bypassing Intel Boot Guard, a mechanism that checks BIOS image signatures before boot.

Continue reading “ThinkPad X1 Carbon Turned USB Device Through Relentless Digging” →