adfs_fs.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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