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

📄 adfs.h

📁 《嵌入式系统设计与实例开发实验教材二源码》Linux内核移植与编译实验
💻 H
字号:
/* Internal data structures for ADFS */#define ADFS_FREE_FRAG		 0#define ADFS_BAD_FRAG		 1#define ADFS_ROOT_FRAG		 2#define ADFS_NDA_OWNER_READ	(1 << 0)#define ADFS_NDA_OWNER_WRITE	(1 << 1)#define ADFS_NDA_LOCKED		(1 << 2)#define ADFS_NDA_DIRECTORY	(1 << 3)#define ADFS_NDA_EXECUTE	(1 << 4)#define ADFS_NDA_PUBLIC_READ	(1 << 5)#define ADFS_NDA_PUBLIC_WRITE	(1 << 6)#include "dir_f.h"/* * Directory handling */struct adfs_dir {	struct super_block	*sb;	int			nr_buffers;	struct buffer_head	*bh[4];	unsigned int		pos;	unsigned int		parent_id;	struct adfs_dirheader	dirhead;	union  adfs_dirtail	dirtail;};/* * This is the overall maximum name length */#define ADFS_MAX_NAME_LEN	256struct object_info {	__u32		parent_id;		/* parent object id	*/	__u32		file_id;		/* object id		*/	__u32		loadaddr;		/* load address		*/	__u32		execaddr;		/* execution address	*/	__u32		size;			/* size			*/	__u8		attr;			/* RISC OS attributes	*/	unsigned char	name_len;		/* name length		*/	char		name[ADFS_MAX_NAME_LEN];/* file name		*/};struct adfs_dir_ops {	int	(*read)(struct super_block *sb, unsigned int id, unsigned int sz, struct adfs_dir *dir);	int	(*setpos)(struct adfs_dir *dir, unsigned int fpos);	int	(*getnext)(struct adfs_dir *dir, struct object_info *obj);	int	(*update)(struct adfs_dir *dir, struct object_info *obj);	int	(*create)(struct adfs_dir *dir, struct object_info *obj);	int	(*remove)(struct adfs_dir *dir, struct object_info *obj);	void	(*free)(struct adfs_dir *dir);};struct adfs_discmap {	struct buffer_head	*dm_bh;	__u32			dm_startblk;	unsigned int		dm_startbit;	unsigned int		dm_endbit;};/* dir stuff *//* Inode stuff */#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)int adfs_get_block(struct inode *inode, long block,		   struct buffer_head *bh, int create);#elseint adfs_bmap(struct inode *inode, int block);#endifstruct inode *adfs_iget(struct super_block *sb, struct object_info *obj);void adfs_read_inode(struct inode *inode);void adfs_write_inode(struct inode *inode,int unused);int adfs_notify_change(struct dentry *dentry, struct iattr *attr);/* map.c */extern int adfs_map_lookup(struct super_block *sb, int frag_id, int offset);extern unsigned int adfs_map_free(struct super_block *sb);/* Misc */void __adfs_error(struct super_block *sb, const char *function,		  const char *fmt, ...);#define adfs_error(sb, fmt...) __adfs_error(sb, __FUNCTION__, fmt)/* namei.c */extern struct dentry *adfs_lookup(struct inode *dir, struct dentry *dentry);/* super.c *//* * Inodes and file operations *//* dir_*.c */extern struct inode_operations adfs_dir_inode_operations;extern struct file_operations adfs_dir_operations;extern struct dentry_operations adfs_dentry_operations;extern struct adfs_dir_ops adfs_f_dir_ops;extern struct adfs_dir_ops adfs_fplus_dir_ops;extern int adfs_dir_update(struct super_block *sb, struct object_info *obj);/* file.c */extern struct inode_operations adfs_file_inode_operations;extern struct file_operations adfs_file_operations;extern inline __u32 signed_asl(__u32 val, signed int shift){	if (shift >= 0)		val <<= shift;	else		val >>= -shift;	return val;}/* * Calculate the address of a block in an object given the block offset * and the object identity. * * The root directory ID should always be looked up in the map [3.4] */extern inline int__adfs_block_map(struct super_block *sb, unsigned int object_id,		 unsigned int block){	if (object_id & 255) {		unsigned int off;		off = (object_id & 255) - 1;		block += off << sb->u.adfs_sb.s_log2sharesize;	}	return adfs_map_lookup(sb, object_id >> 8, block);}

⌨️ 快捷键说明

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