| ============ | 
 | Introduction | 
 | ============ | 
 |  | 
 | The firmware API enables kernel code to request files required | 
 | for functionality from userspace, the uses vary: | 
 |  | 
 | * Microcode for CPU errata | 
 | * Device driver firmware, required to be loaded onto device | 
 |   microcontrollers | 
 | * Device driver information data (calibration data, EEPROM overrides), | 
 |   some of which can be completely optional. | 
 |  | 
 | Types of firmware requests | 
 | ========================== | 
 |  | 
 | There are two types of calls: | 
 |  | 
 | * Synchronous | 
 | * Asynchronous | 
 |  | 
 | Which one you use vary depending on your requirements, the rule of thumb | 
 | however is you should strive to use the asynchronous APIs unless you also | 
 | are already using asynchronous initialization mechanisms which will not | 
 | stall or delay boot. Even if loading firmware does not take a lot of time | 
 | processing firmware might, and this can still delay boot or initialization, | 
 | as such mechanisms such as asynchronous probe can help supplement drivers. |