/* * Copyright (C) 2002. University of California, Irvine * All rights reserved. * * File Name : * fs.h * * Description : * This file defines the limit of certain filesystem specific parameters. * The parameters are reconfigurable and shape the structure of the * filesystem. Besides this, the file also defines function prototypes * and structure templates that are exposed to the layers above file * system and can used by them to use the functionality provided by the * file system */ #ident "fs.h" #ifndef _H_FS_ #define _H_FS_ /* Header File Inclusion */ #include "fs_common.h" /* Global Definitions */ #define DEFAULT 0 #define MAX_EXTENTS 5 #define MAX_NUM_BLOCKS 8192 #define MAX_FILENAME_LEN 15 #define MAX_FILES 64 #define MAX_DIRS 1 #define MAX_FILE_DESCRIPTORS 128 #define DISK_CATALOGUE_SIZE 1 /* Number of disks */ + sizeof(DISC_DESC) + sizeof(DIR_DESC)*MAX_FILES + sizeof(FILE_DESC)*MAX_FILE_DESCRIPTORS #define MAX_BLOCKS_PER_FILE 50000 /*65536*/ /* Structures and Data types */ typedef struct { //UCHAR name[MAX_FILENAME_LEN]; char name[MAX_FILENAME_LEN]; //changed by chenli UCHAR bitmap[MAX_NUM_BLOCKS]; UCHAR allocation_policy; UINT32 size; UINT16 block_size; UINT16 tbd; } DISC_DESC; typedef struct { UCHAR status; //UCHAR disk_name[MAX_FILENAME_LEN]; char disk_name[MAX_FILENAME_LEN]; // chenli UINT16 size; } EXTENT; typedef struct { //UCHAR name[MAX_FILENAME_LEN]; char name[MAX_FILENAME_LEN]; // changed by chenli UCHAR flags; /* permissions, status */ EXTENT extent[MAX_EXTENTS]; /* 3 */ UINT16 file_desc_index; } FILE_INFO; typedef struct { FILE_INFO file[MAX_FILES]; } DIR_DESC; typedef struct { UCHAR status; /* free, extended */ UCHAR extent_index; UINT16 start_index; UINT16 num_blocks; /* Store the last page used */ UINT16 file_desc_index; } FILE_DESC; typedef struct { //UCHAR file_name[MAX_FILENAME_LEN]; char file_name[MAX_FILENAME_LEN]; // chenli UCHAR mode; UINT16 last_page; UINT16 num_blocks; UINT16 block_size; UINT16 block[MAX_BLOCKS_PER_FILE]; /* Logical block number */ } ACTIVE_FILE; typedef struct { UINT16 start_index; UINT16 num_blocks; } HOLE; typedef struct table { UINT16 start_index; UINT16 start_index_bit; UINT16 num_blocks; } table_free; /* Exported functions */ //FS_RESULT fs_create_filesystem(UCHAR *disk_name, UINT16 block_size, // UINT32 disk_size, UCHAR allocation_policy); FS_RESULT fs_create_filesystem(char *disk_name, UINT16 block_size, UINT32 disk_size, UCHAR allocation_policy); //FS_RESULT fs_add_disk(UCHAR *disk_name, UINT16 block_size, UINT32 disk_size); FS_RESULT fs_add_disk(char *disk_name, UINT16 block_size, UINT32 disk_size); //FS_RESULT fs_reorganize_disk(UCHAR *disk_name); FS_RESULT fs_reorganize_disk(char *disk_name); //FS_RESULT fs_destroy_filesystem(UCHAR *disk_name); FS_RESULT fs_destroy_filesystem(char *disk_name); //FS_RESULT fs_create_file(UCHAR *file_name, UCHAR mode, // UINT16 primary_extent_size, // UCHAR *primary_disk_name, // UINT16 secondary_extent_size, // UCHAR *secondary_disk_name); FS_RESULT fs_create_file(char *file_name, UCHAR mode, UINT16 primary_extent_size, char *primary_disk_name, UINT16 secondary_extent_size, char *secondary_disk_name); //FS_RESULT fs_extend_file(UCHAR *file_name, UINT16 extent_size); FS_RESULT fs_extend_file(char *file_name, UINT16 extent_size); //void *fs_open_file(UCHAR *file_name, UCHAR mode); void *fs_open_file(char *file_name, char mode); FS_RESULT fs_read_filepage(void *file_ptr, UINT16 block_number, UCHAR *blk_ptr); FS_RESULT fs_write_filepage(void *file_ptr, UINT16 block_number, UCHAR *blk_ptr); FS_RESULT fs_append_filepage(void **file_ptr, UCHAR *blk_ptr); //FS_RESULT fs_append_filepage(void *file_ptr, UCHAR *blk_ptr); FS_RESULT fs_close_file(void *file_ptr); //FS_RESULT fs_delete_file(UCHAR *file_name); FS_RESULT fs_delete_file(char *file_name); #endif /* _H_FS_ */