FAT: Add FAT write feature
In some cases, saving data in RAM as a file with FAT format is required. This patch allows the file to be written in FAT formatted partition. The usage is similar with reading a file. First, fat_register_device function is called before file_fat_write function in order to set target partition. Then, file_fat_write function is invoked with desired file name, start ram address for writing data, and file size. Signed-off-by: Donggeun Kim <dg77.kim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
This commit is contained in:
		
							parent
							
								
									eea63e05d0
								
							
						
					
					
						commit
						c30a15e590
					
				
							
								
								
									
										5
									
								
								README
								
								
								
								
							
							
						
						
									
										5
									
								
								README
								
								
								
								
							|  | @ -1175,6 +1175,11 @@ The following options need to be configured: | ||||||
| 		to disable the command chpart. This is the default when you | 		to disable the command chpart. This is the default when you | ||||||
| 		have not defined a custom partition | 		have not defined a custom partition | ||||||
| 
 | 
 | ||||||
|  | - FAT(File Allocation Table) filesystem write function support: | ||||||
|  | 		CONFIG_FAT_WRITE | ||||||
|  | 		Support for saving memory data as a file | ||||||
|  | 		in FAT formatted partition | ||||||
|  | 
 | ||||||
| - Keyboard Support: | - Keyboard Support: | ||||||
| 		CONFIG_ISA_KEYBOARD | 		CONFIG_ISA_KEYBOARD | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ LIB	= $(obj)libfat.o | ||||||
| 
 | 
 | ||||||
| AOBJS	= | AOBJS	= | ||||||
| COBJS-$(CONFIG_CMD_FAT)	:= fat.o | COBJS-$(CONFIG_CMD_FAT)	:= fat.o | ||||||
|  | COBJS-$(CONFIG_FAT_WRITE):= fat_write.o | ||||||
| 
 | 
 | ||||||
| ifndef CONFIG_SPL_BUILD | ifndef CONFIG_SPL_BUILD | ||||||
| COBJS-$(CONFIG_CMD_FAT)	+= file.o | COBJS-$(CONFIG_CMD_FAT)	+= file.o | ||||||
|  |  | ||||||
|  | @ -46,6 +46,7 @@ static void downcase (char *str) | ||||||
| static block_dev_desc_t *cur_dev = NULL; | static block_dev_desc_t *cur_dev = NULL; | ||||||
| 
 | 
 | ||||||
| static unsigned long part_offset = 0; | static unsigned long part_offset = 0; | ||||||
|  | static unsigned long part_size; | ||||||
| 
 | 
 | ||||||
| static int cur_part = 1; | static int cur_part = 1; | ||||||
| 
 | 
 | ||||||
|  | @ -99,6 +100,7 @@ int fat_register_device (block_dev_desc_t * dev_desc, int part_no) | ||||||
| 	if (!get_partition_info(dev_desc, part_no, &info)) { | 	if (!get_partition_info(dev_desc, part_no, &info)) { | ||||||
| 		part_offset = info.start; | 		part_offset = info.start; | ||||||
| 		cur_part = part_no; | 		cur_part = part_no; | ||||||
|  | 		part_size = info.size; | ||||||
| 	} else if ((strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3) == 0) || | 	} else if ((strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3) == 0) || | ||||||
| 		   (strncmp((char *)&buffer[DOS_FS32_TYPE_OFFSET], "FAT32", 5) == 0)) { | 		   (strncmp((char *)&buffer[DOS_FS32_TYPE_OFFSET], "FAT32", 5) == 0)) { | ||||||
| 		/* ok, we assume we are on a PBR only */ | 		/* ok, we assume we are on a PBR only */ | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -99,6 +99,8 @@ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define TOLOWER(c)	if((c) >= 'A' && (c) <= 'Z'){(c)+=('a' - 'A');} | #define TOLOWER(c)	if((c) >= 'A' && (c) <= 'Z'){(c)+=('a' - 'A');} | ||||||
|  | #define TOUPPER(c)	if ((c) >= 'a' && (c) <= 'z') \ | ||||||
|  | 				(c) -= ('a' - 'A'); | ||||||
| #define START(dent)	(FAT2CPU16((dent)->start) \ | #define START(dent)	(FAT2CPU16((dent)->start) \ | ||||||
| 			+ (mydata->fatsize != 32 ? 0 : \ | 			+ (mydata->fatsize != 32 ? 0 : \ | ||||||
| 			  (FAT2CPU16((dent)->starthi) << 16))) | 			  (FAT2CPU16((dent)->starthi) << 16))) | ||||||
|  | @ -210,4 +212,5 @@ long file_fat_read(const char *filename, void *buffer, unsigned long maxsize); | ||||||
| const char *file_getfsname(int idx); | const char *file_getfsname(int idx); | ||||||
| int fat_register_device(block_dev_desc_t *dev_desc, int part_no); | int fat_register_device(block_dev_desc_t *dev_desc, int part_no); | ||||||
| 
 | 
 | ||||||
|  | int file_fat_write(const char *filename, void *buffer, unsigned long maxsize); | ||||||
| #endif /* _FAT_H_ */ | #endif /* _FAT_H_ */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue