📄 tftpput.c
字号:
#include "tftpput.h"#include "bioscall.h"#include "console.h"#include "utils.h"#include "config.h"#include "board.h"#if 0#define TFTP_BUF_BASE (BUF_ADDR | NOCACHE_BIT)#define TFTP_BUF_LIMIT (TFTP_ADDR | NOCACHE_BIT)#endif#if 1#define TFTP_BUF_BASE (BUF_ADDR)#define TFTP_BUF_LIMIT (TFTP_ADDR)#endifextern unsigned long tftp_mode;extern unsigned long tftp_param;extern int tftp_break;extern int tftp_datalen;static unsigned char *buf;static int data_len;static int put_begin = 0;int tftp_put_begin(void){ put_begin = 1; switch (tftp_mode) { case BOOT_LOAD_IMAGE: case BOOT_UPDATE_IMAGE: printf("\r\nStarting the TFTP download...\r\n"); buf = (unsigned char *)TFTP_BUF_BASE; data_len = 0; break; default: put_begin = 0; break; } return 0;}int tftp_put(unsigned char *data, int len){ static int count = 0; if (!put_begin) return -1; if (count == 0) printf("."); count += len; if (count >= 32 * 1024) count = 0; switch (tftp_mode) { case BOOT_LOAD_IMAGE: case BOOT_UPDATE_IMAGE: if ((unsigned long)(buf + data_len + len) > TFTP_BUF_LIMIT) { printf("\r\nTFTP buffer overflow, stop!\r\n"); tftp_break = 1; return -1; } memcpy(buf + data_len, data, len); data_len += len; return 0; default: return 0; } return 0;}int update_image(struct partition_struct *partition, int size){ unsigned long offset, l; if (size > partition->size) { printf("\r\nPartition Size Too Small!\r\n"); return -1; } printf("Update Image to Disk .................... "); offset = partition->offset; bios_flash_erase(offset, size); bios_flash_write(offset, size, &l, (unsigned char *)TFTP_BUF_BASE); printf("Done\r\n"); if (offset == bios_bios_offset()) { printf("\r\nBIOS Updated, rebooting...\r\n"); bios_reboot(); } return 0;}int tftp_put_end(void){ if (!put_begin) return -1; printf("\r\n"); put_begin = 0; tftp_break = 1; switch (tftp_mode) { case BOOT_LOAD_IMAGE: tftp_datalen = data_len; break; case BOOT_UPDATE_IMAGE: update_image((struct partition_struct *)tftp_param, data_len); break; default: break; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -