xref: /rk3399_rockchip-uboot/include/image-sparse.h (revision 3d4ef38de2f65e9d122e1c40221f303ade0eac97)
1*3d4ef38dSMaxime Ripard /*
2*3d4ef38dSMaxime Ripard  * Copyright 2014 Broadcom Corporation.
3*3d4ef38dSMaxime Ripard  *
4*3d4ef38dSMaxime Ripard  * SPDX-License-Identifier:	GPL-2.0+
5*3d4ef38dSMaxime Ripard  */
6*3d4ef38dSMaxime Ripard 
7*3d4ef38dSMaxime Ripard #include <part.h>
8*3d4ef38dSMaxime Ripard #include <sparse_format.h>
9*3d4ef38dSMaxime Ripard 
10*3d4ef38dSMaxime Ripard #define ROUNDUP(x, y)	(((x) + ((y) - 1)) & ~((y) - 1))
11*3d4ef38dSMaxime Ripard 
12*3d4ef38dSMaxime Ripard typedef struct sparse_storage {
13*3d4ef38dSMaxime Ripard 	unsigned int	block_sz;
14*3d4ef38dSMaxime Ripard 	unsigned int	start;
15*3d4ef38dSMaxime Ripard 	unsigned int	size;
16*3d4ef38dSMaxime Ripard 	const char	*name;
17*3d4ef38dSMaxime Ripard 
18*3d4ef38dSMaxime Ripard 	int	(*write)(struct sparse_storage *storage, void *priv,
19*3d4ef38dSMaxime Ripard 			 unsigned int offset, unsigned int size,
20*3d4ef38dSMaxime Ripard 			 char *data);
21*3d4ef38dSMaxime Ripard } sparse_storage_t;
22*3d4ef38dSMaxime Ripard 
23*3d4ef38dSMaxime Ripard static inline int is_sparse_image(void *buf)
24*3d4ef38dSMaxime Ripard {
25*3d4ef38dSMaxime Ripard 	sparse_header_t *s_header = (sparse_header_t *)buf;
26*3d4ef38dSMaxime Ripard 
27*3d4ef38dSMaxime Ripard 	if ((le32_to_cpu(s_header->magic) == SPARSE_HEADER_MAGIC) &&
28*3d4ef38dSMaxime Ripard 	    (le16_to_cpu(s_header->major_version) == 1))
29*3d4ef38dSMaxime Ripard 		return 1;
30*3d4ef38dSMaxime Ripard 
31*3d4ef38dSMaxime Ripard 	return 0;
32*3d4ef38dSMaxime Ripard }
33*3d4ef38dSMaxime Ripard 
34*3d4ef38dSMaxime Ripard int store_sparse_image(sparse_storage_t *storage, void *storage_priv,
35*3d4ef38dSMaxime Ripard 		       unsigned int session_id, void *data);
36