xref: /nrf52832-nimble/rt-thread/components/drivers/mtd/mtdnor.c (revision 042d53a763ad75cb1465103098bb88c245d95138)
1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author        Notes
8    2018-09-10     heyuanjie87   first version
9 
10  */
11 
12 #include <drivers/mtdnor.h>
13 
14 #ifdef MTD_USING_NOR
15 static int _nor_erase(rt_mtd_t *mtd, loff_t addr, size_t len)
16 {
17     rt_nor_t *nor;
18 
19     nor = (rt_nor_t *)mtd;
20     return nor->ops->erase(nor, addr, len);
21 }
22 
23 static int _nor_read(rt_mtd_t *mtd, loff_t from, struct mtd_io_desc *desc)
24 {
25     rt_nor_t *nor;
26     int ret;
27 
28     nor = (rt_nor_t *)mtd;
29     ret = nor->ops->read(nor, from, desc->datbuf, desc->datlen);
30     if (ret > 0)
31     {
32         desc->datretlen = ret;
33         ret = 0;
34     }
35 
36     return ret;
37 }
38 
39 static int _nor_write(rt_mtd_t *mtd, loff_t to, struct mtd_io_desc *desc)
40 {
41     rt_nor_t *nor;
42     int ret;
43 
44     nor = (rt_nor_t *)mtd;
45     ret = nor->ops->write(nor, to, desc->datbuf, desc->datlen);
46     if (ret > 0)
47     {
48         desc->datretlen = ret;
49         ret = 0;
50     }
51 
52     return ret;
53 }
54 
55 static const struct mtd_ops _ops =
56 {
57     _nor_erase,
58     _nor_read,
59     _nor_write,
60     0,
61     0
62 };
63 
64 int rt_mtd_nor_init(rt_nor_t *nor, int blksize)
65 {
66     nor->parent.sector_size = 1;
67     nor->parent.block_size = blksize;
68     nor->parent.ops = &_ops;
69     nor->parent.type = MTD_TYPE_NOR;
70     nor->parent.oob_size = 0;
71 
72     return 0;
73 }
74 #endif
75