cbfs: Add support for attributes
CBFS now supports attributes for things that cannot fit in the header as originally conceived. Add the structures for these. Also rename attributes_offset to something shorter, to ease code readability. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
326aae2589
commit
72ca485978
@ -129,7 +129,7 @@ static int file_cbfs_next_file(struct cbfs_priv *priv, void *start, int size,
|
|||||||
new_node->name = (char *)file_header +
|
new_node->name = (char *)file_header +
|
||||||
sizeof(struct cbfs_fileheader);
|
sizeof(struct cbfs_fileheader);
|
||||||
new_node->name_length = name_len;
|
new_node->name_length = name_len;
|
||||||
new_node->attributes_offset = header.attributes_offset;
|
new_node->attr_offset = header.attributes_offset;
|
||||||
|
|
||||||
step = header.len;
|
step = header.len;
|
||||||
if (step % align)
|
if (step % align)
|
||||||
|
@ -68,6 +68,43 @@ struct cbfs_fileheader {
|
|||||||
/* offset to struct cbfs_file_attribute or 0 */
|
/* offset to struct cbfs_file_attribute or 0 */
|
||||||
u32 attributes_offset;
|
u32 attributes_offset;
|
||||||
u32 offset;
|
u32 offset;
|
||||||
|
char filename[];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Depending on how the header was initialized, it may be backed with 0x00 or
|
||||||
|
* 0xff, so support both
|
||||||
|
*/
|
||||||
|
#define CBFS_FILE_ATTR_TAG_UNUSED 0
|
||||||
|
#define CBFS_FILE_ATTR_TAG_UNUSED2 0xffffffff
|
||||||
|
#define CBFS_FILE_ATTR_TAG_COMPRESSION 0x42435a4c
|
||||||
|
#define CBFS_FILE_ATTR_TAG_HASH 0x68736148
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The common fields of extended cbfs file attributes. Attributes are expected
|
||||||
|
* to start with tag/len, then append their specific fields
|
||||||
|
*/
|
||||||
|
struct cbfs_file_attribute {
|
||||||
|
u32 tag;
|
||||||
|
/* len covers the whole structure, incl. tag and len */
|
||||||
|
u32 len;
|
||||||
|
u8 data[0];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct cbfs_file_attr_compression {
|
||||||
|
u32 tag;
|
||||||
|
u32 len;
|
||||||
|
/* whole file compression format. 0 if no compression. */
|
||||||
|
u32 compression;
|
||||||
|
u32 decompressed_size;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct cbfs_file_attr_hash {
|
||||||
|
u32 tag;
|
||||||
|
u32 len;
|
||||||
|
u32 hash_type;
|
||||||
|
/* hash_data is len - sizeof(struct) bytes */
|
||||||
|
u8 hash_data[];
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct cbfs_cachenode {
|
struct cbfs_cachenode {
|
||||||
@ -77,7 +114,7 @@ struct cbfs_cachenode {
|
|||||||
u32 type;
|
u32 type;
|
||||||
u32 data_length;
|
u32 data_length;
|
||||||
u32 name_length;
|
u32 name_length;
|
||||||
u32 attributes_offset;
|
u32 attr_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user