mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-24 02:05:01 +00:00
vboot: new streaming APIs
This patch adds three functions called from vboot into depthcharge to support NAND. NAND needs to stream rather than be accessed randomly in order to skip bad blocks. The intended flow from vboot1 is: - Read the GPT from a NAND disk handle, and depthcharge will silently fill it in with reads from from SPI - When a partition is selected, open a stream on the volume to access NAND - Sequentially read the NAND partition - Close the NAND stream This can be done multiple times when trying different partitions. The stream is associated with the GPT by reading/opening a stream from the same disk handle. This patch includes stub implementations by rspangler to translate the stream calls to block device calls. To reduce vboot code duplication, this flow will be done for all media types eventually, but a STREAMING flag is included to ease the transition. The draft depthcharge code can be found at https://chromium-review.googlesource.com/#/c/222312/ BUG=chromium:403432 TEST=stub implementations pass unit tests; together with upcoming depthcharge and vboot code, actually boots a kernel. This compiles by itself. BRANCH=none Change-Id: I660a89594390c72c2ef6ea2564367ce62bd90cf2 Reviewed-on: https://chromium-review.googlesource.com/221992 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Daniel Ehrenberg <dehrenberg@chromium.org> Tested-by: Randall Spangler <rspangler@chromium.org> Commit-Queue: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
committed by
chrome-internal-fetch
parent
aaa325727a
commit
5dc75d16b6
@@ -620,6 +620,51 @@ VbError_t VbExDiskRead(VbExDiskHandle_t handle, uint64_t lba_start,
|
||||
VbError_t VbExDiskWrite(VbExDiskHandle_t handle, uint64_t lba_start,
|
||||
uint64_t lba_count, const void *buffer);
|
||||
|
||||
/* Streaming read interface */
|
||||
typedef void *VbExStream_t;
|
||||
|
||||
/**
|
||||
* Open a stream on a disk
|
||||
*
|
||||
* @param handle Disk to open the stream against
|
||||
* @param lba_start Starting sector offset within the disk to stream from
|
||||
* @param lba_count Maximum extent of the stream in sectors
|
||||
* @param stream out-paramter for the generated stream
|
||||
*
|
||||
* @return Error code, or VBERROR_SUCCESS.
|
||||
*
|
||||
* lba_start and lba_count are subject to disk type-dependent alignment
|
||||
* restrictions. An invalid value will lead to an error code. In particular,
|
||||
* on raw NAND devices, lba_start and lba_count must be page-aligned after
|
||||
* subtracting the offset of the GPT.
|
||||
*/
|
||||
VbError_t VbExStreamOpen(VbExDiskHandle_t handle, uint64_t lba_start,
|
||||
uint64_t lba_count, VbExStream_t *stream_ptr);
|
||||
|
||||
/**
|
||||
* Read from a stream on a disk
|
||||
*
|
||||
* @param stream Stream to read from
|
||||
* @param bytes Number of bytes to read
|
||||
* @param buffer Destination to read into
|
||||
*
|
||||
* @return Error code, or VBERROR_SUCCESS. Failure to read as much data as
|
||||
* requested is an error.
|
||||
*
|
||||
* bytes is subject to disk type-dependent alignment restrictions. An invalid
|
||||
* value will lead to an error code. In particular, on raw NAND devices, bytes
|
||||
* must be a page multiple.
|
||||
*/
|
||||
VbError_t VbExStreamRead(VbExStream_t stream, uint32_t bytes, void *buffer);
|
||||
|
||||
/**
|
||||
* Close a stream
|
||||
*
|
||||
* @param stream Stream to close
|
||||
*/
|
||||
void VbExStreamClose(VbExStream_t stream);
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Display */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user