Lines Matching refs:state

261 	struct mouse_state *state;
273 state = (struct mouse_state *)ddi_get_driver_private(dip);
276 state->ready = 1;
282 if (state->ms_rqp != NULL) {
285 putnext(state->ms_rqp, mp);
289 putnext(state->ms_rqp, mp);
301 /* allocate and initialize state structure */
302 state = kmem_zalloc(sizeof (struct mouse_state), KM_SLEEP);
303 state->ms_opened = B_FALSE;
304 state->reset_state = MSE_RESET_IDLE;
305 state->reset_tid = 0;
306 state->bc_id = 0;
307 ddi_set_driver_private(dip, state);
336 rc = ddi_regs_map_setup(dip, 0, (caddr_t *)&state->ms_addr,
337 (offset_t)0, (offset_t)0, &attr, &state->ms_handle);
342 rc = ddi_get_iblock_cookie(dip, 0, &state->ms_iblock_cookie);
347 mutex_init(&state->ms_mutex, NULL, MUTEX_DRIVER,
348 state->ms_iblock_cookie);
349 mutex_init(&state->reset_mutex, NULL, MUTEX_DRIVER,
350 state->ms_iblock_cookie);
351 cv_init(&state->reset_cv, NULL, CV_DRIVER, NULL);
355 mouse8042_intr, (caddr_t)state);
363 state->ready = 1;
370 ddi_regs_map_free(&state->ms_handle);
376 kmem_free(state, sizeof (struct mouse_state));
384 struct mouse_state *state;
386 state = ddi_get_driver_private(dip);
391 state->ready = 0;
395 ddi_remove_intr(dip, 0, state->ms_iblock_cookie);
397 cv_destroy(&state->reset_cv);
398 mutex_destroy(&state->reset_mutex);
399 mutex_destroy(&state->ms_mutex);
401 ddi_regs_map_free(&state->ms_handle);
403 kmem_free(state, sizeof (struct mouse_state));
449 struct mouse_state *state;
456 state = ddi_get_driver_private(mouse8042_dip);
458 mutex_enter(&state->ms_mutex);
460 if (state->ms_opened) {
464 if (state->ms_minor == minor) {
465 mutex_exit(&state->ms_mutex);
480 mutex_exit(&state->ms_mutex);
502 mutex_exit(&state->ms_mutex);
512 mutex_enter(&state->ms_mutex);
516 q->q_ptr = (caddr_t)state;
517 WR(q)->q_ptr = (caddr_t)state;
518 state->ms_rqp = q;
519 state->ms_wqp = WR(q);
523 state->ms_minor = minor;
524 state->ms_opened = B_TRUE;
526 mutex_exit(&state->ms_mutex);
536 struct mouse_state *state;
539 state = (struct mouse_state *)q->q_ptr;
547 mutex_enter(&state->reset_mutex);
548 while (state->reset_state != MSE_RESET_IDLE) {
556 cv_wait(&state->reset_cv, &state->reset_mutex);
559 if (state->reset_tid != 0) {
560 (void) quntimeout(q, state->reset_tid);
561 state->reset_tid = 0;
564 if (state->reply_mp != NULL) {
565 freemsg(state->reply_mp);
566 state->reply_mp = NULL;
569 if (state->reset_ack_mp != NULL) {
570 freemsg(state->reset_ack_mp);
571 state->reset_ack_mp = NULL;
574 mutex_exit(&state->reset_mutex);
576 mutex_enter(&state->ms_mutex);
578 if (state->bc_id != 0) {
579 (void) qunbufcall(q, state->bc_id);
580 state->bc_id = 0;
585 state->ms_rqp = NULL;
586 state->ms_wqp = NULL;
588 state->ms_opened = B_FALSE;
590 minor = state->ms_minor;
592 mutex_exit(&state->ms_mutex);
632 struct mouse_state *state = (struct mouse_state *)argp;
635 mutex_enter(&state->reset_mutex);
643 if (state->reset_state != MSE_RESET_IDLE &&
644 state->reset_state != MSE_RESET_FAILED) {
646 state->reset_tid = 0;
647 state->reset_state = MSE_RESET_IDLE;
648 cv_signal(&state->reset_cv);
650 (void) ddi_get8(state->ms_handle, state->ms_addr +
653 mp = state->reply_mp;
655 state->reply_mp = NULL;
657 if (state->ms_rqp != NULL)
658 putnext(state->ms_rqp, mp);
662 ASSERT(state->ms_wqp != NULL);
664 enableok(state->ms_wqp);
665 qenable(state->ms_wqp);
668 mutex_exit(&state->reset_mutex);
675 mouse8042_initiate_reset(queue_t *q, mblk_t *mp, struct mouse_state *state)
677 mutex_enter(&state->reset_mutex);
682 if (state->reset_state != MSE_RESET_IDLE) {
689 mutex_exit(&state->reset_mutex);
694 * Drop the reset state lock before allocating the response message and
698 mutex_exit(&state->reset_mutex);
700 if (state->reply_mp == NULL)
701 state->reply_mp = allocb(2, BPRI_MED);
702 if (state->reset_ack_mp == NULL)
703 state->reset_ack_mp = allocb(1, BPRI_MED);
705 if (state->reply_mp == NULL || state->reset_ack_mp == NULL) {
711 state->bc_id = qbufcall(q, (state->reply_mp == NULL) ? 2 : 1,
714 if (state->bc_id == 0) {
728 state->bc_id = 0;
736 (void) ddi_get8(state->ms_handle,
737 state->ms_addr + I8042_LOCK);
739 mutex_enter(&state->reset_mutex);
741 state->reset_state = MSE_RESET_PRE;
744 state->reset_tid = qtimeout(q,
746 state,
750 ddi_put8(state->ms_handle,
751 state->ms_addr +
756 mutex_exit(&state->reset_mutex);
764 mouse8042_process_data_msg(queue_t *q, mblk_t *mp, struct mouse_state *state)
787 if (mouse8042_initiate_reset(q, bp, state) == 0)
810 ddi_put8(state->ms_handle,
811 state->ms_addr + I8042_INT_OUTPUT_DATA,
822 mouse8042_process_msg(queue_t *q, mblk_t *mp, struct mouse_state *state)
847 rv = mouse8042_process_data_msg(q, mp, state);
866 struct mouse_state *state;
867 state = (struct mouse_state *)q->q_ptr;
874 if (state->reset_state != MSE_RESET_IDLE)
886 (void) mouse8042_process_msg(q, mp, state);
895 struct mouse_state *state;
896 state = (struct mouse_state *)qp->q_ptr;
899 if (mouse8042_process_msg(qp, mp, state) != 0)
907 * Returns the next reset state, given the current state and the byte
939 struct mouse_state *state = (struct mouse_state *)arg;
942 mutex_enter(&state->ms_mutex);
948 if (ddi_get8(state->ms_handle,
949 state->ms_addr + I8042_INT_INPUT_AVAIL) == 0) {
953 mdata = ddi_get8(state->ms_handle,
954 state->ms_addr + I8042_INT_INPUT_DATA);
961 if (!state->ready)
964 mutex_enter(&state->reset_mutex);
965 if (state->reset_state != MSE_RESET_IDLE) {
968 state->reset_state = MSE_RESET_FAILED;
970 state->reset_state =
971 mouse8042_reset_fsm(state->reset_state,
975 if (state->reset_state == MSE_RESET_ACK) {
983 if (state->reset_ack_mp != NULL) {
985 mp = state->reset_ack_mp;
987 state->reset_ack_mp = NULL;
989 if (state->ms_rqp != NULL) {
991 putnext(state->ms_rqp, mp);
996 if (state->ms_wqp != NULL) {
997 enableok(state->ms_wqp);
998 qenable(state->ms_wqp);
1001 } else if (state->reset_state == MSE_RESET_IDLE ||
1002 state->reset_state == MSE_RESET_FAILED) {
1005 * If we transitioned back to the idle reset state (or
1017 mutex_exit(&state->reset_mutex);
1018 (void) quntimeout(state->ms_wqp,
1019 state->reset_tid);
1020 mutex_enter(&state->reset_mutex);
1022 (void) ddi_get8(state->ms_handle,
1023 state->ms_addr + I8042_UNLOCK);
1025 state->reset_tid = 0;
1026 if (state->reply_mp != NULL) {
1027 mp = state->reply_mp;
1028 if (state->reset_state ==
1035 state->reply_mp = NULL;
1040 state->reset_state = MSE_RESET_IDLE;
1041 cv_signal(&state->reset_cv);
1044 if (state->ms_rqp != NULL)
1045 putnext(state->ms_rqp, mp);
1050 if (state->ms_wqp != NULL) {
1051 enableok(state->ms_wqp);
1052 qenable(state->ms_wqp);
1056 mutex_exit(&state->reset_mutex);
1057 mutex_exit(&state->ms_mutex);
1060 mutex_exit(&state->reset_mutex);
1062 if (state->ms_rqp != NULL && (mp = allocb(1, BPRI_MED))) {
1064 putnext(state->ms_rqp, mp);
1067 mutex_exit(&state->ms_mutex);