Lines Matching refs:sp

269 	ds_snmp_state_t *sp;  in ds_snmp_getinfo()  local
276 sp = ddi_get_soft_state(ds_snmp_statep, getminor((dev_t)arg)); in ds_snmp_getinfo()
277 if (sp != NULL) { in ds_snmp_getinfo()
278 *resultp = sp->dip; in ds_snmp_getinfo()
430 ds_snmp_state_t *sp; in ds_snmp_create_state() local
442 sp = ddi_get_soft_state(ds_snmp_statep, minor); in ds_snmp_create_state()
448 sp->dev = makedevice(major, minor); in ds_snmp_create_state()
450 *devp = sp->dev; in ds_snmp_create_state()
452 sp->instance = minor; in ds_snmp_create_state()
453 sp->data = NULL; in ds_snmp_create_state()
454 sp->data_len = 0; in ds_snmp_create_state()
455 sp->req_id = 0; in ds_snmp_create_state()
456 sp->last_req_id = 0; in ds_snmp_create_state()
457 sp->state = DS_SNMP_READY; in ds_snmp_create_state()
458 sp->sc_reset = B_FALSE; in ds_snmp_create_state()
460 mutex_init(&sp->lock, NULL, MUTEX_DRIVER, NULL); in ds_snmp_create_state()
461 cv_init(&sp->state_cv, NULL, CV_DRIVER, NULL); in ds_snmp_create_state()
469 ds_snmp_state_t *sp; in ds_snmp_destroy_state() local
474 if ((sp = ddi_get_soft_state(ds_snmp_statep, minor)) == NULL) in ds_snmp_destroy_state()
477 ASSERT(sp->instance == minor); in ds_snmp_destroy_state()
483 if (sp->data) { in ds_snmp_destroy_state()
484 kmem_free(sp->data, sp->data_len); in ds_snmp_destroy_state()
486 cv_destroy(&sp->state_cv); in ds_snmp_destroy_state()
487 mutex_destroy(&sp->lock); in ds_snmp_destroy_state()
542 ds_snmp_state_t *sp; in ds_snmp_read() local
569 if ((sp = ddi_get_soft_state(ds_snmp_statep, minor)) == NULL) in ds_snmp_read()
572 mutex_enter(&sp->lock); in ds_snmp_read()
574 if (sp->sc_reset == B_TRUE) { in ds_snmp_read()
575 mutex_exit(&sp->lock); in ds_snmp_read()
582 if (sp->state != DS_SNMP_DATA_AVL && sp->state != DS_SNMP_DATA_ERR) { in ds_snmp_read()
585 mutex_exit(&sp->lock); in ds_snmp_read()
588 while (sp->state != DS_SNMP_DATA_AVL && in ds_snmp_read()
589 sp->state != DS_SNMP_DATA_ERR) { in ds_snmp_read()
590 if (cv_wait_sig(&sp->state_cv, &sp->lock) == 0) { in ds_snmp_read()
591 mutex_exit(&sp->lock); in ds_snmp_read()
603 if (sp->state == DS_SNMP_DATA_ERR) { in ds_snmp_read()
604 if (sp->sc_reset == B_TRUE) { in ds_snmp_read()
605 mutex_exit(&sp->lock); in ds_snmp_read()
610 sp->state = DS_SNMP_READY; in ds_snmp_read()
611 cv_broadcast(&sp->state_cv); in ds_snmp_read()
612 mutex_exit(&sp->lock); in ds_snmp_read()
619 if (len > sp->data_len) in ds_snmp_read()
620 len = sp->data_len; in ds_snmp_read()
624 bcopy(sp->data, (void *)tmpbufp, len); in ds_snmp_read()
625 kmem_free(sp->data, sp->data_len); in ds_snmp_read()
626 sp->data = (caddr_t)NULL; in ds_snmp_read()
627 sp->data_len = 0; in ds_snmp_read()
632 sp->state = DS_SNMP_READY; in ds_snmp_read()
633 cv_broadcast(&sp->state_cv); in ds_snmp_read()
635 mutex_exit(&sp->lock); in ds_snmp_read()
647 ds_snmp_state_t *sp; in ds_snmp_write() local
669 if ((sp = ddi_get_soft_state(ds_snmp_statep, minor)) == NULL) in ds_snmp_write()
682 mutex_enter(&sp->lock); in ds_snmp_write()
684 if (sp->sc_reset == B_TRUE) { in ds_snmp_write()
685 mutex_exit(&sp->lock); in ds_snmp_write()
695 while (sp->state != DS_SNMP_READY) { in ds_snmp_write()
696 if (cv_wait_sig(&sp->state_cv, &sp->lock) == 0) { in ds_snmp_write()
697 mutex_exit(&sp->lock); in ds_snmp_write()
708 if (sp->state == DS_SNMP_DATA_ERR && sp->sc_reset == B_TRUE) { in ds_snmp_write()
711 mutex_exit(&sp->lock); in ds_snmp_write()
717 if (sp->req_id == (((uint64_t)1 << DS_SNMP_MINOR_SHIFT) - 1)) in ds_snmp_write()
718 sp->req_id = 0; /* Reset */ in ds_snmp_write()
720 hdr.seq_num = ((uint64_t)minor << DS_SNMP_MINOR_SHIFT) | sp->req_id; in ds_snmp_write()
721 sp->last_req_id = hdr.seq_num; in ds_snmp_write()
722 (sp->req_id)++; in ds_snmp_write()
727 sp->state = DS_SNMP_REQUESTED; in ds_snmp_write()
729 mutex_exit(&sp->lock); in ds_snmp_write()
762 ds_snmp_state_t *sp; in ds_snmp_ioctl() local
783 if ((sp = ddi_get_soft_state(ds_snmp_statep, minor)) == NULL) in ds_snmp_ioctl()
791 mutex_enter(&sp->lock); in ds_snmp_ioctl()
793 if (sp->sc_reset == B_TRUE) { in ds_snmp_ioctl()
794 mutex_exit(&sp->lock); in ds_snmp_ioctl()
799 while (sp->state != DS_SNMP_DATA_AVL && in ds_snmp_ioctl()
800 sp->state != DS_SNMP_DATA_ERR) { in ds_snmp_ioctl()
802 "waiting for data\n", sp->state, sp->sc_reset); in ds_snmp_ioctl()
803 if (cv_wait_sig(&sp->state_cv, &sp->lock) == 0) { in ds_snmp_ioctl()
804 sp->state = DS_SNMP_READY; in ds_snmp_ioctl()
805 mutex_exit(&sp->lock); in ds_snmp_ioctl()
810 "out of wait!\n", sp->state, sp->sc_reset); in ds_snmp_ioctl()
818 if (sp->state == DS_SNMP_DATA_ERR) { in ds_snmp_ioctl()
819 if (sp->sc_reset == B_TRUE) { in ds_snmp_ioctl()
820 mutex_exit(&sp->lock); in ds_snmp_ioctl()
825 sp->state = DS_SNMP_READY; in ds_snmp_ioctl()
826 cv_broadcast(&sp->state_cv); in ds_snmp_ioctl()
827 mutex_exit(&sp->lock); in ds_snmp_ioctl()
834 info.size = sp->data_len; in ds_snmp_ioctl()
835 info.token = sp->gencount; in ds_snmp_ioctl()
837 mutex_exit(&sp->lock); in ds_snmp_ioctl()
844 mutex_enter(&sp->lock); in ds_snmp_ioctl()
847 DS_SNMP_DBG("ds_snmp_ioctl: sc_reset=%d\n", sp->sc_reset); in ds_snmp_ioctl()
849 if (sp->sc_reset == B_TRUE) { in ds_snmp_ioctl()
850 if (sp->data) { in ds_snmp_ioctl()
852 sp->data, sp->data_len); in ds_snmp_ioctl()
853 kmem_free(sp->data, sp->data_len); in ds_snmp_ioctl()
855 sp->data = NULL; in ds_snmp_ioctl()
856 sp->data_len = 0; in ds_snmp_ioctl()
857 sp->state = DS_SNMP_READY; in ds_snmp_ioctl()
858 sp->req_id = 0; in ds_snmp_ioctl()
859 sp->last_req_id = 0; in ds_snmp_ioctl()
860 sp->sc_reset = B_FALSE; in ds_snmp_ioctl()
862 mutex_exit(&sp->lock); in ds_snmp_ioctl()
900 ds_snmp_state_t *sp; in ds_snmp_unreg_handler() local
913 sp = ddi_get_soft_state(ds_snmp_statep, minor); in ds_snmp_unreg_handler()
914 if (sp == NULL) in ds_snmp_unreg_handler()
923 mutex_enter(&sp->lock); in ds_snmp_unreg_handler()
924 sp->sc_reset = B_TRUE; in ds_snmp_unreg_handler()
925 sp->state = DS_SNMP_DATA_ERR; in ds_snmp_unreg_handler()
926 cv_broadcast(&sp->state_cv); in ds_snmp_unreg_handler()
927 mutex_exit(&sp->lock); in ds_snmp_unreg_handler()
944 ds_snmp_state_t *sp; in ds_snmp_data_handler() local
965 if ((sp = ddi_get_soft_state(ds_snmp_statep, minor)) == NULL) in ds_snmp_data_handler()
968 mutex_enter(&sp->lock); in ds_snmp_data_handler()
975 if (sp->state != DS_SNMP_REQUESTED) { in ds_snmp_data_handler()
977 mutex_exit(&sp->lock); in ds_snmp_data_handler()
984 ASSERT(sp->data_len == 0); in ds_snmp_data_handler()
985 ASSERT(sp->data == NULL); in ds_snmp_data_handler()
990 if (hdr.seq_num != sp->last_req_id) { in ds_snmp_data_handler()
993 mutex_exit(&sp->lock); in ds_snmp_data_handler()
998 sp->state = DS_SNMP_DATA_ERR; in ds_snmp_data_handler()
1002 sp->data = kmem_alloc(snmp_size, KM_SLEEP); in ds_snmp_data_handler()
1003 sp->data_len = snmp_size; in ds_snmp_data_handler()
1004 sp->state = DS_SNMP_DATA_AVL; in ds_snmp_data_handler()
1007 sp->data, sp->data_len); in ds_snmp_data_handler()
1010 sp->gencount++; in ds_snmp_data_handler()
1015 cv_broadcast(&sp->state_cv); in ds_snmp_data_handler()
1016 mutex_exit(&sp->lock); in ds_snmp_data_handler()