Lines Matching refs:vldcp

73 static int i_vldc_mdeg_register(vldc_t *vldcp);
74 static int i_vldc_mdeg_unregister(vldc_t *vldcp);
75 static int i_vldc_add_port(vldc_t *vldcp, md_t *mdp, mde_cookie_t node);
76 static int i_vldc_remove_port(vldc_t *vldcp, uint_t portno);
77 static int i_vldc_close_port(vldc_t *vldcp, uint_t portno);
350 vldc_t *vldcp; in i_vldc_mdeg_cb() local
362 vldcp = (vldc_t *)cb_argp; in i_vldc_mdeg_cb()
364 mutex_enter(&vldcp->lock); in i_vldc_mdeg_cb()
365 if (vldcp->detaching == B_TRUE) { in i_vldc_mdeg_cb()
367 mutex_exit(&vldcp->lock); in i_vldc_mdeg_cb()
382 if ((rv = i_vldc_add_port(vldcp, mdp, node)) != MDEG_SUCCESS) { in i_vldc_mdeg_cb()
403 if ((rv = i_vldc_remove_port(vldcp, portno)) != 0) { in i_vldc_mdeg_cb()
414 mutex_exit(&vldcp->lock); in i_vldc_mdeg_cb()
421 i_vldc_mdeg_register(vldc_t *vldcp) in i_vldc_mdeg_register() argument
434 inst = ddi_prop_get_int(DDI_DEV_T_ANY, vldcp->dip, in i_vldc_mdeg_register()
438 ddi_get_instance(vldcp->dip)); in i_vldc_mdeg_register()
443 rv = ddi_prop_lookup_string(DDI_DEV_T_ANY, vldcp->dip, in i_vldc_mdeg_register()
447 ddi_get_instance(vldcp->dip)); in i_vldc_mdeg_register()
481 vldcp, &mdeg_hdl); in i_vldc_mdeg_register()
493 vldcp->inst_spec = inst_specp; in i_vldc_mdeg_register()
494 vldcp->mdeg_hdl = mdeg_hdl; in i_vldc_mdeg_register()
501 i_vldc_mdeg_unregister(vldc_t *vldcp) in i_vldc_mdeg_unregister() argument
506 D1("i_vldc_mdeg_unregister: hdl=0x%lx\n", vldcp->mdeg_hdl); in i_vldc_mdeg_unregister()
508 rv = mdeg_unregister(vldcp->mdeg_hdl); in i_vldc_mdeg_unregister()
516 name = VLDC_MDEG_PROP_NAME(vldcp->inst_spec->specp); in i_vldc_mdeg_unregister()
520 kmem_free(vldcp->inst_spec->specp, sizeof (vldc_prop_template)); in i_vldc_mdeg_unregister()
521 vldcp->inst_spec->specp = NULL; in i_vldc_mdeg_unregister()
523 kmem_free(vldcp->inst_spec, sizeof (mdeg_node_spec_t)); in i_vldc_mdeg_unregister()
524 vldcp->inst_spec = NULL; in i_vldc_mdeg_unregister()
577 i_vldc_add_port(vldc_t *vldcp, md_t *mdp, mde_cookie_t node) in i_vldc_add_port() argument
588 ASSERT(MUTEX_HELD(&vldcp->lock)); in i_vldc_add_port()
603 vport = &(vldcp->port[portno]); in i_vldc_add_port()
629 for (minor_idx = 0; minor_idx < vldcp->minors_assigned; in i_vldc_add_port()
631 if (strcmp(vldcp->minor_tbl[minor_idx].sname, sname) == 0) { in i_vldc_add_port()
638 if (minor_idx == vldcp->minors_assigned) { in i_vldc_add_port()
640 if (vldcp->minors_assigned == VLDC_MAX_MINORS) { in i_vldc_add_port()
646 (void) strlcpy(vldcp->minor_tbl[minor_idx].sname, in i_vldc_add_port()
649 vldcp->minors_assigned++; in i_vldc_add_port()
653 if (vldcp->minor_tbl[minor_idx].portno != VLDC_INVALID_PORTNO) { in i_vldc_add_port()
656 portno, vldcp->minor_tbl[minor_idx].portno); in i_vldc_add_port()
660 vldc_inst = ddi_get_instance(vldcp->dip); in i_vldc_add_port()
663 vport->minorp = &vldcp->minor_tbl[minor_idx]; in i_vldc_add_port()
664 vldcp->minor_tbl[minor_idx].portno = portno; in i_vldc_add_port()
665 vldcp->minor_tbl[minor_idx].in_use = 0; in i_vldc_add_port()
676 rv = ddi_create_minor_node(vldcp->dip, sname, S_IFCHR, in i_vldc_add_port()
682 vldcp->minor_tbl[minor_idx].portno = VLDC_INVALID_PORTNO; in i_vldc_add_port()
684 vldcp->minors_assigned--; in i_vldc_add_port()
702 i_vldc_remove_port(vldc_t *vldcp, uint_t portno) in i_vldc_remove_port() argument
707 ASSERT(vldcp != NULL); in i_vldc_remove_port()
708 ASSERT(MUTEX_HELD(&vldcp->lock)); in i_vldc_remove_port()
710 vport = &(vldcp->port[portno]); in i_vldc_remove_port()
737 (void) i_vldc_close_port(vldcp, portno); in i_vldc_remove_port()
741 ddi_remove_minor_node(vldcp->dip, vport->minorp->sname); in i_vldc_remove_port()
796 i_vldc_close_port(vldc_t *vldcp, uint_t portno) in i_vldc_close_port() argument
802 vport = &(vldcp->port[portno]); in i_vldc_close_port()
875 vldc_t *vldcp; in vldc_attach() local
887 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_attach()
888 if (vldcp == NULL) { in vldc_attach()
895 mutex_init(&vldcp->lock, NULL, MUTEX_DRIVER, NULL); in vldc_attach()
896 vldcp->dip = dip; in vldc_attach()
897 vldcp->detaching = B_FALSE; in vldc_attach()
901 vldcp->port[i].minorp = NULL; in vldc_attach()
905 mutex_init(&(vldcp->minor_tbl[i].lock), NULL, in vldc_attach()
907 cv_init(&(vldcp->minor_tbl[i].cv), NULL, in vldc_attach()
910 vldcp->minor_tbl[i].portno = VLDC_INVALID_PORTNO; in vldc_attach()
914 if (i_vldc_mdeg_register(vldcp) != DDI_SUCCESS) { in vldc_attach()
938 vldc_t *vldcp; in vldc_detach() local
946 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_detach()
947 if (vldcp == NULL) { in vldc_detach()
953 mutex_enter(&vldcp->lock); in vldc_detach()
957 if (vldcp->minor_tbl[i].portno != VLDC_INVALID_PORTNO) { in vldc_detach()
960 instance, vldcp->minor_tbl[i].portno); in vldc_detach()
961 mutex_exit(&vldcp->lock); in vldc_detach()
972 vldcp->detaching = B_TRUE; in vldc_detach()
974 mutex_exit(&vldcp->lock); in vldc_detach()
976 if (i_vldc_mdeg_unregister(vldcp) != MDEG_SUCCESS) { in vldc_detach()
977 vldcp->detaching = B_FALSE; in vldc_detach()
983 if (vldcp->minor_tbl[i].portno != VLDC_INVALID_PORTNO) { in vldc_detach()
984 (void) i_vldc_remove_port(vldcp, i); in vldc_detach()
986 mutex_destroy(&(vldcp->minor_tbl[i].lock)); in vldc_detach()
987 cv_destroy(&(vldcp->minor_tbl[i].cv)); in vldc_detach()
990 mutex_destroy(&vldcp->lock); in vldc_detach()
1014 vldc_t *vldcp; in vldc_open() local
1020 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_open()
1021 if (vldcp == NULL) in vldc_open()
1024 vminor = VLDCMINOR(vldcp, minor); in vldc_open()
1032 vport = &(vldcp->port[portno]); in vldc_open()
1066 vldc_t *vldcp; in vldc_close() local
1072 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_close()
1073 if (vldcp == NULL) { in vldc_close()
1077 vminor = VLDCMINOR(vldcp, minor); in vldc_close()
1087 rv = i_vldc_close_port(vldcp, portno); in vldc_close()
1095 vldc_set_ldc_mode(vldc_port_t *vport, vldc_t *vldcp, int channel_mode) in vldc_set_ldc_mode() argument
1131 attr.instance = ddi_get_instance(vldcp->dip); in vldc_set_ldc_mode()
1331 i_vldc_ioctl_opt_op(vldc_port_t *vport, vldc_t *vldcp, void *arg, int mode) in i_vldc_ioctl_opt_op() argument
1408 rv = vldc_set_ldc_mode(vport, vldcp, vldc_cmd.opt_val); in i_vldc_ioctl_opt_op()
1434 vldc_t *vldcp; in vldc_ioctl() local
1440 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_ioctl()
1441 if (vldcp == NULL) { in vldc_ioctl()
1445 vminor = VLDCMINOR(vldcp, minor); in vldc_ioctl()
1455 vport = &(vldcp->port[portno]); in vldc_ioctl()
1462 rv = i_vldc_ioctl_opt_op(vport, vldcp, (void *)arg, mode); in vldc_ioctl()
1512 vldc_t *vldcp; in vldc_read() local
1519 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_read()
1520 if (vldcp == NULL) { in vldc_read()
1524 vminor = VLDCMINOR(vldcp, minor); in vldc_read()
1534 vport = &(vldcp->port[portno]); in vldc_read()
1587 vldc_t *vldcp; in vldc_write() local
1594 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_write()
1595 if (vldcp == NULL) { in vldc_write()
1599 vminor = VLDCMINOR(vldcp, minor); in vldc_write()
1607 vport = &(vldcp->port[portno]); in vldc_write()
1661 vldc_t *vldcp; in vldc_chpoll() local
1668 vldcp = ddi_get_soft_state(vldc_ssp, instance); in vldc_chpoll()
1669 if (vldcp == NULL) { in vldc_chpoll()
1673 vminor = VLDCMINOR(vldcp, minor); in vldc_chpoll()
1681 vport = &(vldcp->port[portno]); in vldc_chpoll()