Changeset 3781092 in mainline for uspace/srv/hw/char/i8042/i8042.c
- Timestamp:
- 2011-09-09T18:22:33Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 40a2af3
- Parents:
- 980671e7 (diff), 5da7199 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hw/char/i8042/i8042.c
r980671e7 r3781092 32 32 * @ingroup kbd 33 33 * @{ 34 */ 34 */ 35 35 /** @file 36 36 * @brief i8042 PS/2 port driver. … … 41 41 #include <loc.h> 42 42 #include <async.h> 43 #include <async_obsolete.h>44 43 #include <unistd.h> 45 44 #include <sysinfo.h> … … 49 48 #include "i8042.h" 50 49 51 // FIXME: remove this header 52 #include <abi/ipc/methods.h> 53 54 #define NAME "i8042" 55 #define NAMESPACE "char" 50 #define NAME "i8042" 51 #define NAMESPACE "char" 56 52 57 53 /* Interesting bits for status register */ … … 145 141 146 142 for (i = 0; i < MAX_DEVS; i++) { 147 i8042_port[i].client_ phone = -1;143 i8042_port[i].client_sess = NULL; 148 144 149 145 snprintf(name, 16, "%s/ps2%c", NAMESPACE, dchar[i]); … … 257 253 } 258 254 259 switch (method) { 260 case IPC_M_CONNECT_TO_ME: 261 printf(NAME ": creating callback connection\n"); 262 if (i8042_port[dev_id].client_phone != -1) { 255 async_sess_t *sess = 256 async_callback_receive_start(EXCHANGE_SERIALIZE, &call); 257 if (sess != NULL) { 258 if (i8042_port[dev_id].client_sess == NULL) { 259 i8042_port[dev_id].client_sess = sess; 260 retval = EOK; 261 } else 263 262 retval = ELIMIT; 263 } else { 264 switch (method) { 265 case IPC_FIRST_USER_METHOD: 266 printf(NAME ": write %" PRIun " to devid %d\n", 267 IPC_GET_ARG1(call), dev_id); 268 i8042_port_write(dev_id, IPC_GET_ARG1(call)); 269 retval = 0; 270 break; 271 default: 272 retval = EINVAL; 264 273 break; 265 274 } 266 i8042_port[dev_id].client_phone = IPC_GET_ARG5(call);267 retval = 0;268 break;269 case IPC_FIRST_USER_METHOD:270 printf(NAME ": write %" PRIun " to devid %d\n",271 IPC_GET_ARG1(call), dev_id);272 i8042_port_write(dev_id, IPC_GET_ARG1(call));273 retval = 0;274 break;275 default:276 retval = EINVAL;277 break;278 275 } 276 279 277 async_answer_0(callid, retval); 280 278 } … … 305 303 } 306 304 307 if (i8042_port[devid].client_phone != -1) { 308 async_obsolete_msg_1(i8042_port[devid].client_phone, 309 IPC_FIRST_USER_METHOD, data); 305 if (i8042_port[devid].client_sess != NULL) { 306 async_exch_t *exch = 307 async_exchange_begin(i8042_port[devid].client_sess); 308 async_msg_1(exch, IPC_FIRST_USER_METHOD, data); 309 async_exchange_end(exch); 310 310 } 311 311 }
Note:
See TracChangeset
for help on using the changeset viewer.