Mon 14 Oct 23:06:38 CEST 2024
This commit is contained in:
parent
782fce7e32
commit
1af3e134bf
65
kernel/diskfs.h
Normal file
65
kernel/diskfs.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2016-2019 The University of Notre Dame
|
||||||
|
This software is distributed under the GNU General Public License.
|
||||||
|
See the file LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DISKFS_H
|
||||||
|
#define DISKFS_H
|
||||||
|
|
||||||
|
#include "kernel/types.h"
|
||||||
|
|
||||||
|
#define DISKFS_MAGIC 0xabcd4321
|
||||||
|
#define DISKFS_BLOCK_SIZE 4096
|
||||||
|
#define DISKFS_DIRECT_POINTERS 6
|
||||||
|
#define DISKFS_INODES_PER_BLOCK (DISKFS_BLOCK_SIZE/sizeof(struct diskfs_inode))
|
||||||
|
#define DISKFS_ITEMS_PER_BLOCK (DISKFS_BLOCK_SIZE/sizeof(struct diskfs_item))
|
||||||
|
#define DISKFS_POINTERS_PER_BLOCK (DISKFS_BLOCK_SIZE/sizeof(uint32_t))
|
||||||
|
|
||||||
|
struct diskfs_superblock {
|
||||||
|
uint32_t magic;
|
||||||
|
uint32_t block_size;
|
||||||
|
uint32_t inode_start;
|
||||||
|
uint32_t inode_blocks;
|
||||||
|
uint32_t bitmap_start;
|
||||||
|
uint32_t bitmap_blocks;
|
||||||
|
uint32_t data_start;
|
||||||
|
uint32_t data_blocks;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct diskfs_inode {
|
||||||
|
uint32_t inuse; // reserve for broader use.
|
||||||
|
uint32_t size;
|
||||||
|
uint32_t direct[DISKFS_DIRECT_POINTERS];
|
||||||
|
uint32_t indirect;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DISKFS_ITEM_BLANK 0
|
||||||
|
#define DISKFS_ITEM_FILE 1
|
||||||
|
#define DISKFS_ITEM_DIR 2
|
||||||
|
|
||||||
|
/* Maximum name length chosen so that diskfs_item is 32 bytes. */
|
||||||
|
#define DISKFS_NAME_MAX 26
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
struct diskfs_item {
|
||||||
|
uint32_t inumber;
|
||||||
|
uint8_t type;
|
||||||
|
uint8_t name_length;
|
||||||
|
char name[DISKFS_NAME_MAX];
|
||||||
|
};
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
struct diskfs_block {
|
||||||
|
union {
|
||||||
|
struct diskfs_superblock superblock;
|
||||||
|
struct diskfs_inode inodes[DISKFS_INODES_PER_BLOCK];
|
||||||
|
struct diskfs_item items[DISKFS_ITEMS_PER_BLOCK];
|
||||||
|
uint32_t pointers[DISKFS_POINTERS_PER_BLOCK];
|
||||||
|
char data[DISKFS_BLOCK_SIZE];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
int diskfs_init(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user