Lines Matching refs:ap

816 	sbp2_agent_t	*ap = &sp->s_agent;
838 mutex_enter(&ap->a_mutex);
839 ap->a_state = SBP2_AGENT_STATE_RESET;
840 mutex_exit(&ap->a_mutex);
877 sbp2_agent_t *ap = &sp->s_agent;
888 sbp2_agent_acquire(ap); /* serialize */
890 mutex_enter(&ap->a_mutex);
899 if ((ap->a_active_task != NULL) &&
900 (ap->a_active_task->ts_state == SBP2_TASK_PEND)) {
901 mutex_exit(&ap->a_mutex);
902 sbp2_agent_release(ap);
911 mutex_exit(&ap->a_mutex);
912 sbp2_agent_release(ap);
917 ap->a_active_task = sbp2_ses_find_task_state(sp, SBP2_TASK_INIT);
918 if (ap->a_active_task == NULL) {
919 mutex_exit(&ap->a_mutex);
920 sbp2_agent_release(ap);
923 task = ap->a_active_task;
928 if (sbp2_agent_keepalive(ap, &task->ts_bus_error) != SBP2_SUCCESS) {
946 ap->a_state = SBP2_AGENT_STATE_ACTIVE;
947 mutex_exit(&ap->a_mutex);
948 ret = sbp2_agent_write_orbp(ap, task->ts_buf->bb_baddr,
951 mutex_enter(&ap->a_mutex);
954 ap->a_state = SBP2_AGENT_STATE_DEAD;
966 mutex_exit(&ap->a_mutex);
968 sbp2_agent_release(ap);
976 callback = (ap->a_active_task != new_task);
977 ASSERT(task == ap->a_active_task);
978 ap->a_active_task = NULL;
979 mutex_exit(&ap->a_mutex);
980 sbp2_agent_release(ap);
1166 sbp2_agent_t *ap = &sp->s_agent;
1188 mutex_enter(&ap->a_mutex);
1189 ap->a_active_task = NULL;
1190 mutex_exit(&ap->a_mutex);
1367 sbp2_agent_init(sbp2_agent_t *ap, uint64_t offset, sbp2_tgt_t *tp)
1376 ap->a_tgt = tp;
1378 ap->a_reg_agent_state = offset + SBP2_AGENT_STATE_OFFSET;
1379 ap->a_reg_agent_reset = offset + SBP2_AGENT_RESET_OFFSET;
1380 ap->a_reg_orbp = offset + SBP2_ORB_POINTER_OFFSET;
1381 ap->a_reg_doorbell = offset + SBP2_DOORBELL_OFFSET;
1382 ap->a_reg_unsol_status_enable = offset +
1388 if ((ret = SBP2_ALLOC_CMD(tp, &ap->a_cmd, 0)) != SBP2_SUCCESS) {
1391 ap->a_cmd_data = allocb(sizeof (sbp2_orbp_t), BPRI_HI);
1392 if (ap->a_cmd_data == NULL) {
1393 sbp2_agent_fini(ap);
1397 mutex_init(&ap->a_mutex, NULL, MUTEX_DRIVER,
1399 cv_init(&ap->a_cv, NULL, CV_DRIVER, NULL);
1402 ap->a_state = SBP2_AGENT_STATE_RESET;
1410 sbp2_agent_fini(sbp2_agent_t *ap)
1412 sbp2_tgt_t *tp = ap->a_tgt;
1415 if (ap->a_cmd != NULL) {
1416 SBP2_FREE_CMD(tp, ap->a_cmd);
1418 if (ap->a_cmd_data != NULL) {
1419 freeb(ap->a_cmd_data);
1421 cv_destroy(&ap->a_cv);
1422 mutex_destroy(&ap->a_mutex);
1427 sbp2_agent_acquire_locked(sbp2_agent_t *ap)
1429 while (ap->a_acquired) {
1430 cv_wait(&ap->a_cv, &ap->a_mutex);
1432 ap->a_acquired = B_TRUE;
1437 sbp2_agent_release_locked(sbp2_agent_t *ap)
1439 ap->a_acquired = B_FALSE;
1440 cv_signal(&ap->a_cv); /* wake next waiter */
1445 sbp2_agent_acquire(sbp2_agent_t *ap)
1447 mutex_enter(&ap->a_mutex);
1448 sbp2_agent_acquire_locked(ap);
1449 mutex_exit(&ap->a_mutex);
1454 sbp2_agent_release(sbp2_agent_t *ap)
1456 mutex_enter(&ap->a_mutex);
1457 sbp2_agent_release_locked(ap);
1458 mutex_exit(&ap->a_mutex);
1463 sbp2_agent_keepalive(sbp2_agent_t *ap, int *berr)
1468 ASSERT(mutex_owned(&ap->a_mutex));
1470 if (ap->a_state == SBP2_AGENT_STATE_DEAD) {
1471 acquired = ap->a_acquired;
1473 sbp2_agent_acquire_locked(ap);
1476 mutex_exit(&ap->a_mutex);
1477 ret = sbp2_agent_reset(ap, berr);
1478 mutex_enter(&ap->a_mutex);
1481 sbp2_agent_release_locked(ap);
1490 sbp2_agent_doorbell(sbp2_agent_t *ap, int *berr)
1492 return (SBP2_WQ(ap->a_tgt, ap->a_cmd, ap->a_reg_doorbell, 0, berr));
1505 sbp2_agent_write_orbp(sbp2_agent_t *ap, uint64_t baddr, int *berr)
1510 SBP2_ORBP_SET(ap->a_cmd_data->b_rptr, baddr);
1511 ap->a_cmd_data->b_wptr = ap->a_cmd_data->b_rptr + 8;
1514 ap->a_tgt->t_stat.stat_agent_worbp++;
1515 if ((ret = SBP2_WB(ap->a_tgt, ap->a_cmd, ap->a_reg_orbp,
1516 ap->a_cmd_data, 8, berr)) == SBP2_SUCCESS) {
1519 ap->a_tgt->t_stat.stat_agent_worbp_fail++;
1538 sbp2_agent_reset(sbp2_agent_t *ap, int *berr)
1544 ap->a_tgt->t_stat.stat_agent_wreset++;
1545 if ((ret = SBP2_WQ(ap->a_tgt, ap->a_cmd, ap->a_reg_agent_reset,
1547 mutex_enter(&ap->a_mutex);
1548 ap->a_state = SBP2_AGENT_STATE_RESET;
1549 mutex_exit(&ap->a_mutex);
1553 ap->a_tgt->t_stat.stat_agent_wreset_fail++;
1620 sbp2_agent_t *ap = &sp->s_agent;
1622 mutex_enter(&ap->a_mutex);
1626 mutex_exit(&ap->a_mutex);
1634 mutex_exit(&ap->a_mutex);
1638 if (task == ap->a_active_task) {
1639 ap->a_active_task = NULL;
1645 ap->a_state = SBP2_AGENT_STATE_DEAD;
1647 mutex_exit(&ap->a_mutex);
1661 sbp2_agent_t *ap = &sp->s_agent;
1728 mutex_enter(&ap->a_mutex);
1737 ap->a_state = SBP2_AGENT_STATE_DEAD;
1743 mutex_exit(&ap->a_mutex);
1747 if (task == ap->a_active_task) {
1748 ap->a_active_task = NULL;
1753 mutex_exit(&ap->a_mutex);