Home
last modified time | relevance | path

Searched defs:ubi (Results 1 – 25 of 42) sorted by relevance

12

/openbmc/u-boot/drivers/mtd/ubi/
H A Dwl.c180 static void wl_entry_destroy(struct ubi_device *ubi, struct ubi_wl_entry *e) in wl_entry_destroy()
193 static int do_work(struct ubi_device *ubi) in do_work()
282 static void prot_queue_add(struct ubi_device *ubi, struct ubi_wl_entry *e) in prot_queue_add()
302 static struct ubi_wl_entry *find_wl_entry(struct ubi_device *ubi, in find_wl_entry()
345 static struct ubi_wl_entry *find_mean_wl_entry(struct ubi_device *ubi, in find_mean_wl_entry()
374 static struct ubi_wl_entry *wl_get_wle(struct ubi_device *ubi) in wl_get_wle()
405 static int prot_queue_del(struct ubi_device *ubi, int pnum) in prot_queue_del()
430 static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, in sync_erase()
490 static void serve_prot_queue(struct ubi_device *ubi) in serve_prot_queue()
527 void ubi_do_worker(struct ubi_device *ubi) in ubi_do_worker()
[all …]
H A Dfastmap-wl.c20 struct ubi_device *ubi = container_of(wrk, struct ubi_device, fm_work); in update_fastmap_work_fn() local
54 static void return_unused_pool_pebs(struct ubi_device *ubi, in return_unused_pool_pebs()
88 struct ubi_wl_entry *ubi_wl_get_fm_peb(struct ubi_device *ubi, int anchor) in ubi_wl_get_fm_peb()
117 void ubi_refill_pools(struct ubi_device *ubi) in ubi_refill_pools()
181 static int produce_free_peb(struct ubi_device *ubi) in produce_free_peb()
204 int ubi_wl_get_peb(struct ubi_device *ubi) in ubi_wl_get_peb()
258 static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi) in get_peb_for_wl()
289 int ubi_ensure_anchor_pebs(struct ubi_device *ubi) in ubi_ensure_anchor_pebs()
325 int ubi_wl_put_fm_peb(struct ubi_device *ubi, struct ubi_wl_entry *fm_e, in ubi_wl_put_fm_peb()
364 static void ubi_fastmap_close(struct ubi_device *ubi) in ubi_fastmap_close()
[all …]
H A Dio.c119 int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset, in ubi_io_read()
228 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset, in ubi_io_write()
325 static int do_sync_erase(struct ubi_device *ubi, int pnum) in do_sync_erase()
405 static int torture_peb(struct ubi_device *ubi, int pnum) in torture_peb()
491 static int nor_erase_prepare(struct ubi_device *ubi, int pnum) in nor_erase_prepare()
561 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture) in ubi_io_sync_erase()
603 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum) in ubi_io_is_bad()
632 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum) in ubi_io_mark_bad()
661 static int validate_ec_hdr(const struct ubi_device *ubi, in validate_ec_hdr()
725 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum, in ubi_io_read_ec_hdr()
[all …]
H A Dkapi.c31 void ubi_do_get_device_info(struct ubi_device *ubi, struct ubi_device_info *di) in ubi_do_get_device_info()
55 struct ubi_device *ubi; in ubi_get_device_info() local
74 void ubi_do_get_volume_info(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_do_get_volume_info()
125 struct ubi_device *ubi; in ubi_open_volume() local
243 struct ubi_device *ubi; in ubi_open_volume_nm() local
334 struct ubi_device *ubi = vol->ubi; in ubi_close_volume() local
378 struct ubi_device *ubi = vol->ubi; in leb_read_sanity_check() local
432 struct ubi_device *ubi = vol->ubi; in ubi_leb_read() local
472 struct ubi_device *ubi = vol->ubi; in ubi_leb_read_sg() local
524 struct ubi_device *ubi = vol->ubi; in ubi_leb_write() local
[all …]
H A Dbuild.c182 int ubi_volume_notify(struct ubi_device *ubi, struct ubi_volume *vol, int ntype) in ubi_volume_notify()
214 int ubi_notify_all(struct ubi_device *ubi, int ntype, struct notifier_block *nb) in ubi_notify_all()
267 struct ubi_device *ubi = ubi_devices[i]; in ubi_enumerate_volumes() local
288 struct ubi_device *ubi; in ubi_get_device() local
306 void ubi_put_device(struct ubi_device *ubi) in ubi_put_device()
324 struct ubi_device *ubi; in ubi_get_by_major() local
356 struct ubi_device *ubi = ubi_devices[i]; in ubi_major2num() local
374 struct ubi_device *ubi; in dev_attribute_show() local
438 struct ubi_device *ubi = container_of(dev, struct ubi_device, dev); in dev_release() local
452 static int ubi_sysfs_init(struct ubi_device *ubi, int *ref) in ubi_sysfs_init()
[all …]
H A Deba.c52 unsigned long long ubi_next_sqnum(struct ubi_device *ubi) in ubi_next_sqnum()
71 static int ubi_get_compat(const struct ubi_device *ubi, int vol_id) in ubi_get_compat()
88 static struct ubi_ltree_entry *ltree_lookup(struct ubi_device *ubi, int vol_id, in ltree_lookup()
127 static struct ubi_ltree_entry *ltree_add_entry(struct ubi_device *ubi, in ltree_add_entry()
197 static int leb_read_lock(struct ubi_device *ubi, int vol_id, int lnum) in leb_read_lock()
214 static void leb_read_unlock(struct ubi_device *ubi, int vol_id, int lnum) in leb_read_unlock()
239 static int leb_write_lock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_lock()
261 static int leb_write_trylock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_trylock()
290 static void leb_write_unlock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_unlock()
316 int ubi_eba_unmap_leb(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_eba_unmap_leb()
[all …]
H A Ddebug.h66 static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi) in ubi_dbg_is_bgt_disabled()
77 static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) in ubi_dbg_is_bitflip()
91 static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi) in ubi_dbg_is_write_failure()
105 static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi) in ubi_dbg_is_erase_failure()
112 static inline int ubi_dbg_chk_io(const struct ubi_device *ubi) in ubi_dbg_chk_io()
117 static inline int ubi_dbg_chk_gen(const struct ubi_device *ubi) in ubi_dbg_chk_gen()
122 static inline int ubi_dbg_chk_fastmap(const struct ubi_device *ubi) in ubi_dbg_chk_fastmap()
127 static inline void ubi_enable_dbg_chk_fastmap(struct ubi_device *ubi) in ubi_enable_dbg_chk_fastmap()
H A Dvtbl.c69 static int ubi_update_layout_vol(struct ubi_device *ubi) in ubi_update_layout_vol()
96 int ubi_change_vtbl_record(struct ubi_device *ubi, int idx, in ubi_change_vtbl_record()
127 int ubi_vtbl_rename_volumes(struct ubi_device *ubi, in ubi_vtbl_rename_volumes()
163 static int vtbl_check(const struct ubi_device *ubi,
295 static int create_vtbl(struct ubi_device *ubi, struct ubi_attach_info *ai,
368 static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi,
491 static struct ubi_vtbl_record *create_empty_lvol(struct ubi_device *ubi,
527 static int init_volumes(struct ubi_device *ubi,
708 static int check_attaching_info(const struct ubi_device *ubi,
773 int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai)
[all …]
H A Dupd.c47 static int set_update_marker(struct ubi_device *ubi, struct ubi_volume *vol) in set_update_marker()
80 static int clear_update_marker(struct ubi_device *ubi, struct ubi_volume *vol, in clear_update_marker()
120 int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_start_update()
174 int ubi_start_leb_change(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_start_leb_change()
225 static int write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, in write_leb()
271 int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_more_update_data()
391 int ubi_more_leb_change_data(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_more_leb_change_data()
H A Ddebug.c24 void ubi_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len) in ubi_dump_flash()
255 struct ubi_device *ubi; in dfs_file_read() local
318 struct ubi_device *ubi; in dfs_file_write() local
395 int ubi_debugfs_init_dev(struct ubi_device *ubi) in ubi_debugfs_init_dev()
499 void ubi_debugfs_exit_dev(struct ubi_device *ubi) in ubi_debugfs_exit_dev()
512 int ubi_dbg_power_cut(struct ubi_device *ubi, int caller) in ubi_dbg_power_cut()
547 int ubi_debugfs_init_dev(struct ubi_device *ubi) in ubi_debugfs_init_dev()
552 void ubi_debugfs_exit_dev(struct ubi_device *ubi) in ubi_debugfs_exit_dev()
556 int ubi_dbg_power_cut(struct ubi_device *ubi, int caller) in ubi_dbg_power_cut()
H A Dvmt.c66 struct ubi_device *ubi; in vol_attribute_show() local
151 int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) in ubi_create_volume()
357 struct ubi_device *ubi = vol->ubi; in ubi_remove_volume() local
429 struct ubi_device *ubi = vol->ubi; in ubi_resize_volume() local
545 int ubi_rename_volumes(struct ubi_device *ubi, struct list_head *rename_list) in ubi_rename_volumes()
584 int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) in ubi_add_volume()
630 void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol) in ubi_free_volume()
646 static int self_check_volume(struct ubi_device *ubi, int vol_id) in self_check_volume()
794 static int self_check_volumes(struct ubi_device *ubi) in self_check_volumes()
/openbmc/linux/drivers/mtd/ubi/
H A Dwl.c175 static void wl_entry_destroy(struct ubi_device *ubi, struct ubi_wl_entry *e) in wl_entry_destroy()
188 static int do_work(struct ubi_device *ubi) in do_work()
275 static inline int in_pq(const struct ubi_device *ubi, struct ubi_wl_entry *e) in in_pq()
298 static void prot_queue_add(struct ubi_device *ubi, struct ubi_wl_entry *e) in prot_queue_add()
318 static struct ubi_wl_entry *find_wl_entry(struct ubi_device *ubi, in find_wl_entry()
353 static struct ubi_wl_entry *find_mean_wl_entry(struct ubi_device *ubi, in find_mean_wl_entry()
382 static struct ubi_wl_entry *wl_get_wle(struct ubi_device *ubi) in wl_get_wle()
413 static int prot_queue_del(struct ubi_device *ubi, int pnum) in prot_queue_del()
438 static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, in sync_erase()
498 static void serve_prot_queue(struct ubi_device *ubi) in serve_prot_queue()
[all …]
H A Dfastmap-wl.c14 struct ubi_device *ubi = container_of(wrk, struct ubi_device, fm_work); in update_fastmap_work_fn() local
42 static inline void return_unused_peb(struct ubi_device *ubi, in return_unused_peb()
54 static void return_unused_pool_pebs(struct ubi_device *ubi, in return_unused_pool_pebs()
75 struct ubi_wl_entry *ubi_wl_get_fm_peb(struct ubi_device *ubi, int anchor) in ubi_wl_get_fm_peb()
112 static bool has_enough_free_count(struct ubi_device *ubi, bool is_wl_pool) in has_enough_free_count()
131 void ubi_refill_pools(struct ubi_device *ubi) in ubi_refill_pools()
207 static int produce_free_peb(struct ubi_device *ubi) in produce_free_peb()
230 int ubi_wl_get_peb(struct ubi_device *ubi) in ubi_wl_get_peb()
287 static struct ubi_wl_entry *next_peb_for_wl(struct ubi_device *ubi, in next_peb_for_wl()
319 static bool need_wear_leveling(struct ubi_device *ubi) in need_wear_leveling()
[all …]
H A Dio.c113 int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset, in ubi_io_read()
222 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset, in ubi_io_write()
307 static int do_sync_erase(struct ubi_device *ubi, int pnum) in do_sync_erase()
363 static int torture_peb(struct ubi_device *ubi, int pnum) in torture_peb()
449 static int nor_erase_prepare(struct ubi_device *ubi, int pnum) in nor_erase_prepare()
523 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture) in ubi_io_sync_erase()
572 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum) in ubi_io_is_bad()
601 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum) in ubi_io_mark_bad()
630 static int validate_ec_hdr(const struct ubi_device *ubi, in validate_ec_hdr()
694 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum, in ubi_io_read_ec_hdr()
[all …]
H A Dkapi.c26 void ubi_do_get_device_info(struct ubi_device *ubi, struct ubi_device_info *di) in ubi_do_get_device_info()
48 struct ubi_device *ubi; in ubi_get_device_info() local
67 void ubi_do_get_volume_info(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_do_get_volume_info()
119 struct ubi_device *ubi; in ubi_open_volume() local
237 struct ubi_device *ubi; in ubi_open_volume_nm() local
329 struct ubi_device *ubi = vol->ubi; in ubi_close_volume() local
373 struct ubi_device *ubi = vol->ubi; in leb_read_sanity_check() local
427 struct ubi_device *ubi = vol->ubi; in ubi_leb_read() local
467 struct ubi_device *ubi = vol->ubi; in ubi_leb_read_sg() local
518 struct ubi_device *ubi = vol->ubi; in ubi_leb_write() local
[all …]
H A Dbuild.c156 int ubi_volume_notify(struct ubi_device *ubi, struct ubi_volume *vol, int ntype) in ubi_volume_notify()
188 int ubi_notify_all(struct ubi_device *ubi, int ntype, struct notifier_block *nb) in ubi_notify_all()
236 struct ubi_device *ubi = ubi_devices[i]; in ubi_enumerate_volumes() local
257 struct ubi_device *ubi; in ubi_get_device() local
275 void ubi_put_device(struct ubi_device *ubi) in ubi_put_device()
293 struct ubi_device *ubi; in ubi_get_by_major() local
325 struct ubi_device *ubi = ubi_devices[i]; in ubi_major2num() local
342 struct ubi_device *ubi; in dev_attribute_show() local
405 struct ubi_device *ubi = container_of(dev, struct ubi_device, dev); in dev_release() local
414 static void kill_volumes(struct ubi_device *ubi) in kill_volumes()
[all …]
H A Ddebug.h62 static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi) in ubi_dbg_is_bgt_disabled()
73 static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) in ubi_dbg_is_bitflip()
87 static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi) in ubi_dbg_is_write_failure()
101 static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi) in ubi_dbg_is_erase_failure()
108 static inline int ubi_dbg_chk_io(const struct ubi_device *ubi) in ubi_dbg_chk_io()
113 static inline int ubi_dbg_chk_gen(const struct ubi_device *ubi) in ubi_dbg_chk_gen()
118 static inline int ubi_dbg_chk_fastmap(const struct ubi_device *ubi) in ubi_dbg_chk_fastmap()
123 static inline void ubi_enable_dbg_chk_fastmap(struct ubi_device *ubi) in ubi_enable_dbg_chk_fastmap()
H A Dvtbl.c63 static int ubi_update_layout_vol(struct ubi_device *ubi) in ubi_update_layout_vol()
90 int ubi_change_vtbl_record(struct ubi_device *ubi, int idx, in ubi_change_vtbl_record()
121 int ubi_vtbl_rename_volumes(struct ubi_device *ubi, in ubi_vtbl_rename_volumes()
157 static int vtbl_check(const struct ubi_device *ubi, in vtbl_check()
285 static int create_vtbl(struct ubi_device *ubi, struct ubi_attach_info *ai, in create_vtbl()
361 static struct ubi_vtbl_record *process_lvol(struct ubi_device *ubi, in process_lvol()
484 static struct ubi_vtbl_record *create_empty_lvol(struct ubi_device *ubi, in create_empty_lvol()
520 static int init_volumes(struct ubi_device *ubi, in init_volumes()
718 static int check_attaching_info(const struct ubi_device *ubi, in check_attaching_info()
783 int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_attach_info *ai) in ubi_read_volume_table()
[all …]
H A Deba.c71 unsigned long long ubi_next_sqnum(struct ubi_device *ubi) in ubi_next_sqnum()
90 static int ubi_get_compat(const struct ubi_device *ubi, int vol_id) in ubi_get_compat()
210 static struct ubi_ltree_entry *ltree_lookup(struct ubi_device *ubi, int vol_id, in ltree_lookup()
249 static struct ubi_ltree_entry *ltree_add_entry(struct ubi_device *ubi, in ltree_add_entry()
319 static int leb_read_lock(struct ubi_device *ubi, int vol_id, int lnum) in leb_read_lock()
336 static void leb_read_unlock(struct ubi_device *ubi, int vol_id, int lnum) in leb_read_unlock()
361 static int leb_write_lock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_lock()
383 static int leb_write_trylock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_trylock()
412 static void leb_write_unlock(struct ubi_device *ubi, int vol_id, int lnum) in leb_write_unlock()
450 int ubi_eba_unmap_leb(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_eba_unmap_leb()
[all …]
H A Dmisc.c22 int ubi_calc_data_len(const struct ubi_device *ubi, const void *buf, in ubi_calc_data_len()
48 int ubi_check_volume(struct ubi_device *ubi, int vol_id) in ubi_check_volume()
92 void ubi_update_reserved(struct ubi_device *ubi) in ubi_update_reserved()
111 void ubi_calculate_reserved(struct ubi_device *ubi) in ubi_calculate_reserved()
145 void ubi_msg(const struct ubi_device *ubi, const char *fmt, ...) in ubi_msg()
161 void ubi_warn(const struct ubi_device *ubi, const char *fmt, ...) in ubi_warn()
178 void ubi_err(const struct ubi_device *ubi, const char *fmt, ...) in ubi_err()
H A Dupd.c41 static int set_update_marker(struct ubi_device *ubi, struct ubi_volume *vol) in set_update_marker()
74 static int clear_update_marker(struct ubi_device *ubi, struct ubi_volume *vol, in clear_update_marker()
114 int ubi_start_update(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_start_update()
168 int ubi_start_leb_change(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_start_leb_change()
219 static int write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum, in write_leb()
265 int ubi_more_update_data(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_more_update_data()
380 int ubi_more_leb_change_data(struct ubi_device *ubi, struct ubi_volume *vol, in ubi_more_leb_change_data()
H A Dvmt.c59 struct ubi_device *ubi = vol->ubi; in vol_attribute_show() local
138 int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) in ubi_create_volume()
336 struct ubi_device *ubi = vol->ubi; in ubi_remove_volume() local
408 struct ubi_device *ubi = vol->ubi; in ubi_resize_volume() local
531 int ubi_rename_volumes(struct ubi_device *ubi, struct list_head *rename_list) in ubi_rename_volumes()
570 int ubi_add_volume(struct ubi_device *ubi, struct ubi_volume *vol) in ubi_add_volume()
614 void ubi_free_volume(struct ubi_device *ubi, struct ubi_volume *vol) in ubi_free_volume()
630 static int self_check_volume(struct ubi_device *ubi, int vol_id) in self_check_volume()
783 static int self_check_volumes(struct ubi_device *ubi) in self_check_volumes()
H A Ddebug.c22 void ubi_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len) in ubi_dump_flash()
253 struct ubi_device *ubi; in dfs_file_read() local
316 struct ubi_device *ubi; in dfs_file_write() local
394 struct ubi_device *ubi = s->private; in eraseblk_count_seq_start() local
407 struct ubi_device *ubi = s->private; in eraseblk_count_seq_next() local
423 struct ubi_device *ubi = s->private; in eraseblk_count_seq_show() local
481 struct ubi_device *ubi = s->private; in eraseblk_count_release() local
503 int ubi_debugfs_init_dev(struct ubi_device *ubi) in ubi_debugfs_init_dev()
569 void ubi_debugfs_exit_dev(struct ubi_device *ubi) in ubi_debugfs_exit_dev()
582 int ubi_dbg_power_cut(struct ubi_device *ubi, int caller) in ubi_dbg_power_cut()
H A Dwl.h12 static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) in ubi_fastmap_init()
23 static inline void ubi_fastmap_close(struct ubi_device *ubi) { } in ubi_fastmap_close()
24 static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } in ubi_fastmap_init()
25 static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi, in may_reserve_for_fm()
/openbmc/u-boot/drivers/mtd/ubispl/
H A Dubispl.c22 static size_t ubi_calc_fm_size(struct ubi_scan_info *ubi) in ubi_calc_fm_size()
37 static int ubi_io_read(struct ubi_scan_info *ubi, void *buf, int pnum, in ubi_io_read()
43 static int ubi_io_is_bad(struct ubi_scan_info *ubi, int peb) in ubi_io_is_bad()
48 static int ubi_io_read_vid_hdr(struct ubi_scan_info *ubi, int pnum, in ubi_io_read_vid_hdr()
98 static int ubi_rescan_fm_vid_hdr(struct ubi_scan_info *ubi, in ubi_rescan_fm_vid_hdr()
123 static int ubi_add_peb_to_vol(struct ubi_scan_info *ubi, in ubi_add_peb_to_vol()
193 static int ubi_scan_vid_hdr(struct ubi_scan_info *ubi, struct ubi_vid_hdr *vh, in ubi_scan_vid_hdr()
225 static int assign_aeb_to_av(struct ubi_scan_info *ubi, u32 pnum, u32 lnum, in assign_aeb_to_av()
247 static int scan_pool(struct ubi_scan_info *ubi, __be32 *pebs, int pool_size) in scan_pool()
281 static int ubi_attach_fastmap(struct ubi_scan_info *ubi, in ubi_attach_fastmap()
[all …]

12