Lines Matching refs:hdlp

280 static int ddihp_cn_pre_change_state(ddi_hp_cn_handle_t *hdlp,
282 static int ddihp_cn_post_change_state(ddi_hp_cn_handle_t *hdlp,
284 static int ddihp_cn_handle_state_change(ddi_hp_cn_handle_t *hdlp);
285 static int ddihp_cn_change_children_state(ddi_hp_cn_handle_t *hdlp,
288 static int ddihp_port_change_state(ddi_hp_cn_handle_t *hdlp,
290 static int ddihp_port_upgrade_state(ddi_hp_cn_handle_t *hdlp,
292 static int ddihp_port_downgrade_state(ddi_hp_cn_handle_t *hdlp,
295 static void ddihp_update_last_change(ddi_hp_cn_handle_t *hdlp);
311 ddi_hp_cn_handle_t *hdlp; in ddihp_modctl() local
344 hdlp = ddihp_cn_name_to_handle(dip, cn_name); in ddihp_modctl()
347 if (hdlp != NULL) { in ddihp_modctl()
356 if (hdlp == NULL) { in ddihp_modctl()
366 DDIHP_CN_OPS(hdlp, op, (void *)&target_state, in ddihp_modctl()
373 DDIHP_CN_OPS(hdlp, op, (void *)arg, (void *)rval, rv); in ddihp_modctl()
412 ddihp_cn_getstate(ddi_hp_cn_handle_t *hdlp) in ddihp_cn_getstate() argument
418 (void *)hdlp->cn_dip, (void *)hdlp)); in ddihp_cn_getstate()
420 ASSERT(DEVI_BUSY_OWNED(hdlp->cn_dip)); in ddihp_cn_getstate()
422 DDIHP_CN_OPS(hdlp, DDI_HPOP_CN_GET_STATE, in ddihp_cn_getstate()
426 "CN %p getstate command failed\n", (void *)hdlp)); in ddihp_cn_getstate()
433 (void *)hdlp, hdlp->cn_info.cn_state, new_state)); in ddihp_cn_getstate()
435 if (new_state != hdlp->cn_info.cn_state) { in ddihp_cn_getstate()
436 hdlp->cn_info.cn_state = new_state; in ddihp_cn_getstate()
437 ddihp_update_last_change(hdlp); in ddihp_cn_getstate()
447 ddihp_cn_unregister(ddi_hp_cn_handle_t *hdlp) in ddihp_cn_unregister() argument
449 dev_info_t *dip = hdlp->cn_dip; in ddihp_cn_unregister()
452 (void *)hdlp)); in ddihp_cn_unregister()
456 (void) ddihp_cn_getstate(hdlp); in ddihp_cn_unregister()
458 if (hdlp->cn_info.cn_state > DDI_HP_CN_STATE_OFFLINE) { in ddihp_cn_unregister()
461 (void *)dip, (void *)hdlp, hdlp->cn_info.cn_state)); in ddihp_cn_unregister()
467 DDIHP_LIST_REMOVE(ddi_hp_cn_handle_t, (DEVI(dip)->devi_hp_hdlp), hdlp); in ddihp_cn_unregister()
469 kmem_free(hdlp->cn_info.cn_name, strlen(hdlp->cn_info.cn_name) + 1); in ddihp_cn_unregister()
470 kmem_free(hdlp, sizeof (ddi_hp_cn_handle_t)); in ddihp_cn_unregister()
481 ddi_hp_cn_handle_t *hdlp; in ddihp_cn_name_to_handle() local
487 for (hdlp = DEVI(dip)->devi_hp_hdlp; hdlp; hdlp = hdlp->next) { in ddihp_cn_name_to_handle()
489 "current cn_name: %s", hdlp->cn_info.cn_name)); in ddihp_cn_name_to_handle()
491 if (strcmp(cn_name, hdlp->cn_info.cn_name) == 0) { in ddihp_cn_name_to_handle()
493 return (hdlp); in ddihp_cn_name_to_handle()
506 ddihp_connector_ops(ddi_hp_cn_handle_t *hdlp, ddi_hp_op_t op, in ddihp_connector_ops() argument
510 dev_info_t *dip = hdlp->cn_dip; in ddihp_connector_ops()
515 "hdlp=%p arg=%p\n", (void *)dip, op, (void *)hdlp, arg)); in ddihp_connector_ops()
520 rv = ddihp_cn_pre_change_state(hdlp, target_state); in ddihp_connector_ops()
524 hdlp->cn_info.cn_state; in ddihp_connector_ops()
530 dip, hdlp->cn_info.cn_name, op, arg, result); in ddihp_connector_ops()
535 "hdlp=%p arg=%p\n", (void *)dip, hdlp->cn_info.cn_name, in ddihp_connector_ops()
536 op, (void *)hdlp, arg)); in ddihp_connector_ops()
543 hdlp->cn_info.cn_state, *(ddi_hp_cn_state_t *)result, rv)); in ddihp_connector_ops()
549 rv_post = ddihp_cn_post_change_state(hdlp, in ddihp_connector_ops()
563 ddihp_port_ops(ddi_hp_cn_handle_t *hdlp, ddi_hp_op_t op, in ddihp_port_ops() argument
568 ASSERT(DEVI_BUSY_OWNED(hdlp->cn_dip)); in ddihp_port_ops()
571 "arg=%p\n", (void *)hdlp->cn_dip, op, (void *)hdlp, arg)); in ddihp_port_ops()
578 state = hdlp->cn_info.cn_state; in ddihp_port_ops()
580 if (hdlp->cn_info.cn_child == NULL) { in ddihp_port_ops()
590 switch (i_ddi_node_state(hdlp->cn_info.cn_child)) { in ddihp_port_ops()
614 ddi_get_devstate(hdlp->cn_info.cn_child) != in ddihp_port_ops()
626 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state; in ddihp_port_ops()
628 ret = ddihp_port_change_state(hdlp, target_state); in ddihp_port_ops()
629 if (curr_state != hdlp->cn_info.cn_state) { in ddihp_port_ops()
630 ddihp_update_last_change(hdlp); in ddihp_port_ops()
632 *((ddi_hp_cn_state_t *)result) = hdlp->cn_info.cn_state; in ddihp_port_ops()
638 (void) ddihp_cn_getstate(hdlp); in ddihp_port_ops()
640 if (hdlp->cn_info.cn_state != DDI_HP_CN_STATE_PORT_EMPTY) { in ddihp_port_ops()
647 ret = ddihp_cn_unregister(hdlp); in ddihp_port_ops()
663 ddihp_cn_gen_sysevent(ddi_hp_cn_handle_t *hdlp, in ddihp_cn_gen_sysevent() argument
666 dev_info_t *dip = hdlp->cn_dip; in ddihp_cn_gen_sysevent()
679 hdlp->cn_info.cn_name); in ddihp_cn_gen_sysevent()
694 strlen(hdlp->cn_info.cn_name) + 1; in ddihp_cn_gen_sysevent()
700 cn_path, hdlp->cn_info.cn_name); in ddihp_cn_gen_sysevent()
708 (void) strcat(ap_id, hdlp->cn_info.cn_name); in ddihp_cn_gen_sysevent()
832 ddihp_cn_pre_change_state(ddi_hp_cn_handle_t *hdlp, in ddihp_cn_pre_change_state() argument
835 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state; in ddihp_cn_pre_change_state()
836 dev_info_t *dip = hdlp->cn_dip; in ddihp_cn_pre_change_state()
845 rv = ddihp_cn_change_children_state(hdlp, B_FALSE); in ddihp_cn_pre_change_state()
852 hdlp->cn_info.cn_name); in ddihp_cn_pre_change_state()
862 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_UNPROBE, in ddihp_cn_pre_change_state()
870 hdlp->cn_info.cn_name); in ddihp_cn_pre_change_state()
879 hdlp->cn_info.cn_name)); in ddihp_cn_pre_change_state()
890 ddihp_cn_post_change_state(ddi_hp_cn_handle_t *hdlp, in ddihp_cn_post_change_state() argument
894 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state; in ddihp_cn_post_change_state()
898 hdlp->cn_info.cn_state = new_state; in ddihp_cn_post_change_state()
899 ddihp_update_last_change(hdlp); in ddihp_cn_post_change_state()
908 rv = ddihp_cn_handle_state_change(hdlp); in ddihp_cn_post_change_state()
910 if (curr_state != hdlp->cn_info.cn_state) { in ddihp_cn_post_change_state()
915 ddihp_cn_gen_sysevent(hdlp, DDI_HP_CN_STATE_CHANGE, in ddihp_cn_post_change_state()
930 ddihp_cn_handle_state_change(ddi_hp_cn_handle_t *hdlp) in ddihp_cn_handle_state_change() argument
932 dev_info_t *dip = hdlp->cn_dip; in ddihp_cn_handle_state_change()
942 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_PROBE, NULL, NULL); in ddihp_cn_handle_state_change()
953 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_CHANGE_STATE, in ddihp_cn_handle_state_change()
956 if (result_state && result_state != hdlp->cn_info.cn_state) { in ddihp_cn_handle_state_change()
957 hdlp->cn_info.cn_state = result_state; in ddihp_cn_handle_state_change()
958 ddihp_update_last_change(hdlp); in ddihp_cn_handle_state_change()
964 hdlp->cn_info.cn_name); in ddihp_cn_handle_state_change()
971 (void) ddihp_cn_change_children_state(hdlp, B_TRUE); in ddihp_cn_handle_state_change()
976 hdlp->cn_info.cn_name)); in ddihp_cn_handle_state_change()
986 ddihp_cn_change_children_state(ddi_hp_cn_handle_t *hdlp, boolean_t online) in ddihp_cn_change_children_state() argument
988 dev_info_t *dip = hdlp->cn_dip; in ddihp_cn_change_children_state()
995 (void *)dip, (void *)hdlp, online)); in ddihp_cn_change_children_state()
1003 if (online && hdlp->cn_info.cn_state < DDI_HP_CN_STATE_ENABLED) { in ddihp_cn_change_children_state()
1005 "Connector %p is not in probed state\n", (void *)hdlp)); in ddihp_cn_change_children_state()
1024 hdlp->cn_info.cn_num) in ddihp_cn_change_children_state()
1043 hdlp->cn_info.cn_name); in ddihp_cn_change_children_state()
1064 hdlp->cn_info.cn_name); in ddihp_cn_change_children_state()
1082 ddihp_port_change_state(ddi_hp_cn_handle_t *hdlp, in ddihp_port_change_state() argument
1085 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state; in ddihp_port_change_state()
1094 return (ddihp_port_upgrade_state(hdlp, target_state)); in ddihp_port_change_state()
1096 return (ddihp_port_downgrade_state(hdlp, target_state)); in ddihp_port_change_state()
1105 ddihp_port_upgrade_state(ddi_hp_cn_handle_t *hdlp, in ddihp_port_upgrade_state() argument
1112 curr_state = hdlp->cn_info.cn_state; in ddihp_port_upgrade_state()
1118 rv = ddihp_connector_ops(hdlp, in ddihp_port_upgrade_state()
1122 hdlp->cn_info.cn_state = in ddihp_port_upgrade_state()
1129 rv = ddihp_connector_ops(hdlp, in ddihp_port_upgrade_state()
1133 hdlp->cn_info.cn_state = in ddihp_port_upgrade_state()
1136 ASSERT(hdlp->cn_info.cn_child == NULL); in ddihp_port_upgrade_state()
1137 hdlp->cn_info.cn_child = cdip; in ddihp_port_upgrade_state()
1144 cdip = hdlp->cn_info.cn_child; in ddihp_port_upgrade_state()
1149 hdlp->cn_info.cn_state = in ddihp_port_upgrade_state()
1157 (void *)cdip, hdlp->cn_info.cn_name)); in ddihp_port_upgrade_state()
1167 curr_state = hdlp->cn_info.cn_state; in ddihp_port_upgrade_state()
1183 ddihp_port_downgrade_state(ddi_hp_cn_handle_t *hdlp, in ddihp_port_downgrade_state() argument
1187 dev_info_t *dip = hdlp->cn_dip; in ddihp_port_downgrade_state()
1191 curr_state = hdlp->cn_info.cn_state; in ddihp_port_downgrade_state()
1201 rv = ddihp_connector_ops(hdlp, in ddihp_port_downgrade_state()
1205 hdlp->cn_info.cn_state = in ddihp_port_downgrade_state()
1216 rv = ddihp_connector_ops(hdlp, in ddihp_port_downgrade_state()
1220 hdlp->cn_info.cn_state = in ddihp_port_downgrade_state()
1226 cdip = hdlp->cn_info.cn_child; in ddihp_port_downgrade_state()
1231 hdlp->cn_info.cn_state = in ddihp_port_downgrade_state()
1247 curr_state = hdlp->cn_info.cn_state; in ddihp_port_downgrade_state()
1266 ddihp_update_last_change(ddi_hp_cn_handle_t *hdlp) in ddihp_update_last_change() argument
1271 hdlp->cn_info.cn_last_change = (time_t)-1; in ddihp_update_last_change()
1273 hdlp->cn_info.cn_last_change = (time32_t)time; in ddihp_update_last_change()