void sh_mobile_call_standby(unsigned long mode) { void *onchip_mem = (void *)ILRAM_BASE; void (*standby_onchip_mem)(unsigned long, unsigned long) = onchip_mem; /* Let assembly snippet in on-chip memory handle the rest */ standby_onchip_mem(mode, ILRAM_BASE); }
void sh_mobile_call_standby(unsigned long mode) { void *onchip_mem = (void *)RAM_BASE; struct sh_sleep_data *sdp = onchip_mem; void (*standby_onchip_mem)(unsigned long, unsigned long); /* code located directly after data structure */ standby_onchip_mem = (void *)(sdp + 1); atomic_notifier_call_chain(&sh_mobile_pre_sleep_notifier_list, mode, NULL); /* flush the caches if MMU flag is set */ if (mode & SUSP_SH_MMU) flush_cache_all(); /* Let assembly snippet in on-chip memory handle the rest */ standby_onchip_mem(mode, RAM_BASE); atomic_notifier_call_chain(&sh_mobile_post_sleep_notifier_list, mode, NULL); }
void sh_mobile_call_standby(unsigned long mode) { void *onchip_mem = (void *)RAM_BASE; struct sh_sleep_data *sdp = onchip_mem; void (*standby_onchip_mem)(unsigned long, unsigned long); standby_onchip_mem = (void *)(sdp + 1); atomic_notifier_call_chain(&sh_mobile_pre_sleep_notifier_list, mode, NULL); if (mode & SUSP_SH_MMU) flush_cache_all(); standby_onchip_mem(mode, RAM_BASE); atomic_notifier_call_chain(&sh_mobile_post_sleep_notifier_list, mode, NULL); }