]> git.ipfire.org Git - people/ms/u-boot.git/blame - common/spl/spl_ymodem.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[people/ms/u-boot.git] / common / spl / spl_ymodem.c
CommitLineData
24de357a
MP
1/*
2 * (C) Copyright 2000-2004
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
5 * (C) Copyright 2011
6 * Texas Instruments, <www.ti.com>
7 *
8 * Matt Porter <mporter@ti.com>
9 *
1a459660 10 * SPDX-License-Identifier: GPL-2.0+
24de357a
MP
11 */
12#include <common.h>
47f7bcae 13#include <spl.h>
24de357a
MP
14#include <xyzModem.h>
15#include <asm/u-boot.h>
16#include <asm/utils.h>
24de357a
MP
17
18#define BUF_SIZE 1024
19
20static int getcymodem(void) {
21 if (tstc())
22 return (getc());
23 return -1;
24}
25
26void spl_ymodem_load_image(void)
27{
28 int size = 0;
29 int err;
30 int res;
31 int ret;
32 connection_info_t info;
33 char buf[BUF_SIZE];
34 ulong store_addr = ~0;
35 ulong addr = 0;
36
37 info.mode = xyzModem_ymodem;
38 ret = xyzModem_stream_open(&info, &err);
39
40 if (!ret) {
41 while ((res =
42 xyzModem_stream_read(buf, BUF_SIZE, &err)) > 0) {
43 if (addr == 0)
44 spl_parse_image_header((struct image_header *)buf);
45 store_addr = addr + spl_image.load_addr;
46 size += res;
47 addr += res;
48 memcpy((char *)(store_addr), buf, res);
49 }
50 } else {
51 printf("spl: ymodem err - %s\n", xyzModem_error(err));
52 hang();
53 }
54
55 xyzModem_stream_close(&err);
56 xyzModem_stream_terminate(false, &getcymodem);
57
58 printf("Loaded %d bytes\n", size);
59}