Lines Matching refs:cpudsp

117 static int cpudrv_init(cpudrv_devstate_t *cpudsp);
118 static void cpudrv_free(cpudrv_devstate_t *cpudsp);
119 static int cpudrv_comp_create(cpudrv_devstate_t *cpudsp);
163 #define CPUDRV_MONITOR_INIT(cpudsp) { \
164 if (cpudrv_is_enabled(cpudsp)) { \
165 ASSERT(mutex_owned(&(cpudsp)->lock)); \
166 (cpudsp)->cpudrv_pm.timeout_id = \
168 (cpudsp), (((cpudsp)->cpudrv_pm.cur_spd == NULL) ? \
170 (cpudsp)->cpudrv_pm.cur_spd->quant_cnt)); \
177 #define CPUDRV_MONITOR_FINI(cpudsp) { \
179 ASSERT(mutex_owned(&(cpudsp)->lock)); \
180 tmp_tid = (cpudsp)->cpudrv_pm.timeout_id; \
181 (cpudsp)->cpudrv_pm.timeout_id = 0; \
182 mutex_exit(&(cpudsp)->lock); \
185 mutex_enter(&(cpudsp)->cpudrv_pm.timeout_lock); \
186 while ((cpudsp)->cpudrv_pm.timeout_count != 0) \
187 cv_wait(&(cpudsp)->cpudrv_pm.timeout_cv, \
188 &(cpudsp)->cpudrv_pm.timeout_lock); \
189 mutex_exit(&(cpudsp)->cpudrv_pm.timeout_lock); \
191 mutex_enter(&(cpudsp)->lock); \
242 cpudrv_devstate_t *cpudsp;
259 if ((cpudsp = ddi_get_soft_state(cpudrv_state, instance)) ==
267 cpudsp->dip = dip;
272 if (!cpudrv_get_cpu_id(dip, &(cpudsp->cpu_id))) {
280 mutex_init(&cpudsp->lock, NULL, MUTEX_DRIVER, NULL);
281 if (cpudrv_is_enabled(cpudsp)) {
282 if (cpudrv_init(cpudsp) != DDI_SUCCESS) {
284 cpudrv_free(cpudsp);
288 if (cpudrv_comp_create(cpudsp) != DDI_SUCCESS) {
290 cpudrv_free(cpudsp);
297 cpudrv_free(cpudsp);
306 cpudsp->cpudrv_pm.tq = ddi_taskq_create(dip,
310 mutex_init(&cpudsp->cpudrv_pm.timeout_lock, NULL,
312 cv_init(&cpudsp->cpudrv_pm.timeout_cv, NULL,
325 mutex_enter(&cpudsp->lock);
326 cpudsp->cpudrv_pm.cur_spd = NULL;
327 cpudsp->cpudrv_pm.pm_started = B_FALSE;
336 CPUDRV_MONITOR_INIT(cpudsp);
337 mutex_exit(&cpudsp->lock);
341 if (!cpudrv_mach_init(cpudsp)) {
345 cpudrv_free(cpudsp);
350 CPUDRV_INSTALL_MAX_CHANGE_HANDLER(cpudsp);
361 cpudsp = ddi_get_soft_state(cpudrv_state, instance);
362 ASSERT(cpudsp != NULL);
367 if (!cpudrv_is_enabled(cpudsp))
370 mutex_enter(&cpudsp->lock);
376 cpudsp->cpudrv_pm.cur_spd = NULL;
377 CPUDRV_MONITOR_INIT(cpudsp);
378 mutex_exit(&cpudsp->lock);
394 cpudrv_devstate_t *cpudsp;
405 cpudsp = ddi_get_soft_state(cpudrv_state, instance);
406 ASSERT(cpudsp != NULL);
411 if (!cpudrv_is_enabled(cpudsp))
417 CPUDRV_UNINSTALL_MAX_CHANGE_HANDLER(cpudsp);
422 if (!cpudrv_mach_fini(cpudsp))
425 mutex_enter(&cpudsp->lock);
426 CPUDRV_MONITOR_FINI(cpudsp);
427 cv_destroy(&cpudsp->cpudrv_pm.timeout_cv);
428 mutex_destroy(&cpudsp->cpudrv_pm.timeout_lock);
429 ddi_taskq_destroy(cpudsp->cpudrv_pm.tq);
430 cpudrv_free(cpudsp);
431 mutex_exit(&cpudsp->lock);
432 mutex_destroy(&cpudsp->lock);
452 cpudsp = ddi_get_soft_state(cpudrv_state, instance);
453 ASSERT(cpudsp != NULL);
458 if (!cpudrv_is_enabled(cpudsp))
470 mutex_enter(&cpudsp->lock);
471 cpupm = &(cpudsp->cpudrv_pm);
478 CPUDRV_MONITOR_FINI(cpudsp);
487 CPUDRV_MONITOR_INIT(cpudsp);
488 mutex_exit(&cpudsp->lock);
495 mutex_exit(&cpudsp->lock);
499 mutex_enter(&cpudsp->lock);
500 CPUDRV_MONITOR_INIT(cpudsp);
501 mutex_exit(&cpudsp->lock);
511 mutex_exit(&cpudsp->lock);
531 cpudrv_devstate_t *cpudsp;
542 if ((cpudsp = ddi_get_soft_state(cpudrv_state, instance)) == NULL) {
551 is_ready = (cpudrv_get_cpu(cpudsp) == DDI_SUCCESS);
553 mutex_enter(&cpudsp->lock);
554 cpudrvpm = &(cpudsp->cpudrv_pm);
566 mutex_exit(&cpudsp->lock);
578 mutex_exit(&cpudsp->lock);
593 is_ready = CPUDRV_XCALL_IS_READY(cpudsp->cpu_id);
597 } else if (!(is_ready = cpudrv_power_ready(cpudsp->cp))) {
605 mutex_exit(&cpudsp->lock);
613 if ((ret = cpudrv_change_speed(cpudsp, new_spd)) != DDI_SUCCESS) {
616 mutex_exit(&cpudsp->lock);
644 mutex_exit(&cpudsp->lock);
653 cpudrv_init(cpudrv_devstate_t *cpudsp)
655 cpudrv_pm_t *cpupm = &(cpudsp->cpudrv_pm);
664 CPUDRV_GET_SPEEDS(cpudsp, speeds, nspeeds);
758 "num_spd %d\n", ddi_get_instance(cpudsp->dip),
764 "quant_cnt %d\n", ddi_get_instance(cpudsp->dip),
781 cpudrv_free(cpudrv_devstate_t *cpudsp)
783 cpudrv_pm_t *cpupm = &(cpudsp->cpudrv_pm);
799 cpudrv_comp_create(cpudrv_devstate_t *cpudsp)
801 cpudrv_pm_t *cpupm = &(cpudsp->cpudrv_pm);
815 ddi_get_instance(cpudsp->dip));
828 ddi_get_instance(cpudsp->dip));
839 ddi_get_instance(cpudsp->dip), i, pmc[i]));
845 ddi_get_instance(cpudsp->dip), pmc[0]));
847 if (ddi_prop_update_string_array(DDI_DEV_T_NONE, cpudsp->dip,
853 ddi_get_instance(cpudsp->dip));
905 #define CPUDRV_MONITOR_PM_BUSY_AND_RAISE(dip, cpudsp, cpupm, new_spd) { \
912 mutex_exit(&(cpudsp)->lock); \
921 mutex_enter(&(cpudsp)->lock); \
922 if (ret == DDI_SUCCESS && cpudsp->cpudrv_pm.cur_spd == NULL) { \
923 cpudsp->cpudrv_pm.cur_spd = new_spd; \
935 cpudrv_devstate_t *cpudsp = (cpudrv_devstate_t *)arg;
941 mutex_enter(&cpudsp->cpudrv_pm.timeout_lock);
942 if ((ddi_taskq_dispatch(cpudsp->cpudrv_pm.tq, cpudrv_monitor, arg,
944 mutex_exit(&cpudsp->cpudrv_pm.timeout_lock);
947 mutex_enter(&cpudsp->lock);
948 CPUDRV_MONITOR_INIT(cpudsp);
949 mutex_exit(&cpudsp->lock);
952 cpudsp->cpudrv_pm.timeout_count++;
953 mutex_exit(&cpudsp->cpudrv_pm.timeout_lock);
967 cpudrv_devstate_t *cpudsp = (cpudrv_devstate_t *)arg;
987 is_ready = (cpudrv_get_cpu(cpudsp) == DDI_SUCCESS);
989 mutex_enter(&cpudsp->lock);
990 cpupm = &(cpudsp->cpudrv_pm);
992 mutex_exit(&cpudsp->lock);
996 dip = cpudsp->dip;
1007 is_ready = CPUDRV_XCALL_IS_READY(cpudsp->cpu_id);
1012 } else if (!(is_ready = cpudrv_power_ready(cpudsp->cp))) {
1024 CPUDRV_MONITOR_INIT(cpudsp);
1025 mutex_exit(&cpudsp->lock);
1035 CPUDRV_MONITOR_PM_BUSY_AND_RAISE(dip, cpudsp, cpupm,
1041 CPUDRV_MONITOR_INIT(cpudsp);
1042 mutex_exit(&cpudsp->lock);
1048 cpudrv_set_supp_freqs(cpudsp);
1051 get_cpu_mstate(cpudsp->cp, msnsecs);
1062 CPUDRV_MONITOR_INIT(cpudsp);
1063 mutex_exit(&cpudsp->lock);
1087 CPUDRV_MONITOR_INIT(cpudsp);
1128 CPUDRV_MONITOR_PM_BUSY_AND_RAISE(dip, cpudsp, cpupm,
1132 (idle_cnt >= cur_spd->idle_hwm) || !CPU_ACTIVE(cpudsp->cp)) {
1151 mutex_exit(&cpudsp->lock);
1163 mutex_exit(&cpudsp->lock);
1176 cpudrv_get_cpu(cpudrv_devstate_t *cpudsp)
1178 ASSERT(cpudsp != NULL);
1184 if (cpudsp->cp != NULL)
1188 cpudsp->cp = cpu_get(cpudsp->cpu_id);
1191 cpudsp->cp = cpu_get(cpudsp->cpu_id);
1195 if (cpudsp->cp == NULL)