Changes in / [b670523:503e4e3] in mainline
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/generic/src/version.c
rb670523 r503e4e3 32 32 33 33 static const char *project = "HelenOS bootloader"; 34 static const char *copyright = "Copyright (c) 2001-201 1HelenOS project";34 static const char *copyright = "Copyright (c) 2001-2010 HelenOS project"; 35 35 static const char *release = STRING(RELEASE); 36 36 static const char *name = STRING(NAME); -
kernel/generic/src/main/version.c
rb670523 r503e4e3 38 38 39 39 static const char *project = "SPARTAN kernel"; 40 static const char *copyright = "Copyright (c) 2001-201 1HelenOS project";40 static const char *copyright = "Copyright (c) 2001-2010 HelenOS project"; 41 41 static const char *release = STRING(RELEASE); 42 42 static const char *name = STRING(NAME); -
uspace/app/getterm/version.c
rb670523 r503e4e3 61 61 printf("HelenOS release %s (%s)%s%s\n", release, name, revision, timestamp); 62 62 printf("Running on %s (%s)\n", arch, term); 63 printf("Copyright (c) 2001-201 1HelenOS project\n\n");63 printf("Copyright (c) 2001-2010 HelenOS project\n\n"); 64 64 } 65 65 -
uspace/drv/usbmouse/init.c
rb670523 r503e4e3 43 43 #include <errno.h> 44 44 45 // FIXME: remove this header 46 #include <kernel/ipc/ipc_methods.h> 47 45 48 /** Mouse polling endpoint description for boot protocol subclass. */ 46 49 usb_endpoint_description_t poll_endpoint_description = { … … 53 56 }; 54 57 55 /** Default handler for IPC methods not handled by DDF. 56 * 57 * @param fun Device function handling the call. 58 * @param icallid Call ID. 59 * @param icall Call data. 60 * 61 */ 62 static void default_connection_handler(ddf_fun_t *fun, ipc_callid_t icallid, 63 ipc_call_t *icall) 64 { 65 usb_mouse_t *mouse = (usb_mouse_t *) fun->driver_data; 66 assert(mouse != NULL); 67 68 async_sess_t *callback = 69 async_callback_receive_start(EXCHANGE_SERIALIZE, icall); 70 71 if (callback) { 72 if (mouse->console_sess == NULL) { 73 mouse->console_sess = callback; 74 async_answer_0(icallid, EOK); 75 } else 76 async_answer_0(icallid, ELIMIT); 77 } else 78 async_answer_0(icallid, EINVAL); 79 } 80 58 static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); 81 59 /** Device ops for USB mouse. */ 82 60 static ddf_dev_ops_t mouse_ops = { 83 61 .default_handler = default_connection_handler 84 62 }; 63 64 /** Default handler for IPC methods not handled by DDF. 65 * 66 * @param fun Device function handling the call. 67 * @param icallid Call id. 68 * @param icall Call data. 69 */ 70 void default_connection_handler(ddf_fun_t *fun, 71 ipc_callid_t icallid, ipc_call_t *icall) 72 { 73 sysarg_t method = IPC_GET_IMETHOD(*icall); 74 75 usb_mouse_t *mouse = (usb_mouse_t *) fun->driver_data; 76 assert(mouse != NULL); 77 78 if (method == IPC_M_CONNECT_TO_ME) { 79 int callback = IPC_GET_ARG5(*icall); 80 81 if (mouse->console_phone != -1) { 82 async_answer_0(icallid, ELIMIT); 83 return; 84 } 85 86 mouse->console_phone = callback; 87 async_answer_0(icallid, EOK); 88 return; 89 } 90 91 async_answer_0(icallid, EINVAL); 92 } 85 93 86 94 /** Create USB mouse device. … … 94 102 { 95 103 usb_mouse_t *mouse = malloc(sizeof(usb_mouse_t)); 96 if (mouse == NULL) 104 if (mouse == NULL) { 97 105 return ENOMEM; 98 106 } 99 107 mouse->dev = dev; 100 mouse->console_ sess = NULL;101 108 mouse->console_phone = -1; 109 102 110 int rc; 103 111 104 112 /* Create DDF function. */ 105 113 mouse->mouse_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "mouse"); … … 108 116 goto leave; 109 117 } 110 118 111 119 mouse->mouse_fun->ops = &mouse_ops; 112 120 113 121 rc = ddf_fun_bind(mouse->mouse_fun); 114 if (rc != EOK) 122 if (rc != EOK) { 115 123 goto leave; 116 124 } 125 117 126 /* Add the function to mouse class. */ 118 127 rc = ddf_fun_add_to_class(mouse->mouse_fun, "mouse"); 119 if (rc != EOK) 128 if (rc != EOK) { 120 129 goto leave; 130 } 121 131 122 132 /* Set the boot protocol. */ 123 133 rc = usbhid_req_set_protocol(&dev->ctrl_pipe, dev->interface_no, 124 134 USB_HID_PROTOCOL_BOOT); 125 if (rc != EOK) 135 if (rc != EOK) { 126 136 goto leave; 137 } 127 138 128 /* Everything all right. */139 /* Everything all right. */ 129 140 dev->driver_data = mouse; 130 141 mouse->mouse_fun->driver_data = mouse; 131 142 132 143 return EOK; 133 144 134 145 leave: 135 146 free(mouse); 147 136 148 return rc; 137 149 } -
uspace/drv/usbmouse/main.c
rb670523 r503e4e3 34 34 * Main routines of USB boot protocol mouse driver. 35 35 */ 36 37 36 #include "mouse.h" 38 37 #include <usb/debug.h> … … 41 40 #include <str_error.h> 42 41 43 #define NAME "usbmouse"44 45 42 /** Callback when new mouse device is attached and recognised by DDF. 46 43 * 47 44 * @param dev Representation of a generic DDF device. 48 *49 45 * @return Error code. 50 *51 46 */ 52 47 static int usbmouse_add_device(usb_device_t *dev) … … 58 53 return rc; 59 54 } 60 55 61 56 usb_log_debug("Polling pipe at endpoint %d.\n", 62 57 dev->pipes[0].pipe->endpoint_no); 63 64 rc = usb_device_auto_poll(dev, 0, usb_mouse_polling_callback,65 dev->pipes[0].pipe->max_packet_size,58 59 rc = usb_device_auto_poll(dev, 0, 60 usb_mouse_polling_callback, dev->pipes[0].pipe->max_packet_size, 66 61 usb_mouse_polling_ended_callback, dev->driver_data); 67 62 68 63 if (rc != EOK) { 69 64 usb_log_error("Failed to start polling fibril: %s.\n", … … 71 66 return rc; 72 67 } 73 68 74 69 usb_log_info("controlling new mouse (handle %" PRIun ").\n", 75 70 dev->ddf_dev->handle); 76 71 77 72 return EOK; 78 73 } … … 98 93 { 99 94 usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME); 95 100 96 return usb_driver_main(&mouse_driver); 101 97 } -
uspace/drv/usbmouse/mouse.c
rb670523 r503e4e3 40 40 #include <ipc/mouse.h> 41 41 #include <async.h> 42 #include <async_obsolete.h> 42 43 #include "mouse.h" 43 44 44 45 /** Mouse polling callback. 45 46 * 46 * @param dev 47 * @param dev Device that is being polled. 47 48 * @param buffer Data buffer. 48 * @param size Buffer size in bytes. 49 * @param arg Pointer to usb_mouse_t. 50 * 49 * @param buffer_size Buffer size in bytes. 50 * @param arg Custom argument - points to usb_mouse_t. 51 51 * @return Always true. 52 *53 52 */ 54 bool usb_mouse_polling_callback(usb_device_t *dev, uint8_t *buffer,55 size_tsize, void *arg)53 bool usb_mouse_polling_callback(usb_device_t *dev, 54 uint8_t *buffer, size_t buffer_size, void *arg) 56 55 { 57 56 usb_mouse_t *mouse = (usb_mouse_t *) arg; 58 57 59 58 usb_log_debug2("got buffer: %s.\n", 60 usb_debug_str_buffer(buffer, size, 0));61 59 usb_debug_str_buffer(buffer, buffer_size, 0)); 60 62 61 uint8_t butt = buffer[0]; 63 62 char str_buttons[4] = { … … 67 66 0 68 67 }; 69 68 70 69 int shift_x = ((int) buffer[1]) - 127; 71 70 int shift_y = ((int) buffer[2]) - 127; 72 71 int wheel = ((int) buffer[3]) - 127; 73 74 if (buffer[1] == 0) 72 73 if (buffer[1] == 0) { 75 74 shift_x = 0; 76 77 if (buffer[2] == 0) 75 } 76 if (buffer[2] == 0) { 78 77 shift_y = 0; 79 80 if (buffer[3] == 0) 78 } 79 if (buffer[3] == 0) { 81 80 wheel = 0; 82 83 if (mouse->console_sess) { 81 } 82 83 if (mouse->console_phone >= 0) { 84 84 if ((shift_x != 0) || (shift_y != 0)) { 85 // FIXME: guessed for QEMU 86 87 async_exch_t *exch = async_exchange_begin(mouse->console_sess); 88 async_req_2_0(exch, MEVENT_MOVE, -shift_x / 10, -shift_y / 10); 89 async_exchange_end(exch); 85 /* FIXME: guessed for QEMU */ 86 async_obsolete_req_2_0(mouse->console_phone, 87 MEVENT_MOVE, 88 - shift_x / 10, - shift_y / 10); 90 89 } 91 90 if (butt) { 92 // FIXME: proper button clicking 93 94 async_exch_t *exch = async_exchange_begin(mouse->console_sess); 95 async_req_2_0(exch, MEVENT_BUTTON, 1, 1); 96 async_req_2_0(exch, MEVENT_BUTTON, 1, 0); 97 async_exchange_end(exch); 91 /* FIXME: proper button clicking. */ 92 async_obsolete_req_2_0(mouse->console_phone, 93 MEVENT_BUTTON, 1, 1); 94 async_obsolete_req_2_0(mouse->console_phone, 95 MEVENT_BUTTON, 1, 0); 98 96 } 99 97 } 100 98 101 99 usb_log_debug("buttons=%s dX=%+3d dY=%+3d wheel=%+3d\n", 102 100 str_buttons, shift_x, shift_y, wheel); 103 101 104 102 /* Guess. */ 105 103 async_usleep(1000); 106 104 107 105 return true; 108 106 } … … 110 108 /** Callback when polling is terminated. 111 109 * 112 * @param dev 110 * @param dev Device where the polling terminated. 113 111 * @param recurring_errors Whether the polling was terminated due to 114 * recurring errors. 115 * @param arg Pointer to usb_mouse_t. 116 * 112 * recurring errors. 113 * @param arg Custom argument - points to usb_mouse_t. 117 114 */ 118 void usb_mouse_polling_ended_callback(usb_device_t *dev, bool recurring_errors,119 void *arg)115 void usb_mouse_polling_ended_callback(usb_device_t *dev, 116 bool recurring_errors, void *arg) 120 117 { 121 118 usb_mouse_t *mouse = (usb_mouse_t *) arg; 122 123 async_ hangup(mouse->console_sess);124 mouse->console_ sess = NULL;125 119 120 async_obsolete_hangup(mouse->console_phone); 121 mouse->console_phone = -1; 122 126 123 usb_device_destroy(dev); 127 124 } -
uspace/drv/usbmouse/mouse.h
rb670523 r503e4e3 34 34 * Common definitions for USB mouse driver. 35 35 */ 36 37 36 #ifndef USBMOUSE_MOUSE_H_ 38 37 #define USBMOUSE_MOUSE_H_ … … 41 40 #include <usb/dev/pipes.h> 42 41 #include <time.h> 43 #include <async.h>44 42 45 #define POLL_PIPE(dev) \ 46 ((dev)->pipes[0].pipe) 43 #define NAME "usbmouse" 47 44 48 45 /** Container for USB mouse device. */ … … 50 47 /** Generic device container. */ 51 48 usb_device_t *dev; 52 53 49 /** Function representing the device. */ 54 50 ddf_fun_t *mouse_fun; 55 56 51 /** Polling interval in microseconds. */ 57 52 suseconds_t poll_interval_us; 58 59 /** Callback session to console (consumer). */ 60 async_sess_t *console_sess; 53 /** IPC phone to console (consumer). */ 54 int console_phone; 61 55 } usb_mouse_t; 56 57 #define POLL_PIPE(dev) ((dev)->pipes[0].pipe) 62 58 63 59 extern usb_endpoint_description_t poll_endpoint_description; 64 60 65 externint usb_mouse_create(usb_device_t *);66 extern bool usb_mouse_polling_callback(usb_device_t *, uint8_t *, size_t, 67 68 externvoid usb_mouse_polling_ended_callback(usb_device_t *, bool, void *);61 int usb_mouse_create(usb_device_t *); 62 63 bool usb_mouse_polling_callback(usb_device_t *, uint8_t *, size_t, void *); 64 void usb_mouse_polling_ended_callback(usb_device_t *, bool, void *); 69 65 70 66 #endif 71 72 67 /** 73 68 * @} -
uspace/drv/vhc/conndev.c
rb670523 r503e4e3 45 45 static fibril_local char plugged_device_name[PLUGGED_DEVICE_NAME_MAXLEN + 1] = "<unknown>"; 46 46 47 #if 0 47 48 /** Receive device name. 48 49 * … … 84 85 plugged_device_name[len] = 0; 85 86 } 87 #endif 86 88 87 89 /** Default handler for IPC methods not handled by DDF. … … 91 93 * @param icall Call data. 92 94 */ 93 void default_connection_handler(ddf_fun_t *fun, ipc_callid_t icallid,94 ipc_call _t *icall)95 void default_connection_handler(ddf_fun_t *fun, 96 ipc_callid_t icallid, ipc_call_t *icall) 95 97 { 98 // FIXME: 99 // This code needs to be refactored since the async 100 // framework does not support automatic callback connections 101 // yet. 102 103 #if 0 96 104 vhc_data_t *vhc = fun->dev->driver_data; 97 98 async_sess_t *callback = 99 async_callback_receive_start(EXCHANGE_SERIALIZE, icall);100 101 if (callback) {102 int rc = vhc_virtdev_plug(vhc, callback,&plugged_device_handle);105 sysarg_t method = IPC_GET_IMETHOD(*icall); 106 107 if (method == IPC_M_CONNECT_TO_ME) { 108 int callback = IPC_GET_ARG5(*icall); 109 int rc = vhc_virtdev_plug(vhc, callback, 110 &plugged_device_handle); 103 111 if (rc != EOK) { 104 112 async_answer_0(icallid, rc); … … 106 114 return; 107 115 } 108 116 109 117 async_answer_0(icallid, EOK); 110 118 111 119 receive_device_name(callback); 112 120 113 121 usb_log_info("New virtual device `%s' (id: %" PRIxn ").\n", 114 122 plugged_device_name, plugged_device_handle); 115 } else 116 async_answer_0(icallid, EINVAL); 123 124 return; 125 } 126 #endif 127 128 async_answer_0(icallid, EINVAL); 117 129 } 118 130 -
uspace/lib/c/generic/async.c
rb670523 r503e4e3 2339 2339 * @param mgmt Exchange management style. 2340 2340 * 2341 * @return New async session. 2342 * @return NULL on failure. 2341 * @return New async session or NULL on failure. 2343 2342 * 2344 2343 */ … … 2378 2377 } 2379 2378 2380 /** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls.2381 *2382 * If the call is IPC_M_CONNECT_TO_ME then a new2383 * async session is created. However, the phone is2384 * not accepted automatically.2385 *2386 * @param mgmt Exchange management style.2387 * @param call Call data.2388 *2389 * @return New async session.2390 * @return NULL on failure.2391 * @return NULL if the call is not IPC_M_CONNECT_TO_ME.2392 *2393 */2394 async_sess_t *async_callback_receive_start(exch_mgmt_t mgmt, ipc_call_t *call)2395 {2396 int phone = (int) IPC_GET_ARG5(*call);2397 2398 if ((IPC_GET_IMETHOD(*call) != IPC_M_CONNECT_TO_ME) ||2399 (phone < 0))2400 return NULL;2401 2402 async_sess_t *sess = (async_sess_t *) malloc(sizeof(async_sess_t));2403 if (sess == NULL)2404 return NULL;2405 2406 sess->mgmt = mgmt;2407 sess->phone = phone;2408 sess->arg1 = 0;2409 sess->arg2 = 0;2410 sess->arg3 = 0;2411 2412 list_initialize(&sess->exch_list);2413 fibril_mutex_initialize(&sess->mutex);2414 atomic_set(&sess->refcnt, 0);2415 2416 return sess;2417 }2418 2419 2379 /** @} 2420 2380 */ -
uspace/lib/c/generic/devman.c
rb670523 r503e4e3 231 231 } 232 232 233 async_wait_for(req, &retval); 234 if (retval != EOK) { 235 devman_exchange_end(exch); 236 237 if (funh != NULL) 238 *funh = -1; 239 240 return retval; 241 } 242 243 if (funh != NULL) 244 *funh = (int) IPC_GET_ARG1(answer); 245 233 246 link_t *link = match_ids->ids.next; 234 247 match_id_t *match_id = NULL; … … 237 250 match_id = list_get_instance(link, match_id_t, link); 238 251 239 ipc_call_t answer 2;240 aid_t req 2= async_send_1(exch, DEVMAN_ADD_MATCH_ID,241 match_id->score, &answer 2);252 ipc_call_t answer; 253 aid_t req = async_send_1(exch, DEVMAN_ADD_MATCH_ID, 254 match_id->score, &answer); 242 255 retval = async_data_write_start(exch, match_id->id, 243 256 str_size(match_id->id)); 244 if (retval != EOK) {245 devman_exchange_end(exch);246 async_wait_for(req2, NULL);247 async_wait_for(req, NULL);248 return retval;249 }250 251 async_wait_for(req2, &retval);252 257 if (retval != EOK) { 253 258 devman_exchange_end(exch); … … 256 261 } 257 262 263 async_wait_for(req, &retval); 264 if (retval != EOK) { 265 devman_exchange_end(exch); 266 return retval; 267 } 268 258 269 link = link->next; 259 270 } 260 271 261 272 devman_exchange_end(exch); 262 263 async_wait_for(req, &retval); 264 if (retval == EOK) { 265 if (funh != NULL) 266 *funh = (int) IPC_GET_ARG1(answer); 267 } else { 268 if (funh != NULL) 269 *funh = -1; 270 } 271 272 return retval; 273 return EOK; 273 274 } 274 275 -
uspace/lib/c/include/async.h
rb670523 r503e4e3 464 464 extern async_sess_t *async_clone_receive(exch_mgmt_t); 465 465 extern async_sess_t *async_callback_receive(exch_mgmt_t); 466 extern async_sess_t *async_callback_receive_start(exch_mgmt_t, ipc_call_t *);467 466 468 467 #endif
Note:
See TracChangeset
for help on using the changeset viewer.