1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f5fc1412SJiri Olsa #ifndef __PERF_DATA_H 3f5fc1412SJiri Olsa #define __PERF_DATA_H 4f5fc1412SJiri Olsa 5f5fc1412SJiri Olsa #include <stdbool.h> 6f5fc1412SJiri Olsa 7f5fc1412SJiri Olsa enum perf_data_mode { 8f5fc1412SJiri Olsa PERF_DATA_MODE_WRITE, 9f5fc1412SJiri Olsa PERF_DATA_MODE_READ, 10f5fc1412SJiri Olsa }; 11f5fc1412SJiri Olsa 12eae8ad80SJiri Olsa struct perf_data_file { 13f5fc1412SJiri Olsa const char *path; 14f5fc1412SJiri Olsa int fd; 1545112e89SJiri Olsa unsigned long size; 16eae8ad80SJiri Olsa }; 17eae8ad80SJiri Olsa 18eae8ad80SJiri Olsa struct perf_data { 19eae8ad80SJiri Olsa struct perf_data_file file; 20f5fc1412SJiri Olsa bool is_pipe; 21f5fc1412SJiri Olsa bool force; 22f5fc1412SJiri Olsa enum perf_data_mode mode; 23f5fc1412SJiri Olsa }; 24f5fc1412SJiri Olsa 258ceb41d7SJiri Olsa static inline bool perf_data__is_read(struct perf_data *data) 26f5fc1412SJiri Olsa { 278ceb41d7SJiri Olsa return data->mode == PERF_DATA_MODE_READ; 28f5fc1412SJiri Olsa } 29f5fc1412SJiri Olsa 308ceb41d7SJiri Olsa static inline bool perf_data__is_write(struct perf_data *data) 31f5fc1412SJiri Olsa { 328ceb41d7SJiri Olsa return data->mode == PERF_DATA_MODE_WRITE; 33f5fc1412SJiri Olsa } 34f5fc1412SJiri Olsa 358ceb41d7SJiri Olsa static inline int perf_data__is_pipe(struct perf_data *data) 36cc9784bdSJiri Olsa { 378ceb41d7SJiri Olsa return data->is_pipe; 38cc9784bdSJiri Olsa } 39cc9784bdSJiri Olsa 408ceb41d7SJiri Olsa static inline int perf_data__fd(struct perf_data *data) 41cc9784bdSJiri Olsa { 42eae8ad80SJiri Olsa return data->file.fd; 43cc9784bdSJiri Olsa } 44cc9784bdSJiri Olsa 458ceb41d7SJiri Olsa static inline unsigned long perf_data__size(struct perf_data *data) 46cc9784bdSJiri Olsa { 4745112e89SJiri Olsa return data->file.size; 48cc9784bdSJiri Olsa } 49cc9784bdSJiri Olsa 508ceb41d7SJiri Olsa int perf_data__open(struct perf_data *data); 518ceb41d7SJiri Olsa void perf_data__close(struct perf_data *data); 528ceb41d7SJiri Olsa ssize_t perf_data__write(struct perf_data *data, 536f9a317fSJiri Olsa void *buf, size_t size); 54e268687bSJiri Olsa ssize_t perf_data_file__write(struct perf_data_file *file, 55e268687bSJiri Olsa void *buf, size_t size); 56040f9915SWang Nan /* 57040f9915SWang Nan * If at_exit is set, only rename current perf.data to 588ceb41d7SJiri Olsa * perf.data.<postfix>, continue write on original data. 59040f9915SWang Nan * Set at_exit when flushing the last output. 60040f9915SWang Nan * 61040f9915SWang Nan * Return value is fd of new output. 62040f9915SWang Nan */ 638ceb41d7SJiri Olsa int perf_data__switch(struct perf_data *data, 64040f9915SWang Nan const char *postfix, 65040f9915SWang Nan size_t pos, bool at_exit); 66f5fc1412SJiri Olsa #endif /* __PERF_DATA_H */ 67