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