1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MTDUTILS_H_
18 #define MTDUTILS_H_
19 
20 #include <sys/types.h>  // for size_t, etc.
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 typedef struct MtdPartition MtdPartition;
27 
28 int mtd_scan_partitions(void);
29 
30 const MtdPartition *mtd_find_partition_by_name(const char *name);
31 
32 /* mount_point is like "/system"
33  * filesystem is like "yaffs2"
34  */
35 int mtd_mount_partition(const MtdPartition *partition, const char *mount_point,
36         const char *filesystem, int read_only);
37 
38 /* get the partition and the minimum erase/write block size.  NULL is ok.
39  */
40 int mtd_partition_info(const MtdPartition *partition,
41         size_t *total_size, size_t *erase_size, size_t *write_size);
42 
43 /* read or write raw data from a partition, starting at the beginning.
44  * skips bad blocks as best we can.
45  */
46 typedef struct MtdReadContext MtdReadContext;
47 typedef struct MtdWriteContext MtdWriteContext;
48 
49 MtdReadContext *mtd_read_partition(const MtdPartition *);
50 ssize_t mtd_read_data(MtdReadContext *, char *data, size_t data_len);
51 void mtd_read_close(MtdReadContext *);
52 
53 MtdWriteContext *mtd_write_partition(const MtdPartition *);
54 ssize_t mtd_write_data(MtdWriteContext *, const char *data, size_t data_len);
55 off_t mtd_erase_blocks(MtdWriteContext *, int blocks);  /* 0 ok, -1 for all */
56 int mtd_write_close(MtdWriteContext *);
57 
58 #ifdef __cplusplus
59 }
60 #endif
61 
62 #endif  // MTDUTILS_H_
63