Lines Matching refs:hdlp

52 static int ddihp_cn_pre_change_state(ddi_hp_cn_handle_t *hdlp,
54 static int ddihp_cn_post_change_state(ddi_hp_cn_handle_t *hdlp,
56 static int ddihp_cn_handle_state_change(ddi_hp_cn_handle_t *hdlp);
57 static int ddihp_cn_change_children_state(ddi_hp_cn_handle_t *hdlp,
60 static int ddihp_port_change_state(ddi_hp_cn_handle_t *hdlp,
62 static int ddihp_port_upgrade_state(ddi_hp_cn_handle_t *hdlp,
64 static int ddihp_port_downgrade_state(ddi_hp_cn_handle_t *hdlp,
67 static void ddihp_update_last_change(ddi_hp_cn_handle_t *hdlp);
83 ddi_hp_cn_handle_t *hdlp;
105 hdlp = ddihp_cn_name_to_handle(dip, cn_name);
108 if (hdlp != NULL) {
117 if (hdlp == NULL) {
127 DDIHP_CN_OPS(hdlp, op, (void *)&target_state,
134 DDIHP_CN_OPS(hdlp, op, (void *)arg, (void *)rval, rv);
169 ddihp_cn_getstate(ddi_hp_cn_handle_t *hdlp)
174 DDI_HP_IMPLDBG((CE_CONT, "ddihp_cn_getstate: pdip %p hdlp %p\n",
175 (void *)hdlp->cn_dip, (void *)hdlp));
177 ASSERT(DEVI_BUSY_OWNED(hdlp->cn_dip));
179 DDIHP_CN_OPS(hdlp, DDI_HPOP_CN_GET_STATE,
183 "CN %p getstate command failed\n", (void *)hdlp));
188 DDI_HP_IMPLDBG((CE_CONT, "ddihp_cn_getstate: hdlp %p "
190 (void *)hdlp, hdlp->cn_info.cn_state, new_state));
192 if (new_state != hdlp->cn_info.cn_state) {
193 hdlp->cn_info.cn_state = new_state;
194 ddihp_update_last_change(hdlp);
204 ddihp_cn_unregister(ddi_hp_cn_handle_t *hdlp)
206 dev_info_t *dip = hdlp->cn_dip;
208 DDI_HP_NEXDBG((CE_CONT, "ddihp_cn_unregister: hdlp %p\n",
209 (void *)hdlp));
213 (void) ddihp_cn_getstate(hdlp);
215 if (hdlp->cn_info.cn_state > DDI_HP_CN_STATE_OFFLINE) {
216 DDI_HP_NEXDBG((CE_CONT, "ddihp_cn_unregister: dip %p, hdlp %p "
218 (void *)dip, (void *)hdlp, hdlp->cn_info.cn_state));
224 DDIHP_LIST_REMOVE(ddi_hp_cn_handle_t, (DEVI(dip)->devi_hp_hdlp), hdlp);
226 kmem_free(hdlp->cn_info.cn_name, strlen(hdlp->cn_info.cn_name) + 1);
227 kmem_free(hdlp, sizeof (ddi_hp_cn_handle_t));
238 ddi_hp_cn_handle_t *hdlp;
244 for (hdlp = DEVI(dip)->devi_hp_hdlp; hdlp; hdlp = hdlp->next) {
246 "current cn_name: %s", hdlp->cn_info.cn_name));
248 if (strcmp(cn_name, hdlp->cn_info.cn_name) == 0) {
250 return (hdlp);
263 ddihp_connector_ops(ddi_hp_cn_handle_t *hdlp, ddi_hp_op_t op,
267 dev_info_t *dip = hdlp->cn_dip;
272 "hdlp=%p arg=%p\n", (void *)dip, op, (void *)hdlp, arg));
277 rv = ddihp_cn_pre_change_state(hdlp, target_state);
281 hdlp->cn_info.cn_state;
287 dip, hdlp->cn_info.cn_name, op, arg, result);
292 "hdlp=%p arg=%p\n", (void *)dip, hdlp->cn_info.cn_name,
293 op, (void *)hdlp, arg));
300 hdlp->cn_info.cn_state, *(ddi_hp_cn_state_t *)result, rv));
306 rv_post = ddihp_cn_post_change_state(hdlp,
320 ddihp_port_ops(ddi_hp_cn_handle_t *hdlp, ddi_hp_op_t op,
325 ASSERT(DEVI_BUSY_OWNED(hdlp->cn_dip));
327 DDI_HP_IMPLDBG((CE_CONT, "ddihp_port_ops: pdip=%p op=%x hdlp=%p "
328 "arg=%p\n", (void *)hdlp->cn_dip, op, (void *)hdlp, arg));
335 state = hdlp->cn_info.cn_state;
337 if (hdlp->cn_info.cn_child == NULL) {
347 switch (i_ddi_node_state(hdlp->cn_info.cn_child)) {
371 ddi_get_devstate(hdlp->cn_info.cn_child) !=
383 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state;
385 ret = ddihp_port_change_state(hdlp, target_state);
386 if (curr_state != hdlp->cn_info.cn_state) {
387 ddihp_update_last_change(hdlp);
389 *((ddi_hp_cn_state_t *)result) = hdlp->cn_info.cn_state;
395 (void) ddihp_cn_getstate(hdlp);
397 if (hdlp->cn_info.cn_state != DDI_HP_CN_STATE_PORT_EMPTY) {
404 ret = ddihp_cn_unregister(hdlp);
420 ddihp_cn_gen_sysevent(ddi_hp_cn_handle_t *hdlp,
423 dev_info_t *dip = hdlp->cn_dip;
436 hdlp->cn_info.cn_name);
451 strlen(hdlp->cn_info.cn_name) + 1;
457 cn_path, hdlp->cn_info.cn_name);
465 (void) strcat(ap_id, hdlp->cn_info.cn_name);
589 ddihp_cn_pre_change_state(ddi_hp_cn_handle_t *hdlp,
592 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state;
593 dev_info_t *dip = hdlp->cn_dip;
602 rv = ddihp_cn_change_children_state(hdlp, B_FALSE);
609 hdlp->cn_info.cn_name);
619 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_UNPROBE,
627 hdlp->cn_info.cn_name);
636 hdlp->cn_info.cn_name));
647 ddihp_cn_post_change_state(ddi_hp_cn_handle_t *hdlp,
651 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state;
655 hdlp->cn_info.cn_state = new_state;
656 ddihp_update_last_change(hdlp);
665 rv = ddihp_cn_handle_state_change(hdlp);
667 if (curr_state != hdlp->cn_info.cn_state) {
672 ddihp_cn_gen_sysevent(hdlp, DDI_HP_CN_STATE_CHANGE,
687 ddihp_cn_handle_state_change(ddi_hp_cn_handle_t *hdlp)
689 dev_info_t *dip = hdlp->cn_dip;
699 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_PROBE, NULL, NULL);
710 dip, hdlp->cn_info.cn_name, DDI_HPOP_CN_CHANGE_STATE,
713 if (result_state && result_state != hdlp->cn_info.cn_state) {
714 hdlp->cn_info.cn_state = result_state;
715 ddihp_update_last_change(hdlp);
721 hdlp->cn_info.cn_name);
728 (void) ddihp_cn_change_children_state(hdlp, B_TRUE);
733 hdlp->cn_info.cn_name));
743 ddihp_cn_change_children_state(ddi_hp_cn_handle_t *hdlp, boolean_t online)
745 dev_info_t *dip = hdlp->cn_dip;
751 " dip %p hdlp %p, online %x\n",
752 (void *)dip, (void *)hdlp, online));
760 if (online && hdlp->cn_info.cn_state < DDI_HP_CN_STATE_ENABLED) {
762 "Connector %p is not in probed state\n", (void *)hdlp));
781 hdlp->cn_info.cn_num)
800 hdlp->cn_info.cn_name);
821 hdlp->cn_info.cn_name);
839 ddihp_port_change_state(ddi_hp_cn_handle_t *hdlp,
842 ddi_hp_cn_state_t curr_state = hdlp->cn_info.cn_state;
851 return (ddihp_port_upgrade_state(hdlp, target_state));
853 return (ddihp_port_downgrade_state(hdlp, target_state));
862 ddihp_port_upgrade_state(ddi_hp_cn_handle_t *hdlp,
869 curr_state = hdlp->cn_info.cn_state;
875 rv = ddihp_connector_ops(hdlp,
879 hdlp->cn_info.cn_state =
886 rv = ddihp_connector_ops(hdlp,
890 hdlp->cn_info.cn_state =
893 ASSERT(hdlp->cn_info.cn_child == NULL);
894 hdlp->cn_info.cn_child = cdip;
901 cdip = hdlp->cn_info.cn_child;
906 hdlp->cn_info.cn_state =
914 (void *)cdip, hdlp->cn_info.cn_name));
924 curr_state = hdlp->cn_info.cn_state;
940 ddihp_port_downgrade_state(ddi_hp_cn_handle_t *hdlp,
944 dev_info_t *dip = hdlp->cn_dip;
948 curr_state = hdlp->cn_info.cn_state;
958 rv = ddihp_connector_ops(hdlp,
962 hdlp->cn_info.cn_state =
973 rv = ddihp_connector_ops(hdlp,
977 hdlp->cn_info.cn_state =
983 cdip = hdlp->cn_info.cn_child;
988 hdlp->cn_info.cn_state =
1004 curr_state = hdlp->cn_info.cn_state;
1023 ddihp_update_last_change(ddi_hp_cn_handle_t *hdlp)
1028 hdlp->cn_info.cn_last_change = (time_t)-1;
1030 hdlp->cn_info.cn_last_change = (time32_t)time;