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