Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
mtd
ubi
ubi.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) International Business Machines Corp., 2006
3
* Copyright (c) Nokia Corporation, 2006, 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
*/
21
22
#ifndef __UBI_UBI_H__
23
#define __UBI_UBI_H__
24
25
#include <
linux/init.h
>
26
#include <linux/types.h>
27
#include <linux/list.h>
28
#include <linux/rbtree.h>
29
#include <linux/sched.h>
30
#include <linux/wait.h>
31
#include <
linux/mutex.h
>
32
#include <
linux/rwsem.h
>
33
#include <
linux/spinlock.h
>
34
#include <linux/fs.h>
35
#include <
linux/cdev.h
>
36
#include <linux/device.h>
37
#include <linux/slab.h>
38
#include <linux/string.h>
39
#include <
linux/vmalloc.h
>
40
#include <
linux/notifier.h
>
41
#include <
linux/mtd/mtd.h
>
42
#include <
linux/mtd/ubi.h
>
43
#include <asm/pgtable.h>
44
45
#include "
ubi-media.h
"
46
47
/* Maximum number of supported UBI devices */
48
#define UBI_MAX_DEVICES 32
49
50
/* UBI name used for character devices, sysfs, etc */
51
#define UBI_NAME_STR "ubi"
52
53
/* Normal UBI messages */
54
#define ubi_msg(fmt, ...) pr_notice("UBI: " fmt "\n", ##__VA_ARGS__)
55
/* UBI warning messages */
56
#define ubi_warn(fmt, ...) pr_warn("UBI warning: %s: " fmt "\n", \
57
__func__, ##__VA_ARGS__)
58
/* UBI error messages */
59
#define ubi_err(fmt, ...) pr_err("UBI error: %s: " fmt "\n", \
60
__func__, ##__VA_ARGS__)
61
62
/* Background thread name pattern */
63
#define UBI_BGT_NAME_PATTERN "ubi_bgt%dd"
64
65
/*
66
* This marker in the EBA table means that the LEB is um-mapped.
67
* NOTE! It has to have the same value as %UBI_ALL.
68
*/
69
#define UBI_LEB_UNMAPPED -1
70
71
/*
72
* In case of errors, UBI tries to repeat the operation several times before
73
* returning error. The below constant defines how many times UBI re-tries.
74
*/
75
#define UBI_IO_RETRIES 3
76
77
/*
78
* Length of the protection queue. The length is effectively equivalent to the
79
* number of (global) erase cycles PEBs are protected from the wear-leveling
80
* worker.
81
*/
82
#define UBI_PROT_QUEUE_LEN 10
83
84
/* The volume ID/LEB number/erase counter is unknown */
85
#define UBI_UNKNOWN -1
86
87
/*
88
* Error codes returned by the I/O sub-system.
89
*
90
* UBI_IO_FF: the read region of flash contains only 0xFFs
91
* UBI_IO_FF_BITFLIPS: the same as %UBI_IO_FF, but also also there was a data
92
* integrity error reported by the MTD driver
93
* (uncorrectable ECC error in case of NAND)
94
* UBI_IO_BAD_HDR: the EC or VID header is corrupted (bad magic or CRC)
95
* UBI_IO_BAD_HDR_EBADMSG: the same as %UBI_IO_BAD_HDR, but also there was a
96
* data integrity error reported by the MTD driver
97
* (uncorrectable ECC error in case of NAND)
98
* UBI_IO_BITFLIPS: bit-flips were detected and corrected
99
*
100
* Note, it is probably better to have bit-flip and ebadmsg as flags which can
101
* be or'ed with other error code. But this is a big change because there are
102
* may callers, so it does not worth the risk of introducing a bug
103
*/
104
enum
{
105
UBI_IO_FF
= 1,
106
UBI_IO_FF_BITFLIPS
,
107
UBI_IO_BAD_HDR
,
108
UBI_IO_BAD_HDR_EBADMSG
,
109
UBI_IO_BITFLIPS
,
110
};
111
112
/*
113
* Return codes of the 'ubi_eba_copy_leb()' function.
114
*
115
* MOVE_CANCEL_RACE: canceled because the volume is being deleted, the source
116
* PEB was put meanwhile, or there is I/O on the source PEB
117
* MOVE_SOURCE_RD_ERR: canceled because there was a read error from the source
118
* PEB
119
* MOVE_TARGET_RD_ERR: canceled because there was a read error from the target
120
* PEB
121
* MOVE_TARGET_WR_ERR: canceled because there was a write error to the target
122
* PEB
123
* MOVE_TARGET_BITFLIPS: canceled because a bit-flip was detected in the
124
* target PEB
125
* MOVE_RETRY: retry scrubbing the PEB
126
*/
127
enum
{
128
MOVE_CANCEL_RACE
= 1,
129
MOVE_SOURCE_RD_ERR
,
130
MOVE_TARGET_RD_ERR
,
131
MOVE_TARGET_WR_ERR
,
132
MOVE_TARGET_BITFLIPS
,
133
MOVE_RETRY
,
134
};
135
136
/*
137
* Return codes of the fastmap sub-system
138
*
139
* UBI_NO_FASTMAP: No fastmap super block was found
140
* UBI_BAD_FASTMAP: A fastmap was found but it's unusable
141
*/
142
enum
{
143
UBI_NO_FASTMAP
= 1,
144
UBI_BAD_FASTMAP
,
145
};
146
158
struct
ubi_wl_entry
{
159
union
{
160
struct
rb_node
rb
;
161
struct
list_head
list
;
162
}
u
;
163
int
ec
;
164
int
pnum
;
165
};
166
181
struct
ubi_ltree_entry
{
182
struct
rb_node
rb
;
183
int
vol_id
;
184
int
lnum
;
185
int
users
;
186
struct
rw_semaphore
mutex
;
187
};
188
202
struct
ubi_rename_entry
{
203
int
new_name_len
;
204
char
new_name
[
UBI_VOL_NAME_MAX
+ 1];
205
int
remove
;
206
struct
ubi_volume_desc
*
desc
;
207
struct
list_head
list
;
208
};
209
210
struct
ubi_volume_desc
;
211
220
struct
ubi_fastmap_layout
{
221
struct
ubi_wl_entry
*
e
[
UBI_FM_MAX_BLOCKS
];
222
int
to_be_tortured
[
UBI_FM_MAX_BLOCKS
];
223
int
used_blocks
;
224
int
max_pool_size
;
225
int
max_wl_pool_size
;
226
};
227
240
struct
ubi_fm_pool
{
241
int
pebs
[
UBI_FM_MAX_POOL_SIZE
];
242
int
used
;
243
int
size
;
244
int
max_size
;
245
};
246
296
struct
ubi_volume
{
297
struct
device
dev
;
298
struct
cdev
cdev
;
299
struct
ubi_device
*
ubi
;
300
int
vol_id
;
301
int
ref_count
;
302
int
readers
;
303
int
writers
;
304
int
exclusive
;
305
306
int
reserved_pebs
;
307
int
vol_type
;
308
int
usable_leb_size
;
309
int
used_ebs
;
310
int
last_eb_bytes
;
311
long
long
used_bytes
;
312
int
alignment
;
313
int
data_pad
;
314
int
name_len
;
315
char
name
[
UBI_VOL_NAME_MAX
+ 1];
316
317
int
upd_ebs
;
318
int
ch_lnum
;
319
long
long
upd_bytes
;
320
long
long
upd_received
;
321
void
*
upd_buf
;
322
323
int
*
eba_tbl
;
324
unsigned
int
checked
:1;
325
unsigned
int
corrupted
:1;
326
unsigned
int
upd_marker
:1;
327
unsigned
int
updating
:1;
328
unsigned
int
changing_leb
:1;
329
unsigned
int
direct_writes
:1;
330
};
331
337
struct
ubi_volume_desc
{
338
struct
ubi_volume
*
vol
;
339
int
mode
;
340
};
341
342
struct
ubi_wl_entry
;
343
454
struct
ubi_device
{
455
struct
cdev
cdev
;
456
struct
device
dev
;
457
int
ubi_num
;
458
char
ubi_name
[
sizeof
(
UBI_NAME_STR
)+5];
459
int
vol_count
;
460
struct
ubi_volume
*
volumes
[
UBI_MAX_VOLUMES
+
UBI_INT_VOL_COUNT
];
461
spinlock_t
volumes_lock
;
462
int
ref_count
;
463
int
image_seq
;
464
465
int
rsvd_pebs
;
466
int
avail_pebs
;
467
int
beb_rsvd_pebs
;
468
int
beb_rsvd_level
;
469
int
bad_peb_limit
;
470
471
int
autoresize_vol_id
;
472
int
vtbl_slots
;
473
int
vtbl_size
;
474
struct
ubi_vtbl_record
*
vtbl
;
475
struct
mutex
device_mutex
;
476
477
int
max_ec
;
478
/* Note, mean_ec is not updated run-time - should be fixed */
479
int
mean_ec
;
480
481
/* EBA sub-system's stuff */
482
unsigned
long
long
global_sqnum
;
483
spinlock_t
ltree_lock
;
484
struct
rb_root
ltree
;
485
struct
mutex
alc_mutex
;
486
487
/* Fastmap stuff */
488
int
fm_disabled
;
489
struct
ubi_fastmap_layout
*
fm
;
490
struct
ubi_fm_pool
fm_pool
;
491
struct
ubi_fm_pool
fm_wl_pool
;
492
struct
rw_semaphore
fm_sem
;
493
struct
mutex
fm_mutex
;
494
void
*
fm_buf
;
495
size_t
fm_size
;
496
struct
work_struct
fm_work
;
497
498
/* Wear-leveling sub-system's stuff */
499
struct
rb_root
used
;
500
struct
rb_root
erroneous
;
501
struct
rb_root
free
;
502
int
free_count
;
503
struct
rb_root
scrub
;
504
struct
list_head
pq
[
UBI_PROT_QUEUE_LEN
];
505
int
pq_head
;
506
spinlock_t
wl_lock
;
507
struct
mutex
move_mutex
;
508
struct
rw_semaphore
work_sem
;
509
int
wl_scheduled
;
510
struct
ubi_wl_entry
**
lookuptbl
;
511
struct
ubi_wl_entry
*
move_from
;
512
struct
ubi_wl_entry
*
move_to
;
513
int
move_to_put
;
514
struct
list_head
works
;
515
int
works_count
;
516
struct
task_struct
*
bgt_thread
;
517
int
thread_enabled
;
518
char
bgt_name
[
sizeof
(
UBI_BGT_NAME_PATTERN
)+2];
519
520
/* I/O sub-system's stuff */
521
long
long
flash_size
;
522
int
peb_count
;
523
int
peb_size
;
524
int
bad_peb_count
;
525
int
good_peb_count
;
526
int
corr_peb_count
;
527
int
erroneous_peb_count
;
528
int
max_erroneous
;
529
int
min_io_size
;
530
int
hdrs_min_io_size
;
531
int
ro_mode
;
532
int
leb_size
;
533
int
leb_start
;
534
int
ec_hdr_alsize
;
535
int
vid_hdr_alsize
;
536
int
vid_hdr_offset
;
537
int
vid_hdr_aloffset
;
538
int
vid_hdr_shift
;
539
unsigned
int
bad_allowed
:1;
540
unsigned
int
nor_flash
:1;
541
int
max_write_size
;
542
struct
mtd_info
*
mtd
;
543
544
void
*
peb_buf
;
545
struct
mutex
buf_mutex
;
546
struct
mutex
ckvol_mutex
;
547
548
struct
ubi_debug_info
*
dbg
;
549
};
550
568
struct
ubi_ainf_peb
{
569
int
ec
;
570
int
pnum
;
571
int
vol_id
;
572
int
lnum
;
573
unsigned
int
scrub
:1;
574
unsigned
int
copy_flag
:1;
575
unsigned
long
long
sqnum
;
576
union
{
577
struct
rb_node
rb
;
578
struct
list_head
list
;
579
}
u
;
580
};
581
603
struct
ubi_ainf_volume
{
604
int
vol_id
;
605
int
highest_lnum
;
606
int
leb_count
;
607
int
vol_type
;
608
int
used_ebs
;
609
int
last_data_size
;
610
int
data_pad
;
611
int
compat
;
612
struct
rb_node
rb
;
613
struct
rb_root
root
;
614
};
615
646
struct
ubi_attach_info
{
647
struct
rb_root
volumes
;
648
struct
list_head
corr
;
649
struct
list_head
free
;
650
struct
list_head
erase
;
651
struct
list_head
alien
;
652
int
corr_peb_count
;
653
int
empty_peb_count
;
654
int
alien_peb_count
;
655
int
bad_peb_count
;
656
int
maybe_bad_peb_count
;
657
int
vols_found
;
658
int
highest_vol_id
;
659
int
is_empty
;
660
int
min_ec
;
661
int
max_ec
;
662
unsigned
long
long
max_sqnum
;
663
int
mean_ec
;
664
uint64_t
ec_sum
;
665
int
ec_count
;
666
struct
kmem_cache
*
aeb_slab_cache
;
667
};
668
684
struct
ubi_work
{
685
struct
list_head
list
;
686
int
(*
func
)(
struct
ubi_device
*ubi,
struct
ubi_work
*wrk,
int
cancel
);
687
/* The below fields are only relevant to erasure works */
688
struct
ubi_wl_entry
*
e
;
689
int
vol_id
;
690
int
lnum
;
691
int
torture
;
692
int
anchor
;
693
};
694
695
#include "
debug.h
"
696
697
extern
struct
kmem_cache
*
ubi_wl_entry_slab
;
698
extern
const
struct
file_operations
ubi_ctrl_cdev_operations
;
699
extern
const
struct
file_operations
ubi_cdev_operations
;
700
extern
const
struct
file_operations
ubi_vol_cdev_operations
;
701
extern
struct
class
*
ubi_class
;
702
extern
struct
mutex
ubi_devices_mutex
;
703
extern
struct
blocking_notifier_head
ubi_notifiers
;
704
705
/* attach.c */
706
int
ubi_add_to_av
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai,
int
pnum,
707
int
ec,
const
struct
ubi_vid_hdr
*vid_hdr,
int
bitflips);
708
struct
ubi_ainf_volume
*
ubi_find_av
(
const
struct
ubi_attach_info
*ai,
709
int
vol_id
);
710
void
ubi_remove_av
(
struct
ubi_attach_info
*ai,
struct
ubi_ainf_volume
*
av
);
711
struct
ubi_ainf_peb
*
ubi_early_get_peb
(
struct
ubi_device
*ubi,
712
struct
ubi_attach_info
*ai);
713
int
ubi_attach
(
struct
ubi_device
*ubi,
int
force_scan);
714
void
ubi_destroy_ai
(
struct
ubi_attach_info
*ai);
715
716
/* vtbl.c */
717
int
ubi_change_vtbl_record
(
struct
ubi_device
*ubi,
int
idx
,
718
struct
ubi_vtbl_record
*vtbl_rec);
719
int
ubi_vtbl_rename_volumes
(
struct
ubi_device
*ubi,
720
struct
list_head
*rename_list);
721
int
ubi_read_volume_table
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai);
722
723
/* vmt.c */
724
int
ubi_create_volume
(
struct
ubi_device
*ubi,
struct
ubi_mkvol_req
*
req
);
725
int
ubi_remove_volume
(
struct
ubi_volume_desc
*
desc
,
int
no_vtbl);
726
int
ubi_resize_volume
(
struct
ubi_volume_desc
*
desc
,
int
reserved_pebs);
727
int
ubi_rename_volumes
(
struct
ubi_device
*ubi,
struct
list_head
*rename_list);
728
int
ubi_add_volume
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
);
729
void
ubi_free_volume
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
);
730
731
/* upd.c */
732
int
ubi_start_update
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
733
long
long
bytes
);
734
int
ubi_more_update_data
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
735
const
void
__user *
buf
,
int
count
);
736
int
ubi_start_leb_change
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
737
const
struct
ubi_leb_change_req
*
req
);
738
int
ubi_more_leb_change_data
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
739
const
void
__user *
buf
,
int
count
);
740
741
/* misc.c */
742
int
ubi_calc_data_len
(
const
struct
ubi_device
*ubi,
const
void
*
buf
,
743
int
length
);
744
int
ubi_check_volume
(
struct
ubi_device
*ubi,
int
vol_id
);
745
void
ubi_update_reserved
(
struct
ubi_device
*ubi);
746
void
ubi_calculate_reserved
(
struct
ubi_device
*ubi);
747
int
ubi_check_pattern
(
const
void
*
buf
,
uint8_t
patt,
int
size
);
748
749
/* eba.c */
750
int
ubi_eba_unmap_leb
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
751
int
lnum
);
752
int
ubi_eba_read_leb
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
int
lnum
,
753
void
*
buf
,
int
offset
,
int
len,
int
check
);
754
int
ubi_eba_write_leb
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
int
lnum
,
755
const
void
*
buf
,
int
offset
,
int
len);
756
int
ubi_eba_write_leb_st
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
757
int
lnum
,
const
void
*
buf
,
int
len,
int
used_ebs);
758
int
ubi_eba_atomic_leb_change
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
759
int
lnum
,
const
void
*
buf
,
int
len);
760
int
ubi_eba_copy_leb
(
struct
ubi_device
*ubi,
int
from
,
int
to,
761
struct
ubi_vid_hdr
*vid_hdr);
762
int
ubi_eba_init
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai);
763
unsigned
long
long
ubi_next_sqnum
(
struct
ubi_device
*ubi);
764
int
self_check_eba
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai_fastmap,
765
struct
ubi_attach_info
*ai_scan);
766
767
/* wl.c */
768
int
ubi_wl_get_peb
(
struct
ubi_device
*ubi);
769
int
ubi_wl_put_peb
(
struct
ubi_device
*ubi,
int
vol_id
,
int
lnum
,
770
int
pnum
,
int
torture);
771
int
ubi_wl_flush
(
struct
ubi_device
*ubi,
int
vol_id
,
int
lnum
);
772
int
ubi_wl_scrub_peb
(
struct
ubi_device
*ubi,
int
pnum
);
773
int
ubi_wl_init
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai);
774
void
ubi_wl_close
(
struct
ubi_device
*ubi);
775
int
ubi_thread
(
void
*
u
);
776
struct
ubi_wl_entry
*
ubi_wl_get_fm_peb
(
struct
ubi_device
*ubi,
int
anchor
);
777
int
ubi_wl_put_fm_peb
(
struct
ubi_device
*ubi,
struct
ubi_wl_entry
*used_e,
778
int
lnum,
int
torture);
779
int
ubi_is_erase_work
(
struct
ubi_work
*wrk);
780
void
ubi_refill_pools
(
struct
ubi_device
*ubi);
781
int
ubi_ensure_anchor_pebs
(
struct
ubi_device
*ubi);
782
783
/* io.c */
784
int
ubi_io_read
(
const
struct
ubi_device
*ubi,
void
*
buf
,
int
pnum
,
int
offset
,
785
int
len);
786
int
ubi_io_write
(
struct
ubi_device
*ubi,
const
void
*
buf
,
int
pnum
,
int
offset
,
787
int
len);
788
int
ubi_io_sync_erase
(
struct
ubi_device
*ubi,
int
pnum
,
int
torture);
789
int
ubi_io_is_bad
(
const
struct
ubi_device
*ubi,
int
pnum
);
790
int
ubi_io_mark_bad
(
const
struct
ubi_device
*ubi,
int
pnum
);
791
int
ubi_io_read_ec_hdr
(
struct
ubi_device
*ubi,
int
pnum
,
792
struct
ubi_ec_hdr
*ec_hdr,
int
verbose
);
793
int
ubi_io_write_ec_hdr
(
struct
ubi_device
*ubi,
int
pnum
,
794
struct
ubi_ec_hdr
*ec_hdr);
795
int
ubi_io_read_vid_hdr
(
struct
ubi_device
*ubi,
int
pnum
,
796
struct
ubi_vid_hdr
*vid_hdr,
int
verbose
);
797
int
ubi_io_write_vid_hdr
(
struct
ubi_device
*ubi,
int
pnum
,
798
struct
ubi_vid_hdr
*vid_hdr);
799
800
/* build.c */
801
int
ubi_attach_mtd_dev
(
struct
mtd_info
*mtd,
int
ubi_num,
802
int
vid_hdr_offset,
int
max_beb_per1024);
803
int
ubi_detach_mtd_dev
(
int
ubi_num,
int
anyway);
804
struct
ubi_device
*
ubi_get_device
(
int
ubi_num
);
805
void
ubi_put_device
(
struct
ubi_device
*ubi);
806
struct
ubi_device
*
ubi_get_by_major
(
int
major);
807
int
ubi_major2num
(
int
major);
808
int
ubi_volume_notify
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
809
int
ntype);
810
int
ubi_notify_all
(
struct
ubi_device
*ubi,
int
ntype,
811
struct
notifier_block
*nb);
812
int
ubi_enumerate_volumes
(
struct
notifier_block
*nb);
813
void
ubi_free_internal_volumes
(
struct
ubi_device
*ubi);
814
815
/* kapi.c */
816
void
ubi_do_get_device_info
(
struct
ubi_device
*ubi,
struct
ubi_device_info
*di);
817
void
ubi_do_get_volume_info
(
struct
ubi_device
*ubi,
struct
ubi_volume
*
vol
,
818
struct
ubi_volume_info
*vi);
819
/* scan.c */
820
int
ubi_compare_lebs
(
struct
ubi_device
*ubi,
const
struct
ubi_ainf_peb
*aeb,
821
int
pnum,
const
struct
ubi_vid_hdr
*vid_hdr);
822
823
/* fastmap.c */
824
size_t
ubi_calc_fm_size
(
struct
ubi_device
*ubi);
825
int
ubi_update_fastmap
(
struct
ubi_device
*ubi);
826
int
ubi_scan_fastmap
(
struct
ubi_device
*ubi,
struct
ubi_attach_info
*ai,
827
int
fm_anchor);
828
829
/*
830
* ubi_rb_for_each_entry - walk an RB-tree.
831
* @rb: a pointer to type 'struct rb_node' to use as a loop counter
832
* @pos: a pointer to RB-tree entry type to use as a loop counter
833
* @root: RB-tree's root
834
* @member: the name of the 'struct rb_node' within the RB-tree entry
835
*/
836
#define ubi_rb_for_each_entry(rb, pos, root, member) \
837
for (rb = rb_first(root), \
838
pos = (rb ? container_of(rb, typeof(*pos), member) : NULL); \
839
rb; \
840
rb = rb_next(rb), \
841
pos = (rb ? container_of(rb, typeof(*pos), member) : NULL))
842
843
/*
844
* ubi_move_aeb_to_list - move a PEB from the volume tree to a list.
845
*
846
* @av: volume attaching information
847
* @aeb: attaching eraseblock information
848
* @list: the list to move to
849
*/
850
static
inline
void
ubi_move_aeb_to_list(
struct
ubi_ainf_volume
*
av
,
851
struct
ubi_ainf_peb
*aeb,
852
struct
list_head
*
list
)
853
{
854
rb_erase
(&aeb->
u
.
rb
, &av->
root
);
855
list_add_tail
(&aeb->
u
.
list
, list);
856
}
857
867
static
inline
struct
ubi_vid_hdr
*
868
ubi_zalloc_vid_hdr(
const
struct
ubi_device
*ubi,
gfp_t
gfp_flags)
869
{
870
void
*vid_hdr;
871
872
vid_hdr = kzalloc(ubi->
vid_hdr_alsize
, gfp_flags);
873
if
(!vid_hdr)
874
return
NULL
;
875
876
/*
877
* VID headers may be stored at un-aligned flash offsets, so we shift
878
* the pointer.
879
*/
880
return
vid_hdr + ubi->
vid_hdr_shift
;
881
}
882
888
static
inline
void
ubi_free_vid_hdr(
const
struct
ubi_device
*ubi,
889
struct
ubi_vid_hdr
*vid_hdr)
890
{
891
void
*
p
= vid_hdr;
892
893
if
(!p)
894
return
;
895
896
kfree
(p - ubi->
vid_hdr_shift
);
897
}
898
899
/*
900
* This function is equivalent to 'ubi_io_read()', but @offset is relative to
901
* the beginning of the logical eraseblock, not to the beginning of the
902
* physical eraseblock.
903
*/
904
static
inline
int
ubi_io_read_data(
const
struct
ubi_device
*ubi,
void
*
buf
,
905
int
pnum,
int
offset
,
int
len)
906
{
907
ubi_assert
(offset >= 0);
908
return
ubi_io_read
(ubi, buf, pnum, offset + ubi->
leb_start
, len);
909
}
910
911
/*
912
* This function is equivalent to 'ubi_io_write()', but @offset is relative to
913
* the beginning of the logical eraseblock, not to the beginning of the
914
* physical eraseblock.
915
*/
916
static
inline
int
ubi_io_write_data(
struct
ubi_device
*ubi,
const
void
*
buf
,
917
int
pnum,
int
offset
,
int
len)
918
{
919
ubi_assert
(offset >= 0);
920
return
ubi_io_write
(ubi, buf, pnum, offset + ubi->
leb_start
, len);
921
}
922
927
static
inline
void
ubi_ro_mode(
struct
ubi_device
*ubi)
928
{
929
if
(!ubi->
ro_mode
) {
930
ubi->
ro_mode
= 1;
931
ubi_warn
(
"switch to read-only mode"
);
932
dump_stack
();
933
}
934
}
935
941
static
inline
int
vol_id2idx(
const
struct
ubi_device
*ubi,
int
vol_id
)
942
{
943
if
(vol_id >=
UBI_INTERNAL_VOL_START
)
944
return
vol_id -
UBI_INTERNAL_VOL_START
+ ubi->
vtbl_slots
;
945
else
946
return
vol_id
;
947
}
948
954
static
inline
int
idx2vol_id(
const
struct
ubi_device
*ubi,
int
idx
)
955
{
956
if
(idx >= ubi->
vtbl_slots
)
957
return
idx - ubi->
vtbl_slots
+
UBI_INTERNAL_VOL_START
;
958
else
959
return
idx
;
960
}
961
962
#endif
/* !__UBI_UBI_H__ */
Generated on Thu Jan 10 2013 13:57:23 for Linux Kernel by
1.8.2