1 1.1 rumble /* $NetBSD: efs_sb.h,v 1.1 2007/06/29 23:30:29 rumble Exp $ */ 2 1.1 rumble 3 1.1 rumble /* 4 1.1 rumble * Copyright (c) 2006 Stephen M. Rumble <rumble (at) ephemeral.org> 5 1.1 rumble * 6 1.1 rumble * Permission to use, copy, modify, and distribute this software for any 7 1.1 rumble * purpose with or without fee is hereby granted, provided that the above 8 1.1 rumble * copyright notice and this permission notice appear in all copies. 9 1.1 rumble * 10 1.1 rumble * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 1.1 rumble * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 1.1 rumble * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 1.1 rumble * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 1.1 rumble * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 1.1 rumble * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 1.1 rumble * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 1.1 rumble */ 18 1.1 rumble 19 1.1 rumble /* 20 1.1 rumble * See IRIX efs(4) 21 1.1 rumble */ 22 1.1 rumble 23 1.1 rumble #ifndef _FS_EFS_EFS_SB_H_ 24 1.1 rumble #define _FS_EFS_EFS_SB_H_ 25 1.1 rumble 26 1.1 rumble /* 27 1.1 rumble * EFS superblock (92 bytes) 28 1.1 rumble * 29 1.1 rumble * Notes: 30 1.1 rumble * [0] - Values can either be EFS_SB_MAGIC, or EFS_SB_NEWMAGIC (IRIX 3.3+). 31 1.1 rumble * [1] - Only used in a grown filesystem. Original bitmap is unused. 32 1.1 rumble * [2] - Only exists in IRIX3.3+. (XXX - IRIX man pages say 3.3+ fsck 33 1.1 rumble * creates a replicated superblock if space free. Does it update magic?) 34 1.1 rumble * [3] - According to IRIX kernel elf headers, two checksum routines exist. 35 1.1 rumble * [4] - New at some point (in IRIX 5, but apparently not in IRIX 4). 36 1.1 rumble */ 37 1.1 rumble struct efs_sb { 38 1.1 rumble int32_t sb_size; /* 0: fs size incl. bb 0 (in bb) */ 39 1.1 rumble int32_t sb_firstcg; /* 4: first cg offset (in bb) */ 40 1.1 rumble int32_t sb_cgfsize; /* 8: cg size (in bb) */ 41 1.1 rumble int16_t sb_cgisize; /* 12: inodes/cg (in bb) */ 42 1.1 rumble int16_t sb_sectors; /* 14: geom: sectors/track */ 43 1.1 rumble int16_t sb_heads; /* 16: geom: heads/cylinder (unused) */ 44 1.1 rumble int16_t sb_ncg; /* 18: num of cg's in the filesystem */ 45 1.1 rumble int16_t sb_dirty; /* 20: non-0 indicates fsck required */ 46 1.1 rumble int16_t sb_pad0; /* 22: */ 47 1.1 rumble int32_t sb_time; /* 24: superblock ctime */ 48 1.1 rumble int32_t sb_magic; /* 28: magic [0] */ 49 1.1 rumble char sb_fname[6]; /* 32: name of filesystem */ 50 1.1 rumble char sb_fpack[6]; /* 38: name of filesystem pack */ 51 1.1 rumble int32_t sb_bmsize; /* 44: bitmap size (in bytes) */ 52 1.1 rumble int32_t sb_tfree; /* 48: total free data blocks */ 53 1.1 rumble int32_t sb_tinode; /* 52: total free inodes */ 54 1.1 rumble int32_t sb_bmblock; /* 56: bitmap offset (grown fs) [1] */ 55 1.1 rumble int32_t sb_replsb; /* 62: repl. superblock offset [2] */ 56 1.1 rumble int32_t sb_lastinode; /* 64: last allocated inode [4] */ 57 1.1 rumble int8_t sb_spare[20]; /* 68: unused */ 58 1.1 rumble int32_t sb_checksum; /* 88: checksum (all above) [3] */ 59 1.1 rumble } __packed; 60 1.1 rumble 61 1.1 rumble #define EFS_SB_SIZE (sizeof(struct efs_sb)) 62 1.1 rumble #define EFS_SB_CHECKSUM_SIZE (EFS_SB_SIZE - 4) 63 1.1 rumble 64 1.1 rumble #define EFS_SB_MAGIC 0x00072959 /* original, ungrown layout */ 65 1.1 rumble #define EFS_SB_NEWMAGIC 0x0007295A /* grown fs (IRIX >= 3.3) */ 66 1.1 rumble 67 1.1 rumble /* sb_dirty values */ 68 1.1 rumble #define EFS_SB_CLEAN 0 /* filesystem is clean */ 69 1.1 rumble 70 1.1 rumble #endif /* !_FS_EFS_EFS_SB_H_ */ 71