2 * Copyright (c) 2013 Qualcomm Atheros, Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted (subject to the limitations in the
7 * disclaimer below) provided that the following conditions are met:
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
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
17 * * Neither the name of Qualcomm Atheros nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
22 * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
23 * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
32 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
33 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 //extern unsigned short m_crc16ccitt;
41 uint8_t patchBuf[SIZE_HASH_BUFFER];
44 int db_ascii_to_hex(char* num_str, unsigned long* hex_num)
51 if ((num_str[i] >= '0') && (num_str[i] <= '9'))
54 *hex_num += (num_str[i] - '0');
56 else if ((num_str[i] >= 'A') && (num_str[i] <= 'F'))
59 *hex_num += (num_str[i] - 'A' + 10);
61 else if ((num_str[i] >= 'a') && (num_str[i] <= 'f'))
64 *hex_num += (num_str[i] - 'a' + 10);
77 void dump_hex(uint8_t *buf, uint16_t size)
86 else if( (i>0) && (i%8==0) )
89 printf("%02x ", buf[i]);
95 BOOLEAN gen_patch_item(struct rom_patch_st *patch, uint8_t *file_name)
97 BOOLEAN retVal = FALSE;
102 if((in = fopen(file_name,"rb")) != NULL)
111 uRead = fread(ptr, 1, SIZE_HASH_BUFFER, in);
113 // debug to dump the data we read
114 //dump_hex(ptr, uRead);
118 if(uRead != SIZE_HASH_BUFFER)
122 memcpy(patch->fun, patchBuf, patch->len);
123 patch->crc16 = patch->len; // bugs? workaround?
133 BOOLEAN _patch_init(struct rom_patch_st *patch)
135 // init the pact_pack
136 //memset((uint8_t *)patch_patck, 0x0, sizeof(struct rom_patch_pack_st));
146 void _patch_dump(struct rom_patch_st *patch)
148 printf(" -----------------------------\n\r");
149 printf(" patch code crc: 0x%04x\n\r", patch->crc16);
150 printf(" patch code size: %d\n\r", patch->len);
151 printf(" patch ld_addr: 0x%08x\n\r", patch->ld_addr);
152 printf(" patch fun_addr: 0x%08x\n\r", patch->fun_addr);
153 printf(" -----------------------------\n\r");
157 BOOLEAN _patch_oepn(uint8_t *buf, uint8_t *mFile)
160 BOOLEAN retVal = FALSE;
163 if((in = fopen(mFile,"rb")) != NULL)
165 printf("%s is opened successful!\n\r", mFile);
173 uRead = fread(buf+offset, 1, SIZE_HASH_BUFFER, in);
175 // debug to dump the data we read
176 //dump_hex(buf+offset, uRead);
179 if(uRead != SIZE_HASH_BUFFER) break;
189 uint32_t _patch_append(uint8_t *buf, struct rom_patch_st *patch)
192 memcpy(buf, (uint8_t *)patch, (sizeof(struct rom_patch_st)-4));
193 memcpy(buf+(sizeof(struct rom_patch_st)-4), patch->fun, patch->len);