• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* filesys.h - abstract filesystem interface */
2 /*
3  *  GRUB  --  GRand Unified Bootloader
4  *  Copyright (C) 1999,2000,2001,2004  Free Software Foundation, Inc.
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20 
21 #include "pc_slice.h"
22 
23 #ifdef FSYS_FFS
24 #define FSYS_FFS_NUM 1
25 int ffs_mount (void);
26 int ffs_read (char *buf, int len);
27 int ffs_dir (char *dirname);
28 int ffs_embed (int *start_sector, int needed_sectors);
29 #else
30 #define FSYS_FFS_NUM 0
31 #endif
32 
33 #ifdef FSYS_UFS2
34 #define FSYS_UFS2_NUM 1
35 int ufs2_mount (void);
36 int ufs2_read (char *buf, int len);
37 int ufs2_dir (char *dirname);
38 int ufs2_embed (int *start_sector, int needed_sectors);
39 #else
40 #define FSYS_UFS2_NUM 0
41 #endif
42 
43 #ifdef FSYS_FAT
44 #define FSYS_FAT_NUM 1
45 int fat_mount (void);
46 int fat_read (char *buf, int len);
47 int fat_dir (char *dirname);
48 #else
49 #define FSYS_FAT_NUM 0
50 #endif
51 
52 #ifdef FSYS_EXT2FS
53 #define FSYS_EXT2FS_NUM 1
54 int ext2fs_mount (void);
55 int ext2fs_read (char *buf, int len);
56 int ext2fs_dir (char *dirname);
57 #else
58 #define FSYS_EXT2FS_NUM 0
59 #endif
60 
61 #ifdef FSYS_MINIX
62 #define FSYS_MINIX_NUM 1
63 int minix_mount (void);
64 int minix_read (char *buf, int len);
65 int minix_dir (char *dirname);
66 #else
67 #define FSYS_MINIX_NUM 0
68 #endif
69 
70 #ifdef FSYS_REISERFS
71 #define FSYS_REISERFS_NUM 1
72 int reiserfs_mount (void);
73 int reiserfs_read (char *buf, int len);
74 int reiserfs_dir (char *dirname);
75 int reiserfs_embed (int *start_sector, int needed_sectors);
76 #else
77 #define FSYS_REISERFS_NUM 0
78 #endif
79 
80 #ifdef FSYS_VSTAFS
81 #define FSYS_VSTAFS_NUM 1
82 int vstafs_mount (void);
83 int vstafs_read (char *buf, int len);
84 int vstafs_dir (char *dirname);
85 #else
86 #define FSYS_VSTAFS_NUM 0
87 #endif
88 
89 #ifdef FSYS_JFS
90 #define FSYS_JFS_NUM 1
91 int jfs_mount (void);
92 int jfs_read (char *buf, int len);
93 int jfs_dir (char *dirname);
94 int jfs_embed (int *start_sector, int needed_sectors);
95 #else
96 #define FSYS_JFS_NUM 0
97 #endif
98 
99 #ifdef FSYS_XFS
100 #define FSYS_XFS_NUM 1
101 int xfs_mount (void);
102 int xfs_read (char *buf, int len);
103 int xfs_dir (char *dirname);
104 #else
105 #define FSYS_XFS_NUM 0
106 #endif
107 
108 #ifdef FSYS_TFTP
109 #define FSYS_TFTP_NUM 1
110 int tftp_mount (void);
111 int tftp_read (char *buf, int len);
112 int tftp_dir (char *dirname);
113 void tftp_close (void);
114 #else
115 #define FSYS_TFTP_NUM 0
116 #endif
117 
118 #ifdef FSYS_ISO9660
119 #define FSYS_ISO9660_NUM 1
120 int iso9660_mount (void);
121 int iso9660_read (char *buf, int len);
122 int iso9660_dir (char *dirname);
123 #else
124 #define FSYS_ISO9660_NUM 0
125 #endif
126 
127 #ifndef NUM_FSYS
128 #define NUM_FSYS	\
129   (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM	\
130    + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM	\
131    + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM)
132 #endif
133 
134 /* defines for the block filesystem info area */
135 #ifndef NO_BLOCK_FILES
136 #define BLK_CUR_FILEPOS      (*((int*)FSYS_BUF))
137 #define BLK_CUR_BLKLIST      (*((int*)(FSYS_BUF+4)))
138 #define BLK_CUR_BLKNUM       (*((int*)(FSYS_BUF+8)))
139 #define BLK_MAX_ADDR         (FSYS_BUF+0x7FF9)
140 #define BLK_BLKSTART(l)      (*((int*)l))
141 #define BLK_BLKLENGTH(l)     (*((int*)(l+4)))
142 #define BLK_BLKLIST_START    (FSYS_BUF+12)
143 #define BLK_BLKLIST_INC_VAL  8
144 #endif /* NO_BLOCK_FILES */
145 
146 /* this next part is pretty ugly, but it keeps it in one place! */
147 
148 struct fsys_entry
149 {
150   char *name;
151   int (*mount_func) (void);
152   int (*read_func) (char *buf, int len);
153   int (*dir_func) (char *dirname);
154   void (*close_func) (void);
155   int (*embed_func) (int *start_sector, int needed_sectors);
156 };
157 
158 #ifdef STAGE1_5
159 # define print_possibilities 0
160 #else
161 extern int print_possibilities;
162 #endif
163 
164 extern int fsmax;
165 extern struct fsys_entry fsys_table[NUM_FSYS + 1];
166