Changeset 16dc887 in mainline for uspace/srv
- Timestamp:
- 2011-08-16T14:00:32Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 278ac72, b112055
- Parents:
- 3751a08 (diff), cc574511 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/srv
- Files:
-
- 4 added
- 1 deleted
- 45 edited
- 6 moved
-
bd/ata_bd/ata_bd.c (modified) (5 diffs)
-
bd/ata_bd/ata_bd.h (modified) (1 diff)
-
bd/file_bd/file_bd.c (modified) (4 diffs)
-
bd/gxe_bd/gxe_bd.c (modified) (6 diffs)
-
bd/part/guid_part/guid_part.c (modified) (16 diffs)
-
bd/part/mbr_part/mbr_part.c (modified) (16 diffs)
-
bd/rd/rd.c (modified) (3 diffs)
-
devman/devman.c (modified) (10 diffs)
-
devman/devman.h (modified) (8 diffs)
-
devman/main.c (modified) (10 diffs)
-
devmap/devmap.c (deleted)
-
fs/ext2fs/ext2fs_ops.c (modified) (26 diffs)
-
fs/fat/fat.h (modified) (3 diffs)
-
fs/fat/fat_fat.c (modified) (39 diffs)
-
fs/fat/fat_fat.h (modified) (2 diffs)
-
fs/fat/fat_idx.c (modified) (33 diffs)
-
fs/fat/fat_ops.c (modified) (47 diffs)
-
fs/locfs/Makefile (moved) (moved from uspace/srv/fs/devfs/Makefile ) (1 diff)
-
fs/locfs/locfs.c (moved) (moved from uspace/srv/fs/devfs/devfs.c ) (4 diffs)
-
fs/locfs/locfs.h (moved) (moved from uspace/srv/fs/devfs/devfs.h ) (1 diff)
-
fs/locfs/locfs_ops.c (moved) (moved from uspace/srv/fs/devfs/devfs_ops.c ) (39 diffs)
-
fs/locfs/locfs_ops.h (moved) (moved from uspace/srv/fs/devfs/devfs_ops.h ) (1 diff)
-
fs/tmpfs/tmpfs.h (modified) (2 diffs)
-
fs/tmpfs/tmpfs_dump.c (modified) (13 diffs)
-
fs/tmpfs/tmpfs_ops.c (modified) (24 diffs)
-
hid/console/console.c (modified) (6 diffs)
-
hid/input/ctl/kbdev.c (modified) (7 diffs)
-
hid/input/generic/input.c (modified) (11 diffs)
-
hid/input/include/kbd.h (modified) (2 diffs)
-
hid/input/include/mouse.h (modified) (2 diffs)
-
hid/input/port/adb.c (modified) (3 diffs)
-
hid/input/port/adb_mouse.c (modified) (2 diffs)
-
hid/input/port/chardev.c (modified) (4 diffs)
-
hid/input/port/chardev_mouse.c (modified) (4 diffs)
-
hid/input/proto/mousedev.c (modified) (7 diffs)
-
hid/s3c24xx_ts/s3c24xx_ts.c (modified) (3 diffs)
-
hid/s3c24xx_ts/s3c24xx_ts.h (modified) (1 diff)
-
hw/bus/cuda_adb/cuda_adb.c (modified) (5 diffs)
-
hw/bus/cuda_adb/cuda_adb.h (modified) (2 diffs)
-
hw/char/i8042/i8042.c (modified) (5 diffs)
-
hw/char/i8042/i8042.h (modified) (1 diff)
-
hw/char/s3c24xx_uart/s3c24xx_uart.c (modified) (3 diffs)
-
hw/char/s3c24xx_uart/s3c24xx_uart.h (modified) (1 diff)
-
hw/irc/i8259/i8259.c (modified) (1 diff)
-
hw/irc/obio/obio.c (modified) (1 diff)
-
loc/Makefile (moved) (moved from uspace/srv/devmap/Makefile ) (1 diff)
-
loc/category.c (added)
-
loc/category.h (added)
-
loc/loc.c (added)
-
loc/loc.h (added)
-
vfs/vfs.h (modified) (4 diffs)
-
vfs/vfs_file.c (modified) (1 diff)
-
vfs/vfs_lookup.c (modified) (3 diffs)
-
vfs/vfs_node.c (modified) (8 diffs)
-
vfs/vfs_ops.c (modified) (26 diffs)
-
vfs/vfs_register.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/ata_bd/ata_bd.c
r3751a08 r16dc887 57 57 #include <stdint.h> 58 58 #include <str.h> 59 #include < devmap.h>59 #include <loc.h> 60 60 #include <sys/types.h> 61 61 #include <inttypes.h> … … 176 176 177 177 snprintf(name, 16, "%s/ata%udisk%d", NAMESPACE, ctl_num, i); 178 rc = devmap_device_register(name, &disk[i].devmap_handle);178 rc = loc_service_register(name, &disk[i].service_id); 179 179 if (rc != EOK) { 180 180 printf(NAME ": Unable to register device %s.\n", name); … … 244 244 int rc; 245 245 246 rc = devmap_driver_register(NAME, ata_bd_connection);246 rc = loc_server_register(NAME, ata_bd_connection); 247 247 if (rc < 0) { 248 248 printf(NAME ": Unable to register driver.\n"); … … 277 277 ipc_call_t call; 278 278 sysarg_t method; 279 devmap_handle_t dh;279 service_id_t dsid; 280 280 size_t comm_size; /**< Size of the communication area. */ 281 281 unsigned int flags; … … 285 285 int disk_id, i; 286 286 287 /* Get the device handle. */288 d h= IPC_GET_ARG1(*icall);287 /* Get the device service ID. */ 288 dsid = IPC_GET_ARG1(*icall); 289 289 290 290 /* Determine which disk device is the client connecting to. */ 291 291 disk_id = -1; 292 292 for (i = 0; i < MAX_DISKS; i++) 293 if (disk[i]. devmap_handle == dh)293 if (disk[i].service_id == dsid) 294 294 disk_id = i; 295 295 -
uspace/srv/bd/ata_bd/ata_bd.h
r3751a08 r16dc887 116 116 117 117 fibril_mutex_t lock; 118 devmap_handle_t devmap_handle;118 service_id_t service_id; 119 119 } disk_t; 120 120 -
uspace/srv/bd/file_bd/file_bd.c
r3751a08 r16dc887 45 45 #include <as.h> 46 46 #include <fibril_synch.h> 47 #include < devmap.h>47 #include <loc.h> 48 48 #include <sys/types.h> 49 49 #include <sys/typefmt.h> … … 61 61 static FILE *img; 62 62 63 static devmap_handle_t devmap_handle;63 static service_id_t service_id; 64 64 static fibril_mutex_t dev_lock; 65 65 … … 117 117 return -1; 118 118 119 rc = devmap_device_register(device_name, &devmap_handle);119 rc = loc_service_register(device_name, &service_id); 120 120 if (rc != EOK) { 121 121 printf(NAME ": Unable to register device '%s'.\n", … … 142 142 long img_size; 143 143 144 rc = devmap_driver_register(NAME, file_bd_connection);144 rc = loc_server_register(NAME, file_bd_connection); 145 145 if (rc < 0) { 146 146 printf(NAME ": Unable to register driver.\n"); -
uspace/srv/bd/gxe_bd/gxe_bd.c
r3751a08 r16dc887 43 43 #include <as.h> 44 44 #include <fibril_synch.h> 45 #include < devmap.h>45 #include <loc.h> 46 46 #include <sys/types.h> 47 47 #include <errno.h> … … 92 92 static gxe_bd_t *dev; 93 93 94 static devmap_handle_t devmap_handle[MAX_DISKS];94 static service_id_t service_id[MAX_DISKS]; 95 95 96 96 static fibril_mutex_t dev_lock[MAX_DISKS]; … … 126 126 char name[16]; 127 127 128 rc = devmap_driver_register(NAME, gxe_bd_connection);128 rc = loc_server_register(NAME, gxe_bd_connection); 129 129 if (rc < 0) { 130 130 printf(NAME ": Unable to register driver.\n"); … … 142 142 for (i = 0; i < MAX_DISKS; i++) { 143 143 snprintf(name, 16, "%s/disk%d", NAMESPACE, i); 144 rc = devmap_device_register(name, &devmap_handle[i]);144 rc = loc_service_register(name, &service_id[i]); 145 145 if (rc != EOK) { 146 146 printf(NAME ": Unable to register device %s.\n", name); … … 159 159 ipc_call_t call; 160 160 sysarg_t method; 161 devmap_handle_t dh;161 service_id_t dsid; 162 162 unsigned int flags; 163 163 int retval; … … 167 167 168 168 /* Get the device handle. */ 169 d h= IPC_GET_ARG1(*icall);169 dsid = IPC_GET_ARG1(*icall); 170 170 171 171 /* Determine which disk device is the client connecting to. */ 172 172 disk_id = -1; 173 173 for (i = 0; i < MAX_DISKS; i++) 174 if ( devmap_handle[i] == dh)174 if (service_id[i] == dsid) 175 175 disk_id = i; 176 176 -
uspace/srv/bd/part/guid_part/guid_part.c
r3751a08 r16dc887 51 51 #include <as.h> 52 52 #include <fibril_synch.h> 53 #include < devmap.h>53 #include <loc.h> 54 54 #include <sys/types.h> 55 55 #include <sys/typefmt.h> 56 56 #include <inttypes.h> 57 57 #include <libblock.h> 58 #include < devmap.h>58 #include <loc.h> 59 59 #include <errno.h> 60 60 #include <bool.h> … … 81 81 /** Number of blocks */ 82 82 aoff64_t length; 83 /** Device representing the partition (outbound device) */84 devmap_handle_t dev;83 /** Service representing the partition (outbound device) */ 84 service_id_t dsid; 85 85 /** Points to next partition structure. */ 86 86 struct part *next; … … 90 90 91 91 /** Partitioned device (inbound device) */ 92 static devmap_handle_t indev_handle;92 static service_id_t indev_sid; 93 93 94 94 /** List of partitions. This structure is an empty head. */ … … 129 129 int i; 130 130 char *name; 131 devmap_handle_t dev;131 service_id_t dsid; 132 132 uint64_t size_mb; 133 133 part_t *part; 134 134 135 rc = devmap_device_get_handle(dev_name, &indev_handle, 0);135 rc = loc_service_get_id(dev_name, &indev_sid, 0); 136 136 if (rc != EOK) { 137 137 printf(NAME ": could not resolve device `%s'.\n", dev_name); … … 139 139 } 140 140 141 rc = block_init(EXCHANGE_SERIALIZE, indev_ handle, 2048);141 rc = block_init(EXCHANGE_SERIALIZE, indev_sid, 2048); 142 142 if (rc != EOK) { 143 143 printf(NAME ": could not init libblock.\n"); … … 147 147 /* Determine and verify block size. */ 148 148 149 rc = block_get_bsize(indev_ handle, &block_size);149 rc = block_get_bsize(indev_sid, &block_size); 150 150 if (rc != EOK) { 151 151 printf(NAME ": error getting block size.\n"); … … 163 163 return rc; 164 164 165 /* Register the driver with device mapper. */166 rc = devmap_driver_register(NAME, gpt_connection);165 /* Register server with location service. */ 166 rc = loc_server_register(NAME, gpt_connection); 167 167 if (rc != EOK) { 168 printf(NAME ": Unable to register driver.\n");168 printf(NAME ": Unable to register server.\n"); 169 169 return rc; 170 170 } … … 188 188 return ENOMEM; 189 189 190 rc = devmap_device_register(name, &dev);190 rc = loc_service_register(name, &dsid); 191 191 if (rc != EOK) { 192 printf(NAME ": Unable to register device %s.\n", name);192 printf(NAME ": Unable to register service %s.\n", name); 193 193 return rc; 194 194 } … … 199 199 "%" PRIuOFF64 " MB.\n", name, part->length, size_mb); 200 200 201 part->d ev = dev;201 part->dsid = dsid; 202 202 free(name); 203 203 … … 228 228 } 229 229 230 rc = block_read_direct(indev_ handle, GPT_HDR_BA, 1, gpt_hdr);230 rc = block_read_direct(indev_sid, GPT_HDR_BA, 1, gpt_hdr); 231 231 if (rc != EOK) { 232 232 printf(NAME ": Failed reading GPT header block.\n"); … … 256 256 } 257 257 258 rc = block_read_direct(indev_ handle, ba, bcnt, etable);258 rc = block_read_direct(indev_sid, ba, bcnt, etable); 259 259 if (rc != EOK) { 260 260 printf(NAME ": Failed reading GPT entries.\n"); … … 303 303 } 304 304 305 part->d ev= 0;305 part->dsid = 0; 306 306 part->next = NULL; 307 307 } … … 314 314 ipc_call_t call; 315 315 sysarg_t method; 316 devmap_handle_t dh;316 service_id_t dh; 317 317 unsigned int flags; 318 318 int retval; … … 330 330 */ 331 331 part = plist_head.next; 332 while (part != NULL && part->d ev!= dh)332 while (part != NULL && part->dsid != dh) 333 333 part = part->next; 334 334 … … 410 410 return ELIMIT; 411 411 412 return block_read_direct(indev_ handle, gba, cnt, buf);412 return block_read_direct(indev_sid, gba, cnt, buf); 413 413 } 414 414 … … 421 421 return ELIMIT; 422 422 423 return block_write_direct(indev_ handle, gba, cnt, buf);423 return block_write_direct(indev_sid, gba, cnt, buf); 424 424 } 425 425 -
uspace/srv/bd/part/mbr_part/mbr_part.c
r3751a08 r16dc887 61 61 #include <as.h> 62 62 #include <fibril_synch.h> 63 #include < devmap.h>63 #include <loc.h> 64 64 #include <sys/types.h> 65 65 #include <sys/typefmt.h> 66 66 #include <inttypes.h> 67 67 #include <libblock.h> 68 #include < devmap.h>68 #include <loc.h> 69 69 #include <errno.h> 70 70 #include <bool.h> … … 100 100 aoff64_t length; 101 101 /** Device representing the partition (outbound device) */ 102 devmap_handle_t dev;102 service_id_t dsid; 103 103 /** Points to next partition structure. */ 104 104 struct part *next; … … 141 141 142 142 /** Partitioned device (inbound device) */ 143 static devmap_handle_t indev_handle;143 static service_id_t indef_sid; 144 144 145 145 /** List of partitions. This structure is an empty head. */ … … 180 180 int i; 181 181 char *name; 182 devmap_handle_t dev;182 service_id_t dsid; 183 183 uint64_t size_mb; 184 184 part_t *part; 185 185 186 rc = devmap_device_get_handle(dev_name, &indev_handle, 0);186 rc = loc_service_get_id(dev_name, &indef_sid, 0); 187 187 if (rc != EOK) { 188 188 printf(NAME ": could not resolve device `%s'.\n", dev_name); … … 190 190 } 191 191 192 rc = block_init(EXCHANGE_SERIALIZE, inde v_handle, 2048);192 rc = block_init(EXCHANGE_SERIALIZE, indef_sid, 2048); 193 193 if (rc != EOK) { 194 194 printf(NAME ": could not init libblock.\n"); … … 198 198 /* Determine and verify block size. */ 199 199 200 rc = block_get_bsize(inde v_handle, &block_size);200 rc = block_get_bsize(indef_sid, &block_size); 201 201 if (rc != EOK) { 202 202 printf(NAME ": error getting block size.\n"); … … 214 214 return rc; 215 215 216 /* Register the driver with device mapper. */217 rc = devmap_driver_register(NAME, mbr_connection);216 /* Register server with location service. */ 217 rc = loc_server_register(NAME, mbr_connection); 218 218 if (rc != EOK) { 219 printf(NAME ": Unable to register driver.\n");219 printf(NAME ": Unable to register server.\n"); 220 220 return rc; 221 221 } … … 239 239 return ENOMEM; 240 240 241 rc = devmap_device_register(name, &dev);241 rc = loc_service_register(name, &dsid); 242 242 if (rc != EOK) { 243 printf(NAME ": Unable to register device %s.\n", name);243 printf(NAME ": Unable to register service %s.\n", name); 244 244 return rc; 245 245 } … … 250 250 "%" PRIu64 " MB.\n", name, part->length, size_mb); 251 251 252 part->d ev = dev;252 part->dsid = dsid; 253 253 free(name); 254 254 … … 281 281 */ 282 282 283 rc = block_read_direct(inde v_handle, 0, 1, brb);283 rc = block_read_direct(indef_sid, 0, 1, brb); 284 284 if (rc != EOK) { 285 285 printf(NAME ": Failed reading MBR block.\n"); … … 332 332 */ 333 333 ba = cp.start_addr; 334 rc = block_read_direct(inde v_handle, ba, 1, brb);334 rc = block_read_direct(indef_sid, ba, 1, brb); 335 335 if (rc != EOK) { 336 336 printf(NAME ": Failed reading EBR block at %" … … 381 381 part->present = (pte->ptype != PT_UNUSED) ? true : false; 382 382 383 part->d ev= 0;383 part->dsid = 0; 384 384 part->next = NULL; 385 385 } … … 392 392 ipc_call_t call; 393 393 sysarg_t method; 394 devmap_handle_t dh;394 service_id_t dh; 395 395 unsigned int flags; 396 396 int retval; … … 408 408 */ 409 409 part = plist_head.next; 410 while (part != NULL && part->d ev!= dh)410 while (part != NULL && part->dsid != dh) 411 411 part = part->next; 412 412 … … 488 488 return ELIMIT; 489 489 490 return block_read_direct(inde v_handle, gba, cnt, buf);490 return block_read_direct(indef_sid, gba, cnt, buf); 491 491 } 492 492 … … 499 499 return ELIMIT; 500 500 501 return block_write_direct(inde v_handle, gba, cnt, buf);501 return block_write_direct(indef_sid, gba, cnt, buf); 502 502 } 503 503 -
uspace/srv/bd/rd/rd.c
r3751a08 r16dc887 52 52 #include <fibril_synch.h> 53 53 #include <stdio.h> 54 #include < devmap.h>54 #include <loc.h> 55 55 #include <ipc/bd.h> 56 56 #include <macros.h> … … 235 235 (void *) rd_ph_addr, rd_size); 236 236 237 int rc = devmap_driver_register(NAME, rd_connection);237 int rc = loc_server_register(NAME, rd_connection); 238 238 if (rc < 0) { 239 239 printf("%s: Unable to register driver (%d)\n", NAME, rc); … … 241 241 } 242 242 243 devmap_handle_t devmap_handle;244 if ( devmap_device_register("bd/initrd", &devmap_handle) != EOK) {245 printf("%s: Unable to register device \n", NAME);243 service_id_t service_id; 244 if (loc_service_register("bd/initrd", &service_id) != EOK) { 245 printf("%s: Unable to register device service\n", NAME); 246 246 return false; 247 247 } -
uspace/srv/devman/devman.c
r3751a08 r16dc887 37 37 #include <ipc/driver.h> 38 38 #include <ipc/devman.h> 39 #include < devmap.h>39 #include <loc.h> 40 40 #include <str_error.h> 41 41 #include <stdio.h> … … 66 66 } 67 67 68 static int devmap_functions_compare(unsigned long key[], hash_count_t keys,68 static int loc_functions_compare(unsigned long key[], hash_count_t keys, 69 69 link_t *item) 70 70 { 71 fun_node_t *fun = hash_table_get_instance(item, fun_node_t, devmap_fun);72 return (fun-> devmap_handle == (devmap_handle_t) key[0]);73 } 74 75 static int devmap_devices_class_compare(unsigned long key[], hash_count_t keys,71 fun_node_t *fun = hash_table_get_instance(item, fun_node_t, loc_fun); 72 return (fun->service_id == (service_id_t) key[0]); 73 } 74 75 static int loc_devices_class_compare(unsigned long key[], hash_count_t keys, 76 76 link_t *item) 77 77 { 78 78 dev_class_info_t *class_info 79 = hash_table_get_instance(item, dev_class_info_t, devmap_link);79 = hash_table_get_instance(item, dev_class_info_t, loc_link); 80 80 assert(class_info != NULL); 81 81 82 return (class_info-> devmap_handle == (devmap_handle_t) key[0]);82 return (class_info->service_id == (service_id_t) key[0]); 83 83 } 84 84 … … 99 99 }; 100 100 101 static hash_table_operations_t devmap_devices_ops = {101 static hash_table_operations_t loc_devices_ops = { 102 102 .hash = devices_hash, 103 .compare = devmap_functions_compare,103 .compare = loc_functions_compare, 104 104 .remove_callback = devices_remove_callback 105 105 }; 106 106 107 static hash_table_operations_t devmap_devices_class_ops = {107 static hash_table_operations_t loc_devices_class_ops = { 108 108 .hash = devices_hash, 109 .compare = devmap_devices_class_compare,109 .compare = loc_devices_class_compare, 110 110 .remove_callback = devices_remove_callback 111 111 }; … … 701 701 } 702 702 703 /** Create devmappath and name for the function. */704 void devmap_register_tree_function(fun_node_t *fun, dev_tree_t *tree)705 { 706 char * devmap_pathname = NULL;707 char * devmap_name = NULL;708 709 asprintf(& devmap_name, "%s", fun->pathname);710 if ( devmap_name == NULL)703 /** Create loc path and name for the function. */ 704 void loc_register_tree_function(fun_node_t *fun, dev_tree_t *tree) 705 { 706 char *loc_pathname = NULL; 707 char *loc_name = NULL; 708 709 asprintf(&loc_name, "%s", fun->pathname); 710 if (loc_name == NULL) 711 711 return; 712 712 713 replace_char( devmap_name, '/', DEVMAP_SEPARATOR);714 715 asprintf(& devmap_pathname, "%s/%s", DEVMAP_DEVICE_NAMESPACE,716 devmap_name);717 if ( devmap_pathname == NULL) {718 free( devmap_name);713 replace_char(loc_name, '/', LOC_SEPARATOR); 714 715 asprintf(&loc_pathname, "%s/%s", LOC_DEVICE_NAMESPACE, 716 loc_name); 717 if (loc_pathname == NULL) { 718 free(loc_name); 719 719 return; 720 720 } 721 721 722 devmap_device_register_with_iface(devmap_pathname,723 &fun-> devmap_handle, DEVMAN_CONNECT_FROM_DEVMAP);724 725 tree_add_ devmap_function(tree, fun);726 727 free( devmap_name);728 free( devmap_pathname);722 loc_service_register_with_iface(loc_pathname, 723 &fun->service_id, DEVMAN_CONNECT_FROM_LOC); 724 725 tree_add_loc_function(tree, fun); 726 727 free(loc_name); 728 free(loc_pathname); 729 729 } 730 730 … … 856 856 hash_table_create(&tree->devman_functions, DEVICE_BUCKETS, 1, 857 857 &devman_functions_ops); 858 hash_table_create(&tree-> devmap_functions, DEVICE_BUCKETS, 1,859 & devmap_devices_ops);858 hash_table_create(&tree->loc_functions, DEVICE_BUCKETS, 1, 859 &loc_devices_ops); 860 860 861 861 fibril_rwlock_initialize(&tree->rwlock); … … 952 952 list_initialize(&res->classes); 953 953 link_initialize(&res->devman_fun); 954 link_initialize(&res-> devmap_fun);954 link_initialize(&res->loc_fun); 955 955 } 956 956 … … 1268 1268 memset(info, 0, sizeof(dev_class_info_t)); 1269 1269 link_initialize(&info->dev_classes); 1270 link_initialize(&info-> devmap_link);1270 link_initialize(&info->loc_link); 1271 1271 link_initialize(&info->link); 1272 1272 } … … 1414 1414 list_initialize(&class_list->classes); 1415 1415 fibril_rwlock_initialize(&class_list->rwlock); 1416 hash_table_create(&class_list-> devmap_functions, DEVICE_BUCKETS, 1,1417 & devmap_devices_class_ops);1418 } 1419 1420 1421 /* Devmapdevices */1422 1423 fun_node_t *find_ devmap_tree_function(dev_tree_t *tree, devmap_handle_t devmap_handle)1416 hash_table_create(&class_list->loc_functions, DEVICE_BUCKETS, 1, 1417 &loc_devices_class_ops); 1418 } 1419 1420 1421 /* loc devices */ 1422 1423 fun_node_t *find_loc_tree_function(dev_tree_t *tree, service_id_t service_id) 1424 1424 { 1425 1425 fun_node_t *fun = NULL; 1426 1426 link_t *link; 1427 unsigned long key = (unsigned long) devmap_handle;1427 unsigned long key = (unsigned long) service_id; 1428 1428 1429 1429 fibril_rwlock_read_lock(&tree->rwlock); 1430 link = hash_table_find(&tree-> devmap_functions, &key);1430 link = hash_table_find(&tree->loc_functions, &key); 1431 1431 if (link != NULL) 1432 fun = hash_table_get_instance(link, fun_node_t, devmap_fun);1432 fun = hash_table_get_instance(link, fun_node_t, loc_fun); 1433 1433 fibril_rwlock_read_unlock(&tree->rwlock); 1434 1434 … … 1436 1436 } 1437 1437 1438 fun_node_t *find_ devmap_class_function(class_list_t *classes,1439 devmap_handle_t devmap_handle)1438 fun_node_t *find_loc_class_function(class_list_t *classes, 1439 service_id_t service_id) 1440 1440 { 1441 1441 fun_node_t *fun = NULL; 1442 1442 dev_class_info_t *cli; 1443 1443 link_t *link; 1444 unsigned long key = (unsigned long) devmap_handle;1444 unsigned long key = (unsigned long)service_id; 1445 1445 1446 1446 fibril_rwlock_read_lock(&classes->rwlock); 1447 link = hash_table_find(&classes-> devmap_functions, &key);1447 link = hash_table_find(&classes->loc_functions, &key); 1448 1448 if (link != NULL) { 1449 1449 cli = hash_table_get_instance(link, dev_class_info_t, 1450 devmap_link);1450 loc_link); 1451 1451 fun = cli->fun; 1452 1452 } … … 1456 1456 } 1457 1457 1458 void class_add_ devmap_function(class_list_t *class_list, dev_class_info_t *cli)1459 { 1460 unsigned long key = (unsigned long) cli-> devmap_handle;1458 void class_add_loc_function(class_list_t *class_list, dev_class_info_t *cli) 1459 { 1460 unsigned long key = (unsigned long) cli->service_id; 1461 1461 1462 1462 fibril_rwlock_write_lock(&class_list->rwlock); 1463 hash_table_insert(&class_list-> devmap_functions, &key, &cli->devmap_link);1463 hash_table_insert(&class_list->loc_functions, &key, &cli->loc_link); 1464 1464 fibril_rwlock_write_unlock(&class_list->rwlock); 1465 1465 1466 assert(find_ devmap_class_function(class_list, cli->devmap_handle) != NULL);1467 } 1468 1469 void tree_add_ devmap_function(dev_tree_t *tree, fun_node_t *fun)1470 { 1471 unsigned long key = (unsigned long) fun-> devmap_handle;1466 assert(find_loc_class_function(class_list, cli->service_id) != NULL); 1467 } 1468 1469 void tree_add_loc_function(dev_tree_t *tree, fun_node_t *fun) 1470 { 1471 unsigned long key = (unsigned long) fun->service_id; 1472 1472 fibril_rwlock_write_lock(&tree->rwlock); 1473 hash_table_insert(&tree-> devmap_functions, &key, &fun->devmap_fun);1473 hash_table_insert(&tree->loc_functions, &key, &fun->loc_fun); 1474 1474 fibril_rwlock_write_unlock(&tree->rwlock); 1475 1475 } -
uspace/srv/devman/devman.h
r3751a08 r16dc887 41 41 #include <adt/hash_table.h> 42 42 #include <ipc/devman.h> 43 #include <ipc/ devmap.h>43 #include <ipc/loc.h> 44 44 #include <fibril_synch.h> 45 45 #include <atomic.h> … … 53 53 #define DEVICE_BUCKETS 256 54 54 55 #define DEVMAP_CLASS_NAMESPACE "class"56 #define DEVMAP_DEVICE_NAMESPACE "devices"57 #define DEVMAP_SEPARATOR '\\'55 #define LOC_CLASS_NAMESPACE "class" 56 #define LOC_DEVICE_NAMESPACE "devices" 57 #define LOC_SEPARATOR '\\' 58 58 59 59 struct dev_node; … … 172 172 /** List of device classes to which this device function belongs. */ 173 173 list_t classes; 174 /** Devmap handle if the device function is registered by devmap. */175 devmap_handle_t devmap_handle;174 /** Service ID if the device function is registered with loc. */ 175 service_id_t service_id; 176 176 177 177 /** … … 181 181 182 182 /** 183 * Used by the hash table of functions indexed by devmap device handles.184 */ 185 link_t devmap_fun;183 * Used by the hash table of functions indexed by service IDs. 184 */ 185 link_t loc_fun; 186 186 }; 187 187 … … 208 208 209 209 /** 210 * Hash table of devices registered by devmapper, indexed by devmap211 * handles.212 */ 213 hash_table_t devmap_functions;210 * Hash table of services registered with location service, indexed by 211 * service IDs. 212 */ 213 hash_table_t loc_functions; 214 214 } dev_tree_t; 215 215 … … 267 267 /** The name of the device function within the class. */ 268 268 char *dev_name; 269 /** The handle of the device by device mapperin the class namespace. */270 devmap_handle_t devmap_handle;271 272 /** 273 * Link in the hash table of devices registered by the devmapperusing269 /** Service ID in the class namespace. */ 270 service_id_t service_id; 271 272 /** 273 * Link to hash table of services registered with location service using 274 274 * their class names. 275 275 */ 276 link_t devmap_link;276 link_t loc_link; 277 277 } dev_class_info_t; 278 278 … … 283 283 284 284 /** 285 * Hash table of devices registered by devmapper using their class name,286 * indexed by devmap handles.287 */ 288 hash_table_t devmap_functions;285 * Hash table of services registered with location service using their 286 * class name, indexed by service IDs. 287 */ 288 hash_table_t loc_functions; 289 289 290 290 /** Fibril mutex for list of classes. */ … … 364 364 extern void add_dev_class_no_lock(class_list_t *, dev_class_t *); 365 365 366 /* Devmap devices */367 368 extern void devmap_register_tree_function(fun_node_t *, dev_tree_t *);369 370 extern fun_node_t *find_ devmap_tree_function(dev_tree_t *, devmap_handle_t);371 extern fun_node_t *find_ devmap_class_function(class_list_t *, devmap_handle_t);372 373 extern void class_add_ devmap_function(class_list_t *, dev_class_info_t *);374 extern void tree_add_ devmap_function(dev_tree_t *, fun_node_t *);366 /* Loc services */ 367 368 extern void loc_register_tree_function(fun_node_t *, dev_tree_t *); 369 370 extern fun_node_t *find_loc_tree_function(dev_tree_t *, service_id_t); 371 extern fun_node_t *find_loc_class_function(class_list_t *, service_id_t); 372 373 extern void class_add_loc_function(class_list_t *, dev_class_info_t *); 374 extern void tree_add_loc_function(dev_tree_t *, fun_node_t *); 375 375 376 376 #endif -
uspace/srv/devman/main.c
r3751a08 r16dc887 56 56 #include <ipc/driver.h> 57 57 #include <thread.h> 58 #include < devmap.h>58 #include <loc.h> 59 59 60 60 #include "devman.h" … … 326 326 } 327 327 } else { 328 devmap_register_tree_function(fun, tree);328 loc_register_tree_function(fun, tree); 329 329 } 330 330 … … 333 333 } 334 334 335 static void devmap_register_class_dev(dev_class_info_t *cli)336 { 337 /* Create devmap path and name for the device. */338 char * devmap_pathname = NULL;339 340 asprintf(& devmap_pathname, "%s/%s%c%s", DEVMAP_CLASS_NAMESPACE,341 cli->dev_class->name, DEVMAP_SEPARATOR, cli->dev_name);342 if ( devmap_pathname == NULL)335 static void loc_register_class_dev(dev_class_info_t *cli) 336 { 337 /* Create loc path and name for the service. */ 338 char *loc_pathname = NULL; 339 340 asprintf(&loc_pathname, "%s/%s%c%s", LOC_CLASS_NAMESPACE, 341 cli->dev_class->name, LOC_SEPARATOR, cli->dev_name); 342 if (loc_pathname == NULL) 343 343 return; 344 344 345 345 /* 346 * Register the device by the device mapper and remember its devmap347 * handle.346 * Register the device with location service and remember its 347 * service ID. 348 348 */ 349 devmap_device_register_with_iface(devmap_pathname,350 &cli-> devmap_handle, DEVMAN_CONNECT_FROM_DEVMAP);349 loc_service_register_with_iface(loc_pathname, 350 &cli->service_id, DEVMAN_CONNECT_FROM_LOC); 351 351 352 352 /* 353 * Add device to the hash map of class devices registered by device354 * mapper.353 * Add device to the hash map of class devices registered with 354 * location service. 355 355 */ 356 class_add_ devmap_function(&class_list, cli);357 358 free( devmap_pathname);356 class_add_loc_function(&class_list, cli); 357 358 free(loc_pathname); 359 359 } 360 360 … … 362 362 { 363 363 devman_handle_t handle = IPC_GET_ARG1(*call); 364 category_id_t cat_id; 365 int rc; 364 366 365 367 /* Get class name. */ 366 368 char *class_name; 367 intrc = async_data_write_accept((void **) &class_name, true,369 rc = async_data_write_accept((void **) &class_name, true, 368 370 0, 0, 0, 0); 369 371 if (rc != EOK) { … … 381 383 dev_class_info_t *class_info = add_function_to_class(fun, cl, NULL); 382 384 383 /* Register the device's class alias by devmapper. */ 384 devmap_register_class_dev(class_info); 385 /* Register the device's class alias with location service. */ 386 loc_register_class_dev(class_info); 387 388 rc = loc_category_get_id(class_name, &cat_id, IPC_FLAG_BLOCKING); 389 if (rc == EOK) { 390 loc_service_add_to_cat(fun->service_id, cat_id); 391 } else { 392 log_msg(LVL_ERROR, "Failed adding function `%s' to category " 393 "`%s'.", fun->pathname, class_name); 394 } 385 395 386 396 log_msg(LVL_NOTE, "Function `%s' added to class `%s' as `%s'.", … … 659 669 } 660 670 661 /** Function for handling connections from a client forwarded by the device662 * mapperto the device manager. */663 static void devman_connection_ devmapper(ipc_callid_t iid, ipc_call_t *icall)664 { 665 devmap_handle_t devmap_handle= IPC_GET_ARG2(*icall);671 /** Function for handling connections from a client forwarded by the location 672 * service to the device manager. */ 673 static void devman_connection_loc(ipc_callid_t iid, ipc_call_t *icall) 674 { 675 service_id_t service_id = IPC_GET_ARG2(*icall); 666 676 fun_node_t *fun; 667 677 dev_node_t *dev; 668 678 669 fun = find_ devmap_tree_function(&device_tree, devmap_handle);679 fun = find_loc_tree_function(&device_tree, service_id); 670 680 if (fun == NULL) 671 fun = find_ devmap_class_function(&class_list, devmap_handle);681 fun = find_loc_class_function(&class_list, service_id); 672 682 673 683 if (fun == NULL || fun->dev->drv == NULL) { … … 689 699 690 700 log_msg(LVL_DEBUG, 691 "Forwarding devmapperrequest for `%s' function to driver `%s'.",701 "Forwarding loc service request for `%s' function to driver `%s'.", 692 702 fun->pathname, dev->drv->name); 693 703 } … … 708 718 devman_forward(iid, icall, false); 709 719 break; 710 case DEVMAN_CONNECT_FROM_ DEVMAP:711 /* Someone connected through devmapnode. */712 devman_connection_ devmapper(iid, icall);720 case DEVMAN_CONNECT_FROM_LOC: 721 /* Someone connected through loc node. */ 722 devman_connection_loc(iid, icall); 713 723 break; 714 724 case DEVMAN_CONNECT_TO_PARENTS_DEVICE: … … 746 756 747 757 /* 748 * !!! devman_connection ... as the device manager is not a real devmap758 * !!! devman_connection ... as the device manager is not a real loc 749 759 * driver (it uses a completely different ipc protocol than an ordinary 750 * devmapdriver) forwarding a connection from client to the devman by751 * devmapperwould not work.760 * loc driver) forwarding a connection from client to the devman by 761 * location service would not work. 752 762 */ 753 devmap_driver_register(NAME, devman_connection);763 loc_server_register(NAME, devman_connection); 754 764 755 765 return true; … … 760 770 printf(NAME ": HelenOS Device Manager\n"); 761 771 762 if (log_init(NAME, LVL_ ERROR) != EOK) {772 if (log_init(NAME, LVL_WARN) != EOK) { 763 773 printf(NAME ": Error initializing logging subsystem.\n"); 764 774 return -1; -
uspace/srv/fs/ext2fs/ext2fs_ops.c
r3751a08 r16dc887 42 42 #include <libext2.h> 43 43 #include <ipc/services.h> 44 #include <ipc/ devmap.h>44 #include <ipc/loc.h> 45 45 #include <macros.h> 46 46 #include <async.h> … … 69 69 typedef struct ext2fs_instance { 70 70 link_t link; 71 devmap_handle_t devmap_handle;71 service_id_t service_id; 72 72 ext2_filesystem_t *filesystem; 73 73 unsigned int open_nodes_count; … … 85 85 * Forward declarations of auxiliary functions 86 86 */ 87 static int ext2fs_instance_get( devmap_handle_t, ext2fs_instance_t **);87 static int ext2fs_instance_get(service_id_t, ext2fs_instance_t **); 88 88 static int ext2fs_read_directory(ipc_callid_t, aoff64_t, size_t, 89 89 ext2fs_instance_t *, ext2_inode_ref_t *, size_t *); … … 97 97 * Forward declarations of EXT2 libfs operations. 98 98 */ 99 static int ext2fs_root_get(fs_node_t **, devmap_handle_t);99 static int ext2fs_root_get(fs_node_t **, service_id_t); 100 100 static int ext2fs_match(fs_node_t **, fs_node_t *, const char *); 101 static int ext2fs_node_get(fs_node_t **, devmap_handle_t, fs_index_t);101 static int ext2fs_node_get(fs_node_t **, service_id_t, fs_index_t); 102 102 static int ext2fs_node_open(fs_node_t *); 103 103 static int ext2fs_node_put(fs_node_t *); 104 static int ext2fs_create_node(fs_node_t **, devmap_handle_t, int);104 static int ext2fs_create_node(fs_node_t **, service_id_t, int); 105 105 static int ext2fs_destroy_node(fs_node_t *); 106 106 static int ext2fs_link(fs_node_t *, fs_node_t *, const char *); … … 112 112 static bool ext2fs_is_directory(fs_node_t *); 113 113 static bool ext2fs_is_file(fs_node_t *node); 114 static devmap_handle_t ext2fs_device_get(fs_node_t *node);114 static service_id_t ext2fs_device_get(fs_node_t *node); 115 115 116 116 /* … … 134 134 ext2fs_node_t *enode = hash_table_get_instance(item, ext2fs_node_t, link); 135 135 assert(keys > 0); 136 if (enode->instance-> devmap_handle!=137 (( devmap_handle_t) key[OPEN_NODES_DEV_HANDLE_KEY])) {136 if (enode->instance->service_id != 137 ((service_id_t) key[OPEN_NODES_DEV_HANDLE_KEY])) { 138 138 return false; 139 139 } … … 180 180 181 181 /** 182 * Find an instance of filesystem for the given devmap_handle183 */ 184 int ext2fs_instance_get( devmap_handle_t devmap_handle, ext2fs_instance_t **inst)185 { 186 EXT2FS_DBG("(%" PRIun ", -)", devmap_handle);182 * Find an instance of filesystem for the given service_id 183 */ 184 int ext2fs_instance_get(service_id_t service_id, ext2fs_instance_t **inst) 185 { 186 EXT2FS_DBG("(%" PRIun ", -)", service_id); 187 187 ext2fs_instance_t *tmp; 188 188 … … 198 198 tmp = list_get_instance(link, ext2fs_instance_t, link); 199 199 200 if (tmp-> devmap_handle == devmap_handle) {200 if (tmp->service_id == service_id) { 201 201 *inst = tmp; 202 202 fibril_mutex_unlock(&instance_list_mutex); … … 213 213 214 214 215 int ext2fs_root_get(fs_node_t **rfn, devmap_handle_t devmap_handle)216 { 217 EXT2FS_DBG("(-, %" PRIun ")", devmap_handle);218 return ext2fs_node_get(rfn, devmap_handle, EXT2_INODE_ROOT_INDEX);215 int ext2fs_root_get(fs_node_t **rfn, service_id_t service_id) 216 { 217 EXT2FS_DBG("(-, %" PRIun ")", service_id); 218 return ext2fs_node_get(rfn, service_id, EXT2_INODE_ROOT_INDEX); 219 219 } 220 220 … … 289 289 290 290 /** Instantiate a EXT2 in-core node. */ 291 int ext2fs_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle, fs_index_t index)292 { 293 EXT2FS_DBG("(-,%" PRIun ",%u)", devmap_handle, index);291 int ext2fs_node_get(fs_node_t **rfn, service_id_t service_id, fs_index_t index) 292 { 293 EXT2FS_DBG("(-,%" PRIun ",%u)", service_id, index); 294 294 295 295 ext2fs_instance_t *inst = NULL; 296 296 int rc; 297 297 298 rc = ext2fs_instance_get( devmap_handle, &inst);298 rc = ext2fs_instance_get(service_id, &inst); 299 299 if (rc != EOK) { 300 300 return rc; … … 317 317 /* Check if the node is not already open */ 318 318 unsigned long key[] = { 319 [OPEN_NODES_DEV_HANDLE_KEY] = inst-> devmap_handle,319 [OPEN_NODES_DEV_HANDLE_KEY] = inst->service_id, 320 320 [OPEN_NODES_INODE_KEY] = index, 321 321 }; … … 411 411 412 412 unsigned long key[] = { 413 [OPEN_NODES_DEV_HANDLE_KEY] = enode->instance-> devmap_handle,413 [OPEN_NODES_DEV_HANDLE_KEY] = enode->instance->service_id, 414 414 [OPEN_NODES_INODE_KEY] = enode->inode_ref->index, 415 415 }; … … 429 429 } 430 430 431 int ext2fs_create_node(fs_node_t **rfn, devmap_handle_t devmap_handle, int flags)431 int ext2fs_create_node(fs_node_t **rfn, service_id_t service_id, int flags) 432 432 { 433 433 EXT2FS_DBG(""); … … 557 557 } 558 558 559 devmap_handle_t ext2fs_device_get(fs_node_t *fn)559 service_id_t ext2fs_device_get(fs_node_t *fn) 560 560 { 561 561 EXT2FS_DBG(""); 562 562 ext2fs_node_t *enode = EXT2FS_NODE(fn); 563 return enode->instance-> devmap_handle;563 return enode->instance->service_id; 564 564 } 565 565 … … 588 588 */ 589 589 590 static int ext2fs_mounted( devmap_handle_t devmap_handle, const char *opts,590 static int ext2fs_mounted(service_id_t service_id, const char *opts, 591 591 fs_index_t *index, aoff64_t *size, unsigned *lnkcnt) 592 592 { … … 610 610 611 611 /* Initialize the filesystem */ 612 rc = ext2_filesystem_init(fs, devmap_handle);612 rc = ext2_filesystem_init(fs, service_id); 613 613 if (rc != EOK) { 614 614 free(fs); … … 637 637 /* Initialize instance */ 638 638 link_initialize(&inst->link); 639 inst-> devmap_handle = devmap_handle;639 inst->service_id = service_id; 640 640 inst->filesystem = fs; 641 641 inst->open_nodes_count = 0; … … 666 666 } 667 667 668 static int ext2fs_unmounted( devmap_handle_t devmap_handle)668 static int ext2fs_unmounted(service_id_t service_id) 669 669 { 670 670 EXT2FS_DBG(""); … … 672 672 int rc; 673 673 674 rc = ext2fs_instance_get( devmap_handle, &inst);674 rc = ext2fs_instance_get(service_id, &inst); 675 675 676 676 if (rc != EOK) … … 698 698 699 699 static int 700 ext2fs_read( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,700 ext2fs_read(service_id_t service_id, fs_index_t index, aoff64_t pos, 701 701 size_t *rbytes) 702 702 { … … 717 717 } 718 718 719 rc = ext2fs_instance_get( devmap_handle, &inst);719 rc = ext2fs_instance_get(service_id, &inst); 720 720 if (rc != EOK) { 721 721 async_answer_0(callid, rc); … … 907 907 908 908 /* Usual case - we need to read a block from device */ 909 rc = block_get(&block, inst-> devmap_handle, fs_block, BLOCK_FLAGS_NONE);909 rc = block_get(&block, inst->service_id, fs_block, BLOCK_FLAGS_NONE); 910 910 if (rc != EOK) { 911 911 async_answer_0(callid, rc); … … 925 925 926 926 static int 927 ext2fs_write( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,927 ext2fs_write(service_id_t service_id, fs_index_t index, aoff64_t pos, 928 928 size_t *wbytes, aoff64_t *nsize) 929 929 { … … 933 933 934 934 static int 935 ext2fs_truncate( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t size)935 ext2fs_truncate(service_id_t service_id, fs_index_t index, aoff64_t size) 936 936 { 937 937 EXT2FS_DBG(""); … … 939 939 } 940 940 941 static int ext2fs_close( devmap_handle_t devmap_handle, fs_index_t index)942 { 943 EXT2FS_DBG(""); 944 return EOK; 945 } 946 947 static int ext2fs_destroy( devmap_handle_t devmap_handle, fs_index_t index)941 static int ext2fs_close(service_id_t service_id, fs_index_t index) 942 { 943 EXT2FS_DBG(""); 944 return EOK; 945 } 946 947 static int ext2fs_destroy(service_id_t service_id, fs_index_t index) 948 948 { 949 949 EXT2FS_DBG(""); … … 951 951 } 952 952 953 static int ext2fs_sync( devmap_handle_t devmap_handle, fs_index_t index)953 static int ext2fs_sync(service_id_t service_id, fs_index_t index) 954 954 { 955 955 EXT2FS_DBG(""); -
uspace/srv/fs/fat/fat.h
r3751a08 r16dc887 175 175 176 176 fibril_mutex_t lock; 177 devmap_handle_t devmap_handle;177 service_id_t service_id; 178 178 fs_index_t index; 179 179 /** … … 227 227 extern libfs_ops_t fat_libfs_ops; 228 228 229 extern int fat_idx_get_new(fat_idx_t **, devmap_handle_t);230 extern fat_idx_t *fat_idx_get_by_pos( devmap_handle_t, fat_cluster_t, unsigned);231 extern fat_idx_t *fat_idx_get_by_index( devmap_handle_t, fs_index_t);229 extern int fat_idx_get_new(fat_idx_t **, service_id_t); 230 extern fat_idx_t *fat_idx_get_by_pos(service_id_t, fat_cluster_t, unsigned); 231 extern fat_idx_t *fat_idx_get_by_index(service_id_t, fs_index_t); 232 232 extern void fat_idx_destroy(fat_idx_t *); 233 233 extern void fat_idx_hashin(fat_idx_t *); … … 236 236 extern int fat_idx_init(void); 237 237 extern void fat_idx_fini(void); 238 extern int fat_idx_init_by_ devmap_handle(devmap_handle_t);239 extern void fat_idx_fini_by_ devmap_handle(devmap_handle_t);238 extern int fat_idx_init_by_service_id(service_id_t); 239 extern void fat_idx_fini_by_service_id(service_id_t); 240 240 241 241 #endif -
uspace/srv/fs/fat/fat_fat.c
r3751a08 r16dc887 71 71 * 72 72 * @param bs Buffer holding the boot sector for the file. 73 * @param devmap_handle Device handleof the device with the file.73 * @param service_id Service ID of the device with the file. 74 74 * @param firstc First cluster to start the walk with. 75 75 * @param lastc If non-NULL, output argument hodling the last cluster … … 82 82 */ 83 83 int 84 fat_cluster_walk(fat_bs_t *bs, devmap_handle_t devmap_handle, fat_cluster_t firstc,84 fat_cluster_walk(fat_bs_t *bs, service_id_t service_id, fat_cluster_t firstc, 85 85 fat_cluster_t *lastc, uint16_t *numc, uint16_t max_clusters) 86 86 { … … 109 109 fidx = clst % (BPS(bs) / sizeof(fat_cluster_t)); 110 110 /* read FAT1 */ 111 rc = block_get(&b, devmap_handle, RSCNT(bs) + fsec,111 rc = block_get(&b, service_id, RSCNT(bs) + fsec, 112 112 BLOCK_FLAGS_NONE); 113 113 if (rc != EOK) … … 160 160 * when fortunately we have the last cluster number cached. 161 161 */ 162 return block_get(block, nodep->idx-> devmap_handle,162 return block_get(block, nodep->idx->service_id, 163 163 CLBN2PBN(bs, nodep->lastc_cached_value, bn), flags); 164 164 } … … 174 174 175 175 fall_through: 176 rc = _fat_block_get(block, bs, nodep->idx-> devmap_handle, firstc,176 rc = _fat_block_get(block, bs, nodep->idx->service_id, firstc, 177 177 &currc, relbn, flags); 178 178 if (rc != EOK) … … 193 193 * @param block Pointer to a block pointer for storing result. 194 194 * @param bs Buffer holding the boot sector of the file system. 195 * @param devmap_handle Devicehandle of the file system.195 * @param service_id Service ID handle of the file system. 196 196 * @param fcl First cluster used by the file. Can be zero if the file 197 197 * is empty. … … 205 205 */ 206 206 int 207 _fat_block_get(block_t **block, fat_bs_t *bs, devmap_handle_t devmap_handle,207 _fat_block_get(block_t **block, fat_bs_t *bs, service_id_t service_id, 208 208 fat_cluster_t fcl, fat_cluster_t *clp, aoff64_t bn, int flags) 209 209 { … … 222 222 /* root directory special case */ 223 223 assert(bn < RDS(bs)); 224 rc = block_get(block, devmap_handle,224 rc = block_get(block, service_id, 225 225 RSCNT(bs) + FATCNT(bs) * SF(bs) + bn, flags); 226 226 return rc; … … 228 228 229 229 max_clusters = bn / SPC(bs); 230 rc = fat_cluster_walk(bs, devmap_handle, fcl, &c, &clusters, max_clusters);230 rc = fat_cluster_walk(bs, service_id, fcl, &c, &clusters, max_clusters); 231 231 if (rc != EOK) 232 232 return rc; 233 233 assert(clusters == max_clusters); 234 234 235 rc = block_get(block, devmap_handle, CLBN2PBN(bs, c, bn), flags);235 rc = block_get(block, service_id, CLBN2PBN(bs, c, bn), flags); 236 236 237 237 if (clp) … … 281 281 /* zero out the initial part of the new cluster chain */ 282 282 for (o = boundary; o < pos; o += BPS(bs)) { 283 rc = _fat_block_get(&b, bs, nodep->idx-> devmap_handle, mcl,283 rc = _fat_block_get(&b, bs, nodep->idx->service_id, mcl, 284 284 NULL, (o - boundary) / BPS(bs), BLOCK_FLAGS_NOREAD); 285 285 if (rc != EOK) … … 298 298 * 299 299 * @param bs Buffer holding the boot sector for the file system. 300 * @param devmap_handle Device handlefor the file system.300 * @param service_id Service ID for the file system. 301 301 * @param clst Cluster which to get. 302 302 * @param value Output argument holding the value of the cluster. … … 305 305 */ 306 306 int 307 fat_get_cluster(fat_bs_t *bs, devmap_handle_t devmap_handle, unsigned fatno,307 fat_get_cluster(fat_bs_t *bs, service_id_t service_id, unsigned fatno, 308 308 fat_cluster_t clst, fat_cluster_t *value) 309 309 { … … 312 312 int rc; 313 313 314 rc = block_get(&b, devmap_handle, RSCNT(bs) + SF(bs) * fatno +314 rc = block_get(&b, service_id, RSCNT(bs) + SF(bs) * fatno + 315 315 (clst * sizeof(fat_cluster_t)) / BPS(bs), BLOCK_FLAGS_NONE); 316 316 if (rc != EOK) … … 327 327 * 328 328 * @param bs Buffer holding the boot sector for the file system. 329 * @param devmap_handle Device handlefor the file system.329 * @param service_id Device service ID for the file system. 330 330 * @param fatno Number of the FAT instance where to make the change. 331 331 * @param clst Cluster which is to be set. … … 335 335 */ 336 336 int 337 fat_set_cluster(fat_bs_t *bs, devmap_handle_t devmap_handle, unsigned fatno,337 fat_set_cluster(fat_bs_t *bs, service_id_t service_id, unsigned fatno, 338 338 fat_cluster_t clst, fat_cluster_t value) 339 339 { … … 343 343 344 344 assert(fatno < FATCNT(bs)); 345 rc = block_get(&b, devmap_handle, RSCNT(bs) + SF(bs) * fatno +345 rc = block_get(&b, service_id, RSCNT(bs) + SF(bs) * fatno + 346 346 (clst * sizeof(fat_cluster_t)) / BPS(bs), BLOCK_FLAGS_NONE); 347 347 if (rc != EOK) … … 358 358 * 359 359 * @param bs Buffer holding the boot sector of the file system. 360 * @param devmap_handle Device handleof the file system.360 * @param service_id Service ID of the file system. 361 361 * @param lifo Chain of allocated clusters. 362 362 * @param nclsts Number of clusters in the lifo chain. … … 364 364 * @return EOK on success or a negative error code. 365 365 */ 366 int fat_alloc_shadow_clusters(fat_bs_t *bs, devmap_handle_t devmap_handle,366 int fat_alloc_shadow_clusters(fat_bs_t *bs, service_id_t service_id, 367 367 fat_cluster_t *lifo, unsigned nclsts) 368 368 { … … 373 373 for (fatno = FAT1 + 1; fatno < bs->fatcnt; fatno++) { 374 374 for (c = 0; c < nclsts; c++) { 375 rc = fat_set_cluster(bs, devmap_handle, fatno, lifo[c],375 rc = fat_set_cluster(bs, service_id, fatno, lifo[c], 376 376 c == 0 ? FAT_CLST_LAST1 : lifo[c - 1]); 377 377 if (rc != EOK) … … 391 391 * 392 392 * @param bs Buffer holding the boot sector of the file system. 393 * @param devmap_handle Device handleof the file system.393 * @param service_id Device service ID of the file system. 394 394 * @param nclsts Number of clusters to allocate. 395 395 * @param mcl Output parameter where the first cluster in the chain … … 401 401 */ 402 402 int 403 fat_alloc_clusters(fat_bs_t *bs, devmap_handle_t devmap_handle, unsigned nclsts,403 fat_alloc_clusters(fat_bs_t *bs, service_id_t service_id, unsigned nclsts, 404 404 fat_cluster_t *mcl, fat_cluster_t *lcl) 405 405 { … … 419 419 fibril_mutex_lock(&fat_alloc_lock); 420 420 for (b = 0, cl = 0; b < SF(bs); b++) { 421 rc = block_get(&blk, devmap_handle, RSCNT(bs) + b,421 rc = block_get(&blk, service_id, RSCNT(bs) + b, 422 422 BLOCK_FLAGS_NONE); 423 423 if (rc != EOK) … … 458 458 /* update the shadow copies of FAT */ 459 459 rc = fat_alloc_shadow_clusters(bs, 460 devmap_handle, lifo, nclsts);460 service_id, lifo, nclsts); 461 461 if (rc != EOK) 462 462 goto error; … … 485 485 */ 486 486 while (found--) { 487 rc = fat_set_cluster(bs, devmap_handle, FAT1, lifo[found],487 rc = fat_set_cluster(bs, service_id, FAT1, lifo[found], 488 488 FAT_CLST_RES0); 489 489 if (rc != EOK) { … … 500 500 * 501 501 * @param bs Buffer hodling the boot sector of the file system. 502 * @param devmap_handle Device handleof the file system.502 * @param service_id Device service ID of the file system. 503 503 * @param firstc First cluster in the chain which is to be freed. 504 504 * … … 506 506 */ 507 507 int 508 fat_free_clusters(fat_bs_t *bs, devmap_handle_t devmap_handle, fat_cluster_t firstc)508 fat_free_clusters(fat_bs_t *bs, service_id_t service_id, fat_cluster_t firstc) 509 509 { 510 510 unsigned fatno; … … 515 515 while (firstc < FAT_CLST_LAST1) { 516 516 assert(firstc >= FAT_CLST_FIRST && firstc < FAT_CLST_BAD); 517 rc = fat_get_cluster(bs, devmap_handle, FAT1, firstc, &nextc);517 rc = fat_get_cluster(bs, service_id, FAT1, firstc, &nextc); 518 518 if (rc != EOK) 519 519 return rc; 520 520 for (fatno = FAT1; fatno < bs->fatcnt; fatno++) { 521 rc = fat_set_cluster(bs, devmap_handle, fatno, firstc,521 rc = fat_set_cluster(bs, service_id, fatno, firstc, 522 522 FAT_CLST_RES0); 523 523 if (rc != EOK) … … 544 544 fat_cluster_t lcl) 545 545 { 546 devmap_handle_t devmap_handle = nodep->idx->devmap_handle;546 service_id_t service_id = nodep->idx->service_id; 547 547 fat_cluster_t lastc; 548 548 uint8_t fatno; … … 558 558 nodep->lastc_cached_valid = false; 559 559 } else { 560 rc = fat_cluster_walk(bs, devmap_handle, nodep->firstc,560 rc = fat_cluster_walk(bs, service_id, nodep->firstc, 561 561 &lastc, NULL, (uint16_t) -1); 562 562 if (rc != EOK) … … 565 565 566 566 for (fatno = FAT1; fatno < bs->fatcnt; fatno++) { 567 rc = fat_set_cluster(bs, nodep->idx-> devmap_handle, fatno,567 rc = fat_set_cluster(bs, nodep->idx->service_id, fatno, 568 568 lastc, mcl); 569 569 if (rc != EOK) … … 591 591 { 592 592 int rc; 593 devmap_handle_t devmap_handle = nodep->idx->devmap_handle;593 service_id_t service_id = nodep->idx->service_id; 594 594 595 595 /* … … 602 602 if (lcl == FAT_CLST_RES0) { 603 603 /* The node will have zero size and no clusters allocated. */ 604 rc = fat_free_clusters(bs, devmap_handle, nodep->firstc);604 rc = fat_free_clusters(bs, service_id, nodep->firstc); 605 605 if (rc != EOK) 606 606 return rc; … … 611 611 unsigned fatno; 612 612 613 rc = fat_get_cluster(bs, devmap_handle, FAT1, lcl, &nextc);613 rc = fat_get_cluster(bs, service_id, FAT1, lcl, &nextc); 614 614 if (rc != EOK) 615 615 return rc; … … 617 617 /* Terminate the cluster chain in all copies of FAT. */ 618 618 for (fatno = FAT1; fatno < bs->fatcnt; fatno++) { 619 rc = fat_set_cluster(bs, devmap_handle, fatno, lcl,619 rc = fat_set_cluster(bs, service_id, fatno, lcl, 620 620 FAT_CLST_LAST1); 621 621 if (rc != EOK) … … 624 624 625 625 /* Free all following clusters. */ 626 rc = fat_free_clusters(bs, devmap_handle, nextc);626 rc = fat_free_clusters(bs, service_id, nextc); 627 627 if (rc != EOK) 628 628 return rc; … … 639 639 640 640 int 641 fat_zero_cluster(struct fat_bs *bs, devmap_handle_t devmap_handle, fat_cluster_t c)641 fat_zero_cluster(struct fat_bs *bs, service_id_t service_id, fat_cluster_t c) 642 642 { 643 643 int i; … … 646 646 647 647 for (i = 0; i < SPC(bs); i++) { 648 rc = _fat_block_get(&b, bs, devmap_handle, c, NULL, i,648 rc = _fat_block_get(&b, bs, service_id, c, NULL, i, 649 649 BLOCK_FLAGS_NOREAD); 650 650 if (rc != EOK) … … 666 666 * does not contain a fat file system. 667 667 */ 668 int fat_sanity_check(fat_bs_t *bs, devmap_handle_t devmap_handle)668 int fat_sanity_check(fat_bs_t *bs, service_id_t service_id) 669 669 { 670 670 fat_cluster_t e0, e1; … … 707 707 708 708 for (fat_no = 0; fat_no < bs->fatcnt; fat_no++) { 709 rc = fat_get_cluster(bs, devmap_handle, fat_no, 0, &e0);709 rc = fat_get_cluster(bs, service_id, fat_no, 0, &e0); 710 710 if (rc != EOK) 711 711 return EIO; 712 712 713 rc = fat_get_cluster(bs, devmap_handle, fat_no, 1, &e1);713 rc = fat_get_cluster(bs, service_id, fat_no, 1, &e1); 714 714 if (rc != EOK) 715 715 return EIO; -
uspace/srv/fs/fat/fat_fat.h
r3751a08 r16dc887 61 61 #define fat_clusters_get(numc, bs, dh, fc) \ 62 62 fat_cluster_walk((bs), (dh), (fc), NULL, (numc), (uint16_t) -1) 63 extern int fat_cluster_walk(struct fat_bs *, devmap_handle_t, fat_cluster_t,63 extern int fat_cluster_walk(struct fat_bs *, service_id_t, fat_cluster_t, 64 64 fat_cluster_t *, uint16_t *, uint16_t); 65 65 66 66 extern int fat_block_get(block_t **, struct fat_bs *, struct fat_node *, 67 67 aoff64_t, int); 68 extern int _fat_block_get(block_t **, struct fat_bs *, devmap_handle_t,68 extern int _fat_block_get(block_t **, struct fat_bs *, service_id_t, 69 69 fat_cluster_t, fat_cluster_t *, aoff64_t, int); 70 70 … … 73 73 extern int fat_chop_clusters(struct fat_bs *, struct fat_node *, 74 74 fat_cluster_t); 75 extern int fat_alloc_clusters(struct fat_bs *, devmap_handle_t, unsigned,75 extern int fat_alloc_clusters(struct fat_bs *, service_id_t, unsigned, 76 76 fat_cluster_t *, fat_cluster_t *); 77 extern int fat_free_clusters(struct fat_bs *, devmap_handle_t, fat_cluster_t);78 extern int fat_alloc_shadow_clusters(struct fat_bs *, devmap_handle_t,77 extern int fat_free_clusters(struct fat_bs *, service_id_t, fat_cluster_t); 78 extern int fat_alloc_shadow_clusters(struct fat_bs *, service_id_t, 79 79 fat_cluster_t *, unsigned); 80 extern int fat_get_cluster(struct fat_bs *, devmap_handle_t, unsigned,80 extern int fat_get_cluster(struct fat_bs *, service_id_t, unsigned, 81 81 fat_cluster_t, fat_cluster_t *); 82 extern int fat_set_cluster(struct fat_bs *, devmap_handle_t, unsigned,82 extern int fat_set_cluster(struct fat_bs *, service_id_t, unsigned, 83 83 fat_cluster_t, fat_cluster_t); 84 84 extern int fat_fill_gap(struct fat_bs *, struct fat_node *, fat_cluster_t, 85 85 aoff64_t); 86 extern int fat_zero_cluster(struct fat_bs *, devmap_handle_t, fat_cluster_t);87 extern int fat_sanity_check(struct fat_bs *, devmap_handle_t);86 extern int fat_zero_cluster(struct fat_bs *, service_id_t, fat_cluster_t); 87 extern int fat_sanity_check(struct fat_bs *, service_id_t); 88 88 89 89 #endif -
uspace/srv/fs/fat/fat_idx.c
r3751a08 r16dc887 59 59 typedef struct { 60 60 link_t link; 61 devmap_handle_t devmap_handle;61 service_id_t service_id; 62 62 63 63 /** Next unassigned index. */ … … 76 76 static LIST_INITIALIZE(unused_list); 77 77 78 static void unused_initialize(unused_t *u, devmap_handle_t devmap_handle)78 static void unused_initialize(unused_t *u, service_id_t service_id) 79 79 { 80 80 link_initialize(&u->link); 81 u-> devmap_handle = devmap_handle;81 u->service_id = service_id; 82 82 u->next = 0; 83 83 u->remaining = ((uint64_t)((fs_index_t)-1)) + 1; … … 85 85 } 86 86 87 static unused_t *unused_find( devmap_handle_t devmap_handle, bool lock)87 static unused_t *unused_find(service_id_t service_id, bool lock) 88 88 { 89 89 unused_t *u; … … 94 94 list_foreach(unused_list, l) { 95 95 u = list_get_instance(l, unused_t, link); 96 if (u-> devmap_handle == devmap_handle)96 if (u->service_id == service_id) 97 97 return u; 98 98 } … … 108 108 /** 109 109 * Global hash table of all used fat_idx_t structures. 110 * The index structures are hashed by the devmap_handle, parent node's first110 * The index structures are hashed by the service_id, parent node's first 111 111 * cluster and index within the parent directory. 112 112 */ … … 122 122 static hash_index_t pos_hash(unsigned long key[]) 123 123 { 124 devmap_handle_t devmap_handle = (devmap_handle_t)key[UPH_DH_KEY];124 service_id_t service_id = (service_id_t)key[UPH_DH_KEY]; 125 125 fat_cluster_t pfc = (fat_cluster_t)key[UPH_PFC_KEY]; 126 126 unsigned pdi = (unsigned)key[UPH_PDI_KEY]; … … 142 142 h |= (pdi & ((1 << (UPH_BUCKETS_LOG / 4)) - 1)) << 143 143 (UPH_BUCKETS_LOG / 2); 144 h |= ( devmap_handle& ((1 << (UPH_BUCKETS_LOG / 4)) - 1)) <<144 h |= (service_id & ((1 << (UPH_BUCKETS_LOG / 4)) - 1)) << 145 145 (3 * (UPH_BUCKETS_LOG / 4)); 146 146 … … 150 150 static int pos_compare(unsigned long key[], hash_count_t keys, link_t *item) 151 151 { 152 devmap_handle_t devmap_handle = (devmap_handle_t)key[UPH_DH_KEY];152 service_id_t service_id = (service_id_t)key[UPH_DH_KEY]; 153 153 fat_cluster_t pfc; 154 154 unsigned pdi; … … 157 157 switch (keys) { 158 158 case 1: 159 return ( devmap_handle == fidx->devmap_handle);159 return (service_id == fidx->service_id); 160 160 case 3: 161 161 pfc = (fat_cluster_t) key[UPH_PFC_KEY]; 162 162 pdi = (unsigned) key[UPH_PDI_KEY]; 163 return ( devmap_handle == fidx->devmap_handle) && (pfc == fidx->pfc) &&163 return (service_id == fidx->service_id) && (pfc == fidx->pfc) && 164 164 (pdi == fidx->pdi); 165 165 default: … … 183 183 /** 184 184 * Global hash table of all used fat_idx_t structures. 185 * The index structures are hashed by the devmap_handleand index.185 * The index structures are hashed by the service_id and index. 186 186 */ 187 187 static hash_table_t ui_hash; … … 195 195 static hash_index_t idx_hash(unsigned long key[]) 196 196 { 197 devmap_handle_t devmap_handle = (devmap_handle_t)key[UIH_DH_KEY];197 service_id_t service_id = (service_id_t)key[UIH_DH_KEY]; 198 198 fs_index_t index = (fs_index_t)key[UIH_INDEX_KEY]; 199 199 200 200 hash_index_t h; 201 201 202 h = devmap_handle& ((1 << (UIH_BUCKETS_LOG / 2)) - 1);202 h = service_id & ((1 << (UIH_BUCKETS_LOG / 2)) - 1); 203 203 h |= (index & ((1 << (UIH_BUCKETS_LOG / 2)) - 1)) << 204 204 (UIH_BUCKETS_LOG / 2); … … 209 209 static int idx_compare(unsigned long key[], hash_count_t keys, link_t *item) 210 210 { 211 devmap_handle_t devmap_handle = (devmap_handle_t)key[UIH_DH_KEY];211 service_id_t service_id = (service_id_t)key[UIH_DH_KEY]; 212 212 fs_index_t index; 213 213 fat_idx_t *fidx = list_get_instance(item, fat_idx_t, uih_link); … … 215 215 switch (keys) { 216 216 case 1: 217 return ( devmap_handle == fidx->devmap_handle);217 return (service_id == fidx->service_id); 218 218 case 2: 219 219 index = (fs_index_t) key[UIH_INDEX_KEY]; 220 return ( devmap_handle == fidx->devmap_handle) &&220 return (service_id == fidx->service_id) && 221 221 (index == fidx->index); 222 222 default: … … 241 241 242 242 /** Allocate a VFS index which is not currently in use. */ 243 static bool fat_index_alloc( devmap_handle_t devmap_handle, fs_index_t *index)243 static bool fat_index_alloc(service_id_t service_id, fs_index_t *index) 244 244 { 245 245 unused_t *u; 246 246 247 247 assert(index); 248 u = unused_find( devmap_handle, true);248 u = unused_find(service_id, true); 249 249 if (!u) 250 250 return false; … … 303 303 304 304 /** Free a VFS index, which is no longer in use. */ 305 static void fat_index_free( devmap_handle_t devmap_handle, fs_index_t index)305 static void fat_index_free(service_id_t service_id, fs_index_t index) 306 306 { 307 307 unused_t *u; 308 308 309 u = unused_find( devmap_handle, true);309 u = unused_find(service_id, true); 310 310 assert(u); 311 311 … … 365 365 } 366 366 367 static int fat_idx_create(fat_idx_t **fidxp, devmap_handle_t devmap_handle)367 static int fat_idx_create(fat_idx_t **fidxp, service_id_t service_id) 368 368 { 369 369 fat_idx_t *fidx; … … 372 372 if (!fidx) 373 373 return ENOMEM; 374 if (!fat_index_alloc( devmap_handle, &fidx->index)) {374 if (!fat_index_alloc(service_id, &fidx->index)) { 375 375 free(fidx); 376 376 return ENOSPC; … … 380 380 link_initialize(&fidx->uih_link); 381 381 fibril_mutex_initialize(&fidx->lock); 382 fidx-> devmap_handle = devmap_handle;382 fidx->service_id = service_id; 383 383 fidx->pfc = FAT_CLST_RES0; /* no parent yet */ 384 384 fidx->pdi = 0; … … 389 389 } 390 390 391 int fat_idx_get_new(fat_idx_t **fidxp, devmap_handle_t devmap_handle)391 int fat_idx_get_new(fat_idx_t **fidxp, service_id_t service_id) 392 392 { 393 393 fat_idx_t *fidx; … … 395 395 396 396 fibril_mutex_lock(&used_lock); 397 rc = fat_idx_create(&fidx, devmap_handle);397 rc = fat_idx_create(&fidx, service_id); 398 398 if (rc != EOK) { 399 399 fibril_mutex_unlock(&used_lock); … … 402 402 403 403 unsigned long ikey[] = { 404 [UIH_DH_KEY] = devmap_handle,404 [UIH_DH_KEY] = service_id, 405 405 [UIH_INDEX_KEY] = fidx->index, 406 406 }; … … 415 415 416 416 fat_idx_t * 417 fat_idx_get_by_pos( devmap_handle_t devmap_handle, fat_cluster_t pfc, unsigned pdi)417 fat_idx_get_by_pos(service_id_t service_id, fat_cluster_t pfc, unsigned pdi) 418 418 { 419 419 fat_idx_t *fidx; 420 420 link_t *l; 421 421 unsigned long pkey[] = { 422 [UPH_DH_KEY] = devmap_handle,422 [UPH_DH_KEY] = service_id, 423 423 [UPH_PFC_KEY] = pfc, 424 424 [UPH_PDI_KEY] = pdi, … … 432 432 int rc; 433 433 434 rc = fat_idx_create(&fidx, devmap_handle);434 rc = fat_idx_create(&fidx, service_id); 435 435 if (rc != EOK) { 436 436 fibril_mutex_unlock(&used_lock); … … 439 439 440 440 unsigned long ikey[] = { 441 [UIH_DH_KEY] = devmap_handle,441 [UIH_DH_KEY] = service_id, 442 442 [UIH_INDEX_KEY] = fidx->index, 443 443 }; … … 458 458 { 459 459 unsigned long pkey[] = { 460 [UPH_DH_KEY] = idx-> devmap_handle,460 [UPH_DH_KEY] = idx->service_id, 461 461 [UPH_PFC_KEY] = idx->pfc, 462 462 [UPH_PDI_KEY] = idx->pdi, … … 471 471 { 472 472 unsigned long pkey[] = { 473 [UPH_DH_KEY] = idx-> devmap_handle,473 [UPH_DH_KEY] = idx->service_id, 474 474 [UPH_PFC_KEY] = idx->pfc, 475 475 [UPH_PDI_KEY] = idx->pdi, … … 482 482 483 483 fat_idx_t * 484 fat_idx_get_by_index( devmap_handle_t devmap_handle, fs_index_t index)484 fat_idx_get_by_index(service_id_t service_id, fs_index_t index) 485 485 { 486 486 fat_idx_t *fidx = NULL; 487 487 link_t *l; 488 488 unsigned long ikey[] = { 489 [UIH_DH_KEY] = devmap_handle,489 [UIH_DH_KEY] = service_id, 490 490 [UIH_INDEX_KEY] = index, 491 491 }; … … 509 509 { 510 510 unsigned long ikey[] = { 511 [UIH_DH_KEY] = idx-> devmap_handle,511 [UIH_DH_KEY] = idx->service_id, 512 512 [UIH_INDEX_KEY] = idx->index, 513 513 }; 514 devmap_handle_t devmap_handle = idx->devmap_handle;514 service_id_t service_id = idx->service_id; 515 515 fs_index_t index = idx->index; 516 516 … … 526 526 fibril_mutex_unlock(&used_lock); 527 527 /* Release the VFS index. */ 528 fat_index_free( devmap_handle, index);528 fat_index_free(service_id, index); 529 529 /* The index structure itself is freed in idx_remove_callback(). */ 530 530 } … … 548 548 } 549 549 550 int fat_idx_init_by_ devmap_handle(devmap_handle_t devmap_handle)550 int fat_idx_init_by_service_id(service_id_t service_id) 551 551 { 552 552 unused_t *u; … … 556 556 if (!u) 557 557 return ENOMEM; 558 unused_initialize(u, devmap_handle);558 unused_initialize(u, service_id); 559 559 fibril_mutex_lock(&unused_lock); 560 if (!unused_find( devmap_handle, false)) {560 if (!unused_find(service_id, false)) { 561 561 list_append(&u->link, &unused_list); 562 562 } else { … … 568 568 } 569 569 570 void fat_idx_fini_by_ devmap_handle(devmap_handle_t devmap_handle)570 void fat_idx_fini_by_service_id(service_id_t service_id) 571 571 { 572 572 unsigned long ikey[] = { 573 [UIH_DH_KEY] = devmap_handle573 [UIH_DH_KEY] = service_id 574 574 }; 575 575 unsigned long pkey[] = { 576 [UPH_DH_KEY] = devmap_handle576 [UPH_DH_KEY] = service_id 577 577 }; 578 578 … … 590 590 * Free the unused and freed structures for this instance. 591 591 */ 592 unused_t *u = unused_find( devmap_handle, true);592 unused_t *u = unused_find(service_id, true); 593 593 assert(u); 594 594 list_remove(&u->link); -
uspace/srv/fs/fat/fat_ops.c
r3751a08 r16dc887 43 43 #include <libblock.h> 44 44 #include <ipc/services.h> 45 #include <ipc/ devmap.h>45 #include <ipc/loc.h> 46 46 #include <macros.h> 47 47 #include <async.h> … … 72 72 * Forward declarations of FAT libfs operations. 73 73 */ 74 static int fat_root_get(fs_node_t **, devmap_handle_t);74 static int fat_root_get(fs_node_t **, service_id_t); 75 75 static int fat_match(fs_node_t **, fs_node_t *, const char *); 76 static int fat_node_get(fs_node_t **, devmap_handle_t, fs_index_t);76 static int fat_node_get(fs_node_t **, service_id_t, fs_index_t); 77 77 static int fat_node_open(fs_node_t *); 78 78 static int fat_node_put(fs_node_t *); 79 static int fat_create_node(fs_node_t **, devmap_handle_t, int);79 static int fat_create_node(fs_node_t **, service_id_t, int); 80 80 static int fat_destroy_node(fs_node_t *); 81 81 static int fat_link(fs_node_t *, fs_node_t *, const char *); … … 87 87 static bool fat_is_directory(fs_node_t *); 88 88 static bool fat_is_file(fs_node_t *node); 89 static devmap_handle_t fat_device_get(fs_node_t *node);89 static service_id_t fat_device_get(fs_node_t *node); 90 90 91 91 /* … … 119 119 assert(node->dirty); 120 120 121 bs = block_bb_get(node->idx-> devmap_handle);121 bs = block_bb_get(node->idx->service_id); 122 122 123 123 /* Read the block that contains the dentry of interest. */ 124 rc = _fat_block_get(&b, bs, node->idx-> devmap_handle, node->idx->pfc,124 rc = _fat_block_get(&b, bs, node->idx->service_id, node->idx->pfc, 125 125 NULL, (node->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs), 126 126 BLOCK_FLAGS_NONE); … … 144 144 } 145 145 146 static int fat_node_fini_by_ devmap_handle(devmap_handle_t devmap_handle)146 static int fat_node_fini_by_service_id(service_id_t service_id) 147 147 { 148 148 fat_node_t *nodep; … … 168 168 goto restart; 169 169 } 170 if (nodep->idx-> devmap_handle != devmap_handle) {170 if (nodep->idx->service_id != service_id) { 171 171 fibril_mutex_unlock(&nodep->idx->lock); 172 172 fibril_mutex_unlock(&nodep->lock); … … 298 298 return rc; 299 299 300 bs = block_bb_get(idxp-> devmap_handle);300 bs = block_bb_get(idxp->service_id); 301 301 302 302 /* Read the block that contains the dentry of interest. */ 303 rc = _fat_block_get(&b, bs, idxp-> devmap_handle, idxp->pfc, NULL,303 rc = _fat_block_get(&b, bs, idxp->service_id, idxp->pfc, NULL, 304 304 (idxp->pdi * sizeof(fat_dentry_t)) / BPS(bs), BLOCK_FLAGS_NONE); 305 305 if (rc != EOK) { … … 322 322 */ 323 323 uint16_t clusters; 324 rc = fat_clusters_get(&clusters, bs, idxp-> devmap_handle,324 rc = fat_clusters_get(&clusters, bs, idxp->service_id, 325 325 uint16_t_le2host(d->firstc)); 326 326 if (rc != EOK) { … … 356 356 */ 357 357 358 int fat_root_get(fs_node_t **rfn, devmap_handle_t devmap_handle)359 { 360 return fat_node_get(rfn, devmap_handle, 0);358 int fat_root_get(fs_node_t **rfn, service_id_t service_id) 359 { 360 return fat_node_get(rfn, service_id, 0); 361 361 } 362 362 … … 369 369 unsigned blocks; 370 370 fat_dentry_t *d; 371 devmap_handle_t devmap_handle;371 service_id_t service_id; 372 372 block_t *b; 373 373 int rc; 374 374 375 375 fibril_mutex_lock(&parentp->idx->lock); 376 devmap_handle = parentp->idx->devmap_handle;376 service_id = parentp->idx->service_id; 377 377 fibril_mutex_unlock(&parentp->idx->lock); 378 378 379 bs = block_bb_get( devmap_handle);379 bs = block_bb_get(service_id); 380 380 blocks = parentp->size / BPS(bs); 381 381 for (i = 0; i < blocks; i++) { … … 402 402 /* hit */ 403 403 fat_node_t *nodep; 404 fat_idx_t *idx = fat_idx_get_by_pos( devmap_handle,404 fat_idx_t *idx = fat_idx_get_by_pos(service_id, 405 405 parentp->firstc, i * DPS(bs) + j); 406 406 if (!idx) { … … 435 435 436 436 /** Instantiate a FAT in-core node. */ 437 int fat_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle, fs_index_t index)437 int fat_node_get(fs_node_t **rfn, service_id_t service_id, fs_index_t index) 438 438 { 439 439 fat_node_t *nodep; … … 441 441 int rc; 442 442 443 idxp = fat_idx_get_by_index( devmap_handle, index);443 idxp = fat_idx_get_by_index(service_id, index); 444 444 if (!idxp) { 445 445 *rfn = NULL; … … 492 492 } 493 493 494 int fat_create_node(fs_node_t **rfn, devmap_handle_t devmap_handle, int flags)494 int fat_create_node(fs_node_t **rfn, service_id_t service_id, int flags) 495 495 { 496 496 fat_idx_t *idxp; … … 500 500 int rc; 501 501 502 bs = block_bb_get( devmap_handle);502 bs = block_bb_get(service_id); 503 503 if (flags & L_DIRECTORY) { 504 504 /* allocate a cluster */ 505 rc = fat_alloc_clusters(bs, devmap_handle, 1, &mcl, &lcl);505 rc = fat_alloc_clusters(bs, service_id, 1, &mcl, &lcl); 506 506 if (rc != EOK) 507 507 return rc; 508 508 /* populate the new cluster with unused dentries */ 509 rc = fat_zero_cluster(bs, devmap_handle, mcl);509 rc = fat_zero_cluster(bs, service_id, mcl); 510 510 if (rc != EOK) { 511 (void) fat_free_clusters(bs, devmap_handle, mcl);511 (void) fat_free_clusters(bs, service_id, mcl); 512 512 return rc; 513 513 } … … 516 516 rc = fat_node_get_new(&nodep); 517 517 if (rc != EOK) { 518 (void) fat_free_clusters(bs, devmap_handle, mcl);519 return rc; 520 } 521 rc = fat_idx_get_new(&idxp, devmap_handle);518 (void) fat_free_clusters(bs, service_id, mcl); 519 return rc; 520 } 521 rc = fat_idx_get_new(&idxp, service_id); 522 522 if (rc != EOK) { 523 (void) fat_free_clusters(bs, devmap_handle, mcl);523 (void) fat_free_clusters(bs, service_id, mcl); 524 524 (void) fat_node_put(FS_NODE(nodep)); 525 525 return rc; … … 570 570 assert(!has_children); 571 571 572 bs = block_bb_get(nodep->idx-> devmap_handle);572 bs = block_bb_get(nodep->idx->service_id); 573 573 if (nodep->firstc != FAT_CLST_RES0) { 574 574 assert(nodep->size); 575 575 /* Free all clusters allocated to the node. */ 576 rc = fat_free_clusters(bs, nodep->idx-> devmap_handle,576 rc = fat_free_clusters(bs, nodep->idx->service_id, 577 577 nodep->firstc); 578 578 } … … 620 620 621 621 fibril_mutex_lock(&parentp->idx->lock); 622 bs = block_bb_get(parentp->idx-> devmap_handle);622 bs = block_bb_get(parentp->idx->service_id); 623 623 624 624 blocks = parentp->size / BPS(bs); … … 659 659 return ENOSPC; 660 660 } 661 rc = fat_alloc_clusters(bs, parentp->idx-> devmap_handle, 1, &mcl, &lcl);661 rc = fat_alloc_clusters(bs, parentp->idx->service_id, 1, &mcl, &lcl); 662 662 if (rc != EOK) { 663 663 fibril_mutex_unlock(&parentp->idx->lock); 664 664 return rc; 665 665 } 666 rc = fat_zero_cluster(bs, parentp->idx-> devmap_handle, mcl);666 rc = fat_zero_cluster(bs, parentp->idx->service_id, mcl); 667 667 if (rc != EOK) { 668 (void) fat_free_clusters(bs, parentp->idx-> devmap_handle, mcl);668 (void) fat_free_clusters(bs, parentp->idx->service_id, mcl); 669 669 fibril_mutex_unlock(&parentp->idx->lock); 670 670 return rc; … … 672 672 rc = fat_append_clusters(bs, parentp, mcl, lcl); 673 673 if (rc != EOK) { 674 (void) fat_free_clusters(bs, parentp->idx-> devmap_handle, mcl);674 (void) fat_free_clusters(bs, parentp->idx->service_id, mcl); 675 675 fibril_mutex_unlock(&parentp->idx->lock); 676 676 return rc; … … 789 789 assert(childp->lnkcnt == 1); 790 790 fibril_mutex_lock(&childp->idx->lock); 791 bs = block_bb_get(childp->idx-> devmap_handle);792 793 rc = _fat_block_get(&b, bs, childp->idx-> devmap_handle, childp->idx->pfc,791 bs = block_bb_get(childp->idx->service_id); 792 793 rc = _fat_block_get(&b, bs, childp->idx->service_id, childp->idx->pfc, 794 794 NULL, (childp->idx->pdi * sizeof(fat_dentry_t)) / BPS(bs), 795 795 BLOCK_FLAGS_NONE); … … 841 841 842 842 fibril_mutex_lock(&nodep->idx->lock); 843 bs = block_bb_get(nodep->idx-> devmap_handle);843 bs = block_bb_get(nodep->idx->service_id); 844 844 845 845 blocks = nodep->size / BPS(bs); … … 910 910 } 911 911 912 devmap_handle_t fat_device_get(fs_node_t *node)912 service_id_t fat_device_get(fs_node_t *node) 913 913 { 914 914 return 0; … … 940 940 941 941 static int 942 fat_mounted( devmap_handle_t devmap_handle, const char *opts, fs_index_t *index,942 fat_mounted(service_id_t service_id, const char *opts, fs_index_t *index, 943 943 aoff64_t *size, unsigned *linkcnt) 944 944 { … … 954 954 955 955 /* initialize libblock */ 956 rc = block_init(EXCHANGE_SERIALIZE, devmap_handle, BS_SIZE);956 rc = block_init(EXCHANGE_SERIALIZE, service_id, BS_SIZE); 957 957 if (rc != EOK) 958 958 return rc; 959 959 960 960 /* prepare the boot block */ 961 rc = block_bb_read( devmap_handle, BS_BLOCK);961 rc = block_bb_read(service_id, BS_BLOCK); 962 962 if (rc != EOK) { 963 block_fini( devmap_handle);963 block_fini(service_id); 964 964 return rc; 965 965 } 966 966 967 967 /* get the buffer with the boot sector */ 968 bs = block_bb_get( devmap_handle);968 bs = block_bb_get(service_id); 969 969 970 970 if (BPS(bs) != BS_SIZE) { 971 block_fini( devmap_handle);971 block_fini(service_id); 972 972 return ENOTSUP; 973 973 } 974 974 975 975 /* Initialize the block cache */ 976 rc = block_cache_init( devmap_handle, BPS(bs), 0 /* XXX */, cmode);976 rc = block_cache_init(service_id, BPS(bs), 0 /* XXX */, cmode); 977 977 if (rc != EOK) { 978 block_fini( devmap_handle);978 block_fini(service_id); 979 979 return rc; 980 980 } 981 981 982 982 /* Do some simple sanity checks on the file system. */ 983 rc = fat_sanity_check(bs, devmap_handle);983 rc = fat_sanity_check(bs, service_id); 984 984 if (rc != EOK) { 985 (void) block_cache_fini( devmap_handle);986 block_fini( devmap_handle);987 return rc; 988 } 989 990 rc = fat_idx_init_by_ devmap_handle(devmap_handle);985 (void) block_cache_fini(service_id); 986 block_fini(service_id); 987 return rc; 988 } 989 990 rc = fat_idx_init_by_service_id(service_id); 991 991 if (rc != EOK) { 992 (void) block_cache_fini( devmap_handle);993 block_fini( devmap_handle);992 (void) block_cache_fini(service_id); 993 block_fini(service_id); 994 994 return rc; 995 995 } … … 998 998 fs_node_t *rfn = (fs_node_t *)malloc(sizeof(fs_node_t)); 999 999 if (!rfn) { 1000 (void) block_cache_fini( devmap_handle);1001 block_fini( devmap_handle);1002 fat_idx_fini_by_ devmap_handle(devmap_handle);1000 (void) block_cache_fini(service_id); 1001 block_fini(service_id); 1002 fat_idx_fini_by_service_id(service_id); 1003 1003 return ENOMEM; 1004 1004 } … … 1007 1007 if (!rootp) { 1008 1008 free(rfn); 1009 (void) block_cache_fini( devmap_handle);1010 block_fini( devmap_handle);1011 fat_idx_fini_by_ devmap_handle(devmap_handle);1009 (void) block_cache_fini(service_id); 1010 block_fini(service_id); 1011 fat_idx_fini_by_service_id(service_id); 1012 1012 return ENOMEM; 1013 1013 } 1014 1014 fat_node_initialize(rootp); 1015 1015 1016 fat_idx_t *ridxp = fat_idx_get_by_pos( devmap_handle, FAT_CLST_ROOTPAR, 0);1016 fat_idx_t *ridxp = fat_idx_get_by_pos(service_id, FAT_CLST_ROOTPAR, 0); 1017 1017 if (!ridxp) { 1018 1018 free(rfn); 1019 1019 free(rootp); 1020 (void) block_cache_fini( devmap_handle);1021 block_fini( devmap_handle);1022 fat_idx_fini_by_ devmap_handle(devmap_handle);1020 (void) block_cache_fini(service_id); 1021 block_fini(service_id); 1022 fat_idx_fini_by_service_id(service_id); 1023 1023 return ENOMEM; 1024 1024 } … … 1045 1045 } 1046 1046 1047 static int fat_unmounted( devmap_handle_t devmap_handle)1047 static int fat_unmounted(service_id_t service_id) 1048 1048 { 1049 1049 fs_node_t *fn; … … 1051 1051 int rc; 1052 1052 1053 rc = fat_root_get(&fn, devmap_handle);1053 rc = fat_root_get(&fn, service_id); 1054 1054 if (rc != EOK) 1055 1055 return rc; … … 1076 1076 * stop using libblock for this instance. 1077 1077 */ 1078 (void) fat_node_fini_by_ devmap_handle(devmap_handle);1079 fat_idx_fini_by_ devmap_handle(devmap_handle);1080 (void) block_cache_fini( devmap_handle);1081 block_fini( devmap_handle);1078 (void) fat_node_fini_by_service_id(service_id); 1079 fat_idx_fini_by_service_id(service_id); 1080 (void) block_cache_fini(service_id); 1081 block_fini(service_id); 1082 1082 1083 1083 return EOK; … … 1085 1085 1086 1086 static int 1087 fat_read( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,1087 fat_read(service_id_t service_id, fs_index_t index, aoff64_t pos, 1088 1088 size_t *rbytes) 1089 1089 { … … 1095 1095 int rc; 1096 1096 1097 rc = fat_node_get(&fn, devmap_handle, index);1097 rc = fat_node_get(&fn, service_id, index); 1098 1098 if (rc != EOK) 1099 1099 return rc; … … 1110 1110 } 1111 1111 1112 bs = block_bb_get( devmap_handle);1112 bs = block_bb_get(service_id); 1113 1113 1114 1114 if (nodep->type == FAT_FILE) { … … 1213 1213 1214 1214 static int 1215 fat_write( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,1215 fat_write(service_id_t service_id, fs_index_t index, aoff64_t pos, 1216 1216 size_t *wbytes, aoff64_t *nsize) 1217 1217 { … … 1225 1225 int rc; 1226 1226 1227 rc = fat_node_get(&fn, devmap_handle, index);1227 rc = fat_node_get(&fn, service_id, index); 1228 1228 if (rc != EOK) 1229 1229 return rc; … … 1240 1240 } 1241 1241 1242 bs = block_bb_get( devmap_handle);1242 bs = block_bb_get(service_id); 1243 1243 1244 1244 /* … … 1299 1299 nclsts = (ROUND_UP(pos + bytes, BPC(bs)) - boundary) / BPC(bs); 1300 1300 /* create an independent chain of nclsts clusters in all FATs */ 1301 rc = fat_alloc_clusters(bs, devmap_handle, nclsts, &mcl, &lcl);1301 rc = fat_alloc_clusters(bs, service_id, nclsts, &mcl, &lcl); 1302 1302 if (rc != EOK) { 1303 1303 /* could not allocate a chain of nclsts clusters */ … … 1309 1309 rc = fat_fill_gap(bs, nodep, mcl, pos); 1310 1310 if (rc != EOK) { 1311 (void) fat_free_clusters(bs, devmap_handle, mcl);1311 (void) fat_free_clusters(bs, service_id, mcl); 1312 1312 (void) fat_node_put(fn); 1313 1313 async_answer_0(callid, rc); 1314 1314 return rc; 1315 1315 } 1316 rc = _fat_block_get(&b, bs, devmap_handle, lcl, NULL,1316 rc = _fat_block_get(&b, bs, service_id, lcl, NULL, 1317 1317 (pos / BPS(bs)) % SPC(bs), flags); 1318 1318 if (rc != EOK) { 1319 (void) fat_free_clusters(bs, devmap_handle, mcl);1319 (void) fat_free_clusters(bs, service_id, mcl); 1320 1320 (void) fat_node_put(fn); 1321 1321 async_answer_0(callid, rc); … … 1327 1327 rc = block_put(b); 1328 1328 if (rc != EOK) { 1329 (void) fat_free_clusters(bs, devmap_handle, mcl);1329 (void) fat_free_clusters(bs, service_id, mcl); 1330 1330 (void) fat_node_put(fn); 1331 1331 return rc; … … 1337 1337 rc = fat_append_clusters(bs, nodep, mcl, lcl); 1338 1338 if (rc != EOK) { 1339 (void) fat_free_clusters(bs, devmap_handle, mcl);1339 (void) fat_free_clusters(bs, service_id, mcl); 1340 1340 (void) fat_node_put(fn); 1341 1341 return rc; … … 1350 1350 1351 1351 static int 1352 fat_truncate( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t size)1352 fat_truncate(service_id_t service_id, fs_index_t index, aoff64_t size) 1353 1353 { 1354 1354 fs_node_t *fn; … … 1357 1357 int rc; 1358 1358 1359 rc = fat_node_get(&fn, devmap_handle, index);1359 rc = fat_node_get(&fn, service_id, index); 1360 1360 if (rc != EOK) 1361 1361 return rc; … … 1364 1364 nodep = FAT_NODE(fn); 1365 1365 1366 bs = block_bb_get( devmap_handle);1366 bs = block_bb_get(service_id); 1367 1367 1368 1368 if (nodep->size == size) { … … 1391 1391 } else { 1392 1392 fat_cluster_t lastc; 1393 rc = fat_cluster_walk(bs, devmap_handle, nodep->firstc,1393 rc = fat_cluster_walk(bs, service_id, nodep->firstc, 1394 1394 &lastc, NULL, (size - 1) / BPC(bs)); 1395 1395 if (rc != EOK) … … 1408 1408 } 1409 1409 1410 static int fat_close( devmap_handle_t devmap_handle, fs_index_t index)1410 static int fat_close(service_id_t service_id, fs_index_t index) 1411 1411 { 1412 1412 return EOK; 1413 1413 } 1414 1414 1415 static int fat_destroy( devmap_handle_t devmap_handle, fs_index_t index)1415 static int fat_destroy(service_id_t service_id, fs_index_t index) 1416 1416 { 1417 1417 fs_node_t *fn; … … 1419 1419 int rc; 1420 1420 1421 rc = fat_node_get(&fn, devmap_handle, index);1421 rc = fat_node_get(&fn, service_id, index); 1422 1422 if (rc != EOK) 1423 1423 return rc; … … 1436 1436 } 1437 1437 1438 static int fat_sync( devmap_handle_t devmap_handle, fs_index_t index)1438 static int fat_sync(service_id_t service_id, fs_index_t index) 1439 1439 { 1440 1440 fs_node_t *fn; 1441 int rc = fat_node_get(&fn, devmap_handle, index);1441 int rc = fat_node_get(&fn, service_id, index); 1442 1442 if (rc != EOK) 1443 1443 return rc; -
uspace/srv/fs/locfs/Makefile
r3751a08 r16dc887 31 31 LIBS = $(LIBFS_PREFIX)/libfs.a 32 32 EXTRA_CFLAGS += -I$(LIBFS_PREFIX) 33 BINARY = devfs33 BINARY = locfs 34 34 STATIC_NEEDED = y 35 35 36 36 SOURCES = \ 37 devfs.c \38 devfs_ops.c37 locfs.c \ 38 locfs_ops.c 39 39 40 40 include $(USPACE_PREFIX)/Makefile.common -
uspace/srv/fs/locfs/locfs.c
r3751a08 r16dc887 32 32 33 33 /** 34 * @file devfs.c35 * @brief Devicesfile system.34 * @file locfs.c 35 * @brief Location-service file system. 36 36 * 37 * Every device registered to device mapperis represented as a file in this37 * Every service registered with location service is represented as a file in this 38 38 * file system. 39 39 */ … … 46 46 #include <task.h> 47 47 #include <libfs.h> 48 #include " devfs.h"49 #include " devfs_ops.h"48 #include "locfs.h" 49 #include "locfs_ops.h" 50 50 51 #define NAME " devfs"51 #define NAME "locfs" 52 52 53 static vfs_info_t devfs_vfs_info = {53 static vfs_info_t locfs_vfs_info = { 54 54 .name = NAME, 55 55 .concurrent_read_write = false, … … 61 61 printf("%s: HelenOS Device Filesystem\n", NAME); 62 62 63 if (! devfs_init()) {64 printf("%s: failed to initialize devfs\n", NAME);63 if (!locfs_init()) { 64 printf("%s: failed to initialize locfs\n", NAME); 65 65 return -1; 66 66 } … … 73 73 } 74 74 75 int rc = fs_register(vfs_sess, & devfs_vfs_info, &devfs_ops,76 & devfs_libfs_ops);75 int rc = fs_register(vfs_sess, &locfs_vfs_info, &locfs_ops, 76 &locfs_libfs_ops); 77 77 if (rc != EOK) { 78 78 printf("%s: Failed to register file system (%d)\n", NAME, rc); -
uspace/srv/fs/locfs/locfs.h
r3751a08 r16dc887 31 31 */ 32 32 33 #ifndef DEVFS_DEVFS_H_34 #define DEVFS_DEVFS_H_33 #ifndef LOCFS_LOCFS_H_ 34 #define LOCFS_LOCFS_H_ 35 35 36 36 #include <libfs.h> 37 37 38 extern vfs_out_ops_t devfs_ops;39 extern libfs_ops_t devfs_libfs_ops;38 extern vfs_out_ops_t locfs_ops; 39 extern libfs_ops_t locfs_libfs_ops; 40 40 41 41 #endif -
uspace/srv/fs/locfs/locfs_ops.c
r3751a08 r16dc887 32 32 33 33 /** 34 * @file devfs_ops.c35 * @brief Implementation of VFS operations for the devfs file system server.34 * @file locfs_ops.c 35 * @brief Implementation of VFS operations for the locfs file system server. 36 36 */ 37 37 … … 44 44 #include <fibril_synch.h> 45 45 #include <adt/hash_table.h> 46 #include <ipc/ devmap.h>46 #include <ipc/loc.h> 47 47 #include <sys/stat.h> 48 48 #include <libfs.h> 49 49 #include <assert.h> 50 #include " devfs.h"51 #include " devfs_ops.h"50 #include "locfs.h" 51 #include "locfs_ops.h" 52 52 53 53 typedef struct { 54 devmap_handle_type_t type;55 devmap_handle_t handle;56 } devfs_node_t;57 58 /** Opened devices structure */54 loc_object_type_t type; 55 service_id_t service_id; 56 } locfs_node_t; 57 58 /** Opened services structure */ 59 59 typedef struct { 60 devmap_handle_t handle;60 service_id_t service_id; 61 61 async_sess_t *sess; /**< If NULL, the structure is incomplete. */ 62 62 size_t refcount; 63 63 link_t link; 64 64 fibril_condvar_t cv; /**< Broadcast when completed. */ 65 } device_t;66 67 /** Hash table of opened devices */68 static hash_table_t devices;65 } service_t; 66 67 /** Hash table of opened services */ 68 static hash_table_t services; 69 69 70 70 /** Hash table mutex */ 71 static FIBRIL_MUTEX_INITIALIZE( devices_mutex);72 73 #define DEVICES_KEYS 174 #define DEVICES_KEY_HANDLE 075 #define DEVICES_BUCKETS 25671 static FIBRIL_MUTEX_INITIALIZE(services_mutex); 72 73 #define SERVICES_KEYS 1 74 #define SERVICES_KEY_HANDLE 0 75 #define SERVICES_BUCKETS 256 76 76 77 77 /* Implementation of hash table interface for the nodes hash table. */ 78 static hash_index_t devices_hash(unsigned long key[])79 { 80 return key[ DEVICES_KEY_HANDLE] % DEVICES_BUCKETS;81 } 82 83 static int devices_compare(unsigned long key[], hash_count_t keys, link_t *item)84 { 85 device_t *dev = hash_table_get_instance(item, device_t, link);86 return (dev-> handle == (devmap_handle_t) key[DEVICES_KEY_HANDLE]);87 } 88 89 static void devices_remove_callback(link_t *item)90 { 91 free(hash_table_get_instance(item, device_t, link));92 } 93 94 static hash_table_operations_t devices_ops = {95 .hash = devices_hash,96 .compare = devices_compare,97 .remove_callback = devices_remove_callback78 static hash_index_t services_hash(unsigned long key[]) 79 { 80 return key[SERVICES_KEY_HANDLE] % SERVICES_BUCKETS; 81 } 82 83 static int services_compare(unsigned long key[], hash_count_t keys, link_t *item) 84 { 85 service_t *dev = hash_table_get_instance(item, service_t, link); 86 return (dev->service_id == (service_id_t) key[SERVICES_KEY_HANDLE]); 87 } 88 89 static void services_remove_callback(link_t *item) 90 { 91 free(hash_table_get_instance(item, service_t, link)); 92 } 93 94 static hash_table_operations_t services_ops = { 95 .hash = services_hash, 96 .compare = services_compare, 97 .remove_callback = services_remove_callback 98 98 }; 99 99 100 static int devfs_node_get_internal(fs_node_t **rfn, devmap_handle_type_t type,101 devmap_handle_t handle)102 { 103 devfs_node_t *node = (devfs_node_t *) malloc(sizeof(devfs_node_t));100 static int locfs_node_get_internal(fs_node_t **rfn, loc_object_type_t type, 101 service_id_t service_id) 102 { 103 locfs_node_t *node = (locfs_node_t *) malloc(sizeof(locfs_node_t)); 104 104 if (node == NULL) { 105 105 *rfn = NULL; … … 116 116 fs_node_initialize(*rfn); 117 117 node->type = type; 118 node-> handle = handle;118 node->service_id = service_id; 119 119 120 120 (*rfn)->data = node; … … 122 122 } 123 123 124 static int devfs_root_get(fs_node_t **rfn, devmap_handle_t devmap_handle)125 { 126 return devfs_node_get_internal(rfn, DEV_HANDLE_NONE, 0);127 } 128 129 static int devfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component)130 { 131 devfs_node_t *node = (devfs_node_t *) pfn->data;124 static int locfs_root_get(fs_node_t **rfn, service_id_t service_id) 125 { 126 return locfs_node_get_internal(rfn, LOC_OBJECT_NONE, 0); 127 } 128 129 static int locfs_match(fs_node_t **rfn, fs_node_t *pfn, const char *component) 130 { 131 locfs_node_t *node = (locfs_node_t *) pfn->data; 132 132 int ret; 133 133 134 if (node-> handle== 0) {134 if (node->service_id == 0) { 135 135 /* Root directory */ 136 136 137 dev_desc_t *devs;138 size_t count = devmap_get_namespaces(&devs);137 loc_sdesc_t *nspaces; 138 size_t count = loc_get_namespaces(&nspaces); 139 139 140 140 if (count > 0) { … … 142 142 for (pos = 0; pos < count; pos++) { 143 143 /* Ignore root namespace */ 144 if (str_cmp( devs[pos].name, "") == 0)144 if (str_cmp(nspaces[pos].name, "") == 0) 145 145 continue; 146 146 147 if (str_cmp( devs[pos].name, component) == 0) {148 ret = devfs_node_get_internal(rfn, DEV_HANDLE_NAMESPACE, devs[pos].handle);149 free( devs);147 if (str_cmp(nspaces[pos].name, component) == 0) { 148 ret = locfs_node_get_internal(rfn, LOC_OBJECT_NAMESPACE, nspaces[pos].id); 149 free(nspaces); 150 150 return ret; 151 151 } 152 152 } 153 153 154 free( devs);154 free(nspaces); 155 155 } 156 156 157 157 /* Search root namespace */ 158 devmap_handle_t namespace; 159 if (devmap_namespace_get_handle("", &namespace, 0) == EOK) { 160 count = devmap_get_devices(namespace, &devs); 158 service_id_t namespace; 159 loc_sdesc_t *svcs; 160 if (loc_namespace_get_id("", &namespace, 0) == EOK) { 161 count = loc_get_services(namespace, &svcs); 161 162 162 163 if (count > 0) { 163 164 size_t pos; 164 165 for (pos = 0; pos < count; pos++) { 165 if (str_cmp( devs[pos].name, component) == 0) {166 ret = devfs_node_get_internal(rfn, DEV_HANDLE_DEVICE, devs[pos].handle);167 free( devs);166 if (str_cmp(svcs[pos].name, component) == 0) { 167 ret = locfs_node_get_internal(rfn, LOC_OBJECT_SERVICE, svcs[pos].id); 168 free(svcs); 168 169 return ret; 169 170 } 170 171 } 171 172 172 free( devs);173 free(svcs); 173 174 } 174 175 } … … 178 179 } 179 180 180 if (node->type == DEV_HANDLE_NAMESPACE) {181 if (node->type == LOC_OBJECT_NAMESPACE) { 181 182 /* Namespace directory */ 182 183 183 dev_desc_t *devs;184 size_t count = devmap_get_devices(node->handle, &devs);184 loc_sdesc_t *svcs; 185 size_t count = loc_get_services(node->service_id, &svcs); 185 186 if (count > 0) { 186 187 size_t pos; 187 188 for (pos = 0; pos < count; pos++) { 188 if (str_cmp( devs[pos].name, component) == 0) {189 ret = devfs_node_get_internal(rfn, DEV_HANDLE_DEVICE, devs[pos].handle);190 free( devs);189 if (str_cmp(svcs[pos].name, component) == 0) { 190 ret = locfs_node_get_internal(rfn, LOC_OBJECT_SERVICE, svcs[pos].id); 191 free(svcs); 191 192 return ret; 192 193 } 193 194 } 194 195 195 free( devs);196 free(svcs); 196 197 } 197 198 … … 204 205 } 205 206 206 static int devfs_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle, fs_index_t index)207 { 208 return devfs_node_get_internal(rfn, devmap_handle_probe(index), index);209 } 210 211 static int devfs_node_open(fs_node_t *fn)212 { 213 devfs_node_t *node = (devfs_node_t *) fn->data;214 215 if (node-> handle== 0) {207 static int locfs_node_get(fs_node_t **rfn, service_id_t service_id, fs_index_t index) 208 { 209 return locfs_node_get_internal(rfn, loc_id_probe(index), index); 210 } 211 212 static int locfs_node_open(fs_node_t *fn) 213 { 214 locfs_node_t *node = (locfs_node_t *) fn->data; 215 216 if (node->service_id == 0) { 216 217 /* Root directory */ 217 218 return EOK; 218 219 } 219 220 220 devmap_handle_type_t type = devmap_handle_probe(node->handle);221 222 if (type == DEV_HANDLE_NAMESPACE) {221 loc_object_type_t type = loc_id_probe(node->service_id); 222 223 if (type == LOC_OBJECT_NAMESPACE) { 223 224 /* Namespace directory */ 224 225 return EOK; 225 226 } 226 227 227 if (type == DEV_HANDLE_DEVICE) {228 if (type == LOC_OBJECT_SERVICE) { 228 229 /* Device node */ 229 230 230 231 unsigned long key[] = { 231 [ DEVICES_KEY_HANDLE] = (unsigned long) node->handle232 [SERVICES_KEY_HANDLE] = (unsigned long) node->service_id 232 233 }; 233 234 link_t *lnk; 234 235 235 fibril_mutex_lock(& devices_mutex);236 fibril_mutex_lock(&services_mutex); 236 237 restart: 237 lnk = hash_table_find(& devices, key);238 lnk = hash_table_find(&services, key); 238 239 if (lnk == NULL) { 239 device_t *dev = (device_t *) malloc(sizeof(device_t));240 service_t *dev = (service_t *) malloc(sizeof(service_t)); 240 241 if (dev == NULL) { 241 fibril_mutex_unlock(& devices_mutex);242 fibril_mutex_unlock(&services_mutex); 242 243 return ENOMEM; 243 244 } 244 245 245 dev-> handle = node->handle;246 dev->service_id = node->service_id; 246 247 247 248 /* Mark as incomplete */ … … 255 256 * below. 256 257 */ 257 hash_table_insert(& devices, key, &dev->link);258 hash_table_insert(&services, key, &dev->link); 258 259 259 260 /* 260 * Drop the mutex to allow recursive devfs requests.261 * Drop the mutex to allow recursive locfs requests. 261 262 */ 262 fibril_mutex_unlock(& devices_mutex);263 264 async_sess_t *sess = devmap_device_connect(EXCHANGE_SERIALIZE,265 node->handle, 0);266 267 fibril_mutex_lock(& devices_mutex);263 fibril_mutex_unlock(&services_mutex); 264 265 async_sess_t *sess = loc_service_connect( 266 EXCHANGE_SERIALIZE, node->service_id, 0); 267 268 fibril_mutex_lock(&services_mutex); 268 269 269 270 /* … … 278 279 * entry and free the device structure. 279 280 */ 280 hash_table_remove(& devices, key, DEVICES_KEYS);281 fibril_mutex_unlock(& devices_mutex);281 hash_table_remove(&services, key, SERVICES_KEYS); 282 fibril_mutex_unlock(&services_mutex); 282 283 283 284 return ENOENT; … … 287 288 dev->sess = sess; 288 289 } else { 289 device_t *dev = hash_table_get_instance(lnk, device_t, link);290 service_t *dev = hash_table_get_instance(lnk, service_t, link); 290 291 291 292 if (!dev->sess) { … … 297 298 * fibril_condvar_wait(). 298 299 */ 299 fibril_condvar_wait(&dev->cv, & devices_mutex);300 fibril_condvar_wait(&dev->cv, &services_mutex); 300 301 goto restart; 301 302 } … … 304 305 } 305 306 306 fibril_mutex_unlock(& devices_mutex);307 fibril_mutex_unlock(&services_mutex); 307 308 308 309 return EOK; … … 312 313 } 313 314 314 static int devfs_node_put(fs_node_t *fn)315 static int locfs_node_put(fs_node_t *fn) 315 316 { 316 317 free(fn->data); … … 319 320 } 320 321 321 static int devfs_create_node(fs_node_t **rfn, devmap_handle_t devmap_handle, int lflag)322 static int locfs_create_node(fs_node_t **rfn, service_id_t service_id, int lflag) 322 323 { 323 324 assert((lflag & L_FILE) ^ (lflag & L_DIRECTORY)); … … 327 328 } 328 329 329 static int devfs_destroy_node(fs_node_t *fn)330 static int locfs_destroy_node(fs_node_t *fn) 330 331 { 331 332 return ENOTSUP; 332 333 } 333 334 334 static int devfs_link_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm)335 static int locfs_link_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm) 335 336 { 336 337 return ENOTSUP; 337 338 } 338 339 339 static int devfs_unlink_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm)340 static int locfs_unlink_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm) 340 341 { 341 342 return ENOTSUP; 342 343 } 343 344 344 static int devfs_has_children(bool *has_children, fs_node_t *fn)345 { 346 devfs_node_t *node = (devfs_node_t *) fn->data;347 348 if (node-> handle== 0) {349 size_t count = devmap_count_namespaces();345 static int locfs_has_children(bool *has_children, fs_node_t *fn) 346 { 347 locfs_node_t *node = (locfs_node_t *) fn->data; 348 349 if (node->service_id == 0) { 350 size_t count = loc_count_namespaces(); 350 351 if (count > 0) { 351 352 *has_children = true; … … 354 355 355 356 /* Root namespace */ 356 devmap_handle_t namespace;357 if ( devmap_namespace_get_handle("", &namespace, 0) == EOK) {358 count = devmap_count_devices(namespace);357 service_id_t namespace; 358 if (loc_namespace_get_id("", &namespace, 0) == EOK) { 359 count = loc_count_services(namespace); 359 360 if (count > 0) { 360 361 *has_children = true; … … 367 368 } 368 369 369 if (node->type == DEV_HANDLE_NAMESPACE) {370 size_t count = devmap_count_devices(node->handle);370 if (node->type == LOC_OBJECT_NAMESPACE) { 371 size_t count = loc_count_services(node->service_id); 371 372 if (count > 0) { 372 373 *has_children = true; … … 382 383 } 383 384 384 static fs_index_t devfs_index_get(fs_node_t *fn)385 { 386 devfs_node_t *node = (devfs_node_t *) fn->data;387 return node-> handle;388 } 389 390 static aoff64_t devfs_size_get(fs_node_t *fn)385 static fs_index_t locfs_index_get(fs_node_t *fn) 386 { 387 locfs_node_t *node = (locfs_node_t *) fn->data; 388 return node->service_id; 389 } 390 391 static aoff64_t locfs_size_get(fs_node_t *fn) 391 392 { 392 393 return 0; 393 394 } 394 395 395 static unsigned int devfs_lnkcnt_get(fs_node_t *fn)396 { 397 devfs_node_t *node = (devfs_node_t *) fn->data;398 399 if (node-> handle== 0)396 static unsigned int locfs_lnkcnt_get(fs_node_t *fn) 397 { 398 locfs_node_t *node = (locfs_node_t *) fn->data; 399 400 if (node->service_id == 0) 400 401 return 0; 401 402 … … 403 404 } 404 405 405 static bool devfs_is_directory(fs_node_t *fn)406 { 407 devfs_node_t *node = (devfs_node_t *) fn->data;408 409 return ((node->type == DEV_HANDLE_NONE) || (node->type == DEV_HANDLE_NAMESPACE));410 } 411 412 static bool devfs_is_file(fs_node_t *fn)413 { 414 devfs_node_t *node = (devfs_node_t *) fn->data;415 416 return (node->type == DEV_HANDLE_DEVICE);417 } 418 419 static devmap_handle_t devfs_device_get(fs_node_t *fn)420 { 421 devfs_node_t *node = (devfs_node_t *) fn->data;422 423 if (node->type == DEV_HANDLE_DEVICE)424 return node-> handle;406 static bool locfs_is_directory(fs_node_t *fn) 407 { 408 locfs_node_t *node = (locfs_node_t *) fn->data; 409 410 return ((node->type == LOC_OBJECT_NONE) || (node->type == LOC_OBJECT_NAMESPACE)); 411 } 412 413 static bool locfs_is_file(fs_node_t *fn) 414 { 415 locfs_node_t *node = (locfs_node_t *) fn->data; 416 417 return (node->type == LOC_OBJECT_SERVICE); 418 } 419 420 static service_id_t locfs_device_get(fs_node_t *fn) 421 { 422 locfs_node_t *node = (locfs_node_t *) fn->data; 423 424 if (node->type == LOC_OBJECT_SERVICE) 425 return node->service_id; 425 426 426 427 return 0; … … 428 429 429 430 /** libfs operations */ 430 libfs_ops_t devfs_libfs_ops = {431 .root_get = devfs_root_get,432 .match = devfs_match,433 .node_get = devfs_node_get,434 .node_open = devfs_node_open,435 .node_put = devfs_node_put,436 .create = devfs_create_node,437 .destroy = devfs_destroy_node,438 .link = devfs_link_node,439 .unlink = devfs_unlink_node,440 .has_children = devfs_has_children,441 .index_get = devfs_index_get,442 .size_get = devfs_size_get,443 .lnkcnt_get = devfs_lnkcnt_get,444 .is_directory = devfs_is_directory,445 .is_file = devfs_is_file,446 .device_get = devfs_device_get431 libfs_ops_t locfs_libfs_ops = { 432 .root_get = locfs_root_get, 433 .match = locfs_match, 434 .node_get = locfs_node_get, 435 .node_open = locfs_node_open, 436 .node_put = locfs_node_put, 437 .create = locfs_create_node, 438 .destroy = locfs_destroy_node, 439 .link = locfs_link_node, 440 .unlink = locfs_unlink_node, 441 .has_children = locfs_has_children, 442 .index_get = locfs_index_get, 443 .size_get = locfs_size_get, 444 .lnkcnt_get = locfs_lnkcnt_get, 445 .is_directory = locfs_is_directory, 446 .is_file = locfs_is_file, 447 .device_get = locfs_device_get 447 448 }; 448 449 449 bool devfs_init(void)450 { 451 if (!hash_table_create(& devices, DEVICES_BUCKETS,452 DEVICES_KEYS, &devices_ops))450 bool locfs_init(void) 451 { 452 if (!hash_table_create(&services, SERVICES_BUCKETS, 453 SERVICES_KEYS, &services_ops)) 453 454 return false; 454 455 … … 456 457 } 457 458 458 static int devfs_mounted(devmap_handle_t devmap_handle, const char *opts,459 static int locfs_mounted(service_id_t service_id, const char *opts, 459 460 fs_index_t *index, aoff64_t *size, unsigned *lnkcnt) 460 461 { … … 465 466 } 466 467 467 static int devfs_unmounted(devmap_handle_t devmap_handle)468 static int locfs_unmounted(service_id_t service_id) 468 469 { 469 470 return ENOTSUP; … … 471 472 472 473 static int 473 devfs_read(devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,474 locfs_read(service_id_t service_id, fs_index_t index, aoff64_t pos, 474 475 size_t *rbytes) 475 476 { … … 482 483 } 483 484 484 dev_desc_t *desc;485 size_t count = devmap_get_namespaces(&desc);485 loc_sdesc_t *desc; 486 size_t count = loc_get_namespaces(&desc); 486 487 487 488 /* Get rid of root namespace */ … … 507 508 508 509 /* Search root namespace */ 509 devmap_handle_t namespace;510 if ( devmap_namespace_get_handle("", &namespace, 0) == EOK) {511 count = devmap_get_devices(namespace, &desc);510 service_id_t namespace; 511 if (loc_namespace_get_id("", &namespace, 0) == EOK) { 512 count = loc_get_services(namespace, &desc); 512 513 513 514 if (pos < count) { … … 525 526 } 526 527 527 devmap_handle_type_t type = devmap_handle_probe(index);528 529 if (type == DEV_HANDLE_NAMESPACE) {528 loc_object_type_t type = loc_id_probe(index); 529 530 if (type == LOC_OBJECT_NAMESPACE) { 530 531 /* Namespace directory */ 531 532 ipc_callid_t callid; … … 536 537 } 537 538 538 dev_desc_t *desc;539 size_t count = devmap_get_devices(index, &desc);539 loc_sdesc_t *desc; 540 size_t count = loc_get_services(index, &desc); 540 541 541 542 if (pos < count) { … … 551 552 } 552 553 553 if (type == DEV_HANDLE_DEVICE) {554 if (type == LOC_OBJECT_SERVICE) { 554 555 /* Device node */ 555 556 556 557 unsigned long key[] = { 557 [ DEVICES_KEY_HANDLE] = (unsigned long) index558 [SERVICES_KEY_HANDLE] = (unsigned long) index 558 559 }; 559 560 560 fibril_mutex_lock(& devices_mutex);561 link_t *lnk = hash_table_find(& devices, key);561 fibril_mutex_lock(&services_mutex); 562 link_t *lnk = hash_table_find(&services, key); 562 563 if (lnk == NULL) { 563 fibril_mutex_unlock(& devices_mutex);564 fibril_mutex_unlock(&services_mutex); 564 565 return ENOENT; 565 566 } 566 567 567 device_t *dev = hash_table_get_instance(lnk, device_t, link);568 service_t *dev = hash_table_get_instance(lnk, service_t, link); 568 569 assert(dev->sess); 569 570 570 571 ipc_callid_t callid; 571 572 if (!async_data_read_receive(&callid, NULL)) { 572 fibril_mutex_unlock(& devices_mutex);573 fibril_mutex_unlock(&services_mutex); 573 574 async_answer_0(callid, EINVAL); 574 575 return EINVAL; … … 579 580 580 581 ipc_call_t answer; 581 aid_t msg = async_send_4(exch, VFS_OUT_READ, devmap_handle,582 aid_t msg = async_send_4(exch, VFS_OUT_READ, service_id, 582 583 index, LOWER32(pos), UPPER32(pos), &answer); 583 584 … … 587 588 async_exchange_end(exch); 588 589 589 fibril_mutex_unlock(& devices_mutex);590 fibril_mutex_unlock(&services_mutex); 590 591 591 592 /* Wait for reply from the driver. */ … … 601 602 602 603 static int 603 devfs_write(devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,604 locfs_write(service_id_t service_id, fs_index_t index, aoff64_t pos, 604 605 size_t *wbytes, aoff64_t *nsize) 605 606 { … … 607 608 return ENOTSUP; 608 609 609 devmap_handle_type_t type = devmap_handle_probe(index);610 611 if (type == DEV_HANDLE_NAMESPACE) {610 loc_object_type_t type = loc_id_probe(index); 611 612 if (type == LOC_OBJECT_NAMESPACE) { 612 613 /* Namespace directory */ 613 614 return ENOTSUP; 614 615 } 615 616 616 if (type == DEV_HANDLE_DEVICE) {617 if (type == LOC_OBJECT_SERVICE) { 617 618 /* Device node */ 618 619 unsigned long key[] = { 619 [ DEVICES_KEY_HANDLE] = (unsigned long) index620 [SERVICES_KEY_HANDLE] = (unsigned long) index 620 621 }; 621 622 622 fibril_mutex_lock(& devices_mutex);623 link_t *lnk = hash_table_find(& devices, key);623 fibril_mutex_lock(&services_mutex); 624 link_t *lnk = hash_table_find(&services, key); 624 625 if (lnk == NULL) { 625 fibril_mutex_unlock(& devices_mutex);626 fibril_mutex_unlock(&services_mutex); 626 627 return ENOENT; 627 628 } 628 629 629 device_t *dev = hash_table_get_instance(lnk, device_t, link);630 service_t *dev = hash_table_get_instance(lnk, service_t, link); 630 631 assert(dev->sess); 631 632 632 633 ipc_callid_t callid; 633 634 if (!async_data_write_receive(&callid, NULL)) { 634 fibril_mutex_unlock(& devices_mutex);635 fibril_mutex_unlock(&services_mutex); 635 636 async_answer_0(callid, EINVAL); 636 637 return EINVAL; … … 641 642 642 643 ipc_call_t answer; 643 aid_t msg = async_send_4(exch, VFS_OUT_WRITE, devmap_handle,644 aid_t msg = async_send_4(exch, VFS_OUT_WRITE, service_id, 644 645 index, LOWER32(pos), UPPER32(pos), &answer); 645 646 … … 649 650 async_exchange_end(exch); 650 651 651 fibril_mutex_unlock(& devices_mutex);652 fibril_mutex_unlock(&services_mutex); 652 653 653 654 /* Wait for reply from the driver. */ … … 664 665 665 666 static int 666 devfs_truncate(devmap_handle_t devmap_handle, fs_index_t index, aoff64_t size)667 locfs_truncate(service_id_t service_id, fs_index_t index, aoff64_t size) 667 668 { 668 669 return ENOTSUP; 669 670 } 670 671 671 static int devfs_close(devmap_handle_t devmap_handle, fs_index_t index)672 static int locfs_close(service_id_t service_id, fs_index_t index) 672 673 { 673 674 if (index == 0) 674 675 return EOK; 675 676 676 devmap_handle_type_t type = devmap_handle_probe(index);677 678 if (type == DEV_HANDLE_NAMESPACE) {677 loc_object_type_t type = loc_id_probe(index); 678 679 if (type == LOC_OBJECT_NAMESPACE) { 679 680 /* Namespace directory */ 680 681 return EOK; 681 682 } 682 683 683 if (type == DEV_HANDLE_DEVICE) {684 if (type == LOC_OBJECT_SERVICE) { 684 685 unsigned long key[] = { 685 [ DEVICES_KEY_HANDLE] = (unsigned long) index686 [SERVICES_KEY_HANDLE] = (unsigned long) index 686 687 }; 687 688 688 fibril_mutex_lock(& devices_mutex);689 link_t *lnk = hash_table_find(& devices, key);689 fibril_mutex_lock(&services_mutex); 690 link_t *lnk = hash_table_find(&services, key); 690 691 if (lnk == NULL) { 691 fibril_mutex_unlock(& devices_mutex);692 fibril_mutex_unlock(&services_mutex); 692 693 return ENOENT; 693 694 } 694 695 695 device_t *dev = hash_table_get_instance(lnk, device_t, link);696 service_t *dev = hash_table_get_instance(lnk, service_t, link); 696 697 assert(dev->sess); 697 698 dev->refcount--; … … 699 700 if (dev->refcount == 0) { 700 701 async_hangup(dev->sess); 701 hash_table_remove(& devices, key, DEVICES_KEYS);702 } 703 704 fibril_mutex_unlock(& devices_mutex);702 hash_table_remove(&services, key, SERVICES_KEYS); 703 } 704 705 fibril_mutex_unlock(&services_mutex); 705 706 706 707 return EOK; … … 710 711 } 711 712 712 static int devfs_sync(devmap_handle_t devmap_handle, fs_index_t index)713 static int locfs_sync(service_id_t service_id, fs_index_t index) 713 714 { 714 715 if (index == 0) 715 716 return EOK; 716 717 717 devmap_handle_type_t type = devmap_handle_probe(index);718 719 if (type == DEV_HANDLE_NAMESPACE) {718 loc_object_type_t type = loc_id_probe(index); 719 720 if (type == LOC_OBJECT_NAMESPACE) { 720 721 /* Namespace directory */ 721 722 return EOK; 722 723 } 723 724 724 if (type == DEV_HANDLE_DEVICE) {725 if (type == LOC_OBJECT_SERVICE) { 725 726 unsigned long key[] = { 726 [ DEVICES_KEY_HANDLE] = (unsigned long) index727 [SERVICES_KEY_HANDLE] = (unsigned long) index 727 728 }; 728 729 729 fibril_mutex_lock(& devices_mutex);730 link_t *lnk = hash_table_find(& devices, key);730 fibril_mutex_lock(&services_mutex); 731 link_t *lnk = hash_table_find(&services, key); 731 732 if (lnk == NULL) { 732 fibril_mutex_unlock(& devices_mutex);733 fibril_mutex_unlock(&services_mutex); 733 734 return ENOENT; 734 735 } 735 736 736 device_t *dev = hash_table_get_instance(lnk, device_t, link);737 service_t *dev = hash_table_get_instance(lnk, service_t, link); 737 738 assert(dev->sess); 738 739 … … 741 742 742 743 ipc_call_t answer; 743 aid_t msg = async_send_2(exch, VFS_OUT_SYNC, devmap_handle,744 aid_t msg = async_send_2(exch, VFS_OUT_SYNC, service_id, 744 745 index, &answer); 745 746 746 747 async_exchange_end(exch); 747 748 748 fibril_mutex_unlock(& devices_mutex);749 fibril_mutex_unlock(&services_mutex); 749 750 750 751 /* Wait for reply from the driver */ … … 758 759 } 759 760 760 static int devfs_destroy(devmap_handle_t devmap_handle, fs_index_t index)761 static int locfs_destroy(service_id_t service_id, fs_index_t index) 761 762 { 762 763 return ENOTSUP; 763 764 } 764 765 765 vfs_out_ops_t devfs_ops = {766 .mounted = devfs_mounted,767 .unmounted = devfs_unmounted,768 .read = devfs_read,769 .write = devfs_write,770 .truncate = devfs_truncate,771 .close = devfs_close,772 .destroy = devfs_destroy,773 .sync = devfs_sync,766 vfs_out_ops_t locfs_ops = { 767 .mounted = locfs_mounted, 768 .unmounted = locfs_unmounted, 769 .read = locfs_read, 770 .write = locfs_write, 771 .truncate = locfs_truncate, 772 .close = locfs_close, 773 .destroy = locfs_destroy, 774 .sync = locfs_sync, 774 775 }; 775 776 -
uspace/srv/fs/locfs/locfs_ops.h
r3751a08 r16dc887 31 31 */ 32 32 33 #ifndef DEVFS_DEVFS_OPS_H_34 #define DEVFS_DEVFS_OPS_H_33 #ifndef LOCFS_LOCFS_OPS_H_ 34 #define LOCFS_LOCFS_OPS_H_ 35 35 36 36 #include <bool.h> 37 37 38 extern bool devfs_init(void);38 extern bool locfs_init(void); 39 39 40 40 #endif -
uspace/srv/fs/tmpfs/tmpfs.h
r3751a08 r16dc887 61 61 fs_node_t *bp; /**< Back pointer to the FS node. */ 62 62 fs_index_t index; /**< TMPFS node index. */ 63 devmap_handle_t devmap_handle;/**< Device handle. */63 service_id_t service_id;/**< Service ID of block device. */ 64 64 link_t nh_link; /**< Nodes hash table link. */ 65 65 tmpfs_dentry_type_t type; … … 74 74 75 75 extern bool tmpfs_init(void); 76 extern bool tmpfs_restore( devmap_handle_t);76 extern bool tmpfs_restore(service_id_t); 77 77 78 78 #endif -
uspace/srv/fs/tmpfs/tmpfs_dump.c
r3751a08 r16dc887 55 55 56 56 static bool 57 tmpfs_restore_recursion( devmap_handle_t dev, size_t *bufpos, size_t *buflen,57 tmpfs_restore_recursion(service_id_t dsid, size_t *bufpos, size_t *buflen, 58 58 aoff64_t *pos, fs_node_t *pfn) 59 59 { … … 68 68 uint32_t size; 69 69 70 if (block_seqread(d ev, bufpos, buflen, pos, &entry,70 if (block_seqread(dsid, bufpos, buflen, pos, &entry, 71 71 sizeof(entry)) != EOK) 72 72 return false; … … 82 82 return false; 83 83 84 rc = ops->create(&fn, d ev, L_FILE);84 rc = ops->create(&fn, dsid, L_FILE); 85 85 if (rc != EOK || fn == NULL) { 86 86 free(fname); … … 88 88 } 89 89 90 if (block_seqread(d ev, bufpos, buflen, pos, fname,90 if (block_seqread(dsid, bufpos, buflen, pos, fname, 91 91 entry.len) != EOK) { 92 92 (void) ops->destroy(fn); … … 104 104 free(fname); 105 105 106 if (block_seqread(d ev, bufpos, buflen, pos, &size,106 if (block_seqread(dsid, bufpos, buflen, pos, &size, 107 107 sizeof(size)) != EOK) 108 108 return false; … … 116 116 117 117 nodep->size = size; 118 if (block_seqread(d ev, bufpos, buflen, pos, nodep->data,118 if (block_seqread(dsid, bufpos, buflen, pos, nodep->data, 119 119 size) != EOK) 120 120 return false; … … 126 126 return false; 127 127 128 rc = ops->create(&fn, d ev, L_DIRECTORY);128 rc = ops->create(&fn, dsid, L_DIRECTORY); 129 129 if (rc != EOK || fn == NULL) { 130 130 free(fname); … … 132 132 } 133 133 134 if (block_seqread(d ev, bufpos, buflen, pos, fname,134 if (block_seqread(dsid, bufpos, buflen, pos, fname, 135 135 entry.len) != EOK) { 136 136 (void) ops->destroy(fn); … … 148 148 free(fname); 149 149 150 if (!tmpfs_restore_recursion(d ev, bufpos, buflen, pos,150 if (!tmpfs_restore_recursion(dsid, bufpos, buflen, pos, 151 151 fn)) 152 152 return false; … … 161 161 } 162 162 163 bool tmpfs_restore( devmap_handle_t dev)163 bool tmpfs_restore(service_id_t dsid) 164 164 { 165 165 libfs_ops_t *ops = &tmpfs_libfs_ops; … … 167 167 int rc; 168 168 169 rc = block_init(EXCHANGE_SERIALIZE, d ev, TMPFS_COMM_SIZE);169 rc = block_init(EXCHANGE_SERIALIZE, dsid, TMPFS_COMM_SIZE); 170 170 if (rc != EOK) 171 171 return false; … … 176 176 177 177 char tag[6]; 178 if (block_seqread(d ev, &bufpos, &buflen, &pos, tag, 5) != EOK)178 if (block_seqread(dsid, &bufpos, &buflen, &pos, tag, 5) != EOK) 179 179 goto error; 180 180 … … 183 183 goto error; 184 184 185 rc = ops->root_get(&fn, d ev);185 rc = ops->root_get(&fn, dsid); 186 186 if (rc != EOK) 187 187 goto error; 188 188 189 if (!tmpfs_restore_recursion(d ev, &bufpos, &buflen, &pos, fn))190 goto error; 191 192 block_fini(d ev);189 if (!tmpfs_restore_recursion(dsid, &bufpos, &buflen, &pos, fn)) 190 goto error; 191 192 block_fini(dsid); 193 193 return true; 194 194 195 195 error: 196 block_fini(d ev);196 block_fini(dsid); 197 197 return false; 198 198 } -
uspace/srv/fs/tmpfs/tmpfs_ops.c
r3751a08 r16dc887 69 69 /* Forward declarations of static functions. */ 70 70 static int tmpfs_match(fs_node_t **, fs_node_t *, const char *); 71 static int tmpfs_node_get(fs_node_t **, devmap_handle_t, fs_index_t);71 static int tmpfs_node_get(fs_node_t **, service_id_t, fs_index_t); 72 72 static int tmpfs_node_open(fs_node_t *); 73 73 static int tmpfs_node_put(fs_node_t *); 74 static int tmpfs_create_node(fs_node_t **, devmap_handle_t, int);74 static int tmpfs_create_node(fs_node_t **, service_id_t, int); 75 75 static int tmpfs_destroy_node(fs_node_t *); 76 76 static int tmpfs_link_node(fs_node_t *, fs_node_t *, const char *); … … 78 78 79 79 /* Implementation of helper functions. */ 80 static int tmpfs_root_get(fs_node_t **rfn, devmap_handle_t devmap_handle)81 { 82 return tmpfs_node_get(rfn, devmap_handle, TMPFS_SOME_ROOT);80 static int tmpfs_root_get(fs_node_t **rfn, service_id_t service_id) 81 { 82 return tmpfs_node_get(rfn, service_id, TMPFS_SOME_ROOT); 83 83 } 84 84 … … 114 114 } 115 115 116 static devmap_handle_t tmpfs_device_get(fs_node_t *fn)116 static service_id_t tmpfs_device_get(fs_node_t *fn) 117 117 { 118 118 return 0; … … 158 158 switch (keys) { 159 159 case 1: 160 return (nodep-> devmap_handle== key[NODES_KEY_DEV]);160 return (nodep->service_id == key[NODES_KEY_DEV]); 161 161 case 2: 162 return ((nodep-> devmap_handle== key[NODES_KEY_DEV]) &&162 return ((nodep->service_id == key[NODES_KEY_DEV]) && 163 163 (nodep->index == key[NODES_KEY_INDEX])); 164 164 default: … … 202 202 nodep->bp = NULL; 203 203 nodep->index = 0; 204 nodep-> devmap_handle= 0;204 nodep->service_id = 0; 205 205 nodep->type = TMPFS_NONE; 206 206 nodep->lnkcnt = 0; … … 226 226 } 227 227 228 static bool tmpfs_instance_init( devmap_handle_t devmap_handle)228 static bool tmpfs_instance_init(service_id_t service_id) 229 229 { 230 230 fs_node_t *rfn; 231 231 int rc; 232 232 233 rc = tmpfs_create_node(&rfn, devmap_handle, L_DIRECTORY);233 rc = tmpfs_create_node(&rfn, service_id, L_DIRECTORY); 234 234 if (rc != EOK || !rfn) 235 235 return false; … … 238 238 } 239 239 240 static void tmpfs_instance_done( devmap_handle_t devmap_handle)241 { 242 unsigned long key[] = { 243 [NODES_KEY_DEV] = devmap_handle240 static void tmpfs_instance_done(service_id_t service_id) 241 { 242 unsigned long key[] = { 243 [NODES_KEY_DEV] = service_id 244 244 }; 245 245 /* … … 270 270 } 271 271 272 int tmpfs_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle, fs_index_t index)273 { 274 unsigned long key[] = { 275 [NODES_KEY_DEV] = devmap_handle,272 int tmpfs_node_get(fs_node_t **rfn, service_id_t service_id, fs_index_t index) 273 { 274 unsigned long key[] = { 275 [NODES_KEY_DEV] = service_id, 276 276 [NODES_KEY_INDEX] = index 277 277 }; … … 299 299 } 300 300 301 int tmpfs_create_node(fs_node_t **rfn, devmap_handle_t devmap_handle, int lflag)301 int tmpfs_create_node(fs_node_t **rfn, service_id_t service_id, int lflag) 302 302 { 303 303 fs_node_t *rootfn; … … 318 318 nodep->bp->data = nodep; /* link the FS and TMPFS nodes */ 319 319 320 rc = tmpfs_root_get(&rootfn, devmap_handle);320 rc = tmpfs_root_get(&rootfn, service_id); 321 321 assert(rc == EOK); 322 322 if (!rootfn) … … 324 324 else 325 325 nodep->index = tmpfs_next_index++; 326 nodep-> devmap_handle = devmap_handle;326 nodep->service_id = service_id; 327 327 if (lflag & L_DIRECTORY) 328 328 nodep->type = TMPFS_DIRECTORY; … … 332 332 /* Insert the new node into the nodes hash table. */ 333 333 unsigned long key[] = { 334 [NODES_KEY_DEV] = nodep-> devmap_handle,334 [NODES_KEY_DEV] = nodep->service_id, 335 335 [NODES_KEY_INDEX] = nodep->index 336 336 }; … … 348 348 349 349 unsigned long key[] = { 350 [NODES_KEY_DEV] = nodep-> devmap_handle,350 [NODES_KEY_DEV] = nodep->service_id, 351 351 [NODES_KEY_INDEX] = nodep->index 352 352 }; … … 432 432 433 433 static int 434 tmpfs_mounted( devmap_handle_t devmap_handle, const char *opts,434 tmpfs_mounted(service_id_t service_id, const char *opts, 435 435 fs_index_t *index, aoff64_t *size, unsigned *lnkcnt) 436 436 { … … 439 439 440 440 /* Check if this device is not already mounted. */ 441 rc = tmpfs_root_get(&rootfn, devmap_handle);441 rc = tmpfs_root_get(&rootfn, service_id); 442 442 if ((rc == EOK) && (rootfn)) { 443 443 (void) tmpfs_node_put(rootfn); … … 446 446 447 447 /* Initialize TMPFS instance. */ 448 if (!tmpfs_instance_init( devmap_handle))448 if (!tmpfs_instance_init(service_id)) 449 449 return ENOMEM; 450 450 451 rc = tmpfs_root_get(&rootfn, devmap_handle);451 rc = tmpfs_root_get(&rootfn, service_id); 452 452 assert(rc == EOK); 453 453 tmpfs_node_t *rootp = TMPFS_NODE(rootfn); 454 454 if (str_cmp(opts, "restore") == 0) { 455 if (!tmpfs_restore( devmap_handle))455 if (!tmpfs_restore(service_id)) 456 456 return ELIMIT; 457 457 } … … 464 464 } 465 465 466 static int tmpfs_unmounted( devmap_handle_t devmap_handle)467 { 468 tmpfs_instance_done( devmap_handle);469 return EOK; 470 } 471 472 static int tmpfs_read( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,466 static int tmpfs_unmounted(service_id_t service_id) 467 { 468 tmpfs_instance_done(service_id); 469 return EOK; 470 } 471 472 static int tmpfs_read(service_id_t service_id, fs_index_t index, aoff64_t pos, 473 473 size_t *rbytes) 474 474 { … … 478 478 link_t *hlp; 479 479 unsigned long key[] = { 480 [NODES_KEY_DEV] = devmap_handle,480 [NODES_KEY_DEV] = service_id, 481 481 [NODES_KEY_INDEX] = index 482 482 }; … … 532 532 533 533 static int 534 tmpfs_write( devmap_handle_t devmap_handle, fs_index_t index, aoff64_t pos,534 tmpfs_write(service_id_t service_id, fs_index_t index, aoff64_t pos, 535 535 size_t *wbytes, aoff64_t *nsize) 536 536 { … … 540 540 link_t *hlp; 541 541 unsigned long key[] = { 542 [NODES_KEY_DEV] = devmap_handle,542 [NODES_KEY_DEV] = service_id, 543 543 [NODES_KEY_INDEX] = index 544 544 }; … … 594 594 } 595 595 596 static int tmpfs_truncate( devmap_handle_t devmap_handle, fs_index_t index,596 static int tmpfs_truncate(service_id_t service_id, fs_index_t index, 597 597 aoff64_t size) 598 598 { … … 601 601 */ 602 602 unsigned long key[] = { 603 [NODES_KEY_DEV] = devmap_handle,603 [NODES_KEY_DEV] = service_id, 604 604 [NODES_KEY_INDEX] = index 605 605 }; … … 629 629 } 630 630 631 static int tmpfs_close( devmap_handle_t devmap_handle, fs_index_t index)632 { 633 return EOK; 634 } 635 636 static int tmpfs_destroy( devmap_handle_t devmap_handle, fs_index_t index)631 static int tmpfs_close(service_id_t service_id, fs_index_t index) 632 { 633 return EOK; 634 } 635 636 static int tmpfs_destroy(service_id_t service_id, fs_index_t index) 637 637 { 638 638 link_t *hlp; 639 639 unsigned long key[] = { 640 [NODES_KEY_DEV] = devmap_handle,640 [NODES_KEY_DEV] = service_id, 641 641 [NODES_KEY_INDEX] = index 642 642 }; … … 649 649 } 650 650 651 static int tmpfs_sync( devmap_handle_t devmap_handle, fs_index_t index)651 static int tmpfs_sync(service_id_t service_id, fs_index_t index) 652 652 { 653 653 /* -
uspace/srv/hid/console/console.c
r3751a08 r16dc887 53 53 #include <sysinfo.h> 54 54 #include <event.h> 55 #include < devmap.h>55 #include <loc.h> 56 56 #include <fcntl.h> 57 57 #include <vfs/vfs.h> … … 81 81 size_t index; /**< Console index */ 82 82 size_t refcount; /**< Connection reference count */ 83 devmap_handle_t devmap_handle; /**< Device handle*/83 service_id_t service_id; /**< Service ID */ 84 84 keybuffer_t keybuffer; /**< Buffer for incoming keys. */ 85 85 screenbuffer_t scr; /**< Screenbuffer for saving screen … … 582 582 continue; 583 583 584 if (consoles[i]. devmap_handle == (devmap_handle_t) IPC_GET_ARG1(*icall)) {584 if (consoles[i].service_id == (service_id_t) IPC_GET_ARG1(*icall)) { 585 585 cons = &consoles[i]; 586 586 break; … … 721 721 } 722 722 723 static async_sess_t *connect_input(const char * dev_path)723 static async_sess_t *connect_input(const char *svc_path) 724 724 { 725 725 async_sess_t *sess; 726 726 async_exch_t *exch; 727 devmap_handle_t handle;728 729 int rc = devmap_device_get_handle(dev_path, &handle, 0);727 service_id_t service_id; 728 729 int rc = loc_service_get_id(svc_path, &service_id, 0); 730 730 if (rc == EOK) { 731 sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 0);731 sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 732 732 if (sess == NULL) { 733 733 printf("%s: Failed to connect to input server\n", NAME); … … 773 773 } 774 774 775 /* Register driver */776 int rc = devmap_driver_register(NAME, client_connection);775 /* Register server */ 776 int rc = loc_server_register(NAME, client_connection); 777 777 if (rc < 0) { 778 printf("%s: Unable to register driver (%d)\n", NAME, rc);778 printf("%s: Unable to register server (%d)\n", NAME, rc); 779 779 return false; 780 780 } … … 820 820 consoles[i].refcount = 0; 821 821 822 char vc[ DEVMAP_NAME_MAXLEN + 1];823 snprintf(vc, DEVMAP_NAME_MAXLEN, "%s/vc%zu", NAMESPACE, i);822 char vc[LOC_NAME_MAXLEN + 1]; 823 snprintf(vc, LOC_NAME_MAXLEN, "%s/vc%zu", NAMESPACE, i); 824 824 825 if ( devmap_device_register(vc, &consoles[i].devmap_handle) != EOK) {826 printf("%s: Unable to register device %s\n", NAME, vc);825 if (loc_service_register(vc, &consoles[i].service_id) != EOK) { 826 printf("%s: Unable to register service %s\n", NAME, vc); 827 827 return false; 828 828 } -
uspace/srv/hid/input/ctl/kbdev.c
r3751a08 r16dc887 48 48 #include <kbd_ctl.h> 49 49 #include <kbd_port.h> 50 #include <loc.h> 50 51 #include <stdlib.h> 52 #include <sys/typefmt.h> 51 53 #include <vfs/vfs_sess.h> 52 54 … … 70 72 /** Session with kbdev device */ 71 73 async_sess_t *sess; 72 73 /** File descriptor of open kbdev device */74 int fd;75 74 } kbdev_t; 76 75 … … 84 83 85 84 kbdev->kbd_dev = kdev; 86 kbdev->fd = -1;87 85 88 86 return kbdev; … … 93 91 if (kbdev->sess != NULL) 94 92 async_hangup(kbdev->sess); 95 if (kbdev->fd >= 0)96 close(kbdev->fd);97 93 free(kbdev); 98 94 } … … 100 96 static int kbdev_ctl_init(kbd_dev_t *kdev) 101 97 { 102 const char *pathname;103 98 async_sess_t *sess; 104 99 async_exch_t *exch; 105 100 kbdev_t *kbdev; 106 int fd;101 char *svc_name; 107 102 int rc; 108 103 109 pathname = kdev->dev_path; 104 if (asprintf(&svc_name, "devname%" PRIun, kdev->service_id) > 0) 105 svc_name = (char *) "unknown"; 110 106 111 fd = open(pathname, O_RDWR); 112 if (fd < 0) { 113 return -1; 114 } 115 116 sess = fd_session(EXCHANGE_SERIALIZE, fd); 107 sess = loc_service_connect(EXCHANGE_SERIALIZE, kdev->service_id, 0); 117 108 if (sess == NULL) { 118 printf("%s: Failed starting session with '%s '\n", NAME, pathname);119 close(fd);109 printf("%s: Failed starting session with '%s.'\n", NAME, 110 svc_name); 120 111 return -1; 121 112 } … … 124 115 if (kbdev == NULL) { 125 116 printf("%s: Failed allocating device structure for '%s'.\n", 126 NAME, pathname);117 NAME, svc_name); 127 118 return -1; 128 119 } 129 120 130 kbdev->fd = fd;131 121 kbdev->sess = sess; 132 122 133 123 exch = async_exchange_begin(sess); 134 124 if (exch == NULL) { 135 printf("%s: Failed starting exchange with '%s'.\n", NAME, pathname); 125 printf("%s: Failed starting exchange with '%s'.\n", NAME, 126 svc_name); 136 127 kbdev_destroy(kbdev); 137 128 return -1; … … 141 132 if (rc != EOK) { 142 133 printf("%s: Failed creating callback connection from '%s'.\n", 143 NAME, pathname);134 NAME, svc_name); 144 135 async_exchange_end(exch); 145 136 kbdev_destroy(kbdev); -
uspace/srv/hid/input/generic/input.c
r3751a08 r16dc887 38 38 39 39 #include <adt/list.h> 40 #include <bool.h> 40 41 #include <ipc/services.h> 41 42 #include <ipc/input.h> … … 53 54 #include <io/console.h> 54 55 #include <io/keycode.h> 55 #include < devmap.h>56 #include <loc.h> 56 57 #include <input.h> 57 58 #include <kbd.h> … … 275 276 kdev->port_ops = port; 276 277 kdev->ctl_ops = ctl; 277 kdev-> dev_path = NULL;278 kdev->service_id = 0; 278 279 279 280 /* Initialize port driver. */ … … 303 304 mdev->port_ops = port; 304 305 mdev->proto_ops = proto; 305 mdev-> dev_path = NULL;306 mdev->service_id = 0; 306 307 307 308 /* Initialize port driver. */ … … 324 325 /** Add new kbdev device. 325 326 * 326 * @param dev_path Filesystem path to the device (/dev/class/...)327 * @param service_id Service ID of the keyboard device 327 328 * 328 329 */ 329 static int kbd_add_kbdev( const char *dev_path)330 static int kbd_add_kbdev(service_id_t service_id) 330 331 { 331 332 kbd_dev_t *kdev = kbd_dev_new(); … … 333 334 return -1; 334 335 335 kdev-> dev_path = dev_path;336 kdev->service_id = service_id; 336 337 kdev->port_ops = NULL; 337 338 kdev->ctl_ops = &kbdev_ctl; … … 352 353 /** Add new mousedev device. 353 354 * 354 * @param dev_path Filesystem path to the device (/dev/class/...)355 * @param service_id Service ID of the mouse device 355 356 * 356 357 */ 357 static int mouse_add_mousedev( const char *dev_path)358 static int mouse_add_mousedev(service_id_t service_id) 358 359 { 359 360 mouse_dev_t *mdev = mouse_dev_new(); … … 361 362 return -1; 362 363 363 mdev-> dev_path = dev_path;364 mdev->service_id = service_id; 364 365 mdev->port_ops = NULL; 365 366 mdev->proto_ops = &mousedev_proto; … … 482 483 /** Periodically check for new input devices. 483 484 * 484 * Looks under / dev/class/keyboard and /dev/class/mouse.485 * Looks under /loc/class/keyboard and /loc/class/mouse. 485 486 * 486 487 * @param arg Ignored 487 488 * 488 489 */ 490 #include <sys/typefmt.h> 489 491 static int dev_discovery_fibril(void *arg) 490 492 { 491 char *dev_path; 492 size_t kbd_id = 1; 493 size_t mouse_id = 1; 493 category_id_t keyboard_cat, mouse_cat; 494 service_id_t *svcs; 495 size_t count, i; 496 bool already_known; 497 const char *dev_name = "todo"; 494 498 int rc; 499 500 rc = loc_category_get_id("keyboard", &keyboard_cat, IPC_FLAG_BLOCKING); 501 if (rc != EOK) { 502 printf("%s: Failed resolving category 'keyboard'.\n", NAME); 503 return ENOENT; 504 } 505 506 rc = loc_category_get_id("mouse", &mouse_cat, IPC_FLAG_BLOCKING); 507 if (rc != EOK) { 508 printf("%s: Failed resolving category 'mouse'.\n", NAME); 509 return ENOENT; 510 } 495 511 496 512 while (true) { … … 498 514 499 515 /* 500 * Check for new keyboard device 516 * Check for new keyboard devices 501 517 */ 502 rc = asprintf(&dev_path, "/dev/class/keyboard\\%zu", kbd_id); 503 if (rc < 0) 518 rc = loc_category_get_svcs(keyboard_cat, &svcs, &count); 519 if (rc != EOK) { 520 printf("%s: Failed getting list of keyboard devices.\n", 521 NAME); 504 522 continue; 505 506 if (kbd_add_kbdev(dev_path) == EOK) { 507 printf("%s: Connected keyboard device '%s'\n",508 NAME, dev_path);523 } 524 525 for (i = 0; i < count; i++) { 526 already_known = false; 509 527 510 /* XXX Handle device removal */ 511 ++kbd_id; 528 /* Determine whether we already know this device. */ 529 list_foreach(kbd_devs, kdev_link) { 530 kbd_dev_t *kdev = list_get_instance(kdev_link, 531 kbd_dev_t, kbd_devs); 532 if (kdev->service_id == svcs[i]) { 533 already_known = true; 534 break; 535 } 536 } 537 538 if (!already_known) { 539 if (kbd_add_kbdev(svcs[i]) == EOK) { 540 printf("%s: Connected keyboard device '%s'\n", 541 NAME, dev_name); 542 } 543 } 512 544 } 513 545 514 free(dev_path);546 /* XXX Handle device removal */ 515 547 516 548 /* 517 * Check for new mouse device 549 * Check for new mouse devices 518 550 */ 519 rc = asprintf(&dev_path, "/dev/class/mouse\\%zu", mouse_id); 520 if (rc < 0) 551 rc = loc_category_get_svcs(mouse_cat, &svcs, &count); 552 if (rc != EOK) { 553 printf("%s: Failed getting list of mouse devices.\n", 554 NAME); 521 555 continue; 522 523 if (mouse_add_mousedev(dev_path) == EOK) { 524 printf("%s: Connected mouse device '%s'\n",525 NAME, dev_path);556 } 557 558 for (i = 0; i < count; i++) { 559 already_known = false; 526 560 527 /* XXX Handle device removal */ 528 ++mouse_id; 561 /* Determine whether we already know this device. */ 562 list_foreach(mouse_devs, mdev_link) { 563 mouse_dev_t *mdev = list_get_instance(mdev_link, 564 mouse_dev_t, mouse_devs); 565 if (mdev->service_id == svcs[i]) { 566 already_known = true; 567 break; 568 } 569 } 570 571 if (!already_known) { 572 if (mouse_add_mousedev(svcs[i]) == EOK) { 573 printf("%s: Connected mouse device '%s'\n", 574 NAME, dev_name); 575 } 576 } 529 577 } 530 578 531 free(dev_path);579 /* XXX Handle device removal */ 532 580 } 533 581 … … 567 615 /* Add legacy keyboard devices. */ 568 616 kbd_add_legacy_devs(); 569 617 570 618 /* Add legacy mouse devices. */ 571 619 mouse_add_legacy_devs(); 572 620 573 621 /* Register driver */ 574 int rc = devmap_driver_register(NAME, client_connection);622 int rc = loc_server_register(NAME, client_connection); 575 623 if (rc < 0) { 576 printf("%s: Unable to register driver (%d)\n", NAME, rc);624 printf("%s: Unable to register server (%d)\n", NAME, rc); 577 625 return -1; 578 626 } 579 627 580 char kbd[ DEVMAP_NAME_MAXLEN + 1];581 snprintf(kbd, DEVMAP_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME);582 583 devmap_handle_t devmap_handle;584 if ( devmap_device_register(kbd, &devmap_handle) != EOK) {585 printf("%s: Unable to register device %s\n", NAME, kbd);628 char kbd[LOC_NAME_MAXLEN + 1]; 629 snprintf(kbd, LOC_NAME_MAXLEN, "%s/%s", NAMESPACE, NAME); 630 631 service_id_t service_id; 632 if (loc_service_register(kbd, &service_id) != EOK) { 633 printf("%s: Unable to register service %s\n", NAME, kbd); 586 634 return -1; 587 635 } -
uspace/srv/hid/input/include/kbd.h
r3751a08 r16dc887 40 40 41 41 #include <adt/list.h> 42 #include <ipc/loc.h> 42 43 43 44 struct kbd_port_ops; … … 49 50 link_t kbd_devs; 50 51 51 /** Path to the device(only for kbdev devices) */52 const char *dev_path;52 /** Service ID (only for kbdev devices) */ 53 service_id_t service_id; 53 54 54 55 /** Port ops */ -
uspace/srv/hid/input/include/mouse.h
r3751a08 r16dc887 39 39 40 40 #include <adt/list.h> 41 #include <ipc/loc.h> 41 42 42 43 struct mouse_port_ops; … … 47 48 link_t mouse_devs; 48 49 49 /** Path to the device (only for mouseev devices) */50 const char *dev_path;50 /** Service ID (only for mousedev devices) */ 51 service_id_t service_id; 51 52 52 53 /** Port ops */ -
uspace/srv/hid/input/port/adb.c
r3751a08 r16dc887 43 43 #include <fcntl.h> 44 44 #include <errno.h> 45 #include < devmap.h>45 #include <loc.h> 46 46 47 47 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); … … 66 66 { 67 67 const char *dev = "adb/kbd"; 68 devmap_handle_t handle;68 service_id_t service_id; 69 69 async_exch_t *exch; 70 70 int rc; … … 72 72 kbd_dev = kdev; 73 73 74 rc = devmap_device_get_handle(dev, &handle, 0);74 rc = loc_service_get_id(dev, &service_id, 0); 75 75 if (rc != EOK) 76 76 return rc; 77 77 78 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 0);78 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 79 79 if (dev_sess == NULL) { 80 80 printf("%s: Failed to connect to device\n", NAME); -
uspace/srv/hid/input/port/adb_mouse.c
r3751a08 r16dc887 41 41 #include <mouse.h> 42 42 #include <errno.h> 43 #include < devmap.h>43 #include <loc.h> 44 44 45 45 static mouse_dev_t *mouse_dev; … … 78 78 mouse_dev = mdev; 79 79 80 devmap_handle_t handle;81 int rc = devmap_device_get_handle(dev, &handle, 0);80 service_id_t service_id; 81 int rc = loc_service_get_id(dev, &service_id, 0); 82 82 if (rc != EOK) 83 83 return rc; 84 84 85 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 0);85 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 86 86 if (dev_sess == NULL) { 87 87 printf("%s: Failed to connect to device\n", NAME); -
uspace/srv/hid/input/port/chardev.c
r3751a08 r16dc887 40 40 #include <kbd_port.h> 41 41 #include <kbd.h> 42 #include < devmap.h>42 #include <loc.h> 43 43 #include <errno.h> 44 44 #include <stdio.h> … … 71 71 static int chardev_port_init(kbd_dev_t *kdev) 72 72 { 73 devmap_handle_t handle;73 service_id_t service_id; 74 74 async_exch_t *exch; 75 75 unsigned int i; … … 79 79 80 80 for (i = 0; i < num_devs; i++) { 81 rc = devmap_device_get_handle(in_devs[i], &handle, 0);81 rc = loc_service_get_id(in_devs[i], &service_id, 0); 82 82 if (rc == EOK) 83 83 break; … … 89 89 } 90 90 91 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle,91 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 92 92 IPC_FLAG_BLOCKING); 93 93 if (dev_sess == NULL) { -
uspace/srv/hid/input/port/chardev_mouse.c
r3751a08 r16dc887 39 39 #include <async.h> 40 40 #include <errno.h> 41 #include < devmap.h>41 #include <loc.h> 42 42 #include <input.h> 43 43 #include <mouse_port.h> … … 82 82 static int chardev_port_init(mouse_dev_t *mdev) 83 83 { 84 devmap_handle_t handle;84 service_id_t service_id; 85 85 unsigned int i; 86 86 int rc; … … 89 89 90 90 for (i = 0; i < num_devs; i++) { 91 rc = devmap_device_get_handle(in_devs[i], &handle, 0);91 rc = loc_service_get_id(in_devs[i], &service_id, 0); 92 92 if (rc == EOK) 93 93 break; … … 99 99 } 100 100 101 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle,101 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 102 102 IPC_FLAG_BLOCKING); 103 103 if (dev_sess == NULL) { -
uspace/srv/hid/input/proto/mousedev.c
r3751a08 r16dc887 44 44 #include <ipc/mouseev.h> 45 45 #include <input.h> 46 #include <loc.h> 46 47 #include <mouse.h> 47 48 #include <mouse_port.h> 48 49 #include <mouse_proto.h> 50 #include <sys/typefmt.h> 49 51 50 52 /** Mousedev softstate */ … … 55 57 /** Session to mouse device */ 56 58 async_sess_t *sess; 57 58 /** File descriptor of open mousedev device */59 int fd;60 59 } mousedev_t; 61 60 … … 67 66 68 67 mousedev->mouse_dev = mdev; 69 mousedev->fd = -1;70 68 71 69 return mousedev; … … 76 74 if (mousedev->sess != NULL) 77 75 async_hangup(mousedev->sess); 78 79 if (mousedev->fd >= 0)80 close(mousedev->fd);81 76 82 77 free(mousedev); … … 122 117 static int mousedev_proto_init(mouse_dev_t *mdev) 123 118 { 124 c onst char *pathname = mdev->dev_path;119 char *svc_name; 125 120 126 int fd = open(pathname, O_RDWR); 127 if (fd < 0) 128 return -1; 121 if (asprintf(&svc_name, "devname%" PRIun, mdev->service_id) > 0) 122 svc_name = (char *) "unknown"; 129 123 130 async_sess_t *sess = fd_session(EXCHANGE_SERIALIZE, fd); 124 async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE, 125 mdev->service_id, 0); 131 126 if (sess == NULL) { 132 printf("%s: Failed starting session with '%s'\n", NAME, pathname); 133 close(fd); 127 printf("%s: Failed starting session with '%s'\n", NAME, svc_name); 134 128 return -1; 135 129 } … … 138 132 if (mousedev == NULL) { 139 133 printf("%s: Failed allocating device structure for '%s'.\n", 140 NAME, pathname);134 NAME, svc_name); 141 135 return -1; 142 136 } 143 137 144 mousedev->fd = fd;145 138 mousedev->sess = sess; 146 139 147 140 async_exch_t *exch = async_exchange_begin(sess); 148 141 if (exch == NULL) { 149 printf("%s: Failed starting exchange with '%s'.\n", NAME, pathname); 142 printf("%s: Failed starting exchange with '%s'.\n", NAME, 143 svc_name); 150 144 mousedev_destroy(mousedev); 151 145 return -1; … … 157 151 if (rc != EOK) { 158 152 printf("%s: Failed creating callback connection from '%s'.\n", 159 NAME, pathname);153 NAME, svc_name); 160 154 mousedev_destroy(mousedev); 161 155 return -1; -
uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
r3751a08 r16dc887 39 39 #include <ddi.h> 40 40 #include <libarch/ddi.h> 41 #include < devmap.h>41 #include <loc.h> 42 42 #include <io/console.h> 43 43 #include <vfs/vfs.h> … … 90 90 printf(NAME ": S3C24xx touchscreen driver\n"); 91 91 92 rc = devmap_driver_register(NAME, s3c24xx_ts_connection);92 rc = loc_server_register(NAME, s3c24xx_ts_connection); 93 93 if (rc < 0) { 94 94 printf(NAME ": Unable to register driver.\n"); … … 103 103 return -1; 104 104 105 rc = devmap_device_register(NAMESPACE "/mouse", &ts->devmap_handle);105 rc = loc_service_register(NAMESPACE "/mouse", &ts->service_id); 106 106 if (rc != EOK) { 107 107 printf(NAME ": Unable to register device %s.\n", -
uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.h
r3751a08 r16dc887 124 124 int client_phone; 125 125 126 /** Device handle*/127 devmap_handle_t devmap_handle;126 /** Service ID */ 127 service_id_t service_id; 128 128 129 129 /** Device/driver state */ -
uspace/srv/hw/bus/cuda_adb/cuda_adb.c
r3751a08 r16dc887 43 43 #include <ddi.h> 44 44 #include <libarch/ddi.h> 45 #include < devmap.h>45 #include <loc.h> 46 46 #include <sysinfo.h> 47 47 #include <errno.h> … … 147 147 int main(int argc, char *argv[]) 148 148 { 149 devmap_handle_t devmap_handle;149 service_id_t service_id; 150 150 int rc; 151 151 int i; … … 155 155 for (i = 0; i < ADB_MAX_ADDR; ++i) { 156 156 adb_dev[i].client_phone = -1; 157 adb_dev[i]. devmap_handle= 0;158 } 159 160 rc = devmap_driver_register(NAME, cuda_connection);157 adb_dev[i].service_id = 0; 158 } 159 160 rc = loc_server_register(NAME, cuda_connection); 161 161 if (rc < 0) { 162 printf(NAME ": Unable to register driver.\n");162 printf(NAME ": Unable to register server.\n"); 163 163 return rc; 164 164 } 165 165 166 rc = devmap_device_register("adb/kbd", &devmap_handle);166 rc = loc_service_register("adb/kbd", &service_id); 167 167 if (rc != EOK) { 168 printf(NAME ": Unable to register device %s.\n", "adb/kdb");168 printf(NAME ": Unable to register service %s.\n", "adb/kdb"); 169 169 return rc; 170 170 } 171 171 172 adb_dev[2]. devmap_handle = devmap_handle;173 adb_dev[8]. devmap_handle = devmap_handle;174 175 rc = devmap_device_register("adb/mouse", &devmap_handle);172 adb_dev[2].service_id = service_id; 173 adb_dev[8].service_id = service_id; 174 175 rc = loc_service_register("adb/mouse", &service_id); 176 176 if (rc != EOK) { 177 printf(NAME ": Unable to register device %s.\n", "adb/mouse");177 printf(NAME ": Unable to register servise %s.\n", "adb/mouse"); 178 178 return rc; 179 179 } 180 180 181 adb_dev[9]. devmap_handle = devmap_handle;181 adb_dev[9].service_id = service_id; 182 182 183 183 if (cuda_init() < 0) { … … 198 198 ipc_call_t call; 199 199 sysarg_t method; 200 devmap_handle_t dh;200 service_id_t dsid; 201 201 int retval; 202 202 int dev_addr, i; 203 203 204 204 /* Get the device handle. */ 205 d h= IPC_GET_ARG1(*icall);205 dsid = IPC_GET_ARG1(*icall); 206 206 207 207 /* Determine which disk device is the client connecting to. */ 208 208 dev_addr = -1; 209 209 for (i = 0; i < ADB_MAX_ADDR; i++) { 210 if (adb_dev[i]. devmap_handle == dh)210 if (adb_dev[i].service_id == dsid) 211 211 dev_addr = i; 212 212 } … … 242 242 */ 243 243 for (i = 0; i < ADB_MAX_ADDR; ++i) { 244 if (adb_dev[i]. devmap_handle == dh) {244 if (adb_dev[i].service_id == dsid) { 245 245 adb_dev[i].client_phone = IPC_GET_ARG5(call); 246 246 } -
uspace/srv/hw/bus/cuda_adb/cuda_adb.h
r3751a08 r16dc887 38 38 39 39 #include <sys/types.h> 40 #include <ipc/ devmap.h>40 #include <ipc/loc.h> 41 41 #include <fibril_synch.h> 42 42 … … 104 104 105 105 typedef struct { 106 devmap_handle_t devmap_handle;106 service_id_t service_id; 107 107 int client_phone; 108 108 } adb_dev_t; -
uspace/srv/hw/char/i8042/i8042.c
r3751a08 r16dc887 39 39 #include <ddi.h> 40 40 #include <libarch/ddi.h> 41 #include < devmap.h>41 #include <loc.h> 42 42 #include <async.h> 43 43 #include <async_obsolete.h> … … 135 135 printf(NAME ": i8042 PS/2 port driver\n"); 136 136 137 rc = devmap_driver_register(NAME, i8042_connection);137 rc = loc_server_register(NAME, i8042_connection); 138 138 if (rc < 0) { 139 printf(NAME ": Unable to register driver.\n");139 printf(NAME ": Unable to register server.\n"); 140 140 return rc; 141 141 } … … 148 148 149 149 snprintf(name, 16, "%s/ps2%c", NAMESPACE, dchar[i]); 150 rc = devmap_device_register(name, &i8042_port[i].devmap_handle);150 rc = loc_service_register(name, &i8042_port[i].service_id); 151 151 if (rc != EOK) { 152 152 printf(NAME ": Unable to register device %s.\n", name); … … 221 221 ipc_call_t call; 222 222 sysarg_t method; 223 devmap_handle_t dh;223 service_id_t dsid; 224 224 int retval; 225 225 int dev_id, i; … … 228 228 229 229 /* Get the device handle. */ 230 d h= IPC_GET_ARG1(*icall);230 dsid = IPC_GET_ARG1(*icall); 231 231 232 232 /* Determine which disk device is the client connecting to. */ 233 233 dev_id = -1; 234 234 for (i = 0; i < MAX_DEVS; i++) { 235 if (i8042_port[i]. devmap_handle == dh)235 if (i8042_port[i].service_id == dsid) 236 236 dev_id = i; 237 237 } -
uspace/srv/hw/char/i8042/i8042.h
r3751a08 r16dc887 52 52 /** Softstate structure, one for each serial port (primary and aux). */ 53 53 typedef struct { 54 devmap_handle_t devmap_handle;54 service_id_t service_id; 55 55 int client_phone; 56 56 } i8042_port_t; -
uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
r3751a08 r16dc887 39 39 #include <ddi.h> 40 40 #include <libarch/ddi.h> 41 #include < devmap.h>41 #include <loc.h> 42 42 #include <ipc/char.h> 43 43 #include <async.h> … … 83 83 printf(NAME ": S3C24xx on-chip UART driver\n"); 84 84 85 rc = devmap_driver_register(NAME, s3c24xx_uart_connection);85 rc = loc_server_register(NAME, s3c24xx_uart_connection); 86 86 if (rc < 0) { 87 printf(NAME ": Unable to register driver.\n");87 printf(NAME ": Unable to register server.\n"); 88 88 return -1; 89 89 } … … 96 96 return -1; 97 97 98 rc = devmap_device_register(NAMESPACE "/" NAME, &uart->devmap_handle);98 rc = loc_service_register(NAMESPACE "/" NAME, &uart->service_id); 99 99 if (rc != EOK) { 100 100 printf(NAME ": Unable to register device %s.\n", -
uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.h
r3751a08 r16dc887 87 87 int client_phone; 88 88 89 /** Device handle*/90 devmap_handle_t devmap_handle;89 /** Service ID */ 90 service_id_t service_id; 91 91 } s3c24xx_uart_t; 92 92 -
uspace/srv/hw/irc/i8259/i8259.c
r3751a08 r16dc887 50 50 #include <async.h> 51 51 #include <stdio.h> 52 #include <ipc/ devmap.h>52 #include <ipc/loc.h> 53 53 54 54 #define NAME "i8259" -
uspace/srv/hw/irc/obio/obio.c
r3751a08 r16dc887 55 55 #include <async.h> 56 56 #include <stdio.h> 57 #include <ipc/ devmap.h>57 #include <ipc/loc.h> 58 58 59 59 #define NAME "obio" -
uspace/srv/loc/Makefile
r3751a08 r16dc887 29 29 30 30 USPACE_PREFIX = ../.. 31 BINARY = devmap31 BINARY = loc 32 32 STATIC_NEEDED = y 33 33 34 34 SOURCES = \ 35 devmap.c 35 category.c \ 36 loc.c 36 37 37 38 include $(USPACE_PREFIX)/Makefile.common -
uspace/srv/vfs/vfs.h
r3751a08 r16dc887 38 38 #include <fibril_synch.h> 39 39 #include <sys/types.h> 40 #include < devmap.h>40 #include <loc.h> 41 41 #include <bool.h> 42 42 #include <ipc/vfs.h> … … 61 61 #define VFS_PAIR \ 62 62 fs_handle_t fs_handle; \ 63 devmap_handle_t devmap_handle;63 service_id_t service_id; 64 64 65 65 /** … … 67 67 * doesn't contain any state. For a stateful structure, see vfs_node_t. 68 68 * 69 * @note fs_handle, devmap_handleand index are meant to be returned in one69 * @note fs_handle, service_id and index are meant to be returned in one 70 70 * IPC reply. 71 71 */ … … 181 181 extern void vfs_node_put(vfs_node_t *); 182 182 extern void vfs_node_forget(vfs_node_t *); 183 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, devmap_handle_t);183 extern unsigned vfs_nodes_refcount_sum_get(fs_handle_t, service_id_t); 184 184 185 185 -
uspace/srv/vfs/vfs_file.c
r3751a08 r16dc887 115 115 116 116 ipc_call_t answer; 117 aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node-> devmap_handle,117 aid_t msg = async_send_2(exch, VFS_OUT_CLOSE, file->node->service_id, 118 118 file->node->index, &answer); 119 119 -
uspace/srv/vfs/vfs_lookup.c
r3751a08 r16dc887 162 162 aid_t req = async_send_5(exch, VFS_OUT_LOOKUP, (sysarg_t) first, 163 163 (sysarg_t) (first + len - 1) % PLB_SIZE, 164 (sysarg_t) root-> devmap_handle, (sysarg_t) lflag, (sysarg_t) index,164 (sysarg_t) root->service_id, (sysarg_t) lflag, (sysarg_t) index, 165 165 &answer); 166 166 … … 185 185 186 186 result->triplet.fs_handle = (fs_handle_t) rc; 187 result->triplet. devmap_handle = (devmap_handle_t) IPC_GET_ARG1(answer);187 result->triplet.service_id = (service_id_t) IPC_GET_ARG1(answer); 188 188 result->triplet.index = (fs_index_t) IPC_GET_ARG2(answer); 189 189 result->size = … … 212 212 ipc_call_t answer; 213 213 aid_t req = async_send_2(exch, VFS_OUT_OPEN_NODE, 214 (sysarg_t) result->triplet. devmap_handle,214 (sysarg_t) result->triplet.service_id, 215 215 (sysarg_t) result->triplet.index, &answer); 216 216 -
uspace/srv/vfs/vfs_node.c
r3751a08 r16dc887 116 116 unsigned long key[] = { 117 117 [KEY_FS_HANDLE] = node->fs_handle, 118 [KEY_DEV_HANDLE] = node-> devmap_handle,118 [KEY_DEV_HANDLE] = node->service_id, 119 119 [KEY_INDEX] = node->index 120 120 }; … … 138 138 async_exch_t *exch = vfs_exchange_grab(node->fs_handle); 139 139 sysarg_t rc = async_req_2_0(exch, VFS_OUT_DESTROY, 140 (sysarg_t) node-> devmap_handle, (sysarg_t)node->index);140 (sysarg_t) node->service_id, (sysarg_t)node->index); 141 141 142 142 assert(rc == EOK); … … 160 160 unsigned long key[] = { 161 161 [KEY_FS_HANDLE] = node->fs_handle, 162 [KEY_DEV_HANDLE] = node-> devmap_handle,162 [KEY_DEV_HANDLE] = node->service_id, 163 163 [KEY_INDEX] = node->index 164 164 }; … … 184 184 unsigned long key[] = { 185 185 [KEY_FS_HANDLE] = result->triplet.fs_handle, 186 [KEY_DEV_HANDLE] = result->triplet. devmap_handle,186 [KEY_DEV_HANDLE] = result->triplet.service_id, 187 187 [KEY_INDEX] = result->triplet.index 188 188 }; … … 200 200 memset(node, 0, sizeof(vfs_node_t)); 201 201 node->fs_handle = result->triplet.fs_handle; 202 node-> devmap_handle = result->triplet.devmap_handle;202 node->service_id = result->triplet.service_id; 203 203 node->index = result->triplet.index; 204 204 node->size = result->size; … … 252 252 vfs_node_t *node = hash_table_get_instance(item, vfs_node_t, nh_link); 253 253 return (node->fs_handle == (fs_handle_t) key[KEY_FS_HANDLE]) && 254 (node-> devmap_handle== key[KEY_DEV_HANDLE]) &&254 (node->service_id == key[KEY_DEV_HANDLE]) && 255 255 (node->index == key[KEY_INDEX]); 256 256 } … … 264 264 unsigned refcnt; 265 265 fs_handle_t fs_handle; 266 devmap_handle_t devmap_handle;266 service_id_t service_id; 267 267 }; 268 268 … … 273 273 274 274 if ((node->fs_handle == rd->fs_handle) && 275 (node-> devmap_handle == rd->devmap_handle))275 (node->service_id == rd->service_id)) 276 276 rd->refcnt += node->refcnt; 277 277 } 278 278 279 279 unsigned 280 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, devmap_handle_t devmap_handle)280 vfs_nodes_refcount_sum_get(fs_handle_t fs_handle, service_id_t service_id) 281 281 { 282 282 struct refcnt_data rd = { 283 283 .refcnt = 0, 284 284 .fs_handle = fs_handle, 285 . devmap_handle = devmap_handle285 .service_id = service_id 286 286 }; 287 287 -
uspace/srv/vfs/vfs_ops.c
r3751a08 r16dc887 54 54 55 55 /* Forward declarations of static functions. */ 56 static int vfs_truncate_internal(fs_handle_t, devmap_handle_t, fs_index_t,56 static int vfs_truncate_internal(fs_handle_t, service_id_t, fs_index_t, 57 57 aoff64_t); 58 58 … … 65 65 vfs_pair_t rootfs = { 66 66 .fs_handle = 0, 67 . devmap_handle= 067 .service_id = 0 68 68 }; 69 69 70 static void vfs_mount_internal(ipc_callid_t rid, devmap_handle_t devmap_handle,70 static void vfs_mount_internal(ipc_callid_t rid, service_id_t service_id, 71 71 fs_handle_t fs_handle, char *mp, char *opts) 72 72 { … … 125 125 exch = vfs_exchange_grab(fs_handle); 126 126 msg = async_send_1(exch, VFS_OUT_MOUNTED, 127 (sysarg_t) devmap_handle, &answer);127 (sysarg_t) service_id, &answer); 128 128 /* Send the mount options */ 129 129 rc = async_data_write_start(exch, (void *)opts, … … 150 150 151 151 mr_res.triplet.fs_handle = fs_handle; 152 mr_res.triplet. devmap_handle = devmap_handle;152 mr_res.triplet.service_id = service_id; 153 153 mr_res.triplet.index = rindex; 154 154 mr_res.size = rsize; … … 157 157 158 158 rootfs.fs_handle = fs_handle; 159 rootfs. devmap_handle = devmap_handle;159 rootfs.service_id = service_id; 160 160 161 161 /* Add reference to the mounted root. */ … … 178 178 179 179 /* 180 * At this point, we have all necessary pieces: file system and device181 * handles, and we know the mount point VFS node.180 * At this point, we have all necessary pieces: file system handle 181 * and service ID, and we know the mount point VFS node. 182 182 */ 183 183 … … 187 187 exch = vfs_exchange_grab(mp_res.triplet.fs_handle); 188 188 msg = async_send_4(exch, VFS_OUT_MOUNT, 189 (sysarg_t) mp_res.triplet. devmap_handle,189 (sysarg_t) mp_res.triplet.service_id, 190 190 (sysarg_t) mp_res.triplet.index, 191 191 (sysarg_t) fs_handle, 192 (sysarg_t) devmap_handle, &answer);192 (sysarg_t) service_id, &answer); 193 193 194 194 /* Send connection */ … … 234 234 235 235 mr_res.triplet.fs_handle = fs_handle; 236 mr_res.triplet. devmap_handle = devmap_handle;236 mr_res.triplet.service_id = service_id; 237 237 mr_res.triplet.index = rindex; 238 238 mr_res.size = rsize; … … 255 255 void vfs_mount(ipc_callid_t rid, ipc_call_t *request) 256 256 { 257 devmap_handle_t devmap_handle;257 service_id_t service_id; 258 258 259 259 /* … … 262 262 * in the request. 263 263 */ 264 devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);264 service_id = (service_id_t) IPC_GET_ARG1(*request); 265 265 266 266 /* … … 350 350 351 351 /* Do the mount */ 352 vfs_mount_internal(rid, devmap_handle, fs_handle, mp, opts);352 vfs_mount_internal(rid, service_id, fs_handle, mp, opts); 353 353 free(mp); 354 354 free(fs_name); … … 409 409 */ 410 410 if (vfs_nodes_refcount_sum_get(mr_node->fs_handle, 411 mr_node-> devmap_handle) != 2) {411 mr_node->service_id) != 2) { 412 412 fibril_rwlock_write_unlock(&namespace_rwlock); 413 413 vfs_node_put(mr_node); … … 430 430 exch = vfs_exchange_grab(mr_node->fs_handle); 431 431 rc = async_req_1_0(exch, VFS_OUT_UNMOUNTED, 432 mr_node-> devmap_handle);432 mr_node->service_id); 433 433 vfs_exchange_release(exch); 434 434 … … 441 441 442 442 rootfs.fs_handle = 0; 443 rootfs. devmap_handle= 0;443 rootfs.service_id = 0; 444 444 } else { 445 445 … … 470 470 exch = vfs_exchange_grab(mp_node->fs_handle); 471 471 rc = async_req_2_0(exch, VFS_OUT_UNMOUNT, 472 mp_node-> devmap_handle, mp_node->index);472 mp_node->service_id, mp_node->index); 473 473 vfs_exchange_release(exch); 474 474 … … 575 575 if (node->size) { 576 576 rc = vfs_truncate_internal(node->fs_handle, 577 node-> devmap_handle, node->index, 0);577 node->service_id, node->index, 0); 578 578 if (rc) { 579 579 fibril_rwlock_write_unlock(&node->contents_rwlock); … … 628 628 629 629 lr.triplet.fs_handle = IPC_GET_ARG1(*request); 630 lr.triplet. devmap_handle= IPC_GET_ARG2(*request);630 lr.triplet.service_id = IPC_GET_ARG2(*request); 631 631 lr.triplet.index = IPC_GET_ARG3(*request); 632 632 int oflag = IPC_GET_ARG4(*request); … … 649 649 if (node->size) { 650 650 rc = vfs_truncate_internal(node->fs_handle, 651 node-> devmap_handle, node->index, 0);651 node->service_id, node->index, 0); 652 652 if (rc) { 653 653 fibril_rwlock_write_unlock(&node->contents_rwlock); … … 712 712 aid_t msg; 713 713 ipc_call_t answer; 714 msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node-> devmap_handle,714 msg = async_send_2(fs_exch, VFS_OUT_SYNC, file->node->service_id, 715 715 file->node->index, &answer); 716 716 … … 797 797 if (read) { 798 798 rc = async_data_read_forward_4_1(fs_exch, VFS_OUT_READ, 799 file->node-> devmap_handle, file->node->index,799 file->node->service_id, file->node->index, 800 800 LOWER32(file->pos), UPPER32(file->pos), &answer); 801 801 } else { … … 804 804 805 805 rc = async_data_write_forward_4_1(fs_exch, VFS_OUT_WRITE, 806 file->node-> devmap_handle, file->node->index,806 file->node->service_id, file->node->index, 807 807 LOWER32(file->pos), UPPER32(file->pos), &answer); 808 808 } … … 935 935 } 936 936 937 int vfs_truncate_internal(fs_handle_t fs_handle, devmap_handle_t devmap_handle,937 int vfs_truncate_internal(fs_handle_t fs_handle, service_id_t service_id, 938 938 fs_index_t index, aoff64_t size) 939 939 { 940 940 async_exch_t *exch = vfs_exchange_grab(fs_handle); 941 941 sysarg_t rc = async_req_4_0(exch, VFS_OUT_TRUNCATE, 942 (sysarg_t) devmap_handle, (sysarg_t) index, LOWER32(size),942 (sysarg_t) service_id, (sysarg_t) index, LOWER32(size), 943 943 UPPER32(size)); 944 944 vfs_exchange_release(exch); … … 963 963 fibril_rwlock_write_lock(&file->node->contents_rwlock); 964 964 rc = vfs_truncate_internal(file->node->fs_handle, 965 file->node-> devmap_handle, file->node->index, size);965 file->node->service_id, file->node->index, size); 966 966 if (rc == EOK) 967 967 file->node->size = size; … … 997 997 998 998 aid_t msg; 999 msg = async_send_3(exch, VFS_OUT_STAT, file->node-> devmap_handle,999 msg = async_send_3(exch, VFS_OUT_STAT, file->node->service_id, 1000 1000 file->node->index, true, NULL); 1001 1001 async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME); … … 1050 1050 1051 1051 aid_t msg; 1052 msg = async_send_3(exch, VFS_OUT_STAT, node-> devmap_handle,1052 msg = async_send_3(exch, VFS_OUT_STAT, node->service_id, 1053 1053 node->index, false, NULL); 1054 1054 async_forward_fast(callid, exch, 0, 0, 0, IPC_FF_ROUTE_FROM_ME); … … 1227 1227 /* Check whether linking to the same file system instance. */ 1228 1228 if ((old_node->fs_handle != new_par_lr.triplet.fs_handle) || 1229 (old_node-> devmap_handle != new_par_lr.triplet.devmap_handle)) {1229 (old_node->service_id != new_par_lr.triplet.service_id)) { 1230 1230 fibril_rwlock_write_unlock(&namespace_rwlock); 1231 1231 vfs_node_put(old_node); -
uspace/srv/vfs/vfs_register.c
r3751a08 r16dc887 306 306 list_foreach(fs_list, cur) { 307 307 fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link); 308 if (str_cmp(fs->vfs_info.name, name) == 0) { 308 if (str_cmp(fs->vfs_info.name, name) == 0) { 309 309 handle = fs->fs_handle; 310 310 break;
Note:
See TracChangeset
for help on using the changeset viewer.
