]> git.ipfire.org Git - thirdparty/u-boot.git/blob - include/ubispl.h
common: Drop bootstage.h from common header
[thirdparty/u-boot.git] / include / ubispl.h
1 /* SPDX-License-Identifier: GPL 2.0+ OR BSD-3-Clause */
2 /*
3 * Copyright (c) Thomas Gleixner <tglx@linutronix.de>
4 */
5 #ifndef __UBOOT_UBISPL_H
6 #define __UBOOT_UBISPL_H
7
8 #define UBI_VOL_NAME_MAX 127
9
10 /*
11 * The following CONFIG options are relevant for UBISPL
12 *
13 * #define CONFIG_SPL_UBI_MAX_VOL_LEBS 256
14 *
15 * Defines the maximum number of logical erase blocks per loadable
16 * (static) volume to size the ubispl internal arrays.
17 *
18 * #define CONFIG_SPL_UBI_MAX_PEB_SIZE (256*1024)
19 *
20 * Defines the maximum physical erase block size to size the fastmap
21 * buffer for ubispl.
22 *
23 * #define CONFIG_SPL_UBI_MAX_PEBS 4096
24 *
25 * Define the maximum number of physical erase blocks to size the
26 * ubispl internal arrays.
27 *
28 * #define CONFIG_SPL_UBI_VOL_IDS 8
29 *
30 * Defines the maximum number of volumes in which UBISPL is
31 * interested. Limits the amount of memory for the scan data and
32 * speeds up the scan process as we simply ignore stuff which we dont
33 * want to load from the SPL anyway. So the volumes which can be
34 * loaded in the above example are ids 0 - 7
35 */
36
37 /*
38 * The struct definition is in drivers/mtd/ubispl/ubispl.h. It does
39 * not fit into the BSS due to the large buffer requirement of the
40 * upstream fastmap code. So the caller of ubispl_load_volumes needs
41 * to hand in a pointer to a free memory area where ubispl will place
42 * its data. The area is not required to be initialized.
43 */
44 struct ubi_scan_info;
45
46 typedef int (*ubispl_read_flash)(int pnum, int offset, int len, void *dst);
47
48 /**
49 * struct ubispl_info - description structure for fast ubi scan
50 * @ubi: Pointer to memory space for ubi scan info structure
51 * @peb_size: Physical erase block size
52 * @vid_offset: Offset of the VID header
53 * @leb_start: Start of the logical erase block, i.e. offset of data
54 * @peb_count: Number of physical erase blocks in the UBI FLASH area
55 * aka MTD partition.
56 * @peb_offset: Offset of PEB0 in the UBI FLASH area (aka MTD partition)
57 * to the real start of the FLASH in erase blocks.
58 * @fastmap: Enable fastmap attachment
59 * @read: Read function to access the flash
60 */
61 struct ubispl_info {
62 struct ubi_scan_info *ubi;
63 u32 peb_size;
64 u32 vid_offset;
65 u32 leb_start;
66 u32 peb_count;
67 u32 peb_offset;
68 int fastmap;
69 ubispl_read_flash read;
70 };
71
72 /**
73 * struct ubispl_load - structure to describe a volume to load
74 * @vol_id: Volume id
75 * @load_addr: Load address of the volume
76 */
77 struct ubispl_load {
78 int vol_id;
79 #ifdef CONFIG_SPL_UBI_LOAD_BY_VOLNAME
80 u32 name_len;
81 char name[UBI_VOL_NAME_MAX + 1];
82 #endif
83 void *load_addr;
84 };
85
86 /**
87 * ubispl_load_volumes - Scan flash and load volumes
88 * @info: Pointer to the ubi scan info structure
89 * @lovls: Pointer to array of volumes to load
90 * @nrvols: Array size of @lovls
91 */
92 int ubispl_load_volumes(struct ubispl_info *info,
93 struct ubispl_load *lvols, int nrvols);
94
95 #endif