Lines Matching defs:okmsp

90 int okm_get_req(okms_t *okmsp, sckm_ioctl_getreq_t *ireqp,
92 int okm_process_req(okms_t *okmsp, okm_req_hdr_t *reqp, uint32_t len,
94 int okm_process_status(okms_t *okmsp, sckm_ioctl_status_t *ireply);
96 int okm_send_reply(okms_t *okmsp, uint32_t transid, uint32_t status,
98 int block_until_ready(okms_t *okmsp);
103 static void okm_cleanup(okms_t *okmsp);
104 static int okm_mbox_init(okms_t *okmsp);
105 static void okm_mbox_fini(okms_t *okmsp);
202 okms_t *okmsp = &okms_global;
215 okmsp->km_dip = dip;
216 okmsp->km_major = ddi_driver_major(dip);
217 okmsp->km_inst = instance;
228 &okmsp->km_ibcookie) != DDI_SUCCESS) {
232 mutex_init(&okmsp->km_lock, NULL, MUTEX_DRIVER,
233 (void *)okmsp->km_ibcookie);
234 okmsp->km_clean |= OKM_CLEAN_LOCK;
235 cv_init(&okmsp->km_wait, NULL, CV_DRIVER, NULL);
236 okmsp->km_clean |= OKM_CLEAN_CV;
242 okmsp->km_clean |= OKM_CLEAN_NODE;
246 okm_cleanup(okmsp);
250 ddi_set_driver_private(dip, (caddr_t)okmsp);
264 okms_t *okmsp;
270 if ((okmsp = ddi_get_driver_private(dip)) == NULL) {
274 mutex_enter(&okmsp->km_lock);
278 if (okmsp->km_state & OKM_MB_INITED) {
279 mutex_exit(&okmsp->km_lock);
283 mutex_exit(&okmsp->km_lock);
284 okm_cleanup(okmsp);
296 okms_t *okmsp = &okms_global;
309 if (okmsp->km_inst != minor) {
312 *result = okmsp->km_dip;
338 okms_t *okmsp = &okms_global;
342 mutex_enter(&okmsp->km_lock);
343 if (okmsp->km_state & OKM_OPENED) {
345 mutex_exit(&okmsp->km_lock);
349 okmsp->km_state |= OKM_OPENED;
350 ret = block_until_ready(okmsp);
352 okmsp->km_state &= ~OKM_OPENED;
354 mutex_exit(&okmsp->km_lock);
366 block_until_ready(okms_t *okmsp)
371 ASSERT(MUTEX_HELD(&okmsp->km_lock));
373 if (okmsp->km_state & OKM_MB_DISC) {
375 okm_mbox_fini(okmsp);
377 if (okmsp->km_state & OKM_MB_CONN) {
384 if ((ret = okm_mbox_init(okmsp)) != 0) {
402 okms_t *okmsp = &okms_global;
406 mutex_enter(&okmsp->km_lock);
407 okm_mbox_fini(okmsp);
408 okmsp->km_state = 0;
409 mutex_exit(&okmsp->km_lock);
423 okms_t *okmsp = &okms_global;
436 ret = okm_get_req(okmsp, &ireq, data, flag);
447 ret = okm_process_status(okmsp, &istatus);
465 okm_get_req(okms_t *okmsp, sckm_ioctl_getreq_t *ireqp, intptr_t data, int flag)
473 mutex_enter(&okmsp->km_lock);
474 if ((ret = block_until_ready(okmsp)) != 0) {
475 mutex_exit(&okmsp->km_lock);
480 if (okmsp->km_reqp != NULL) {
482 reqp = okmsp->km_reqp;
483 len = okmsp->km_reqlen;
484 okmsp->km_reqp = NULL;
485 okmsp->km_reqlen = 0;
488 while (OKM_MBOX_READY(okmsp) &&
489 ((ret = scf_mb_canget(okmsp->km_target,
490 okmsp->km_key, &len)) != 0)) {
494 mutex_exit(&okmsp->km_lock);
498 if (cv_wait_sig(&okmsp->km_wait,
499 &okmsp->km_lock) <= 0) {
500 mutex_exit(&okmsp->km_lock);
505 if (!OKM_MBOX_READY(okmsp)) {
506 mutex_exit(&okmsp->km_lock);
512 okmsp->km_sg_rcv.msc_dptr = msgbuf;
513 okmsp->km_sg_rcv.msc_len = len;
516 ret = scf_mb_getmsg(okmsp->km_target, okmsp->km_key, len, 1,
517 &okmsp->km_sg_rcv, 0);
524 mutex_exit(&okmsp->km_lock);
534 mutex_exit(&okmsp->km_lock);
547 (void) okm_send_reply(okmsp, reqp->krq_transid,
550 mutex_exit(&okmsp->km_lock);
558 ret = okm_process_req(okmsp, reqp, len, ireqp, data, flag);
559 if (okmsp->km_reqp == NULL) {
565 mutex_exit(&okmsp->km_lock);
578 okm_process_req(okms_t *okmsp, okm_req_hdr_t *reqp, uint32_t len,
591 (void) okm_send_reply(okmsp, reqp->krq_transid,
600 okmsp->km_reqp = reqp;
601 okmsp->km_reqlen = len;
630 (void) okm_send_reply(okmsp, reqp->krq_transid,
645 okm_process_status(okms_t *okmsp, sckm_ioctl_status_t *ireply)
650 okm_req_hdr_t *reqp = okmsp->km_reqp;
654 mutex_enter(&okmsp->km_lock);
655 if ((ret = block_until_ready(okmsp)) != 0) {
656 mutex_exit(&okmsp->km_lock);
663 if (!okmsp->km_reqp || (reqp->krq_transid != ireply->transid)) {
664 mutex_exit(&okmsp->km_lock);
706 ret = okm_send_reply(okmsp, ireply->transid, status,
712 kmem_free(okmsp->km_reqp, okmsp->km_reqlen);
713 okmsp->km_reqp = NULL;
714 okmsp->km_reqlen = 0;
716 mutex_exit(&okmsp->km_lock);
802 okm_cleanup(okms_t *okmsp)
805 ASSERT(okmsp != NULL);
806 if (okmsp->km_clean & OKM_CLEAN_NODE) {
807 ddi_remove_minor_node(okmsp->km_dip, NULL);
809 if (okmsp->km_clean & OKM_CLEAN_LOCK)
810 mutex_destroy(&okmsp->km_lock);
811 if (okmsp->km_clean & OKM_CLEAN_CV)
812 cv_destroy(&okmsp->km_wait);
813 if (okmsp->km_reqp != NULL) {
814 kmem_free(okmsp->km_reqp, okmsp->km_reqlen);
815 okmsp->km_reqp = NULL;
816 okmsp->km_reqlen = 0;
818 ddi_set_driver_private(okmsp->km_dip, NULL);
825 okm_mbox_init(okms_t *okmsp)
830 ASSERT(MUTEX_HELD(&okmsp->km_lock));
831 okmsp->km_target = OKM_TARGET_ID;
832 okmsp->km_key = DKMD_KEY;
833 okmsp->km_state &= ~OKM_MB_INITED;
836 while (!(okmsp->km_state & OKM_MB_CONN)) {
838 ret = scf_mb_init(okmsp->km_target, okmsp->km_key,
839 okm_event_handler, (void *)okmsp);
847 okmsp->km_state |= OKM_MB_INITED;
850 while (!(okmsp->km_state &
853 if (cv_wait_sig(&okmsp->km_wait,
854 &okmsp->km_lock) <= 0) {
862 if ((ret != 0) || (okmsp->km_state & OKM_MB_DISC)) {
864 if (okmsp->km_state & OKM_MB_INITED) {
865 (void) scf_mb_fini(okmsp->km_target,
866 okmsp->km_key);
868 if (okmsp->km_state & OKM_MB_DISC) {
875 okmsp->km_state &= ~(OKM_MB_INITED | OKM_MB_DISC |
889 ret = cv_reltimedwait_sig(&okmsp->km_wait,
890 &okmsp->km_lock, tout, TR_CLOCK_TICK);
900 ret = scf_mb_ctrl(okmsp->km_target, okmsp->km_key,
901 SCF_MBOP_MAXMSGSIZE, &okmsp->km_maxsz);
907 if ((ret == 0) && (okmsp->km_maxsz < sizeof (okm_rep_hdr_t))) {
909 "but found %d\n", sizeof (okm_rep_hdr_t), okmsp->km_maxsz);
913 okmsp->km_state &= ~OKM_MB_INITED;
914 (void) scf_mb_fini(okmsp->km_target, okmsp->km_key);
924 okm_mbox_fini(okms_t *okmsp)
928 ASSERT(MUTEX_HELD(&okmsp->km_lock));
929 if (okmsp->km_state & OKM_MB_INITED) {
931 ret = scf_mb_fini(okmsp->km_target, okmsp->km_key);
937 okmsp->km_state &= ~(OKM_MB_INITED | OKM_MB_CONN | OKM_MB_DISC);
951 okms_t *okmsp = (okms_t *)arg;
954 ASSERT(okmsp != NULL);
955 mutex_enter(&okmsp->km_lock);
956 if (!(okmsp->km_state & OKM_MB_INITED)) {
961 mutex_exit(&okmsp->km_lock);
974 okmsp->km_state |= OKM_MB_CONN;
975 cv_broadcast(&okmsp->km_wait);
984 if (OKM_MBOX_READY(okmsp)) {
985 cv_broadcast(&okmsp->km_wait);
995 if (OKM_MBOX_READY(okmsp)) {
996 cv_broadcast(&okmsp->km_wait);
1001 okmsp->km_state &= ~OKM_MB_CONN;
1002 okmsp->km_state |= OKM_MB_DISC;
1003 cv_broadcast(&okmsp->km_wait);
1008 mutex_exit(&okmsp->km_lock);
1015 okm_send_reply(okms_t *okmsp, uint32_t transid,
1022 ASSERT(MUTEX_HELD(&okmsp->km_lock));
1028 okmsp->km_sg_tx.msc_dptr = (caddr_t)&reply;
1029 okmsp->km_sg_tx.msc_len = sizeof (reply);
1032 while (OKM_MBOX_READY(okmsp)) {
1034 ret = scf_mb_putmsg(okmsp->km_target, okmsp->km_key,
1035 sizeof (reply), 1, &okmsp->km_sg_tx, 0);
1039 if (cv_timedwait_sig(&okmsp->km_wait,
1040 &okmsp->km_lock, okm_timeout_val(ret)) == 0) {