Lines Matching refs:mydata
107 static int flush_dirty_fat_buffer(fsdata *mydata) in flush_dirty_fat_buffer() argument
110 __u32 fatlength = mydata->fatlength; in flush_dirty_fat_buffer()
111 __u8 *bufptr = mydata->fatbuf; in flush_dirty_fat_buffer()
112 __u32 startblock = mydata->fatbufnum * FATBUFBLOCKS; in flush_dirty_fat_buffer()
114 debug("debug: evicting %d, dirty: %d\n", mydata->fatbufnum, in flush_dirty_fat_buffer()
115 (int)mydata->fat_dirty); in flush_dirty_fat_buffer()
117 if ((!mydata->fat_dirty) || (mydata->fatbufnum == -1)) in flush_dirty_fat_buffer()
124 startblock += mydata->fat_sect; in flush_dirty_fat_buffer()
134 startblock += mydata->fatlength; in flush_dirty_fat_buffer()
140 mydata->fat_dirty = 0; in flush_dirty_fat_buffer()
214 static int is_next_clust(fsdata *mydata, dir_entry *dentptr);
215 static void flush_dir_table(fsdata *mydata, dir_entry **dentptr);
222 fill_dir_slot(fsdata *mydata, dir_entry **dentptr, const char *l_name) in fill_dir_slot() argument
245 if (is_next_clust(mydata, *dentptr)) { in fill_dir_slot()
247 flush_dir_table(mydata, dentptr); in fill_dir_slot()
255 if (is_next_clust(mydata, *dentptr)) { in fill_dir_slot()
257 flush_dir_table(mydata, dentptr); in fill_dir_slot()
273 get_long_file_name(fsdata *mydata, int curclust, __u8 *cluster, in get_long_file_name() argument
279 __u8 *buflimit = cluster + mydata->sect_size * ((curclust == 0) ? in get_long_file_name()
281 mydata->clust_size); in get_long_file_name()
302 curclust = get_fatent(mydata, dir_curclust); in get_long_file_name()
303 if (CHECK_CLUST(curclust, mydata->fatsize)) { in get_long_file_name()
311 if (get_cluster(mydata, curclust, get_contents_vfatname_block, in get_long_file_name()
312 mydata->clust_size * mydata->sect_size) != 0) { in get_long_file_name()
355 mydata->clust_size * mydata->sect_size); in get_long_file_name()
366 static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value) in set_fatent_value() argument
371 switch (mydata->fatsize) { in set_fatent_value()
390 if (bufnum != mydata->fatbufnum) { in set_fatent_value()
392 __u8 *bufptr = mydata->fatbuf; in set_fatent_value()
393 __u32 fatlength = mydata->fatlength; in set_fatent_value()
400 if (flush_dirty_fat_buffer(mydata) < 0) in set_fatent_value()
403 startblock += mydata->fat_sect; in set_fatent_value()
409 mydata->fatbufnum = bufnum; in set_fatent_value()
413 mydata->fat_dirty = 1; in set_fatent_value()
416 switch (mydata->fatsize) { in set_fatent_value()
418 ((__u32 *) mydata->fatbuf)[offset] = cpu_to_le32(entry_value); in set_fatent_value()
421 ((__u16 *) mydata->fatbuf)[offset] = cpu_to_le16(entry_value); in set_fatent_value()
429 ((__u16 *)mydata->fatbuf)[off16] &= ~0xfff; in set_fatent_value()
430 ((__u16 *)mydata->fatbuf)[off16] |= val1; in set_fatent_value()
436 ((__u16 *)mydata->fatbuf)[off16] &= ~0xf000; in set_fatent_value()
437 ((__u16 *)mydata->fatbuf)[off16] |= (val1 << 12); in set_fatent_value()
439 ((__u16 *)mydata->fatbuf)[off16 + 1] &= ~0xff; in set_fatent_value()
440 ((__u16 *)mydata->fatbuf)[off16 + 1] |= val2; in set_fatent_value()
446 ((__u16 *)mydata->fatbuf)[off16] &= ~0xff00; in set_fatent_value()
447 ((__u16 *)mydata->fatbuf)[off16] |= (val1 << 8); in set_fatent_value()
449 ((__u16 *)mydata->fatbuf)[off16 + 1] &= ~0xf; in set_fatent_value()
450 ((__u16 *)mydata->fatbuf)[off16 + 1] |= val2; in set_fatent_value()
454 ((__u16 *)mydata->fatbuf)[off16] &= ~0xfff0; in set_fatent_value()
455 ((__u16 *)mydata->fatbuf)[off16] |= (val1 << 4); in set_fatent_value()
473 static __u32 determine_fatent(fsdata *mydata, __u32 entry) in determine_fatent() argument
478 next_fat = get_fatent(mydata, next_entry); in determine_fatent()
481 set_fatent_value(mydata, entry, next_entry); in determine_fatent()
487 mydata->fatsize, entry, next_entry); in determine_fatent()
497 set_cluster(fsdata *mydata, __u32 clustnum, __u8 *buffer, in set_cluster() argument
505 startsect = clust_to_sect(mydata, clustnum); in set_cluster()
507 startsect = mydata->rootdir_sect; in set_cluster()
512 ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size); in set_cluster()
516 while (size >= mydata->sect_size) { in set_cluster()
517 memcpy(tmpbuf, buffer, mydata->sect_size); in set_cluster()
524 buffer += mydata->sect_size; in set_cluster()
525 size -= mydata->sect_size; in set_cluster()
527 } else if (size >= mydata->sect_size) { in set_cluster()
528 idx = size / mydata->sect_size; in set_cluster()
536 idx *= mydata->sect_size; in set_cluster()
542 ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size); in set_cluster()
558 static int find_empty_cluster(fsdata *mydata) in find_empty_cluster() argument
563 fat_val = get_fatent(mydata, entry); in find_empty_cluster()
575 static void flush_dir_table(fsdata *mydata, dir_entry **dentptr) in flush_dir_table() argument
579 if (set_cluster(mydata, dir_curclust, in flush_dir_table()
581 mydata->clust_size * mydata->sect_size) != 0) { in flush_dir_table()
585 dir_newclust = find_empty_cluster(mydata); in flush_dir_table()
586 set_fatent_value(mydata, dir_curclust, dir_newclust); in flush_dir_table()
587 if (mydata->fatsize == 32) in flush_dir_table()
588 set_fatent_value(mydata, dir_newclust, 0xffffff8); in flush_dir_table()
589 else if (mydata->fatsize == 16) in flush_dir_table()
590 set_fatent_value(mydata, dir_newclust, 0xfff8); in flush_dir_table()
591 else if (mydata->fatsize == 12) in flush_dir_table()
592 set_fatent_value(mydata, dir_newclust, 0xff8); in flush_dir_table()
596 if (flush_dirty_fat_buffer(mydata) < 0) in flush_dir_table()
600 mydata->clust_size * mydata->sect_size); in flush_dir_table()
608 static int clear_fatent(fsdata *mydata, __u32 entry) in clear_fatent() argument
612 while (!CHECK_CLUST(entry, mydata->fatsize)) { in clear_fatent()
613 fat_val = get_fatent(mydata, entry); in clear_fatent()
615 set_fatent_value(mydata, entry, 0); in clear_fatent()
623 if (flush_dirty_fat_buffer(mydata) < 0) in clear_fatent()
636 set_contents(fsdata *mydata, dir_entry *dentptr, __u8 *buffer, in set_contents() argument
640 unsigned int bytesperclust = mydata->clust_size * mydata->sect_size; in set_contents()
666 newclust = determine_fatent(mydata, endclust); in set_contents()
671 if (CHECK_CLUST(newclust, mydata->fatsize)) { in set_contents()
682 if (set_cluster(mydata, curclust, buffer, (int)actsize) != 0) { in set_contents()
689 if (mydata->fatsize == 12) in set_contents()
691 else if (mydata->fatsize == 16) in set_contents()
693 else if (mydata->fatsize == 32) in set_contents()
695 set_fatent_value(mydata, endclust, newclust); in set_contents()
699 if (set_cluster(mydata, curclust, buffer, (int)actsize) != 0) { in set_contents()
707 if (CHECK_CLUST(newclust, mydata->fatsize)) { in set_contents()
720 static void set_start_cluster(const fsdata *mydata, dir_entry *dentptr, in set_start_cluster() argument
723 if (mydata->fatsize == 32) in set_start_cluster()
732 static void fill_dentry(fsdata *mydata, dir_entry *dentptr, in fill_dentry() argument
735 set_start_cluster(mydata, dentptr, start_cluster); in fill_dentry()
748 static int check_overflow(fsdata *mydata, __u32 clustnum, loff_t size) in check_overflow() argument
753 startsect = clust_to_sect(mydata, clustnum); in check_overflow()
755 startsect = mydata->rootdir_sect; in check_overflow()
758 sect_num = div_u64_rem(size, mydata->sect_size, &offset); in check_overflow()
771 static int is_next_clust(fsdata *mydata, dir_entry *dentptr) in is_next_clust() argument
777 if (cur_position >= mydata->clust_size * mydata->sect_size) in is_next_clust()
789 static dir_entry *find_directory_entry(fsdata *mydata, int startsect, in find_directory_entry() argument
792 __u32 curclust = sect_to_clust(mydata, startsect); in find_directory_entry()
801 if (get_cluster(mydata, curclust, get_dentfromdir_block, in find_directory_entry()
802 mydata->clust_size * mydata->sect_size) != 0) { in find_directory_entry()
817 if (is_next_clust(mydata, dentptr)) in find_directory_entry()
825 get_long_file_name(mydata, curclust, in find_directory_entry()
832 if (is_next_clust(mydata, dentptr)) in find_directory_entry()
850 if (is_next_clust(mydata, dentptr)) in find_directory_entry()
878 if (mydata->fatsize != 32 && (int)curclust <= 1) { in find_directory_entry()
889 curclust = get_fatent(mydata, dir_curclust); in find_directory_entry()
890 if (IS_LAST_CLUST(curclust, mydata->fatsize)) { in find_directory_entry()
894 if (CHECK_CLUST(curclust, mydata->fatsize)) { in find_directory_entry()
913 fsdata *mydata = &datablock; in do_fat_write() local
921 if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) { in do_fat_write()
930 if (mydata->fatsize == 32) in do_fat_write()
931 mydata->fatlength = bs.fat32_length; in do_fat_write()
933 mydata->fatlength = bs.fat_length; in do_fat_write()
935 mydata->fat_sect = bs.reserved; in do_fat_write()
937 cursect = mydata->rootdir_sect in do_fat_write()
938 = mydata->fat_sect + mydata->fatlength * bs.fats; in do_fat_write()
941 mydata->sect_size = (bs.sector_size[1] << 8) + bs.sector_size[0]; in do_fat_write()
942 mydata->clust_size = bs.cluster_size; in do_fat_write()
944 if (mydata->fatsize == 32) { in do_fat_write()
945 mydata->data_begin = mydata->rootdir_sect - in do_fat_write()
946 (mydata->clust_size * 2); in do_fat_write()
953 mydata->sect_size; in do_fat_write()
954 mydata->data_begin = mydata->rootdir_sect + in do_fat_write()
956 (mydata->clust_size * 2); in do_fat_write()
959 mydata->fatbufnum = -1; in do_fat_write()
960 mydata->fat_dirty = 0; in do_fat_write()
961 mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE); in do_fat_write()
962 if (mydata->fatbuf == NULL) { in do_fat_write()
968 (mydata->fatsize == 32) ? in do_fat_write()
969 (mydata->clust_size) : in do_fat_write()
984 startsect = mydata->rootdir_sect; in do_fat_write()
985 retdent = find_directory_entry(mydata, startsect, in do_fat_write()
994 ret = check_overflow(mydata, start_cluster, in do_fat_write()
1002 ret = clear_fatent(mydata, start_cluster); in do_fat_write()
1009 set_start_cluster(mydata, retdent, 0); in do_fat_write()
1011 ret = start_cluster = find_empty_cluster(mydata); in do_fat_write()
1017 ret = check_overflow(mydata, start_cluster, size); in do_fat_write()
1023 set_start_cluster(mydata, retdent, start_cluster); in do_fat_write()
1028 fill_dir_slot(mydata, &empty_dentptr, filename); in do_fat_write()
1031 ret = start_cluster = find_empty_cluster(mydata); in do_fat_write()
1037 ret = check_overflow(mydata, start_cluster, size); in do_fat_write()
1047 fill_dentry(mydata, empty_dentptr, filename, in do_fat_write()
1053 ret = set_contents(mydata, retdent, buffer, size, actwrite); in do_fat_write()
1061 ret = flush_dirty_fat_buffer(mydata); in do_fat_write()
1068 ret = set_cluster(mydata, dir_curclust, get_dentfromdir_block, in do_fat_write()
1069 mydata->clust_size * mydata->sect_size); in do_fat_write()
1074 free(mydata->fatbuf); in do_fat_write()