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