1/*
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
9struct udevice;
10
11/**
12 * 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 */
34struct device_plat {
35	struct phandle_part phandlepart;
36	char *mtdpart;
37	char *ubivol;
38};
39
40/**
41 * request_firmware_into_buf - Load firmware into a previously allocated buffer.
42 * @dev: An instance of a driver.
43 * @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.
47 *
48 * The firmware is loaded directly into the buffer pointed to by @buf.
49 *
50 * Return: Size of total read, negative value when error.
51 */
52int request_firmware_into_buf(struct udevice *dev,
53			      const char *name,
54			      void *buf, size_t size, u32 offset);
55
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);
67#endif
68