Utils: Remove the v1 firmware generator code
[gstreamer-omap:sysbios-rpmsg.git] / src / utils.mmap / readrprc.c
1 /*
2  *  Copyright (c) 2011, Texas Instruments Incorporated
3  *  All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions
7  *  are met:
8  *
9  *  *  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  *
12  *  *  Redistributions in binary form must reproduce the above copyright
13  *     notice, this list of conditions and the following disclaimer in the
14  *     documentation and/or other materials provided with the distribution.
15  *
16  *  *  Neither the name of Texas Instruments Incorporated nor the names of
17  *     its contributors may be used to endorse or promote products derived
18  *     from this software without specific prior written permission.
19  *
20  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*
33  *  ======== dbg-loader.c ========
34  */
35
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <sys/stat.h>
39 #include <string.h>
40
41 #include "rprcfmt.h"
42
43 static int dump_image(void * data, int size);
44
45 /*
46  *  ======== main ========
47  */
48 int main(int argc, char * argv[])
49 {
50     FILE * fp;
51     struct stat st;
52     char * filename;
53     void * data;
54     int size;
55     int status;
56
57     if (argc != 2) {
58         fprintf(stderr, "Usage: %s filename\n", argv[0]);
59         exit(1);
60     }
61
62     filename = argv[1];
63     if ((fp = fopen(filename, "rb")) == NULL) {
64         fprintf(stderr, "%s: could not open: %s\n", argv[0], filename);
65         exit(2);
66     }
67
68     fstat(fileno(fp), &st);
69     size = st.st_size;
70     data = malloc(size);
71     fread(data, 1, size, fp);
72     fclose(fp);
73
74     status = dump_image(data, size);
75
76     free(data);
77
78     return status;
79 }
80
81 /*
82  *  ======== dump_resources ========
83  */
84 static void dump_resources(struct rproc_fw_section * s)
85 {
86     struct rproc_fw_resource * res = (struct rproc_fw_resource * )s->content;
87     int i;
88
89     printf("resource table: %d\n", sizeof(struct rproc_fw_resource));
90     for (i = 0; i < s->len / sizeof(struct rproc_fw_resource); i++) {
91         printf("resource: %d, da: 0x%llx, pa: 0x%llx,len: %d, name: %s\n",
92                res[i].type, res[i].da, res[i].pa, res[i].len, res[i].name);
93     }
94     printf("\n");
95 }
96
97 /*
98  *  ======== dump_image ========
99  */
100 static int dump_image(void * data, int size)
101 {
102     struct rproc_fw_header *hdr;
103     struct rproc_fw_section *s;
104
105     hdr = (struct rproc_fw_header *)data;
106
107     /* check that magic is what we expect */
108     if (memcmp(hdr->magic, RPROC_FW_MAGIC, sizeof(hdr->magic))) {
109         fprintf(stderr, "invalid magic number: %.4s\n", hdr->magic);
110         return -1;
111     }
112
113     /* baseimage information */
114     printf("magic number %.4s\n", hdr->magic);
115     printf("header version %d\n", hdr->version);
116     printf("header size %d\n", hdr->header_len);
117     printf("header data\n%s\n", hdr->header);
118
119     /* get the first section */
120     s = (struct rproc_fw_section *)(hdr->header + hdr->header_len);
121
122     while ((u8 *)s < (u8 *)(data + size)) {
123         printf("section: %d, address: 0x%llx, size: 0x%x\n", s->type,
124                s->da, s->len);
125         if (s->type == FW_RESOURCE) {
126             dump_resources(s);
127         }
128
129         s = ((void *)s->content) + s->len;
130     }
131
132     return 0;
133 }