|  | #ifndef _ADFS_FS_H | 
|  | #define _ADFS_FS_H | 
|  |  | 
|  | #include <linux/types.h> | 
|  | #include <linux/magic.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) | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  | /* | 
|  | * 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]; | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif |