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