Lines Matching +full:mtd +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (c) 2003-2004 Joern Engel <joern@wh.fh-wedel.de>
9 * phram=<name>,<start>,<len>[,<erasesize>]
10 * <name> may be up to 63 characters.
28 #include <linux/mtd/mtd.h>
35 struct mtd_info mtd; member
42 static int phram_erase(struct mtd_info *mtd, struct erase_info *instr) in phram_erase() argument
44 u_char *start = mtd->priv; in phram_erase()
46 memset(start + instr->addr, 0xff, instr->len); in phram_erase()
51 static int phram_point(struct mtd_info *mtd, loff_t from, size_t len, in phram_point() argument
54 *virt = mtd->priv + from; in phram_point()
59 static int phram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in phram_unpoint() argument
64 static int phram_read(struct mtd_info *mtd, loff_t from, size_t len, in phram_read() argument
67 u_char *start = mtd->priv; in phram_read()
74 static int phram_write(struct mtd_info *mtd, loff_t to, size_t len, in phram_write() argument
77 u_char *start = mtd->priv; in phram_write()
88 if (phram->cached) in phram_map()
93 return -EIO; in phram_map()
95 phram->mtd.priv = addr; in phram_map()
102 void *addr = phram->mtd.priv; in phram_unmap()
104 if (phram->cached) { in phram_unmap()
117 mtd_device_unregister(&this->mtd); in unregister_devices()
119 kfree(this->mtd.name); in unregister_devices()
124 static int register_device(struct platform_device *pdev, const char *name, in register_device() argument
127 struct device_node *np = pdev ? pdev->dev.of_node : NULL; in register_device()
128 bool cached = np ? !of_property_read_bool(np, "no-map") : false; in register_device()
130 int ret = -ENOMEM; in register_device()
136 new->cached = cached; in register_device()
145 new->mtd.name = name; in register_device()
146 new->mtd.size = len; in register_device()
147 new->mtd.flags = MTD_CAP_RAM; in register_device()
148 new->mtd._erase = phram_erase; in register_device()
149 new->mtd._point = phram_point; in register_device()
150 new->mtd._unpoint = phram_unpoint; in register_device()
151 new->mtd._read = phram_read; in register_device()
152 new->mtd._write = phram_write; in register_device()
153 new->mtd.owner = THIS_MODULE; in register_device()
154 new->mtd.type = MTD_RAM; in register_device()
155 new->mtd.erasesize = erasesize; in register_device()
156 new->mtd.writesize = 1; in register_device()
158 mtd_set_of_node(&new->mtd, np); in register_device()
160 ret = -EAGAIN; in register_device()
161 if (mtd_device_register(&new->mtd, NULL, 0)) { in register_device()
169 list_add_tail(&new->list, &phram_list); in register_device()
190 if (token[len - 1] == 'i') { in parse_num64()
191 switch (token[len - 2]) { in parse_num64()
200 token[len - 2] = 0; in parse_num64()
203 return -EINVAL; in parse_num64()
217 char *name; in parse_name() local
221 return -ENOSPC; in parse_name()
223 name = kstrdup(token, GFP_KERNEL); in parse_name()
224 if (!name) in parse_name()
225 return -ENOMEM; in parse_name()
227 *pname = name; in parse_name()
250 * - phram=<device>,<address>,<size>[,<erasesize>] for module case
251 * - phram.phram=<device>,<address>,<size>[,<erasesize>] for built-in case
252 * We leave 64 bytes for the device name, 20 for the address , 20 for the
263 char *name; in phram_setup() local
285 ret = parse_name(&name, token[0]); in phram_setup()
312 ret = -EINVAL; in phram_setup()
319 ret = -EINVAL; in phram_setup()
323 ret = register_device(NULL, name, start, len, (uint32_t)erasesize); in phram_setup()
327 pr_info("%s device: %#llx at %#llx for erasesize %#llx\n", name, len, start, erasesize); in phram_setup()
331 kfree(name); in phram_setup()
360 return -ENOSPC; in phram_param_call()
368 MODULE_PARM_DESC(phram, "Memory region to map. \"phram=<name>,<start>,<length>[,<erasesize>]\"");
384 return -ENOMEM; in phram_probe()
386 /* mtd_set_of_node() reads name from "label" */ in phram_probe()
387 return register_device(pdev, NULL, res->start, resource_size(res), in phram_probe()
395 mtd_device_unregister(&phram->mtd); in phram_remove()
406 .name = "phram",
441 MODULE_AUTHOR("Joern Engel <joern@wh.fh-wedel.de>");
442 MODULE_DESCRIPTION("MTD driver for physical RAM");