#include #include #include #include #include #include #include #include #include #include #define LOG_TAG "ia_get_pwr_stats" #include #define GETOPT_HELP_CHAR (CHAR_MIN - 2) #define DEV_NODE "/dev/iaxxx-module-celldrv" struct ia_pwr_mgr { FILE *dev_node; }; static struct option const long_options[] = { {"cumulative count", no_argument, NULL, 'c'}, {"help", no_argument, NULL, GETOPT_HELP_CHAR}, {NULL, 0, NULL, 0} }; void usage() { fputs("\ USAGE -\n\ -------\n\ 1) get_pwr_stats -c\n\ \n\ get pwr stats with all cumulative counters for each\n\ mpll and apll clock freq values\n\ ", stdout); fputs("\n\ OPTIONS - \n\ ---------\n\ -c get pwr stats for each mpll and apll clk values.\n\ ", stdout); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { struct ia_pwr_mgr * pwr = NULL; struct iaxxx_pwr_stats pwr_stats_count; char use_case; int getchr; int i = 0; int err = 0; if (argc <= 1) { usage(); } while ((getchr = getopt_long (argc, argv, "c", long_options, NULL)) != -1) { switch (getchr) { case 'c': use_case = 'c'; break; case GETOPT_HELP_CHAR: default: usage(); break; } } pwr = (struct ia_pwr_mgr*) malloc(sizeof(struct ia_pwr_mgr)); if (NULL == pwr) { ALOGE("ERROR Failed to allocated memory for ia_pwr_mgr"); fprintf(stderr, "ERROR Failed to allocated memory for ia_pwr_mgr"); return -ENOMEM; } if((pwr->dev_node = fopen(DEV_NODE, "r")) == NULL) { ALOGE("%s: ERROR file %s open for write error: %s\n", __func__, DEV_NODE, strerror(errno)); err = -EBADFD; fprintf(stderr, "%s: ERROR file %s open for write error: %s\n", __func__, DEV_NODE, strerror(errno)); goto out; } if ('c' == use_case) { err = ioctl(fileno(pwr->dev_node), IAXXX_POWER_STATS_COUNT, &pwr_stats_count); if (0 != err) { ALOGE("ERROR: POWER STATS COUNT failed %d(%s)", errno, strerror(errno)); fprintf(stderr, "ERROR: POWER STATS COUNT failed %d(%s)", errno, strerror(errno)); goto out; } for (i = 0; i < NUM_MPLL_CLK_FREQ; i++){ ALOGI("mpll_cumulative_cnts (%d) counter value: %"PRIu64"\n", i, pwr_stats_count.mpll_cumulative_cnts[i]); fprintf(stdout, "mpll_cumulative_cnts (%d) counter value: %"PRIu64"\n", i, pwr_stats_count.mpll_cumulative_cnts[i]); } for (i = 0; i < NUM_APLL_CLK_FREQ; i++){ ALOGI("apll_cumulative_cnts (%d) counter value: %"PRIu64"\n", i, pwr_stats_count.apll_cumulative_cnts[i]); fprintf(stdout, "apll_cumulative_cnts (%d) counter value: %"PRIu64"\n", i, pwr_stats_count.apll_cumulative_cnts[i]); } for (i = 0; i < NUM_MPLL_CLK_FREQ; i++){ ALOGI("mpllCumulativeDur (%d) Duration value: %" PRIu64 "\n", i, pwr_stats_count.mpllCumulativeDur[i]); fprintf(stdout, "mpllCumulativeDur (%d) Duration value %" PRIu64 "\n", i, pwr_stats_count.mpllCumulativeDur[i]); } for (i = 0; i < NUM_MPLL_CLK_FREQ; i++){ ALOGI("mpllTimeStamp (%d) Last time stamp value : %" PRIu64 "\n", i, pwr_stats_count.mpllTimeStamp[i]); fprintf(stdout, "mpllTimeStamp (%d) Last time stamp value : %"PRIu64"\n", i, pwr_stats_count.mpllTimeStamp[i]); } ALOGI("sleepModeTimeStamp, Last time stamp value for Sleep : %" PRIu64 "\n", pwr_stats_count.sleepModeTimeStamp); fprintf(stdout, "sleepModeTimeStamp, Last time stamp value for Sleep : %" PRIu64"\n", pwr_stats_count.sleepModeTimeStamp); ALOGI("sleepModeCumulativeDur, Total cumulative sleep duration : %"PRIu64"\n", pwr_stats_count.sleepModeCumulativeDur); fprintf(stdout, "sleepModeCumulativeDur, Total cumulative sleep duration : %"PRIu64"\n", pwr_stats_count.sleepModeCumulativeDur); ALOGI("POWER STATS COUNT success\n"); fprintf(stdout, "POWER STATS COUNT success\n"); } out: if (pwr) { if (pwr->dev_node) { fclose(pwr->dev_node); } free(pwr); pwr = NULL; } return err; }