uboot/include/ubispl.h
<<
>>
Prefs
   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 */
  44struct ubi_scan_info;
  45
  46typedef 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 */
  61struct 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 */
  77struct 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 */
  92int ubispl_load_volumes(struct ubispl_info *info,
  93                        struct ubispl_load *lvols, int nrvols);
  94
  95#endif
  96