1 #ifndef _ADFS_FS_H 2 #define _ADFS_FS_H 3 4 #include <linux/types.h> 5 #include <linux/magic.h> 6 7 /* 8 * Disc Record at disc address 0xc00 9 */ 10 struct adfs_discrecord { 11 __u8 log2secsize; 12 __u8 secspertrack; 13 __u8 heads; 14 __u8 density; 15 __u8 idlen; 16 __u8 log2bpmb; 17 __u8 skew; 18 __u8 bootoption; 19 __u8 lowsector; 20 __u8 nzones; 21 __le16 zone_spare; 22 __le32 root; 23 __le32 disc_size; 24 __le16 disc_id; 25 __u8 disc_name[10]; 26 __le32 disc_type; 27 __le32 disc_size_high; 28 __u8 log2sharesize:4; 29 __u8 unused40:4; 30 __u8 big_flag:1; 31 __u8 unused41:1; 32 __u8 nzones_high; 33 __le32 format_version; 34 __le32 root_size; 35 __u8 unused52[60 - 52]; 36 }; 37 38 #define ADFS_DISCRECORD (0xc00) 39 #define ADFS_DR_OFFSET (0x1c0) 40 #define ADFS_DR_SIZE 60 41 #define ADFS_DR_SIZE_BITS (ADFS_DR_SIZE << 3) 42 43 #ifdef __KERNEL__ 44 #include <linux/adfs_fs_i.h> 45 #include <linux/adfs_fs_sb.h> 46 /* 47 * Calculate the boot block checksum on an ADFS drive. Note that this will 48 * appear to be correct if the sector contains all zeros, so also check that 49 * the disk size is non-zero!!! 50 */ adfs_checkbblk(unsigned char * ptr)51static inline int adfs_checkbblk(unsigned char *ptr) 52 { 53 unsigned int result = 0; 54 unsigned char *p = ptr + 511; 55 56 do { 57 result = (result & 0xff) + (result >> 8); 58 result = result + *--p; 59 } while (p != ptr); 60 61 return (result & 0xff) != ptr[511]; 62 } 63 ADFS_SB(struct super_block * sb)64static inline struct adfs_sb_info *ADFS_SB(struct super_block *sb) 65 { 66 return sb->s_fs_info; 67 } 68 ADFS_I(struct inode * inode)69static inline struct adfs_inode_info *ADFS_I(struct inode *inode) 70 { 71 return container_of(inode, struct adfs_inode_info, vfs_inode); 72 } 73 74 #endif 75 76 #endif 77