| 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 |