⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os-ecos.h

📁 带SD卡的LINUX根文件系统. 在ARM上应用
💻 H
字号:
/* * JFFS2 -- Journalling Flash File System, Version 2. * * Copyright (C) 2002 Red Hat, Inc. * * Created by David Woodhouse <dwmw2@cambridge.redhat.com> * * For licensing information, see the file 'LICENCE' in this directory. * * $Id: os-ecos.h,v 1.5 2003/01/21 18:14:27 dwmw2 Exp $ * */#ifndef __JFFS2_OS_ECOS_H__#define __JFFS2_OS_ECOS_H__#include <cyg/io/io.h>#include <sys/types.h>#include <asm/atomic.h>#include <linux/stat.h>#include "jffs2port.h"#define CONFIG_JFFS2_FS_DEBUG 0static inline uint32_t os_to_jffs2_mode(uint32_t osmode){	uint32_t jmode = ((osmode & S_IRUSR)?00400:0) |		((osmode & S_IWUSR)?00200:0) |		((osmode & S_IXUSR)?00100:0) |		((osmode & S_IRGRP)?00040:0) |		((osmode & S_IWGRP)?00020:0) |		((osmode & S_IXGRP)?00010:0) |		((osmode & S_IROTH)?00004:0) |		((osmode & S_IWOTH)?00002:0) |		((osmode & S_IXOTH)?00001:0);	switch (osmode & S_IFMT) {	case S_IFSOCK:		return jmode | 0140000;	case S_IFLNK:		return jmode | 0120000;	case S_IFREG:		return jmode | 0100000;	case S_IFBLK:		return jmode | 0060000;	case S_IFDIR:		return jmode | 0040000;	case S_IFCHR:		return jmode | 0020000;	case S_IFIFO:		return jmode | 0010000;	case S_ISUID:		return jmode | 0004000;	case S_ISGID:		return jmode | 0002000;#ifdef S_ISVTX	case S_ISVTX:		return jmode | 0001000;#endif	}	printf("os_to_jffs2_mode() cannot convert 0x%x\n", osmode);	BUG();	return 0;}static inline uint32_t jffs2_to_os_mode (uint32_t jmode){	uint32_t osmode = ((jmode & 00400)?S_IRUSR:0) |		((jmode & 00200)?S_IWUSR:0) |		((jmode & 00100)?S_IXUSR:0) |		((jmode & 00040)?S_IRGRP:0) |		((jmode & 00020)?S_IWGRP:0) |		((jmode & 00010)?S_IXGRP:0) |		((jmode & 00004)?S_IROTH:0) |		((jmode & 00002)?S_IWOTH:0) |		((jmode & 00001)?S_IXOTH:0);	switch(jmode & 00170000) {	case 0140000:		return osmode | S_IFSOCK;	case 0120000:		return osmode | S_IFLNK;	case 0100000:		return osmode | S_IFREG;	case 0060000:		return osmode | S_IFBLK;	case 0040000:		return osmode | S_IFDIR;	case 0020000:		return osmode | S_IFCHR;	case 0010000:		return osmode | S_IFIFO;	case 0004000:		return osmode | S_ISUID;	case 0002000:		return osmode | S_ISGID;#ifdef S_ISVTX	case 0001000:		return osmode | S_ISVTX;#endif	}	printf("jffs2_to_os_mode() cannot convert 0x%x\n", osmode);	BUG();	return 0;} /* Read-only operation not currently implemented on eCos */#define jffs2_is_readonly(c) (0)/* NAND flash not currently supported on eCos */#define jffs2_can_mark_obsolete(c) (1)#define JFFS2_INODE_INFO(i) (&(i)->jffs2_i)#define OFNI_EDONI_2SFFJ(f)  ((struct inode *) ( ((char *)f) - ((char *)(&((struct inode *)NULL)->jffs2_i)) ) ) #define JFFS2_F_I_SIZE(f) (OFNI_EDONI_2SFFJ(f)->i_size)#define JFFS2_F_I_MODE(f) (OFNI_EDONI_2SFFJ(f)->i_mode)#define JFFS2_F_I_UID(f) (OFNI_EDONI_2SFFJ(f)->i_uid)#define JFFS2_F_I_GID(f) (OFNI_EDONI_2SFFJ(f)->i_gid)#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime)#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime)#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime)/* FIXME: eCos doesn't hav a concept of device major/minor numbers */#define JFFS2_F_I_RDEV_MIN(f) (MINOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))#define JFFS2_F_I_RDEV_MAJ(f) (MAJOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))//#define ITIME(sec) (sec)//#define I_SEC(x) (x)#define get_seconds cyg_timestampstruct inode {	//struct list_head	i_hash;	//struct list_head	i_list;	struct list_head	i_dentry;	cyg_uint32		i_ino;	atomic_t		i_count;	//kdev_t			i_dev;	mode_t			i_mode;	nlink_t			i_nlink;	uid_t			i_uid;	gid_t			i_gid;	kdev_t			i_rdev;	off_t			i_size;	time_t			i_atime;	time_t			i_mtime;	time_t			i_ctime;	unsigned long		i_blksize;	unsigned long		i_blocks;	//unsigned long		i_version;	//struct semaphore	i_sem;	//struct semaphore	i_zombie;	struct inode_operations	*i_op;	struct file_operations	*i_fop;	// former ->i_op->default_file_ops 	struct super_block	*i_sb;	//wait_queue_head_t	i_wait;	//struct file_lock	*i_flock;	//struct address_space	*i_mapping;	//struct address_space	i_data;		//struct dquot		*i_dquot[MAXQUOTAS];	//struct pipe_inode_info	*i_pipe;	//struct block_device	*i_bdev;	//unsigned long		i_state;	unsigned int		i_flags;	//unsigned char		i_sock;	atomic_t		i_writecount;	//unsigned int		i_attr_flags;	//uint32_t			i_generation;	struct jffs2_inode_info	jffs2_i;        struct inode *i_parent;        struct inode *i_cache_prev;        struct inode *i_cache_next;};#define JFFS2_SB_INFO(sb) (&(sb)->jffs2_sb)#define OFNI_BS_2SFFJ(c)  ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->jffs2_sb)) ) )struct super_block {	unsigned long		s_blocksize;	unsigned char		s_blocksize_bits;	unsigned char		s_dirt;	//struct super_operations	*s_op;	unsigned long		s_flags;	unsigned long		s_magic;	//struct dentry		*s_root;	struct inode		*s_root;	struct jffs2_sb_info jffs2_sb;        unsigned long       s_mount_count;    cyg_io_handle_t     s_dev;};#define sleep_on_spinunlock(wq, sl) do { ; } while(0)#define EBADFD 32767/* background.c */static inline void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c){	/* We don't have a GC thread in eCos (yet) */}/* dir.c */extern struct file_operations jffs2_dir_operations;extern struct inode_operations jffs2_dir_inode_operations;/* file.c */extern struct file_operations jffs2_file_operations;extern struct inode_operations jffs2_file_inode_operations;extern struct address_space_operations jffs2_file_address_operations;int jffs2_null_fsync(struct file *, struct dentry *, int);int jffs2_setattr (struct dentry *dentry, struct iattr *iattr);int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg);int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);//int jffs2_readpage (struct file *, struct page *);int jffs2_readpage (struct inode *d_inode, struct page *pg);//int jffs2_prepare_write (struct file *, struct page *, unsigned, unsigned);int jffs2_prepare_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end);//int jffs2_commit_write (struct file *, struct page *, unsigned, unsigned);int jffs2_commit_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end);#ifndef CONFIG_JFFS2_FS_NAND#define jffs2_can_mark_obsolete(c) (1)#define jffs2_cleanmarker_oob(c) (0)#define jffs2_write_nand_cleanmarker(c,jeb) (-EIO)#define jffs2_flush_wbuf(c, flag) do { ; } while(0)#define jffs2_nand_read_failcnt(c,jeb) do { ; } while(0)#define jffs2_write_nand_badblock(c,jeb) do { ; } while(0)#define jffs2_flash_writev jffs2_flash_writev#define jffs2_wbuf_timeout NULL#define jffs2_wbuf_process NULL#else#error no nand yet#endifstruct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri);void jffs2_clear_inode (struct inode *inode);void jffs2_read_inode (struct inode *inode);static inline void jffs2_init_inode_info(struct jffs2_inode_info *f){	memset(f, 0, sizeof(*f));	init_MUTEX_LOCKED(&f->sem);}#endif /* __JFFS2_OS_ECOS_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -