filesystem support
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1403 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
7d2478e962
commit
3cd7fc7640
|
@ -0,0 +1,222 @@
|
|||
/* GRUB compatibility header */
|
||||
|
||||
/*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <fs/vfs.h>
|
||||
|
||||
/* This disables some portion of code */
|
||||
#define STAGE1_5 1
|
||||
|
||||
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 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
|
||||
|
||||
/* Ditto */
|
||||
#define current_slice 0
|
||||
|
||||
extern unsigned long part_start;
|
||||
extern unsigned long part_length;
|
||||
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
|
||||
} fs_error_t;
|
||||
|
||||
extern fs_error_t errnum;
|
||||
|
||||
/* 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_FS_FAT
|
||||
int fat_mount (void);
|
||||
int fat_read (char *buf, int len);
|
||||
int fat_dir (char *dirname);
|
||||
#endif
|
||||
|
||||
#if CONFIG_FS_EXT2 == 1
|
||||
int ext2fs_mount (void);
|
||||
int ext2fs_read (char *buf, int len);
|
||||
int ext2fs_dir (char *dirname);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FS_MINIX
|
||||
int minix_mount (void);
|
||||
int minix_read (char *buf, int len);
|
||||
int minix_dir (char *dirname);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FS_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_FS_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_FS_XFS
|
||||
int xfs_mount (void);
|
||||
int xfs_read (char *buf, int len);
|
||||
int xfs_dir (char *dirname);
|
||||
#endif
|
||||
|
||||
#if CONFIG_FS_ISO9660 == 1
|
||||
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 */
|
|
@ -0,0 +1,310 @@
|
|||
#ifndef _ISO9660_H
|
||||
#define _ISO9660_H
|
||||
|
||||
/*
|
||||
* The isofs filesystem constants/structures
|
||||
*/
|
||||
|
||||
/* This part borrowed from the bsd386 isofs */
|
||||
#define ISODCL(from, to) (to - from + 1)
|
||||
|
||||
struct iso_volume_descriptor {
|
||||
char type[ISODCL(1,1)]; /* 711 */
|
||||
char id[ISODCL(2,6)];
|
||||
char version[ISODCL(7,7)];
|
||||
char data[ISODCL(8,2048)];
|
||||
};
|
||||
|
||||
#define ISO_SECTOR_BITS (11)
|
||||
#define ISO_SECTOR_SIZE (1<<ISO_SECTOR_BITS)
|
||||
|
||||
#define ISO_REGULAR 1 /* regular file */
|
||||
#define ISO_DIRECTORY 2 /* directory */
|
||||
#define ISO_OTHER 0 /* other file (with Rock Ridge) */
|
||||
|
||||
#define RR_FLAG_PX 0x01 /* have POSIX file attributes */
|
||||
#define RR_FLAG_NM 0x08 /* have alternate file name */
|
||||
|
||||
/* POSIX file attributes for Rock Ridge extensions */
|
||||
#define POSIX_S_IFMT 0xF000
|
||||
#define POSIX_S_IFREG 0x8000
|
||||
#define POSIX_S_IFDIR 0x4000
|
||||
|
||||
/* volume descriptor types */
|
||||
#define ISO_VD_PRIMARY 1
|
||||
#define ISO_VD_SUPPLEMENTARY 2
|
||||
#define ISO_VD_END 255
|
||||
|
||||
#define ISO_STANDARD_ID "CD001"
|
||||
|
||||
struct iso_primary_descriptor {
|
||||
char type [ISODCL ( 1, 1)]; /* 711 */
|
||||
char id [ISODCL ( 2, 6)];
|
||||
char version [ISODCL ( 7, 7)]; /* 711 */
|
||||
char unused1 [ISODCL ( 8, 8)];
|
||||
char system_id [ISODCL ( 9, 40)]; /* achars */
|
||||
char volume_id [ISODCL ( 41, 72)]; /* dchars */
|
||||
char unused2 [ISODCL ( 73, 80)];
|
||||
char volume_space_size [ISODCL ( 81, 88)]; /* 733 */
|
||||
char unused3 [ISODCL ( 89, 120)];
|
||||
char volume_set_size [ISODCL (121, 124)]; /* 723 */
|
||||
char volume_sequence_number [ISODCL (125, 128)]; /* 723 */
|
||||
char logical_block_size [ISODCL (129, 132)]; /* 723 */
|
||||
char path_table_size [ISODCL (133, 140)]; /* 733 */
|
||||
char type_l_path_table [ISODCL (141, 144)]; /* 731 */
|
||||
char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
|
||||
char type_m_path_table [ISODCL (149, 152)]; /* 732 */
|
||||
char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
|
||||
char root_directory_record [ISODCL (157, 190)]; /* 9.1 */
|
||||
char volume_set_id [ISODCL (191, 318)]; /* dchars */
|
||||
char publisher_id [ISODCL (319, 446)]; /* achars */
|
||||
char preparer_id [ISODCL (447, 574)]; /* achars */
|
||||
char application_id [ISODCL (575, 702)]; /* achars */
|
||||
char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
|
||||
char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
|
||||
char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
|
||||
char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
|
||||
char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
|
||||
char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
|
||||
char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
|
||||
char file_structure_version [ISODCL (882, 882)]; /* 711 */
|
||||
char unused4 [ISODCL (883, 883)];
|
||||
char application_data [ISODCL (884, 1395)];
|
||||
char unused5 [ISODCL (1396, 2048)];
|
||||
};
|
||||
|
||||
/* Almost the same as the primary descriptor but two fields are specified */
|
||||
struct iso_supplementary_descriptor {
|
||||
char type [ISODCL ( 1, 1)]; /* 711 */
|
||||
char id [ISODCL ( 2, 6)];
|
||||
char version [ISODCL ( 7, 7)]; /* 711 */
|
||||
char flags [ISODCL ( 8, 8)]; /* 853 */
|
||||
char system_id [ISODCL ( 9, 40)]; /* achars */
|
||||
char volume_id [ISODCL ( 41, 72)]; /* dchars */
|
||||
char unused2 [ISODCL ( 73, 80)];
|
||||
char volume_space_size [ISODCL ( 81, 88)]; /* 733 */
|
||||
char escape [ISODCL ( 89, 120)]; /* 856 */
|
||||
char volume_set_size [ISODCL (121, 124)]; /* 723 */
|
||||
char volume_sequence_number [ISODCL (125, 128)]; /* 723 */
|
||||
char logical_block_size [ISODCL (129, 132)]; /* 723 */
|
||||
char path_table_size [ISODCL (133, 140)]; /* 733 */
|
||||
char type_l_path_table [ISODCL (141, 144)]; /* 731 */
|
||||
char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
|
||||
char type_m_path_table [ISODCL (149, 152)]; /* 732 */
|
||||
char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
|
||||
char root_directory_record [ISODCL (157, 190)]; /* 9.1 */
|
||||
char volume_set_id [ISODCL (191, 318)]; /* dchars */
|
||||
char publisher_id [ISODCL (319, 446)]; /* achars */
|
||||
char preparer_id [ISODCL (447, 574)]; /* achars */
|
||||
char application_id [ISODCL (575, 702)]; /* achars */
|
||||
char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
|
||||
char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
|
||||
char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
|
||||
char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
|
||||
char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
|
||||
char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
|
||||
char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
|
||||
char file_structure_version [ISODCL (882, 882)]; /* 711 */
|
||||
char unused4 [ISODCL (883, 883)];
|
||||
char application_data [ISODCL (884, 1395)];
|
||||
char unused5 [ISODCL (1396, 2048)];
|
||||
};
|
||||
|
||||
|
||||
#define HS_STANDARD_ID "CDROM"
|
||||
|
||||
struct hs_volume_descriptor {
|
||||
char foo [ISODCL ( 1, 8)]; /* 733 */
|
||||
char type [ISODCL ( 9, 9)]; /* 711 */
|
||||
char id [ISODCL ( 10, 14)];
|
||||
char version [ISODCL ( 15, 15)]; /* 711 */
|
||||
char data[ISODCL(16,2048)];
|
||||
};
|
||||
|
||||
|
||||
struct hs_primary_descriptor {
|
||||
char foo [ISODCL ( 1, 8)]; /* 733 */
|
||||
char type [ISODCL ( 9, 9)]; /* 711 */
|
||||
char id [ISODCL ( 10, 14)];
|
||||
char version [ISODCL ( 15, 15)]; /* 711 */
|
||||
char unused1 [ISODCL ( 16, 16)]; /* 711 */
|
||||
char system_id [ISODCL ( 17, 48)]; /* achars */
|
||||
char volume_id [ISODCL ( 49, 80)]; /* dchars */
|
||||
char unused2 [ISODCL ( 81, 88)]; /* 733 */
|
||||
char volume_space_size [ISODCL ( 89, 96)]; /* 733 */
|
||||
char unused3 [ISODCL ( 97, 128)]; /* 733 */
|
||||
char volume_set_size [ISODCL (129, 132)]; /* 723 */
|
||||
char volume_sequence_number [ISODCL (133, 136)]; /* 723 */
|
||||
char logical_block_size [ISODCL (137, 140)]; /* 723 */
|
||||
char path_table_size [ISODCL (141, 148)]; /* 733 */
|
||||
char type_l_path_table [ISODCL (149, 152)]; /* 731 */
|
||||
char unused4 [ISODCL (153, 180)]; /* 733 */
|
||||
char root_directory_record [ISODCL (181, 214)]; /* 9.1 */
|
||||
};
|
||||
|
||||
/* We use this to help us look up the parent inode numbers. */
|
||||
|
||||
struct iso_path_table{
|
||||
unsigned char name_len[2]; /* 721 */
|
||||
char extent[4]; /* 731 */
|
||||
char parent[2]; /* 721 */
|
||||
char name[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
/* high sierra is identical to iso, except that the date is only 6 bytes, and
|
||||
there is an extra reserved byte after the flags */
|
||||
|
||||
struct iso_directory_record {
|
||||
char length [ISODCL (1, 1)]; /* 711 */
|
||||
char ext_attr_length [ISODCL (2, 2)]; /* 711 */
|
||||
char extent [ISODCL (3, 10)]; /* 733 */
|
||||
char size [ISODCL (11, 18)]; /* 733 */
|
||||
char date [ISODCL (19, 25)]; /* 7 by 711 */
|
||||
char flags [ISODCL (26, 26)];
|
||||
char file_unit_size [ISODCL (27, 27)]; /* 711 */
|
||||
char interleave [ISODCL (28, 28)]; /* 711 */
|
||||
char volume_sequence_number [ISODCL (29, 32)]; /* 723 */
|
||||
unsigned char name_len [ISODCL (33, 33)]; /* 711 */
|
||||
char name [0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct SU_SP{
|
||||
unsigned char magic[2];
|
||||
unsigned char skip;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct SU_CE{
|
||||
char extent[8];
|
||||
char offset[8];
|
||||
char size[8];
|
||||
};
|
||||
|
||||
struct SU_ER{
|
||||
unsigned char len_id;
|
||||
unsigned char len_des;
|
||||
unsigned char len_src;
|
||||
unsigned char ext_ver;
|
||||
char data[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_RR{
|
||||
char flags[1];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_PX{
|
||||
char mode[8];
|
||||
char n_links[8];
|
||||
char uid[8];
|
||||
char gid[8];
|
||||
};
|
||||
|
||||
struct RR_PN{
|
||||
char dev_high[8];
|
||||
char dev_low[8];
|
||||
};
|
||||
|
||||
|
||||
struct SL_component{
|
||||
unsigned char flags;
|
||||
unsigned char len;
|
||||
char text[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_SL{
|
||||
unsigned char flags;
|
||||
struct SL_component link;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_NM{
|
||||
unsigned char flags;
|
||||
char name[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_CL{
|
||||
char location[8];
|
||||
};
|
||||
|
||||
struct RR_PL{
|
||||
char location[8];
|
||||
};
|
||||
|
||||
struct stamp{
|
||||
char time[7];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct RR_TF{
|
||||
char flags;
|
||||
struct stamp times[0]; /* Variable number of these beasts */
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Linux-specific extension for transparent decompression */
|
||||
struct RR_ZF{
|
||||
char algorithm[2];
|
||||
char parms[2];
|
||||
char real_size[8];
|
||||
};
|
||||
|
||||
struct rock_ridge{
|
||||
char signature[2];
|
||||
unsigned char len;
|
||||
unsigned char version;
|
||||
union{
|
||||
struct SU_SP SP;
|
||||
struct SU_CE CE;
|
||||
struct SU_ER ER;
|
||||
struct RR_RR RR;
|
||||
struct RR_PX PX;
|
||||
struct RR_PN PN;
|
||||
struct RR_SL SL;
|
||||
struct RR_NM NM;
|
||||
struct RR_CL CL;
|
||||
struct RR_PL PL;
|
||||
struct RR_TF TF;
|
||||
struct RR_ZF ZF;
|
||||
} u;
|
||||
};
|
||||
|
||||
typedef union RR_ptr {
|
||||
struct rock_ridge *rr;
|
||||
char *ptr;
|
||||
int i;
|
||||
} RR_ptr_t;
|
||||
|
||||
#include <arch/byteorder.h>
|
||||
|
||||
static inline int isonum_711(char *p)
|
||||
{
|
||||
unsigned char x = *(unsigned char *)p;
|
||||
return x;
|
||||
}
|
||||
static inline int isonum_712(char *p)
|
||||
{
|
||||
return *(char *)p;
|
||||
}
|
||||
static inline int isonum_721(char *p)
|
||||
{
|
||||
return le16_to_cpu(*(unsigned short *)p);
|
||||
}
|
||||
static inline int isonum_722(char *p)
|
||||
{
|
||||
return be16_to_cpu(*(unsigned short *)p);
|
||||
}
|
||||
static inline int isonum_723(char *p)
|
||||
{
|
||||
/* Ignore bigendian datum due to broken mastering programs */
|
||||
return le16_to_cpu(*(unsigned short *)p);
|
||||
}
|
||||
static inline int isonum_731(char *p)
|
||||
{
|
||||
return le32_to_cpu(*(unsigned int *)p);
|
||||
}
|
||||
static inline int isonum_732(char *p)
|
||||
{
|
||||
return be32_to_cpu(*(unsigned int *)p);
|
||||
}
|
||||
static inline int isonum_733(char *p)
|
||||
{
|
||||
/* Ignore bigendian datum due to broken mastering programs */
|
||||
return le32_to_cpu(*(unsigned int *)p);
|
||||
}
|
||||
#endif /* _ISO9660_H */
|
|
@ -0,0 +1,29 @@
|
|||
#ifndef _VFS_H
|
||||
#define _VFS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define DISK_IDE 1
|
||||
#define DISK_MEM 2
|
||||
|
||||
int devopen(const char *name, int *reopen);
|
||||
int devread(unsigned long sector, unsigned long byte_offset,
|
||||
unsigned long byte_len, void *buf);
|
||||
|
||||
int file_open(const char *filename);
|
||||
int file_read(void *buf, unsigned long len);
|
||||
int file_seek(unsigned long offset);
|
||||
unsigned long file_pos(void);
|
||||
unsigned long file_size(void);
|
||||
|
||||
#define PARTITION_UNKNOWN 0xbad6a7
|
||||
|
||||
#ifdef CONFIG_FS_ELTORITO
|
||||
int open_eltorito_image(int part, unsigned long *start, unsigned long *length);
|
||||
#else
|
||||
# define open_eltorito_image(x,y,z) PARTITION_UNKNOWN
|
||||
#endif
|
||||
|
||||
extern int using_devsize;
|
||||
|
||||
#endif /* _VFS_H */
|
Loading…
Reference in New Issue