17#ifndef __JFFS2_OS_RTEMS_H__
18#define __JFFS2_OS_RTEMS_H__
20#include <asm/atomic.h>
22#include <linux/compiler.h>
23#include <linux/list.h>
24#include <linux/pagemap.h>
25#include <linux/stat.h>
26#include <linux/types.h>
34#include <rtems/jffs2.h>
37#define CONFIG_JFFS2_RTIME
39#define CONFIG_JFFS2_ZLIB
44static inline unsigned int full_name_hash(
const void *salt,
const unsigned char * name,
size_t len) {
49 hash = (hash << 4) | (hash >> 28);
55#define container_of(a, b, c) RTEMS_CONTAINER_OF(a, b, c)
57#define JFFS2_INODE_INFO(i) (&(i)->jffs2_i)
58#define OFNI_EDONI_2SFFJ(f) RTEMS_CONTAINER_OF(f, struct _inode, jffs2_i)
60#define ITIME(sec) (sec)
63#define JFFS2_F_I_SIZE(f) (OFNI_EDONI_2SFFJ(f)->i_size)
64#define JFFS2_F_I_MODE(f) (OFNI_EDONI_2SFFJ(f)->i_mode)
65#define JFFS2_F_I_UID(f) (OFNI_EDONI_2SFFJ(f)->i_uid)
66#define JFFS2_F_I_GID(f) (OFNI_EDONI_2SFFJ(f)->i_gid)
67#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime)
68#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime)
69#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime)
71#define get_seconds() time(NULL)
85 unsigned short i_rdev;
94 struct _inode * i_cache_prev;
95 struct _inode * i_cache_next;
98#define JFFS2_SB_INFO(sb) (&(sb)->jffs2_sb)
99#define OFNI_BS_2SFFJ(c) ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->jffs2_sb)) ) )
111 unsigned char s_gc_buffer[PAGE_CACHE_SIZE];
112 rtems_recursive_mutex s_mutex;
113 char s_name_buf[JFFS2_MAX_NAME_LEN];
117#define sleep_on_spinunlock(wq, sl) spin_unlock(sl)
124 return sb->s_is_readonly;
127static inline void jffs2_garbage_collect_trigger(
struct jffs2_sb_info *c)
140void jffs2_iput(
struct _inode * i);
145#define os_to_jffs2_mode(x) jffs2_from_os_mode(x)
146static inline uint32_t jffs2_from_os_mode(uint32_t osmode)
148 return osmode & (S_IFMT | S_IRWXU | S_IRWXG | S_IRWXO);
151static inline uint32_t jffs2_to_os_mode (uint32_t jmode)
153 return jmode & (S_IFMT | S_IRWXU | S_IRWXG | S_IRWXO);
158int jffs2_flash_read(
struct jffs2_sb_info *c, loff_t read_buffer_offset,
159 size_t size,
size_t * return_size,
unsigned char * write_buffer);
160int jffs2_flash_write(
struct jffs2_sb_info *c, loff_t write_buffer_offset,
161 size_t size,
size_t * return_size,
const unsigned char * read_buffer);
162int jffs2_flash_direct_writev(
struct jffs2_sb_info *c,
const struct iovec *vecs,
163 unsigned long count, loff_t to,
size_t *retlen);
165int jffs2_flash_direct_write(
struct jffs2_sb_info *c, loff_t ofs,
size_t len,
size_t *retlen,
const u_char *buf);
166int jffs2_flash_direct_read(
struct jffs2_sb_info *c, loff_t ofs,
size_t len,
size_t *retlen, u_char *buf);
169struct _inode *jffs2_lookup(
struct _inode *dir_i,
const unsigned char *name,
size_t namelen);
170int jffs2_create(
struct _inode *dir_i,
const char *d_name,
size_t d_namelen,
int mode);
171int jffs2_mknod(
struct _inode *dir_i,
const unsigned char *d_name,
size_t d_namelen,
int mode,
const unsigned char *data,
size_t datalen);
172int jffs2_link (
struct _inode *old_d_inode,
struct _inode *dir_i,
const unsigned char *d_name,
size_t d_namelen);
173int jffs2_unlink(
struct _inode *dir_i,
struct _inode *d_inode,
const unsigned char *d_name,
size_t d_namelen);
174int jffs2_rmdir (
struct _inode *dir_i,
struct _inode *d_inode,
const unsigned char *d_name,
size_t d_namelen);
175int jffs2_rename (
struct _inode *old_dir_i,
struct _inode *d_inode,
const unsigned char *old_d_name,
size_t old_d_namelen,
176 struct _inode *new_dir_i,
const unsigned char *new_d_name,
size_t new_d_namelen);
179static inline void jffs2_erase_pending_trigger(
struct jffs2_sb_info *c)
182#define SECTOR_ADDR(x) ( ((unsigned long)(x) & ~(c->sector_size-1)) )
183#ifndef CONFIG_JFFS2_FS_WRITEBUFFER
185#define jffs2_can_mark_obsolete(c) (1)
186#define jffs2_is_writebuffered(c) (0)
187#define jffs2_cleanmarker_oob(c) (0)
188#define jffs2_write_nand_cleanmarker(c,jeb) (-EIO)
190#define jffs2_flush_wbuf_pad(c) (c=c)
191#define jffs2_flush_wbuf_gc(c, i) ({ (void)(c), (void) i, 0; })
192#define jffs2_nand_read_failcnt(c,jeb) do { ; } while(0)
193#define jffs2_write_nand_badblock(c,jeb,p) (0)
194#define jffs2_flash_setup(c) (0)
195#define jffs2_nand_flash_cleanup(c) do {} while(0)
196#define jffs2_wbuf_dirty(c) (0)
197#define jffs2_flash_writev(a,b,c,d,e,f) jffs2_flash_direct_writev(a,b,c,d,e)
198#define jffs2_wbuf_timeout NULL
199#define jffs2_wbuf_process NULL
200#define jffs2_nor_ecc(c) (0)
203#define dirty_writeback_interval 500
204#define MTD_BIT_WRITEABLE 0x800
205#define jffs2_is_writebuffered(c) (c->wbuf != NULL)
207#define jffs2_can_mark_obsolete(c) (OFNI_BS_2SFFJ(c)->s_flash_control->block_is_bad == NULL)
209#define jffs2_cleanmarker_oob(c) (OFNI_BS_2SFFJ(c)->s_flash_control->block_is_bad != NULL)
211#define jffs2_wbuf_dirty(c) (!!(c)->wbuf_len)
214int jffs2_flash_writev(
struct jffs2_sb_info *c,
const struct kvec *vecs,
unsigned long count, loff_t to,
size_t *retlen, uint32_t ino);
219void jffs2_wbuf_timeout(
unsigned long data);
220void jffs2_wbuf_process(
void *data);
221int jffs2_flush_wbuf_gc(
struct jffs2_sb_info *c, uint32_t ino);
226 cyg_uint32 block_offset,
229 cyg_uint32 block_offset);
231 cyg_uint32 block_offset,
235 cyg_uint32 block_offset,
252#define BUG_ON(x) do { if (unlikely(x)) BUG(); } while(0)
Definition: os-rtems.h:73
Definition: nodelist.h:278
Definition: nodelist.h:252
Definition: jffs2_fs_i.h:20
Definition: jffs2_fs_sb.h:51
JFFS2 compressor control.
Definition: jffs2.h:506
JFFS2 flash device control.
Definition: jffs2.h:355
rtems_jffs2_trigger_garbage_collection trigger_garbage_collection
Trigger garbage collection operation.
Definition: jffs2.h:439
Definition: os-rtems.h:101
This header file provides the API of Self-Contained Objects.