Lines Matching defs:decoder

23 #include "arm-spe-decoder.h"
83 struct arm_spe_decoder *decoder;
88 decoder = zalloc(sizeof(struct arm_spe_decoder));
89 if (!decoder)
92 decoder->get_trace = params->get_trace;
93 decoder->data = params->data;
95 return decoder;
98 void arm_spe_decoder_free(struct arm_spe_decoder *decoder)
100 free(decoder);
103 static int arm_spe_get_data(struct arm_spe_decoder *decoder)
109 ret = decoder->get_trace(&buffer, decoder->data);
113 decoder->buf = buffer.buf;
114 decoder->len = buffer.len;
116 if (!decoder->len)
119 return decoder->len;
122 static int arm_spe_get_next_packet(struct arm_spe_decoder *decoder)
127 if (!decoder->len) {
128 ret = arm_spe_get_data(decoder);
135 ret = arm_spe_get_packet(decoder->buf, decoder->len,
136 &decoder->packet);
139 decoder->buf += 1;
140 decoder->len -= 1;
144 decoder->buf += ret;
145 decoder->len -= ret;
146 } while (decoder->packet.type == ARM_SPE_PAD);
151 static int arm_spe_read_record(struct arm_spe_decoder *decoder)
157 memset(&decoder->record, 0x0, sizeof(decoder->record));
158 decoder->record.context_id = (u64)-1;
161 err = arm_spe_get_next_packet(decoder);
165 idx = decoder->packet.index;
166 payload = decoder->packet.payload;
168 switch (decoder->packet.type) {
170 decoder->record.timestamp = payload;
177 decoder->record.from_ip = ip;
179 decoder->record.to_ip = ip;
181 decoder->record.virt_addr = ip;
183 decoder->record.phys_addr = ip;
187 decoder->record.latency = payload;
190 decoder->record.context_id = payload;
195 decoder->record.op |= ARM_SPE_OP_LDST;
197 decoder->record.op |= ARM_SPE_OP_ST;
199 decoder->record.op |= ARM_SPE_OP_LD;
201 decoder->record.op |= ARM_SPE_OP_SVE_LDST;
204 decoder->record.op |= ARM_SPE_OP_OTHER;
206 decoder->record.op |= ARM_SPE_OP_SVE_OTHER;
209 decoder->record.op |= ARM_SPE_OP_BRANCH_ERET;
218 decoder->record.type |= ARM_SPE_L1D_MISS;
221 decoder->record.type |= ARM_SPE_L1D_ACCESS;
224 decoder->record.type |= ARM_SPE_TLB_MISS;
227 decoder->record.type |= ARM_SPE_TLB_ACCESS;
230 decoder->record.type |= ARM_SPE_LLC_MISS;
233 decoder->record.type |= ARM_SPE_LLC_ACCESS;
236 decoder->record.type |= ARM_SPE_REMOTE_ACCESS;
239 decoder->record.type |= ARM_SPE_BRANCH_MISS;
242 decoder->record.type |= ARM_SPE_SVE_PARTIAL_PRED;
245 decoder->record.type |= ARM_SPE_SVE_EMPTY_PRED;
249 decoder->record.source = payload;
264 int arm_spe_decode(struct arm_spe_decoder *decoder)
266 return arm_spe_read_record(decoder);