Lines Matching refs:global

399 static void i8042_send(struct i8042 *global, int reg, unsigned char cmd);
405 i8042_discard_junk_data(struct i8042 *global)
411 stat = ddi_get8(global->io_handle,
412 global->io_addr + I8042_STAT);
415 (void) ddi_get8(global->io_handle,
416 global->io_addr + I8042_DATA);
422 i8042_cleanup(struct i8042 *global)
427 ASSERT(global != NULL);
429 if (global->initialized == B_TRUE) {
434 mutex_enter(&global->i8042_mutex);
437 port = &global->i8042_ports[which_port];
440 mutex_exit(&global->i8042_mutex);
445 mutex_exit(&global->i8042_mutex);
452 mutex_exit(&global->i8042_mutex);
458 global->initialized = B_FALSE;
460 mutex_exit(&global->i8042_mutex);
465 if (global->timeout_id != 0) {
466 (void) untimeout(global->timeout_id);
471 if (global->init_state & I8042_INIT_INTRS_ENABLED)
472 i8042_write_command_byte(global, I8042_CMD_DISABLE_ALL);
474 if (global->intrs_added) {
479 for (i = global->nintrs - 1; i >= 0; i--) {
480 if (global->intrs_added & (1 << i))
481 ddi_remove_intr(global->dip, i,
482 global->iblock_cookies[i]);
487 if (global->init_state & I8042_INIT_MUTEXES) {
490 port = &global->i8042_ports[which_port];
494 cv_destroy(&global->glock_cv);
495 mutex_destroy(&global->i8042_out_mutex);
496 mutex_destroy(&global->i8042_mutex);
499 if (global->init_state & I8042_INIT_REGS_MAPPED)
500 ddi_regs_map_free(&global->io_handle);
502 if (global->init_state & I8042_INIT_BASIC) {
503 ddi_set_driver_private(global->dip, (caddr_t)NULL);
504 if (global->nintrs > 0) {
505 kmem_free(global->iblock_cookies, global->nintrs *
508 kmem_free(global, sizeof (struct i8042));
523 i8042_wait_obf(struct i8042 *global)
527 while (!(ddi_get8(global->io_handle, global->io_addr + I8042_STAT) &
542 i8042_purge_outbuf(struct i8042 *global)
547 if (i8042_wait_obf(global))
549 (void) ddi_get8(global->io_handle,
550 global->io_addr + I8042_DATA);
575 struct i8042 *global;
582 global = (struct i8042 *)ddi_get_driver_private(dip);
583 i8042_discard_junk_data(global);
584 i8042_write_command_byte(global, I8042_CMD_ENABLE_ALL);
599 global = (struct i8042 *)kmem_zalloc(sizeof (struct i8042), KM_SLEEP);
600 ddi_set_driver_private(dip, (caddr_t)global);
601 global->dip = dip;
602 global->initialized = B_FALSE;
604 global->init_state |= I8042_INIT_BASIC;
606 if (ddi_regs_map_setup(dip, 0, (caddr_t *)&global->io_addr,
607 (offset_t)0, (offset_t)0, &attr, &global->io_handle)
611 global->init_state |= I8042_INIT_REGS_MAPPED;
616 if (ddi_dev_nintrs(dip, &global->nintrs) == DDI_FAILURE)
628 global->nintrs = 0;
629 } else if (global->nintrs == 0) {
641 ddi_dev_nintrs(dip, &global->nintrs) == DDI_FAILURE ||
642 global->nintrs == 0) {
644 ddi_get_instance(global->dip));
649 if (global->nintrs == 0) {
651 ddi_get_instance(global->dip));
656 if (global->nintrs > MAX_INTERRUPTS)
657 global->nintrs = MAX_INTERRUPTS;
659 if (global->nintrs > 0) {
660 global->iblock_cookies = kmem_zalloc(global->nintrs *
663 for (i = 0; i < global->nintrs; i++) {
665 &global->iblock_cookies[i]) != DDI_SUCCESS)
669 global->iblock_cookies = NULL;
671 mutex_init(&global->i8042_mutex, NULL, MUTEX_DRIVER,
672 (global->nintrs > 0) ? global->iblock_cookies[0] : NULL);
674 mutex_init(&global->i8042_out_mutex, NULL, MUTEX_DRIVER, NULL);
676 cv_init(&global->glock_cv, NULL, CV_DRIVER, NULL);
679 port = &global->i8042_ports[which_port];
681 port->i8042_global = global;
693 if (global->nintrs > 0) {
694 cookie = global->iblock_cookies[
695 (which_port < global->nintrs) ? which_port : 0];
707 global->init_state |= I8042_INIT_MUTEXES;
723 i8042_write_command_byte(global, I8042_CMD_DISABLE_ALL);
725 global->init_state &= ~I8042_INIT_INTRS_ENABLED;
728 if (i8042_purge_outbuf(global) != 0)
737 ASSERT(global->nintrs <= (sizeof (global->intrs_added) * NBBY));
739 for (i = 0; i < global->nintrs; i++) {
747 i8042_intr, (caddr_t)global) != DDI_SUCCESS)
750 global->intrs_added |= (1 << i);
753 global->initialized = B_TRUE;
758 i8042_write_command_byte(global, I8042_CMD_ENABLE_ALL);
759 global->init_state |= I8042_INIT_INTRS_ENABLED;
774 global->timeout_id = timeout(i8042_timeout, global,
783 (void) i8042_cleanup(global);
791 struct i8042 *global = (struct i8042 *)ddi_get_driver_private(dip);
793 ASSERT(global != NULL);
804 i8042_write_command_byte(global, I8042_CMD_DISABLE_ALL);
810 return (i8042_cleanup(global));
832 struct i8042 *global;
840 global = ddi_get_driver_private(dip);
906 port = &global->i8042_ports[which_port];
1005 struct i8042 *global = (struct i8042 *)arg;
1012 mutex_enter(&global->i8042_mutex);
1014 stat = ddi_get8(global->io_handle, global->io_addr + I8042_STAT);
1018 mutex_exit(&global->i8042_mutex);
1022 byte = ddi_get8(global->io_handle, global->io_addr + I8042_DATA);
1026 port = &global->i8042_ports[which_port];
1029 mutex_exit(&global->i8042_mutex);
1043 mutex_exit(&global->i8042_mutex);
1056 mutex_exit(&global->i8042_mutex);
1069 i8042_write_command_byte(struct i8042 *global, unsigned char cb)
1071 mutex_enter(&global->i8042_out_mutex);
1072 i8042_send(global, I8042_CMD, I8042_CMD_WCB);
1073 i8042_send(global, I8042_DATA, cb);
1074 mutex_exit(&global->i8042_out_mutex);
1082 i8042_send(struct i8042 *global, int reg, unsigned char val)
1092 stat = ddi_get8(global->io_handle,
1093 global->io_addr + I8042_STAT);
1096 ddi_put8(global->io_handle, global->io_addr+reg, val);
1141 struct i8042 *global;
1149 global = port->i8042_global;
1154 mutex_enter(&global->i8042_out_mutex);
1159 while (global->glock) {
1160 cv_wait(&global->glock_cv, &global->i8042_out_mutex);
1163 global->glock = 1;
1164 mutex_exit(&global->i8042_out_mutex);
1169 mutex_enter(&global->i8042_out_mutex);
1170 ASSERT(global->glock != 0);
1173 global->glock = 0;
1178 cv_signal(&global->glock_cv);
1179 mutex_exit(&global->i8042_out_mutex);
1184 mutex_enter(&global->i8042_mutex);
1186 mutex_exit(&global->i8042_mutex);
1190 mutex_enter(&global->i8042_mutex);
1204 mutex_exit(&global->i8042_mutex);
1221 stat = ddi_get8(global->io_handle,
1222 global->io_addr + I8042_STAT);
1241 (void) ddi_get8(global->io_handle,
1242 global->io_addr + I8042_DATA);
1254 stat = ddi_get8(global->io_handle,
1255 global->io_addr + I8042_STAT);
1262 ret = ddi_get8(global->io_handle,
1263 global->io_addr + I8042_DATA);
1293 struct i8042 *global;
1299 global = port->i8042_global;
1306 mutex_enter(&global->i8042_out_mutex);
1316 while (global->glock && !port->has_glock) {
1317 cv_wait(&global->glock_cv,
1318 &global->i8042_out_mutex);
1323 i8042_send(global, I8042_CMD, I8042_CMD_WRITE_AUX);
1325 i8042_send(global, I8042_DATA, value);
1328 mutex_exit(&global->i8042_out_mutex);
1357 struct i8042 *global;
1387 global = port->i8042_global;
1413 global = port->i8042_global;
1414 mutex_enter(&global->i8042_mutex);
1416 mutex_exit(&global->i8042_mutex);
1426 global = port->i8042_global;
1427 mutex_enter(&global->i8042_mutex);
1432 mutex_exit(&global->i8042_mutex);
1443 global = port->i8042_global;
1444 mutex_enter(&global->i8042_mutex);
1447 mutex_exit(&global->i8042_mutex);
1465 struct i8042 *global;
1468 global = ddi_get_driver_private(dip);
1489 (caddr_t)&global->i8042_ports[which_port]);