Changeset 49ff5f3 in mainline for uspace/srv
- Timestamp:
- 2012-04-18T20:55:21Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7769ec9
- Parents:
- e895352 (diff), 63920b0 (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:
-
- 72 added
- 24 deleted
- 42 edited
- 13 moved
-
bd/ata_bd/ata_bd.c (modified) (2 diffs)
-
bd/file_bd/file_bd.c (modified) (2 diffs)
-
bd/gxe_bd/gxe_bd.c (modified) (2 diffs)
-
bd/part/guid_part/guid_part.c (modified) (2 diffs)
-
bd/part/mbr_part/mbr_part.c (modified) (2 diffs)
-
bd/rd/rd.c (modified) (3 diffs)
-
devman/devman.c (modified) (2 diffs)
-
devman/main.c (modified) (3 diffs)
-
fs/exfat/exfat_bitmap.c (modified) (13 diffs)
-
fs/exfat/exfat_bitmap.h (modified) (1 diff)
-
fs/exfat/exfat_dentry.c (modified) (1 diff)
-
fs/exfat/exfat_dentry.h (modified) (1 diff)
-
fs/exfat/exfat_directory.c (modified) (13 diffs)
-
fs/exfat/exfat_fat.c (modified) (8 diffs)
-
fs/exfat/exfat_ops.c (modified) (11 diffs)
-
fs/fat/fat_dentry.c (modified) (1 diff)
-
fs/fat/fat_directory.c (modified) (4 diffs)
-
hid/console/console.c (modified) (3 diffs)
-
hid/fb/fb.c (modified) (3 diffs)
-
hid/fb/port/ega.c (modified) (2 diffs)
-
hid/fb/port/kchar.c (modified) (2 diffs)
-
hid/fb/port/kfb.c (modified) (3 diffs)
-
hid/fb/port/niagara.c (modified) (2 diffs)
-
hid/input/Makefile (modified) (2 diffs)
-
hid/input/generic/input.c (modified) (8 diffs)
-
hid/input/include/mouse.h (modified) (1 diff)
-
hid/input/include/mouse_proto.h (modified) (1 diff)
-
hid/input/port/chardev.c (modified) (1 diff)
-
hid/input/port/chardev_mouse.c (deleted)
-
hid/input/port/gxemul.c (modified) (4 diffs)
-
hid/input/port/msim.c (modified) (4 diffs)
-
hid/input/port/niagara.c (modified) (3 diffs)
-
hid/input/port/ns16550.c (modified) (4 diffs)
-
hid/input/port/pl050.c (modified) (4 diffs)
-
hid/input/proto/adb.c (modified) (1 diff)
-
hid/input/proto/mousedev.c (modified) (1 diff)
-
hid/input/proto/ps2.c (deleted)
-
hid/remcons/Makefile (added)
-
hid/remcons/remcons.c (added)
-
hid/remcons/remcons.h (added)
-
hid/remcons/telnet.h (moved) (moved from uspace/lib/usbdev/src/pipepriv.h ) (2 diffs)
-
hid/remcons/user.c (added)
-
hid/remcons/user.h (added)
-
hid/s3c24xx_ts/s3c24xx_ts.c (modified) (3 diffs)
-
hw/bus/cuda_adb/cuda_adb.c (modified) (5 diffs)
-
hw/bus/cuda_adb/cuda_adb.h (modified) (1 diff)
-
hw/char/i8042/i8042.c (deleted)
-
hw/char/s3c24xx_uart/s3c24xx_uart.c (modified) (3 diffs)
-
hw/irc/obio/obio.c (modified) (1 diff)
-
loc/loc.c (modified) (10 diffs)
-
net/cfg/general (deleted)
-
net/cfg/lo.nic (deleted)
-
net/cfg/ne2k.nic (deleted)
-
net/ethip/Makefile (added)
-
net/ethip/arp.c (added)
-
net/ethip/arp.h (added)
-
net/ethip/atrans.c (added)
-
net/ethip/atrans.h (moved) (moved from uspace/lib/net/include/icmp_client.h ) (2 diffs)
-
net/ethip/ethip.c (added)
-
net/ethip/ethip.h (added)
-
net/ethip/ethip_nic.c (added)
-
net/ethip/ethip_nic.h (added)
-
net/ethip/pdu.c (added)
-
net/ethip/pdu.h (added)
-
net/ethip/std.h (added)
-
net/il/arp/arp.c (deleted)
-
net/il/arp/arp.h (deleted)
-
net/il/ip/ip.c (deleted)
-
net/il/ip/ip.h (deleted)
-
net/inet/Makefile (added)
-
net/inet/addrobj.c (added)
-
net/inet/addrobj.h (added)
-
net/inet/icmp.c (added)
-
net/inet/icmp.h (added)
-
net/inet/icmp_std.h (moved) (moved from uspace/lib/c/include/net/icmp_api.h ) (2 diffs)
-
net/inet/inet.c (added)
-
net/inet/inet.h (added)
-
net/inet/inet_link.c (added)
-
net/inet/inet_link.h (added)
-
net/inet/inet_std.h (added)
-
net/inet/inet_util.c (added)
-
net/inet/inet_util.h (added)
-
net/inet/inetcfg.c (added)
-
net/inet/inetcfg.h (added)
-
net/inet/inetping.c (added)
-
net/inet/inetping.h (added)
-
net/inet/pdu.c (added)
-
net/inet/pdu.h (added)
-
net/inet/reass.c (added)
-
net/inet/reass.h (added)
-
net/inet/sroute.c (added)
-
net/inet/sroute.h (added)
-
net/net/Makefile (deleted)
-
net/net/net.c (deleted)
-
net/net/net.h (deleted)
-
net/net/packet_server.c (deleted)
-
net/nil/eth/Makefile (deleted)
-
net/nil/eth/eth.c (deleted)
-
net/nil/eth/eth.h (deleted)
-
net/nil/nildummy/Makefile (deleted)
-
net/nil/nildummy/nildummy.c (deleted)
-
net/nil/nildummy/nildummy.h (deleted)
-
net/tcp/Makefile (moved) (moved from uspace/srv/net/tl/tcp/Makefile ) (3 diffs)
-
net/tcp/conn.c (added)
-
net/tcp/conn.h (added)
-
net/tcp/iqueue.c (added)
-
net/tcp/iqueue.h (added)
-
net/tcp/ncsim.c (added)
-
net/tcp/ncsim.h (added)
-
net/tcp/pdu.c (added)
-
net/tcp/pdu.h (added)
-
net/tcp/rqueue.c (added)
-
net/tcp/rqueue.h (added)
-
net/tcp/segment.c (added)
-
net/tcp/segment.h (moved) (moved from uspace/lib/net/include/ethernet_protocols.h ) (2 diffs)
-
net/tcp/seq_no.c (added)
-
net/tcp/seq_no.h (moved) (moved from uspace/lib/net/include/il_remote.h ) (2 diffs)
-
net/tcp/sock.c (added)
-
net/tcp/sock.h (moved) (moved from kernel/arch/ia32/include/drivers/vesa.h ) (2 diffs)
-
net/tcp/std.h (moved) (moved from uspace/lib/net/include/net_checksum.h ) (2 diffs)
-
net/tcp/tcp.c (added)
-
net/tcp/tcp.h (moved) (moved from uspace/lib/c/include/net/icmp_common.h ) (2 diffs)
-
net/tcp/tcp_header.h (moved) (moved from uspace/srv/net/tl/tcp/tcp_header.h )
-
net/tcp/tcp_type.h (added)
-
net/tcp/test.c (added)
-
net/tcp/test.h (added)
-
net/tcp/tqueue.c (added)
-
net/tcp/tqueue.h (added)
-
net/tcp/ucall.c (added)
-
net/tcp/ucall.h (added)
-
net/tl/icmp/icmp.c (deleted)
-
net/tl/tcp/tcp.c (deleted)
-
net/tl/tcp/tcp.h (deleted)
-
net/tl/udp/udp.c (deleted)
-
net/udp/Makefile (moved) (moved from uspace/srv/net/tl/udp/Makefile ) (3 diffs)
-
net/udp/assoc.c (added)
-
net/udp/assoc.h (moved) (moved from uspace/lib/net/include/ethernet_lsap.h ) (2 diffs)
-
net/udp/msg.c (added)
-
net/udp/msg.h (added)
-
net/udp/pdu.c (added)
-
net/udp/pdu.h (added)
-
net/udp/sock.c (added)
-
net/udp/sock.h (added)
-
net/udp/std.h (added)
-
net/udp/ucall.c (added)
-
net/udp/ucall.h (added)
-
net/udp/udp.c (moved) (moved from uspace/srv/net/tl/udp/udp.h ) (2 diffs)
-
net/udp/udp_inet.c (added)
-
net/udp/udp_inet.h (added)
-
net/udp/udp_type.h (added)
-
vfs/vfs.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/ata_bd/ata_bd.c
re895352 r49ff5f3 245 245 void *vaddr; 246 246 int rc; 247 248 rc = loc_server_register(NAME, ata_bd_connection); 247 248 async_set_client_connection(ata_bd_connection); 249 rc = loc_server_register(NAME); 249 250 if (rc < 0) { 250 251 printf(NAME ": Unable to register driver.\n"); … … 309 310 } 310 311 311 fs_va = as_get_mappable_page(comm_size);312 if (fs_va == NULL) {312 (void) async_share_out_finalize(callid, &fs_va); 313 if (fs_va == (void *) -1) { 313 314 async_answer_0(callid, EHANGUP); 314 315 return; 315 316 } 316 317 (void) async_share_out_finalize(callid, fs_va);318 317 319 318 while (true) { -
uspace/srv/bd/file_bd/file_bd.c
re895352 r49ff5f3 141 141 int rc; 142 142 long img_size; 143 144 rc = loc_server_register(NAME, file_bd_connection); 143 144 async_set_client_connection(file_bd_connection); 145 rc = loc_server_register(NAME); 145 146 if (rc < 0) { 146 147 printf(NAME ": Unable to register driver.\n"); … … 190 191 } 191 192 192 fs_va = as_get_mappable_page(comm_size);193 if (fs_va == NULL) {193 (void) async_share_out_finalize(callid, &fs_va); 194 if (fs_va == (void *) -1) { 194 195 async_answer_0(callid, EHANGUP); 195 196 return; 196 197 } 197 198 (void) async_share_out_finalize(callid, fs_va);199 198 200 199 while (true) { -
uspace/srv/bd/gxe_bd/gxe_bd.c
re895352 r49ff5f3 125 125 int rc, i; 126 126 char name[16]; 127 128 rc = loc_server_register(NAME, gxe_bd_connection); 127 128 async_set_client_connection(gxe_bd_connection); 129 rc = loc_server_register(NAME); 129 130 if (rc < 0) { 130 131 printf(NAME ": Unable to register driver.\n"); … … 193 194 } 194 195 195 fs_va = as_get_mappable_page(comm_size);196 if (fs_va == NULL) {196 (void) async_share_out_finalize(callid, &fs_va); 197 if (fs_va == (void *) -1) { 197 198 async_answer_0(callid, EHANGUP); 198 199 return; 199 200 } 200 201 (void) async_share_out_finalize(callid, fs_va);202 201 203 202 while (true) { -
uspace/srv/bd/part/guid_part/guid_part.c
re895352 r49ff5f3 164 164 165 165 /* Register server with location service. */ 166 rc = loc_server_register(NAME, gpt_connection); 166 async_set_client_connection(gpt_connection); 167 rc = loc_server_register(NAME); 167 168 if (rc != EOK) { 168 169 printf(NAME ": Unable to register server.\n"); … … 348 349 } 349 350 350 fs_va = as_get_mappable_page(comm_size);351 if (fs_va == NULL) {351 (void) async_share_out_finalize(callid, &fs_va); 352 if (fs_va == (void *) -1) { 352 353 async_answer_0(callid, EHANGUP); 353 354 return; 354 355 } 355 356 (void) async_share_out_finalize(callid, fs_va);357 356 358 357 while (true) { -
uspace/srv/bd/part/mbr_part/mbr_part.c
re895352 r49ff5f3 214 214 215 215 /* Register server with location service. */ 216 rc = loc_server_register(NAME, mbr_connection); 216 async_set_client_connection(mbr_connection); 217 rc = loc_server_register(NAME); 217 218 if (rc != EOK) { 218 219 printf(NAME ": Unable to register server.\n"); … … 425 426 } 426 427 427 fs_va = as_get_mappable_page(comm_size);428 if (fs_va == NULL) {428 (void) async_share_out_finalize(callid, &fs_va); 429 if (fs_va == (void *) -1) { 429 430 async_answer_0(callid, EHANGUP); 430 431 return; 431 432 } 432 433 (void) async_share_out_finalize(callid, fs_va);434 433 435 434 while (1) { -
uspace/srv/bd/rd/rd.c
re895352 r49ff5f3 55 55 #include <ipc/bd.h> 56 56 #include <macros.h> 57 58 #define NAME "rd" 57 #include <inttypes.h> 58 59 #define NAME "rd" 59 60 60 61 /** Pointer to the ramdisk's image */ … … 104 105 unsigned int flags; 105 106 if (async_share_out_receive(&callid, &comm_size, &flags)) { 106 fs_va = as_get_mappable_page(comm_size); 107 if (fs_va) { 108 (void) async_share_out_finalize(callid, fs_va); 109 } else { 107 (void) async_share_out_finalize(callid, &fs_va); 108 if (fs_va == (void *) -1) { 110 109 async_answer_0(callid, EHANGUP); 111 110 return; … … 208 207 static bool rd_init(void) 209 208 { 210 int ret = sysinfo_get_value("rd.size", &rd_size); 211 if ((ret != EOK) || (rd_size == 0)) { 209 sysarg_t size; 210 int ret = sysinfo_get_value("rd.size", &size); 211 if ((ret != EOK) || (size == 0)) { 212 212 printf("%s: No RAM disk found\n", NAME); 213 213 return false; 214 214 } 215 215 216 sysarg_t rd_ph_addr;217 ret = sysinfo_get_value("rd.address.physical", & rd_ph_addr);218 if ((ret != EOK) || ( rd_ph_addr== 0)) {216 sysarg_t addr_phys; 217 ret = sysinfo_get_value("rd.address.physical", &addr_phys); 218 if ((ret != EOK) || (addr_phys == 0)) { 219 219 printf("%s: Invalid RAM disk physical address\n", NAME); 220 220 return false; 221 221 } 222 222 223 rd_ addr = as_get_mappable_page(rd_size);224 225 int flags =AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;226 int retval = physmem_map((void *) rd_ph_addr, rd_addr,227 ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);228 229 if (ret val < 0) {223 rd_size = ALIGN_UP(size, block_size); 224 unsigned int flags = 225 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; 226 227 ret = physmem_map((void *) addr_phys, 228 ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags, &rd_addr); 229 if (ret != EOK) { 230 230 printf("%s: Error mapping RAM disk\n", NAME); 231 231 return false; 232 232 } 233 233 234 printf("%s: Found RAM disk at %p, %zu bytes\n", NAME, 235 (void *) rd_ph_addr, rd_size); 236 237 int rc = loc_server_register(NAME, rd_connection); 238 if (rc < 0) { 239 printf("%s: Unable to register driver (%d)\n", NAME, rc); 234 printf("%s: Found RAM disk at %p, %" PRIun " bytes\n", NAME, 235 (void *) addr_phys, size); 236 237 async_set_client_connection(rd_connection); 238 ret = loc_server_register(NAME); 239 if (ret < 0) { 240 printf("%s: Unable to register driver (%d)\n", NAME, ret); 240 241 return false; 241 242 } 242 243 243 244 service_id_t service_id; 244 if (loc_service_register("bd/initrd", &service_id) != EOK) { 245 ret = loc_service_register("bd/initrd", &service_id); 246 if (ret != EOK) { 245 247 printf("%s: Unable to register device service\n", NAME); 246 248 return false; -
uspace/srv/devman/devman.c
re895352 r49ff5f3 794 794 case EOK: 795 795 dev->state = DEVICE_USABLE; 796 exch = async_exchange_begin(drv->sess);797 async_msg_1(exch, DRIVER_DEV_ADDED, dev->handle);798 async_exchange_end(exch);799 796 break; 800 797 case ENOENT: … … 803 800 default: 804 801 dev->state = DEVICE_INVALID; 802 break; 805 803 } 806 804 -
uspace/srv/devman/main.c
re895352 r49ff5f3 1309 1309 1310 1310 /* 1311 * !!! devman_connection ... as the device manager is not a real loc 1312 * driver (it uses a completely different ipc protocol than an ordinary 1313 * loc driver) forwarding a connection from client to the devman by 1314 * location service would not work. 1311 * Caution: As the device manager is not a real loc 1312 * driver (it uses a completely different IPC protocol 1313 * than an ordinary loc driver), forwarding a connection 1314 * from client to the devman by location service will 1315 * not work. 1315 1316 */ 1316 loc_server_register(NAME , devman_connection);1317 loc_server_register(NAME); 1317 1318 1318 1319 return true; … … 1325 1326 if (log_init(NAME, LVL_WARN) != EOK) { 1326 1327 printf(NAME ": Error initializing logging subsystem.\n"); 1327 return -1;1328 }1329 1330 if (!devman_init()) {1331 log_msg(LVL_ERROR, "Error while initializing service.");1332 1328 return -1; 1333 1329 } … … 1338 1334 async_set_client_connection(devman_connection); 1339 1335 1336 if (!devman_init()) { 1337 log_msg(LVL_ERROR, "Error while initializing service."); 1338 return -1; 1339 } 1340 1340 1341 /* Register device manager at naming service. */ 1341 1342 if (service_register(SERVICE_DEVMAN) != EOK) { -
uspace/srv/fs/exfat/exfat_bitmap.c
re895352 r49ff5f3 45 45 #include <assert.h> 46 46 #include <fibril_synch.h> 47 #include <malloc.h>48 47 #include <mem.h> 49 48 50 49 51 int bitmap_is_free(exfat_bs_t *bs, service_id_t service_id,50 int exfat_bitmap_is_free(exfat_bs_t *bs, service_id_t service_id, 52 51 exfat_cluster_t clst) 53 52 { … … 90 89 } 91 90 92 int bitmap_set_cluster(exfat_bs_t *bs, service_id_t service_id,91 int exfat_bitmap_set_cluster(exfat_bs_t *bs, service_id_t service_id, 93 92 exfat_cluster_t clst) 94 93 { … … 125 124 } 126 125 127 int bitmap_clear_cluster(exfat_bs_t *bs, service_id_t service_id,126 int exfat_bitmap_clear_cluster(exfat_bs_t *bs, service_id_t service_id, 128 127 exfat_cluster_t clst) 129 128 { … … 161 160 } 162 161 163 int bitmap_set_clusters(exfat_bs_t *bs, service_id_t service_id,162 int exfat_bitmap_set_clusters(exfat_bs_t *bs, service_id_t service_id, 164 163 exfat_cluster_t firstc, exfat_cluster_t count) 165 164 { … … 169 168 170 169 while (clst < firstc + count ) { 171 rc = bitmap_set_cluster(bs, service_id, clst);170 rc = exfat_bitmap_set_cluster(bs, service_id, clst); 172 171 if (rc != EOK) { 173 172 if (clst - firstc > 0) 174 (void) bitmap_clear_clusters(bs, service_id,173 (void) exfat_bitmap_clear_clusters(bs, service_id, 175 174 firstc, clst - firstc); 176 175 return rc; … … 181 180 } 182 181 183 int bitmap_clear_clusters(exfat_bs_t *bs, service_id_t service_id,182 int exfat_bitmap_clear_clusters(exfat_bs_t *bs, service_id_t service_id, 184 183 exfat_cluster_t firstc, exfat_cluster_t count) 185 184 { … … 189 188 190 189 while (clst < firstc + count) { 191 rc = bitmap_clear_cluster(bs, service_id, clst);190 rc = exfat_bitmap_clear_cluster(bs, service_id, clst); 192 191 if (rc != EOK) 193 192 return rc; … … 197 196 } 198 197 199 int bitmap_alloc_clusters(exfat_bs_t *bs, service_id_t service_id,198 int exfat_bitmap_alloc_clusters(exfat_bs_t *bs, service_id_t service_id, 200 199 exfat_cluster_t *firstc, exfat_cluster_t count) 201 200 { … … 205 204 while (startc < DATA_CNT(bs) + 2) { 206 205 endc = startc; 207 while ( bitmap_is_free(bs, service_id, endc) == EOK) {206 while (exfat_bitmap_is_free(bs, service_id, endc) == EOK) { 208 207 if ((endc - startc) + 1 == count) { 209 208 *firstc = startc; 210 return bitmap_set_clusters(bs, service_id, startc, count);209 return exfat_bitmap_set_clusters(bs, service_id, startc, count); 211 210 } else 212 211 endc++; … … 218 217 219 218 220 int bitmap_append_clusters(exfat_bs_t *bs, exfat_node_t *nodep,219 int exfat_bitmap_append_clusters(exfat_bs_t *bs, exfat_node_t *nodep, 221 220 exfat_cluster_t count) 222 221 { 223 222 if (nodep->firstc == 0) { 224 return bitmap_alloc_clusters(bs, nodep->idx->service_id,223 return exfat_bitmap_alloc_clusters(bs, nodep->idx->service_id, 225 224 &nodep->firstc, count); 226 225 } else { … … 229 228 230 229 clst = lastc + 1; 231 while ( bitmap_is_free(bs, nodep->idx->service_id, clst) == EOK) {230 while (exfat_bitmap_is_free(bs, nodep->idx->service_id, clst) == EOK) { 232 231 if (clst - lastc == count){ 233 return bitmap_set_clusters(bs, nodep->idx->service_id,232 return exfat_bitmap_set_clusters(bs, nodep->idx->service_id, 234 233 lastc + 1, count); 235 234 } else … … 241 240 242 241 243 int bitmap_free_clusters(exfat_bs_t *bs, exfat_node_t *nodep,242 int exfat_bitmap_free_clusters(exfat_bs_t *bs, exfat_node_t *nodep, 244 243 exfat_cluster_t count) 245 244 { … … 248 247 lastc -= count; 249 248 250 return bitmap_clear_clusters(bs, nodep->idx->service_id, lastc + 1, count);251 } 252 253 254 int bitmap_replicate_clusters(exfat_bs_t *bs, exfat_node_t *nodep)249 return exfat_bitmap_clear_clusters(bs, nodep->idx->service_id, lastc + 1, count); 250 } 251 252 253 int exfat_bitmap_replicate_clusters(exfat_bs_t *bs, exfat_node_t *nodep) 255 254 { 256 255 int rc; -
uspace/srv/fs/exfat/exfat_bitmap.h
re895352 r49ff5f3 42 42 struct exfat_bs; 43 43 44 extern int bitmap_alloc_clusters(struct exfat_bs *, service_id_t,44 extern int exfat_bitmap_alloc_clusters(struct exfat_bs *, service_id_t, 45 45 exfat_cluster_t *, exfat_cluster_t); 46 extern int bitmap_append_clusters(struct exfat_bs *, struct exfat_node *,46 extern int exfat_bitmap_append_clusters(struct exfat_bs *, struct exfat_node *, 47 47 exfat_cluster_t); 48 extern int bitmap_free_clusters(struct exfat_bs *, struct exfat_node *,48 extern int exfat_bitmap_free_clusters(struct exfat_bs *, struct exfat_node *, 49 49 exfat_cluster_t); 50 extern int bitmap_replicate_clusters(struct exfat_bs *, struct exfat_node *);50 extern int exfat_bitmap_replicate_clusters(struct exfat_bs *, struct exfat_node *); 51 51 52 extern int bitmap_is_free(struct exfat_bs *, service_id_t, exfat_cluster_t);53 extern int bitmap_set_cluster(struct exfat_bs *, service_id_t, exfat_cluster_t);54 extern int bitmap_clear_cluster(struct exfat_bs *, service_id_t,52 extern int exfat_bitmap_is_free(struct exfat_bs *, service_id_t, exfat_cluster_t); 53 extern int exfat_bitmap_set_cluster(struct exfat_bs *, service_id_t, exfat_cluster_t); 54 extern int exfat_bitmap_clear_cluster(struct exfat_bs *, service_id_t, 55 55 exfat_cluster_t); 56 56 57 extern int bitmap_set_clusters(struct exfat_bs *, service_id_t,57 extern int exfat_bitmap_set_clusters(struct exfat_bs *, service_id_t, 58 58 exfat_cluster_t, exfat_cluster_t); 59 extern int bitmap_clear_clusters(struct exfat_bs *, service_id_t,59 extern int exfat_bitmap_clear_clusters(struct exfat_bs *, service_id_t, 60 60 exfat_cluster_t, exfat_cluster_t); 61 61 -
uspace/srv/fs/exfat/exfat_dentry.c
re895352 r49ff5f3 101 101 bool exfat_valid_char(wchar_t ch) 102 102 { 103 /* TODO */ 104 return true; 103 switch (ch) { 104 case 0x01 ... 0x1F: 105 case '/': 106 case '\\': 107 case '?': 108 case '|': 109 case '>': 110 case '<': 111 case '"': 112 case '*': 113 case ':': 114 return false; 115 default: 116 return true; 117 } 105 118 } 106 119 107 120 bool exfat_valid_name(const char *name) 108 121 { 109 /* TODO */ 122 size_t off = 0; 123 wchar_t ch; 124 125 while ((ch = str_decode(name, &off, STR_NO_LIMIT)) != 0) { 126 if (!exfat_valid_char(ch)) 127 return false; 128 } 110 129 return true; 111 130 } 112 131 113 size_t utf16_length(const uint16_t *wstr)132 size_t exfat_utf16_length(const uint16_t *wstr) 114 133 { 115 134 size_t len = 0; -
uspace/srv/fs/exfat/exfat_dentry.h
re895352 r49ff5f3 160 160 extern bool exfat_valid_name(const char *); 161 161 162 extern size_t utf16_length(const uint16_t *);162 extern size_t exfat_utf16_length(const uint16_t *); 163 163 164 164 -
uspace/srv/fs/exfat/exfat_directory.c
re895352 r49ff5f3 92 92 int rc = EOK; 93 93 94 if (di->b) 94 if (di->b) { 95 95 rc = block_put(di->b); 96 di->b = NULL; 97 } 96 98 97 99 return rc; … … 101 103 { 102 104 uint32_t i; 103 int rc ;105 int rc = EOK; 104 106 105 107 i = (di->pos * sizeof(exfat_dentry_t)) / BPS(di->bs); … … 108 110 109 111 if (di->b && di->bnum != i) { 110 block_put(di->b);112 rc = block_put(di->b); 111 113 di->b = NULL; 114 if (rc != EOK) 115 return rc; 112 116 } 113 117 if (!di->b) { … … 126 130 di->bnum = i; 127 131 } 128 return EOK;132 return rc; 129 133 } 130 134 … … 264 268 if (idx == 2 || idx == 3) 265 269 continue; 266 checksum = ((checksum << 15) | (checksum >> 1)) + (uint16_t)bytes[idx]; 270 checksum = ((checksum << 15) | (checksum >> 1)) + 271 (uint16_t)bytes[idx]; 267 272 } 268 273 return checksum; … … 285 290 for (i = 0; i < count; i++) { 286 291 rc = exfat_directory_get(di, &de); 287 if (rc != EOK) 288 return rc; 292 if (rc != EOK) { 293 free(array); 294 return rc; 295 } 289 296 array[i] = *de; 290 297 rc = exfat_directory_next(di); … … 306 313 array[1].stream.valid_data_size = host2uint64_t_le(ds->valid_data_size); 307 314 array[1].stream.data_size = host2uint64_t_le(ds->data_size); 308 array[0].file.checksum = host2uint16_t_le(exfat_directory_set_checksum((uint8_t *)array, 315 array[0].file.checksum = 316 host2uint16_t_le(exfat_directory_set_checksum((uint8_t *)array, 309 317 count * sizeof(exfat_dentry_t))); 310 318 … … 312 320 for (i = 0; i < count; i++) { 313 321 rc = exfat_directory_get(di, &de); 314 if (rc != EOK) 315 return rc; 322 if (rc != EOK) { 323 free(array); 324 return rc; 325 } 316 326 *de = array[i]; 317 327 di->b->dirty = true; … … 346 356 uctablep = EXFAT_NODE(fn); 347 357 348 uctable_chars = ALIGN_DOWN(uctablep->size, sizeof(uint16_t)) / sizeof(uint16_t); 358 uctable_chars = ALIGN_DOWN(uctablep->size, 359 sizeof(uint16_t)) / sizeof(uint16_t); 349 360 uctable = (uint16_t *) malloc(uctable_chars * sizeof(uint16_t)); 350 361 rc = exfat_read_uctable(di->bs, uctablep, (uint8_t *)uctable); … … 360 371 ds.stream.valid_data_size = 0; 361 372 ds.stream.data_size = 0; 362 ds.stream.name_size = utf16_length(wname);373 ds.stream.name_size = exfat_utf16_length(wname); 363 374 ds.stream.hash = host2uint16_t_le(exfat_name_hash(wname, uctable, 364 375 uctable_chars)); … … 411 422 return rc; 412 423 413 if (i == df.file.count - 2) 414 chars = ds.stream.name_size - EXFAT_NAME_PART_LEN*(df.file.count - 2); 424 if (i == df.file.count - 2) { 425 chars = ds.stream.name_size - 426 EXFAT_NAME_PART_LEN*(df.file.count - 2); 427 } 428 415 429 rc = exfat_directory_get(di, &de); 416 430 if (rc != EOK) … … 424 438 425 439 di->b->dirty = true; 426 sname += chars;427 440 } 428 441 … … 434 447 int rc, count; 435 448 exfat_dentry_t *de; 449 450 di->pos = pos; 436 451 437 452 rc = exfat_directory_get(di, &de); -
uspace/srv/fs/exfat/exfat_fat.c
re895352 r49ff5f3 50 50 #include <malloc.h> 51 51 #include <mem.h> 52 #include <str.h> 52 53 53 54 … … 126 127 { 127 128 exfat_cluster_t firstc = nodep->firstc; 128 exfat_cluster_t currc ;129 exfat_cluster_t currc = 0; 129 130 aoff64_t relbn = bn; 130 131 int rc; … … 313 314 clst++) { 314 315 /* Need to rewrite because of multiple exfat_bitmap_get calls */ 315 if ( bitmap_is_free(bs, service_id, clst) == EOK) {316 if (exfat_bitmap_is_free(bs, service_id, clst) == EOK) { 316 317 /* 317 318 * The cluster is free. Put it into our stack … … 322 323 (found == 0) ? EXFAT_CLST_EOF : lifo[found - 1]); 323 324 if (rc != EOK) 324 break;325 goto exit_error; 325 326 found++; 326 rc = bitmap_set_cluster(bs, service_id, clst);327 rc = exfat_bitmap_set_cluster(bs, service_id, clst); 327 328 if (rc != EOK) 328 break;329 goto exit_error; 329 330 330 331 } … … 339 340 } 340 341 342 rc = ENOSPC; 343 344 exit_error: 345 341 346 /* If something wrong - free the clusters */ 342 347 while (found--) { 343 (void) bitmap_clear_cluster(bs, service_id, lifo[found]);348 (void) exfat_bitmap_clear_cluster(bs, service_id, lifo[found]); 344 349 (void) exfat_set_cluster(bs, service_id, lifo[found], 0); 345 350 } … … 347 352 free(lifo); 348 353 fibril_mutex_unlock(&exfat_alloc_lock); 349 return ENOSPC;354 return rc; 350 355 } 351 356 … … 373 378 if (rc != EOK) 374 379 return rc; 375 rc = bitmap_clear_cluster(bs, service_id, firstc);380 rc = exfat_bitmap_clear_cluster(bs, service_id, firstc); 376 381 if (rc != EOK) 377 382 return rc; … … 537 542 int exfat_sanity_check(exfat_bs_t *bs, service_id_t service_id) 538 543 { 539 /* TODO */ 544 if (str_cmp((char const *)bs->oem_name, "EXFAT ")) 545 return ENOTSUP; 546 else if (uint16_t_le2host(bs->signature) != 0xAA55) 547 return ENOTSUP; 548 else if (uint32_t_le2host(bs->fat_sector_count) == 0) 549 return ENOTSUP; 550 else if (uint32_t_le2host(bs->data_clusters) == 0) 551 return ENOTSUP; 552 else if (bs->fat_count != 1) 553 return ENOTSUP; 554 else if ((bs->bytes_per_sector + bs->sec_per_cluster) > 25) { 555 /* exFAT does not support cluster size > 32 Mb */ 556 return ENOTSUP; 557 } 540 558 return EOK; 541 559 } -
uspace/srv/fs/exfat/exfat_ops.c
re895352 r49ff5f3 405 405 406 406 if (!nodep->fragmented) { 407 rc = bitmap_append_clusters(bs, nodep, clusters);407 rc = exfat_bitmap_append_clusters(bs, nodep, clusters); 408 408 if (rc != ENOSPC) 409 409 return rc; … … 411 411 nodep->fragmented = true; 412 412 nodep->dirty = true; /* need to sync node */ 413 rc = bitmap_replicate_clusters(bs, nodep);413 rc = exfat_bitmap_replicate_clusters(bs, nodep); 414 414 if (rc != EOK) 415 415 return rc; … … 457 457 458 458 clsts = prev_clsts - new_clsts; 459 rc = bitmap_free_clusters(bs, nodep, clsts);459 rc = exfat_bitmap_free_clusters(bs, nodep, clsts); 460 460 if (rc != EOK) 461 461 return rc; … … 657 657 return rc; 658 658 } 659 660 rc = exfat_zero_cluster(bs, service_id, nodep->firstc); 661 if (rc != EOK) { 662 (void) exfat_node_put(FS_NODE(nodep)); 663 return rc; 664 } 665 659 666 nodep->size = BPC(bs); 660 667 } else { … … 697 704 nodep->firstc); 698 705 else 699 rc = bitmap_free_clusters(bs, nodep,706 rc = exfat_bitmap_free_clusters(bs, nodep, 700 707 ROUND_UP(nodep->size, BPC(bs)) / BPC(bs)); 701 708 } … … 739 746 */ 740 747 rc = exfat_directory_write_file(&di, name); 741 if (rc != EOK) 742 return rc; 748 if (rc != EOK) { 749 (void) exfat_directory_close(&di); 750 fibril_mutex_unlock(&parentp->idx->lock); 751 return rc; 752 } 743 753 rc = exfat_directory_close(&di); 744 if (rc != EOK) 745 return rc; 754 if (rc != EOK) { 755 fibril_mutex_unlock(&parentp->idx->lock); 756 return rc; 757 } 746 758 747 759 fibril_mutex_unlock(&parentp->idx->lock); 748 if (rc != EOK)749 return rc;750 751 760 fibril_mutex_lock(&childp->idx->lock); 752 753 761 754 762 childp->idx->pfc = parentp->firstc; … … 1258 1266 exfat_directory_t di; 1259 1267 rc = exfat_directory_open(nodep, &di); 1260 if (rc != EOK) goto err; 1268 if (rc != EOK) 1269 goto err; 1270 1261 1271 rc = exfat_directory_seek(&di, pos); 1262 1272 if (rc != EOK) { … … 1268 1278 &df, &ds); 1269 1279 if (rc == EOK) 1270 goto hit; 1271 if (rc == ENOENT) 1272 goto miss; 1280 goto hit; 1281 else if (rc == ENOENT) 1282 goto miss; 1283 1284 (void) exfat_directory_close(&di); 1273 1285 1274 1286 err: … … 1279 1291 miss: 1280 1292 rc = exfat_directory_close(&di); 1281 if (rc !=EOK)1293 if (rc != EOK) 1282 1294 goto err; 1283 1295 rc = exfat_node_put(fn); … … 1397 1409 1398 1410 (void) async_data_write_finalize(callid, 1399 b->data + pos % BPS(bs), bytes);1411 b->data + pos % BPS(bs), bytes); 1400 1412 b->dirty = true; /* need to sync block */ 1401 1413 rc = block_put(b); … … 1447 1459 } 1448 1460 1449 (void) exfat_node_put(fn); 1461 int rc2 = exfat_node_put(fn); 1462 if (rc == EOK && rc2 != EOK) 1463 rc = rc2; 1464 1450 1465 return rc; 1451 1466 } -
uspace/srv/fs/fat/fat_dentry.c
re895352 r49ff5f3 334 334 while (i < count) { 335 335 if ((ch = str_decode(src, &off, STR_NO_LIMIT)) != 0) { 336 if (ascii_check(ch) & IS_D_CHAR(ch))336 if (ascii_check(ch) && IS_D_CHAR(ch)) 337 337 *dst = toupper(ch); 338 338 else -
uspace/srv/fs/fat/fat_directory.c
re895352 r49ff5f3 162 162 int rc; 163 163 164 void *data; 165 fat_instance_t *instance; 166 167 rc = fs_instance_get(di->nodep->idx->service_id, &data); 168 assert(rc == EOK); 169 instance = (fat_instance_t *) data; 170 164 171 do { 165 172 rc = fat_directory_get(di, &d); … … 177 184 long_entry_count--; 178 185 if ((FAT_LFN_ORDER(d) == long_entry_count) && 179 (checksum == FAT_LFN_CHKSUM(d))) {186 (checksum == FAT_LFN_CHKSUM(d))) { 180 187 /* Right order! */ 181 188 fat_lfn_get_entry(d, wname, … … 189 196 long_entry = false; 190 197 } 191 } else if (FAT_IS_LFN(d) ) {198 } else if (FAT_IS_LFN(d) && instance->lfn_enabled) { 192 199 /* We found Last long entry! */ 193 200 if (FAT_LFN_COUNT(d) <= FAT_LFN_MAX_COUNT) { … … 308 315 checksum = fat_dentry_chksum(de->name); 309 316 310 rc = fat_directory_seek(di, start_pos +long_entry_count);317 rc = fat_directory_seek(di, start_pos + long_entry_count); 311 318 if (rc != EOK) 312 319 return rc; -
uspace/srv/hid/console/console.c
re895352 r49ff5f3 481 481 event->c = c; 482 482 483 /* Kernel console does not read events 483 /* 484 * Kernel console does not read events 484 485 * from us, so we will redirect them 485 486 * to the (last) active userspace console … … 487 488 */ 488 489 console_t *target_console = cons_get_active_uspace(); 489 490 490 491 prodcons_produce(&target_console->input_pc, 491 492 &event->link); … … 824 825 825 826 /* Register server */ 826 int rc = loc_server_register(NAME, client_connection); 827 async_set_client_connection(client_connection); 828 int rc = loc_server_register(NAME); 827 829 if (rc < 0) { 828 830 printf("%s: Unable to register server (%s)\n", NAME, -
uspace/srv/hid/fb/fb.c
re895352 r49ff5f3 304 304 } 305 305 306 frontbuf->data = as_get_mappable_page(frontbuf->size); 307 int rc = async_answer_1(callid, EOK, (sysarg_t) frontbuf->data); 308 if (rc != EOK) { 306 int rc = async_share_out_finalize(callid, &frontbuf->data); 307 if ((rc != EOK) || (frontbuf->data == (void *) -1)) { 309 308 free(frontbuf); 310 309 async_answer_0(iid, ENOMEM); … … 348 347 } 349 348 350 imagemap->data = as_get_mappable_page(imagemap->size); 351 int rc = async_answer_1(callid, EOK, (sysarg_t) imagemap->data); 352 if (rc != EOK) { 349 int rc = async_share_out_finalize(callid, &imagemap->data); 350 if ((rc != EOK) || (imagemap->data == (void *) -1)) { 353 351 free(imagemap); 354 352 async_answer_0(iid, ENOMEM); … … 989 987 990 988 /* Register server */ 991 int rc = loc_server_register(NAME, client_connection); 989 async_set_client_connection(client_connection); 990 int rc = loc_server_register(NAME); 992 991 if (rc != EOK) { 993 992 printf("%s: Unable to register driver (%d)\n", NAME, rc); -
uspace/srv/hid/fb/port/ega.c
re895352 r49ff5f3 117 117 uint8_t glyph; 118 118 119 if ( (field->ch >= 0) && (field->ch < 128))119 if (ascii_check(field->ch)) 120 120 glyph = field->ch; 121 121 else … … 280 280 281 281 ega.size = (width * height) << 1; 282 ega.addr = as_get_mappable_page(ega.size); 283 if (ega.addr == NULL) 284 return ENOMEM; 285 286 rc = physmem_map((void *) paddr, ega.addr, 287 ALIGN_UP(ega.size, PAGE_SIZE) >> PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); 282 283 rc = physmem_map((void *) paddr, 284 ALIGN_UP(ega.size, PAGE_SIZE) >> PAGE_WIDTH, 285 AS_AREA_READ | AS_AREA_WRITE, (void *) &ega.addr); 288 286 if (rc != EOK) 289 287 return rc; -
uspace/srv/hid/fb/port/kchar.c
re895352 r49ff5f3 48 48 static void kchar_putchar(wchar_t ch) 49 49 { 50 if ( (ch >= 0) && (ch < 128))50 if (ascii_check(ch)) 51 51 *kchar.addr = ch; 52 52 else … … 83 83 return rc; 84 84 85 kchar.addr = as_get_mappable_page(1); 86 if (kchar.addr == NULL) 87 return ENOMEM; 88 89 rc = physmem_map((void *) paddr, kchar.addr, 90 ALIGN_UP(1, PAGE_SIZE) >> PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); 85 rc = physmem_map((void *) paddr, 86 ALIGN_UP(1, PAGE_SIZE) >> PAGE_WIDTH, 87 AS_AREA_READ | AS_AREA_WRITE, (void *) &kchar.addr); 91 88 if (rc != EOK) 92 89 return rc; -
uspace/srv/hid/fb/port/kfb.c
re895352 r49ff5f3 409 409 charfield_t *field = screenbuffer_field_at(vp->backbuf, col, row); 410 410 411 pixel_t bgcolor ;412 pixel_t fgcolor ;411 pixel_t bgcolor = 0; 412 pixel_t fgcolor = 0; 413 413 attrs_rgb(field->attrs, &bgcolor, &fgcolor); 414 414 … … 525 525 } 526 526 527 pixel_t bgcolor ;528 pixel_t fgcolor ;527 pixel_t bgcolor = 0; 528 pixel_t fgcolor = 0; 529 529 attrs_rgb(vp->attrs, &bgcolor, &fgcolor); 530 530 … … 756 756 757 757 kfb.size = scanline * height; 758 kfb.addr = as_get_mappable_page(kfb.size); 759 if (kfb.addr == NULL) { 760 free(kfb.glyphs); 761 return ENOMEM; 762 } 763 764 rc = physmem_map((void *) paddr + offset, kfb.addr, 765 ALIGN_UP(kfb.size, PAGE_SIZE) >> PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); 758 759 rc = physmem_map((void *) paddr + offset, 760 ALIGN_UP(kfb.size, PAGE_SIZE) >> PAGE_WIDTH, 761 AS_AREA_READ | AS_AREA_WRITE, (void *) &kfb.addr); 766 762 if (rc != EOK) { 767 763 free(kfb.glyphs); -
uspace/srv/hid/fb/port/niagara.c
re895352 r49ff5f3 68 68 static void niagara_putchar(wchar_t ch) 69 69 { 70 if ( (ch >= 0) && (ch < 128))70 if (ascii_check(ch)) 71 71 niagara_putc(ch); 72 72 else … … 103 103 return rc; 104 104 105 niagara.fifo = 106 (output_fifo_t *) as_get_mappable_page(sizeof(output_fifo_t)); 107 if (niagara.fifo == NULL) 108 return ENOMEM; 109 110 rc = physmem_map((void *) paddr, (void *) niagara.fifo, 1, 111 AS_AREA_READ | AS_AREA_WRITE); 105 rc = physmem_map((void *) paddr, 1, 106 AS_AREA_READ | AS_AREA_WRITE, (void *) &niagara.fifo); 112 107 if (rc != EOK) 113 108 return rc; -
uspace/srv/hid/input/Makefile
re895352 r49ff5f3 43 43 port/adb_mouse.c \ 44 44 port/chardev.c \ 45 port/chardev_mouse.c \46 45 port/gxemul.c \ 47 46 port/msim.c \ … … 52 51 proto/adb.c \ 53 52 proto/mousedev.c \ 54 proto/ps2.c \55 53 ctl/apple.c \ 56 54 ctl/gxe_fb.c \ -
uspace/srv/hid/input/generic/input.c
re895352 r49ff5f3 39 39 #include <adt/list.h> 40 40 #include <bool.h> 41 #include <fibril_synch.h> 41 42 #include <ipc/services.h> 42 43 #include <ipc/input.h> … … 83 84 async_sess_t *irc_sess = NULL; 84 85 86 static FIBRIL_MUTEX_INITIALIZE(discovery_lock); 87 85 88 void kbd_push_data(kbd_dev_t *kdev, sysarg_t data) 86 89 { … … 172 175 173 176 /** Mouse pointer has moved. */ 174 void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy )177 void mouse_push_event_move(mouse_dev_t *mdev, int dx, int dy, int dz) 175 178 { 176 179 async_exch_t *exch = async_exchange_begin(client_sess); 177 async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy); 180 if (dx || dy) 181 async_msg_2(exch, INPUT_EVENT_MOVE, dx, dy); 182 if (dz) { 183 // TODO: Implement proper wheel support 184 keycode_t code = dz > 0 ? KC_UP : KC_DOWN; 185 for (int i = 0; i < 3; ++i) { 186 async_msg_4(exch, INPUT_EVENT_KEY, KEY_PRESS, code, 0, 0); 187 } 188 async_msg_4(exch, INPUT_EVENT_KEY, KEY_RELEASE, code, 0, 0); 189 } 178 190 async_exchange_end(exch); 179 191 } … … 397 409 * them automatically. 398 410 */ 399 #if defined(UARCH_amd64)400 kbd_add_dev(&chardev_port, &pc_ctl);401 #endif402 411 #if defined(UARCH_arm32) && defined(MACHINE_gta02) 403 412 kbd_add_dev(&chardev_port, &stty_ctl); … … 411 420 #if defined(UARCH_arm32) && defined(MACHINE_integratorcp) 412 421 kbd_add_dev(&pl050_port, &pc_ctl); 413 #endif414 #if defined(UARCH_ia32)415 kbd_add_dev(&chardev_port, &pc_ctl);416 #endif417 #if defined(MACHINE_i460GX)418 kbd_add_dev(&chardev_port, &pc_ctl);419 422 #endif 420 423 #if defined(MACHINE_ski) … … 450 453 * them automatically. 451 454 */ 452 #if defined(UARCH_amd64)453 mouse_add_dev(&chardev_mouse_port, &ps2_proto);454 #endif455 #if defined(UARCH_ia32)456 mouse_add_dev(&chardev_mouse_port, &ps2_proto);457 #endif458 #if defined(MACHINE_i460GX)459 mouse_add_dev(&chardev_mouse_port, &ps2_proto);460 #endif461 455 #if defined(UARCH_ppc32) 462 456 mouse_add_dev(&adb_mouse_port, &adb_proto); … … 602 596 int rc; 603 597 598 fibril_mutex_lock(&discovery_lock); 599 604 600 rc = dev_check_new_kbdevs(); 605 if (rc != EOK) 601 if (rc != EOK) { 602 fibril_mutex_unlock(&discovery_lock); 606 603 return rc; 604 } 607 605 608 606 rc = dev_check_new_mousedevs(); 609 if (rc != EOK) 607 if (rc != EOK) { 608 fibril_mutex_unlock(&discovery_lock); 610 609 return rc; 611 610 } 611 612 fibril_mutex_unlock(&discovery_lock); 613 612 614 return EOK; 613 615 } … … 658 660 659 661 /* Register driver */ 660 int rc = loc_server_register(NAME, client_connection); 662 async_set_client_connection(client_connection); 663 int rc = loc_server_register(NAME); 661 664 if (rc < 0) { 662 665 printf("%s: Unable to register server (%d)\n", NAME, rc); -
uspace/srv/hid/input/include/mouse.h
re895352 r49ff5f3 62 62 63 63 extern void mouse_push_data(mouse_dev_t *, sysarg_t); 64 extern void mouse_push_event_move(mouse_dev_t *, int, int );64 extern void mouse_push_event_move(mouse_dev_t *, int, int, int); 65 65 extern void mouse_push_event_button(mouse_dev_t *, int, int); 66 66 -
uspace/srv/hid/input/include/mouse_proto.h
re895352 r49ff5f3 48 48 49 49 extern mouse_proto_ops_t adb_proto; 50 extern mouse_proto_ops_t ps2_proto;51 50 extern mouse_proto_ops_t mousedev_proto; 52 51 -
uspace/srv/hid/input/port/chardev.c
re895352 r49ff5f3 63 63 /** List of devices to try connecting to. */ 64 64 static const char *in_devs[] = { 65 "char/ps2a",66 65 "char/s3c24ser" 67 66 }; -
uspace/srv/hid/input/port/gxemul.c
re895352 r49ff5f3 57 57 static kbd_dev_t *kbd_dev; 58 58 59 static irq_pio_range_t gxemul_ranges[] = { 60 { 61 .base = 0, 62 .size = 1 63 } 64 }; 65 59 66 static irq_cmd_t gxemul_cmds[] = { 60 67 { … … 69 76 70 77 static irq_code_t gxemul_kbd = { 78 sizeof(gxemul_ranges) / sizeof(irq_pio_range_t), 79 gxemul_ranges, 71 80 sizeof(gxemul_cmds) / sizeof(irq_cmd_t), 72 81 gxemul_cmds … … 81 90 82 91 sysarg_t addr; 83 if (sysinfo_get_value("kbd.address. virtual", &addr) != EOK)92 if (sysinfo_get_value("kbd.address.physical", &addr) != EOK) 84 93 return -1; 85 94 … … 89 98 90 99 async_set_interrupt_received(gxemul_irq_handler); 100 gxemul_ranges[0].base = addr; 91 101 gxemul_cmds[0].addr = (void *) addr; 92 register_irq(inr, device_assign_devno(), 0, &gxemul_kbd);102 irq_register(inr, device_assign_devno(), 0, &gxemul_kbd); 93 103 return 0; 94 104 } -
uspace/srv/hid/input/port/msim.c
re895352 r49ff5f3 57 57 static kbd_dev_t *kbd_dev; 58 58 59 static irq_pio_range_t msim_ranges[] = { 60 { 61 .base = 0, 62 .size = 1 63 } 64 }; 65 59 66 static irq_cmd_t msim_cmds[] = { 60 67 { … … 69 76 70 77 static irq_code_t msim_kbd = { 78 sizeof(msim_ranges) / sizeof(irq_pio_range_t), 79 msim_ranges, 71 80 sizeof(msim_cmds) / sizeof(irq_cmd_t), 72 81 msim_cmds … … 79 88 kbd_dev = kdev; 80 89 81 sysarg_t vaddr;82 if (sysinfo_get_value("kbd.address. virtual", &vaddr) != EOK)90 sysarg_t paddr; 91 if (sysinfo_get_value("kbd.address.physical", &paddr) != EOK) 83 92 return -1; 84 93 … … 87 96 return -1; 88 97 89 msim_cmds[0].addr = (void *) vaddr; 98 msim_ranges[0].base = paddr; 99 msim_cmds[0].addr = (void *) paddr; 90 100 async_set_interrupt_received(msim_irq_handler); 91 register_irq(inr, device_assign_devno(), 0, &msim_kbd);101 irq_register(inr, device_assign_devno(), 0, &msim_kbd); 92 102 93 103 return 0; -
uspace/srv/hid/input/port/niagara.c
re895352 r49ff5f3 63 63 #define POLL_INTERVAL 10000 64 64 65 /**66 * Virtual address mapped to the buffer shared with the kernel counterpart.67 */68 static uintptr_t input_buffer_addr;69 70 65 /* 71 66 * Kernel counterpart of the driver pushes characters (it has read) here. … … 102 97 return -1; 103 98 104 input_buffer_addr = (uintptr_t) as_get_mappable_page(PAGE_SIZE); 105 int rc = physmem_map((void *) paddr, (void *) input_buffer_addr, 106 1, AS_AREA_READ | AS_AREA_WRITE); 107 99 int rc = physmem_map((void *) paddr, 1, 100 AS_AREA_READ | AS_AREA_WRITE, (void *) &input_buffer); 108 101 if (rc != 0) { 109 102 printf("Niagara: uspace driver couldn't map physical memory: %d\n", … … 111 104 return rc; 112 105 } 113 114 input_buffer = (input_buffer_t) input_buffer_addr;115 106 116 107 thread_id_t tid; -
uspace/srv/hid/input/port/ns16550.c
re895352 r49ff5f3 70 70 #define LSR_DATA_READY 0x01 71 71 72 static irq_pio_range_t ns16550_ranges[] = { 73 { 74 .base = 0, 75 .size = 8 76 } 77 }; 78 72 79 static irq_cmd_t ns16550_cmds[] = { 73 80 { … … 98 105 99 106 irq_code_t ns16550_kbd = { 107 sizeof(ns16550_ranges) / sizeof(irq_pio_range_t), 108 ns16550_ranges, 100 109 sizeof(ns16550_cmds) / sizeof(irq_cmd_t), 101 110 ns16550_cmds … … 105 114 106 115 static uintptr_t ns16550_physical; 107 static uintptr_t ns16550_kernel;108 116 109 117 static kbd_dev_t *kbd_dev; … … 124 132 return -1; 125 133 126 if (sysinfo_get_value("kbd.address.kernel", &ns16550_kernel) != EOK)127 return -1;128 129 134 sysarg_t inr; 130 135 if (sysinfo_get_value("kbd.inr", &inr) != EOK) 131 136 return -1; 132 137 133 ns16550_kbd.cmds[0].addr = (void *) (ns16550_kernel + LSR_REG); 134 ns16550_kbd.cmds[3].addr = (void *) (ns16550_kernel + RBR_REG); 138 ns16550_kbd.ranges[0].base = ns16550_physical; 139 ns16550_kbd.cmds[0].addr = (void *) (ns16550_physical + LSR_REG); 140 ns16550_kbd.cmds[3].addr = (void *) (ns16550_physical + RBR_REG); 135 141 136 142 async_set_interrupt_received(ns16550_irq_handler); 137 register_irq(inr, device_assign_devno(), inr, &ns16550_kbd);143 irq_register(inr, device_assign_devno(), inr, &ns16550_kbd); 138 144 139 145 return pio_enable((void *) ns16550_physical, 8, &vaddr); -
uspace/srv/hid/input/port/pl050.c
re895352 r49ff5f3 61 61 static kbd_dev_t *kbd_dev; 62 62 63 #define PL050_STAT 4 64 #define PL050_DATA 8 65 63 66 #define PL050_STAT_RXFULL (1 << 4) 67 68 static irq_pio_range_t pl050_ranges[] = { 69 { 70 .base = 0, 71 .size = 9, 72 } 73 }; 64 74 65 75 static irq_cmd_t pl050_cmds[] = { … … 91 101 92 102 static irq_code_t pl050_kbd = { 103 sizeof(pl050_ranges) / sizeof(irq_pio_range_t), 104 pl050_ranges, 93 105 sizeof(pl050_cmds) / sizeof(irq_cmd_t), 94 106 pl050_cmds … … 102 114 103 115 sysarg_t addr; 104 if (sysinfo_get_value("kbd.address. status", &addr) != EOK)116 if (sysinfo_get_value("kbd.address.physical", &addr) != EOK) 105 117 return -1; 106 118 107 pl050_kbd.cmds[0].addr = (void *) addr; 108 109 if (sysinfo_get_value("kbd.address.data", &addr) != EOK) 110 return -1; 111 112 pl050_kbd.cmds[3].addr = (void *) addr; 119 pl050_kbd.ranges[0].base = addr; 120 pl050_kbd.cmds[0].addr = (void *) addr + PL050_STAT; 121 pl050_kbd.cmds[3].addr = (void *) addr + PL050_DATA; 113 122 114 123 sysarg_t inr; … … 117 126 118 127 async_set_interrupt_received(pl050_irq_handler); 119 register_irq(inr, device_assign_devno(), 0, &pl050_kbd);128 irq_register(inr, device_assign_devno(), 0, &pl050_kbd); 120 129 121 130 return 0; -
uspace/srv/hid/input/proto/adb.c
re895352 r49ff5f3 82 82 83 83 if (dx != 0 || dy != 0) 84 mouse_push_event_move(mouse_dev, dx, dy );84 mouse_push_event_move(mouse_dev, dx, dy, 0); 85 85 } 86 86 -
uspace/srv/hid/input/proto/mousedev.c
re895352 r49ff5f3 91 91 switch (IPC_GET_IMETHOD(call)) { 92 92 case MOUSEEV_MOVE_EVENT: 93 mouse_push_event_move(mousedev->mouse_dev, IPC_GET_ARG1(call), 94 IPC_GET_ARG2(call)); 93 mouse_push_event_move(mousedev->mouse_dev, 94 IPC_GET_ARG1(call), IPC_GET_ARG2(call), 95 IPC_GET_ARG3(call)); 95 96 retval = EOK; 96 97 break; 97 98 case MOUSEEV_BUTTON_EVENT: 98 mouse_push_event_button(mousedev->mouse_dev, IPC_GET_ARG1(call),99 IPC_GET_ARG 2(call));99 mouse_push_event_button(mousedev->mouse_dev, 100 IPC_GET_ARG1(call), IPC_GET_ARG2(call)); 100 101 retval = EOK; 101 102 break; -
uspace/srv/hid/remcons/telnet.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 201 1Vojtech Horky2 * Copyright (c) 2012 Vojtech Horky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libusbdev29 /** @addtogroup remcons 30 30 * @{ 31 31 */ 32 32 /** @file 33 * Library internal functions on USB pipes.34 33 */ 35 #ifndef LIBUSBDEV_PIPEPRIV_H_36 #define LIBUSBDEV_PIPEPRIV_H_37 34 38 #i nclude <usb/dev/pipes.h>39 # include <bool.h>35 #ifndef TELNET_H_ 36 #define TELNET_H_ 40 37 41 void pipe_acquire(usb_pipe_t *); 42 void pipe_release(usb_pipe_t *); 38 #include <inttypes.h> 43 39 44 void pipe_start_transaction(usb_pipe_t *); 45 void pipe_end_transaction(usb_pipe_t *); 40 typedef uint8_t telnet_cmd_t; 46 41 47 int pipe_add_ref(usb_pipe_t *, bool); 48 void pipe_drop_ref(usb_pipe_t *); 42 /* 43 * Telnet commands. 44 */ 45 46 #define TELNET_IAC 255 47 48 #define TELNET_WILL 251 49 #define TELNET_WONT 252 50 #define TELNET_DO 253 51 #define TELNET_DONT 254 52 53 #define TELNET_IS_OPTION_CODE(code) (((code) >= 251) && ((code) <= 254)) 54 55 #define TELNET_ECHO 1 56 #define TELNET_SUPPRESS_GO_AHEAD 3 57 #define TELNET_LINEMODE 34 49 58 50 59 51 60 #endif 61 52 62 /** 53 63 * @} -
uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c
re895352 r49ff5f3 62 62 63 63 static irq_code_t ts_irq_code = { 64 0, 65 NULL, 64 66 sizeof(ts_irq_cmds) / sizeof(irq_cmd_t), 65 67 ts_irq_cmds … … 85 87 86 88 printf(NAME ": S3C24xx touchscreen driver\n"); 87 88 rc = loc_server_register(NAME, s3c24xx_ts_connection); 89 90 async_set_client_connection(s3c24xx_ts_connection); 91 rc = loc_server_register(NAME); 89 92 if (rc < 0) { 90 93 printf(NAME ": Unable to register driver.\n"); … … 139 142 140 143 async_set_interrupt_received(s3c24xx_ts_irq_handler); 141 register_irq(inr, device_assign_devno(), 0, &ts_irq_code);144 irq_register(inr, device_assign_devno(), 0, &ts_irq_code); 142 145 143 146 s3c24xx_ts_wait_for_int_mode(ts, updn_down); -
uspace/srv/hw/bus/cuda_adb/cuda_adb.c
re895352 r49ff5f3 104 104 enum { 105 105 ADB_MAX_ADDR = 16 106 }; 107 108 static irq_pio_range_t cuda_ranges[] = { 109 { 110 .base = 0, 111 .size = sizeof(cuda_t) 112 } 106 113 }; 107 114 … … 130 137 131 138 static irq_code_t cuda_irq_code = { 139 sizeof(cuda_ranges) / sizeof(irq_pio_range_t), 140 cuda_ranges, 132 141 sizeof(cuda_cmds) / sizeof(irq_cmd_t), 133 142 cuda_cmds … … 154 163 } 155 164 156 rc = loc_server_register(NAME, cuda_connection); 165 async_set_client_connection(cuda_connection); 166 rc = loc_server_register(NAME); 157 167 if (rc < 0) { 158 168 printf(NAME ": Unable to register server.\n"); … … 254 264 return -1; 255 265 256 if (sysinfo_get_value("cuda.address.kernel", &(instance->cuda_kernel)) != EOK)257 return -1;258 259 266 void *vaddr; 260 267 if (pio_enable((void *) instance->cuda_physical, sizeof(cuda_t), &vaddr) != 0) … … 273 280 pio_write_8(&dev->ier, IER_CLR | ALL_INT); 274 281 275 cuda_irq_code.cmds[0].addr = (void *) &((cuda_t *) instance->cuda_kernel)->ifr; 282 cuda_irq_code.ranges[0].base = (uintptr_t) instance->cuda_physical; 283 cuda_irq_code.cmds[0].addr = (void *) &((cuda_t *) instance->cuda_physical)->ifr; 276 284 async_set_interrupt_received(cuda_irq_handler); 277 register_irq(10, device_assign_devno(), 0, &cuda_irq_code);285 irq_register(10, device_assign_devno(), 0, &cuda_irq_code); 278 286 279 287 /* Enable SR interrupt. */ -
uspace/srv/hw/bus/cuda_adb/cuda_adb.h
re895352 r49ff5f3 111 111 cuda_t *cuda; 112 112 uintptr_t cuda_physical; 113 uintptr_t cuda_kernel;114 113 115 114 uint8_t rcv_buf[CUDA_RCV_BUF_SIZE]; -
uspace/srv/hw/char/s3c24xx_uart/s3c24xx_uart.c
re895352 r49ff5f3 60 60 61 61 static irq_code_t uart_irq_code = { 62 0, 63 NULL, 62 64 sizeof(uart_irq_cmds) / sizeof(irq_cmd_t), 63 65 uart_irq_cmds … … 79 81 printf(NAME ": S3C24xx on-chip UART driver\n"); 80 82 81 rc = loc_server_register(NAME, s3c24xx_uart_connection); 83 async_set_client_connection(s3c24xx_uart_connection); 84 rc = loc_server_register(NAME); 82 85 if (rc < 0) { 83 86 printf(NAME ": Unable to register server.\n"); … … 194 197 async_set_interrupt_received(s3c24xx_uart_irq_handler); 195 198 196 register_irq(inr, device_assign_devno(), 0, &uart_irq_code);199 irq_register(inr, device_assign_devno(), 0, &uart_irq_code); 197 200 198 201 /* Enable FIFO, Tx trigger level: empty, Rx trigger level: 1 byte. */ -
uspace/srv/hw/irc/obio/obio.c
re895352 r49ff5f3 124 124 125 125 base_phys = (void *) paddr; 126 base_virt = as_get_mappable_page(OBIO_SIZE);127 126 128 127 int flags = AS_AREA_READ | AS_AREA_WRITE; 129 int retval = physmem_map(base_phys, (void *) base_virt, 130 ALIGN_UP(OBIO_SIZE, PAGE_SIZE) >> PAGE_WIDTH, flags); 128 int retval = physmem_map(base_phys, 129 ALIGN_UP(OBIO_SIZE, PAGE_SIZE) >> PAGE_WIDTH, flags, 130 (void *) &base_virt); 131 131 132 132 if (retval < 0) { -
uspace/srv/loc/loc.c
re895352 r49ff5f3 56 56 #define NULL_SERVICES 256 57 57 58 /** Callback session */ 59 typedef struct { 60 link_t cb_sess_list; 61 async_sess_t *sess; 62 } cb_sess_t; 63 58 64 LIST_INITIALIZE(services_list); 59 65 LIST_INITIALIZE(namespaces_list); … … 86 92 87 93 static FIBRIL_MUTEX_INITIALIZE(callback_sess_mutex); 88 static async_sess_t *callback_sess = NULL;94 static LIST_INITIALIZE(callback_sess_list); 89 95 90 96 service_id_t loc_create_id(void) … … 608 614 size_t act_size; 609 615 loc_service_t *svc; 616 char *fqn; 610 617 611 618 if (!async_data_read_receive(&callid, &size)) { … … 625 632 } 626 633 627 act_size = str_size(svc->name); 634 if (asprintf(&fqn, "%s/%s", svc->namespace->name, svc->name) < 0) { 635 fibril_mutex_unlock(&services_list_mutex); 636 async_answer_0(callid, ENOMEM); 637 async_answer_0(iid, ENOMEM); 638 return; 639 } 640 641 act_size = str_size(fqn); 628 642 if (act_size > size) { 643 free(fqn); 629 644 fibril_mutex_unlock(&services_list_mutex); 630 645 async_answer_0(callid, EOVERFLOW); … … 633 648 } 634 649 635 sysarg_t retval = async_data_read_finalize(callid, svc->name,650 sysarg_t retval = async_data_read_finalize(callid, fqn, 636 651 min(size, act_size)); 652 free(fqn); 637 653 638 654 fibril_mutex_unlock(&services_list_mutex); … … 790 806 } 791 807 792 /** Find ID for category specified by name. 793 * 794 * On success, answer will contain EOK int retval and service ID in arg1. 808 /** Create callback connection. 809 * 810 * Create callback connection which will be used to send category change 811 * events. 812 * 813 * On success, answer will contain EOK int retval. 795 814 * On failure, error code will be sent in retval. 796 815 * … … 798 817 static void loc_callback_create(ipc_callid_t iid, ipc_call_t *icall) 799 818 { 800 async_sess_t *cb_sess = async_callback_receive(EXCHANGE_SERIALIZE);819 cb_sess_t *cb_sess = calloc(1, sizeof(cb_sess_t)); 801 820 if (cb_sess == NULL) { 802 821 async_answer_0(iid, ENOMEM); … … 804 823 } 805 824 825 async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE); 826 if (sess == NULL) { 827 free(cb_sess); 828 async_answer_0(iid, ENOMEM); 829 return; 830 } 831 832 cb_sess->sess = sess; 833 link_initialize(&cb_sess->cb_sess_list); 834 806 835 fibril_mutex_lock(&callback_sess_mutex); 807 if (callback_sess != NULL) { 808 fibril_mutex_unlock(&callback_sess_mutex); 809 async_answer_0(iid, EEXIST); 810 return; 811 } 812 813 callback_sess = cb_sess; 836 list_append(&cb_sess->cb_sess_list, &callback_sess_list); 814 837 fibril_mutex_unlock(&callback_sess_mutex); 815 838 … … 820 843 { 821 844 fibril_mutex_lock(&callback_sess_mutex); 822 823 if (callback_sess != NULL) { 824 async_exch_t *exch = async_exchange_begin(callback_sess); 845 846 list_foreach(callback_sess_list, link) { 847 cb_sess_t *cb_sess; 848 849 cb_sess = list_get_instance(link, cb_sess_t, cb_sess_list); 850 851 async_exch_t *exch = async_exchange_begin(cb_sess->sess); 825 852 async_msg_0(exch, LOC_EVENT_CAT_CHANGE); 826 853 async_exchange_end(exch); 827 854 } 828 855 829 856 fibril_mutex_unlock(&callback_sess_mutex); 830 857 } … … 1267 1294 1268 1295 cat = category_new("bd"); 1296 categ_dir_add_cat(&cdir, cat); 1297 1298 cat = category_new("iplink"); 1269 1299 categ_dir_add_cat(&cdir, cat); 1270 1300 -
uspace/srv/net/ethip/atrans.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2012 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libnet29 /** @addtogroup inet 30 30 * @{ 31 31 */ 32 33 /** @file34 * ICMP client interface.32 /** 33 * @file 34 * @brief 35 35 */ 36 36 37 #ifndef LIBNET_ICMP_CLIENT_H_38 #define LIBNET_ICMP_CLIENT_H_37 #ifndef ATRANS_H_ 38 #define ATRANS_H_ 39 39 40 #include < net/icmp_codes.h>41 #include <net/packet.h>40 #include <inet/iplink_srv.h> 41 #include "ethip.h" 42 42 43 extern int icmp_client_process_packet(packet_t *, icmp_type_t *, icmp_code_t *, 44 icmp_param_t *, icmp_param_t *); 45 extern size_t icmp_client_header_length(packet_t *); 43 extern int atrans_add(iplink_srv_addr_t *, mac48_addr_t *); 44 extern int atrans_remove(iplink_srv_addr_t *); 45 extern int atrans_lookup(iplink_srv_addr_t *, mac48_addr_t *); 46 extern int atrans_wait_timeout(suseconds_t); 46 47 47 48 #endif -
uspace/srv/net/inet/icmp_std.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2012 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libc29 /** @addtogroup inet 30 30 * @{ 31 31 */ 32 33 /** @file 34 * ICMP module application interface.32 /** 33 * @file ICMP standard definitions 34 * 35 35 */ 36 36 37 #ifndef LIBC_ICMP_API_H_38 #define LIBC_ICMP_API_H_37 #ifndef ICMP_STD_H_ 38 #define ICMP_STD_H_ 39 39 40 #include <net/socket_codes.h>41 #include <net/inet.h>42 40 #include <sys/types.h> 43 #include <sys/time.h>44 #include <adt/measured_strings.h>45 #include <net/ip_codes.h>46 #include <net/icmp_codes.h>47 #include <net/icmp_common.h>48 #include <async.h>49 41 50 /** @name ICMP module application interface 51 * This interface is used by other application modules. 52 */ 53 /*@{*/ 42 #define IP_PROTO_ICMP 1 54 43 55 extern int icmp_echo_msg(async_sess_t *, size_t, mseconds_t, ip_ttl_t, ip_tos_t, 56 int, const struct sockaddr *, socklen_t); 44 /** Type of service used for ICMP */ 45 #define ICMP_TOS 0 57 46 58 /*@}*/ 47 /** ICMP message type */ 48 enum icmp_type { 49 ICMP_ECHO_REPLY = 0, 50 ICMP_ECHO_REQUEST = 8 51 }; 52 53 /** ICMP Echo Request or Reply message header */ 54 typedef struct { 55 /** ICMP message type */ 56 uint8_t type; 57 /** Code (0) */ 58 uint8_t code; 59 /** Internet checksum of the ICMP message */ 60 uint16_t checksum; 61 /** Indentifier */ 62 uint16_t ident; 63 /** Sequence number */ 64 uint16_t seq_no; 65 } icmp_echo_t; 59 66 60 67 #endif -
uspace/srv/net/tcp/Makefile
re895352 r49ff5f3 1 1 # 2 # Copyright (c) 2005 Martin Decky 3 # Copyright (c) 2007 Jakub Jermar 2 # Copyright (c) 2011 Jiri Svoboda 4 3 # All rights reserved. 5 4 # … … 28 27 # 29 28 30 USPACE_PREFIX = ../../.. /..29 USPACE_PREFIX = ../../.. 31 30 LIBS = $(LIBNET_PREFIX)/libnet.a 32 31 EXTRA_CFLAGS = -I$(LIBNET_PREFIX)/include … … 34 33 35 34 SOURCES = \ 36 tcp.c 35 conn.c \ 36 iqueue.c \ 37 ncsim.c \ 38 pdu.c \ 39 rqueue.c \ 40 segment.c \ 41 seq_no.c \ 42 sock.c \ 43 tcp.c \ 44 test.c \ 45 tqueue.c \ 46 ucall.c 37 47 38 48 include $(USPACE_PREFIX)/Makefile.common -
uspace/srv/net/tcp/segment.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libnet29 /** @addtogroup tcp 30 30 * @{ 31 31 */ 32 33 /** @file 34 * Ethernet protocol numbers according to the on-line IANA - Ethernet numbers 35 * http://www.iana.org/assignments/ethernet-numbers 36 * cited January 17 2009. 32 /** @file Segment processing 37 33 */ 38 34 39 #ifndef LIBNET_ETHERNET_PROTOCOLS_H_40 #define LIBNET_ETHERNET_PROTOCOLS_H_35 #ifndef SEGMENT_H 36 #define SEGMENT_H 41 37 42 38 #include <sys/types.h> 39 #include "tcp_type.h" 43 40 44 /** Ethernet protocol type definition. */ 45 typedef uint16_t eth_type_t; 41 extern tcp_segment_t *tcp_segment_new(void); 42 extern void tcp_segment_delete(tcp_segment_t *); 43 extern tcp_segment_t *tcp_segment_dup(tcp_segment_t *); 44 extern tcp_segment_t *tcp_segment_make_ctrl(tcp_control_t); 45 extern tcp_segment_t *tcp_segment_make_rst(tcp_segment_t *); 46 extern tcp_segment_t *tcp_segment_make_data(tcp_control_t, void *, size_t); 47 extern void tcp_segment_trim(tcp_segment_t *, uint32_t, uint32_t); 48 extern void tcp_segment_text_copy(tcp_segment_t *, void *, size_t); 49 extern size_t tcp_segment_text_size(tcp_segment_t *); 50 extern void tcp_segment_dump(tcp_segment_t *); 46 51 47 /** @name Ethernet protocols definitions */48 /*@{*/49 52 50 /** Ethernet minimal protocol number.51 * According to the IEEE 802.3 specification.52 */53 #define ETH_MIN_PROTO 0x0600 /* 1536 */54 55 /** Internet IP (IPv4) ethernet protocol type. */56 #define ETH_P_IP 0x080057 58 /** ARP ethernet protocol type. */59 #define ETH_P_ARP 0x080660 61 /*@}*/62 53 63 54 #endif -
uspace/srv/net/tcp/seq_no.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libnet29 /** @addtogroup tcp 30 30 * @{ 31 31 */ 32 33 /** @file 34 * Internetwork layer module interface for the underlying network interface 35 * layer. This interface is always called by the remote modules. 32 /** @file Sequence number computations 36 33 */ 37 34 38 #ifndef LIBNET_IL_REMOTE_H_39 #define LIBNET_IL_REMOTE_H_35 #ifndef SEQ_NO_H 36 #define SEQ_NO_H 40 37 41 #include <ipc/services.h>42 38 #include <sys/types.h> 43 #include <net/device.h> 44 #include <net/packet.h> 45 #include <async.h> 39 #include "tcp_type.h" 46 40 47 /** @name Internetwork layer module interface 48 * This interface is used by other modules. 49 */ 50 /*@{*/ 41 extern bool seq_no_ack_acceptable(tcp_conn_t *, uint32_t); 42 extern bool seq_no_ack_duplicate(tcp_conn_t *, uint32_t); 43 extern bool seq_no_in_rcv_wnd(tcp_conn_t *, uint32_t); 44 extern bool seq_no_new_wnd_update(tcp_conn_t *, tcp_segment_t *); 45 extern bool seq_no_segment_acked(tcp_conn_t *, tcp_segment_t *, uint32_t); 46 extern bool seq_no_syn_acked(tcp_conn_t *); 47 extern bool seq_no_segment_ready(tcp_conn_t *, tcp_segment_t *); 48 extern bool seq_no_segment_acceptable(tcp_conn_t *, tcp_segment_t *); 49 extern void seq_no_seg_trim_calc(tcp_conn_t *, tcp_segment_t *, uint32_t *, 50 uint32_t *); 51 extern int seq_no_seg_cmp(tcp_conn_t *, tcp_segment_t *, tcp_segment_t *); 51 52 52 extern int il_device_state_msg(async_sess_t *, nic_device_id_t, 53 nic_device_state_t, services_t); 54 extern int il_received_msg(async_sess_t *, nic_device_id_t, packet_t *, 55 services_t); 56 extern int il_mtu_changed_msg(async_sess_t *, nic_device_id_t, size_t, 57 services_t); 58 extern int il_addr_changed_msg(async_sess_t *, nic_device_id_t, size_t, 59 const uint8_t *); 60 61 /*@}*/ 53 extern uint32_t seq_no_control_len(tcp_control_t); 62 54 63 55 #endif -
uspace/srv/net/tcp/sock.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 06 Jakub Vana2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup ia3229 /** @addtogroup tcp 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file Socket provider 33 33 */ 34 34 35 #ifndef KERN_ia32_VESA_H_36 #define KERN_ia32_VESA_H_35 #ifndef SOCK_H 36 #define SOCK_H 37 37 38 #include < typedefs.h>38 #include <async.h> 39 39 40 extern bool vesa_init(void);40 extern int tcp_sock_init(void); 41 41 42 42 #endif -
uspace/srv/net/tcp/std.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libnet29 /** @addtogroup tcp 30 30 * @{ 31 31 */ 32 /** @file 33 * General CRC and checksum computation. 32 /** @file TCP header definitions 33 * 34 * Based on IETF RFC 793 34 35 */ 35 36 36 #ifndef LIBNET_CHECKSUM_H_37 #define LIBNET_CHECKSUM_H_37 #ifndef STD_H 38 #define STD_H 38 39 39 #include <byteorder.h>40 40 #include <sys/types.h> 41 41 42 /** IP checksum value for computed zero checksum. 43 * 44 * Zero is returned as 0xFFFF (not flipped) 45 * 46 */ 47 #define IP_CHECKSUM_ZERO 0xffffU 42 /** TCP Header (fixed part) */ 43 typedef struct { 44 /** Source port */ 45 uint16_t src_port; 46 /** Destination port */ 47 uint16_t dest_port; 48 /** Sequence number */ 49 uint32_t seq; 50 /** Acknowledgement number */ 51 uint32_t ack; 52 /** Data Offset, Reserved, Flags */ 53 uint16_t doff_flags; 54 /** Window */ 55 uint16_t window; 56 /* Checksum */ 57 uint16_t checksum; 58 /** Urgent pointer */ 59 uint16_t urg_ptr; 60 } tcp_header_t; 48 61 49 #ifdef __BE__ 62 /** Bits in tcp_header_t.doff_flags */ 63 enum doff_flags_bits { 64 DF_DATA_OFFSET_h = 15, 65 DF_DATA_OFFSET_l = 12, 66 DF_URG = 5, 67 DF_ACK = 4, 68 DF_PSH = 3, 69 DF_RST = 2, 70 DF_SYN = 1, 71 DF_FIN = 0 72 }; 50 73 51 #define compute_crc32(seed, data, length) \ 52 compute_crc32_be(seed, (uint8_t *) data, length) 74 /** TCP pseudo header */ 75 typedef struct { 76 /** Source address */ 77 uint32_t src_addr; 78 /** Destination address */ 79 uint32_t dest_addr; 80 /** Zero */ 81 uint8_t zero; 82 /** Protocol */ 83 uint8_t protocol; 84 /** TCP length */ 85 uint16_t tcp_length; 86 } tcp_phdr_t; 53 87 54 #endif 55 56 #ifdef __LE__ 57 58 #define compute_crc32(seed, data, length) \ 59 compute_crc32_le(seed, (uint8_t *) data, length) 60 61 #endif 62 63 extern uint32_t compute_crc32_le(uint32_t, uint8_t *, size_t); 64 extern uint32_t compute_crc32_be(uint32_t, uint8_t *, size_t); 65 extern uint32_t compute_checksum(uint32_t, uint8_t *, size_t); 66 extern uint16_t compact_checksum(uint32_t); 67 extern uint16_t flip_checksum(uint16_t); 68 extern uint16_t ip_checksum(uint8_t *, size_t); 69 extern uint64_t multicast_hash(const uint8_t addr[6]); 88 /** Option kind */ 89 enum opt_kind { 90 /** End of option list */ 91 OPT_END_LIST = 0, 92 /** No-operation */ 93 OPT_NOP = 1, 94 /** Maximum segment size */ 95 OPT_MAX_SEG_SIZE = 2 96 }; 70 97 71 98 #endif -
uspace/srv/net/tcp/tcp.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libc 30 * @{ 29 /** @addtogroup tcp 30 * @{ 31 */ 32 /** @file TCP (Transmission Control Protocol) network module 31 33 */ 32 34 33 /** @file 34 * ICMP module common interface. 35 */ 35 #ifndef TCP_H 36 #define TCP_H 36 37 37 #i fndef LIBC_ICMP_COMMON_H_38 # define LIBC_ICMP_COMMON_H_38 #include <async.h> 39 #include "tcp_type.h" 39 40 40 #include <ipc/services.h> 41 #include <sys/time.h> 42 #include <async.h> 43 44 extern async_sess_t *icmp_connect_module(void); 41 extern void tcp_transmit_pdu(tcp_pdu_t *); 45 42 46 43 #endif -
uspace/srv/net/udp/Makefile
re895352 r49ff5f3 1 1 # 2 # Copyright (c) 2005 Martin Decky 3 # Copyright (c) 2007 Jakub Jermar 2 # Copyright (c) 2012 Jiri Svoboda 4 3 # All rights reserved. 5 4 # … … 28 27 # 29 28 30 USPACE_PREFIX = ../../.. /..29 USPACE_PREFIX = ../../.. 31 30 LIBS = $(LIBNET_PREFIX)/libnet.a 32 31 EXTRA_CFLAGS = -I$(LIBNET_PREFIX)/include … … 34 33 35 34 SOURCES = \ 36 udp.c 35 assoc.c \ 36 msg.c \ 37 sock.c \ 38 pdu.c \ 39 ucall.c \ 40 udp.c \ 41 udp_inet.c 37 42 38 43 include $(USPACE_PREFIX)/Makefile.common -
uspace/srv/net/udp/assoc.h
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2012 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libnet29 /** @addtogroup udp 30 30 * @{ 31 31 */ 32 33 /** @file 34 * Link service access point identifiers. 32 /** @file UDP associations 35 33 */ 36 34 37 #ifndef LIBNET_ETHERNET_LSAP_H_38 #define LIBNET_ETHERNET_LSAP_H_35 #ifndef ASSOC_H 36 #define ASSOC_H 39 37 40 38 #include <sys/types.h> 39 #include "udp_type.h" 41 40 42 /** Ethernet LSAP type definition. */ 43 typedef uint8_t eth_lsap_t; 41 extern udp_assoc_t *udp_assoc_new(udp_sock_t *, udp_sock_t *); 42 extern void udp_assoc_delete(udp_assoc_t *); 43 extern void udp_assoc_add(udp_assoc_t *); 44 extern void udp_assoc_remove(udp_assoc_t *); 45 extern void udp_assoc_addref(udp_assoc_t *); 46 extern void udp_assoc_delref(udp_assoc_t *); 47 extern void udp_assoc_set_foreign(udp_assoc_t *, udp_sock_t *); 48 extern void udp_assoc_set_local(udp_assoc_t *, udp_sock_t *); 49 extern int udp_assoc_send(udp_assoc_t *, udp_sock_t *, udp_msg_t *); 50 extern int udp_assoc_recv(udp_assoc_t *, udp_msg_t **, udp_sock_t *); 51 extern void udp_assoc_received(udp_sockpair_t *, udp_msg_t *); 44 52 45 /** @name Ethernet LSAP values definitions */46 /*@{*/47 48 /** Null LSAP LSAP identifier. */49 #define ETH_LSAP_NULL 0x0050 /** ARPANET Internet Protocol (IP) LSAP identifier. */51 #define ETH_LSAP_IP 0x0652 /** ARPANET Address Resolution Protocol (ARP) LSAP identifier. */53 #define ETH_LSAP_ARP 0x9854 /** SubNetwork Access Protocol (SNAP) LSAP identifier. */55 #define ETH_LSAP_SNAP 0xAA56 /** Global LSAP LSAP identifier. */57 #define ETH_LSAP_GLSAP 0xFF58 59 /*@}*/60 53 61 54 #endif -
uspace/srv/net/udp/udp.c
re895352 r49ff5f3 1 1 /* 2 * Copyright (c) 20 08 Lukas Mejdrech2 * Copyright (c) 2012 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 31 31 */ 32 32 33 /** @file34 * UDP module.33 /** 34 * @file UDP (User Datagram Protocol) service 35 35 */ 36 36 37 #ifndef NET_UDP_H_ 38 #define NET_UDP_H_ 37 #include <async.h> 38 #include <errno.h> 39 #include <io/log.h> 40 #include <stdio.h> 41 #include <task.h> 39 42 40 #include <async.h> 41 #include <fibril_synch.h> 42 #include <socket_core.h> 43 #include <tl_common.h> 43 #include "udp_inet.h" 44 #include "sock.h" 44 45 45 /** Type definition of the UDP global data. 46 * @see udp_globals 46 #define NAME "udp" 47 48 static int udp_init(void) 49 { 50 int rc; 51 52 log_msg(LVL_DEBUG, "udp_init()"); 53 54 rc = udp_inet_init(); 55 if (rc != EOK) { 56 log_msg(LVL_ERROR, "Failed connecting to internet service."); 57 return ENOENT; 58 } 59 60 rc = udp_sock_init(); 61 if (rc != EOK) { 62 log_msg(LVL_ERROR, "Failed initializing socket service."); 63 return ENOENT; 64 } 65 66 return EOK; 67 } 68 69 int main(int argc, char **argv) 70 { 71 int rc; 72 73 printf(NAME ": UDP (User Datagram Protocol) service\n"); 74 75 rc = log_init(NAME, LVL_WARN); 76 if (rc != EOK) { 77 printf(NAME ": Failed to initialize log.\n"); 78 return 1; 79 } 80 81 rc = udp_init(); 82 if (rc != EOK) 83 return 1; 84 85 printf(NAME ": Accepting connections.\n"); 86 task_retval(0); 87 async_manager(); 88 89 /* Not reached */ 90 return 0; 91 } 92 93 /** 94 * @} 47 95 */ 48 typedef struct udp_globals udp_globals_t;49 50 /** UDP global data. */51 struct udp_globals {52 /** Networking module session. */53 async_sess_t *net_sess;54 /** IP module session. */55 async_sess_t *ip_sess;56 /** ICMP module session. */57 async_sess_t *icmp_sess;58 /** Packet dimension. */59 packet_dimension_t packet_dimension;60 /** Indicates whether UDP checksum computing is enabled. */61 int checksum_computing;62 /** Indicates whether UDP autobnding on send is enabled. */63 int autobinding;64 /** Last used free port. */65 int last_used_port;66 /** Active sockets. */67 socket_ports_t sockets;68 /** Device packet dimensions. */69 packet_dimensions_t dimensions;70 /** Safety lock. */71 fibril_rwlock_t lock;72 };73 74 #endif75 76 /** @}77 */ -
uspace/srv/vfs/vfs.c
re895352 r49ff5f3 172 172 * Allocate and initialize the Path Lookup Buffer. 173 173 */ 174 plb = as_get_mappable_page(PLB_SIZE); 175 if (!plb) { 176 printf(NAME ": Cannot allocate a mappable piece of address space\n"); 177 return ENOMEM; 178 } 179 180 if (as_area_create(plb, PLB_SIZE, AS_AREA_READ | AS_AREA_WRITE | 181 AS_AREA_CACHEABLE) != plb) { 174 plb = as_area_create((void *) -1, PLB_SIZE, 175 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 176 if (plb == (void *) -1) { 182 177 printf(NAME ": Cannot create address space area\n"); 183 178 return ENOMEM;
Note:
See TracChangeset
for help on using the changeset viewer.
