diff options
Diffstat (limited to 'drivers/mtd/devices/slram.c')
-rw-r--r-- | drivers/mtd/devices/slram.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c index 288594163c22..8f52fc858e48 100644 --- a/drivers/mtd/devices/slram.c +++ b/drivers/mtd/devices/slram.c | |||
@@ -75,7 +75,7 @@ static slram_mtd_list_t *slram_mtdlist = NULL; | |||
75 | static int slram_erase(struct mtd_info *, struct erase_info *); | 75 | static int slram_erase(struct mtd_info *, struct erase_info *); |
76 | static int slram_point(struct mtd_info *, loff_t, size_t, size_t *, void **, | 76 | static int slram_point(struct mtd_info *, loff_t, size_t, size_t *, void **, |
77 | resource_size_t *); | 77 | resource_size_t *); |
78 | static void slram_unpoint(struct mtd_info *, loff_t, size_t); | 78 | static int slram_unpoint(struct mtd_info *, loff_t, size_t); |
79 | static int slram_read(struct mtd_info *, loff_t, size_t, size_t *, u_char *); | 79 | static int slram_read(struct mtd_info *, loff_t, size_t, size_t *, u_char *); |
80 | static int slram_write(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); | 80 | static int slram_write(struct mtd_info *, loff_t, size_t, size_t *, const u_char *); |
81 | 81 | ||
@@ -83,21 +83,13 @@ static int slram_erase(struct mtd_info *mtd, struct erase_info *instr) | |||
83 | { | 83 | { |
84 | slram_priv_t *priv = mtd->priv; | 84 | slram_priv_t *priv = mtd->priv; |
85 | 85 | ||
86 | if (instr->addr + instr->len > mtd->size) { | ||
87 | return(-EINVAL); | ||
88 | } | ||
89 | |||
90 | memset(priv->start + instr->addr, 0xff, instr->len); | 86 | memset(priv->start + instr->addr, 0xff, instr->len); |
91 | |||
92 | /* This'll catch a few races. Free the thing before returning :) | 87 | /* This'll catch a few races. Free the thing before returning :) |
93 | * I don't feel at all ashamed. This kind of thing is possible anyway | 88 | * I don't feel at all ashamed. This kind of thing is possible anyway |
94 | * with flash, but unlikely. | 89 | * with flash, but unlikely. |
95 | */ | 90 | */ |
96 | |||
97 | instr->state = MTD_ERASE_DONE; | 91 | instr->state = MTD_ERASE_DONE; |
98 | |||
99 | mtd_erase_callback(instr); | 92 | mtd_erase_callback(instr); |
100 | |||
101 | return(0); | 93 | return(0); |
102 | } | 94 | } |
103 | 95 | ||
@@ -106,20 +98,14 @@ static int slram_point(struct mtd_info *mtd, loff_t from, size_t len, | |||
106 | { | 98 | { |
107 | slram_priv_t *priv = mtd->priv; | 99 | slram_priv_t *priv = mtd->priv; |
108 | 100 | ||
109 | /* can we return a physical address with this driver? */ | ||
110 | if (phys) | ||
111 | return -EINVAL; | ||
112 | |||
113 | if (from + len > mtd->size) | ||
114 | return -EINVAL; | ||
115 | |||
116 | *virt = priv->start + from; | 101 | *virt = priv->start + from; |
117 | *retlen = len; | 102 | *retlen = len; |
118 | return(0); | 103 | return(0); |
119 | } | 104 | } |
120 | 105 | ||
121 | static void slram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) | 106 | static int slram_unpoint(struct mtd_info *mtd, loff_t from, size_t len) |
122 | { | 107 | { |
108 | return 0; | ||
123 | } | 109 | } |
124 | 110 | ||
125 | static int slram_read(struct mtd_info *mtd, loff_t from, size_t len, | 111 | static int slram_read(struct mtd_info *mtd, loff_t from, size_t len, |
@@ -127,14 +113,7 @@ static int slram_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
127 | { | 113 | { |
128 | slram_priv_t *priv = mtd->priv; | 114 | slram_priv_t *priv = mtd->priv; |
129 | 115 | ||
130 | if (from > mtd->size) | ||
131 | return -EINVAL; | ||
132 | |||
133 | if (from + len > mtd->size) | ||
134 | len = mtd->size - from; | ||
135 | |||
136 | memcpy(buf, priv->start + from, len); | 116 | memcpy(buf, priv->start + from, len); |
137 | |||
138 | *retlen = len; | 117 | *retlen = len; |
139 | return(0); | 118 | return(0); |
140 | } | 119 | } |
@@ -144,11 +123,7 @@ static int slram_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
144 | { | 123 | { |
145 | slram_priv_t *priv = mtd->priv; | 124 | slram_priv_t *priv = mtd->priv; |
146 | 125 | ||
147 | if (to + len > mtd->size) | ||
148 | return -EINVAL; | ||
149 | |||
150 | memcpy(priv->start + to, buf, len); | 126 | memcpy(priv->start + to, buf, len); |
151 | |||
152 | *retlen = len; | 127 | *retlen = len; |
153 | return(0); | 128 | return(0); |
154 | } | 129 | } |
@@ -199,11 +174,11 @@ static int register_device(char *name, unsigned long start, unsigned long length | |||
199 | (*curmtd)->mtdinfo->name = name; | 174 | (*curmtd)->mtdinfo->name = name; |
200 | (*curmtd)->mtdinfo->size = length; | 175 | (*curmtd)->mtdinfo->size = length; |
201 | (*curmtd)->mtdinfo->flags = MTD_CAP_RAM; | 176 | (*curmtd)->mtdinfo->flags = MTD_CAP_RAM; |
202 | (*curmtd)->mtdinfo->erase = slram_erase; | 177 | (*curmtd)->mtdinfo->_erase = slram_erase; |
203 | (*curmtd)->mtdinfo->point = slram_point; | 178 | (*curmtd)->mtdinfo->_point = slram_point; |
204 | (*curmtd)->mtdinfo->unpoint = slram_unpoint; | 179 | (*curmtd)->mtdinfo->_unpoint = slram_unpoint; |
205 | (*curmtd)->mtdinfo->read = slram_read; | 180 | (*curmtd)->mtdinfo->_read = slram_read; |
206 | (*curmtd)->mtdinfo->write = slram_write; | 181 | (*curmtd)->mtdinfo->_write = slram_write; |
207 | (*curmtd)->mtdinfo->owner = THIS_MODULE; | 182 | (*curmtd)->mtdinfo->owner = THIS_MODULE; |
208 | (*curmtd)->mtdinfo->type = MTD_RAM; | 183 | (*curmtd)->mtdinfo->type = MTD_RAM; |
209 | (*curmtd)->mtdinfo->erasesize = SLRAM_BLK_SZ; | 184 | (*curmtd)->mtdinfo->erasesize = SLRAM_BLK_SZ; |