linux/include/linux/adfs_fs.h
<<
>>
Prefs
   1#ifndef _ADFS_FS_H
   2#define _ADFS_FS_H
   3
   4#include <linux/types.h>
   5#include <linux/magic.h>
   6
   7/*
   8 * Disc Record at disc address 0xc00
   9 */
  10struct 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)
  42
  43#ifdef __KERNEL__
  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 */
  49static 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}
  61#endif
  62
  63#endif
  64
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.