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