ia64/xen-unstable

view tools/libfsimage/fat/fat.h @ 14807:83e4261378e7

libfsimage: Fix data types for 64-bit architectures.

In particular __u32 instead of ulong.

Signed-off-by: Tomohiro Takahashi <takatom@jp.fujitsu.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
author kfraser@localhost.localdomain
date Wed Apr 11 15:17:17 2007 +0100 (2007-04-11)
parents 47db75f8cc76
children
line source
1 /*
2 * GRUB -- GRand Unified Bootloader
3 * Copyright (C) 2001 Free Software Foundation, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
21 /*
22 * Defines for the FAT BIOS Parameter Block (embedded in the first block
23 * of the partition.
24 */
26 typedef __signed__ char __s8;
27 typedef unsigned char __u8;
28 typedef __signed__ short __s16;
29 typedef unsigned short __u16;
30 typedef __signed__ int __s32;
31 typedef unsigned int __u32;
33 /* Note that some shorts are not aligned, and must therefore
34 * be declared as array of two bytes.
35 */
36 struct fat_bpb {
37 __s8 ignored[3]; /* Boot strap short or near jump */
38 __s8 system_id[8]; /* Name - can be used to special case
39 partition manager volumes */
40 __u8 bytes_per_sect[2]; /* bytes per logical sector */
41 __u8 sects_per_clust;/* sectors/cluster */
42 __u8 reserved_sects[2]; /* reserved sectors */
43 __u8 num_fats; /* number of FATs */
44 __u8 dir_entries[2]; /* root directory entries */
45 __u8 short_sectors[2]; /* number of sectors */
46 __u8 media; /* media code (unused) */
47 __u16 fat_length; /* sectors/FAT */
48 __u16 secs_track; /* sectors per track */
49 __u16 heads; /* number of heads */
50 __u32 hidden; /* hidden sectors (unused) */
51 __u32 long_sectors; /* number of sectors (if short_sectors == 0) */
53 /* The following fields are only used by FAT32 */
54 __u32 fat32_length; /* sectors/FAT */
55 __u16 flags; /* bit 8: fat mirroring, low 4: active fat */
56 __u8 version[2]; /* major, minor filesystem version */
57 __u32 root_cluster; /* first cluster in root directory */
58 __u16 info_sector; /* filesystem info sector */
59 __u16 backup_boot; /* backup boot sector */
60 __u16 reserved2[6]; /* Unused */
61 };
63 #define FAT_CVT_U16(bytarr) (* (__u16*)(bytarr))
65 /*
66 * Defines how to differentiate a 12-bit and 16-bit FAT.
67 */
69 #define FAT_MAX_12BIT_CLUST 4087 /* 4085 + 2 */
71 /*
72 * Defines for the file "attribute" byte
73 */
75 #define FAT_ATTRIB_OK_MASK 0x37
76 #define FAT_ATTRIB_NOT_OK_MASK 0xC8
77 #define FAT_ATTRIB_DIR 0x10
78 #define FAT_ATTRIB_LONGNAME 0x0F
80 /*
81 * Defines for FAT directory entries
82 */
84 #define FAT_DIRENTRY_LENGTH 32
86 #define FAT_DIRENTRY_ATTRIB(entry) \
87 (*((__u8 *) (entry+11)))
88 #define FAT_DIRENTRY_VALID(entry) \
89 ( ((*((__u8 *) entry)) != 0) \
90 && ((*((__u8 *) entry)) != 0xE5) \
91 && !(FAT_DIRENTRY_ATTRIB(entry) & FAT_ATTRIB_NOT_OK_MASK) )
92 #define FAT_DIRENTRY_FIRST_CLUSTER(entry) \
93 ((*((__u16 *) (entry+26)))+(*((__u16 *) (entry+20)) << 16))
94 #define FAT_DIRENTRY_FILELENGTH(entry) \
95 (*((__u32 *) (entry+28)))
97 #define FAT_LONGDIR_ID(entry) \
98 (*((__u8 *) (entry)))
99 #define FAT_LONGDIR_ALIASCHECKSUM(entry) \
100 (*((__u8 *) (entry+13)))