Lines Matching refs:drc

34 SpaprDrcType spapr_drc_type(SpaprDrc *drc)  in spapr_drc_type()  argument
36 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_type()
41 uint32_t spapr_drc_index(SpaprDrc *drc) in spapr_drc_index() argument
43 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_index()
50 | (drc->id & DRC_INDEX_ID_MASK); in spapr_drc_index()
53 static void spapr_drc_release(SpaprDrc *drc) in spapr_drc_release() argument
55 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_release()
57 drck->release(drc->dev); in spapr_drc_release()
59 drc->unplug_requested = false; in spapr_drc_release()
60 g_free(drc->fdt); in spapr_drc_release()
61 drc->fdt = NULL; in spapr_drc_release()
62 drc->fdt_start_offset = 0; in spapr_drc_release()
63 object_property_del(OBJECT(drc), "device"); in spapr_drc_release()
64 drc->dev = NULL; in spapr_drc_release()
67 static uint32_t drc_isolate_physical(SpaprDrc *drc) in drc_isolate_physical() argument
69 switch (drc->state) { in drc_isolate_physical()
80 drc->state = SPAPR_DRC_STATE_PHYSICAL_POWERON; in drc_isolate_physical()
82 if (drc->unplug_requested) { in drc_isolate_physical()
83 uint32_t drc_index = spapr_drc_index(drc); in drc_isolate_physical()
85 spapr_drc_release(drc); in drc_isolate_physical()
91 static uint32_t drc_unisolate_physical(SpaprDrc *drc) in drc_unisolate_physical() argument
93 switch (drc->state) { in drc_unisolate_physical()
107 if (!drc->dev) { in drc_unisolate_physical()
111 drc->state = SPAPR_DRC_STATE_PHYSICAL_UNISOLATE; in drc_unisolate_physical()
112 drc->ccs_offset = drc->fdt_start_offset; in drc_unisolate_physical()
113 drc->ccs_depth = 0; in drc_unisolate_physical()
118 static uint32_t drc_isolate_logical(SpaprDrc *drc) in drc_isolate_logical() argument
120 switch (drc->state) { in drc_isolate_logical()
142 if (spapr_drc_type(drc) == SPAPR_DR_CONNECTOR_TYPE_LMB in drc_isolate_logical()
143 && !drc->unplug_requested) { in drc_isolate_logical()
147 drc->state = SPAPR_DRC_STATE_LOGICAL_AVAILABLE; in drc_isolate_logical()
152 static uint32_t drc_unisolate_logical(SpaprDrc *drc) in drc_unisolate_logical() argument
156 switch (drc->state) { in drc_unisolate_logical()
163 if (drc->unplug_requested && drc->dev) { in drc_unisolate_logical()
164 if (spapr_drc_type(drc) == SPAPR_DR_CONNECTOR_TYPE_LMB) { in drc_unisolate_logical()
167 spapr_memory_unplug_rollback(spapr, drc->dev); in drc_unisolate_logical()
170 drc->unplug_requested = false; in drc_unisolate_logical()
172 if (drc->dev->id) { in drc_unisolate_logical()
174 "for device %s", drc->dev->id); in drc_unisolate_logical()
177 qapi_event_send_device_unplug_guest_error(drc->dev->id, in drc_unisolate_logical()
178 drc->dev->canonical_path); in drc_unisolate_logical()
191 g_assert(drc->dev); in drc_unisolate_logical()
193 drc->state = SPAPR_DRC_STATE_LOGICAL_UNISOLATE; in drc_unisolate_logical()
194 drc->ccs_offset = drc->fdt_start_offset; in drc_unisolate_logical()
195 drc->ccs_depth = 0; in drc_unisolate_logical()
200 static uint32_t drc_set_usable(SpaprDrc *drc) in drc_set_usable() argument
202 switch (drc->state) { in drc_set_usable()
218 if (!drc->dev) { in drc_set_usable()
221 if (drc->unplug_requested) { in drc_set_usable()
227 drc->state = SPAPR_DRC_STATE_LOGICAL_AVAILABLE; in drc_set_usable()
232 static uint32_t drc_set_unusable(SpaprDrc *drc) in drc_set_unusable() argument
234 switch (drc->state) { in drc_set_unusable()
246 drc->state = SPAPR_DRC_STATE_LOGICAL_UNUSABLE; in drc_set_unusable()
247 if (drc->unplug_requested) { in drc_set_unusable()
248 uint32_t drc_index = spapr_drc_index(drc); in drc_set_unusable()
250 spapr_drc_release(drc); in drc_set_unusable()
256 static char *spapr_drc_name(SpaprDrc *drc) in spapr_drc_name() argument
258 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_name()
281 return g_strdup_printf("%s%d", drck->drc_name_prefix, drc->id); in spapr_drc_name()
291 static SpaprDREntitySense physical_entity_sense(SpaprDrc *drc) in physical_entity_sense() argument
298 return drc->dev ? SPAPR_DR_ENTITY_SENSE_PRESENT in physical_entity_sense()
302 static SpaprDREntitySense logical_entity_sense(SpaprDrc *drc) in logical_entity_sense() argument
304 switch (drc->state) { in logical_entity_sense()
310 g_assert(drc->dev); in logical_entity_sense()
320 SpaprDrc *drc = SPAPR_DR_CONNECTOR(obj); in prop_get_index() local
321 uint32_t value = spapr_drc_index(drc); in prop_get_index()
328 SpaprDrc *drc = SPAPR_DR_CONNECTOR(obj); in prop_get_fdt() local
333 if (!drc->fdt) { in prop_get_fdt()
339 fdt = drc->fdt; in prop_get_fdt()
340 fdt_offset = drc->fdt_start_offset; in prop_get_fdt()
397 void spapr_drc_attach(SpaprDrc *drc, DeviceState *d) in spapr_drc_attach() argument
399 trace_spapr_drc_attach(spapr_drc_index(drc)); in spapr_drc_attach()
401 g_assert(!drc->dev); in spapr_drc_attach()
402 g_assert((drc->state == SPAPR_DRC_STATE_LOGICAL_UNUSABLE) in spapr_drc_attach()
403 || (drc->state == SPAPR_DRC_STATE_PHYSICAL_POWERON)); in spapr_drc_attach()
405 drc->dev = d; in spapr_drc_attach()
407 object_property_add_link(OBJECT(drc), "device", in spapr_drc_attach()
408 object_get_typename(OBJECT(drc->dev)), in spapr_drc_attach()
409 (Object **)(&drc->dev), in spapr_drc_attach()
413 void spapr_drc_unplug_request(SpaprDrc *drc) in spapr_drc_unplug_request() argument
415 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_unplug_request()
417 trace_spapr_drc_unplug_request(spapr_drc_index(drc)); in spapr_drc_unplug_request()
419 g_assert(drc->dev); in spapr_drc_unplug_request()
421 drc->unplug_requested = true; in spapr_drc_unplug_request()
423 if (drc->state != drck->empty_state) { in spapr_drc_unplug_request()
424 trace_spapr_drc_awaiting_quiesce(spapr_drc_index(drc)); in spapr_drc_unplug_request()
428 spapr_drc_release(drc); in spapr_drc_unplug_request()
431 bool spapr_drc_reset(SpaprDrc *drc) in spapr_drc_reset() argument
433 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_reset()
436 trace_spapr_drc_reset(spapr_drc_index(drc)); in spapr_drc_reset()
441 if (drc->unplug_requested) { in spapr_drc_reset()
442 spapr_drc_release(drc); in spapr_drc_reset()
446 if (drc->dev) { in spapr_drc_reset()
448 drc->state = drck->ready_state; in spapr_drc_reset()
453 drc->ccs_offset = drc->fdt_start_offset; in spapr_drc_reset()
454 drc->ccs_depth = 0; in spapr_drc_reset()
456 drc->state = drck->empty_state; in spapr_drc_reset()
457 drc->ccs_offset = -1; in spapr_drc_reset()
458 drc->ccs_depth = -1; in spapr_drc_reset()
482 SpaprDrc *drc = opaque; in spapr_drc_needed() local
483 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_drc_needed()
489 if (!drc->dev) { in spapr_drc_needed()
498 return drc->state != drck->ready_state || in spapr_drc_needed()
499 spapr_drc_unplug_requested(drc); in spapr_drc_needed()
529 SpaprDrc *drc = SPAPR_DR_CONNECTOR(d); in drc_realize() local
530 g_autofree gchar *link_name = g_strdup_printf("%x", spapr_drc_index(drc)); in drc_realize()
534 trace_spapr_drc_realize(spapr_drc_index(drc)); in drc_realize()
543 child_name = object_get_canonical_path_component(OBJECT(drc)); in drc_realize()
544 trace_spapr_drc_realize_child(spapr_drc_index(drc), child_name); in drc_realize()
546 drc->owner, child_name); in drc_realize()
547 vmstate_register(VMSTATE_IF(drc), spapr_drc_index(drc), &vmstate_spapr_drc, in drc_realize()
548 drc); in drc_realize()
549 trace_spapr_drc_realize_complete(spapr_drc_index(drc)); in drc_realize()
554 SpaprDrc *drc = SPAPR_DR_CONNECTOR(d); in drc_unrealize() local
555 g_autofree gchar *name = g_strdup_printf("%x", spapr_drc_index(drc)); in drc_unrealize()
557 trace_spapr_drc_unrealize(spapr_drc_index(drc)); in drc_unrealize()
558 vmstate_unregister(VMSTATE_IF(drc), &vmstate_spapr_drc, drc); in drc_unrealize()
565 SpaprDrc *drc = SPAPR_DR_CONNECTOR(object_new(type)); in spapr_dr_connector_new() local
568 drc->id = id; in spapr_dr_connector_new()
569 drc->owner = owner; in spapr_dr_connector_new()
571 spapr_drc_index(drc)); in spapr_dr_connector_new()
572 object_property_add_child(owner, prop_name, OBJECT(drc)); in spapr_dr_connector_new()
573 object_unref(OBJECT(drc)); in spapr_dr_connector_new()
574 qdev_realize(DEVICE(drc), NULL, NULL); in spapr_dr_connector_new()
576 return drc; in spapr_dr_connector_new()
581 SpaprDrc *drc = SPAPR_DR_CONNECTOR(obj); in spapr_dr_connector_instance_init() local
582 SpaprDrcClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_dr_connector_instance_init()
584 object_property_add_uint32_ptr(obj, "id", &drc->id, OBJ_PROP_FLAG_READ); in spapr_dr_connector_instance_init()
589 drc->state = drck->empty_state; in spapr_dr_connector_instance_init()
610 SpaprDrc *drc = SPAPR_DR_CONNECTOR(drcp); in drc_physical_needed() local
612 if ((drc->dev && (drcp->dr_indicator == SPAPR_DR_INDICATOR_ACTIVE)) in drc_physical_needed()
613 || (!drc->dev && (drcp->dr_indicator == SPAPR_DR_INDICATOR_INACTIVE))) { in drc_physical_needed()
632 SpaprDrc *drc = SPAPR_DR_CONNECTOR(opaque); in drc_physical_reset() local
633 SpaprDrcPhysical *drcp = SPAPR_DRC_PHYSICAL(drc); in drc_physical_reset()
635 if (drc->dev) { in drc_physical_reset()
877 SpaprDrc *drc; in spapr_dt_drc() local
888 drc = SPAPR_DR_CONNECTOR(obj); in spapr_dt_drc()
889 drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in spapr_dt_drc()
891 if (owner && (drc->owner != owner)) { in spapr_dt_drc()
895 if ((spapr_drc_type(drc) & drc_type_mask) == 0) { in spapr_dt_drc()
902 drc_index = cpu_to_be32(spapr_drc_index(drc)); in spapr_dt_drc()
910 drc_name = spapr_drc_name(drc); in spapr_dt_drc()
969 SpaprDrc *drc; in spapr_drc_reset_all() local
974 drc = SPAPR_DR_CONNECTOR(object_property_get_link(drc_container, in spapr_drc_reset_all()
984 if (spapr_drc_reset(drc)) { in spapr_drc_reset_all()
996 SpaprDrc *drc = spapr_drc_by_index(idx); in rtas_set_isolation_state() local
999 if (!drc) { in rtas_set_isolation_state()
1003 trace_spapr_drc_set_isolation_state(spapr_drc_index(drc), state); in rtas_set_isolation_state()
1005 drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in rtas_set_isolation_state()
1009 return drck->isolate(drc); in rtas_set_isolation_state()
1012 return drck->unisolate(drc); in rtas_set_isolation_state()
1021 SpaprDrc *drc = spapr_drc_by_index(idx); in rtas_set_allocation_state() local
1023 if (!drc || !object_dynamic_cast(OBJECT(drc), TYPE_SPAPR_DRC_LOGICAL)) { in rtas_set_allocation_state()
1027 trace_spapr_drc_set_allocation_state(spapr_drc_index(drc), state); in rtas_set_allocation_state()
1031 return drc_set_usable(drc); in rtas_set_allocation_state()
1034 return drc_set_unusable(drc); in rtas_set_allocation_state()
1043 SpaprDrc *drc = spapr_drc_by_index(idx); in rtas_set_dr_indicator() local
1045 if (!drc || !object_dynamic_cast(OBJECT(drc), TYPE_SPAPR_DRC_PHYSICAL)) { in rtas_set_dr_indicator()
1056 SPAPR_DRC_PHYSICAL(drc)->dr_indicator = state; in rtas_set_dr_indicator()
1103 SpaprDrc *drc; in rtas_get_sensor_state() local
1123 drc = spapr_drc_by_index(sensor_index); in rtas_get_sensor_state()
1124 if (!drc) { in rtas_get_sensor_state()
1129 drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in rtas_get_sensor_state()
1130 sensor_state = drck->dr_entity_sense(drc); in rtas_get_sensor_state()
1165 SpaprDrc *drc; in rtas_ibm_configure_connector() local
1178 drc = spapr_drc_by_index(drc_index); in rtas_ibm_configure_connector()
1179 if (!drc) { in rtas_ibm_configure_connector()
1185 if ((drc->state != SPAPR_DRC_STATE_LOGICAL_UNISOLATE) in rtas_ibm_configure_connector()
1186 && (drc->state != SPAPR_DRC_STATE_PHYSICAL_UNISOLATE) in rtas_ibm_configure_connector()
1187 && (drc->state != SPAPR_DRC_STATE_LOGICAL_CONFIGURED) in rtas_ibm_configure_connector()
1188 && (drc->state != SPAPR_DRC_STATE_PHYSICAL_CONFIGURED)) { in rtas_ibm_configure_connector()
1198 drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc); in rtas_ibm_configure_connector()
1204 if (spapr_drc_type(drc) == SPAPR_DR_CONNECTOR_TYPE_LMB && in rtas_ibm_configure_connector()
1205 drc->unplug_requested) { in rtas_ibm_configure_connector()
1206 spapr_memory_unplug_rollback(spapr, drc->dev); in rtas_ibm_configure_connector()
1209 if (!drc->fdt) { in rtas_ibm_configure_connector()
1215 if (drck->dt_populate(drc, spapr, fdt, &drc->fdt_start_offset, in rtas_ibm_configure_connector()
1222 drc->fdt = fdt; in rtas_ibm_configure_connector()
1223 drc->ccs_offset = drc->fdt_start_offset; in rtas_ibm_configure_connector()
1224 drc->ccs_depth = 0; in rtas_ibm_configure_connector()
1233 tag = fdt_next_tag(drc->fdt, drc->ccs_offset, &fdt_offset_next); in rtas_ibm_configure_connector()
1237 drc->ccs_depth++; in rtas_ibm_configure_connector()
1238 name = fdt_get_name(drc->fdt, drc->ccs_offset, NULL); in rtas_ibm_configure_connector()
1247 drc->ccs_depth--; in rtas_ibm_configure_connector()
1248 if (drc->ccs_depth == 0) { in rtas_ibm_configure_connector()
1251 drc->state = drck->ready_state; in rtas_ibm_configure_connector()
1256 drc->ccs_offset = drc->fdt_start_offset; in rtas_ibm_configure_connector()
1257 drc->ccs_depth = 0; in rtas_ibm_configure_connector()
1258 fdt_offset_next = drc->fdt_start_offset; in rtas_ibm_configure_connector()
1265 prop = fdt_get_property_by_offset(drc->fdt, drc->ccs_offset, in rtas_ibm_configure_connector()
1267 name = fdt_string(drc->fdt, fdt32_to_cpu(prop->nameoff)); in rtas_ibm_configure_connector()
1290 if (drc->ccs_offset >= 0) { in rtas_ibm_configure_connector()
1291 drc->ccs_offset = fdt_offset_next; in rtas_ibm_configure_connector()