uboot/common/spl/spl_ymodem.c
<<
>>
Prefs
   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 *
  10 * SPDX-License-Identifier:     GPL-2.0+
  11 */
  12#include <common.h>
  13#include <spl.h>
  14#include <xyzModem.h>
  15#include <asm/u-boot.h>
  16#include <asm/utils.h>
  17
  18#define BUF_SIZE 1024
  19
  20static int getcymodem(void) {
  21        if (tstc())
  22                return (getc());
  23        return -1;
  24}
  25
  26int 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                return ret;
  53        }
  54
  55        xyzModem_stream_close(&err);
  56        xyzModem_stream_terminate(false, &getcymodem);
  57
  58        printf("Loaded %d bytes\n", size);
  59        return 0;
  60}
  61