fb_clear(120);
}
#endif
- if (mode)
- run_command("usbdown", 0);
- else
+ switch (mode) {
+ case END_BOOT:
run_command("run bootcmd", 0);
+ break;
+ case END_RETRY:
+ run_command("usbdown", 0);
+ break;
+ default:
+ break;
+ }
}
/*
recvlen = usbd->recv_data();
if (recvlen < 0) {
send_ack(usbd, STATUS_ERROR);
- return 0;
+ return -1;
} else if (recvlen < len) {
printf("Error: wrong image size -> %d/%d\n",
(int)recvlen, (int)len);
/* Stop USB */
usbd->usb_stop();
- return 0;
+ return -1;
case COMMAND_RAM_BOOT:
usbd->usb_stop();
if (ret < 0) {
send_ack(usbd, STATUS_ERROR);
- return 0;
+ return -1;
} else if (ret) {
/* Retry this commad */
send_ack(usbd, STATUS_RETRY);
/* init the usb controller */
if (!usbd->usb_init()) {
- usbd->down_cancel(0);
+ usbd->down_cancel(END_BOOT);
return 0;
}
mmc = find_mmc_device(usbd->mmc_dev);
return 0;
}
} else if (ret < 0) {
- usbd->down_cancel(1);
+ usbd->down_cancel(END_RETRY);
return 0;
} else {
- usbd->down_cancel(0);
+ usbd->down_cancel(END_BOOT);
return 0;
}
ret = usbd->recv_data();
if (ret > 0) {
- if (process_data(usbd) == 0) {
- usbd->down_cancel(1);
+ ret = process_data(usbd);
+ if (ret < 0) {
+ usbd->down_cancel(END_RETRY);
+ return 0;
+ } else if (ret == 0) {
+ usbd->down_cancel(END_NORMAL);
return 0;
}
} else if (ret < 0) {
- usbd->down_cancel(1);
+ usbd->down_cancel(END_RETRY);
return 0;
} else {
- usbd->down_cancel(0);
+ usbd->down_cancel(END_BOOT);
return 0;
}
}