adfs_fs.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
- #ifndef _ADFS_FS_H
- #define _ADFS_FS_H
- #include <linux/types.h>
- /*
- * Disc Record at disc address 0xc00
- */
- struct adfs_discrecord {
- __u8 log2secsize;
- __u8 secspertrack;
- __u8 heads;
- __u8 density;
- __u8 idlen;
- __u8 log2bpmb;
- __u8 skew;
- __u8 bootoption;
- __u8 lowsector;
- __u8 nzones;
- __le16 zone_spare;
- __le32 root;
- __le32 disc_size;
- __le16 disc_id;
- __u8 disc_name[10];
- __le32 disc_type;
- __le32 disc_size_high;
- __u8 log2sharesize:4;
- __u8 unused40:4;
- __u8 big_flag:1;
- __u8 unused41:1;
- __u8 nzones_high;
- __le32 format_version;
- __le32 root_size;
- __u8 unused52[60 - 52];
- };
- #define ADFS_DISCRECORD (0xc00)
- #define ADFS_DR_OFFSET (0x1c0)
- #define ADFS_DR_SIZE 60
- #define ADFS_DR_SIZE_BITS (ADFS_DR_SIZE << 3)
- #define ADFS_SUPER_MAGIC 0xadf5
- #ifdef __KERNEL__
- #include <linux/adfs_fs_i.h>
- #include <linux/adfs_fs_sb.h>
- /*
- * Calculate the boot block checksum on an ADFS drive. Note that this will
- * appear to be correct if the sector contains all zeros, so also check that
- * the disk size is non-zero!!!
- */
- static inline int adfs_checkbblk(unsigned char *ptr)
- {
- unsigned int result = 0;
- unsigned char *p = ptr + 511;
- do {
- result = (result & 0xff) + (result >> 8);
- result = result + *--p;
- } while (p != ptr);
- return (result & 0xff) != ptr[511];
- }
- static inline struct adfs_sb_info *ADFS_SB(struct super_block *sb)
- {
- return sb->s_fs_info;
- }
- static inline struct adfs_inode_info *ADFS_I(struct inode *inode)
- {
- return container_of(inode, struct adfs_inode_info, vfs_inode);
- }
- #endif
- #endif