Skip to content
This repository was archived by the owner on Jan 17, 2019. It is now read-only.

Commit a8d5431

Browse files
committed
logger: make logger usage similiar to old rmbox
Add wrapper for parser function and add default path for error trace and dam trace. Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com>
1 parent 8f9b350 commit a8d5431

1 file changed

Lines changed: 75 additions & 53 deletions

File tree

logger/logger.c

Lines changed: 75 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct dma_log {
4444
uint32_t address;
4545
};
4646

47-
static int fetch_entry(FILE *f_ldc, FILE *f_dma, uint32_t base_address,
47+
static int fetch_entry(FILE *f_ldc, FILE *f_in, uint32_t base_address,
4848
uint32_t data_offset, struct dma_log dma_log);
4949
static void print_table_header(void);
5050
static void print_entry_params(struct dma_log dma_log, struct ldc_entry);
@@ -95,14 +95,15 @@ static void print_entry_params(struct dma_log dma_log,
9595

9696
static void usage(char *name)
9797
{
98-
fprintf(stdout, "Usage %s <file(s)>\n", name);
99-
fprintf(stdout, "%s:\t Parse traces logs\n", name);
100-
fprintf(stdout, "%s:\t -l *.ldc_file\t-d dma_dump_file\n", name);
98+
fprintf(stdout, "Usage %s <option(s)> <file(s)>\n", name);
99+
fprintf(stdout, "%s:\t \t\t\tParse traces logs\n", name);
100+
fprintf(stdout, "%s:\t -l *.ldc_file\t-i in_file\n", name);
101+
fprintf(stdout, "%s:\t -t\t\t\tDisplay dma trace data\n", name);
101102
exit(0);
102103
}
103104

104105

105-
static int fetch_entry(FILE *f_ldc, FILE *f_dma, uint32_t base_address,
106+
static int fetch_entry(FILE *f_ldc, FILE *f_in, uint32_t base_address,
106107
uint32_t data_offset, struct dma_log dma_log)
107108
{
108109

@@ -176,9 +177,9 @@ static int fetch_entry(FILE *f_ldc, FILE *f_dma, uint32_t base_address,
176177
entry.params = (uint32_t *) malloc(sizeof(uint32_t) *
177178
entry.header.params_num);
178179
ret = fread(entry.params, sizeof(uint32_t), entry.header.params_num,
179-
f_dma);
180+
f_in);
180181
if (ret != entry.header.params_num) {
181-
ret = -ferror(f_dma);
182+
ret = -ferror(f_in);
182183
goto out;
183184
}
184185

@@ -198,57 +199,92 @@ static int fetch_entry(FILE *f_ldc, FILE *f_dma, uint32_t base_address,
198199
return ret;
199200
}
200201

201-
int main(int argc, char *argv[])
202+
static int logger_read(const char *in_file, FILE *f_ldc, struct snd_sof_logs_header *snd)
202203
{
203204
struct dma_log dma_log;
204-
struct snd_sof_logs_header snd;
205+
FILE *f_in = NULL;
206+
int ret = 0;
205207

206-
int ret;
207-
int opt;
208+
f_in = fopen(in_file, "r");
209+
210+
if (f_in == NULL) {
211+
fprintf(stderr, "Error while opening %s. \n", in_file);
212+
ret = errno;
213+
goto out;
214+
}
215+
216+
print_table_header();
217+
218+
while (!feof(f_in)) {
219+
220+
/* getting entry parameters from dma dump */
221+
ret = fread(&dma_log, sizeof(dma_log), 1, f_in);
222+
if (!ret) {
223+
ret = -ferror(f_in);
224+
goto out;
225+
}
208226

209-
const char *ldc_dir = NULL;
210-
const char *dma_dump = NULL;
227+
/* checking log address */
228+
if ((dma_log.address < snd->base_address) ||
229+
(dma_log.address > (snd->base_address + snd->data_length)))
230+
continue;
231+
232+
/* fetching entry from elf dump*/
233+
ret = fetch_entry(f_ldc, f_in, snd->base_address,
234+
snd->data_offset, dma_log);
235+
if (ret)
236+
break;
237+
}
238+
239+
out:
240+
if (f_ldc) fclose(f_ldc);
241+
if (f_in) fclose(f_in);
242+
243+
return ret;
244+
245+
}
246+
247+
int main(int argc, char *argv[])
248+
{
249+
struct snd_sof_logs_header snd;
250+
const char *ldc_file = NULL;
251+
const char *in_file = NULL;
252+
int opt, trace = 0, ret = 0;
253+
FILE *f_ldc = NULL;
211254

212-
while ((opt = getopt(argc, argv, "l:d:")) != -1) {
255+
while ((opt = getopt(argc, argv, "l:i:th")) != -1) {
213256
switch (opt) {
214257
case 'l':
215-
ldc_dir = optarg;
258+
ldc_file = optarg;
259+
break;
260+
case 'i':
261+
in_file = optarg;
216262
break;
217-
case 'd':
218-
dma_dump = optarg;
263+
case 't':
264+
trace = 1;
219265
break;
266+
case 'h':
220267
default:
221268
usage(argv[0]);
222269
}
223270
}
224271

225-
if (!ldc_dir) {
272+
if (!ldc_file) {
226273
fprintf(stderr, "error: invalid ldc file.\n");
227-
return -EINVAL;
228-
}
229-
if (!dma_dump) {
230-
fprintf(stderr, "error: invalid dma_dump file.\n");
274+
usage(argv[0]);
231275
return -EINVAL;
232276
}
233277

234-
FILE *f_ldc = fopen(ldc_dir, "r");
235-
FILE *f_dma = fopen(dma_dump, "r");
278+
f_ldc = fopen(ldc_file, "r");
236279

237280
if (f_ldc == NULL) {
238-
fprintf(stderr, "Error while opening %s. \n", ldc_dir);
239-
ret = errno;
240-
goto out;
241-
}
242-
243-
if (f_dma == NULL) {
244-
fprintf(stderr, "Error while opening %s. \n", dma_dump);
281+
fprintf(stderr, "Error while opening %s. \n", ldc_file);
245282
ret = errno;
246283
goto out;
247284
}
248285

249286
/* set file positions to the beginning */
250287
rewind(f_ldc);
251-
rewind(f_dma);
252288

253289
/* veryfing ldc signature */
254290
ret = fread(&snd, sizeof(snd), 1, f_ldc);
@@ -263,31 +299,17 @@ int main(int argc, char *argv[])
263299
goto out;
264300
}
265301

266-
print_table_header();
267-
268-
while (!feof(f_dma)) {
269-
270-
/* getting entry parameters from dma dump */
271-
ret = fread(&dma_log, sizeof(dma_log), 1, f_dma);
272-
if (!ret) {
273-
ret = -ferror(f_dma);
274-
goto out;
275-
}
302+
/* dma trace requested */
303+
if (trace)
304+
return logger_read("/sys/kernel/debug/sof/trace", f_ldc, &snd);
276305

277-
/* checking log address */
278-
if ((dma_log.address < snd.base_address) ||
279-
(dma_log.address > (snd.base_address + snd.data_length)))
280-
continue;
306+
/* default option with no infile is to dump errors/debug data */
307+
if (!in_file)
308+
return logger_read("/sys/kernel/debug/sof/etrace", f_ldc, &snd);
281309

282-
/* fetching entry from elf dump*/
283-
ret = fetch_entry(f_ldc, f_dma, snd.base_address,
284-
snd.data_offset, dma_log);
285-
if (ret) goto out;
286-
}
310+
return logger_read(in_file, f_ldc, &snd);
287311

288-
ret = 0;
289312
out:
290-
if (f_dma) fclose(f_dma);
291313
if (f_ldc) fclose(f_ldc);
292314

293315
return ret;

0 commit comments

Comments
 (0)