15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* filesys.h - abstract filesystem interface */
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  GRUB  --  GRand Unified Bootloader
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Copyright (C) 1999,2000,2001,2004  Free Software Foundation, Inc.
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This program is free software; you can redistribute it and/or modify
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  it under the terms of the GNU General Public License as published by
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  the Free Software Foundation; either version 2 of the License, or
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  (at your option) any later version.
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This program is distributed in the hope that it will be useful,
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  GNU General Public License for more details.
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  You should have received a copy of the GNU General Public License
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  along with this program; if not, write to the Free Software
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#include "pc_slice.h"
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_FFS
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_FFS_NUM 1
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ffs_mount (void);
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ffs_read (char *buf, int len);
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ffs_dir (char *dirname);
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ffs_embed (int *start_sector, int needed_sectors);
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_FFS_NUM 0
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_UFS2
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_UFS2_NUM 1
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ufs2_mount (void);
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ufs2_read (char *buf, int len);
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ufs2_dir (char *dirname);
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ufs2_embed (int *start_sector, int needed_sectors);
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_UFS2_NUM 0
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_FAT
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_FAT_NUM 1
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint fat_mount (void);
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint fat_read (char *buf, int len);
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint fat_dir (char *dirname);
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_FAT_NUM 0
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_EXT2FS
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_EXT2FS_NUM 1
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ext2fs_mount (void);
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ext2fs_read (char *buf, int len);
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint ext2fs_dir (char *dirname);
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_EXT2FS_NUM 0
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_MINIX
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_MINIX_NUM 1
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint minix_mount (void);
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint minix_read (char *buf, int len);
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint minix_dir (char *dirname);
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_MINIX_NUM 0
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_REISERFS
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_REISERFS_NUM 1
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint reiserfs_mount (void);
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint reiserfs_read (char *buf, int len);
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint reiserfs_dir (char *dirname);
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint reiserfs_embed (int *start_sector, int needed_sectors);
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_REISERFS_NUM 0
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_VSTAFS
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_VSTAFS_NUM 1
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint vstafs_mount (void);
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint vstafs_read (char *buf, int len);
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint vstafs_dir (char *dirname);
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_VSTAFS_NUM 0
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_JFS
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_JFS_NUM 1
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint jfs_mount (void);
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint jfs_read (char *buf, int len);
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint jfs_dir (char *dirname);
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint jfs_embed (int *start_sector, int needed_sectors);
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_JFS_NUM 0
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_XFS
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_XFS_NUM 1
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint xfs_mount (void);
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint xfs_read (char *buf, int len);
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint xfs_dir (char *dirname);
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_XFS_NUM 0
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_TFTP
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_TFTP_NUM 1
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint tftp_mount (void);
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint tftp_read (char *buf, int len);
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint tftp_dir (char *dirname);
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectvoid tftp_close (void);
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_TFTP_NUM 0
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef FSYS_ISO9660
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_ISO9660_NUM 1
1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint iso9660_mount (void);
1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint iso9660_read (char *buf, int len);
1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint iso9660_dir (char *dirname);
1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define FSYS_ISO9660_NUM 0
1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef NUM_FSYS
1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define NUM_FSYS	\
1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM	\
1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM	\
1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM)
1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* defines for the block filesystem info area */
1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef NO_BLOCK_FILES
1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_CUR_FILEPOS      (*((int*)FSYS_BUF))
1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_CUR_BLKLIST      (*((int*)(FSYS_BUF+4)))
1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_CUR_BLKNUM       (*((int*)(FSYS_BUF+8)))
1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_MAX_ADDR         (FSYS_BUF+0x7FF9)
1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_BLKSTART(l)      (*((int*)l))
1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_BLKLENGTH(l)     (*((int*)(l+4)))
1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_BLKLIST_START    (FSYS_BUF+12)
1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define BLK_BLKLIST_INC_VAL  8
1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* NO_BLOCK_FILES */
1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* this next part is pretty ugly, but it keeps it in one place! */
1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct fsys_entry
1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project{
1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  char *name;
1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int (*mount_func) (void);
1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int (*read_func) (char *buf, int len);
1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int (*dir_func) (char *dirname);
1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  void (*close_func) (void);
1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  int (*embed_func) (int *start_sector, int needed_sectors);
1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project};
1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef STAGE1_5
1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project# define print_possibilities 0
1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else
1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int print_possibilities;
1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif
1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern int fsmax;
1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectextern struct fsys_entry fsys_table[NUM_FSYS + 1];
166