Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / fs / grubfs / filesys.h
diff --git a/qemu/roms/openbios/fs/grubfs/filesys.h b/qemu/roms/openbios/fs/grubfs/filesys.h
new file mode 100644 (file)
index 0000000..6b6f976
--- /dev/null
@@ -0,0 +1,303 @@
+/* GRUB compatibility header
+ *
+ * taken from filo and grub.
+ */
+
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 1999,2000,2001,2003   Free Software Foundation, Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ */
+
+/* This disables some portion of code */
+#define STAGE1_5 1
+
+#if defined CONFIG_X86
+/*
+ * ffz = Find First Zero in word. Undefined if no zero exists,
+ * so code should check against ~0UL first..
+ */
+static __inline__ unsigned int
+ffz (unsigned int word)
+{
+       __asm__ ("bsfl %1,%0"
+         : "=r" (word)
+         : "r" (~word));
+       return word;
+}
+
+static __inline__ unsigned int
+log2 (unsigned int word)
+{
+       __asm__ ("bsfl %1,%0"
+         : "=r" (word)
+         : "r" (word));
+       return word;
+}
+
+#elif defined (CONFIG_PPC)
+static __inline__ unsigned long
+ __ilog2(unsigned long x)
+{
+       unsigned long lz;
+
+       asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
+       return 31 - lz;
+}
+
+static __inline__ unsigned long
+ffz(unsigned long x)
+{
+       if ((x = ~x) == 0)
+               return 32;
+
+       return __ilog2(x & -x);
+}
+
+#define log2(n) ffz(~(n))
+
+#else
+
+static __inline__ unsigned int log2(unsigned int word)
+{
+       /* assume 8 bits per byte. */
+       unsigned int i = 1 << (sizeof(word)*8 - 1);
+       unsigned int pow = sizeof(word) * 8 - 1;
+
+       if (! word) {
+               /* invalid parameter */
+               return -1;
+       }
+       for(; i > word; i >>= 1, pow--) ;
+
+        return pow;
+}
+
+#define ffz(n) log2(~(n))
+
+#endif
+
+static inline int
+substring (const char *s1, const char *s2)
+{
+  while (*s1 == *s2)
+    {
+      /* The strings match exactly. */
+      if (! *(s1++))
+       return 0;
+      s2 ++;
+    }
+
+  /* S1 is a substring of S2. */
+  if (*s1 == 0)
+    return -1;
+
+  /* S1 isn't a substring. */
+  return 1;
+}
+
+#define grub_memmove memmove
+#define grub_strcmp strcmp
+
+#define MAXINT 0x7fffffff
+
+/* This is only used by fsys_* to determine if it's hard disk. If it is,
+ * they try to guess filesystem type by partition type. I guess it is
+ * not necessory, so hardcoded to 0 (first floppy) --ts1 */
+#define current_drive 0
+#define current_slice 0
+#define current_partition 0
+
+/* we fake this for now, assuming that the filesystem is not corrupt */
+#define part_length -1
+extern int filepos;
+extern int filemax;
+extern int fsmax;
+
+/* Error codes (descriptions are in common.c) */
+typedef enum
+{
+  ERR_NONE = 0,
+  ERR_BAD_FILENAME,
+  ERR_BAD_FILETYPE,
+  ERR_BAD_GZIP_DATA,
+  ERR_BAD_GZIP_HEADER,
+  ERR_BAD_PART_TABLE,
+  ERR_BAD_VERSION,
+  ERR_BELOW_1MB,
+  ERR_BOOT_COMMAND,
+  ERR_BOOT_FAILURE,
+  ERR_BOOT_FEATURES,
+  ERR_DEV_FORMAT,
+  ERR_DEV_VALUES,
+  ERR_EXEC_FORMAT,
+  ERR_FILELENGTH,
+  ERR_FILE_NOT_FOUND,
+  ERR_FSYS_CORRUPT,
+  ERR_FSYS_MOUNT,
+  ERR_GEOM,
+  ERR_NEED_LX_KERNEL,
+  ERR_NEED_MB_KERNEL,
+  ERR_NO_DISK,
+  ERR_NO_PART,
+  ERR_NUMBER_PARSING,
+  ERR_OUTSIDE_PART,
+  ERR_READ,
+  ERR_SYMLINK_LOOP,
+  ERR_UNRECOGNIZED,
+  ERR_WONT_FIT,
+  ERR_WRITE,
+  ERR_BAD_ARGUMENT,
+  ERR_UNALIGNED,
+  ERR_PRIVILEGED,
+  ERR_DEV_NEED_INIT,
+  ERR_NO_DISK_SPACE,
+  ERR_NUMBER_OVERFLOW,
+
+  MAX_ERR_NUM
+} grub_error_t;
+
+extern grub_error_t errnum;
+
+#define grub_open file_open
+#define grub_read file_read
+#define grub_seek file_seek
+#define grub_close file_close
+
+/* instrumentation variables */
+/* (Not used in FILO) */
+extern void (*disk_read_hook) (int, int, int);
+extern void (*disk_read_func) (int, int, int);
+
+#define FSYS_BUFLEN 0x8000
+extern char FSYS_BUF[FSYS_BUFLEN];
+
+#define print_possibilities 0
+
+#define SECTOR_SIZE 512
+#define SECTOR_BITS 9
+
+#ifdef CONFIG_FSYS_FAT
+int fat_mount (void);
+int fat_read (char *buf, int len);
+int fat_dir (char *dirname);
+#endif
+
+#ifdef CONFIG_FSYS_EXT2FS
+int ext2fs_mount (void);
+int ext2fs_read (char *buf, int len);
+int ext2fs_dir (char *dirname);
+#endif
+
+#ifdef CONFIG_FSYS_MINIX
+int minix_mount (void);
+int minix_read (char *buf, int len);
+int minix_dir (char *dirname);
+#endif
+
+#ifdef CONFIG_FSYS_REISERFS
+int reiserfs_mount (void);
+int reiserfs_read (char *buf, int len);
+int reiserfs_dir (char *dirname);
+int reiserfs_embed (int *start_sector, int needed_sectors);
+#endif
+
+#ifdef CONFIG_FSYS_JFS
+int jfs_mount (void);
+int jfs_read (char *buf, int len);
+int jfs_dir (char *dirname);
+int jfs_embed (int *start_sector, int needed_sectors);
+#endif
+
+#ifdef CONFIG_FSYS_XFS
+int xfs_mount (void);
+int xfs_read (char *buf, int len);
+int xfs_dir (char *dirname);
+#endif
+
+#ifdef CONFIG_FSYS_UFS
+int ufs_mount (void);
+int ufs_read (char *buf, int len);
+int ufs_dir (char *dirname);
+int ufs_embed (int *start_sector, int needed_sectors);
+#endif
+
+#ifdef CONFIG_FSYS_ISO9660
+int iso9660_mount (void);
+int iso9660_read (char *buf, int len);
+int iso9660_dir (char *dirname);
+#endif
+
+/* This is not a flag actually, but used as if it were a flag.  */
+#define PC_SLICE_TYPE_HIDDEN_FLAG      0x10
+
+#define PC_SLICE_TYPE_NONE             0
+#define PC_SLICE_TYPE_FAT12            1
+#define PC_SLICE_TYPE_FAT16_LT32M      4
+#define PC_SLICE_TYPE_EXTENDED         5
+#define PC_SLICE_TYPE_FAT16_GT32M      6
+#define PC_SLICE_TYPE_FAT32            0xb
+#define PC_SLICE_TYPE_FAT32_LBA                0xc
+#define PC_SLICE_TYPE_FAT16_LBA                0xe
+#define PC_SLICE_TYPE_WIN95_EXTENDED   0xf
+#define PC_SLICE_TYPE_EZD              0x55
+#define PC_SLICE_TYPE_MINIX            0x80
+#define PC_SLICE_TYPE_LINUX_MINIX      0x81
+#define PC_SLICE_TYPE_EXT2FS           0x83
+#define PC_SLICE_TYPE_LINUX_EXTENDED   0x85
+#define PC_SLICE_TYPE_VSTAFS           0x9e
+#define PC_SLICE_TYPE_DELL_UTIL                0xde
+#define PC_SLICE_TYPE_LINUX_RAID       0xfd
+
+/* For convinience.  */
+/* Check if TYPE is a FAT partition type. Clear the hidden flag before
+   the check, to allow the user to mount a hidden partition in GRUB.  */
+#define IS_PC_SLICE_TYPE_FAT(type)     \
+  ({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \
+     _type == PC_SLICE_TYPE_FAT12 \
+     || _type == PC_SLICE_TYPE_FAT16_LT32M \
+     || _type == PC_SLICE_TYPE_FAT16_GT32M \
+     || _type == PC_SLICE_TYPE_FAT16_LBA \
+     || _type == PC_SLICE_TYPE_FAT32 \
+     || _type == PC_SLICE_TYPE_FAT32_LBA \
+     || _type == PC_SLICE_TYPE_DELL_UTIL; })
+
+#define IS_PC_SLICE_TYPE_MINIX(type) \
+  (((type) == PC_SLICE_TYPE_MINIX)     \
+   || ((type) == PC_SLICE_TYPE_LINUX_MINIX))
+
+#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs) 0
+
+/* possible values for the *BSD-style partition type */
+#define        FS_UNUSED       0       /* unused */
+#define        FS_SWAP         1       /* swap */
+#define        FS_V6           2       /* Sixth Edition */
+#define        FS_V7           3       /* Seventh Edition */
+#define        FS_SYSV         4       /* System V */
+#define        FS_V71K         5       /* V7 with 1K blocks (4.1, 2.9) */
+#define        FS_V8           6       /* Eighth Edition, 4K blocks */
+#define        FS_BSDFFS       7       /* 4.2BSD fast file system */
+#define        FS_MSDOS        8       /* MSDOS file system */
+#define        FS_BSDLFS       9       /* 4.4BSD log-structured file system */
+#define        FS_OTHER        10      /* in use, but unknown/unsupported */
+#define        FS_HPFS         11      /* OS/2 high-performance file system */
+#define        FS_ISO9660      12      /* ISO 9660, normally CD-ROM */
+#define        FS_BOOT         13      /* partition contains bootstrap */
+#define        FS_ADOS         14      /* AmigaDOS fast file system */
+#define        FS_HFS          15      /* Macintosh HFS */
+#define        FS_FILECORE     16      /* Acorn Filecore Filing System */
+#define        FS_EXT2FS       17      /* Linux Extended 2 file system */