diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/fs.h | 3 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/jffs2.h | 8 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/jiffies.h | 1 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/kernel-rtems.h | 2 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/list.h | 8 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/mtd/mtd.h | 37 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/mtd/rawnand.h | 26 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/mutex.h | 2 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/printk.h | 6 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/rwsem.h | 12 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/slab.h | 1 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/workqueue.h | 32 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/include/linux/writeback.h | 1 |
13 files changed, 129 insertions, 10 deletions
diff --git a/cpukit/libfs/src/jffs2/include/linux/fs.h b/cpukit/libfs/src/jffs2/include/linux/fs.h index a638e7b6bf..9e40d105dc 100644 --- a/cpukit/libfs/src/jffs2/include/linux/fs.h +++ b/cpukit/libfs/src/jffs2/include/linux/fs.h @@ -34,4 +34,7 @@ struct iattr { time_t ia_ctime; }; +#define SB_RDONLY 1 +#define sb_rdonly(sb) ((sb)->s_flags & SB_RDONLY) + #endif /* __LINUX_FS_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/jffs2.h b/cpukit/libfs/src/jffs2/include/linux/jffs2.h index 784ba0b969..637ee4a793 100644 --- a/cpukit/libfs/src/jffs2/include/linux/jffs2.h +++ b/cpukit/libfs/src/jffs2/include/linux/jffs2.h @@ -123,7 +123,7 @@ struct jffs2_raw_dirent __u8 unused[2]; jint32_t node_crc; jint32_t name_crc; - __u8 name[0]; + __u8 name[]; }; /* The JFFS2 raw inode structure: Used for storage on physical media. */ @@ -155,7 +155,7 @@ struct jffs2_raw_inode jint16_t flags; /* See JFFS2_INO_FLAG_* */ jint32_t data_crc; /* CRC for the (compressed) data. */ jint32_t node_crc; /* CRC for the raw inode (excluding data) */ - __u8 data[0]; + __u8 data[]; }; struct jffs2_raw_xattr { @@ -170,7 +170,7 @@ struct jffs2_raw_xattr { jint16_t value_len; jint32_t data_crc; jint32_t node_crc; - __u8 data[0]; + __u8 data[]; } __attribute__((packed)); struct jffs2_raw_xref @@ -196,7 +196,7 @@ struct jffs2_raw_summary jint32_t padded; /* sum of the size of padding nodes */ jint32_t sum_crc; /* summary information crc */ jint32_t node_crc; /* node crc */ - jint32_t sum[0]; /* inode summary info */ + jint32_t sum[]; /* inode summary info */ }; union jffs2_node_union diff --git a/cpukit/libfs/src/jffs2/include/linux/jiffies.h b/cpukit/libfs/src/jffs2/include/linux/jiffies.h new file mode 100644 index 0000000000..77debb5d27 --- /dev/null +++ b/cpukit/libfs/src/jffs2/include/linux/jiffies.h @@ -0,0 +1 @@ +#include <linux/workqueue.h> diff --git a/cpukit/libfs/src/jffs2/include/linux/kernel-rtems.h b/cpukit/libfs/src/jffs2/include/linux/kernel-rtems.h index eb5f422116..ed46ce2391 100644 --- a/cpukit/libfs/src/jffs2/include/linux/kernel-rtems.h +++ b/cpukit/libfs/src/jffs2/include/linux/kernel-rtems.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * Copyright (c) 2013 embedded brains GmbH & Co. KG * * Copyright 2016 Chris Johns <chrisj@rtems.org> * diff --git a/cpukit/libfs/src/jffs2/include/linux/list.h b/cpukit/libfs/src/jffs2/include/linux/list.h index 4dc8a5a6b7..efb7fb8019 100644 --- a/cpukit/libfs/src/jffs2/include/linux/list.h +++ b/cpukit/libfs/src/jffs2/include/linux/list.h @@ -139,6 +139,14 @@ list_empty( struct list_head *list ) (_ent_) != (_list_); \ (_ent_) = (_ent_)->next ) +/* list_for_each_safe - using _ent_, iterate through list _list_ + while protecting against removal of list elements */ + +#define list_for_each_safe( _ent_, _tmp_, _list_ ) \ + for ( (_ent_) = (_list_)->next, (_tmp_) = (_ent_)->next; \ + (_ent_) != (_list_); \ + (_ent_) = (_tmp_), (_tmp_) = (_ent_)->next ) + /* * list_for_each_entry - this function can be use to iterate over all * items in a list* _list_ with it's head at _head_ and link _item_ diff --git a/cpukit/libfs/src/jffs2/include/linux/mtd/mtd.h b/cpukit/libfs/src/jffs2/include/linux/mtd/mtd.h index bcf0a9aa70..548201483f 100644 --- a/cpukit/libfs/src/jffs2/include/linux/mtd/mtd.h +++ b/cpukit/libfs/src/jffs2/include/linux/mtd/mtd.h @@ -6,6 +6,14 @@ #define MTD_FAIL_ADDR_UNKNOWN -1LL +struct mtd_info { + uint32_t oobavail; + uint32_t oobsize; + uint32_t size; + uint32_t erasesize; + uint32_t writesize; +}; + static inline int do_mtd_point(size_t *retlen, void **ebuf) { *retlen = 0; @@ -20,4 +28,33 @@ static inline int do_mtd_point(size_t *retlen, void **ebuf) #define mtd_kmalloc_up_to(a, b) kmalloc(*(b), GFP_KERNEL) +struct mtd_oob_ops { + uint32_t mode; + size_t len; + size_t retlen; + size_t ooblen; + size_t oobretlen; + uint32_t ooboffs; + uint8_t *datbuf; + uint8_t *oobbuf; +}; + +#define EUCLEAN EAGAIN +static inline int mtd_is_bitflip(int err) { return (err == -EUCLEAN); } + +#define mtd_block_isbad(mtd_sp, offset) ({ \ + bool bad; \ + int sc = jffs2_flash_block_is_bad(RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd), offset, &bad); \ + if (sc) { \ + return sc; \ + } \ + bad; \ +}) +#define mtd_block_markbad(mtd_sp, offset) \ + jffs2_flash_block_mark_bad(RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd), offset) +#define mtd_write(mtd_sp, ofs, len, retlen, buf) \ + jffs2_flash_direct_write(RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd), ofs, len, retlen, buf) +#define mtd_read(mtd_sp, ofs, len, retlen, buf) \ + jffs2_flash_direct_read(RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd), ofs, len, retlen, buf) + #endif /* __LINUX_MTD_MTD_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/mtd/rawnand.h b/cpukit/libfs/src/jffs2/include/linux/mtd/rawnand.h new file mode 100644 index 0000000000..fe47ba6fbf --- /dev/null +++ b/cpukit/libfs/src/jffs2/include/linux/mtd/rawnand.h @@ -0,0 +1,26 @@ +#ifndef __LINUX_MTD_RAWNAND_H__ +#define __LINUX_MTD_RAWNAND_H__ + +#define mtd_read_oob(mtd_sp, offset, ops) ({ \ + struct jffs2_sb_info *sb_info = RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd); \ + int sc = jffs2_flash_oob_read(sb_info, offset, (ops)->oobbuf, (ops)->ooblen); \ + if (sc) { \ + sc = -EIO; \ + } else { \ + (ops)->oobretlen = (ops)->ooblen; \ + } \ + sc; \ +}) +#define mtd_write_oob(mtd_sp, offset, ops) ({ \ + struct jffs2_sb_info *sb_info = RTEMS_CONTAINER_OF(&(mtd_sp), struct jffs2_sb_info, mtd); \ + int sc = jffs2_flash_oob_write(sb_info, offset, (ops)->oobbuf, (ops)->ooblen); \ + if (sc != RTEMS_SUCCESSFUL) { \ + sc = -EIO; \ + } else { \ + (ops)->oobretlen = (ops)->ooblen; \ + } \ + sc; \ +}) +#define MTD_OPS_AUTO_OOB 1 + +#endif /* __LINUX_MTD_RAWNAND_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/mutex.h b/cpukit/libfs/src/jffs2/include/linux/mutex.h index f5e1efb1af..cc82a3f17a 100644 --- a/cpukit/libfs/src/jffs2/include/linux/mutex.h +++ b/cpukit/libfs/src/jffs2/include/linux/mutex.h @@ -26,4 +26,6 @@ static inline void mutex_unlock(struct mutex *m) (void) m; } +#define mutex_is_locked(m) 1 + #endif diff --git a/cpukit/libfs/src/jffs2/include/linux/printk.h b/cpukit/libfs/src/jffs2/include/linux/printk.h new file mode 100644 index 0000000000..515188faa1 --- /dev/null +++ b/cpukit/libfs/src/jffs2/include/linux/printk.h @@ -0,0 +1,6 @@ +#ifndef __LINUX_PRINTK_H__ +#define __LINUX_PRINTK_H__ + +#define no_printk(fmt, ...) do { } while (0) + +#endif /* __LINUX_PRINTK_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/rwsem.h b/cpukit/libfs/src/jffs2/include/linux/rwsem.h index 57bfdf13b7..e59e1cede3 100644 --- a/cpukit/libfs/src/jffs2/include/linux/rwsem.h +++ b/cpukit/libfs/src/jffs2/include/linux/rwsem.h @@ -1,6 +1,16 @@ #ifndef __LINUX_RWSEM_H__ #define __LINUX_RWSEM_H__ -struct rw_semaphore; +struct rw_semaphore {}; + +#define init_rwsem(rwsem) + +#define down_read(rwsem) + +#define down_write(rwsem) + +#define up_read(rwsem) + +#define up_write(rwsem) #endif /* __LINUX_RWSEM_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/slab.h b/cpukit/libfs/src/jffs2/include/linux/slab.h index 532586e210..d664f50dfb 100644 --- a/cpukit/libfs/src/jffs2/include/linux/slab.h +++ b/cpukit/libfs/src/jffs2/include/linux/slab.h @@ -7,6 +7,7 @@ #define kzalloc(x, y) calloc(1, x) #define kmalloc(x, y) malloc(x) +#define kmalloc_array(x, y, z) kmalloc((x * y), z) #define kfree(x) free(x) #define kvfree(x) free(x) #define vmalloc(x) malloc(x) diff --git a/cpukit/libfs/src/jffs2/include/linux/workqueue.h b/cpukit/libfs/src/jffs2/include/linux/workqueue.h index 90d98288af..9811c7cd3e 100644 --- a/cpukit/libfs/src/jffs2/include/linux/workqueue.h +++ b/cpukit/libfs/src/jffs2/include/linux/workqueue.h @@ -1,10 +1,34 @@ #ifndef __LINUX_WORKQUEUE_H__ #define __LINUX_WORKQUEUE_H__ -struct work_struct { } ; +#include <rtems/chain.h> +#include <linux/mutex.h> -#define INIT_WORK(x,y,z) /* */ -#define schedule_work(x) do { } while(0) -#define flush_scheduled_work() do { } while(0) +struct work_struct { rtems_chain_node node; }; + +#define queue_delayed_work(workqueue, delayed_work, delay_ms) ({ \ + jffs2_queue_delayed_work(delayed_work, delay_ms); \ + 0; \ +}) + +#define INIT_DELAYED_WORK(delayed_work, delayed_workqueue_callback) ({ \ + (delayed_work)->callback = delayed_workqueue_callback; \ +}) + +#define msecs_to_jiffies(a) (a) + +typedef void (*work_callback_t)(struct work_struct *work); +struct delayed_work { + struct work_struct work; + struct mutex dw_mutex; + volatile bool pending; + volatile uint64_t execution_time; + work_callback_t callback; + /* Superblock provided for locking */ + struct super_block *sb; +}; + +#define to_delayed_work(work) RTEMS_CONTAINER_OF(work, struct delayed_work, work) +void jffs2_queue_delayed_work(struct delayed_work *work, int delay_ms); #endif /* __LINUX_WORKQUEUE_H__ */ diff --git a/cpukit/libfs/src/jffs2/include/linux/writeback.h b/cpukit/libfs/src/jffs2/include/linux/writeback.h new file mode 100644 index 0000000000..9899205383 --- /dev/null +++ b/cpukit/libfs/src/jffs2/include/linux/writeback.h @@ -0,0 +1 @@ +/* This file intentionally left empty as a stub for wbuf.c */ |