From: Chanho Park Date: Wed, 22 Jul 2015 10:37:58 +0000 (+0900) Subject: fs: fat: revert do_fat_format X-Git-Tag: submit/tizen/20160318.071304~490 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=44ea85e4be25cd406efef0235454a07a1b5398cf;p=profile%2Fcommon%2Fplatform%2Fkernel%2Fu-boot-artik.git fs: fat: revert do_fat_format For convention of merging patches, revert do_fat_format formath temporarly. Signed-off-by: Chanho Park --- diff --git a/common/cmd_fat.c b/common/cmd_fat.c index f0205d5f7..559a16d61 100644 --- a/common/cmd_fat.c +++ b/common/cmd_fat.c @@ -241,48 +241,3 @@ U_BOOT_CMD( " to 'dev' on 'interface'" ); #endif - -int do_fat_format(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) -{ - int dev = 0; - int part = 1; - char *ep; - block_dev_desc_t *dev_desc = NULL; - - if (argc < 2) { - printf ("usage : fatformat \n"); - return(0); - } - - dev = (int)simple_strtoul (argv[2], &ep, 16); - dev_desc = get_dev(argv[1], dev); - - if (dev_desc == NULL) { - puts ("\n ** Invalid boot device **\n"); - return 1; - } - - if (*ep) { - if (*ep != ':') { - puts ("\n **Invald boot device,use 'dev[:part]'**\n"); - return 1; - } - part = (int)simple_strtoul(++ep, NULL, 16); - if (part > 4 || part <1) { - puts ("** Partition Number should be 1 ~ 4 **\n"); - } - } - printf("Start format MMC&d partition&d ...\n", dev, part); - if (fat_format_device(dev_desc, part) != 0) { - printf("Format failure!!!\n"); - } - - return 0; -} - -U_BOOT_CMD( - fatformat, 3, 0, do_fat_format, - "fatformat - disk format by FAT32\n", - " \n" - " - format by FAT32 on 'interface'\n" -); diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 84bb0ef3d..bc46cc5d2 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -122,334 +122,6 @@ int fat_register_device (block_dev_desc_t * dev_desc, int part_no) return -1; } -/* - * Copy string, padding with spaces. - */ -static void -setstr(u_int8_t *dest, const char *src, size_t len) -{ - while (len--) - *dest++ = *src ? *src++ : ' '; -} - -static int write_pbr(block_dev_desc_t *dev_desc, disk_partition_t *info) -{ - struct bs *bs; - struct bsbpb *bsbpb; - struct bsxbpb *bsxbpb; - struct bsx *bsx; - __u8 *img; - int img_offset = 0; - int reserved_cnt= 0; - int i; - int fat_size = 0; - - img = malloc(sizeof(__u8)*512); - if(img == NULL) { - printf("Can't make img buffer~~!!\n"); - return -1; - } - memset(img, 0x0, sizeof(__u8)*512); - - - /* Erase Reserved Sector(PBR) */ - for (i = 0;i < RESERVED_CNT; i++) { - if (dev_desc->block_write(dev_desc->dev, info->start + i, - 1, (ulong *)img) != 1) { - printf ("Can't erase reserved sector~~~!!!\n"); - return -1; - } - } - - /* Set bs */ - bs = (struct bs *)img; - img_offset += sizeof(struct bs) - 1; - - mk1(bs->jmp[0], 0xeb); - mk1(bs->jmp[1], 0x58); - mk1(bs->jmp[2], 0x90); /* Jump Boot Code */ - setstr(bs->oem, "SAMSUNG", sizeof(bs->oem)); /* OEM Name */ - - uint spc; - /* Set bsbpb */ - bsbpb = (struct bsbpb *)(img + img_offset); - img_offset += sizeof(struct bsbpb) - 2; - - mk2(bsbpb->bps, 512); /* Byte Per Sector */ - - printf("size checking ...\n"); - /* Sector Per Cluster */ - if (info->size < 0x10000) { /* partition size >= 32Mb */ - printf("Can't format less than 32Mb partition!!\n"); - return -1; - } - if (info->size <= 0x20000) { /* under 64M -> 512 bytes */ - printf("Under 64M\n"); - mk1(bsbpb->spc, 1); - spc = 1; - } - else if (info->size <= 0x40000) { /* under 128M -> 1K */ - printf("Under 128M\n"); - mk1(bsbpb->spc, 2); - spc = 2; - } - else if (info->size <= 0x80000) { /* under 256M -> 2K */ - printf("Under 256M\n"); - mk1(bsbpb->spc, 4); - spc = 4; - } - else if (info->size <= 0xFA0000) { /* under 8G -> 4K */ - printf("Under 8G\n"); - mk1(bsbpb->spc, 8); - spc = 8; - } - else if (info->size <= 0x1F40000) { /* under 16G -> 8K */ - printf("Under 16G\n"); - mk1(bsbpb->spc, 16); - spc = 16; - } - else { - printf("16G~\n"); - mk1(bsbpb->spc, 32); - spc = 32; - } - - printf("write FAT info: %d\n",RESERVED_CNT); - mk2(bsbpb->res, RESERVED_CNT); /* Reserved Sector Count */ - mk1(bsbpb->nft, 2); /* Number of FATs */ - mk2(bsbpb->rde, 0); /* Root Directory Entry Count : It's no use in FAT32 */ - mk2(bsbpb->sec, 0); /* Total Sector : It's no use in FAT32 */ - mk1(bsbpb->mid, 0xF8); /* Media */ - mk2(bsbpb->spf, 0); /* FAT Size 16 : It's no use in FAT32 */ - mk2(bsbpb->spt, 0); /* Sector Per Track */ - mk2(bsbpb->hds, 0); /* Number Of Heads */ - mk4(bsbpb->hid, 0); /* Hidden Sector */ - mk4(bsbpb->bsec, info->size); /* Total Sector For FAT32 */ - - /* Set bsxbpb */ - bsxbpb = (struct bsxbpb *)(img + img_offset); - img_offset += sizeof(struct bsxbpb); - - mk4(bsxbpb->bspf, (info->size / (spc * 128))); /* FAT Size 32 */ - fat_size = info->size / (spc * 128); - printf("Fat size : 0x%x\n", info->size / (spc * 128)); - mk2(bsxbpb->xflg, 0); /* Ext Flags */ - mk2(bsxbpb->vers, 0); /* File System Version */ - mk4(bsxbpb->rdcl, 2); /* Root Directory Cluster */ - mk2(bsxbpb->infs, 1); /* File System Information */ - mk2(bsxbpb->bkbs, 0); /* Boot Record Backup Sector */ - - /* Set bsx */ - bsx = (struct bsx *)(img + img_offset); - mk1(bsx->drv, 0); /* Drive Number */ - mk1(bsx->sig, 0x29); /* Boot Signature */ - mk4(bsx->volid, 0x3333); /* Volume ID : 0x3333 means nothing */ - setstr(bsx->label, "NO NAME ", sizeof(bsx->label)); /* Volume Label */ - setstr(bsx->type, "FAT32", sizeof(bsx->type)); /* File System Type */ - - /* Set Magic Number */ - mk2(img + BYTE_PER_SEC - 2, 0xaa55); /* Signature */ - -/* - printf("Print Boot Recode\n"); - for(i = 0;i<512;i++) { - if(img[i] == 0) - printf("00 "); - else - printf("%2x ", img[i]); - if (!((i+1) % 16)) - printf("\n"); - } -*/ - - if (dev_desc->block_write(dev_desc->dev, info->start, - 1, (ulong *)img) != 1) { - printf ("Can't write PBR~~~!!!\n"); - return -1; - } - - return fat_size; -} -static int write_reserved(block_dev_desc_t *dev_desc, disk_partition_t *info) -{ - /* Set Reserved Region */ - __u8 *img; - int i; - img = malloc(sizeof(__u8)*512); - if(img == NULL) { - printf("Can't make img buffer~~(reserved)!!\n"); - return -1; - } - - memset(img, 0x0, sizeof(__u8)*512); - - mk4(img, 0x41615252); /* Lead Signature */ - mk4(img + BYTE_PER_SEC - 28, 0x61417272); /* Struct Signature */ - mk4(img + BYTE_PER_SEC - 24, 0xffffffff); /* Free Cluster Count */ - mk4(img + BYTE_PER_SEC - 20, 0x3); /* Next Free Cluster */ - mk2(img + BYTE_PER_SEC - 2, 0xaa55); /* Trail Signature */ - - /* - printf("Print Reserved Region\n"); - for(i = 0;i<512;i++) { - if(img[i] == 0) - printf("00 "); - else - printf("%2x ", img[i]); - if (!((i+1) % 16)) - printf("\n"); - } - */ - - /* Write Reserved region */ - if (dev_desc->block_write(dev_desc->dev, info->start+1, - 1, (ulong *)img) != 1) { - printf ("Can't write reserved region~~~!!!\n"); - return -1; - } - - return 1; -} -static int write_fat(block_dev_desc_t *dev_desc, disk_partition_t *info, int -fat_size) -{ - __u8 *dummy; - __u8 *img; - int i; - - /* Create buffer for FAT */ - img = malloc(sizeof(__u8)*512); - if(img == NULL) { - printf("Can't make img buffer~~!!\n"); - return -1; - } - memset(img, 0x0, sizeof(__u8) * 512); - - /* Create buffer for erase */ - dummy = malloc(sizeof(__u8) * 8192); - if(dummy == NULL) { - printf("Can't make dummy buffer~~!!\n"); - return -1; - } - memset(dummy, 0x0, sizeof(__u8) * 8192); - - /* Erase FAT Region */ - int erase_block_cnt = (fat_size * 2); - int temp = 0; - printf("Erase FAT region"); - for (i = 0;i < erase_block_cnt + 10; i+=16) { - if (dev_desc->block_write(dev_desc->dev, info->start + - RESERVED_CNT + i, 16, (ulong *)dummy) != 16) { - printf ("Can't erase FAT region~~!!!\n"); - } - if((i % 160) == 0) - printf("."); - - } - printf("\n"); - - mk4(img, 0x0ffffff8); - mk4(img+4, 0x0fffffff); - mk4(img+8, 0x0fffffff); /* Root Directory */ - - /* - printf("Print FAT Region\n"); - for(i = 0;i<512;i++) { - if(img[i] == 0) - printf("00 "); - else - printf("%2x ", img[i]); - if (!((i+1) % 16)) - printf("\n"); - } - */ - /* Write FAT Region */ - if (dev_desc->block_write(dev_desc->dev, info->start + RESERVED_CNT, - 1, (ulong *)img) != 1) { - printf ("Can't write FAT~~~!!!\n"); - return -1; - } - - return 1; -} - -/* - * Make a volume label. - */ - -static void -mklabel(u_int8_t *dest, const char *src) -{ - int c, i; - - for (i = 0; i < 11; i++) { - c = *src ? __toupper(*src++) : ' '; - *dest++ = !i && c == '\xe5' ? 5 : c; - } -} - -/* - * Format device - */ -int -fat_format_device(block_dev_desc_t *dev_desc, int part_no) -{ - unsigned char buffer[SECTOR_SIZE]; - unsigned long part_offset; - int cur_part; - disk_partition_t info; - - if (!dev_desc->block_read) - return -1; - cur_dev = dev_desc; - /* check if we have a MBR (on floppies we have only a PBR) */ - if (dev_desc->block_read (dev_desc->dev, 0, - 1, (ulong *) buffer) != 1) { - printf ("** Can't read from device %d **\n", dev_desc->dev); - return -1; - } - if (buffer[DOS_PART_MAGIC_OFFSET] != 0x55 || - buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) { - printf("** MBR is broken **\n"); - /* no signature found */ - return -1; - } - -#if (defined(CONFIG_CMD_IDE) || \ - defined(CONFIG_CMD_SCSI) || \ - defined(CONFIG_CMD_USB) || \ - defined(CONFIG_MMC) || \ - defined(CONFIG_SYSTEMACE) ) - /* First we assume, there is a MBR */ - if (!get_partition_info (dev_desc, part_no, &info)) { - part_offset = info.start; - cur_part = part_no; - } else if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)) { - /* ok, we assume we are on a PBR only */ - cur_part = 1; - part_offset = 0; - } else { - printf ("** Partition %d not valid on device %d **\n", - part_no, dev_desc->dev); - return -1; - } -#endif - - printf("Partition%d: Start Address(0x%x), Size(0x%x)\n", - part_no, info.start, info.size); - - int fat_size; - fat_size = write_pbr(dev_desc, &info); - if(fat_size < 0) - return -1; - if(write_reserved(dev_desc, &info) < 0) - return -1; - if(write_fat(dev_desc, &info, fat_size) < 0) - return -1; - printf("Partition%d format complete.\n", part_no); - - return 0; -} /* * Get the first occurence of a directory delimiter ('/' or '\') in a string.