probe.h revision 09a2ef8ddab7fed91b9ec8314e0a10e11d3c0323
1e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * probe.h - constants and on-disk structures for extracting device data 3e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * 4e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Copyright (C) 1999 by Andries Brouwer 550b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'o * Copyright (C) 1999, 2000, 2003 by Theodore Ts'o 6e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Copyright (C) 2001 by Andreas Dilger 7e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * 8e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %Begin-Header% 9e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * This file may be redistributed under the terms of the 10e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * GNU Lesser General Public License. 11e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * %End-Header% 12e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o */ 13e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 14e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#ifndef _BLKID_PROBE_H 15e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#define _BLKID_PROBE_H 16e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 17e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#include <blkid/blkid_types.h> 18e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 19e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct blkid_magic; 20e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 2150b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'otypedef int (*blkid_probe_t)(int fd, blkid_cache cache, blkid_dev dev, 2279dd234a799434b6dc8365c49e743f00eb09d2fdTheodore Ts'o struct blkid_magic *id, unsigned char *buf); 23e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 24e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct blkid_magic { 25e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o const char *bim_type; /* type name for this magic */ 26e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o long bim_kboff; /* kilobyte offset of superblock */ 27e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned bim_sboff; /* byte offset within superblock */ 28e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned bim_len; /* length of magic */ 29d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o const char *bim_magic; /* magic string */ 30e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o blkid_probe_t bim_probe; /* probe function */ 31e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 32e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 33e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 34e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * Structures for each of the content types we want to extract information 35e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * from. We do not necessarily need the magic field here, because we have 36e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * already identified the content type before we get this far. It may still 37e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o * be useful if there are probe functions which handle multiple content types. 38e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o */ 39e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct ext2_super_block { 40e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_inodes_count; 41e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_blocks_count; 42e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_r_blocks_count; 43e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_free_blocks_count; 44e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_free_inodes_count; 45e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_first_data_block; 46e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_log_block_size; 47e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_dummy3[7]; 48e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char s_magic[2]; 49e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 s_state; 50e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_dummy5[8]; 51e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_feature_compat; 52e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_feature_incompat; 53e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 s_feature_ro_compat; 54e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char s_uuid[16]; 55d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o char s_volume_name[16]; 56e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 57e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x00000004 58e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#define EXT3_FEATURE_INCOMPAT_RECOVER 0x00000004 59e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x00000008 60e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 61e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct xfs_super_block { 62e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char xs_magic[4]; 63e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 xs_blocksize; 64e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u64 xs_dblocks; 65e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u64 xs_rblocks; 6609a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 xs_dummy1[2]; 67e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char xs_uuid[16]; 68e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 xs_dummy2[15]; 69d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o char xs_fname[12]; 70e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 xs_dummy3[2]; 71e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u64 xs_icount; 72e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u64 xs_ifree; 73e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u64 xs_fdblocks; 74e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 75e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 76e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct reiserfs_super_block { 77e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_blocks_count; 78e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_free_blocks; 79e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_root_block; 80e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_journal_block; 81e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_journal_dev; 82e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_orig_journal_size; 83e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_dummy2[5]; 84e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 rs_blocksize; 85e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 rs_dummy3[3]; 86e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char rs_magic[12]; 87e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 rs_dummy4[5]; 88e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char rs_uuid[16]; 89d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o char rs_label[16]; 90e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 91e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 9209a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'ostruct jfs_super_block { 9309a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char js_magic[4]; 9409a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 js_version; 9509a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u64 js_size; 9609a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 js_bsize; 9709a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 js_dummy1; 9809a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 js_pbsize; 9909a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 js_dummy2[27]; 10009a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char js_uuid[16]; 10109a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char js_label[16]; 10209a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char js_loguuid[16]; 10309a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o}; 10409a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o 10509a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'ostruct romfs_super_block { 10609a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char ros_magic[8]; 10709a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o __u32 ros_dummy1[2]; 10809a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o unsigned char ros_volume[16]; 10909a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o}; 11009a2ef8ddab7fed91b9ec8314e0a10e11d3c0323Theodore Ts'o 111e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* Yucky misaligned values */ 112e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct vfat_super_block { 113e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 00*/ unsigned char vs_ignored[3]; 114e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 03*/ unsigned char vs_sysid[8]; 115e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0b*/ unsigned char vs_sector_size[2]; 116e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0d*/ __u8 vs_cluster_size; 117e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0e*/ __u16 vs_reserved; 118e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 10*/ __u8 vs_fats; 119e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 11*/ unsigned char vs_dir_entries[2]; 120e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 13*/ unsigned char vs_sectors[2]; 121e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 15*/ unsigned char vs_media; 122e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 16*/ __u16 vs_fat_length; 123e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 18*/ __u16 vs_secs_track; 124e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1a*/ __u16 vs_heads; 125e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1c*/ __u32 vs_hidden; 126e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 20*/ __u32 vs_total_sect; 127e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 24*/ __u32 vs_fat32_length; 128e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 28*/ __u16 vs_flags; 129e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2a*/ __u8 vs_version[2]; 130e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 2c*/ __u32 vs_root_cluster; 131e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 30*/ __u16 vs_insfo_sector; 132e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 32*/ __u16 vs_backup_boot; 133e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 34*/ __u16 vs_reserved2[6]; 134e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 40*/ unsigned char vs_unknown[3]; 135e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 43*/ unsigned char vs_serno[4]; 136d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o/* 47*/ char vs_label[11]; 137e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 52*/ unsigned char vs_magic[8]; 138e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 5a*/ unsigned char vs_dummy2[164]; 139e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*1fe*/ unsigned char vs_pmagic[2]; 140e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 141e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 142e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* Yucky misaligned values */ 143e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct msdos_super_block { 144e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 00*/ unsigned char ms_ignored[3]; 145e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 03*/ unsigned char ms_sysid[8]; 146e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0b*/ unsigned char ms_sector_size[2]; 147e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0d*/ __u8 ms_cluster_size; 148e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 0e*/ __u16 ms_reserved; 149e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 10*/ __u8 ms_fats; 150e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 11*/ unsigned char ms_dir_entries[2]; 151e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 13*/ unsigned char ms_sectors[2]; 152e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 15*/ unsigned char ms_media; 153e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 16*/ __u16 ms_fat_length; 154e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 18*/ __u16 ms_secs_track; 155e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1a*/ __u16 ms_heads; 156e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 1c*/ __u32 ms_hidden; 157e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 20*/ __u32 ms_total_sect; 158e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 24*/ unsigned char ms_unknown[3]; 159e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 27*/ unsigned char ms_serno[4]; 160d3f917989badf78d1f97654e46d60d1f3d25cd17Theodore Ts'o/* 2b*/ char ms_label[11]; 161e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 36*/ unsigned char ms_magic[8]; 162e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/* 3d*/ unsigned char ms_dummy2[192]; 163e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o/*1fe*/ unsigned char ms_pmagic[2]; 164e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 165e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 166e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct minix_super_block { 167e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_ninodes; 168e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_nzones; 169e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_imap_blocks; 170e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_zmap_blocks; 171e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_firstdatazone; 172e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_log_zone_size; 173e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 ms_max_size; 174e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned char ms_magic[2]; 175e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u16 ms_state; 176e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 ms_zones; 177e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 178e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 179e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct swap_header { 180e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o char sh_bootbits[1024]; 181e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned int sh_version; 182e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned int sh_last_page; 183e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o unsigned int sh_nr_badpages; 184e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o char sh_label[16]; 185e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 186e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 187e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct mdp_superblock_s { 188e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 md_magic; 189e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 major_version; 190e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 minor_version; 191e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 patch_version; 192e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 gvalid_words; 193e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 set_uuid0; 194e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 ctime; 195e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 level; 196e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 size; 197e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 nr_disks; 198e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 raid_disks; 199e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 md_minor; 200e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 not_persistent; 201e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 set_uuid1; 202e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 set_uuid2; 203e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 set_uuid3; 204e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 205e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 206e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'ostruct hfs_super_block { 207e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o char h_magic[2]; 208e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o char h_dummy[18]; 209e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o __u32 h_blksize; 210e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o}; 211e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 21276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o/* 21376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o * Byte swap functions 21476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o */ 21576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#ifdef __GNUC__ 216ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#define _INLINE_ static __inline__ 21776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#else /* For Watcom C */ 218ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#define _INLINE_ static inline 21976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#endif 22076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 221ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u16 blkid_swab16(__u16 val); 222ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u32 blkid_swab32(__u32 val); 223ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'ostatic __u64 blkid_swab64(__u64 val); 22450b380b4d4ab668bad45033e3a8aaf93c7f42844Theodore Ts'o 22576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#if ((defined __GNUC__) && \ 22676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o (defined(__i386__) || defined(__i486__) || defined(__i586__))) 22776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 22876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define _BLKID_HAVE_ASM_BITOPS_ 22976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 23076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u32 blkid_swab32(__u32 val) 23176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 23276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#ifdef EXT2FS_REQUIRE_486 23376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o __asm__("bswap %0" : "=r" (val) : "0" (val)); 234e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#else 23576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ 23676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o "rorl $16,%0\n\t" /* swap words */ 23776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o "xchgb %b0,%h0" /* swap higher bytes */ 23876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o :"=q" (val) 23976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o : "0" (val)); 24076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#endif 24176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return val; 24276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 24376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 24476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u16 blkid_swab16(__u16 val) 24576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 24676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o __asm__("xchgb %b0,%h0" /* swap bytes */ \ 24776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o : "=q" (val) \ 24876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o : "0" (val)); \ 24976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return val; 25076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 25176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 25276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u64 blkid_swab64(__u64 val) 25376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 25476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return (blkid_swab32(val >> 32) | 25576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o (((__u64) blkid_swab32(val & 0xFFFFFFFFUL)) << 32)); 25676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 257e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif 25876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 25976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#if !defined(_BLKID_HAVE_ASM_BITOPS_) 26076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 26176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u16 blkid_swab16(__u16 val) 26276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 26376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return (val >> 8) | (val << 8); 26476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 26576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 26676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o_INLINE_ __u32 blkid_swab32(__u32 val) 26776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 26876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return ((val>>24) | ((val>>8)&0xFF00) | 26976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o ((val<<8)&0xFF0000) | (val<<24)); 27076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 27176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 272ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o_INLINE_ __u64 blkid_swab64(__u64 val) 27376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o{ 27476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o return (blkid_swab32(val >> 32) | 27576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o (((__u64) blkid_swab32(val & 0xFFFFFFFFUL)) << 32)); 27676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o} 27776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#endif 27876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 27976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 28076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o 28176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#if __BYTE_ORDER == __BIG_ENDIAN 28276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le16(x) blkid_swab16(x) 28376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le32(x) blkid_swab32(x) 28476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le64(x) blkid_swab64(x) 28576b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be16(x) (x) 28676b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be32(x) (x) 28776b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be64(x) (x) 28876b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#else 28976b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le16(x) (x) 29076b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le32(x) (x) 29176b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_le64(x) (x) 29276b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be16(x) blkid_swab16(x) 29376b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be32(x) blkid_swab32(x) 29476b07bb1bc9cbcb70a94cb235954eaac993920adTheodore Ts'o#define blkid_be64(x) blkid_swab64(x) 295e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif 296e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o 297ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o#undef _INLINE_ 298ed78c021c3b111d8ab9a51aef5d5156e3004083fTheodore Ts'o 299e12f2ae74c2eb8997bf13adf8fdd7e7313971eaeTheodore Ts'o#endif /* _BLKID_PROBE_H */ 300