Lines Matching +full:mtd +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright (c) 2003-2004 Joern Engel <[email protected]-wedel.de>
9 * phram=<name>,<start>,<len>[,<erasesize>]
10 * <name> may be up to 63 characters.
28 #include <linux/mtd/mtd.h>
36 struct mtd_info mtd; member
43 static int phram_erase(struct mtd_info *mtd, struct erase_info *instr) in phram_erase() argument
45 u_char *start = mtd->priv; in phram_erase()
47 memset(start + instr->addr, 0xff, instr->len); in phram_erase()
52 static int phram_point(struct mtd_info *mtd, loff_t from, size_t len, in phram_point() argument
55 *virt = mtd->priv + from; in phram_point()
60 static int phram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in phram_unpoint() argument
65 static int phram_read(struct mtd_info *mtd, loff_t from, size_t len, in phram_read() argument
68 u_char *start = mtd->priv; in phram_read()
75 static int phram_write(struct mtd_info *mtd, loff_t to, size_t len, in phram_write() argument
78 u_char *start = mtd->priv; in phram_write()
89 if (phram->cached) in phram_map()
94 return -EIO; in phram_map()
96 phram->mtd.priv = addr; in phram_map()
103 void *addr = phram->mtd.priv; in phram_unmap()
105 if (phram->cached) { in phram_unmap()
118 mtd_device_unregister(&this->mtd); in unregister_devices()
120 kfree(this->mtd.name); in unregister_devices()
125 static int register_device(struct platform_device *pdev, const char *name, in register_device() argument
128 struct device_node *np = pdev ? pdev->dev.of_node : NULL; in register_device()
129 bool cached = np ? !of_property_read_bool(np, "no-map") : false; in register_device()
131 int ret = -ENOMEM; in register_device()
137 new->cached = cached; in register_device()
146 new->mtd.name = name; in register_device()
147 new->mtd.size = len; in register_device()
148 new->mtd.flags = MTD_CAP_RAM; in register_device()
149 new->mtd._erase = phram_erase; in register_device()
150 new->mtd._point = phram_point; in register_device()
151 new->mtd._unpoint = phram_unpoint; in register_device()
152 new->mtd._read = phram_read; in register_device()
153 new->mtd._write = phram_write; in register_device()
154 new->mtd.owner = THIS_MODULE; in register_device()
155 new->mtd.type = MTD_RAM; in register_device()
156 new->mtd.erasesize = erasesize; in register_device()
157 new->mtd.writesize = 1; in register_device()
159 mtd_set_of_node(&new->mtd, np); in register_device()
161 ret = -EAGAIN; in register_device()
162 if (mtd_device_register(&new->mtd, NULL, 0)) { in register_device()
170 list_add_tail(&new->list, &phram_list); in register_device()
191 if (token[len - 1] == 'i') { in parse_num64()
192 switch (token[len - 2]) { in parse_num64()
201 token[len - 2] = 0; in parse_num64()
204 return -EINVAL; in parse_num64()
218 char *name; in parse_name() local
222 return -ENOSPC; in parse_name()
224 name = kstrdup(token, GFP_KERNEL); in parse_name()
225 if (!name) in parse_name()
226 return -ENOMEM; in parse_name()
228 *pname = name; in parse_name()
251 * - phram=<device>,<address>,<size>[,<erasesize>] for module case
252 * - phram.phram=<device>,<address>,<size>[,<erasesize>] for built-in case
253 * We leave 64 bytes for the device name, 20 for the address , 20 for the
264 char *name; in phram_setup() local
286 ret = parse_name(&name, token[0]); in phram_setup()
313 ret = -EINVAL; in phram_setup()
320 ret = -EINVAL; in phram_setup()
324 ret = register_device(NULL, name, start, len, (uint32_t)erasesize); in phram_setup()
328 pr_info("%s device: %#llx at %#llx for erasesize %#llx\n", name, len, start, erasesize); in phram_setup()
332 kfree(name); in phram_setup()
361 return -ENOSPC; in phram_param_call()
369 MODULE_PARM_DESC(phram, "Memory region to map. \"phram=<name>,<start>,<length>[,<erasesize>]\"");
385 return -ENOMEM; in phram_probe()
387 /* mtd_set_of_node() reads name from "label" */ in phram_probe()
388 return register_device(pdev, NULL, res->start, resource_size(res), in phram_probe()
396 mtd_device_unregister(&phram->mtd); in phram_remove()
405 .name = "phram",
444 MODULE_AUTHOR("Joern Engel <[email protected]-wedel.de>");
445 MODULE_DESCRIPTION("MTD driver for physical RAM");