9
0
Fork 0

scripts: imx-usb-loader: Move load_file up

To avoid forward declaration in a later patch.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2016-01-25 10:02:19 +01:00
parent eee4a26680
commit 24315db717
1 changed files with 86 additions and 86 deletions

View File

@ -585,6 +585,92 @@ static int write_memory(struct libusb_device_handle *h, struct usb_id *p_id,
return err;
}
static int load_file(struct libusb_device_handle *h, struct usb_id *p_id,
void *buf, unsigned len, unsigned dladdr, unsigned char type)
{
static unsigned char dl_command[] = {
0x04,
0x04,
V(0), /* address */
0x00, /* format */
V(0x00000020), /* data count */
V(0), /* data */
0xaa, /* type */
};
int last_trans, err;
int retry = 0;
unsigned transfer_size = 0;
unsigned char tmp[64];
void *p;
int cnt;
dl_command[2] = (unsigned char)(dladdr >> 24);
dl_command[3] = (unsigned char)(dladdr >> 16);
dl_command[4] = (unsigned char)(dladdr >> 8);
dl_command[5] = (unsigned char)(dladdr);
dl_command[7] = (unsigned char)(len >> 24);
dl_command[8] = (unsigned char)(len >> 16);
dl_command[9] = (unsigned char)(len >> 8);
dl_command[10] = (unsigned char)(len);
dl_command[15] = type;
for (;;) {
err = transfer(h, 1, dl_command, 16, &last_trans, p_id);
if (!err)
break;
printf("dl_command err=%i, last_trans=%i\n", err, last_trans);
if (retry > 5)
return -4;
retry++;
}
retry = 0;
if (p_id->mach_id->mode == MODE_BULK) {
err = transfer(h, 3, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
}
p = buf;
cnt = len;
while (1) {
int now = get_min(cnt, p_id->mach_id->max_transfer);
if (!now)
break;
err = transfer(h, 2, p, now, &now, p_id);
if (err) {
printf("dl_command err=%i, last_trans=%i\n", err, last_trans);
return err;
}
p += now;
cnt -= now;
}
if (p_id->mach_id->mode == MODE_HID) {
err = transfer(h, 3, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("3 in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
err = transfer(h, 4, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("4 in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
} else {
do_status(h, p_id);
}
return transfer_size;
}
static int write_dcd_table_ivt(struct libusb_device_handle *h, struct usb_id *p_id,
struct imx_flash_header_v2 *hdr, unsigned char *file_start, unsigned cnt)
{
@ -958,92 +1044,6 @@ static int process_header(struct libusb_device_handle *h, struct usb_id *p_id,
return -ENODEV;
}
static int load_file(struct libusb_device_handle *h, struct usb_id *p_id,
void *buf, unsigned len, unsigned dladdr, unsigned char type)
{
static unsigned char dl_command[] = {
0x04,
0x04,
V(0), /* address */
0x00, /* format */
V(0x00000020), /* data count */
V(0), /* data */
0xaa, /* type */
};
int last_trans, err;
int retry = 0;
unsigned transfer_size = 0;
unsigned char tmp[64];
void *p;
int cnt;
dl_command[2] = (unsigned char)(dladdr >> 24);
dl_command[3] = (unsigned char)(dladdr >> 16);
dl_command[4] = (unsigned char)(dladdr >> 8);
dl_command[5] = (unsigned char)(dladdr);
dl_command[7] = (unsigned char)(len >> 24);
dl_command[8] = (unsigned char)(len >> 16);
dl_command[9] = (unsigned char)(len >> 8);
dl_command[10] = (unsigned char)(len);
dl_command[15] = type;
for (;;) {
err = transfer(h, 1, dl_command, 16, &last_trans, p_id);
if (!err)
break;
printf("dl_command err=%i, last_trans=%i\n", err, last_trans);
if (retry > 5)
return -4;
retry++;
}
retry = 0;
if (p_id->mach_id->mode == MODE_BULK) {
err = transfer(h, 3, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
}
p = buf;
cnt = len;
while (1) {
int now = get_min(cnt, p_id->mach_id->max_transfer);
if (!now)
break;
err = transfer(h, 2, p, now, &now, p_id);
if (err) {
printf("dl_command err=%i, last_trans=%i\n", err, last_trans);
return err;
}
p += now;
cnt -= now;
}
if (p_id->mach_id->mode == MODE_HID) {
err = transfer(h, 3, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("3 in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
err = transfer(h, 4, tmp, sizeof(tmp), &last_trans, p_id);
if (err)
printf("4 in err=%i, last_trans=%i %02x %02x %02x %02x\n",
err, last_trans, tmp[0], tmp[1], tmp[2], tmp[3]);
} else {
do_status(h, p_id);
}
return transfer_size;
}
static int do_irom_download(struct libusb_device_handle *h, struct usb_id *p_id,
struct usb_work *curr, int verify)
{