Lines Matching refs:dev

39 ps2_reset_mouse(ps2_dev* dev)
46 status = ps2_dev_command_timeout(dev, PS2_CMD_RESET, NULL, 0, data, 2, 500000);
53 status = ps2_dev_command(dev, PS2_CMD_RESEND, NULL, 0, data, 2);
71 ps2_dev_detect_pointing(ps2_dev* dev, device_hooks** hooks)
73 status_t status = ps2_reset_mouse(dev);
80 // the probe function has to set the dev name and the dev packet size
82 status = probe_trackpoint(dev);
88 status = probe_synaptics(dev);
94 status = probe_alps(dev);
100 status = probe_elantech(dev);
108 status = ps2_reset_mouse(dev);
114 status = probe_standard_mouse(dev);
123 if (dev == &(ps2_device[PS2_DEVICE_SYN_PASSTHROUGH]))
124 synaptics_pass_through_set_packet_size(dev, dev->packet_size);
170 ps2_dev* dev = &ps2_device[i];
171 dev->result_sem = create_sem(0, "ps2 result");
172 if (dev->result_sem < 0)
188 ps2_dev* dev = &ps2_device[i];
189 if (dev->result_sem >= 0) {
190 delete_sem(dev->result_sem);
191 dev->result_sem = -1;
198 ps2_dev_publish(ps2_dev* dev)
201 TRACE("ps2: ps2_dev_publish %s\n", dev->name);
203 if (dev->active)
206 if (atomic_get(&dev->flags) & PS2_FLAG_KEYB) {
207 status = devfs_publish_device(dev->name, &gKeyboardDeviceHooks);
212 if (dev->parent_dev) {
215 while (!(atomic_get(&dev->parent_dev->flags) & PS2_FLAG_ENABLED)) {
223 "\n", dev->name, dev->parent_dev->name,
229 status = ps2_dev_detect_pointing(dev, &hooks);
231 status = devfs_publish_device(dev->name, hooks);
236 dev->active = true;
239 dev->name, status);
244 ps2_dev_unpublish(ps2_dev* dev)
247 TRACE("ps2: ps2_dev_unpublish %s\n", dev->name);
249 if (!dev->active)
252 dev->active = false;
254 status = devfs_unpublish_device(dev->name, true);
256 if ((dev->flags & PS2_FLAG_ENABLED) && dev->disconnect)
257 dev->disconnect(dev);
260 dev->name, status);
265 ps2_dev_handle_int(ps2_dev* dev)
267 const uint8 data = dev->history[0].data;
270 flags = atomic_get(&dev->flags);
276 atomic_or(&dev->flags, PS2_FLAG_ACK);
278 atomic_or(&dev->flags, PS2_FLAG_NACK);
285 atomic_or(&dev->flags, PS2_FLAG_ACK);
286 if (dev->result_buf_cnt) {
287 dev->result_buf[dev->result_buf_idx] = data;
288 dev->result_buf_idx++;
289 dev->result_buf_cnt--;
290 if (dev->result_buf_cnt == 0) {
291 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
297 atomic_or(&dev->flags, PS2_FLAG_ACK);
298 if (dev->result_buf_cnt) {
299 dev->result_buf[dev->result_buf_idx] = data;
300 dev->result_buf_idx++;
301 dev->result_buf_cnt--;
302 if (dev->result_buf_cnt == 0) {
303 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
313 release_sem_etc(dev->result_sem, cnt, B_DO_NOT_RESCHEDULE);
315 } else if (dev->result_buf_cnt) {
316 dev->result_buf[dev->result_buf_idx] = data;
317 dev->result_buf_idx++;
318 dev->result_buf_cnt--;
319 if (dev->result_buf_cnt == 0) {
320 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
321 release_sem_etc(dev->result_sem, 1, B_DO_NOT_RESCHEDULE);
336 if (dev->history[0].error && data == 0xfd) {
337 INFO("ps2: hot removal of %s\n", dev->name);
338 ps2_service_notify_device_removed(dev);
341 if (data == 0x00 && dev->history[1].data == 0xaa
342 && (dev->history[0].time - dev->history[1].time) < 50000) {
343 INFO("ps2: hot plugin of %s\n", dev->name);
344 if (dev->active) {
346 dev->name);
347 ps2_service_notify_device_republish(dev);
349 ps2_service_notify_device_added(dev);
355 if (!dev->active) {
356 TRACE("ps2: %s not active, data 0x%02x dropped\n", dev->name, data);
358 INFO("ps2: possibly a hot plugin of %s\n", dev->name);
359 ps2_service_notify_device_added(dev);
366 TRACE("ps2: %s not enabled, data 0x%02x dropped\n", dev->name, data);
370 return dev->handle_int(dev);
375 standard_command_timeout(ps2_dev* dev, uint8 cmd, const uint8* out,
386 "dev %s\n", cmd, out_count, in_count, dev->name);
390 res = get_sem_count(dev->result_sem, &sem_count);
395 acquire_sem_etc(dev->result_sem, sem_count, 0, 0);
397 release_sem_etc(dev->result_sem, -sem_count, 0);
400 dev->result_buf_cnt = in_count;
401 dev->result_buf_idx = 0;
402 dev->result_buf = in;
407 atomic_and(&dev->flags,
412 if (!(atomic_get(&dev->flags) & PS2_FLAG_KEYB)) {
415 prefix_cmd = 0x90 + dev->idx;
427 atomic_or(&dev->flags, PS2_FLAG_CMD | PS2_FLAG_GETID);
429 atomic_or(&dev->flags, PS2_FLAG_CMD | PS2_FLAG_RESEND);
431 atomic_or(&dev->flags, PS2_FLAG_CMD);
442 res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT, timeout);
445 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
451 if (atomic_get(&dev->flags) & PS2_FLAG_ACK) {
455 if (atomic_get(&dev->flags) & PS2_FLAG_NACK) {
456 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
467 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
472 res = acquire_sem_etc(dev->result_sem, 1, B_RELATIVE_TIMEOUT,
475 atomic_and(&dev->flags, ~PS2_FLAG_CMD);
477 if (dev->result_buf_cnt != 0) {
479 dev->result_buf_cnt);
480 in_count -= dev->result_buf_cnt;
481 dev->result_buf_cnt = 0;
501 ps2_dev_command(ps2_dev* dev, uint8 cmd, const uint8* out, int out_count,
504 return ps2_dev_command_timeout(dev, cmd, out, out_count, in, in_count,
510 ps2_dev_command_timeout(ps2_dev* dev, uint8 cmd, const uint8* out,
513 return dev->command(dev, cmd, out, out_count, in, in_count, timeout);
518 ps2_dev_sliced_command(ps2_dev* dev, uint8 cmd)
521 if (ps2_dev_command(dev, PS2_CMD_MOUSE_SET_SCALE11) != B_OK)
525 if (ps2_dev_command(dev, PS2_CMD_MOUSE_SET_RES, &val, 1) != B_OK)
529 if (ps2_dev_command(dev, PS2_CMD_MOUSE_SET_RES, &val, 1) != B_OK)
533 if (ps2_dev_command(dev, PS2_CMD_MOUSE_SET_RES, &val, 1) != B_OK)
537 if (ps2_dev_command(dev, PS2_CMD_MOUSE_SET_RES, &val, 1) != B_OK)