| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _ADFS_FS_H | 
 | 2 | #define _ADFS_FS_H | 
 | 3 |  | 
 | 4 | #include <linux/types.h> | 
| Jeff Garzik | e18fa70 | 2006-09-24 11:13:19 -0400 | [diff] [blame] | 5 | #include <linux/magic.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 |  | 
 | 43 | #ifdef __KERNEL__ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  */ | 
 | 49 | static 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 | } | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 61 | #endif | 
 | 62 |  | 
 | 63 | #endif |