"Das U-Boot" Source Tree
at master 105 lines 3.1 kB view raw
1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright (c) 2023 Addiva Elektronik 4 * Author: Tobias Waldekranz <tobias@waldekranz.com> 5 */ 6 7#ifndef _BLKMAP_H 8#define _BLKMAP_H 9 10#include <dm/lists.h> 11 12/** 13 * struct blkmap - Block map 14 * 15 * Data associated with a blkmap. 16 * 17 * @label: Human readable name of this blkmap 18 * @blk: Underlying block device 19 * @slices: List of slices associated with this blkmap 20 */ 21struct blkmap { 22 char *label; 23 struct udevice *blk; 24 struct list_head slices; 25}; 26 27/** 28 * blkmap_map_linear() - Map region of other block device 29 * 30 * @dev: Blkmap to create the mapping on 31 * @blknr: Start block number of the mapping 32 * @blkcnt: Number of blocks to map 33 * @lblk: The target block device of the mapping 34 * @lblknr: The start block number of the target device 35 * Returns: 0 on success, negative error code on failure 36 */ 37int blkmap_map_linear(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, 38 struct udevice *lblk, lbaint_t lblknr); 39 40/** 41 * blkmap_map_mem() - Map region of memory 42 * 43 * @dev: Blkmap to create the mapping on 44 * @blknr: Start block number of the mapping 45 * @blkcnt: Number of blocks to map 46 * @addr: The target memory address of the mapping 47 * Returns: 0 on success, negative error code on failure 48 */ 49int blkmap_map_mem(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, 50 void *addr); 51 52/** 53 * blkmap_map_pmem() - Map region of physical memory 54 * 55 * Ensures that a valid physical to virtual memory mapping for the 56 * requested region is valid for the lifetime of the mapping, on 57 * architectures that require it (sandbox). 58 * 59 * @dev: Blkmap to create the mapping on 60 * @blknr: Start block number of the mapping 61 * @blkcnt: Number of blocks to map 62 * @paddr: The target physical memory address of the mapping 63 * Returns: 0 on success, negative error code on failure 64 */ 65int blkmap_map_pmem(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, 66 phys_addr_t paddr); 67 68/** 69 * blkmap_from_label() - Find blkmap from label 70 * 71 * @label: Label of the requested blkmap 72 * Returns: A pointer to the blkmap on success, NULL on failure 73 */ 74struct udevice *blkmap_from_label(const char *label); 75 76/** 77 * blkmap_create() - Create new blkmap 78 * 79 * @label: Label of the new blkmap 80 * @devp: If not NULL, updated with the address of the resulting device 81 * Returns: 0 on success, negative error code on failure 82 */ 83int blkmap_create(const char *label, struct udevice **devp); 84 85/** 86 * blkmap_destroy() - Destroy blkmap 87 * 88 * @dev: The blkmap to be destroyed 89 * Returns: 0 on success, negative error code on failure 90 */ 91int blkmap_destroy(struct udevice *dev); 92 93/** 94 * blkmap_create_ramdisk() - Create new ramdisk with blkmap 95 * 96 * @label: Label of the new blkmap 97 * @image_addr: Target memory start address of this mapping 98 * @image_size: Target memory size of this mapping 99 * @devp: Updated with the address of the created blkmap device 100 * Returns: 0 on success, negative error code on failure 101 */ 102int blkmap_create_ramdisk(const char *label, ulong image_addr, ulong image_size, 103 struct udevice **devp); 104 105#endif /* _BLKMAP_H */