Changeset 15f3c3f in mainline for uspace/lib
- Timestamp:
- 2011-06-22T22:00:52Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 86ffa27f
- Parents:
- ef09a7a
- Location:
- uspace/lib
- Files:
-
- 1 added
- 1 deleted
- 15 edited
- 2 moved
-
block/libblock.c (modified) (36 diffs)
-
block/libblock.h (modified) (3 diffs)
-
c/Makefile (modified) (2 diffs)
-
c/generic/devmap.c (deleted)
-
c/generic/io/io.c (modified) (1 diff)
-
c/generic/loc.c (added)
-
c/generic/vfs/vfs.c (modified) (12 diffs)
-
c/include/ipc/devman.h (modified) (1 diff)
-
c/include/ipc/loc.h (moved) (moved from uspace/lib/c/include/ipc/devmap.h ) (2 diffs)
-
c/include/ipc/services.h (modified) (1 diff)
-
c/include/loc.h (moved) (moved from uspace/lib/c/include/devmap.h ) (1 diff)
-
c/include/sys/stat.h (modified) (2 diffs)
-
c/include/vfs/vfs.h (modified) (2 diffs)
-
ext2/libext2_filesystem.c (modified) (3 diffs)
-
ext2/libext2_filesystem.h (modified) (2 diffs)
-
ext2/libext2_superblock.c (modified) (2 diffs)
-
ext2/libext2_superblock.h (modified) (1 diff)
-
fs/libfs.c (modified) (21 diffs)
-
fs/libfs.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/block/libblock.c
ref09a7a r15f3c3f 39 39 #include "libblock.h" 40 40 #include "../../srv/vfs/vfs.h" 41 #include <ipc/ devmap.h>41 #include <ipc/loc.h> 42 42 #include <ipc/bd.h> 43 43 #include <ipc/services.h> … … 78 78 typedef struct { 79 79 link_t link; 80 devmap_handle_t devmap_handle;80 service_id_t service_id; 81 81 async_sess_t *sess; 82 82 fibril_mutex_t comm_area_lock; … … 95 95 static aoff64_t ba_ltop(devcon_t *, aoff64_t); 96 96 97 static devcon_t *devcon_search( devmap_handle_t devmap_handle)97 static devcon_t *devcon_search(service_id_t service_id) 98 98 { 99 99 fibril_mutex_lock(&dcl_lock); … … 101 101 list_foreach(dcl, cur) { 102 102 devcon_t *devcon = list_get_instance(cur, devcon_t, link); 103 if (devcon-> devmap_handle == devmap_handle) {103 if (devcon->service_id == service_id) { 104 104 fibril_mutex_unlock(&dcl_lock); 105 105 return devcon; … … 111 111 } 112 112 113 static int devcon_add( devmap_handle_t devmap_handle, async_sess_t *sess,113 static int devcon_add(service_id_t service_id, async_sess_t *sess, 114 114 size_t bsize, void *comm_area, size_t comm_size) 115 115 { … … 124 124 125 125 link_initialize(&devcon->link); 126 devcon-> devmap_handle = devmap_handle;126 devcon->service_id = service_id; 127 127 devcon->sess = sess; 128 128 fibril_mutex_initialize(&devcon->comm_area_lock); … … 137 137 list_foreach(dcl, cur) { 138 138 devcon_t *d = list_get_instance(cur, devcon_t, link); 139 if (d-> devmap_handle == devmap_handle) {139 if (d->service_id == service_id) { 140 140 fibril_mutex_unlock(&dcl_lock); 141 141 free(devcon); … … 155 155 } 156 156 157 int block_init(exch_mgmt_t mgmt, devmap_handle_t devmap_handle,157 int block_init(exch_mgmt_t mgmt, service_id_t service_id, 158 158 size_t comm_size) 159 159 { … … 163 163 return ENOMEM; 164 164 165 async_sess_t *sess = devmap_device_connect(mgmt, devmap_handle,165 async_sess_t *sess = loc_service_connect(mgmt, service_id, 166 166 IPC_FLAG_BLOCKING); 167 167 if (!sess) { … … 190 190 } 191 191 192 rc = devcon_add( devmap_handle, sess, bsize, comm_area, comm_size);192 rc = devcon_add(service_id, sess, bsize, comm_area, comm_size); 193 193 if (rc != EOK) { 194 194 munmap(comm_area, comm_size); … … 200 200 } 201 201 202 void block_fini( devmap_handle_t devmap_handle)203 { 204 devcon_t *devcon = devcon_search( devmap_handle);202 void block_fini(service_id_t service_id) 203 { 204 devcon_t *devcon = devcon_search(service_id); 205 205 assert(devcon); 206 206 207 207 if (devcon->cache) 208 (void) block_cache_fini( devmap_handle);208 (void) block_cache_fini(service_id); 209 209 210 210 devcon_remove(devcon); … … 219 219 } 220 220 221 int block_bb_read( devmap_handle_t devmap_handle, aoff64_t ba)221 int block_bb_read(service_id_t service_id, aoff64_t ba) 222 222 { 223 223 void *bb_buf; 224 224 int rc; 225 225 226 devcon_t *devcon = devcon_search( devmap_handle);226 devcon_t *devcon = devcon_search(service_id); 227 227 if (!devcon) 228 228 return ENOENT; … … 249 249 } 250 250 251 void *block_bb_get( devmap_handle_t devmap_handle)252 { 253 devcon_t *devcon = devcon_search( devmap_handle);251 void *block_bb_get(service_id_t service_id) 252 { 253 devcon_t *devcon = devcon_search(service_id); 254 254 assert(devcon); 255 255 return devcon->bb_buf; … … 277 277 }; 278 278 279 int block_cache_init( devmap_handle_t devmap_handle, size_t size, unsigned blocks,279 int block_cache_init(service_id_t service_id, size_t size, unsigned blocks, 280 280 enum cache_mode mode) 281 281 { 282 devcon_t *devcon = devcon_search( devmap_handle);282 devcon_t *devcon = devcon_search(service_id); 283 283 cache_t *cache; 284 284 if (!devcon) … … 315 315 } 316 316 317 int block_cache_fini( devmap_handle_t devmap_handle)318 { 319 devcon_t *devcon = devcon_search( devmap_handle);317 int block_cache_fini(service_id_t service_id) 318 { 319 devcon_t *devcon = devcon_search(service_id); 320 320 cache_t *cache; 321 321 int rc; … … 384 384 * @param block Pointer to where the function will store the 385 385 * block pointer on success. 386 * @param devmap_handle Device handleof the block device.386 * @param service_id Service ID of the block device. 387 387 * @param ba Block address (logical). 388 388 * @param flags If BLOCK_FLAGS_NOREAD is specified, block_get() … … 392 392 * @return EOK on success or a negative error code. 393 393 */ 394 int block_get(block_t **block, devmap_handle_t devmap_handle, aoff64_t ba, int flags)394 int block_get(block_t **block, service_id_t service_id, aoff64_t ba, int flags) 395 395 { 396 396 devcon_t *devcon; … … 401 401 int rc; 402 402 403 devcon = devcon_search( devmap_handle);403 devcon = devcon_search(service_id); 404 404 405 405 assert(devcon); … … 527 527 528 528 block_initialize(b); 529 b-> devmap_handle = devmap_handle;529 b->service_id = service_id; 530 530 b->size = cache->lblock_size; 531 531 b->lba = ba; … … 577 577 int block_put(block_t *block) 578 578 { 579 devcon_t *devcon = devcon_search(block-> devmap_handle);579 devcon_t *devcon = devcon_search(block->service_id); 580 580 cache_t *cache; 581 581 unsigned blocks_cached; … … 675 675 /** Read sequential data from a block device. 676 676 * 677 * @param devmap_handle Device handleof the block device.677 * @param service_id Service ID of the block device. 678 678 * @param bufpos Pointer to the first unread valid offset within the 679 679 * communication buffer. … … 687 687 * @return EOK on success or a negative return code on failure. 688 688 */ 689 int block_seqread( devmap_handle_t devmap_handle, size_t *bufpos, size_t *buflen,689 int block_seqread(service_id_t service_id, size_t *bufpos, size_t *buflen, 690 690 aoff64_t *pos, void *dst, size_t size) 691 691 { … … 695 695 devcon_t *devcon; 696 696 697 devcon = devcon_search( devmap_handle);697 devcon = devcon_search(service_id); 698 698 assert(devcon); 699 699 block_size = devcon->pblock_size; … … 741 741 /** Read blocks directly from device (bypass cache). 742 742 * 743 * @param devmap_handle Device handleof the block device.743 * @param service_id Service ID of the block device. 744 744 * @param ba Address of first block (physical). 745 745 * @param cnt Number of blocks. … … 748 748 * @return EOK on success or negative error code on failure. 749 749 */ 750 int block_read_direct( devmap_handle_t devmap_handle, aoff64_t ba, size_t cnt, void *buf)750 int block_read_direct(service_id_t service_id, aoff64_t ba, size_t cnt, void *buf) 751 751 { 752 752 devcon_t *devcon; 753 753 int rc; 754 754 755 devcon = devcon_search( devmap_handle);755 devcon = devcon_search(service_id); 756 756 assert(devcon); 757 757 … … 769 769 /** Write blocks directly to device (bypass cache). 770 770 * 771 * @param devmap_handle Device handleof the block device.771 * @param service_id Service ID of the block device. 772 772 * @param ba Address of first block (physical). 773 773 * @param cnt Number of blocks. … … 776 776 * @return EOK on success or negative error code on failure. 777 777 */ 778 int block_write_direct( devmap_handle_t devmap_handle, aoff64_t ba, size_t cnt,778 int block_write_direct(service_id_t service_id, aoff64_t ba, size_t cnt, 779 779 const void *data) 780 780 { … … 782 782 int rc; 783 783 784 devcon = devcon_search( devmap_handle);784 devcon = devcon_search(service_id); 785 785 assert(devcon); 786 786 … … 797 797 /** Get device block size. 798 798 * 799 * @param devmap_handle Device handleof the block device.799 * @param service_id Service ID of the block device. 800 800 * @param bsize Output block size. 801 801 * 802 802 * @return EOK on success or negative error code on failure. 803 803 */ 804 int block_get_bsize( devmap_handle_t devmap_handle, size_t *bsize)804 int block_get_bsize(service_id_t service_id, size_t *bsize) 805 805 { 806 806 devcon_t *devcon; 807 807 808 devcon = devcon_search( devmap_handle);808 devcon = devcon_search(service_id); 809 809 assert(devcon); 810 810 … … 814 814 /** Get number of blocks on device. 815 815 * 816 * @param devmap_handle Device handleof the block device.816 * @param service_id Service ID of the block device. 817 817 * @param nblocks Output number of blocks. 818 818 * 819 819 * @return EOK on success or negative error code on failure. 820 820 */ 821 int block_get_nblocks( devmap_handle_t devmap_handle, aoff64_t *nblocks)822 { 823 devcon_t *devcon = devcon_search( devmap_handle);821 int block_get_nblocks(service_id_t service_id, aoff64_t *nblocks) 822 { 823 devcon_t *devcon = devcon_search(service_id); 824 824 assert(devcon); 825 825 … … 829 829 /** Read bytes directly from the device (bypass cache) 830 830 * 831 * @param devmap_handle Device handleof the block device.831 * @param service_id Service ID of the block device. 832 832 * @param abs_offset Absolute offset in bytes where to start reading 833 833 * @param bytes Number of bytes to read … … 836 836 * @return EOK on success or negative error code on failure. 837 837 */ 838 int block_read_bytes_direct( devmap_handle_t devmap_handle, aoff64_t abs_offset,838 int block_read_bytes_direct(service_id_t service_id, aoff64_t abs_offset, 839 839 size_t bytes, void *data) 840 840 { … … 848 848 size_t offset; 849 849 850 rc = block_get_bsize( devmap_handle, &phys_block_size);850 rc = block_get_bsize(service_id, &phys_block_size); 851 851 if (rc != EOK) { 852 852 return rc; … … 866 866 } 867 867 868 rc = block_read_direct( devmap_handle, first_block, blocks, buffer);868 rc = block_read_direct(service_id, first_block, blocks, buffer); 869 869 if (rc != EOK) { 870 870 free(buffer); … … 900 900 printf("Error %d reading %zu blocks starting at block %" PRIuOFF64 901 901 " from device handle %" PRIun "\n", rc, cnt, ba, 902 devcon-> devmap_handle);902 devcon->service_id); 903 903 #ifndef NDEBUG 904 904 stacktrace_print(); … … 929 929 if (rc != EOK) { 930 930 printf("Error %d writing %zu blocks starting at block %" PRIuOFF64 931 " to device handle %" PRIun "\n", rc, cnt, ba, devcon-> devmap_handle);931 " to device handle %" PRIun "\n", rc, cnt, ba, devcon->service_id); 932 932 #ifndef NDEBUG 933 933 stacktrace_print(); -
uspace/lib/block/libblock.h
ref09a7a r15f3c3f 1 1 /* 2 2 * Copyright (c) 2008 Jakub Jermar 3 * Copyright (c) 2008 Martin Decky 4 * Copyright (c) 2011 Martin Sucha 3 * Copyright (c) 2008 Martin Decky 4 * Copyright (c) 2011 Martin Sucha 5 5 * All rights reserved. 6 6 * … … 73 73 /** Readers / Writer lock protecting the contents of the block. */ 74 74 fibril_rwlock_t contents_lock; 75 /** Handle of the device where the block resides. */76 devmap_handle_t devmap_handle;75 /** Service ID of service providing the block device. */ 76 service_id_t service_id; 77 77 /** Logical block address */ 78 78 aoff64_t lba; … … 97 97 }; 98 98 99 extern int block_init(exch_mgmt_t, devmap_handle_t, size_t);100 extern void block_fini( devmap_handle_t);99 extern int block_init(exch_mgmt_t, service_id_t, size_t); 100 extern void block_fini(service_id_t); 101 101 102 extern int block_bb_read( devmap_handle_t, aoff64_t);103 extern void *block_bb_get( devmap_handle_t);102 extern int block_bb_read(service_id_t, aoff64_t); 103 extern void *block_bb_get(service_id_t); 104 104 105 extern int block_cache_init( devmap_handle_t, size_t, unsigned, enum cache_mode);106 extern int block_cache_fini( devmap_handle_t);105 extern int block_cache_init(service_id_t, size_t, unsigned, enum cache_mode); 106 extern int block_cache_fini(service_id_t); 107 107 108 extern int block_get(block_t **, devmap_handle_t, aoff64_t, int);108 extern int block_get(block_t **, service_id_t, aoff64_t, int); 109 109 extern int block_put(block_t *); 110 110 111 extern int block_seqread( devmap_handle_t, size_t *, size_t *, aoff64_t *, void *,111 extern int block_seqread(service_id_t, size_t *, size_t *, aoff64_t *, void *, 112 112 size_t); 113 113 114 extern int block_get_bsize( devmap_handle_t, size_t *);115 extern int block_get_nblocks( devmap_handle_t, aoff64_t *);116 extern int block_read_direct( devmap_handle_t, aoff64_t, size_t, void *);117 extern int block_read_bytes_direct( devmap_handle_t, aoff64_t, size_t, void *);118 extern int block_write_direct( devmap_handle_t, aoff64_t, size_t, const void *);114 extern int block_get_bsize(service_id_t, size_t *); 115 extern int block_get_nblocks(service_id_t, aoff64_t *); 116 extern int block_read_direct(service_id_t, aoff64_t, size_t, void *); 117 extern int block_read_bytes_direct(service_id_t, aoff64_t, size_t, void *); 118 extern int block_write_direct(service_id_t, aoff64_t, size_t, const void *); 119 119 120 120 #endif -
uspace/lib/c/Makefile
ref09a7a r15f3c3f 67 67 generic/cap.c \ 68 68 generic/clipboard.c \ 69 generic/devmap.c \70 69 generic/devman.c \ 71 70 generic/device/hw_res.c \ … … 73 72 generic/event.c \ 74 73 generic/errno.c \ 74 generic/loc.c \ 75 75 generic/mem.c \ 76 76 generic/str.c \ -
uspace/lib/c/generic/io/io.c
ref09a7a r15f3c3f 45 45 #include <vfs/vfs.h> 46 46 #include <vfs/vfs_sess.h> 47 #include <ipc/ devmap.h>47 #include <ipc/loc.h> 48 48 #include <adt/list.h> 49 49 #include "../private/io.h" -
uspace/lib/c/generic/vfs/vfs.c
ref09a7a r15f3c3f 51 51 #include <assert.h> 52 52 #include <str.h> 53 #include < devmap.h>53 #include <loc.h> 54 54 #include <ipc/vfs.h> 55 #include <ipc/ devmap.h>55 #include <ipc/loc.h> 56 56 57 57 static FIBRIL_MUTEX_INITIALIZE(vfs_mutex); … … 142 142 } 143 143 144 int mount(const char *fs_name, const char *mp, const char *fq dn,144 int mount(const char *fs_name, const char *mp, const char *fqsn, 145 145 const char *opts, unsigned int flags) 146 146 { 147 147 int null_id = -1; 148 char null[ DEVMAP_NAME_MAXLEN];149 150 if (str_cmp(fq dn, "") == 0) {148 char null[LOC_NAME_MAXLEN]; 149 150 if (str_cmp(fqsn, "") == 0) { 151 151 /* No device specified, create a fresh 152 152 null/%d device instead */ 153 null_id = devmap_null_create();153 null_id = loc_null_create(); 154 154 155 155 if (null_id == -1) 156 156 return ENOMEM; 157 157 158 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id);159 fq dn = null;160 } 161 162 devmap_handle_t devmap_handle;163 int res = devmap_device_get_handle(fqdn, &devmap_handle, flags);158 snprintf(null, LOC_NAME_MAXLEN, "null/%d", null_id); 159 fqsn = null; 160 } 161 162 service_id_t service_id; 163 int res = loc_service_get_id(fqsn, &service_id, flags); 164 164 if (res != EOK) { 165 165 if (null_id != -1) 166 devmap_null_destroy(null_id);166 loc_null_destroy(null_id); 167 167 168 168 return res; … … 173 173 if (!mpa) { 174 174 if (null_id != -1) 175 devmap_null_destroy(null_id);175 loc_null_destroy(null_id); 176 176 177 177 return ENOMEM; … … 181 181 182 182 sysarg_t rc_orig; 183 aid_t req = async_send_2(exch, VFS_IN_MOUNT, devmap_handle, flags, NULL);183 aid_t req = async_send_2(exch, VFS_IN_MOUNT, service_id, flags, NULL); 184 184 sysarg_t rc = async_data_write_start(exch, (void *) mpa, mpa_size); 185 185 if (rc != EOK) { … … 189 189 190 190 if (null_id != -1) 191 devmap_null_destroy(null_id);191 loc_null_destroy(null_id); 192 192 193 193 if (rc_orig == EOK) … … 204 204 205 205 if (null_id != -1) 206 devmap_null_destroy(null_id);206 loc_null_destroy(null_id); 207 207 208 208 if (rc_orig == EOK) … … 219 219 220 220 if (null_id != -1) 221 devmap_null_destroy(null_id);221 loc_null_destroy(null_id); 222 222 223 223 if (rc_orig == EOK) … … 235 235 236 236 if (null_id != -1) 237 devmap_null_destroy(null_id);237 loc_null_destroy(null_id); 238 238 239 239 if (rc_orig == EOK) … … 248 248 249 249 if ((rc != EOK) && (null_id != -1)) 250 devmap_null_destroy(null_id);250 loc_null_destroy(null_id); 251 251 252 252 return (int) rc; … … 335 335 ipc_call_t answer; 336 336 aid_t req = async_send_4(exch, VFS_IN_OPEN_NODE, node->fs_handle, 337 node-> devmap_handle, node->index, oflag, &answer);337 node->service_id, node->index, oflag, &answer); 338 338 339 339 vfs_exchange_end(exch); … … 749 749 } 750 750 751 if (!stat. device) {751 if (!stat.service) { 752 752 errno = ENOENT; 753 753 return NULL; 754 754 } 755 755 756 return devmap_device_connect(mgmt, stat.device, 0);756 return loc_service_connect(mgmt, stat.service, 0); 757 757 } 758 758 … … 764 764 if (rc == EOK) { 765 765 node->fs_handle = stat.fs_handle; 766 node-> devmap_handle = stat.devmap_handle;766 node->service_id = stat.service_id; 767 767 node->index = stat.index; 768 768 } -
uspace/lib/c/include/ipc/devman.h
ref09a7a r15f3c3f 130 130 DEVMAN_CLIENT, 131 131 DEVMAN_CONNECT_TO_DEVICE, 132 DEVMAN_CONNECT_FROM_ DEVMAP,132 DEVMAN_CONNECT_FROM_LOC, 133 133 DEVMAN_CONNECT_TO_PARENTS_DEVICE 134 134 } devman_interface_t; -
uspace/lib/c/include/ipc/loc.h
ref09a7a r15f3c3f 1 1 /* 2 2 * Copyright (c) 2007 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 29 /** @addtogroup devmap30 /** @addtogroup loc 30 31 * @{ 31 32 */ 32 33 33 #ifndef LIBC_IPC_ DEVMAP_H_34 #define LIBC_IPC_ DEVMAP_H_34 #ifndef LIBC_IPC_LOC_H_ 35 #define LIBC_IPC_LOC_H_ 35 36 36 37 #include <ipc/common.h> 37 38 38 #define DEVMAP_NAME_MAXLEN 25539 #define LOC_NAME_MAXLEN 255 39 40 40 typedef sysarg_t devmap_handle_t;41 typedef sysarg_t service_id_t; 41 42 42 43 typedef enum { 43 DEV_HANDLE_NONE,44 DEV_HANDLE_NAMESPACE,45 DEV_HANDLE_DEVICE46 } devmap_handle_type_t;44 LOC_OBJECT_NONE, 45 LOC_OBJECT_NAMESPACE, 46 LOC_OBJECT_SERVICE 47 } loc_object_type_t; 47 48 48 49 typedef enum { 49 DEVMAP_DRIVER_REGISTER = IPC_FIRST_USER_METHOD,50 DEVMAP_DRIVER_UNREGISTER,51 DEVMAP_DEVICE_REGISTER,52 DEVMAP_DEVICE_UNREGISTER,53 DEVMAP_DEVICE_GET_HANDLE,54 DEVMAP_NAMESPACE_GET_HANDLE,55 DEVMAP_HANDLE_PROBE,56 DEVMAP_NULL_CREATE,57 DEVMAP_NULL_DESTROY,58 DEVMAP_GET_NAMESPACE_COUNT,59 DEVMAP_GET_DEVICE_COUNT,60 DEVMAP_GET_NAMESPACES,61 DEVMAP_GET_DEVICES62 } devmap_request_t;50 LOC_SERVER_REGISTER = IPC_FIRST_USER_METHOD, 51 LOC_SERVER_UNREGISTER, 52 LOC_SERVICE_REGISTER, 53 LOC_SERVICE_UNREGISTER, 54 LOC_SERVICE_GET_ID, 55 LOC_NAMESPACE_GET_ID, 56 LOC_ID_PROBE, 57 LOC_NULL_CREATE, 58 LOC_NULL_DESTROY, 59 LOC_GET_NAMESPACE_COUNT, 60 LOC_GET_SERVICE_COUNT, 61 LOC_GET_NAMESPACES, 62 LOC_GET_SERVICES 63 } loc_request_t; 63 64 64 /** Interface provided by devmap.65 /** Ports provided by location service. 65 66 * 66 * Every process that connects to devmapmust ask one of following67 * interfacesotherwise connection will be refused.67 * Every process that connects to loc must ask one of following 68 * ports, otherwise connection will be refused. 68 69 * 69 70 */ 70 71 typedef enum { 71 /** Connect as device driver*/72 DEVMAP_DRIVER = 1,73 /** Connect as client */74 DEVMAP_CLIENT,72 /** Service supplier (server) port */ 73 LOC_PORT_SUPPLIER = 1, 74 /** Service consumer (client) port */ 75 LOC_PORT_CONSUMER, 75 76 /** Create new connection to instance of device that 76 77 is specified by second argument of call. */ 77 DEVMAP_CONNECT_TO_DEVICE78 } devmap_interface_t;78 LOC_CONNECT_TO_SERVICE 79 } loc_interface_t; 79 80 80 81 typedef struct { 81 devmap_handle_t handle;82 char name[ DEVMAP_NAME_MAXLEN + 1];83 } dev_desc_t;82 service_id_t id; 83 char name[LOC_NAME_MAXLEN + 1]; 84 } loc_sdesc_t; 84 85 85 86 #endif -
uspace/lib/c/include/ipc/services.h
ref09a7a r15f3c3f 43 43 SERVICE_VIDEO, 44 44 SERVICE_VFS, 45 SERVICE_ DEVMAP,45 SERVICE_LOC, 46 46 SERVICE_DEVMAN, 47 47 SERVICE_IRC, -
uspace/lib/c/include/loc.h
ref09a7a r15f3c3f 33 33 */ 34 34 35 #ifndef LIBC_ DEVMAP_H_36 #define LIBC_ DEVMAP_H_35 #ifndef LIBC_LOC_H_ 36 #define LIBC_LOC_H_ 37 37 38 #include <ipc/ devmap.h>38 #include <ipc/loc.h> 39 39 #include <async.h> 40 40 #include <bool.h> 41 41 42 extern async_exch_t * devmap_exchange_begin_blocking(devmap_interface_t);43 extern async_exch_t * devmap_exchange_begin(devmap_interface_t);44 extern void devmap_exchange_end(async_exch_t *);42 extern async_exch_t *loc_exchange_begin_blocking(loc_interface_t); 43 extern async_exch_t *loc_exchange_begin(loc_interface_t); 44 extern void loc_exchange_end(async_exch_t *); 45 45 46 extern int devmap_driver_register(const char *, async_client_conn_t);47 extern int devmap_device_register(const char *, devmap_handle_t *);48 extern int devmap_device_register_with_iface(const char *, devmap_handle_t *,46 extern int loc_server_register(const char *, async_client_conn_t); 47 extern int loc_service_register(const char *, service_id_t *); 48 extern int loc_service_register_with_iface(const char *, service_id_t *, 49 49 sysarg_t); 50 50 51 extern int devmap_device_get_handle(const char *, devmap_handle_t *,51 extern int loc_service_get_id(const char *, service_id_t *, 52 52 unsigned int); 53 extern int devmap_namespace_get_handle(const char *, devmap_handle_t *,53 extern int loc_namespace_get_id(const char *, service_id_t *, 54 54 unsigned int); 55 extern devmap_handle_type_t devmap_handle_probe(devmap_handle_t);55 extern loc_object_type_t loc_id_probe(service_id_t); 56 56 57 extern async_sess_t * devmap_device_connect(exch_mgmt_t, devmap_handle_t,57 extern async_sess_t *loc_service_connect(exch_mgmt_t, service_id_t, 58 58 unsigned int); 59 59 60 extern int devmap_null_create(void);61 extern void devmap_null_destroy(int);60 extern int loc_null_create(void); 61 extern void loc_null_destroy(int); 62 62 63 extern size_t devmap_count_namespaces(void);64 extern size_t devmap_count_devices(devmap_handle_t);63 extern size_t loc_count_namespaces(void); 64 extern size_t loc_count_services(service_id_t); 65 65 66 extern size_t devmap_get_namespaces(dev_desc_t **);67 extern size_t devmap_get_devices(devmap_handle_t, dev_desc_t **);66 extern size_t loc_get_namespaces(loc_sdesc_t **); 67 extern size_t loc_get_services(service_id_t, loc_sdesc_t **); 68 68 69 69 #endif -
uspace/lib/c/include/sys/stat.h
ref09a7a r15f3c3f 39 39 #include <bool.h> 40 40 #include <ipc/vfs.h> 41 #include <ipc/ devmap.h>41 #include <ipc/loc.h> 42 42 43 43 struct stat { 44 44 fs_handle_t fs_handle; 45 devmap_handle_t devmap_handle;45 service_id_t service_id; 46 46 fs_index_t index; 47 47 unsigned int lnkcnt; … … 49 49 bool is_directory; 50 50 aoff64_t size; 51 devmap_handle_t device;51 service_id_t service; 52 52 }; 53 53 -
uspace/lib/c/include/vfs/vfs.h
ref09a7a r15f3c3f 38 38 #include <sys/types.h> 39 39 #include <ipc/vfs.h> 40 #include <ipc/ devmap.h>40 #include <ipc/loc.h> 41 41 #include <stdio.h> 42 42 … … 49 49 typedef struct { 50 50 fs_handle_t fs_handle; 51 devmap_handle_t devmap_handle;51 service_id_t service_id; 52 52 fs_index_t index; 53 53 } fdi_node_t; -
uspace/lib/ext2/libext2_filesystem.c
ref09a7a r15f3c3f 50 50 * 51 51 * @param fs Pointer to ext2_filesystem_t to initialize 52 * @param devmap_handle Device handleof the block device53 * 54 * @return EOK on success or negative error code on failure 55 */ 56 int ext2_filesystem_init(ext2_filesystem_t *fs, devmap_handle_t devmap_handle)52 * @param service_id Service ID of the block device 53 * 54 * @return EOK on success or negative error code on failure 55 */ 56 int ext2_filesystem_init(ext2_filesystem_t *fs, service_id_t service_id) 57 57 { 58 58 int rc; … … 60 60 size_t block_size; 61 61 62 fs->device = devmap_handle;62 fs->device = service_id; 63 63 64 64 rc = block_init(EXCHANGE_SERIALIZE, fs->device, 2048); … … 80 80 } 81 81 82 rc = block_cache_init( devmap_handle, block_size, 0, CACHE_MODE_WT);82 rc = block_cache_init(service_id, block_size, 0, CACHE_MODE_WT); 83 83 if (rc != EOK) { 84 84 block_fini(fs->device); -
uspace/lib/ext2/libext2_filesystem.h
ref09a7a r15f3c3f 43 43 44 44 typedef struct ext2_filesystem { 45 devmap_handle_t device;45 service_id_t device; 46 46 ext2_superblock_t * superblock; 47 47 } ext2_filesystem_t; … … 59 59 #define EXT2_SUPPORTED_READ_ONLY_FEATURES 0 60 60 61 extern int ext2_filesystem_init(ext2_filesystem_t *, devmap_handle_t);61 extern int ext2_filesystem_init(ext2_filesystem_t *, service_id_t); 62 62 extern int ext2_filesystem_check_sanity(ext2_filesystem_t *); 63 63 extern int ext2_filesystem_check_flags(ext2_filesystem_t *, bool *); -
uspace/lib/ext2/libext2_superblock.c
ref09a7a r15f3c3f 321 321 /** Read a superblock directly from device (i.e. no libblock cache) 322 322 * 323 * @param devmap_handle Device handleof the block device.323 * @param service_id Service ID of the block device. 324 324 * @param superblock Pointer where to store pointer to new superblock 325 325 * 326 326 * @return EOK on success or negative error code on failure. 327 327 */ 328 int ext2_superblock_read_direct( devmap_handle_t devmap_handle,328 int ext2_superblock_read_direct(service_id_t service_id, 329 329 ext2_superblock_t **superblock) 330 330 { … … 337 337 } 338 338 339 rc = block_read_bytes_direct( devmap_handle, EXT2_SUPERBLOCK_OFFSET,339 rc = block_read_bytes_direct(service_id, EXT2_SUPERBLOCK_OFFSET, 340 340 EXT2_SUPERBLOCK_SIZE, data); 341 341 if (rc != EOK) { -
uspace/lib/ext2/libext2_superblock.h
ref09a7a r15f3c3f 110 110 extern uint32_t ext2_superblock_get_features_read_only(ext2_superblock_t *); 111 111 112 extern int ext2_superblock_read_direct( devmap_handle_t, ext2_superblock_t **);112 extern int ext2_superblock_read_direct(service_id_t, ext2_superblock_t **); 113 113 extern int ext2_superblock_check_sanity(ext2_superblock_t *); 114 114 -
uspace/lib/fs/libfs.c
ref09a7a r15f3c3f 153 153 ipc_call_t *request) 154 154 { 155 devmap_handle_t mp_devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);155 service_id_t mp_service_id = (service_id_t) IPC_GET_ARG1(*request); 156 156 fs_index_t mp_fs_index = (fs_index_t) IPC_GET_ARG2(*request); 157 157 fs_handle_t mr_fs_handle = (fs_handle_t) IPC_GET_ARG3(*request); 158 devmap_handle_t mr_devmap_handle = (devmap_handle_t) IPC_GET_ARG4(*request);158 service_id_t mr_service_id = (service_id_t) IPC_GET_ARG4(*request); 159 159 160 160 async_sess_t *mountee_sess = async_clone_receive(EXCHANGE_PARALLEL); … … 165 165 166 166 fs_node_t *fn; 167 int res = ops->node_get(&fn, mp_ devmap_handle, mp_fs_index);167 int res = ops->node_get(&fn, mp_service_id, mp_fs_index); 168 168 if ((res != EOK) || (!fn)) { 169 169 async_hangup(mountee_sess); … … 195 195 ipc_call_t answer; 196 196 int rc = async_data_write_forward_1_1(exch, VFS_OUT_MOUNTED, 197 mr_ devmap_handle, &answer);197 mr_service_id, &answer); 198 198 async_exchange_end(exch); 199 199 … … 201 201 fn->mp_data.mp_active = true; 202 202 fn->mp_data.fs_handle = mr_fs_handle; 203 fn->mp_data. devmap_handle = mr_devmap_handle;203 fn->mp_data.service_id = mr_service_id; 204 204 fn->mp_data.sess = mountee_sess; 205 205 } … … 214 214 void libfs_unmount(libfs_ops_t *ops, ipc_callid_t rid, ipc_call_t *request) 215 215 { 216 devmap_handle_t mp_devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);216 service_id_t mp_service_id = (service_id_t) IPC_GET_ARG1(*request); 217 217 fs_index_t mp_fs_index = (fs_index_t) IPC_GET_ARG2(*request); 218 218 fs_node_t *fn; 219 219 int res; 220 220 221 res = ops->node_get(&fn, mp_ devmap_handle, mp_fs_index);221 res = ops->node_get(&fn, mp_service_id, mp_fs_index); 222 222 if ((res != EOK) || (!fn)) { 223 223 async_answer_0(rid, combine_rc(res, ENOENT)); … … 238 238 */ 239 239 async_exch_t *exch = async_exchange_begin(fn->mp_data.sess); 240 res = async_req_1_0(exch, VFS_OUT_UNMOUNTED, fn->mp_data. devmap_handle);240 res = async_req_1_0(exch, VFS_OUT_UNMOUNTED, fn->mp_data.service_id); 241 241 async_exchange_end(exch); 242 242 … … 248 248 fn->mp_data.mp_active = false; 249 249 fn->mp_data.fs_handle = 0; 250 fn->mp_data. devmap_handle= 0;250 fn->mp_data.service_id = 0; 251 251 fn->mp_data.sess = NULL; 252 252 … … 278 278 unsigned int last = IPC_GET_ARG2(*request); 279 279 unsigned int next = first; 280 devmap_handle_t devmap_handle= IPC_GET_ARG3(*request);280 service_id_t service_id = IPC_GET_ARG3(*request); 281 281 int lflag = IPC_GET_ARG4(*request); 282 282 fs_index_t index = IPC_GET_ARG5(*request); … … 292 292 fs_node_t *tmp = NULL; 293 293 294 rc = ops->root_get(&cur, devmap_handle);294 rc = ops->root_get(&cur, service_id); 295 295 on_error(rc, goto out_with_answer); 296 296 … … 298 298 async_exch_t *exch = async_exchange_begin(cur->mp_data.sess); 299 299 async_forward_slow(rid, exch, VFS_OUT_LOOKUP, next, last, 300 cur->mp_data. devmap_handle, lflag, index, IPC_FF_ROUTE_FROM_ME);300 cur->mp_data.service_id, lflag, index, IPC_FF_ROUTE_FROM_ME); 301 301 async_exchange_end(exch); 302 302 … … 358 358 async_exch_t *exch = async_exchange_begin(tmp->mp_data.sess); 359 359 async_forward_slow(rid, exch, VFS_OUT_LOOKUP, next, last, 360 tmp->mp_data. devmap_handle, lflag, index,360 tmp->mp_data.service_id, lflag, index, 361 361 IPC_FF_ROUTE_FROM_ME); 362 362 async_exchange_end(exch); … … 387 387 fs_node_t *fn; 388 388 if (lflag & L_CREATE) 389 rc = ops->create(&fn, devmap_handle,389 rc = ops->create(&fn, service_id, 390 390 lflag); 391 391 else 392 rc = ops->node_get(&fn, devmap_handle,392 rc = ops->node_get(&fn, service_id, 393 393 index); 394 394 on_error(rc, goto out_with_answer); … … 405 405 aoff64_t size = ops->size_get(fn); 406 406 async_answer_5(rid, fs_handle, 407 devmap_handle,407 service_id, 408 408 ops->index_get(fn), 409 409 LOWER32(size), … … 473 473 fs_node_t *fn; 474 474 if (lflag & L_CREATE) 475 rc = ops->create(&fn, devmap_handle, lflag);475 rc = ops->create(&fn, service_id, lflag); 476 476 else 477 rc = ops->node_get(&fn, devmap_handle, index);477 rc = ops->node_get(&fn, service_id, index); 478 478 on_error(rc, goto out_with_answer); 479 479 … … 489 489 aoff64_t size = ops->size_get(fn); 490 490 async_answer_5(rid, fs_handle, 491 devmap_handle,491 service_id, 492 492 ops->index_get(fn), 493 493 LOWER32(size), … … 515 515 if (rc == EOK) { 516 516 aoff64_t size = ops->size_get(cur); 517 async_answer_5(rid, fs_handle, devmap_handle,517 async_answer_5(rid, fs_handle, service_id, 518 518 ops->index_get(cur), LOWER32(size), UPPER32(size), 519 519 old_lnkcnt); … … 553 553 if (rc == EOK) { 554 554 aoff64_t size = ops->size_get(cur); 555 async_answer_5(rid, fs_handle, devmap_handle,555 async_answer_5(rid, fs_handle, service_id, 556 556 ops->index_get(cur), LOWER32(size), UPPER32(size), 557 557 ops->lnkcnt_get(cur)); … … 577 577 ipc_call_t *request) 578 578 { 579 devmap_handle_t devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);579 service_id_t service_id = (service_id_t) IPC_GET_ARG1(*request); 580 580 fs_index_t index = (fs_index_t) IPC_GET_ARG2(*request); 581 581 582 582 fs_node_t *fn; 583 int rc = ops->node_get(&fn, devmap_handle, index);583 int rc = ops->node_get(&fn, service_id, index); 584 584 on_error(rc, answer_and_return(rid, rc)); 585 585 … … 598 598 599 599 stat.fs_handle = fs_handle; 600 stat. devmap_handle = devmap_handle;600 stat.service_id = service_id; 601 601 stat.index = index; 602 602 stat.lnkcnt = ops->lnkcnt_get(fn); … … 604 604 stat.is_directory = ops->is_directory(fn); 605 605 stat.size = ops->size_get(fn); 606 stat. device = ops->device_get(fn);606 stat.service = ops->device_get(fn); 607 607 608 608 ops->node_put(fn); … … 623 623 ipc_call_t *request) 624 624 { 625 devmap_handle_t devmap_handle= IPC_GET_ARG1(*request);625 service_id_t service_id = IPC_GET_ARG1(*request); 626 626 fs_index_t index = IPC_GET_ARG2(*request); 627 627 628 628 fs_node_t *fn; 629 int rc = ops->node_get(&fn, devmap_handle, index);629 int rc = ops->node_get(&fn, service_id, index); 630 630 on_error(rc, answer_and_return(rid, rc)); 631 631 -
uspace/lib/fs/libfs.h
ref09a7a r15f3c3f 40 40 #include <stdint.h> 41 41 #include <async.h> 42 #include < devmap.h>42 #include <loc.h> 43 43 44 44 typedef struct { … … 46 46 async_sess_t *sess; 47 47 fs_handle_t fs_handle; 48 devmap_handle_t devmap_handle;48 service_id_t service_id; 49 49 } mp_data_t; 50 50 … … 60 60 * argument holds the output argument. 61 61 */ 62 int (* root_get)(fs_node_t **, devmap_handle_t);62 int (* root_get)(fs_node_t **, service_id_t); 63 63 int (* match)(fs_node_t **, fs_node_t *, const char *); 64 int (* node_get)(fs_node_t **, devmap_handle_t, fs_index_t);64 int (* node_get)(fs_node_t **, service_id_t, fs_index_t); 65 65 int (* node_open)(fs_node_t *); 66 66 int (* node_put)(fs_node_t *); 67 int (* create)(fs_node_t **, devmap_handle_t, int);67 int (* create)(fs_node_t **, service_id_t, int); 68 68 int (* destroy)(fs_node_t *); 69 69 int (* link)(fs_node_t *, fs_node_t *, const char *); … … 80 80 bool (* is_directory)(fs_node_t *); 81 81 bool (* is_file)(fs_node_t *); 82 devmap_handle_t (* device_get)(fs_node_t *);82 service_id_t (* device_get)(fs_node_t *); 83 83 } libfs_ops_t; 84 84
Note:
See TracChangeset
for help on using the changeset viewer.
