sparse_format.h revision 28fa5bc347390480fe190294c6c385b6a9f0d68b
128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross/*
228fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * Copyright (C) 2010 The Android Open Source Project
328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *
428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * Licensed under the Apache License, Version 2.0 (the "License");
528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * you may not use this file except in compliance with the License.
628fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * You may obtain a copy of the License at
728fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *
828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *      http://www.apache.org/licenses/LICENSE-2.0
928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *
1028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * Unless required by applicable law or agreed to in writing, software
1128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * distributed under the License is distributed on an "AS IS" BASIS,
1228fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * See the License for the specific language governing permissions and
1428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross * limitations under the License.
1528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross */
1628fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
1728fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#ifndef _LIBSPARSE_SPARSE_FORMAT_H_
1828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define _LIBSPARSE_SPARSE_FORMAT_H_
1928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#include "sparse_defs.h"
2028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
2128fa5bc347390480fe190294c6c385b6a9f0d68bColin Crosstypedef struct sparse_header {
2228fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	magic;		/* 0xed26ff3a */
2328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	major_version;	/* (0x1) - reject images with higher major versions */
2428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	minor_version;	/* (0x0) - allow images with higer minor versions */
2528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	file_hdr_sz;	/* 28 bytes for first revision of the file format */
2628fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	chunk_hdr_sz;	/* 12 bytes for first revision of the file format */
2728fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	blk_sz;		/* block size in bytes, must be a multiple of 4 (4096) */
2828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	total_blks;	/* total blocks in the non-sparse output image */
2928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	total_chunks;	/* total chunks in the sparse input image */
3028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	image_checksum; /* CRC32 checksum of the original data, counting "don't care" */
3128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross				/* as 0. Standard 802.3 polynomial, use a Public Domain */
3228fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross				/* table implementation */
3328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross} sparse_header_t;
3428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
3528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define SPARSE_HEADER_MAGIC	0xed26ff3a
3628fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
3728fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define CHUNK_TYPE_RAW		0xCAC1
3828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define CHUNK_TYPE_FILL		0xCAC2
3928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define CHUNK_TYPE_DONT_CARE	0xCAC3
4028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define CHUNK_TYPE_CRC32    0xCAC4
4128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
4228fa5bc347390480fe190294c6c385b6a9f0d68bColin Crosstypedef struct chunk_header {
4328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	chunk_type;	/* 0xCAC1 -> raw; 0xCAC2 -> fill; 0xCAC3 -> don't care */
4428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le16	reserved1;
4528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	chunk_sz;	/* in blocks in output image */
4628fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross  __le32	total_sz;	/* in bytes of chunk input file including chunk header and data */
4728fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross} chunk_header_t;
4828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
4928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross/* Following a Raw or Fill or CRC32 chunk is data.
5028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *  For a Raw chunk, it's the data in chunk_sz * blk_sz.
5128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *  For a Fill chunk, it's 4 bytes of the fill data.
5228fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross *  For a CRC32 chunk, it's 4 bytes of CRC32
5328fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross */
5428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross
5528fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#endif
56