1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef _PERF_TARGET_H 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define _PERF_TARGET_H 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdbool.h> 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <sys/types.h> 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct perf_target { 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *pid; 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *tid; 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *cpu_list; 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng const char *uid_str; 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng uid_t uid; 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bool system_wide; 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bool uses_mmap; 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_target_errno { 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__SUCCESS = 0, 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Choose an arbitrary negative big number not to clash with standard 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * errno since SUS requires the errno has distinct positive values. 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * See 'Issue 6' in the link below. 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __PERF_ERRNO_TARGET__START = -10000, 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* for perf_target__validate() */ 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__PID_OVERRIDE_CPU = __PERF_ERRNO_TARGET__START, 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__PID_OVERRIDE_UID, 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__UID_OVERRIDE_CPU, 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__PID_OVERRIDE_SYSTEM, 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__UID_OVERRIDE_SYSTEM, 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng /* for perf_target__parse_uid() */ 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__INVALID_UID, 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng PERF_ERRNO_TARGET__USER_NOT_FOUND, 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng __PERF_ERRNO_TARGET__END, 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}; 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_target_errno perf_target__validate(struct perf_target *target); 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengenum perf_target_errno perf_target__parse_uid(struct perf_target *target); 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint perf_target__strerror(struct perf_target *target, int errnum, char *buf, 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng size_t buflen); 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline bool perf_target__has_task(struct perf_target *target) 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return target->tid || target->pid || target->uid_str; 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline bool perf_target__has_cpu(struct perf_target *target) 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return target->system_wide || target->cpu_list; 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline bool perf_target__none(struct perf_target *target) 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{ 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng return !perf_target__has_task(target) && !perf_target__has_cpu(target); 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng} 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* _PERF_TARGET_H */ 66