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
_nor_erase(rt_mtd_t * mtd,loff_t addr,size_t len)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
_nor_read(rt_mtd_t * mtd,loff_t from,struct mtd_io_desc * desc)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
_nor_write(rt_mtd_t * mtd,loff_t to,struct mtd_io_desc * desc)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
rt_mtd_nor_init(rt_nor_t * nor,int blksize)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