Changeset 08232ee in mainline
- Timestamp:
- 2010-01-09T21:52:07Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9245413
- Parents:
- dccf721
- Location:
- uspace
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/mkfat/mkfat.c
rdccf721 r08232ee 93 93 size_t block_size; 94 94 char *endptr; 95 bn_t dev_nblocks; 95 96 96 97 cfg.total_sectors = 0; … … 144 145 printf(NAME ": Error determining device block size.\n"); 145 146 return 2; 147 } 148 149 rc = block_get_nblocks(handle, &dev_nblocks); 150 if (rc != EOK) { 151 printf(NAME ": Warning, failed to obtain block device size.\n"); 152 } else { 153 printf(NAME ": Block device has %llu blocks.\n", dev_nblocks); 154 cfg.total_sectors = dev_nblocks; 146 155 } 147 156 … … 240 249 } 241 250 242 printf("fat_sectors=%d\n", par->fat_sectors);243 251 /* File allocation tables */ 244 252 for (i = 0; i < fat_count; ++i) { -
uspace/lib/libblock/libblock.c
rdccf721 r08232ee 87 87 static int write_blocks(devcon_t *devcon, bn_t ba, size_t cnt); 88 88 static int get_block_size(int dev_phone, size_t *bsize); 89 static int get_num_blocks(int dev_phone, bn_t *nblocks); 89 90 90 91 static devcon_t *devcon_search(dev_handle_t dev_handle) … … 738 739 } 739 740 741 /** Get number of blocks on device. 742 * 743 * @param dev_handle Device handle of the block device. 744 * @param nblocks Output number of blocks. 745 * 746 * @return EOK on success or negative error code on failure. 747 */ 748 int block_get_nblocks(dev_handle_t dev_handle, bn_t *nblocks) 749 { 750 devcon_t *devcon; 751 752 devcon = devcon_search(dev_handle); 753 assert(devcon); 754 755 return get_num_blocks(devcon->dev_phone, nblocks); 756 } 757 740 758 /** Read blocks from block device. 741 759 * … … 789 807 } 790 808 809 /** Get total number of blocks on block device. */ 810 static int get_num_blocks(int dev_phone, bn_t *nblocks) 811 { 812 ipcarg_t nb_l, nb_h; 813 int rc; 814 815 rc = async_req_0_2(dev_phone, BD_GET_NUM_BLOCKS, &nb_l, &nb_h); 816 if (rc == EOK) { 817 *nblocks = (bn_t) MERGE_LOUP32(nb_l, nb_h); 818 } 819 820 return rc; 821 } 822 791 823 /** @} 792 824 */ -
uspace/lib/libblock/libblock.h
rdccf721 r08232ee 60 60 #define BLOCK_FLAGS_NOREAD 1 61 61 62 typedef uint64_t bn_t; /**< Block number type. */63 64 62 typedef struct block { 65 63 /** Mutex protecting the reference count. */ … … 110 108 111 109 extern int block_get_bsize(dev_handle_t, size_t *); 110 extern int block_get_nblocks(dev_handle_t, bn_t *); 112 111 extern int block_read_direct(dev_handle_t, bn_t, size_t, void *); 113 112 extern int block_write_direct(dev_handle_t, bn_t, size_t, const void *); -
uspace/lib/libc/generic/io/io.c
rdccf721 r08232ee 554 554 } 555 555 556 int ftell(FILE *stream) 557 { 558 off_t rc = lseek(stream->fd, 0, SEEK_CUR); 559 if (rc == (off_t) (-1)) { 560 /* errno has been set by lseek. */ 561 return -1; 562 } 563 564 return rc; 565 } 566 556 567 void rewind(FILE *stream) 557 568 { -
uspace/lib/libc/include/ipc/bd.h
rdccf721 r08232ee 40 40 typedef enum { 41 41 BD_GET_BLOCK_SIZE = IPC_FIRST_USER_METHOD, 42 BD_GET_NUM_BLOCKS, 42 43 BD_READ_BLOCKS, 43 44 BD_WRITE_BLOCKS -
uspace/lib/libc/include/sys/types.h
rdccf721 r08232ee 40 40 typedef long off_t; 41 41 typedef int mode_t; 42 typedef uint64_t bn_t; /**< Block number type. */ 42 43 43 44 typedef int32_t wchar_t; -
uspace/srv/bd/ata_bd/ata_bd.c
rdccf721 r08232ee 296 296 ipc_answer_1(callid, EOK, block_size); 297 297 continue; 298 case BD_GET_NUM_BLOCKS: 299 ipc_answer_2(callid, EOK, LOWER32(disk[disk_id].blocks), 300 UPPER32(disk[disk_id].blocks)); 301 continue; 298 302 default: 299 303 retval = EINVAL; -
uspace/srv/bd/file_bd/file_bd.c
rdccf721 r08232ee 56 56 57 57 static const size_t block_size = 512; 58 static bn_t num_blocks; 58 59 static FILE *img; 59 60 … … 99 100 { 100 101 int rc; 102 long img_size; 101 103 102 104 rc = devmap_driver_register(NAME, file_bd_connection); … … 109 111 if (img == NULL) 110 112 return EINVAL; 113 114 if (fseek(img, 0, SEEK_END) != 0) { 115 fclose(img); 116 return EIO; 117 } 118 119 img_size = ftell(img); 120 if (img_size < 0) { 121 fclose(img); 122 return EIO; 123 } 124 125 num_blocks = img_size / block_size; 111 126 112 127 fibril_mutex_initialize(&dev_lock); … … 174 189 ipc_answer_1(callid, EOK, block_size); 175 190 continue; 191 case BD_GET_NUM_BLOCKS: 192 ipc_answer_2(callid, EOK, LOWER32(num_blocks), 193 UPPER32(num_blocks)); 194 continue; 176 195 default: 177 196 retval = EINVAL; -
uspace/srv/bd/gxe_bd/gxe_bd.c
rdccf721 r08232ee 234 234 ipc_answer_1(callid, EOK, block_size); 235 235 continue; 236 case BD_GET_NUM_BLOCKS: 237 retval = ENOTSUP; 238 break; 236 239 default: 237 240 retval = EINVAL; -
uspace/srv/bd/part/mbr_part/mbr_part.c
rdccf721 r08232ee 463 463 ipc_answer_1(callid, EOK, block_size); 464 464 continue; 465 465 case BD_GET_NUM_BLOCKS: 466 ipc_answer_2(callid, EOK, LOWER32(part->length), 467 UPPER32(part->length)); 468 continue; 466 469 default: 467 470 retval = EINVAL; -
uspace/srv/bd/rd/rd.c
rdccf721 r08232ee 153 153 ipc_answer_1(callid, EOK, block_size); 154 154 continue; 155 case BD_GET_NUM_BLOCKS: 156 ipc_answer_2(callid, EOK, LOWER32(rd_size / block_size), 157 UPPER32(rd_size / block_size)); 158 continue; 155 159 default: 156 160 /* -
uspace/srv/vfs/vfs_ops.c
rdccf721 r08232ee 900 900 } 901 901 newpos = size + off; 902 file->pos = newpos; 902 903 fibril_mutex_unlock(&file->lock); 903 904 ipc_answer_1(rid, EOK, newpos);
Note:
See TracChangeset
for help on using the changeset viewer.