1 /* Internal data structures for ADFS */
3 #define ADFS_FREE_FRAG 0
4 #define ADFS_BAD_FRAG 1
5 #define ADFS_ROOT_FRAG 2
7 #define ADFS_NDA_OWNER_READ (1 << 0)
8 #define ADFS_NDA_OWNER_WRITE (1 << 1)
9 #define ADFS_NDA_LOCKED (1 << 2)
10 #define ADFS_NDA_DIRECTORY (1 << 3)
11 #define ADFS_NDA_EXECUTE (1 << 4)
12 #define ADFS_NDA_PUBLIC_READ (1 << 5)
13 #define ADFS_NDA_PUBLIC_WRITE (1 << 6)
15 #include <linux/version.h>
24 struct super_block
*sb
;
27 struct buffer_head
*bh
[4];
29 unsigned int parent_id
;
31 struct adfs_dirheader dirhead
;
32 union adfs_dirtail dirtail
;
36 * This is the overall maximum name length
38 #define ADFS_MAX_NAME_LEN 256
40 __u32 parent_id
; /* parent object id */
41 __u32 file_id
; /* object id */
42 __u32 loadaddr
; /* load address */
43 __u32 execaddr
; /* execution address */
44 __u32 size
; /* size */
45 __u8 attr
; /* RISC OS attributes */
46 unsigned char name_len
; /* name length */
47 char name
[ADFS_MAX_NAME_LEN
];/* file name */
51 int (*read
)(struct super_block
*sb
, unsigned int id
, unsigned int sz
, struct adfs_dir
*dir
);
52 int (*setpos
)(struct adfs_dir
*dir
, unsigned int fpos
);
53 int (*getnext
)(struct adfs_dir
*dir
, struct object_info
*obj
);
54 int (*update
)(struct adfs_dir
*dir
, struct object_info
*obj
);
55 int (*create
)(struct adfs_dir
*dir
, struct object_info
*obj
);
56 int (*remove
)(struct adfs_dir
*dir
, struct object_info
*obj
);
57 void (*free
)(struct adfs_dir
*dir
);
61 struct buffer_head
*dm_bh
;
63 unsigned int dm_startbit
;
64 unsigned int dm_endbit
;
68 struct inode
*adfs_iget(struct super_block
*sb
, struct object_info
*obj
);
69 int adfs_write_inode(struct inode
*inode
,int unused
);
70 int adfs_notify_change(struct dentry
*dentry
, struct iattr
*attr
);
73 extern int adfs_map_lookup(struct super_block
*sb
, unsigned int frag_id
, unsigned int offset
);
74 extern unsigned int adfs_map_free(struct super_block
*sb
);
77 void __adfs_error(struct super_block
*sb
, const char *function
,
78 const char *fmt
, ...);
79 #define adfs_error(sb, fmt...) __adfs_error(sb, __FUNCTION__, fmt)
84 * Inodes and file operations
88 extern struct inode_operations adfs_dir_inode_operations
;
89 extern struct file_operations adfs_dir_operations
;
90 extern struct dentry_operations adfs_dentry_operations
;
91 extern struct adfs_dir_ops adfs_f_dir_ops
;
92 extern struct adfs_dir_ops adfs_fplus_dir_ops
;
94 extern int adfs_dir_update(struct super_block
*sb
, struct object_info
*obj
);
97 extern struct inode_operations adfs_file_inode_operations
;
98 extern struct file_operations adfs_file_operations
;
100 static inline __u32
signed_asl(__u32 val
, signed int shift
)
110 * Calculate the address of a block in an object given the block offset
111 * and the object identity.
113 * The root directory ID should always be looked up in the map [3.4]
116 __adfs_block_map(struct super_block
*sb
, unsigned int object_id
,
119 if (object_id
& 255) {
122 off
= (object_id
& 255) - 1;
123 block
+= off
<< ADFS_SB(sb
)->s_log2sharesize
;
126 return adfs_map_lookup(sb
, object_id
>> 8, block
);