blob: 5eb5b7ab4a105348ab5c0f944bad309c0cfeb01a [file] [log] [blame]
Tien Fong Chee62030002018-07-06 16:28:03 +08001/*
2 * Copyright (C) 2018 Intel Corporation <www.intel.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0
5 */
6#ifndef _FS_LOADER_H_
7#define _FS_LOADER_H_
8
Simon Glassc2848cc2020-07-19 10:15:38 -06009struct udevice;
Tien Fong Chee62030002018-07-06 16:28:03 +080010
11/**
Tien Fong Chee62030002018-07-06 16:28:03 +080012 * struct phandle_part - A place for storing phandle of node and its partition
13 *
14 * This holds information about a phandle of the block device, and its
15 * partition where the firmware would be loaded from.
16 *
17 * @phandle: Phandle of storage device node
18 * @partition: Partition of block device
19 */
20struct phandle_part {
21 u32 phandle;
22 u32 partition;
23};
24
25/**
26 * struct phandle_part - A place for storing all supported storage devices
27 *
28 * This holds information about all supported storage devices for driver use.
29 *
30 * @phandlepart: Attribute data for block device.
31 * @mtdpart: MTD partition for ubi partition.
32 * @ubivol: UBI volume-name for ubifsmount.
33 */
Simon Glass8a8d24b2020-12-03 16:55:23 -070034struct device_plat {
Tien Fong Chee62030002018-07-06 16:28:03 +080035 struct phandle_part phandlepart;
36 char *mtdpart;
37 char *ubivol;
38};
39
40/**
Tien Fong Chee62030002018-07-06 16:28:03 +080041 * request_firmware_into_buf - Load firmware into a previously allocated buffer.
Tien Fong Chee31a2cf12018-12-10 21:29:44 +080042 * @dev: An instance of a driver.
Tien Fong Chee62030002018-07-06 16:28:03 +080043 * @name: Name of firmware file.
44 * @buf: Address of buffer to load firmware into.
45 * @size: Size of buffer.
46 * @offset: Offset of a file for start reading into buffer.
Tien Fong Chee62030002018-07-06 16:28:03 +080047 *
Tien Fong Chee31a2cf12018-12-10 21:29:44 +080048 * The firmware is loaded directly into the buffer pointed to by @buf.
Tien Fong Chee62030002018-07-06 16:28:03 +080049 *
50 * Return: Size of total read, negative value when error.
51 */
Tien Fong Chee31a2cf12018-12-10 21:29:44 +080052int request_firmware_into_buf(struct udevice *dev,
Tien Fong Chee62030002018-07-06 16:28:03 +080053 const char *name,
Tien Fong Chee31a2cf12018-12-10 21:29:44 +080054 void *buf, size_t size, u32 offset);
Sean Anderson0998a202022-12-29 11:52:59 -050055
56/**
57 * get_fs_loader() - Get the chosen filesystem loader
58 * @dev: Where to store the device
59 *
60 * This gets a filesystem loader device based on the value of
61 * /chosen/firmware-loader. If no such property exists, it returns a
62 * firmware loader which is configured by environmental variables.
63 *
64 * Return: 0 on success, negative value on error
65 */
66int get_fs_loader(struct udevice **dev);
Tien Fong Chee62030002018-07-06 16:28:03 +080067#endif