How Windows 98 Handled USB Hub Hierarchies

Microsoft Windows 98 was one of the earliest consumer operating systems to provide native, robust support for the Universal Serial Bus (USB) standard. Operating on a tiered-star topology, Windows 98 managed USB hub device hierarchies using its newly introduced Windows Driver Model (WDM) architecture. The operating system navigated the logical tree by coordinating between host controller drivers, the USB bus driver, and the hub driver to dynamically enumerate devices, assign addresses, enforce topology depth limits, and track power allocations from the root hub down to individual endpoints.

The USB Driver Architecture

Windows 98 managed the USB hierarchy through a layered driver stack built on the WDM framework:

  • Host Controller Driver (UHCD.SYS or OPENHCI.SYS): Interfaced directly with the physical hardware, managing either Universal Host Controller Interface (UHCI, primarily Intel/VIA) or Open Host Controller Interface (OHCI, primarily Compaq/ALi/SiS) chipsets.
  • USB Bus Driver (USBD.SYS): Provided core bus-level abstraction, address assignments, and standardized communication interfaces.
  • Hub Class Driver (USBHUB.SYS): Managed hub functionality, monitoring downstream ports for state changes, managing hub configuration, and initiating the enumeration sequence for newly attached hardware.

Tiered-Star Topology and Hierarchical Limits

USB organizes hardware in a tiered-star topology, where hubs act as wiring concentrators. Windows 98 strictly enforced the USB 1.1 hardware specifications across this hierarchy:

  • Tier Limitations: The USB standard permits a maximum tier depth of seven levels. The Host Controller and its integrated Root Hub occupy Tier 1, while terminal functions typically sit at the bottom. Intermediate tiers consist of external hubs. Because compound or composite devices consume a tier for their internal hub, Windows 98 allowed a maximum cascading depth of five external hub layers between the root hub and a terminal device.
  • Device Addressing: The bus driver maintained an addressing pool supporting up to 127 unique device addresses per host controller, with address 0 reserved for devices currently undergoing enumeration.

The Enumeration and Tree Construction Process

When a user connected an external hub or device in Windows 98, the hierarchy was updated dynamically through a step-by-step enumeration routine:

  1. State Change Detection: The parent hub (either the Root Hub or an already established external hub) detected a voltage shift on the downstream D+ or D- data lines, signaling an attached device.
  2. Notification: The hub notified USBHUB.SYS via an interrupt transfer that a port status change had occurred.
  3. Port Reset and Addressing: The hub driver issued a port reset command. The attached hardware responded to default address 0. Windows 98 immediately assigned a unique bus address (1 through 127) to avoid collisions with subsequent connections.
  4. Descriptor Querying: The operating system requested the standard Device Descriptor and Configuration Descriptors. If the attached device identified itself as a hub (class code 09h), Windows loaded an additional instance of USBHUB.SYS to manage that node.
  5. PnP Node Creation: For every port on the newly recognized hub, the driver exposed a Physical Device Object (PDO) to the Windows 98 Plug and Play (PnP) subsystem, establishing a distinct branch in the internal device tree.

Visual and Logical Mapping in Device Manager

In the Windows 98 Device Manager, this hierarchy was exposed hierarchically when viewing devices by connection:

  • PCI Bus
    • Universal Host Controller
      • USB Root Hub
        • Generic USB Hub (External Hub)
          • USB Composite Device / Peripheral

Each parent hub maintained status registers for its downstream ports, effectively serving as an intermediary router for configuration packets originating from the host controller.

Power and Bandwidth Allocation Across the Tree

Windows 98 also monitored hierarchical constraints regarding power distribution and bus bandwidth:

  • Power Tracking: The operating system distinguished between bus-powered hubs (drawing a maximum of 500mA from an upstream port and supplying only 100mA per downstream port) and self-powered hubs (utilizing an external power supply). Windows 98 prevented the cascading of a bus-powered hub into another bus-powered hub to protect against voltage drops, alerting the user via a system dialog if power limits were exceeded.
  • Bandwidth Management: The USB 1.1 bus shared a total bandwidth pool of 12 Mbps (Full Speed) or 1.5 Mbps (Low Speed). The Windows 98 scheduler tracked bandwidth allocations across the tree, ensuring that isochronous devices (such as USB audio or early webcams) did not consume more than the reserved 90% periodic transfer limit of the parent controller's pipeline.