blob: 0d6ea0329995981adc396fedb36bd6ab6ec8a625 [file] [log] [blame]
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -08001====================
2request_firmware API
3====================
4
5You would typically load firmware and then load it into your device somehow.
6The typical firmware work flow is reflected below::
7
8 if(request_firmware(&fw_entry, $FIRMWARE, device) == 0)
9 copy_fw_to_device(fw_entry->data, fw_entry->size);
10 release_firmware(fw_entry);
11
12Synchronous firmware requests
13=============================
14
15Synchronous firmware requests will wait until the firmware is found or until
16an error is returned.
17
18request_firmware
19----------------
Hans de Goededf9267f2018-04-08 18:06:21 +020020.. kernel-doc:: drivers/base/firmware_loader/main.c
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080021 :functions: request_firmware
22
Andres Rodriguez7dcc0132018-05-10 13:08:45 -070023firmware_request_nowarn
24-----------------------
25.. kernel-doc:: drivers/base/firmware_loader/main.c
26 :functions: firmware_request_nowarn
27
Hans de Goedee4c2c0f2020-01-15 17:35:48 +010028firmware_request_platform
29-------------------------
30.. kernel-doc:: drivers/base/firmware_loader/main.c
31 :functions: firmware_request_platform
32
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080033request_firmware_direct
34-----------------------
Hans de Goededf9267f2018-04-08 18:06:21 +020035.. kernel-doc:: drivers/base/firmware_loader/main.c
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080036 :functions: request_firmware_direct
37
38request_firmware_into_buf
39-------------------------
Hans de Goededf9267f2018-04-08 18:06:21 +020040.. kernel-doc:: drivers/base/firmware_loader/main.c
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080041 :functions: request_firmware_into_buf
42
43Asynchronous firmware requests
44==============================
45
46Asynchronous firmware requests allow driver code to not have to wait
47until the firmware or an error is returned. Function callbacks are
48provided so that when the firmware or an error is found the driver is
49informed through the callback. request_firmware_nowait() cannot be called
50in atomic contexts.
51
52request_firmware_nowait
53-----------------------
Hans de Goededf9267f2018-04-08 18:06:21 +020054.. kernel-doc:: drivers/base/firmware_loader/main.c
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080055 :functions: request_firmware_nowait
56
Luis R. Rodriguez5d42c962018-03-21 15:34:29 -070057Special optimizations on reboot
58===============================
59
60Some devices have an optimization in place to enable the firmware to be
61retained during system reboot. When such optimizations are used the driver
62author must ensure the firmware is still available on resume from suspend,
Andres Rodriguezb93815d2018-04-25 12:25:39 -040063this can be done with firmware_request_cache() instead of requesting for the
64firmware to be loaded.
Luis R. Rodriguez5d42c962018-03-21 15:34:29 -070065
66firmware_request_cache()
Andres Rodriguezb93815d2018-04-25 12:25:39 -040067------------------------
Hans de Goededf9267f2018-04-08 18:06:21 +020068.. kernel-doc:: drivers/base/firmware_loader/main.c
Luis R. Rodriguez5d42c962018-03-21 15:34:29 -070069 :functions: firmware_request_cache
70
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080071request firmware API expected driver use
72========================================
73
74Once an API call returns you process the firmware and then release the
75firmware. For example if you used request_firmware() and it returns,
76the driver has the firmware image accessible in fw_entry->{data,size}.
77If something went wrong request_firmware() returns non-zero and fw_entry
78is set to NULL. Once your driver is done with processing the firmware it
Randy Dunlap726b5bd2020-07-03 20:44:50 -070079can call release_firmware(fw_entry) to release the firmware image
Luis R. Rodriguez113ccc32016-12-16 03:10:36 -080080and any related resource.