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 _BACKED_BLOCK_H_ 1828fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#define _BACKED_BLOCK_H_ 1928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross 20b55dceea986ab24f8b836b5116b389ed619c816eColin Cross#include <stdint.h> 21b55dceea986ab24f8b836b5116b389ed619c816eColin Cross 22411619e921904b896eddae81c086c1f687c8304dColin Crossstruct backed_block_list; 23b55dceea986ab24f8b836b5116b389ed619c816eColin Crossstruct backed_block; 24b55dceea986ab24f8b836b5116b389ed619c816eColin Cross 25b55dceea986ab24f8b836b5116b389ed619c816eColin Crossenum backed_block_type { 26b55dceea986ab24f8b836b5116b389ed619c816eColin Cross BACKED_BLOCK_DATA, 27b55dceea986ab24f8b836b5116b389ed619c816eColin Cross BACKED_BLOCK_FILE, 289e1f17e926fa20255c5f4b4d2f68aa98a964253aColin Cross BACKED_BLOCK_FD, 29b55dceea986ab24f8b836b5116b389ed619c816eColin Cross BACKED_BLOCK_FILL, 30b55dceea986ab24f8b836b5116b389ed619c816eColin Cross}; 3128fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross 32b55dceea986ab24f8b836b5116b389ed619c816eColin Crossint backed_block_add_data(struct backed_block_list *bbl, void *data, 33b55dceea986ab24f8b836b5116b389ed619c816eColin Cross unsigned int len, unsigned int block); 34b55dceea986ab24f8b836b5116b389ed619c816eColin Crossint backed_block_add_fill(struct backed_block_list *bbl, unsigned int fill_val, 35411619e921904b896eddae81c086c1f687c8304dColin Cross unsigned int len, unsigned int block); 36b55dceea986ab24f8b836b5116b389ed619c816eColin Crossint backed_block_add_file(struct backed_block_list *bbl, const char *filename, 37411619e921904b896eddae81c086c1f687c8304dColin Cross int64_t offset, unsigned int len, unsigned int block); 389e1f17e926fa20255c5f4b4d2f68aa98a964253aColin Crossint backed_block_add_fd(struct backed_block_list *bbl, int fd, 399e1f17e926fa20255c5f4b4d2f68aa98a964253aColin Cross int64_t offset, unsigned int len, unsigned int block); 4028fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross 41b55dceea986ab24f8b836b5116b389ed619c816eColin Crossstruct backed_block *backed_block_iter_new(struct backed_block_list *bbl); 42b55dceea986ab24f8b836b5116b389ed619c816eColin Crossstruct backed_block *backed_block_iter_next(struct backed_block *bb); 43b55dceea986ab24f8b836b5116b389ed619c816eColin Crossunsigned int backed_block_len(struct backed_block *bb); 44b55dceea986ab24f8b836b5116b389ed619c816eColin Crossunsigned int backed_block_block(struct backed_block *bb); 45b55dceea986ab24f8b836b5116b389ed619c816eColin Crossvoid *backed_block_data(struct backed_block *bb); 46b55dceea986ab24f8b836b5116b389ed619c816eColin Crossconst char *backed_block_filename(struct backed_block *bb); 479e1f17e926fa20255c5f4b4d2f68aa98a964253aColin Crossint backed_block_fd(struct backed_block *bb); 48b55dceea986ab24f8b836b5116b389ed619c816eColin Crossint64_t backed_block_file_offset(struct backed_block *bb); 49b55dceea986ab24f8b836b5116b389ed619c816eColin Crossuint32_t backed_block_fill_val(struct backed_block *bb); 50b55dceea986ab24f8b836b5116b389ed619c816eColin Crossenum backed_block_type backed_block_type(struct backed_block *bb); 51bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Crossint backed_block_split(struct backed_block_list *bbl, struct backed_block *bb, 52bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Cross unsigned int max_len); 53b55dceea986ab24f8b836b5116b389ed619c816eColin Cross 54b55dceea986ab24f8b836b5116b389ed619c816eColin Crossstruct backed_block *backed_block_iter_new(struct backed_block_list *bbl); 55b55dceea986ab24f8b836b5116b389ed619c816eColin Crossstruct backed_block *backed_block_iter_next(struct backed_block *bb); 56b55dceea986ab24f8b836b5116b389ed619c816eColin Cross 57be8ddcb35a459481c0bcf5bfe645c1fefe963f5cColin Crossstruct backed_block_list *backed_block_list_new(unsigned int block_size); 58b55dceea986ab24f8b836b5116b389ed619c816eColin Crossvoid backed_block_list_destroy(struct backed_block_list *bbl); 5928fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross 60bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Crossvoid backed_block_list_move(struct backed_block_list *from, 61bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Cross struct backed_block_list *to, struct backed_block *start, 62bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Cross struct backed_block *end); 63bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2Colin Cross 6428fa5bc347390480fe190294c6c385b6a9f0d68bColin Cross#endif 65