Changeset b670523 in mainline
- Timestamp:
- 2011-06-09T20:42:27Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9ec25a6
- Parents:
- 503e4e3 (diff), 390d80d (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. - Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/generic/src/version.c
r503e4e3 rb670523 32 32 33 33 static const char *project = "HelenOS bootloader"; 34 static const char *copyright = "Copyright (c) 2001-201 0HelenOS project";34 static const char *copyright = "Copyright (c) 2001-2011 HelenOS project"; 35 35 static const char *release = STRING(RELEASE); 36 36 static const char *name = STRING(NAME); -
kernel/generic/src/main/version.c
r503e4e3 rb670523 38 38 39 39 static const char *project = "SPARTAN kernel"; 40 static const char *copyright = "Copyright (c) 2001-201 0HelenOS project";40 static const char *copyright = "Copyright (c) 2001-2011 HelenOS project"; 41 41 static const char *release = STRING(RELEASE); 42 42 static const char *name = STRING(NAME); -
uspace/app/getterm/version.c
r503e4e3 rb670523 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 0HelenOS project\n\n");63 printf("Copyright (c) 2001-2011 HelenOS project\n\n"); 64 64 } 65 65 -
uspace/drv/usbmouse/init.c
r503e4e3 rb670523 43 43 #include <errno.h> 44 44 45 // FIXME: remove this header46 #include <kernel/ipc/ipc_methods.h>47 48 45 /** Mouse polling endpoint description for boot protocol subclass. */ 49 46 usb_endpoint_description_t poll_endpoint_description = { … … 56 53 }; 57 54 58 static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); 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 59 81 /** Device ops for USB mouse. */ 60 82 static ddf_dev_ops_t mouse_ops = { 61 83 .default_handler = default_connection_handler 62 84 }; 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 }93 85 94 86 /** Create USB mouse device. … … 102 94 { 103 95 usb_mouse_t *mouse = malloc(sizeof(usb_mouse_t)); 104 if (mouse == NULL) {96 if (mouse == NULL) 105 97 return ENOMEM; 106 }98 107 99 mouse->dev = dev; 108 mouse->console_ phone = -1;109 100 mouse->console_sess = NULL; 101 110 102 int rc; 111 103 112 104 /* Create DDF function. */ 113 105 mouse->mouse_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "mouse"); … … 116 108 goto leave; 117 109 } 118 110 119 111 mouse->mouse_fun->ops = &mouse_ops; 120 112 121 113 rc = ddf_fun_bind(mouse->mouse_fun); 122 if (rc != EOK) {114 if (rc != EOK) 123 115 goto leave; 124 } 125 116 126 117 /* Add the function to mouse class. */ 127 118 rc = ddf_fun_add_to_class(mouse->mouse_fun, "mouse"); 128 if (rc != EOK) {119 if (rc != EOK) 129 120 goto leave; 130 }131 121 132 122 /* Set the boot protocol. */ 133 123 rc = usbhid_req_set_protocol(&dev->ctrl_pipe, dev->interface_no, 134 124 USB_HID_PROTOCOL_BOOT); 135 if (rc != EOK) {125 if (rc != EOK) 136 126 goto leave; 137 }138 127 139 /* Everything all 128 /* Everything allright. */ 140 129 dev->driver_data = mouse; 141 130 mouse->mouse_fun->driver_data = mouse; 142 131 143 132 return EOK; 144 133 145 134 leave: 146 135 free(mouse); 147 148 136 return rc; 149 137 } -
uspace/drv/usbmouse/main.c
r503e4e3 rb670523 34 34 * Main routines of USB boot protocol mouse driver. 35 35 */ 36 36 37 #include "mouse.h" 37 38 #include <usb/debug.h> … … 40 41 #include <str_error.h> 41 42 43 #define NAME "usbmouse" 44 42 45 /** Callback when new mouse device is attached and recognised by DDF. 43 46 * 44 47 * @param dev Representation of a generic DDF device. 48 * 45 49 * @return Error code. 50 * 46 51 */ 47 52 static int usbmouse_add_device(usb_device_t *dev) … … 53 58 return rc; 54 59 } 55 60 56 61 usb_log_debug("Polling pipe at endpoint %d.\n", 57 62 dev->pipes[0].pipe->endpoint_no); 58 59 rc = usb_device_auto_poll(dev, 0, 60 usb_mouse_polling_callback,dev->pipes[0].pipe->max_packet_size,63 64 rc = usb_device_auto_poll(dev, 0, usb_mouse_polling_callback, 65 dev->pipes[0].pipe->max_packet_size, 61 66 usb_mouse_polling_ended_callback, dev->driver_data); 62 67 63 68 if (rc != EOK) { 64 69 usb_log_error("Failed to start polling fibril: %s.\n", … … 66 71 return rc; 67 72 } 68 73 69 74 usb_log_info("controlling new mouse (handle %" PRIun ").\n", 70 75 dev->ddf_dev->handle); 71 76 72 77 return EOK; 73 78 } … … 93 98 { 94 99 usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME); 95 96 100 return usb_driver_main(&mouse_driver); 97 101 } -
uspace/drv/usbmouse/mouse.c
r503e4e3 rb670523 40 40 #include <ipc/mouse.h> 41 41 #include <async.h> 42 #include <async_obsolete.h>43 42 #include "mouse.h" 44 43 45 44 /** Mouse polling callback. 46 45 * 47 * @param dev Device that is being polled.46 * @param dev Device that is being polled. 48 47 * @param buffer Data buffer. 49 * @param buffer_size Buffer size in bytes. 50 * @param arg Custom argument - points to usb_mouse_t. 48 * @param size Buffer size in bytes. 49 * @param arg Pointer to usb_mouse_t. 50 * 51 51 * @return Always true. 52 * 52 53 */ 53 bool usb_mouse_polling_callback(usb_device_t *dev, 54 uint8_t *buffer, size_t buffer_size, void *arg)54 bool usb_mouse_polling_callback(usb_device_t *dev, uint8_t *buffer, 55 size_t size, void *arg) 55 56 { 56 57 usb_mouse_t *mouse = (usb_mouse_t *) arg; 57 58 58 59 usb_log_debug2("got buffer: %s.\n", 59 usb_debug_str_buffer(buffer, buffer_size, 0));60 60 usb_debug_str_buffer(buffer, size, 0)); 61 61 62 uint8_t butt = buffer[0]; 62 63 char str_buttons[4] = { … … 66 67 0 67 68 }; 68 69 69 70 int shift_x = ((int) buffer[1]) - 127; 70 71 int shift_y = ((int) buffer[2]) - 127; 71 72 int wheel = ((int) buffer[3]) - 127; 72 73 if (buffer[1] == 0) {73 74 if (buffer[1] == 0) 74 75 shift_x = 0; 75 }76 if (buffer[2] == 0) {76 77 if (buffer[2] == 0) 77 78 shift_y = 0; 78 }79 if (buffer[3] == 0) {79 80 if (buffer[3] == 0) 80 81 wheel = 0; 81 } 82 83 if (mouse->console_phone >= 0) { 82 83 if (mouse->console_sess) { 84 84 if ((shift_x != 0) || (shift_y != 0)) { 85 /* FIXME: guessed for QEMU */ 86 async_obsolete_req_2_0(mouse->console_phone, 87 MEVENT_MOVE, 88 - shift_x / 10, - shift_y / 10); 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); 89 90 } 90 91 if (butt) { 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); 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); 96 98 } 97 99 } 98 100 99 101 usb_log_debug("buttons=%s dX=%+3d dY=%+3d wheel=%+3d\n", 100 102 str_buttons, shift_x, shift_y, wheel); 101 103 102 104 /* Guess. */ 103 105 async_usleep(1000); 104 106 105 107 return true; 106 108 } … … 108 110 /** Callback when polling is terminated. 109 111 * 110 * @param dev Device where the polling terminated.112 * @param dev Device where the polling terminated. 111 113 * @param recurring_errors Whether the polling was terminated due to 112 * recurring errors. 113 * @param arg Custom argument - points to usb_mouse_t. 114 * recurring errors. 115 * @param arg Pointer to usb_mouse_t. 116 * 114 117 */ 115 void usb_mouse_polling_ended_callback(usb_device_t *dev, 116 bool recurring_errors,void *arg)118 void usb_mouse_polling_ended_callback(usb_device_t *dev, bool recurring_errors, 119 void *arg) 117 120 { 118 121 usb_mouse_t *mouse = (usb_mouse_t *) arg; 119 120 async_ obsolete_hangup(mouse->console_phone);121 mouse->console_ phone = -1;122 122 123 async_hangup(mouse->console_sess); 124 mouse->console_sess = NULL; 125 123 126 usb_device_destroy(dev); 124 127 } -
uspace/drv/usbmouse/mouse.h
r503e4e3 rb670523 34 34 * Common definitions for USB mouse driver. 35 35 */ 36 36 37 #ifndef USBMOUSE_MOUSE_H_ 37 38 #define USBMOUSE_MOUSE_H_ … … 40 41 #include <usb/dev/pipes.h> 41 42 #include <time.h> 43 #include <async.h> 42 44 43 #define NAME "usbmouse" 45 #define POLL_PIPE(dev) \ 46 ((dev)->pipes[0].pipe) 44 47 45 48 /** Container for USB mouse device. */ … … 47 50 /** Generic device container. */ 48 51 usb_device_t *dev; 52 49 53 /** Function representing the device. */ 50 54 ddf_fun_t *mouse_fun; 55 51 56 /** Polling interval in microseconds. */ 52 57 suseconds_t poll_interval_us; 53 /** IPC phone to console (consumer). */ 54 int console_phone; 58 59 /** Callback session to console (consumer). */ 60 async_sess_t *console_sess; 55 61 } usb_mouse_t; 56 57 #define POLL_PIPE(dev) ((dev)->pipes[0].pipe)58 62 59 63 extern usb_endpoint_description_t poll_endpoint_description; 60 64 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 *);65 extern int usb_mouse_create(usb_device_t *); 66 extern bool usb_mouse_polling_callback(usb_device_t *, uint8_t *, size_t, 67 void *); 68 extern void usb_mouse_polling_ended_callback(usb_device_t *, bool, void *); 65 69 66 70 #endif 71 67 72 /** 68 73 * @} -
uspace/drv/vhc/conndev.c
r503e4e3 rb670523 45 45 static fibril_local char plugged_device_name[PLUGGED_DEVICE_NAME_MAXLEN + 1] = "<unknown>"; 46 46 47 #if 048 47 /** Receive device name. 49 48 * … … 85 84 plugged_device_name[len] = 0; 86 85 } 87 #endif88 86 89 87 /** Default handler for IPC methods not handled by DDF. … … 93 91 * @param icall Call data. 94 92 */ 95 void default_connection_handler(ddf_fun_t *fun, 96 ipc_call id_t icallid, ipc_call_t *icall)93 void default_connection_handler(ddf_fun_t *fun, ipc_callid_t icallid, 94 ipc_call_t *icall) 97 95 { 98 // FIXME:99 // This code needs to be refactored since the async100 // framework does not support automatic callback connections101 // yet.102 103 #if 0104 96 vhc_data_t *vhc = fun->dev->driver_data; 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 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); 111 103 if (rc != EOK) { 112 104 async_answer_0(icallid, rc); … … 114 106 return; 115 107 } 116 108 117 109 async_answer_0(icallid, EOK); 118 110 119 111 receive_device_name(callback); 120 112 121 113 usb_log_info("New virtual device `%s' (id: %" PRIxn ").\n", 122 114 plugged_device_name, plugged_device_handle); 123 124 return; 125 } 126 #endif 127 128 async_answer_0(icallid, EINVAL); 115 } else 116 async_answer_0(icallid, EINVAL); 129 117 } 130 118 -
uspace/lib/c/generic/async.c
r503e4e3 rb670523 2339 2339 * @param mgmt Exchange management style. 2340 2340 * 2341 * @return New async session or NULL on failure. 2341 * @return New async session. 2342 * @return NULL on failure. 2342 2343 * 2343 2344 */ … … 2377 2378 } 2378 2379 2380 /** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls. 2381 * 2382 * If the call is IPC_M_CONNECT_TO_ME then a new 2383 * async session is created. However, the phone is 2384 * 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 2379 2419 /** @} 2380 2420 */ -
uspace/lib/c/generic/devman.c
r503e4e3 rb670523 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 246 233 link_t *link = match_ids->ids.next; 247 234 match_id_t *match_id = NULL; … … 250 237 match_id = list_get_instance(link, match_id_t, link); 251 238 252 ipc_call_t answer ;253 aid_t req = async_send_1(exch, DEVMAN_ADD_MATCH_ID,254 match_id->score, &answer );239 ipc_call_t answer2; 240 aid_t req2 = async_send_1(exch, DEVMAN_ADD_MATCH_ID, 241 match_id->score, &answer2); 255 242 retval = async_data_write_start(exch, match_id->id, 256 243 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); 257 252 if (retval != EOK) { 258 253 devman_exchange_end(exch); … … 261 256 } 262 257 263 async_wait_for(req, &retval);264 if (retval != EOK) {265 devman_exchange_end(exch);266 return retval;267 }268 269 258 link = link->next; 270 259 } 271 260 272 261 devman_exchange_end(exch); 273 return EOK; 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; 274 273 } 275 274 -
uspace/lib/c/include/async.h
r503e4e3 rb670523 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 *); 466 467 467 468 #endif
Note:
See TracChangeset
for help on using the changeset viewer.