Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _ADFS_FS_H |
2 | #define _ADFS_FS_H | |
3 | ||
4 | #include <linux/types.h> | |
e18fa700 | 5 | #include <linux/magic.h> |
1da177e4 LT |
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) | |
1da177e4 LT |
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 | */ | |
51 | static 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 | ||
64 | static inline struct adfs_sb_info *ADFS_SB(struct super_block *sb) | |
65 | { | |
66 | return sb->s_fs_info; | |
67 | } | |
68 | ||
69 | static 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 |