~ubuntu-branches/ubuntu/maverick/u-boot-omap3/maverick

« back to all changes in this revision

Viewing changes to drivers/mtd/ubi/build.c

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2010-03-22 15:06:23 UTC
  • Revision ID: james.westby@ubuntu.com-20100322150623-i21g8rgiyl5dohag
Tags: upstream-2010.3git20100315
ImportĀ upstreamĀ versionĀ 2010.3git20100315

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) International Business Machines Corp., 2006
 
3
 * Copyright (c) Nokia Corporation, 2007
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
 
13
 * the GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
18
 *
 
19
 * Author: Artem Bityutskiy (Š‘ŠøтюцŠŗŠøŠ¹ ŠŃ€Ń‚Ń‘Š¼),
 
20
 *         Frank Haverkamp
 
21
 */
 
22
 
 
23
/*
 
24
 * This file includes UBI initialization and building of UBI devices.
 
25
 *
 
26
 * When UBI is initialized, it attaches all the MTD devices specified as the
 
27
 * module load parameters or the kernel boot parameters. If MTD devices were
 
28
 * specified, UBI does not attach any MTD device, but it is possible to do
 
29
 * later using the "UBI control device".
 
30
 *
 
31
 * At the moment we only attach UBI devices by scanning, which will become a
 
32
 * bottleneck when flashes reach certain large size. Then one may improve UBI
 
33
 * and add other methods, although it does not seem to be easy to do.
 
34
 */
 
35
 
 
36
#ifdef UBI_LINUX
 
37
#include <linux/err.h>
 
38
#include <linux/module.h>
 
39
#include <linux/moduleparam.h>
 
40
#include <linux/stringify.h>
 
41
#include <linux/stat.h>
 
42
#include <linux/miscdevice.h>
 
43
#include <linux/log2.h>
 
44
#include <linux/kthread.h>
 
45
#endif
 
46
#include <ubi_uboot.h>
 
47
#include "ubi.h"
 
48
 
 
49
#if (CONFIG_SYS_MALLOC_LEN < (512 << 10))
 
50
#error Malloc area too small for UBI, increase CONFIG_SYS_MALLOC_LEN to >= 512k
 
51
#endif
 
52
 
 
53
/* Maximum length of the 'mtd=' parameter */
 
54
#define MTD_PARAM_LEN_MAX 64
 
55
 
 
56
/**
 
57
 * struct mtd_dev_param - MTD device parameter description data structure.
 
58
 * @name: MTD device name or number string
 
59
 * @vid_hdr_offs: VID header offset
 
60
 */
 
61
struct mtd_dev_param
 
62
{
 
63
        char name[MTD_PARAM_LEN_MAX];
 
64
        int vid_hdr_offs;
 
65
};
 
66
 
 
67
/* Numbers of elements set in the @mtd_dev_param array */
 
68
static int mtd_devs = 0;
 
69
 
 
70
/* MTD devices specification parameters */
 
71
static struct mtd_dev_param mtd_dev_param[UBI_MAX_DEVICES];
 
72
 
 
73
/* Root UBI "class" object (corresponds to '/<sysfs>/class/ubi/') */
 
74
struct class *ubi_class;
 
75
 
 
76
#ifdef UBI_LINUX
 
77
/* Slab cache for wear-leveling entries */
 
78
struct kmem_cache *ubi_wl_entry_slab;
 
79
 
 
80
/* UBI control character device */
 
81
static struct miscdevice ubi_ctrl_cdev = {
 
82
        .minor = MISC_DYNAMIC_MINOR,
 
83
        .name = "ubi_ctrl",
 
84
        .fops = &ubi_ctrl_cdev_operations,
 
85
};
 
86
#endif
 
87
 
 
88
/* All UBI devices in system */
 
89
struct ubi_device *ubi_devices[UBI_MAX_DEVICES];
 
90
 
 
91
#ifdef UBI_LINUX
 
92
/* Serializes UBI devices creations and removals */
 
93
DEFINE_MUTEX(ubi_devices_mutex);
 
94
 
 
95
/* Protects @ubi_devices and @ubi->ref_count */
 
96
static DEFINE_SPINLOCK(ubi_devices_lock);
 
97
 
 
98
/* "Show" method for files in '/<sysfs>/class/ubi/' */
 
99
static ssize_t ubi_version_show(struct class *class, char *buf)
 
100
{
 
101
        return sprintf(buf, "%d\n", UBI_VERSION);
 
102
}
 
103
 
 
104
/* UBI version attribute ('/<sysfs>/class/ubi/version') */
 
105
static struct class_attribute ubi_version =
 
106
        __ATTR(version, S_IRUGO, ubi_version_show, NULL);
 
107
 
 
108
static ssize_t dev_attribute_show(struct device *dev,
 
109
                                  struct device_attribute *attr, char *buf);
 
110
 
 
111
/* UBI device attributes (correspond to files in '/<sysfs>/class/ubi/ubiX') */
 
112
static struct device_attribute dev_eraseblock_size =
 
113
        __ATTR(eraseblock_size, S_IRUGO, dev_attribute_show, NULL);
 
114
static struct device_attribute dev_avail_eraseblocks =
 
115
        __ATTR(avail_eraseblocks, S_IRUGO, dev_attribute_show, NULL);
 
116
static struct device_attribute dev_total_eraseblocks =
 
117
        __ATTR(total_eraseblocks, S_IRUGO, dev_attribute_show, NULL);
 
118
static struct device_attribute dev_volumes_count =
 
119
        __ATTR(volumes_count, S_IRUGO, dev_attribute_show, NULL);
 
120
static struct device_attribute dev_max_ec =
 
121
        __ATTR(max_ec, S_IRUGO, dev_attribute_show, NULL);
 
122
static struct device_attribute dev_reserved_for_bad =
 
123
        __ATTR(reserved_for_bad, S_IRUGO, dev_attribute_show, NULL);
 
124
static struct device_attribute dev_bad_peb_count =
 
125
        __ATTR(bad_peb_count, S_IRUGO, dev_attribute_show, NULL);
 
126
static struct device_attribute dev_max_vol_count =
 
127
        __ATTR(max_vol_count, S_IRUGO, dev_attribute_show, NULL);
 
128
static struct device_attribute dev_min_io_size =
 
129
        __ATTR(min_io_size, S_IRUGO, dev_attribute_show, NULL);
 
130
static struct device_attribute dev_bgt_enabled =
 
131
        __ATTR(bgt_enabled, S_IRUGO, dev_attribute_show, NULL);
 
132
static struct device_attribute dev_mtd_num =
 
133
        __ATTR(mtd_num, S_IRUGO, dev_attribute_show, NULL);
 
134
#endif
 
135
 
 
136
/**
 
137
 * ubi_get_device - get UBI device.
 
138
 * @ubi_num: UBI device number
 
139
 *
 
140
 * This function returns UBI device description object for UBI device number
 
141
 * @ubi_num, or %NULL if the device does not exist. This function increases the
 
142
 * device reference count to prevent removal of the device. In other words, the
 
143
 * device cannot be removed if its reference count is not zero.
 
144
 */
 
145
struct ubi_device *ubi_get_device(int ubi_num)
 
146
{
 
147
        struct ubi_device *ubi;
 
148
 
 
149
        spin_lock(&ubi_devices_lock);
 
150
        ubi = ubi_devices[ubi_num];
 
151
        if (ubi) {
 
152
                ubi_assert(ubi->ref_count >= 0);
 
153
                ubi->ref_count += 1;
 
154
                get_device(&ubi->dev);
 
155
        }
 
156
        spin_unlock(&ubi_devices_lock);
 
157
 
 
158
        return ubi;
 
159
}
 
160
 
 
161
/**
 
162
 * ubi_put_device - drop an UBI device reference.
 
163
 * @ubi: UBI device description object
 
164
 */
 
165
void ubi_put_device(struct ubi_device *ubi)
 
166
{
 
167
        spin_lock(&ubi_devices_lock);
 
168
        ubi->ref_count -= 1;
 
169
        put_device(&ubi->dev);
 
170
        spin_unlock(&ubi_devices_lock);
 
171
}
 
172
 
 
173
/**
 
174
 * ubi_get_by_major - get UBI device description object by character device
 
175
 *                    major number.
 
176
 * @major: major number
 
177
 *
 
178
 * This function is similar to 'ubi_get_device()', but it searches the device
 
179
 * by its major number.
 
180
 */
 
181
struct ubi_device *ubi_get_by_major(int major)
 
182
{
 
183
        int i;
 
184
        struct ubi_device *ubi;
 
185
 
 
186
        spin_lock(&ubi_devices_lock);
 
187
        for (i = 0; i < UBI_MAX_DEVICES; i++) {
 
188
                ubi = ubi_devices[i];
 
189
                if (ubi && MAJOR(ubi->cdev.dev) == major) {
 
190
                        ubi_assert(ubi->ref_count >= 0);
 
191
                        ubi->ref_count += 1;
 
192
                        get_device(&ubi->dev);
 
193
                        spin_unlock(&ubi_devices_lock);
 
194
                        return ubi;
 
195
                }
 
196
        }
 
197
        spin_unlock(&ubi_devices_lock);
 
198
 
 
199
        return NULL;
 
200
}
 
201
 
 
202
/**
 
203
 * ubi_major2num - get UBI device number by character device major number.
 
204
 * @major: major number
 
205
 *
 
206
 * This function searches UBI device number object by its major number. If UBI
 
207
 * device was not found, this function returns -ENODEV, otherwise the UBI device
 
208
 * number is returned.
 
209
 */
 
210
int ubi_major2num(int major)
 
211
{
 
212
        int i, ubi_num = -ENODEV;
 
213
 
 
214
        spin_lock(&ubi_devices_lock);
 
215
        for (i = 0; i < UBI_MAX_DEVICES; i++) {
 
216
                struct ubi_device *ubi = ubi_devices[i];
 
217
 
 
218
                if (ubi && MAJOR(ubi->cdev.dev) == major) {
 
219
                        ubi_num = ubi->ubi_num;
 
220
                        break;
 
221
                }
 
222
        }
 
223
        spin_unlock(&ubi_devices_lock);
 
224
 
 
225
        return ubi_num;
 
226
}
 
227
 
 
228
#ifdef UBI_LINUX
 
229
/* "Show" method for files in '/<sysfs>/class/ubi/ubiX/' */
 
230
static ssize_t dev_attribute_show(struct device *dev,
 
231
                                  struct device_attribute *attr, char *buf)
 
232
{
 
233
        ssize_t ret;
 
234
        struct ubi_device *ubi;
 
235
 
 
236
        /*
 
237
         * The below code looks weird, but it actually makes sense. We get the
 
238
         * UBI device reference from the contained 'struct ubi_device'. But it
 
239
         * is unclear if the device was removed or not yet. Indeed, if the
 
240
         * device was removed before we increased its reference count,
 
241
         * 'ubi_get_device()' will return -ENODEV and we fail.
 
242
         *
 
243
         * Remember, 'struct ubi_device' is freed in the release function, so
 
244
         * we still can use 'ubi->ubi_num'.
 
245
         */
 
246
        ubi = container_of(dev, struct ubi_device, dev);
 
247
        ubi = ubi_get_device(ubi->ubi_num);
 
248
        if (!ubi)
 
249
                return -ENODEV;
 
250
 
 
251
        if (attr == &dev_eraseblock_size)
 
252
                ret = sprintf(buf, "%d\n", ubi->leb_size);
 
253
        else if (attr == &dev_avail_eraseblocks)
 
254
                ret = sprintf(buf, "%d\n", ubi->avail_pebs);
 
255
        else if (attr == &dev_total_eraseblocks)
 
256
                ret = sprintf(buf, "%d\n", ubi->good_peb_count);
 
257
        else if (attr == &dev_volumes_count)
 
258
                ret = sprintf(buf, "%d\n", ubi->vol_count - UBI_INT_VOL_COUNT);
 
259
        else if (attr == &dev_max_ec)
 
260
                ret = sprintf(buf, "%d\n", ubi->max_ec);
 
261
        else if (attr == &dev_reserved_for_bad)
 
262
                ret = sprintf(buf, "%d\n", ubi->beb_rsvd_pebs);
 
263
        else if (attr == &dev_bad_peb_count)
 
264
                ret = sprintf(buf, "%d\n", ubi->bad_peb_count);
 
265
        else if (attr == &dev_max_vol_count)
 
266
                ret = sprintf(buf, "%d\n", ubi->vtbl_slots);
 
267
        else if (attr == &dev_min_io_size)
 
268
                ret = sprintf(buf, "%d\n", ubi->min_io_size);
 
269
        else if (attr == &dev_bgt_enabled)
 
270
                ret = sprintf(buf, "%d\n", ubi->thread_enabled);
 
271
        else if (attr == &dev_mtd_num)
 
272
                ret = sprintf(buf, "%d\n", ubi->mtd->index);
 
273
        else
 
274
                ret = -EINVAL;
 
275
 
 
276
        ubi_put_device(ubi);
 
277
        return ret;
 
278
}
 
279
 
 
280
/* Fake "release" method for UBI devices */
 
281
static void dev_release(struct device *dev) { }
 
282
 
 
283
/**
 
284
 * ubi_sysfs_init - initialize sysfs for an UBI device.
 
285
 * @ubi: UBI device description object
 
286
 *
 
287
 * This function returns zero in case of success and a negative error code in
 
288
 * case of failure.
 
289
 */
 
290
static int ubi_sysfs_init(struct ubi_device *ubi)
 
291
{
 
292
        int err;
 
293
 
 
294
        ubi->dev.release = dev_release;
 
295
        ubi->dev.devt = ubi->cdev.dev;
 
296
        ubi->dev.class = ubi_class;
 
297
        sprintf(&ubi->dev.bus_id[0], UBI_NAME_STR"%d", ubi->ubi_num);
 
298
        err = device_register(&ubi->dev);
 
299
        if (err)
 
300
                return err;
 
301
 
 
302
        err = device_create_file(&ubi->dev, &dev_eraseblock_size);
 
303
        if (err)
 
304
                return err;
 
305
        err = device_create_file(&ubi->dev, &dev_avail_eraseblocks);
 
306
        if (err)
 
307
                return err;
 
308
        err = device_create_file(&ubi->dev, &dev_total_eraseblocks);
 
309
        if (err)
 
310
                return err;
 
311
        err = device_create_file(&ubi->dev, &dev_volumes_count);
 
312
        if (err)
 
313
                return err;
 
314
        err = device_create_file(&ubi->dev, &dev_max_ec);
 
315
        if (err)
 
316
                return err;
 
317
        err = device_create_file(&ubi->dev, &dev_reserved_for_bad);
 
318
        if (err)
 
319
                return err;
 
320
        err = device_create_file(&ubi->dev, &dev_bad_peb_count);
 
321
        if (err)
 
322
                return err;
 
323
        err = device_create_file(&ubi->dev, &dev_max_vol_count);
 
324
        if (err)
 
325
                return err;
 
326
        err = device_create_file(&ubi->dev, &dev_min_io_size);
 
327
        if (err)
 
328
                return err;
 
329
        err = device_create_file(&ubi->dev, &dev_bgt_enabled);
 
330
        if (err)
 
331
                return err;
 
332
        err = device_create_file(&ubi->dev, &dev_mtd_num);
 
333
        return err;
 
334
}
 
335
 
 
336
/**
 
337
 * ubi_sysfs_close - close sysfs for an UBI device.
 
338
 * @ubi: UBI device description object
 
339
 */
 
340
static void ubi_sysfs_close(struct ubi_device *ubi)
 
341
{
 
342
        device_remove_file(&ubi->dev, &dev_mtd_num);
 
343
        device_remove_file(&ubi->dev, &dev_bgt_enabled);
 
344
        device_remove_file(&ubi->dev, &dev_min_io_size);
 
345
        device_remove_file(&ubi->dev, &dev_max_vol_count);
 
346
        device_remove_file(&ubi->dev, &dev_bad_peb_count);
 
347
        device_remove_file(&ubi->dev, &dev_reserved_for_bad);
 
348
        device_remove_file(&ubi->dev, &dev_max_ec);
 
349
        device_remove_file(&ubi->dev, &dev_volumes_count);
 
350
        device_remove_file(&ubi->dev, &dev_total_eraseblocks);
 
351
        device_remove_file(&ubi->dev, &dev_avail_eraseblocks);
 
352
        device_remove_file(&ubi->dev, &dev_eraseblock_size);
 
353
        device_unregister(&ubi->dev);
 
354
}
 
355
#endif
 
356
 
 
357
/**
 
358
 * kill_volumes - destroy all volumes.
 
359
 * @ubi: UBI device description object
 
360
 */
 
361
static void kill_volumes(struct ubi_device *ubi)
 
362
{
 
363
        int i;
 
364
 
 
365
        for (i = 0; i < ubi->vtbl_slots; i++)
 
366
                if (ubi->volumes[i])
 
367
                        ubi_free_volume(ubi, ubi->volumes[i]);
 
368
}
 
369
 
 
370
/**
 
371
 * uif_init - initialize user interfaces for an UBI device.
 
372
 * @ubi: UBI device description object
 
373
 *
 
374
 * This function returns zero in case of success and a negative error code in
 
375
 * case of failure.
 
376
 */
 
377
static int uif_init(struct ubi_device *ubi)
 
378
{
 
379
        int i, err;
 
380
#ifdef UBI_LINUX
 
381
        dev_t dev;
 
382
#endif
 
383
 
 
384
        sprintf(ubi->ubi_name, UBI_NAME_STR "%d", ubi->ubi_num);
 
385
 
 
386
        /*
 
387
         * Major numbers for the UBI character devices are allocated
 
388
         * dynamically. Major numbers of volume character devices are
 
389
         * equivalent to ones of the corresponding UBI character device. Minor
 
390
         * numbers of UBI character devices are 0, while minor numbers of
 
391
         * volume character devices start from 1. Thus, we allocate one major
 
392
         * number and ubi->vtbl_slots + 1 minor numbers.
 
393
         */
 
394
        err = alloc_chrdev_region(&dev, 0, ubi->vtbl_slots + 1, ubi->ubi_name);
 
395
        if (err) {
 
396
                ubi_err("cannot register UBI character devices");
 
397
                return err;
 
398
        }
 
399
 
 
400
        ubi_assert(MINOR(dev) == 0);
 
401
        cdev_init(&ubi->cdev, &ubi_cdev_operations);
 
402
        dbg_msg("%s major is %u", ubi->ubi_name, MAJOR(dev));
 
403
        ubi->cdev.owner = THIS_MODULE;
 
404
 
 
405
        err = cdev_add(&ubi->cdev, dev, 1);
 
406
        if (err) {
 
407
                ubi_err("cannot add character device");
 
408
                goto out_unreg;
 
409
        }
 
410
 
 
411
        err = ubi_sysfs_init(ubi);
 
412
        if (err)
 
413
                goto out_sysfs;
 
414
 
 
415
        for (i = 0; i < ubi->vtbl_slots; i++)
 
416
                if (ubi->volumes[i]) {
 
417
                        err = ubi_add_volume(ubi, ubi->volumes[i]);
 
418
                        if (err) {
 
419
                                ubi_err("cannot add volume %d", i);
 
420
                                goto out_volumes;
 
421
                        }
 
422
                }
 
423
 
 
424
        return 0;
 
425
 
 
426
out_volumes:
 
427
        kill_volumes(ubi);
 
428
out_sysfs:
 
429
        ubi_sysfs_close(ubi);
 
430
        cdev_del(&ubi->cdev);
 
431
out_unreg:
 
432
        unregister_chrdev_region(ubi->cdev.dev, ubi->vtbl_slots + 1);
 
433
        ubi_err("cannot initialize UBI %s, error %d", ubi->ubi_name, err);
 
434
        return err;
 
435
}
 
436
 
 
437
/**
 
438
 * uif_close - close user interfaces for an UBI device.
 
439
 * @ubi: UBI device description object
 
440
 */
 
441
static void uif_close(struct ubi_device *ubi)
 
442
{
 
443
        kill_volumes(ubi);
 
444
        ubi_sysfs_close(ubi);
 
445
        cdev_del(&ubi->cdev);
 
446
        unregister_chrdev_region(ubi->cdev.dev, ubi->vtbl_slots + 1);
 
447
}
 
448
 
 
449
/**
 
450
 * attach_by_scanning - attach an MTD device using scanning method.
 
451
 * @ubi: UBI device descriptor
 
452
 *
 
453
 * This function returns zero in case of success and a negative error code in
 
454
 * case of failure.
 
455
 *
 
456
 * Note, currently this is the only method to attach UBI devices. Hopefully in
 
457
 * the future we'll have more scalable attaching methods and avoid full media
 
458
 * scanning. But even in this case scanning will be needed as a fall-back
 
459
 * attaching method if there are some on-flash table corruptions.
 
460
 */
 
461
static int attach_by_scanning(struct ubi_device *ubi)
 
462
{
 
463
        int err;
 
464
        struct ubi_scan_info *si;
 
465
 
 
466
        si = ubi_scan(ubi);
 
467
        if (IS_ERR(si))
 
468
                return PTR_ERR(si);
 
469
 
 
470
        ubi->bad_peb_count = si->bad_peb_count;
 
471
        ubi->good_peb_count = ubi->peb_count - ubi->bad_peb_count;
 
472
        ubi->max_ec = si->max_ec;
 
473
        ubi->mean_ec = si->mean_ec;
 
474
 
 
475
        err = ubi_read_volume_table(ubi, si);
 
476
        if (err)
 
477
                goto out_si;
 
478
 
 
479
        err = ubi_wl_init_scan(ubi, si);
 
480
        if (err)
 
481
                goto out_vtbl;
 
482
 
 
483
        err = ubi_eba_init_scan(ubi, si);
 
484
        if (err)
 
485
                goto out_wl;
 
486
 
 
487
        ubi_scan_destroy_si(si);
 
488
        return 0;
 
489
 
 
490
out_wl:
 
491
        ubi_wl_close(ubi);
 
492
out_vtbl:
 
493
        vfree(ubi->vtbl);
 
494
out_si:
 
495
        ubi_scan_destroy_si(si);
 
496
        return err;
 
497
}
 
498
 
 
499
/**
 
500
 * io_init - initialize I/O unit for a given UBI device.
 
501
 * @ubi: UBI device description object
 
502
 *
 
503
 * If @ubi->vid_hdr_offset or @ubi->leb_start is zero, default offsets are
 
504
 * assumed:
 
505
 *   o EC header is always at offset zero - this cannot be changed;
 
506
 *   o VID header starts just after the EC header at the closest address
 
507
 *     aligned to @io->hdrs_min_io_size;
 
508
 *   o data starts just after the VID header at the closest address aligned to
 
509
 *     @io->min_io_size
 
510
 *
 
511
 * This function returns zero in case of success and a negative error code in
 
512
 * case of failure.
 
513
 */
 
514
static int io_init(struct ubi_device *ubi)
 
515
{
 
516
        if (ubi->mtd->numeraseregions != 0) {
 
517
                /*
 
518
                 * Some flashes have several erase regions. Different regions
 
519
                 * may have different eraseblock size and other
 
520
                 * characteristics. It looks like mostly multi-region flashes
 
521
                 * have one "main" region and one or more small regions to
 
522
                 * store boot loader code or boot parameters or whatever. I
 
523
                 * guess we should just pick the largest region. But this is
 
524
                 * not implemented.
 
525
                 */
 
526
                ubi_err("multiple regions, not implemented");
 
527
                return -EINVAL;
 
528
        }
 
529
 
 
530
        if (ubi->vid_hdr_offset < 0)
 
531
                return -EINVAL;
 
532
 
 
533
        /*
 
534
         * Note, in this implementation we support MTD devices with 0x7FFFFFFF
 
535
         * physical eraseblocks maximum.
 
536
         */
 
537
 
 
538
        ubi->peb_size   = ubi->mtd->erasesize;
 
539
        ubi->peb_count  = mtd_div_by_eb(ubi->mtd->size, ubi->mtd);
 
540
        ubi->flash_size = ubi->mtd->size;
 
541
 
 
542
        if (ubi->mtd->block_isbad && ubi->mtd->block_markbad)
 
543
                ubi->bad_allowed = 1;
 
544
 
 
545
        ubi->min_io_size = ubi->mtd->writesize;
 
546
        ubi->hdrs_min_io_size = ubi->mtd->writesize >> ubi->mtd->subpage_sft;
 
547
 
 
548
        /*
 
549
         * Make sure minimal I/O unit is power of 2. Note, there is no
 
550
         * fundamental reason for this assumption. It is just an optimization
 
551
         * which allows us to avoid costly division operations.
 
552
         */
 
553
        if (!is_power_of_2(ubi->min_io_size)) {
 
554
                ubi_err("min. I/O unit (%d) is not power of 2",
 
555
                        ubi->min_io_size);
 
556
                return -EINVAL;
 
557
        }
 
558
 
 
559
        ubi_assert(ubi->hdrs_min_io_size > 0);
 
560
        ubi_assert(ubi->hdrs_min_io_size <= ubi->min_io_size);
 
561
        ubi_assert(ubi->min_io_size % ubi->hdrs_min_io_size == 0);
 
562
 
 
563
        /* Calculate default aligned sizes of EC and VID headers */
 
564
        ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
 
565
        ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
 
566
 
 
567
        dbg_msg("min_io_size      %d", ubi->min_io_size);
 
568
        dbg_msg("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
 
569
        dbg_msg("ec_hdr_alsize    %d", ubi->ec_hdr_alsize);
 
570
        dbg_msg("vid_hdr_alsize   %d", ubi->vid_hdr_alsize);
 
571
 
 
572
        if (ubi->vid_hdr_offset == 0)
 
573
                /* Default offset */
 
574
                ubi->vid_hdr_offset = ubi->vid_hdr_aloffset =
 
575
                                      ubi->ec_hdr_alsize;
 
576
        else {
 
577
                ubi->vid_hdr_aloffset = ubi->vid_hdr_offset &
 
578
                                                ~(ubi->hdrs_min_io_size - 1);
 
579
                ubi->vid_hdr_shift = ubi->vid_hdr_offset -
 
580
                                                ubi->vid_hdr_aloffset;
 
581
        }
 
582
 
 
583
        /* Similar for the data offset */
 
584
        ubi->leb_start = ubi->vid_hdr_offset + UBI_EC_HDR_SIZE;
 
585
        ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
 
586
 
 
587
        dbg_msg("vid_hdr_offset   %d", ubi->vid_hdr_offset);
 
588
        dbg_msg("vid_hdr_aloffset %d", ubi->vid_hdr_aloffset);
 
589
        dbg_msg("vid_hdr_shift    %d", ubi->vid_hdr_shift);
 
590
        dbg_msg("leb_start        %d", ubi->leb_start);
 
591
 
 
592
        /* The shift must be aligned to 32-bit boundary */
 
593
        if (ubi->vid_hdr_shift % 4) {
 
594
                ubi_err("unaligned VID header shift %d",
 
595
                        ubi->vid_hdr_shift);
 
596
                return -EINVAL;
 
597
        }
 
598
 
 
599
        /* Check sanity */
 
600
        if (ubi->vid_hdr_offset < UBI_EC_HDR_SIZE ||
 
601
            ubi->leb_start < ubi->vid_hdr_offset + UBI_VID_HDR_SIZE ||
 
602
            ubi->leb_start > ubi->peb_size - UBI_VID_HDR_SIZE ||
 
603
            ubi->leb_start & (ubi->min_io_size - 1)) {
 
604
                ubi_err("bad VID header (%d) or data offsets (%d)",
 
605
                        ubi->vid_hdr_offset, ubi->leb_start);
 
606
                return -EINVAL;
 
607
        }
 
608
 
 
609
        /*
 
610
         * It may happen that EC and VID headers are situated in one minimal
 
611
         * I/O unit. In this case we can only accept this UBI image in
 
612
         * read-only mode.
 
613
         */
 
614
        if (ubi->vid_hdr_offset + UBI_VID_HDR_SIZE <= ubi->hdrs_min_io_size) {
 
615
                ubi_warn("EC and VID headers are in the same minimal I/O unit, "
 
616
                         "switch to read-only mode");
 
617
                ubi->ro_mode = 1;
 
618
        }
 
619
 
 
620
        ubi->leb_size = ubi->peb_size - ubi->leb_start;
 
621
 
 
622
        if (!(ubi->mtd->flags & MTD_WRITEABLE)) {
 
623
                ubi_msg("MTD device %d is write-protected, attach in "
 
624
                        "read-only mode", ubi->mtd->index);
 
625
                ubi->ro_mode = 1;
 
626
        }
 
627
 
 
628
        ubi_msg("physical eraseblock size:   %d bytes (%d KiB)",
 
629
                ubi->peb_size, ubi->peb_size >> 10);
 
630
        ubi_msg("logical eraseblock size:    %d bytes", ubi->leb_size);
 
631
        ubi_msg("smallest flash I/O unit:    %d", ubi->min_io_size);
 
632
        if (ubi->hdrs_min_io_size != ubi->min_io_size)
 
633
                ubi_msg("sub-page size:              %d",
 
634
                        ubi->hdrs_min_io_size);
 
635
        ubi_msg("VID header offset:          %d (aligned %d)",
 
636
                ubi->vid_hdr_offset, ubi->vid_hdr_aloffset);
 
637
        ubi_msg("data offset:                %d", ubi->leb_start);
 
638
 
 
639
        /*
 
640
         * Note, ideally, we have to initialize ubi->bad_peb_count here. But
 
641
         * unfortunately, MTD does not provide this information. We should loop
 
642
         * over all physical eraseblocks and invoke mtd->block_is_bad() for
 
643
         * each physical eraseblock. So, we skip ubi->bad_peb_count
 
644
         * uninitialized and initialize it after scanning.
 
645
         */
 
646
 
 
647
        return 0;
 
648
}
 
649
 
 
650
/**
 
651
 * autoresize - re-size the volume which has the "auto-resize" flag set.
 
652
 * @ubi: UBI device description object
 
653
 * @vol_id: ID of the volume to re-size
 
654
 *
 
655
 * This function re-sizes the volume marked by the @UBI_VTBL_AUTORESIZE_FLG in
 
656
 * the volume table to the largest possible size. See comments in ubi-header.h
 
657
 * for more description of the flag. Returns zero in case of success and a
 
658
 * negative error code in case of failure.
 
659
 */
 
660
static int autoresize(struct ubi_device *ubi, int vol_id)
 
661
{
 
662
        struct ubi_volume_desc desc;
 
663
        struct ubi_volume *vol = ubi->volumes[vol_id];
 
664
        int err, old_reserved_pebs = vol->reserved_pebs;
 
665
 
 
666
        /*
 
667
         * Clear the auto-resize flag in the volume in-memory copy of the
 
668
         * volume table, and 'ubi_resize_volume()' will propogate this change
 
669
         * to the flash.
 
670
         */
 
671
        ubi->vtbl[vol_id].flags &= ~UBI_VTBL_AUTORESIZE_FLG;
 
672
 
 
673
        if (ubi->avail_pebs == 0) {
 
674
                struct ubi_vtbl_record vtbl_rec;
 
675
 
 
676
                /*
 
677
                 * No avalilable PEBs to re-size the volume, clear the flag on
 
678
                 * flash and exit.
 
679
                 */
 
680
                memcpy(&vtbl_rec, &ubi->vtbl[vol_id],
 
681
                       sizeof(struct ubi_vtbl_record));
 
682
                err = ubi_change_vtbl_record(ubi, vol_id, &vtbl_rec);
 
683
                if (err)
 
684
                        ubi_err("cannot clean auto-resize flag for volume %d",
 
685
                                vol_id);
 
686
        } else {
 
687
                desc.vol = vol;
 
688
                err = ubi_resize_volume(&desc,
 
689
                                        old_reserved_pebs + ubi->avail_pebs);
 
690
                if (err)
 
691
                        ubi_err("cannot auto-resize volume %d", vol_id);
 
692
        }
 
693
 
 
694
        if (err)
 
695
                return err;
 
696
 
 
697
        ubi_msg("volume %d (\"%s\") re-sized from %d to %d LEBs", vol_id,
 
698
                vol->name, old_reserved_pebs, vol->reserved_pebs);
 
699
        return 0;
 
700
}
 
701
 
 
702
/**
 
703
 * ubi_attach_mtd_dev - attach an MTD device.
 
704
 * @mtd_dev: MTD device description object
 
705
 * @ubi_num: number to assign to the new UBI device
 
706
 * @vid_hdr_offset: VID header offset
 
707
 *
 
708
 * This function attaches MTD device @mtd_dev to UBI and assign @ubi_num number
 
709
 * to the newly created UBI device, unless @ubi_num is %UBI_DEV_NUM_AUTO, in
 
710
 * which case this function finds a vacant device nubert and assings it
 
711
 * automatically. Returns the new UBI device number in case of success and a
 
712
 * negative error code in case of failure.
 
713
 *
 
714
 * Note, the invocations of this function has to be serialized by the
 
715
 * @ubi_devices_mutex.
 
716
 */
 
717
int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset)
 
718
{
 
719
        struct ubi_device *ubi;
 
720
        int i, err;
 
721
 
 
722
        /*
 
723
         * Check if we already have the same MTD device attached.
 
724
         *
 
725
         * Note, this function assumes that UBI devices creations and deletions
 
726
         * are serialized, so it does not take the &ubi_devices_lock.
 
727
         */
 
728
        for (i = 0; i < UBI_MAX_DEVICES; i++) {
 
729
                ubi = ubi_devices[i];
 
730
                if (ubi && mtd->index == ubi->mtd->index) {
 
731
                        dbg_err("mtd%d is already attached to ubi%d",
 
732
                                mtd->index, i);
 
733
                        return -EEXIST;
 
734
                }
 
735
        }
 
736
 
 
737
        /*
 
738
         * Make sure this MTD device is not emulated on top of an UBI volume
 
739
         * already. Well, generally this recursion works fine, but there are
 
740
         * different problems like the UBI module takes a reference to itself
 
741
         * by attaching (and thus, opening) the emulated MTD device. This
 
742
         * results in inability to unload the module. And in general it makes
 
743
         * no sense to attach emulated MTD devices, so we prohibit this.
 
744
         */
 
745
        if (mtd->type == MTD_UBIVOLUME) {
 
746
                ubi_err("refuse attaching mtd%d - it is already emulated on "
 
747
                        "top of UBI", mtd->index);
 
748
                return -EINVAL;
 
749
        }
 
750
 
 
751
        if (ubi_num == UBI_DEV_NUM_AUTO) {
 
752
                /* Search for an empty slot in the @ubi_devices array */
 
753
                for (ubi_num = 0; ubi_num < UBI_MAX_DEVICES; ubi_num++)
 
754
                        if (!ubi_devices[ubi_num])
 
755
                                break;
 
756
                if (ubi_num == UBI_MAX_DEVICES) {
 
757
                        dbg_err("only %d UBI devices may be created", UBI_MAX_DEVICES);
 
758
                        return -ENFILE;
 
759
                }
 
760
        } else {
 
761
                if (ubi_num >= UBI_MAX_DEVICES)
 
762
                        return -EINVAL;
 
763
 
 
764
                /* Make sure ubi_num is not busy */
 
765
                if (ubi_devices[ubi_num]) {
 
766
                        dbg_err("ubi%d already exists", ubi_num);
 
767
                        return -EEXIST;
 
768
                }
 
769
        }
 
770
 
 
771
        ubi = kzalloc(sizeof(struct ubi_device), GFP_KERNEL);
 
772
        if (!ubi)
 
773
                return -ENOMEM;
 
774
 
 
775
        ubi->mtd = mtd;
 
776
        ubi->ubi_num = ubi_num;
 
777
        ubi->vid_hdr_offset = vid_hdr_offset;
 
778
        ubi->autoresize_vol_id = -1;
 
779
 
 
780
        mutex_init(&ubi->buf_mutex);
 
781
        mutex_init(&ubi->ckvol_mutex);
 
782
        mutex_init(&ubi->volumes_mutex);
 
783
        spin_lock_init(&ubi->volumes_lock);
 
784
 
 
785
        ubi_msg("attaching mtd%d to ubi%d", mtd->index, ubi_num);
 
786
 
 
787
        err = io_init(ubi);
 
788
        if (err)
 
789
                goto out_free;
 
790
 
 
791
        err = -ENOMEM;
 
792
        ubi->peb_buf1 = vmalloc(ubi->peb_size);
 
793
        if (!ubi->peb_buf1)
 
794
                goto out_free;
 
795
 
 
796
        ubi->peb_buf2 = vmalloc(ubi->peb_size);
 
797
        if (!ubi->peb_buf2)
 
798
                goto out_free;
 
799
 
 
800
#ifdef CONFIG_MTD_UBI_DEBUG
 
801
        mutex_init(&ubi->dbg_buf_mutex);
 
802
        ubi->dbg_peb_buf = vmalloc(ubi->peb_size);
 
803
        if (!ubi->dbg_peb_buf)
 
804
                goto out_free;
 
805
#endif
 
806
 
 
807
        err = attach_by_scanning(ubi);
 
808
        if (err) {
 
809
                dbg_err("failed to attach by scanning, error %d", err);
 
810
                goto out_free;
 
811
        }
 
812
 
 
813
        if (ubi->autoresize_vol_id != -1) {
 
814
                err = autoresize(ubi, ubi->autoresize_vol_id);
 
815
                if (err)
 
816
                        goto out_detach;
 
817
        }
 
818
 
 
819
        err = uif_init(ubi);
 
820
        if (err)
 
821
                goto out_detach;
 
822
 
 
823
        ubi->bgt_thread = kthread_create(ubi_thread, ubi, ubi->bgt_name);
 
824
        if (IS_ERR(ubi->bgt_thread)) {
 
825
                err = PTR_ERR(ubi->bgt_thread);
 
826
                ubi_err("cannot spawn \"%s\", error %d", ubi->bgt_name,
 
827
                        err);
 
828
                goto out_uif;
 
829
        }
 
830
 
 
831
        ubi_msg("attached mtd%d to ubi%d", mtd->index, ubi_num);
 
832
        ubi_msg("MTD device name:            \"%s\"", mtd->name);
 
833
        ubi_msg("MTD device size:            %llu MiB", ubi->flash_size >> 20);
 
834
        ubi_msg("number of good PEBs:        %d", ubi->good_peb_count);
 
835
        ubi_msg("number of bad PEBs:         %d", ubi->bad_peb_count);
 
836
        ubi_msg("max. allowed volumes:       %d", ubi->vtbl_slots);
 
837
        ubi_msg("wear-leveling threshold:    %d", CONFIG_MTD_UBI_WL_THRESHOLD);
 
838
        ubi_msg("number of internal volumes: %d", UBI_INT_VOL_COUNT);
 
839
        ubi_msg("number of user volumes:     %d",
 
840
                ubi->vol_count - UBI_INT_VOL_COUNT);
 
841
        ubi_msg("available PEBs:             %d", ubi->avail_pebs);
 
842
        ubi_msg("total number of reserved PEBs: %d", ubi->rsvd_pebs);
 
843
        ubi_msg("number of PEBs reserved for bad PEB handling: %d",
 
844
                ubi->beb_rsvd_pebs);
 
845
        ubi_msg("max/mean erase counter: %d/%d", ubi->max_ec, ubi->mean_ec);
 
846
 
 
847
        /* Enable the background thread */
 
848
        if (!DBG_DISABLE_BGT) {
 
849
                ubi->thread_enabled = 1;
 
850
                wake_up_process(ubi->bgt_thread);
 
851
        }
 
852
 
 
853
        ubi_devices[ubi_num] = ubi;
 
854
        return ubi_num;
 
855
 
 
856
out_uif:
 
857
        uif_close(ubi);
 
858
out_detach:
 
859
        ubi_eba_close(ubi);
 
860
        ubi_wl_close(ubi);
 
861
        vfree(ubi->vtbl);
 
862
out_free:
 
863
        vfree(ubi->peb_buf1);
 
864
        vfree(ubi->peb_buf2);
 
865
#ifdef CONFIG_MTD_UBI_DEBUG
 
866
        vfree(ubi->dbg_peb_buf);
 
867
#endif
 
868
        kfree(ubi);
 
869
        return err;
 
870
}
 
871
 
 
872
/**
 
873
 * ubi_detach_mtd_dev - detach an MTD device.
 
874
 * @ubi_num: UBI device number to detach from
 
875
 * @anyway: detach MTD even if device reference count is not zero
 
876
 *
 
877
 * This function destroys an UBI device number @ubi_num and detaches the
 
878
 * underlying MTD device. Returns zero in case of success and %-EBUSY if the
 
879
 * UBI device is busy and cannot be destroyed, and %-EINVAL if it does not
 
880
 * exist.
 
881
 *
 
882
 * Note, the invocations of this function has to be serialized by the
 
883
 * @ubi_devices_mutex.
 
884
 */
 
885
int ubi_detach_mtd_dev(int ubi_num, int anyway)
 
886
{
 
887
        struct ubi_device *ubi;
 
888
 
 
889
        if (ubi_num < 0 || ubi_num >= UBI_MAX_DEVICES)
 
890
                return -EINVAL;
 
891
 
 
892
        spin_lock(&ubi_devices_lock);
 
893
        ubi = ubi_devices[ubi_num];
 
894
        if (!ubi) {
 
895
                spin_unlock(&ubi_devices_lock);
 
896
                return -EINVAL;
 
897
        }
 
898
 
 
899
        if (ubi->ref_count) {
 
900
                if (!anyway) {
 
901
                        spin_unlock(&ubi_devices_lock);
 
902
                        return -EBUSY;
 
903
                }
 
904
                /* This may only happen if there is a bug */
 
905
                ubi_err("%s reference count %d, destroy anyway",
 
906
                        ubi->ubi_name, ubi->ref_count);
 
907
        }
 
908
        ubi_devices[ubi_num] = NULL;
 
909
        spin_unlock(&ubi_devices_lock);
 
910
 
 
911
        ubi_assert(ubi_num == ubi->ubi_num);
 
912
        dbg_msg("detaching mtd%d from ubi%d", ubi->mtd->index, ubi_num);
 
913
 
 
914
        /*
 
915
         * Before freeing anything, we have to stop the background thread to
 
916
         * prevent it from doing anything on this device while we are freeing.
 
917
         */
 
918
        if (ubi->bgt_thread)
 
919
                kthread_stop(ubi->bgt_thread);
 
920
 
 
921
        uif_close(ubi);
 
922
        ubi_eba_close(ubi);
 
923
        ubi_wl_close(ubi);
 
924
        vfree(ubi->vtbl);
 
925
        put_mtd_device(ubi->mtd);
 
926
        vfree(ubi->peb_buf1);
 
927
        vfree(ubi->peb_buf2);
 
928
#ifdef CONFIG_MTD_UBI_DEBUG
 
929
        vfree(ubi->dbg_peb_buf);
 
930
#endif
 
931
        ubi_msg("mtd%d is detached from ubi%d", ubi->mtd->index, ubi->ubi_num);
 
932
        kfree(ubi);
 
933
        return 0;
 
934
}
 
935
 
 
936
/**
 
937
 * find_mtd_device - open an MTD device by its name or number.
 
938
 * @mtd_dev: name or number of the device
 
939
 *
 
940
 * This function tries to open and MTD device described by @mtd_dev string,
 
941
 * which is first treated as an ASCII number, and if it is not true, it is
 
942
 * treated as MTD device name. Returns MTD device description object in case of
 
943
 * success and a negative error code in case of failure.
 
944
 */
 
945
static struct mtd_info * __init open_mtd_device(const char *mtd_dev)
 
946
{
 
947
        struct mtd_info *mtd;
 
948
        int mtd_num;
 
949
        char *endp;
 
950
 
 
951
        mtd_num = simple_strtoul(mtd_dev, &endp, 0);
 
952
        if (*endp != '\0' || mtd_dev == endp) {
 
953
                /*
 
954
                 * This does not look like an ASCII integer, probably this is
 
955
                 * MTD device name.
 
956
                 */
 
957
                mtd = get_mtd_device_nm(mtd_dev);
 
958
        } else
 
959
                mtd = get_mtd_device(NULL, mtd_num);
 
960
 
 
961
        return mtd;
 
962
}
 
963
 
 
964
int __init ubi_init(void)
 
965
{
 
966
        int err, i, k;
 
967
 
 
968
        /* Ensure that EC and VID headers have correct size */
 
969
        BUILD_BUG_ON(sizeof(struct ubi_ec_hdr) != 64);
 
970
        BUILD_BUG_ON(sizeof(struct ubi_vid_hdr) != 64);
 
971
 
 
972
        if (mtd_devs > UBI_MAX_DEVICES) {
 
973
                ubi_err("too many MTD devices, maximum is %d", UBI_MAX_DEVICES);
 
974
                return -EINVAL;
 
975
        }
 
976
 
 
977
        /* Create base sysfs directory and sysfs files */
 
978
        ubi_class = class_create(THIS_MODULE, UBI_NAME_STR);
 
979
        if (IS_ERR(ubi_class)) {
 
980
                err = PTR_ERR(ubi_class);
 
981
                ubi_err("cannot create UBI class");
 
982
                goto out;
 
983
        }
 
984
 
 
985
        err = class_create_file(ubi_class, &ubi_version);
 
986
        if (err) {
 
987
                ubi_err("cannot create sysfs file");
 
988
                goto out_class;
 
989
        }
 
990
 
 
991
        err = misc_register(&ubi_ctrl_cdev);
 
992
        if (err) {
 
993
                ubi_err("cannot register device");
 
994
                goto out_version;
 
995
        }
 
996
 
 
997
#ifdef UBI_LINUX
 
998
        ubi_wl_entry_slab = kmem_cache_create("ubi_wl_entry_slab",
 
999
                                              sizeof(struct ubi_wl_entry),
 
1000
                                              0, 0, NULL);
 
1001
        if (!ubi_wl_entry_slab)
 
1002
                goto out_dev_unreg;
 
1003
#endif
 
1004
 
 
1005
        /* Attach MTD devices */
 
1006
        for (i = 0; i < mtd_devs; i++) {
 
1007
                struct mtd_dev_param *p = &mtd_dev_param[i];
 
1008
                struct mtd_info *mtd;
 
1009
 
 
1010
                cond_resched();
 
1011
 
 
1012
                mtd = open_mtd_device(p->name);
 
1013
                if (IS_ERR(mtd)) {
 
1014
                        err = PTR_ERR(mtd);
 
1015
                        goto out_detach;
 
1016
                }
 
1017
 
 
1018
                mutex_lock(&ubi_devices_mutex);
 
1019
                err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO,
 
1020
                                         p->vid_hdr_offs);
 
1021
                mutex_unlock(&ubi_devices_mutex);
 
1022
                if (err < 0) {
 
1023
                        put_mtd_device(mtd);
 
1024
                        ubi_err("cannot attach mtd%d", mtd->index);
 
1025
                        goto out_detach;
 
1026
                }
 
1027
        }
 
1028
 
 
1029
        return 0;
 
1030
 
 
1031
out_detach:
 
1032
        for (k = 0; k < i; k++)
 
1033
                if (ubi_devices[k]) {
 
1034
                        mutex_lock(&ubi_devices_mutex);
 
1035
                        ubi_detach_mtd_dev(ubi_devices[k]->ubi_num, 1);
 
1036
                        mutex_unlock(&ubi_devices_mutex);
 
1037
                }
 
1038
#ifdef UBI_LINUX
 
1039
        kmem_cache_destroy(ubi_wl_entry_slab);
 
1040
out_dev_unreg:
 
1041
#endif
 
1042
        misc_deregister(&ubi_ctrl_cdev);
 
1043
out_version:
 
1044
        class_remove_file(ubi_class, &ubi_version);
 
1045
out_class:
 
1046
        class_destroy(ubi_class);
 
1047
out:
 
1048
        ubi_err("UBI error: cannot initialize UBI, error %d", err);
 
1049
        return err;
 
1050
}
 
1051
module_init(ubi_init);
 
1052
 
 
1053
void __exit ubi_exit(void)
 
1054
{
 
1055
        int i;
 
1056
 
 
1057
        for (i = 0; i < UBI_MAX_DEVICES; i++)
 
1058
                if (ubi_devices[i]) {
 
1059
                        mutex_lock(&ubi_devices_mutex);
 
1060
                        ubi_detach_mtd_dev(ubi_devices[i]->ubi_num, 1);
 
1061
                        mutex_unlock(&ubi_devices_mutex);
 
1062
                }
 
1063
        kmem_cache_destroy(ubi_wl_entry_slab);
 
1064
        misc_deregister(&ubi_ctrl_cdev);
 
1065
        class_remove_file(ubi_class, &ubi_version);
 
1066
        class_destroy(ubi_class);
 
1067
        mtd_devs = 0;
 
1068
}
 
1069
module_exit(ubi_exit);
 
1070
 
 
1071
/**
 
1072
 * bytes_str_to_int - convert a string representing number of bytes to an
 
1073
 * integer.
 
1074
 * @str: the string to convert
 
1075
 *
 
1076
 * This function returns positive resulting integer in case of success and a
 
1077
 * negative error code in case of failure.
 
1078
 */
 
1079
static int __init bytes_str_to_int(const char *str)
 
1080
{
 
1081
        char *endp;
 
1082
        unsigned long result;
 
1083
 
 
1084
        result = simple_strtoul(str, &endp, 0);
 
1085
        if (str == endp || result < 0) {
 
1086
                printk(KERN_ERR "UBI error: incorrect bytes count: \"%s\"\n",
 
1087
                       str);
 
1088
                return -EINVAL;
 
1089
        }
 
1090
 
 
1091
        switch (*endp) {
 
1092
        case 'G':
 
1093
                result *= 1024;
 
1094
        case 'M':
 
1095
                result *= 1024;
 
1096
        case 'K':
 
1097
                result *= 1024;
 
1098
                if (endp[1] == 'i' && endp[2] == 'B')
 
1099
                        endp += 2;
 
1100
        case '\0':
 
1101
                break;
 
1102
        default:
 
1103
                printk(KERN_ERR "UBI error: incorrect bytes count: \"%s\"\n",
 
1104
                       str);
 
1105
                return -EINVAL;
 
1106
        }
 
1107
 
 
1108
        return result;
 
1109
}
 
1110
 
 
1111
/**
 
1112
 * ubi_mtd_param_parse - parse the 'mtd=' UBI parameter.
 
1113
 * @val: the parameter value to parse
 
1114
 * @kp: not used
 
1115
 *
 
1116
 * This function returns zero in case of success and a negative error code in
 
1117
 * case of error.
 
1118
 */
 
1119
int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp)
 
1120
{
 
1121
        int i, len;
 
1122
        struct mtd_dev_param *p;
 
1123
        char buf[MTD_PARAM_LEN_MAX];
 
1124
        char *pbuf = &buf[0];
 
1125
        char *tokens[2] = {NULL, NULL};
 
1126
 
 
1127
        if (!val)
 
1128
                return -EINVAL;
 
1129
 
 
1130
        if (mtd_devs == UBI_MAX_DEVICES) {
 
1131
                printk(KERN_ERR "UBI error: too many parameters, max. is %d\n",
 
1132
                       UBI_MAX_DEVICES);
 
1133
                return -EINVAL;
 
1134
        }
 
1135
 
 
1136
        len = strnlen(val, MTD_PARAM_LEN_MAX);
 
1137
        if (len == MTD_PARAM_LEN_MAX) {
 
1138
                printk(KERN_ERR "UBI error: parameter \"%s\" is too long, "
 
1139
                       "max. is %d\n", val, MTD_PARAM_LEN_MAX);
 
1140
                return -EINVAL;
 
1141
        }
 
1142
 
 
1143
        if (len == 0) {
 
1144
                printk(KERN_WARNING "UBI warning: empty 'mtd=' parameter - "
 
1145
                       "ignored\n");
 
1146
                return 0;
 
1147
        }
 
1148
 
 
1149
        strcpy(buf, val);
 
1150
 
 
1151
        /* Get rid of the final newline */
 
1152
        if (buf[len - 1] == '\n')
 
1153
                buf[len - 1] = '\0';
 
1154
 
 
1155
        for (i = 0; i < 2; i++)
 
1156
                tokens[i] = strsep(&pbuf, ",");
 
1157
 
 
1158
        if (pbuf) {
 
1159
                printk(KERN_ERR "UBI error: too many arguments at \"%s\"\n",
 
1160
                       val);
 
1161
                return -EINVAL;
 
1162
        }
 
1163
 
 
1164
        p = &mtd_dev_param[mtd_devs];
 
1165
        strcpy(&p->name[0], tokens[0]);
 
1166
 
 
1167
        if (tokens[1])
 
1168
                p->vid_hdr_offs = bytes_str_to_int(tokens[1]);
 
1169
 
 
1170
        if (p->vid_hdr_offs < 0)
 
1171
                return p->vid_hdr_offs;
 
1172
 
 
1173
        mtd_devs += 1;
 
1174
        return 0;
 
1175
}
 
1176
 
 
1177
module_param_call(mtd, ubi_mtd_param_parse, NULL, NULL, 000);
 
1178
MODULE_PARM_DESC(mtd, "MTD devices to attach. Parameter format: "
 
1179
                      "mtd=<name|num>[,<vid_hdr_offs>].\n"
 
1180
                      "Multiple \"mtd\" parameters may be specified.\n"
 
1181
                      "MTD devices may be specified by their number or name.\n"
 
1182
                      "Optional \"vid_hdr_offs\" parameter specifies UBI VID "
 
1183
                      "header position and data starting position to be used "
 
1184
                      "by UBI.\n"
 
1185
                      "Example: mtd=content,1984 mtd=4 - attach MTD device"
 
1186
                      "with name \"content\" using VID header offset 1984, and "
 
1187
                      "MTD device number 4 with default VID header offset.");
 
1188
 
 
1189
MODULE_VERSION(__stringify(UBI_VERSION));
 
1190
MODULE_DESCRIPTION("UBI - Unsorted Block Images");
 
1191
MODULE_AUTHOR("Artem Bityutskiy");
 
1192
MODULE_LICENSE("GPL");