| .. | .. |
|---|
| 14 | 14 | #include <stdio.h> |
|---|
| 15 | 15 | |
|---|
| 16 | 16 | struct cs_etm_decoder; |
|---|
| 17 | | - |
|---|
| 18 | | -struct cs_etm_buffer { |
|---|
| 19 | | - const unsigned char *buf; |
|---|
| 20 | | - size_t len; |
|---|
| 21 | | - u64 offset; |
|---|
| 22 | | - u64 ref_timestamp; |
|---|
| 23 | | -}; |
|---|
| 24 | | - |
|---|
| 25 | | -enum cs_etm_sample_type { |
|---|
| 26 | | - CS_ETM_EMPTY = 0, |
|---|
| 27 | | - CS_ETM_RANGE = 1 << 0, |
|---|
| 28 | | - CS_ETM_TRACE_ON = 1 << 1, |
|---|
| 29 | | -}; |
|---|
| 30 | | - |
|---|
| 31 | | -struct cs_etm_packet { |
|---|
| 32 | | - enum cs_etm_sample_type sample_type; |
|---|
| 33 | | - u64 start_addr; |
|---|
| 34 | | - u64 end_addr; |
|---|
| 35 | | - u8 last_instr_taken_branch; |
|---|
| 36 | | - u8 exc; |
|---|
| 37 | | - u8 exc_ret; |
|---|
| 38 | | - int cpu; |
|---|
| 39 | | -}; |
|---|
| 17 | +struct cs_etm_packet; |
|---|
| 18 | +struct cs_etm_packet_queue; |
|---|
| 40 | 19 | |
|---|
| 41 | 20 | struct cs_etm_queue; |
|---|
| 42 | 21 | |
|---|
| 43 | | -typedef u32 (*cs_etm_mem_cb_type)(struct cs_etm_queue *, u64, |
|---|
| 44 | | - size_t, u8 *); |
|---|
| 22 | +typedef u32 (*cs_etm_mem_cb_type)(struct cs_etm_queue *, u8, u64, size_t, u8 *); |
|---|
| 23 | + |
|---|
| 24 | +struct cs_etmv3_trace_params { |
|---|
| 25 | + u32 reg_ctrl; |
|---|
| 26 | + u32 reg_trc_id; |
|---|
| 27 | + u32 reg_ccer; |
|---|
| 28 | + u32 reg_idr; |
|---|
| 29 | +}; |
|---|
| 45 | 30 | |
|---|
| 46 | 31 | struct cs_etmv4_trace_params { |
|---|
| 47 | 32 | u32 reg_idr0; |
|---|
| .. | .. |
|---|
| 55 | 40 | struct cs_etm_trace_params { |
|---|
| 56 | 41 | int protocol; |
|---|
| 57 | 42 | union { |
|---|
| 43 | + struct cs_etmv3_trace_params etmv3; |
|---|
| 58 | 44 | struct cs_etmv4_trace_params etmv4; |
|---|
| 59 | 45 | }; |
|---|
| 60 | 46 | }; |
|---|
| .. | .. |
|---|
| 78 | 64 | CS_ETM_PROTO_ETMV3 = 1, |
|---|
| 79 | 65 | CS_ETM_PROTO_ETMV4i, |
|---|
| 80 | 66 | CS_ETM_PROTO_ETMV4d, |
|---|
| 67 | + CS_ETM_PROTO_PTM, |
|---|
| 81 | 68 | }; |
|---|
| 82 | 69 | |
|---|
| 83 | | -enum { |
|---|
| 70 | +enum cs_etm_decoder_operation { |
|---|
| 84 | 71 | CS_ETM_OPERATION_PRINT = 1, |
|---|
| 85 | 72 | CS_ETM_OPERATION_DECODE, |
|---|
| 73 | + CS_ETM_OPERATION_MAX, |
|---|
| 86 | 74 | }; |
|---|
| 87 | 75 | |
|---|
| 88 | 76 | int cs_etm_decoder__process_data_block(struct cs_etm_decoder *decoder, |
|---|
| .. | .. |
|---|
| 100 | 88 | u64 start, u64 end, |
|---|
| 101 | 89 | cs_etm_mem_cb_type cb_func); |
|---|
| 102 | 90 | |
|---|
| 103 | | -int cs_etm_decoder__get_packet(struct cs_etm_decoder *decoder, |
|---|
| 91 | +int cs_etm_decoder__get_packet(struct cs_etm_packet_queue *packet_queue, |
|---|
| 104 | 92 | struct cs_etm_packet *packet); |
|---|
| 105 | 93 | |
|---|
| 106 | 94 | int cs_etm_decoder__reset(struct cs_etm_decoder *decoder); |
|---|