summaryrefslogtreecommitdiff
path: root/include/cbfs.h
diff options
context:
space:
mode:
authorGabe Black <gabeblack@chromium.org>2011-07-27 22:15:03 -0700
committerSimon Glass <sjg@chromium.org>2011-08-29 10:59:18 -0700
commit41558b3e202319fc32634a5ac81aeb258caa3dd6 (patch)
treedd04efcb6a63b6d2b525c5ba94becdc2fc404cd4 /include/cbfs.h
parent5136f6ff6f002f7ad9c481e62b3ca7c4ce2edcf4 (diff)
Refactor the CBFS driver so that it's easier to use programmatically
This change refactors the implementation of the CBFS driver so that it can be used effectively both from the command line and programmatically from within u-boot. BUG=chrome-os-partner:4993 TEST=Built and booted on Alex. Verified that the CBFS commands still behaved correctly. Change-Id: I97720828e282261f69479979d7d0c2c7d193c53f Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: http://gerrit.chromium.org/gerrit/4916 Reviewed-by: Gabe Black <gabeblack@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org>
Diffstat (limited to 'include/cbfs.h')
-rw-r--r--include/cbfs.h114
1 files changed, 100 insertions, 14 deletions
diff --git a/include/cbfs.h b/include/cbfs.h
index 7a4d0c65500..d74759646f3 100644
--- a/include/cbfs.h
+++ b/include/cbfs.h
@@ -23,39 +23,125 @@
#ifndef __CBFS_H
#define __CBFS_H
+#include <compiler.h>
+
+typedef enum CbfsResult {
+ CBFS_SUCCESS = 0,
+ CBFS_NOT_INITIALIZED,
+ CBFS_BAD_HEADER,
+ CBFS_BAD_FILE,
+ CBFS_FILE_NOT_FOUND
+} CbfsResult;
+
+typedef enum CbfsFileType {
+ CBFS_TYPE_STAGE = 0x10,
+ CBFS_TYPE_PAYLOAD = 0x20,
+ CBFS_TYPE_OPTIONROM = 0x30,
+ CBFS_TYPE_BOOTSPLASH = 0x40,
+ CBFS_TYPE_RAW = 0x50,
+ CBFS_TYPE_VSA = 0x51,
+ CBFS_TYPE_MBI = 0x52,
+ CBFS_TYPE_MICROCODE = 0x53,
+ CBFS_COMPONENT_CMOS_DEFAULT = 0xaa,
+ CBFS_COMPONENT_CMOS_LAYOUT = 0x01aa
+} CbfsFileType;
+
+typedef struct CbfsHeader {
+ u32 magic;
+ u32 version;
+ u32 romSize;
+ u32 bootBlockSize;
+ u32 align;
+ u32 offset;
+ u32 pad[2];
+} __attribute__((packed)) CbfsHeader;
+
+struct CbfsCacheNode;
+typedef const struct CbfsCacheNode *CbfsFile;
+
+extern CbfsResult file_cbfs_result;
+
+/*
+ * Return a string describing the most recent error condition.
+ *
+ * @return A pointer to the constant string.
+ */
+const char *file_cbfs_error(void);
+
/*
* Initialize the CBFS driver and load metadata into RAM.
*
* @param end_of_rom Points to the end of the ROM the CBFS should be read
* from.
+ */
+void file_cbfs_init(uintptr_t end_of_rom);
+
+/*
+ * Get the header structure for the current CBFS.
*
- * @return Zero on success, non-zero on failure
+ * @return A pointer to the constant structure, or NULL if there is none.
*/
-int file_cbfs_init(uintptr_t end_of_rom);
+const CbfsHeader *file_cbfs_get_header(void);
/*
- * Read a file from CBFS into RAM
+ * Get a handle for the first file in CBFS.
*
- * @param filename The name of the file to read.
- * @param buffer Where to read it into memory.
+ * @return A handle for the first file in CBFS, NULL on error.
+ */
+CbfsFile file_cbfs_get_first(void);
+
+/*
+ * Get a handle to the file after this one in CBFS.
*
- * @return If positive or zero, the number of characters read. If negative, an
- * error occurred.
+ * @param file A pointer to the handle to advance.
*/
-long file_cbfs_read(const char *filename, void *buffer, unsigned long maxsize);
+void file_cbfs_get_next(CbfsFile *file);
/*
- * List the files names, types, and sizes in the current CBFS.
+ * Find a file with a particular name in CBFS.
+ *
+ * @param name The name to search for.
*
- * @return Zero on success, non-zero on failure.
+ * @return A handle to the file, or NULL on error.
*/
-int file_cbfs_ls(void);
+CbfsFile file_cbfs_find(const char *name);
/*
- * Print information from the CBFS header.
+ * Get the name of a file in CBFS.
*
- * @return Zero on success, non-zero on failure.
+ * @param file The handle to the file.
+ *
+ * @return The name of the file, NULL on error.
+ */
+const char *file_cbfs_name(CbfsFile file);
+
+/*
+ * Get the size of a file in CBFS.
+ *
+ * @param file The handle to the file.
+ *
+ * @return The size of the file, zero on error.
+ */
+u32 file_cbfs_size(CbfsFile file);
+
+/*
+ * Get the type of a file in CBFS.
+ *
+ * @param file The handle to the file.
+ *
+ * @return The type of the file, zero on error.
+ */
+u32 file_cbfs_type(CbfsFile file);
+
+/*
+ * Read a file from CBFS into RAM
+ *
+ * @param file A handle to the file to read.
+ * @param buffer Where to read it into memory.
+ *
+ * @return If positive or zero, the number of characters read. If negative, an
+ * error occurred.
*/
-int file_cbfs_fsinfo(void);
+long file_cbfs_read(CbfsFile file, void *buffer, unsigned long maxsize);
#endif /* __CBFS_H */