void cpu_sleep(void) { cpu_data_t *cdp = current_cpu_datap(); PE_cpu_machine_quiesce(cdp->cpu_id); cpu_thread_halt(); }
/* * Routine: cpu_sleep * Function: */ void cpu_sleep(void) { cpu_data_t *cpu_data_ptr = getCpuDatap(); pmap_switch_user_ttb(kernel_pmap); cpu_data_ptr->cpu_active_thread = current_thread(); cpu_data_ptr->cpu_reset_handler = (vm_offset_t) start_cpu_paddr; cpu_data_ptr->cpu_flags |= SleepState; cpu_data_ptr->cpu_user_debug = NULL; CleanPoC_Dcache(); PE_cpu_machine_quiesce(cpu_data_ptr->cpu_id); }
void ml_ppc_sleep(void) { struct per_proc_info *proc_info; boolean_t dohalt; proc_info = getPerProc(); if (!proc_info->hibernate) { ml_ppc_do_sleep(); return; } { uint64_t start, end, nsec; HIBLOG("mapping_hibernate_flush start\n"); clock_get_uptime(&start); mapping_hibernate_flush(); clock_get_uptime(&end); absolutetime_to_nanoseconds(end - start, &nsec); HIBLOG("mapping_hibernate_flush time: %qd ms\n", nsec / 1000000ULL); } dohalt = hibernate_write_image(); if (dohalt) { // off HIBLOG("power off\n"); if (PE_halt_restart) (*PE_halt_restart)(kPEHaltCPU); } else { // sleep HIBLOG("sleep\n"); // should we come back via regular wake, set the state in memory. PerProcTable[0].ppe_vaddr->hibernate = 0; PE_cpu_machine_quiesce(proc_info->cpu_id); return; } }