65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
#ifndef _ECE391FS_H_
|
|
#define _ECE391FS_H_
|
|
|
|
#include "../lib/lib.h"
|
|
#include "unified_fs.h"
|
|
|
|
#define ECE391FS_FILE_TYPE_RTC 0
|
|
#define ECE391FS_FILE_TYPE_FOLDER 1
|
|
#define ECE391FS_FILE_TYPE_FILE 2
|
|
|
|
#define ECE391FS_MAX_FILENAME_LEN 32
|
|
#define ECE391FS_MAX_FILE_COUNT 63
|
|
|
|
#define ECE391FS_BLOCK_SIZE 4096
|
|
|
|
typedef struct {
|
|
char name[ECE391FS_MAX_FILENAME_LEN];
|
|
uint32_t type;
|
|
uint32_t inode;
|
|
uint8_t reserved[24];
|
|
} ece391fs_file_info_t;
|
|
typedef ece391fs_file_info_t dentry_t; // UIUC Compatibility
|
|
|
|
typedef struct {
|
|
uint32_t num_dir_entries;
|
|
uint32_t num_inodes;
|
|
uint32_t num_data_blocks;
|
|
uint8_t reserved[52];
|
|
ece391fs_file_info_t file[ECE391FS_MAX_FILE_COUNT];
|
|
} ece391fs_bootblk_t;
|
|
|
|
typedef struct {
|
|
uint32_t size;
|
|
uint32_t data[ECE391FS_BLOCK_SIZE / 4 - 1];
|
|
} ece391fs_inode_t;
|
|
|
|
typedef struct {
|
|
uint32_t data[ECE391FS_BLOCK_SIZE / 4];
|
|
} ece391fs_data_block_t;
|
|
|
|
int32_t ece391fs_init(uint32_t module_start, uint32_t module_end);
|
|
int32_t ece391fs_is_initialized();
|
|
int32_t ece391fs_size(uint32_t inode_idx);
|
|
int32_t read_dentry_by_name(const char* fname, ece391fs_file_info_t* file_info);
|
|
int32_t read_dentry_by_index(uint32_t index, ece391fs_file_info_t* file_info);
|
|
int32_t read_data(uint32_t inode, uint32_t offset, char* buf, uint32_t length);
|
|
int32_t read_dir(uint32_t offset, char* buf, uint32_t length);
|
|
void ece391fs_print_file_info(ece391fs_file_info_t* file_info);
|
|
|
|
// Temporary functions for CP2
|
|
int32_t file_open(int32_t* inode, char* filename);
|
|
int32_t file_read(int32_t* inode, uint32_t* offset, char* buf, uint32_t len);
|
|
int32_t file_write(int32_t* inode, uint32_t* offset, const char* buf, uint32_t len);
|
|
int32_t file_close(int32_t* inode);
|
|
int32_t dir_open(int32_t* inode, char* filename);
|
|
int32_t dir_read(int32_t* inode, uint32_t* offset, char* buf, uint32_t len);
|
|
int32_t dir_write(int32_t* inode, uint32_t* offset, const char* buf, uint32_t len);
|
|
int32_t dir_close(int32_t* inode);
|
|
|
|
// Unified FS definition
|
|
extern unified_fs_interface_t ece391fs_file_if;
|
|
extern unified_fs_interface_t ece391fs_dir_if;
|
|
|
|
#endif
|