66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| 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
 |