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