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