static void ged_exit(void) { #ifdef GED_DEBUG ged_log_buf_free(ghLogBuf_GED); ghLogBuf_GED = 0; ged_log_buf_free(ghLogBuf_GLES); ghLogBuf_GLES = 0; #endif ged_profile_dvfs_exit(); ged_hal_exit(); ged_log_system_exit(); ged_debugFS_exit(); remove_proc_entry(GED_DRIVER_DEVICE_NAME, NULL); if (gvIOCTLParamBuf) { vfree(gvIOCTLParamBuf); gvIOCTLParamBuf = NULL; } }
//----------------------------------------------------------------------------- GED_ERROR ged_hal_init(void) { GED_ERROR err = GED_OK; err = ged_debugFS_create_entry_dir( "hal", NULL, &gpsHALDir); if (unlikely(err != GED_OK)) { err = GED_ERROR_FAIL; GED_LOGE("ged: failed to create hal dir!\n"); goto ERROR; } /* Feedback the gpu freq level count */ err = ged_debugFS_create_entry( "total_gpu_freq_level_count", gpsHALDir, &gsTotalGPUFreqLevelCountReadOps, NULL, NULL, &gpsTotalGPUFreqLevelCountEntry); if (unlikely(err != GED_OK)) { GED_LOGE("ged: failed to create total_gpu_freq_level_count entry!\n"); goto ERROR; } /* Control the gpu freq */ err = ged_debugFS_create_entry( "custom_boost_gpu_freq", gpsHALDir, &gsCustomBoostGpuFreqReadOps, ged_custom_boost_gpu_freq_write_entry, NULL, &gpsCustomBoostGPUFreqEntry); if (unlikely(err != GED_OK)) { GED_LOGE("ged: failed to create custom_boost_gpu_freq entry!\n"); goto ERROR; } /* Control the gpu freq */ err = ged_debugFS_create_entry( "custom_upbound_gpu_freq", gpsHALDir, &gsCustomUpboundGpuFreqReadOps, ged_custom_upbound_gpu_freq_write_entry, NULL, &gpsCustomUpboundGPUFreqEntry); if (unlikely(err != GED_OK)) { GED_LOGE("ged: failed to create custom_upbound_gpu_freq entry!\n"); goto ERROR; } /* Enable/Disable the vsync offset */ err = ged_debugFS_create_entry( "event_notify", gpsHALDir, &gsVsync_offset_enableReadOps, ged_vsync_offset_enable_write_entry, NULL, &gpsVsyncOffsetEnableEntry); /* Control the vsync offset level */ err = ged_debugFS_create_entry( "vsync_offset_level", gpsHALDir, &gsVsync_offset_levelReadOps, ged_vsync_offset_level_write_entry, NULL, &gpsVsyncOffsetLevelEntry); /* Control the dvfs policy threshold level */ err = ged_debugFS_create_entry( "custom_dvfs_mode", gpsHALDir, &gsDvfs_tuning_mode_ReadOps, ged_dvfs_tuning_mode_write_entry, NULL, &gpsDvfsTuningModeEntry); /* Get current GPU freq */ err = ged_debugFS_create_entry( "current_freqency", gpsHALDir, &gsDvfs_cur_freq_ReadOps, NULL, NULL, &gpsDvfsCurFreqEntry); /* Get previous GPU freq */ err = ged_debugFS_create_entry( "previous_freqency", gpsHALDir, &gsDvfs_pre_freq_ReadOps, NULL, NULL, &gpsDvfsPreFreqEntry); /* Get GPU Utilization */ err = ged_debugFS_create_entry( "gpu_utilization", gpsHALDir, &gsDvfs_gpu_util_ReadOps, NULL, NULL, &gpsDvfsGpuUtilizationEntry); /* Get FPS upper bound */ err = ged_debugFS_create_entry( "fps_upper_bound", gpsHALDir, &gs_fps_ub_read_ops, ged_fps_ub_write, NULL, &gpsFpsUpperBoundEntry ); if (unlikely(err != GED_OK)) { GED_LOGE("ged: failed to create vsync_offset_level entry!\n"); goto ERROR; } return err; ERROR: ged_hal_exit(); return err; }