Added uboot tools
[keystone-rtos/mcsdk-tools.git] / boot_loader / uboot / utils / ccsAddGphdr.c
1 /*
2  *
3  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 
4  * 
5  * 
6  *  Redistribution and use in source and binary forms, with or without 
7  *  modification, are permitted provided that the following conditions 
8  *  are met:
9  *
10  *    Redistributions of source code must retain the above copyright 
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  *    Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the 
15  *    documentation and/or other materials provided with the   
16  *    distribution.
17  *
18  *    Neither the name of Texas Instruments Incorporated nor the names of
19  *    its contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34 */
35 /*****************************************************************************
36  * FILE PURPOSE: Add a GP header to a CCS data file
37  ******************************************************************************
38  * FILE NAME: ccsAddGphdr.c
39  *
40  * Description: Adds the two word GP header to a ccs data file
41  *
42  *  usage: ccsAddGphdr baseAddress [-infile infile] [-outfile outfile]
43  *
44  ******************************************************************************/
45 #include <stdio.h>
46 #include <malloc.h>
47 #include "ccsutil.h"
49 char *infile  = NULL;
50 char *outfile = NULL;
51 unsigned int baseAddress = 0xffffffff;
54 unsigned int readInt (char *c)
55 {
56     unsigned int v;
58     if ((c[0] == '0') && (c[1] == 'x'))  
59         sscanf (&c[2], "%x", &v);
61     else
62         sscanf (c, "%d", &v);
64     return (v);
66 }
68 int parseit (int ac, char *av[])
69 {
70     int i;
72     if (ac == 1)  {
73         fprintf (stderr, "usage: %s baseAddress [-infile infile] [-outfile outfile]\n", av[0]);
74         return (-1);
75     }
77     for (i = 1; i < ac;  )  {
79         if (!strcmp(av[i], "-infile"))  {
80             infile = av[i+1];
81             i = i + 2;
83         }  else if (!strcmp(av[i], "-outfile"))  {
84             outfile = av[i+1];
85             i = i + 2;
87         }  else  {
89             baseAddress = readInt (av[i]);
90             i = i + 1;
91         }
93     }
95     if (baseAddress == 0xffffffff)  {
96         fprintf (stderr, "%s error: baseAddress not specified\n", av[0]);
97         return (-1);
98     }
100     return (0);
105 int main (int argc, char *argv[])
107     FILE *str;
108     unsigned int *data1, *data2;
109     int nwords;
110     int i;
112     if (parseit (argc, argv) != 0)
113         return (-1);
115     if (infile != NULL)  {
116         str = fopen (infile, "r");
117         if (str == NULL)  {
118             fprintf (stderr, "%s error: failed to open file %s\n", argv[0], infile);
119             return (-1);
120         }
121     }  else  {
122         str = stdin;
123     }
125     data1 = readCcsFile (str, &nwords);
126     
127     if (infile != NULL)
128         fclose (str);
130     if (data1 == NULL)  {
131         fprintf (stderr, "%s error: read ccs file returned error\n", argv[0]);
132         return (-1);
133     }
135     data2 = malloc ((nwords + 2) * sizeof(unsigned int));
136     if (data2 == NULL)  {
137         fprintf (stderr, "%s error: malloc failed on %d unsigned ints\n", argv[0], nwords + 2);
138         free (data1);
139         return (-1);
140     }
142     data2[0] = nwords * 4;
143     data2[1] = baseAddress;
145     for (i = 0; i < nwords; i++)
146         data2[i+2] = data1[i];
148     free (data1);
150     if (outfile != NULL)  {
151         str = fopen (outfile, "w");
152         if (str == NULL)  {
153             fprintf (stderr, "%s error: failed to open file %s\n", argv[0], outfile);
154             return (-1);
155         }
156     }  else  {
157         str = stdout;
158     }
160     writeCcsFile (str, data2, nwords+2);
162     free (data2);
164     if (outfile != NULL)
165         fclose (str);
167     return (0);
171