# US 10,503,518 B2 · Initializing hardware components using parallel driver loading and serial access granting

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,503,518 B2
- Document ID: US10503518B2
- Status: Granted
- Kind: B2
- Application number: 15/730,607
- Filed: 2017-10-11
- Published: 2019-04-11
- Granted: 2019-12-10
- Earliest claimed: 2017-10-11
- Assignees: Microsoft Technology Licensing, LLC
- Applicants: Microsoft Technology Licensing, LLC
- Inventors: Maria Cheng Lei; Vishal Jain
- Web page: https://patentgrep.com/patent/US10503518B2

## CPC

- G06F 9/4411: {Configuring for operating with peripheral devices; Loading of device drivers}
- G06F 9/4403: {Processor initialisation}
- G06F 9/4406: {Loading of operating system}
- G06F 13/105: {where the program performs an input/output emulation function}
- G06F 9/4401: Bootstrapping (security arrangements therefor G06F21/57)
- G06F 9/445: Program loading or initiating (bootstrapping G06F9/4401; security arrangements for program loading or initiating G06F21/57)
- G06F 9/54: Interprogram communication
- G06F 9/542: {Event management; Broadcasting; Multicasting; Notifications}
- G06F 2009/45579: {I/O management, e.g. providing access to device drivers or storage}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Techniques are described herein that are capable of initializing hardware components by loading drivers in parallel and granting the drivers access to the hardware components serially. For instance, a controller may serve as an intermediary between the drivers and the hardware components to synchronize access of the drivers to the respective hardware components. The controller may include software and hardware. The software may program the hardware to grant the drivers access to the respective hardware components serially based at least in part on an event that is capable of being associated with one driver at a time. Accordingly, access of the drivers to the respective hardware components may be granted serially, even though the drivers have been loaded in parallel.

## Claims

### Claim 1

A system comprising:
a plurality of hardware components;
a memory storing an operating system;
one or more processors configured to execute the operating system,
the operating system configured to load a plurality of software drivers, which correspond to the plurality of respective hardware components, in parallel based at least in part on the plurality of hardware components being a same hardware component type; and
a computer-readable medium storing instructions that, when executed, cause access of the software drivers to the respective hardware components to be controlled by causing requests to be serially provided from the respective software drivers to the respective hardware components in response to the software drivers being loaded, the requests requesting initiation of communication with the respective hardware components.

### Claim 2 (depends on 1)

The system of claim 1, wherein the operating system is further configured to create a designated event to be utilized by the software drivers to facilitate initialization of the respective hardware components, the designated event being useable by one of the software drivers at a time; and
wherein the instructions, when executed, cause the requests to be serially provided during respective periods of time during which the respective software drivers use the designated event.

### Claim 3 (depends on 2)

The system of claim 2, wherein the operating system is configured to remove a static load-time dependency associated with the software drivers to enable the software drivers to be loaded in parallel.

### Claim 4 (depends on 1)

The system of claim 1, wherein the instructions, when executed, generate second instructions to program circuitry to serially provide the requests to the respective hardware components based at least in part on the second instructions in response to receipt of the requests from the respective software drivers.

### Claim 5 (depends on 1)

The system of claim 1, further comprising:
a plurality of second hardware components;
wherein the operating system is configured to load a plurality of second software drivers serially to accommodate a static load-time dependency associated with the plurality of second software drivers, the plurality of second software drivers corresponding to the plurality of respective second hardware components.

### Claim 6 (depends on 5)

The system of claim 5, wherein a first hardware component type of the plurality of hardware components and a second hardware component type of the plurality of second hardware components are same.

### Claim 7 (depends on 1)

The system of claim 1, wherein the plurality of hardware components is a plurality of respective cameras; and
wherein the instructions, when executed, cause the access of the software drivers to the respective cameras to be controlled by causing the requests to be serially provided from the respective software drivers to the respective cameras.

### Claim 8 (depends on 1)

The system of claim 1, further comprising:
a plurality of second hardware components;
wherein the operating system is further configured to load a plurality of second software drivers, which correspond to the plurality of respective second hardware components, in parallel based at least in part on the plurality of second hardware components being a same second hardware component type;
wherein the instructions, when executed, cause access of the second software drivers to the respective second hardware components to be controlled by causing second requests to be serially provided from the respective second software drivers to the respective second hardware components in response to the plurality of second software drivers being loaded, the second requests requesting initiation of communication with the respective second hardware components; and
wherein the instructions, when executed, allow a request from a software driver of the plurality of software drivers to be provided to a respective hardware component of the plurality of hardware components in parallel with a second request from a second software driver of the plurality of second software drivers being provided to a respective second hardware component of the plurality of second hardware components.

### Claim 9 (depends on 8)

The system of claim 8, wherein the plurality of hardware components are a first hardware component type; and
wherein the plurality of second hardware components are a second hardware component type that is different from the first hardware component type.

### Claim 10 (depends on 8)

The system of claim 8, wherein the operating system is configured to load the plurality of software drivers in parallel with the plurality of second software drivers.

### Claim 11

A method performed during initialization of a computing device, the method comprising:
loading a plurality of software drivers of the computing device, which correspond to a plurality of respective hardware components of the computing device, in parallel based at least in part on the hardware components being a same hardware component type; and
controlling access of the software drivers to the respective hardware components by serially providing requests from the respective software drivers to the respective hardware components in response to loading the software drivers, the requests requesting initiation of communication with the respective hardware components.

### Claim 12 (depends on 11)

The method of claim 11, further comprising:
removing a static load-time dependency associated with the software drivers to enable the loading of the software drivers in parallel.

### Claim 13 (depends on 11)

The method of claim 11, further comprising:
creating a designated event that is capable of being assigned to one of the software drivers at a time;
wherein serially providing the requests comprises:
serially providing the requests during respective periods of time during which the designated event is assigned to the respective software drivers.

### Claim 14 (depends on 11)

The method of claim 11, wherein serially providing the requests comprises:
receiving the requests from the respective software drivers by the one or more processors; and
programming circuitry by the one or more processors to cause the circuitry to serially provide the requests to the respective hardware components.

### Claim 15 (depends on 11)

The method of claim 11, further comprising:
loading a second plurality of software drivers of the computing device serially to accommodate a static load-time dependency associated with the second plurality of software drivers.

### Claim 16 (depends on 15)

The method of claim 15, wherein a first hardware component type of the plurality of hardware components and a second hardware component type of a second plurality of hardware components to which the plurality of respective software drivers correspond are same.

### Claim 17 (depends on 11)

The method of claim 11, wherein the plurality of software drivers is a plurality of first software drivers and the plurality of hardware components is a plurality of first hardware components;
wherein controlling the access comprises:
causing first circuitry to control the access of the first software drivers to the respective first hardware components;
wherein the method further comprises:
loading a plurality of second software drivers of the computing device, which correspond to a plurality of respective second hardware components of the computing device, in parallel based at least in part on the plurality of second hardware components being a same second hardware component type; and
causing second circuitry to control access of the second software drivers to the respective second hardware components by causing second requests to be provided from the respective second software drivers to the respective second hardware components in response to the plurality of second software drivers being loaded, the second requests requesting initiation of communication with the respective second hardware components; and
wherein a request from a specified software driver that is included in the plurality of first software drivers is caused to be provided to a specified hardware component that is included in the plurality of first hardware components by the first circuitry in parallel with a second request from a designated software driver that is included in the plurality of second software drivers being caused to be provided to a designated hardware component that is included in the plurality of second hardware components by the second circuitry.

### Claim 18 (depends on 17)

The method of claim 17, wherein the plurality of first hardware components are a first hardware component type; and
wherein the plurality of second hardware components are a second hardware component type that is different from the first hardware component type.

### Claim 19 (depends on 17)

The method of claim 17, wherein loading the plurality of first software drivers and loading the plurality of second software drivers are performed in parallel.

### Claim 20

A system comprising:
memory;
one or more processors coupled to the memory, the one or more processors configured to:
load a plurality of software drivers, which correspond to a plurality of respective hardware components, in parallel during boot-up of the system based at least in part on the plurality of hardware components being a same hardware component type; and
a computer-readable medium storing instructions that, when executed, cause access of the software drivers to the respective hardware components to be controlled by causing requests to be serially provided from the respective software drivers to the respective hardware components during the boot-up of the system in response to the plurality of software drivers being loaded during the boot-up of the system, the requests requesting initiation of communication with the respective hardware components.
