mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
* Patch by Detlev Zundel, 08 Sep 2004:
Update etags build target * Improve NetConsole support: add support for broadcast destination address and buffered input. * Cleanup compiler warnings for GCC 3.3.x and later * Fix problem in cmd_jffs2.c introduced by CFG_JFFS_SINGLE_PART patch
This commit is contained in:
parent
7ca202f566
commit
eedcd078fe
25 changed files with 287 additions and 138 deletions
10
CHANGELOG
10
CHANGELOG
|
@ -2,6 +2,16 @@
|
|||
Changes since U-Boot 1.1.1:
|
||||
======================================================================
|
||||
|
||||
* Patch by Detlev Zundel, 08 Sep 2004:
|
||||
Update etags build target
|
||||
|
||||
* Improve NetConsole support: add support for broadcast destination
|
||||
address and buffered input.
|
||||
|
||||
* Cleanup compiler warnings for GCC 3.3.x and later
|
||||
|
||||
* Fix problem in cmd_jffs2.c introduced by CFG_JFFS_SINGLE_PART patch
|
||||
|
||||
* Add support for IDS "NC650" board
|
||||
|
||||
* Add automatic update support for LWMON board
|
||||
|
|
5
Makefile
5
Makefile
|
@ -176,6 +176,9 @@ tags:
|
|||
|
||||
etags:
|
||||
etags -a `find $(SUBDIRS) include \
|
||||
lib_generic board/$(BOARDDIR) cpu/$(CPU) lib_$(ARCH) \
|
||||
fs/cramfs fs/fat fs/fdos fs/jffs2 \
|
||||
net disk rtc dtt drivers drivers/sk98lin common \
|
||||
\( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
|
||||
|
||||
System.map: u-boot
|
||||
|
@ -1470,7 +1473,7 @@ clean:
|
|||
examples/eepro100_eeprom examples/sched \
|
||||
examples/mem_to_mem_idma2intr examples/82559_eeprom
|
||||
rm -f tools/img2srec tools/mkimage tools/envcrc tools/gen_eth_addr
|
||||
rm -f tools/mpc86x_clk
|
||||
rm -f tools/mpc86x_clk tools/ncb
|
||||
rm -f tools/easylogo/easylogo tools/bmp_logo
|
||||
rm -f tools/gdb/astest tools/gdb/gdbcont tools/gdb/gdbsend
|
||||
rm -f tools/env/fw_printenv tools/env/fw_setenv
|
||||
|
|
|
@ -549,18 +549,18 @@ static void move64 (unsigned long long *src, unsigned long long *dest)
|
|||
#if defined (CFG_DRAM_TEST_DATA)
|
||||
|
||||
unsigned long long pattern[] = {
|
||||
0xaaaaaaaaaaaaaaaa,
|
||||
0xcccccccccccccccc,
|
||||
0xf0f0f0f0f0f0f0f0,
|
||||
0xff00ff00ff00ff00,
|
||||
0xffff0000ffff0000,
|
||||
0xffffffff00000000,
|
||||
0x00000000ffffffff,
|
||||
0x0000ffff0000ffff,
|
||||
0x00ff00ff00ff00ff,
|
||||
0x0f0f0f0f0f0f0f0f,
|
||||
0x3333333333333333,
|
||||
0x5555555555555555
|
||||
0xaaaaaaaaaaaaaaaaULL,
|
||||
0xccccccccccccccccULL,
|
||||
0xf0f0f0f0f0f0f0f0ULL,
|
||||
0xff00ff00ff00ff00ULL,
|
||||
0xffff0000ffff0000ULL,
|
||||
0xffffffff00000000ULL,
|
||||
0x00000000ffffffffULL,
|
||||
0x0000ffff0000ffffULL,
|
||||
0x00ff00ff00ff00ffULL,
|
||||
0x0f0f0f0f0f0f0f0fULL,
|
||||
0x3333333333333333ULL,
|
||||
0x5555555555555555ULL,
|
||||
};
|
||||
|
||||
/*********************************************************************/
|
||||
|
|
|
@ -549,18 +549,18 @@ static void move64 (unsigned long long *src, unsigned long long *dest)
|
|||
#if defined (CFG_DRAM_TEST_DATA)
|
||||
|
||||
unsigned long long pattern[] = {
|
||||
0xaaaaaaaaaaaaaaaa,
|
||||
0xcccccccccccccccc,
|
||||
0xf0f0f0f0f0f0f0f0,
|
||||
0xff00ff00ff00ff00,
|
||||
0xffff0000ffff0000,
|
||||
0xffffffff00000000,
|
||||
0x00000000ffffffff,
|
||||
0x0000ffff0000ffff,
|
||||
0x00ff00ff00ff00ff,
|
||||
0x0f0f0f0f0f0f0f0f,
|
||||
0x3333333333333333,
|
||||
0x5555555555555555
|
||||
0xaaaaaaaaaaaaaaaaULL,
|
||||
0xccccccccccccccccULL,
|
||||
0xf0f0f0f0f0f0f0f0ULL,
|
||||
0xff00ff00ff00ff00ULL,
|
||||
0xffff0000ffff0000ULL,
|
||||
0xffffffff00000000ULL,
|
||||
0x00000000ffffffffULL,
|
||||
0x0000ffff0000ffffULL,
|
||||
0x00ff00ff00ff00ffULL,
|
||||
0x0f0f0f0f0f0f0f0fULL,
|
||||
0x3333333333333333ULL,
|
||||
0x5555555555555555ULL,
|
||||
};
|
||||
|
||||
/*********************************************************************/
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* Prototypes */
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
int board_early_init_f (void)
|
||||
{
|
||||
|
@ -104,7 +104,7 @@ int misc_init_r (void)
|
|||
unsigned long cntrl0Reg;
|
||||
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ const unsigned char fpgadata[] =
|
|||
|
||||
|
||||
/* Prototypes */
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
|
||||
int board_early_init_f (void)
|
||||
|
@ -102,7 +102,7 @@ int misc_init_r (void)
|
|||
int i;
|
||||
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ const unsigned char fpgadata[] =
|
|||
|
||||
/* Prototypes */
|
||||
int cpci405_version(void);
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
|
||||
int board_early_init_f (void)
|
||||
|
@ -259,7 +259,7 @@ int misc_init_r (void)
|
|||
mtdcr(cntrl0, cntrl0Reg | 0x00300000);
|
||||
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ const unsigned char fpgadata[] =
|
|||
|
||||
|
||||
/* Prototypes */
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
|
||||
int board_early_init_f (void)
|
||||
|
@ -116,7 +116,7 @@ int misc_init_r (void)
|
|||
*/
|
||||
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ const unsigned char fpgadata[] =
|
|||
|
||||
|
||||
/* Prototypes */
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
|
||||
int board_early_init_f (void)
|
||||
|
@ -101,7 +101,7 @@ int misc_init_r (void)
|
|||
|
||||
#if 1 /* test-only */
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ const unsigned char fpgadata[] =
|
|||
|
||||
|
||||
/* Prototypes */
|
||||
int gunzip(void *, int, unsigned char *, int *);
|
||||
int gunzip(void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
|
||||
int board_early_init_f (void)
|
||||
|
@ -102,7 +102,7 @@ int misc_init_r (void)
|
|||
int i;
|
||||
|
||||
dst = malloc(CFG_FPGA_MAX_SIZE);
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) {
|
||||
if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, &len) != 0) {
|
||||
printf ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
do_reset (NULL, 0, 0, NULL);
|
||||
}
|
||||
|
|
|
@ -259,18 +259,18 @@ static void move64 (unsigned long long *src, unsigned long long *dest)
|
|||
#if defined (CFG_DRAM_TEST_DATA)
|
||||
|
||||
unsigned long long pattern[] = {
|
||||
0xaaaaaaaaaaaaaaaa,
|
||||
0xcccccccccccccccc,
|
||||
0xf0f0f0f0f0f0f0f0,
|
||||
0xff00ff00ff00ff00,
|
||||
0xffff0000ffff0000,
|
||||
0xffffffff00000000,
|
||||
0x00000000ffffffff,
|
||||
0x0000ffff0000ffff,
|
||||
0x00ff00ff00ff00ff,
|
||||
0x0f0f0f0f0f0f0f0f,
|
||||
0x3333333333333333,
|
||||
0x5555555555555555
|
||||
0xaaaaaaaaaaaaaaaaULL,
|
||||
0xccccccccccccccccULL,
|
||||
0xf0f0f0f0f0f0f0f0ULL,
|
||||
0xff00ff00ff00ff00ULL,
|
||||
0xffff0000ffff0000ULL,
|
||||
0xffffffff00000000ULL,
|
||||
0x00000000ffffffffULL,
|
||||
0x0000ffff0000ffffULL,
|
||||
0x00ff00ff00ff00ffULL,
|
||||
0x0f0f0f0f0f0f0f0fULL,
|
||||
0x3333333333333333ULL,
|
||||
0x5555555555555555ULL,
|
||||
};
|
||||
|
||||
/*********************************************************************/
|
||||
|
|
|
@ -643,7 +643,7 @@ static uchar kbd_command_prefix[] = "key_cmd";
|
|||
static int compare_magic (uchar *kbd_data, uchar *str)
|
||||
{
|
||||
uchar compare[KEYBD_DATALEN-1];
|
||||
uchar *nxt;
|
||||
char *nxt;
|
||||
int i;
|
||||
|
||||
/* Don't include modifier byte */
|
||||
|
@ -655,7 +655,7 @@ static int compare_magic (uchar *kbd_data, uchar *str)
|
|||
|
||||
c = (uchar) simple_strtoul (str, (char **) (&nxt), 16);
|
||||
|
||||
if (str == nxt) { /* invalid character */
|
||||
if (str == (uchar *)nxt) { /* invalid character */
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
#define FIRM_START 0xFFF00000
|
||||
#endif
|
||||
|
||||
extern int gunzip(void *, int, uchar *, int *);
|
||||
extern int gunzip(void *, int, uchar *, unsigned long *);
|
||||
extern int mem_test(ulong start, ulong ramsize, int quiet);
|
||||
|
||||
#define I2C_BACKUP_ADDR 0x7C00 /* 0x200 bytes for backup */
|
||||
|
@ -224,7 +224,7 @@ mpl_prg_image(uchar *ld_addr)
|
|||
switch (hdr->ih_comp) {
|
||||
case IH_COMP_GZIP:
|
||||
puts("Uncompressing (GZIP) ... ");
|
||||
rc = gunzip ((void *)(buf), IMAGE_SIZE, data, (int *)&len);
|
||||
rc = gunzip ((void *)(buf), IMAGE_SIZE, data, &len);
|
||||
if (rc != 0) {
|
||||
puts("GUNZIP ERROR\n");
|
||||
free(buf);
|
||||
|
|
|
@ -206,19 +206,20 @@ static void move64(unsigned long long *src, unsigned long long *dest)
|
|||
*
|
||||
*/
|
||||
const static unsigned long long pattern[] = {
|
||||
0xaaaaaaaaaaaaaaaa,
|
||||
0xcccccccccccccccc,
|
||||
0xf0f0f0f0f0f0f0f0,
|
||||
0xff00ff00ff00ff00,
|
||||
0xffff0000ffff0000,
|
||||
0xffffffff00000000,
|
||||
0x00000000ffffffff,
|
||||
0x0000ffff0000ffff,
|
||||
0x00ff00ff00ff00ff,
|
||||
0x0f0f0f0f0f0f0f0f,
|
||||
0x3333333333333333,
|
||||
0x5555555555555555};
|
||||
const unsigned long long otherpattern = 0x0123456789abcdef;
|
||||
0xaaaaaaaaaaaaaaaaULL,
|
||||
0xccccccccccccccccULL,
|
||||
0xf0f0f0f0f0f0f0f0ULL,
|
||||
0xff00ff00ff00ff00ULL,
|
||||
0xffff0000ffff0000ULL,
|
||||
0xffffffff00000000ULL,
|
||||
0x00000000ffffffffULL,
|
||||
0x0000ffff0000ffffULL,
|
||||
0x00ff00ff00ff00ffULL,
|
||||
0x0f0f0f0f0f0f0f0fULL,
|
||||
0x3333333333333333ULL,
|
||||
0x5555555555555555ULL,
|
||||
};
|
||||
const unsigned long long otherpattern = 0x0123456789abcdefULL;
|
||||
|
||||
|
||||
static int memory_post_dataline(unsigned long long * pmem)
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
# define CHUNKSZ (64 * 1024)
|
||||
#endif
|
||||
|
||||
int gunzip (void *, int, unsigned char *, int *);
|
||||
int gunzip (void *, int, unsigned char *, unsigned long *);
|
||||
|
||||
static void *zalloc(void *, unsigned, unsigned);
|
||||
static void zfree(void *, void *, unsigned);
|
||||
|
@ -326,7 +326,7 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
case IH_COMP_GZIP:
|
||||
printf (" Uncompressing %s ... ", name);
|
||||
if (gunzip ((void *)ntohl(hdr->ih_load), unc_len,
|
||||
(uchar *)data, (int *)&len) != 0) {
|
||||
(uchar *)data, &len) != 0) {
|
||||
puts ("GUNZIP ERROR - must RESET board to recover\n");
|
||||
SHOW_BOOT_PROGRESS (-6);
|
||||
do_reset (cmdtp, flag, argc, argv);
|
||||
|
@ -1239,7 +1239,7 @@ static void zfree(void *x, void *addr, unsigned nb)
|
|||
|
||||
#define DEFLATED 8
|
||||
|
||||
int gunzip(void *dst, int dstlen, unsigned char *src, int *lenp)
|
||||
int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp)
|
||||
{
|
||||
z_stream s;
|
||||
int r, i, flags;
|
||||
|
|
|
@ -257,6 +257,12 @@ do_jffs2_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
return 0;
|
||||
|
||||
}
|
||||
|
||||
U_BOOT_CMD(
|
||||
chpart, 2, 0, do_jffs2_chpart,
|
||||
"chpart\t- change active partition\n",
|
||||
" - change active partition\n"
|
||||
);
|
||||
#endif /* CFG_JFFS_SINGLE_PART */
|
||||
|
||||
/***************************************************/
|
||||
|
@ -282,10 +288,4 @@ U_BOOT_CMD(
|
|||
" - list files in a directory.\n"
|
||||
);
|
||||
|
||||
U_BOOT_CMD(
|
||||
chpart, 2, 0, do_jffs2_chpart,
|
||||
"chpart\t- change active partition\n",
|
||||
" - change active partition\n"
|
||||
);
|
||||
|
||||
#endif /* CFG_CMD_JFFS2 */
|
||||
|
|
|
@ -6,6 +6,12 @@ serial and network input/output devices by adjusting the 'stdin' and
|
|||
set either of these variables to "nc". Input and output can be
|
||||
switched independently.
|
||||
|
||||
We use an environment variable 'ncip' to set the IP address and the
|
||||
port of the destination. The format is <ip_addr>:<port>. If <port> is
|
||||
omitted, the value of 6666 is used. If the env var doesn't exist, the
|
||||
broadcast address and port 6666 are used. If it is set to an IP
|
||||
address of 0 (or 0.0.0.0) then no messages are sent to the network.
|
||||
|
||||
On the host side, please use this script to access the console:
|
||||
|
||||
+++++++++++++++++++++++++++++++++++++++++++
|
||||
|
@ -19,6 +25,21 @@ nc -u ${TARGET_IP} 6666
|
|||
stty icanon echo intr ^C
|
||||
+++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
It turned out that 'netcat' couldn't be used to listen to broadcast
|
||||
packets. We developed our own tool 'ncb' (see tools directory) that
|
||||
listens to broadcast packets on a given port and dumps them to the
|
||||
standard output. use it as follows:
|
||||
|
||||
+++++++++++++++++++++++++++++++++++++++++++
|
||||
#! /bin/bash
|
||||
|
||||
stty icanon echo intr ^T
|
||||
./ncb &
|
||||
nc -u mpc5200 6666
|
||||
stty icanon echo intr ^C
|
||||
kill 0
|
||||
+++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
For Linux, the network-based console needs special configuration.
|
||||
Minimally, the host IP address needs to be specified. This can be
|
||||
done either via the kernel command line, or by passing parameters
|
||||
|
|
|
@ -429,7 +429,8 @@ static int i365_set_io_map (socket_info_t * s, struct pccard_io_map *io)
|
|||
u_char map, ioctl;
|
||||
|
||||
map = io->map;
|
||||
if ((map > 1) || (io->start > 0xffff) || (io->stop > 0xffff) ||
|
||||
/* comment out: comparison is always false due to limited range of data type */
|
||||
if ((map > 1) || /* (io->start > 0xffff) || (io->stop > 0xffff) || */
|
||||
(io->stop < io->start))
|
||||
return -1;
|
||||
/* Turn off the window before changing anything */
|
||||
|
|
|
@ -33,10 +33,17 @@
|
|||
#error define CONFIG_NET_MULTI to use netconsole
|
||||
#endif
|
||||
|
||||
static uchar nc_buf = 0; /* input buffer */
|
||||
static char input_buffer[512];
|
||||
static int input_size = 0; /* char count in input buffer */
|
||||
static int input_offset = 0; /* offset to valid chars in input buffer */
|
||||
static int input_recursion = 0;
|
||||
static int output_recursion = 0;
|
||||
static int net_timeout;
|
||||
static uchar nc_ether[6]; /* server enet address */
|
||||
static IPaddr_t nc_ip; /* server ip */
|
||||
static short nc_port; /* source/target port */
|
||||
static const char *output_packet; /* used by first send udp */
|
||||
static int output_packet_len = 0;
|
||||
|
||||
static void nc_wait_arp_handler (uchar * pkt, unsigned dest, unsigned src,
|
||||
unsigned len)
|
||||
|
@ -47,7 +54,7 @@ static void nc_wait_arp_handler (uchar * pkt, unsigned dest, unsigned src,
|
|||
static void nc_handler (uchar * pkt, unsigned dest, unsigned src,
|
||||
unsigned len)
|
||||
{
|
||||
if (nc_buf)
|
||||
if (input_size)
|
||||
NetState = NETLOOP_SUCCESS; /* got input - quit net loop */
|
||||
}
|
||||
|
||||
|
@ -58,23 +65,45 @@ static void nc_timeout (void)
|
|||
|
||||
void NcStart (void)
|
||||
{
|
||||
if (memcmp (NetServerEther, NetEtherNullAddr, 6)) {
|
||||
if (!output_packet_len || memcmp (nc_ether, NetEtherNullAddr, 6)) {
|
||||
/* going to check for input packet */
|
||||
NetSetHandler (nc_handler);
|
||||
NetSetTimeout (net_timeout, nc_timeout);
|
||||
} else {
|
||||
/* send arp request */
|
||||
uchar *pkt;
|
||||
NetSetHandler (nc_wait_arp_handler);
|
||||
NetSendUDPPacket (NetServerEther, NetServerIP, 6665, 6666, 0);
|
||||
pkt = (uchar *) NetTxPacket + NetEthHdrSize () + IP_HDR_SIZE;
|
||||
memcpy (pkt, output_packet, output_packet_len);
|
||||
NetSendUDPPacket (nc_ether, nc_ip, nc_port, nc_port, output_packet_len);
|
||||
}
|
||||
}
|
||||
|
||||
int nc_input_packet (uchar * pkt, unsigned dest, unsigned src, unsigned len)
|
||||
{
|
||||
if (dest != 6666 || !len)
|
||||
int end, chunk;
|
||||
|
||||
if (dest != nc_port || !len)
|
||||
return 0; /* not for us */
|
||||
|
||||
nc_buf = *pkt;
|
||||
if (input_size == sizeof input_buffer)
|
||||
return 1; /* no space */
|
||||
if (len > sizeof input_buffer - input_size)
|
||||
len = sizeof input_buffer - input_size;
|
||||
|
||||
end = input_offset + input_size;
|
||||
if (end > sizeof input_buffer)
|
||||
end -= sizeof input_buffer;
|
||||
|
||||
chunk = len;
|
||||
if (end + len > sizeof input_buffer) {
|
||||
chunk = sizeof input_buffer - end;
|
||||
memcpy(input_buffer, pkt + chunk, len - chunk);
|
||||
}
|
||||
memcpy (input_buffer + end, pkt, chunk);
|
||||
|
||||
input_size += len;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -85,14 +114,23 @@ static void nc_send_packet (const char *buf, int len)
|
|||
struct eth_device *eth;
|
||||
int inited = 0;
|
||||
uchar *pkt;
|
||||
|
||||
if (!memcmp (NetServerEther, NetEtherNullAddr, 6))
|
||||
return;
|
||||
uchar *ether;
|
||||
IPaddr_t ip;
|
||||
|
||||
if ((eth = eth_get_dev ()) == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!memcmp (nc_ether, NetEtherNullAddr, 6)) {
|
||||
if (eth->state == ETH_STATE_ACTIVE)
|
||||
return; /* inside net loop */
|
||||
output_packet = buf;
|
||||
output_packet_len = len;
|
||||
NetLoop (NETCONS); /* wait for arp reply and send packet */
|
||||
output_packet_len = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (eth->state != ETH_STATE_ACTIVE) {
|
||||
if (eth_init (gd->bd) < 0)
|
||||
return;
|
||||
|
@ -100,7 +138,9 @@ static void nc_send_packet (const char *buf, int len)
|
|||
}
|
||||
pkt = (uchar *) NetTxPacket + NetEthHdrSize () + IP_HDR_SIZE;
|
||||
memcpy (pkt, buf, len);
|
||||
NetSendUDPPacket (NetServerEther, NetServerIP, 6666, 6665, len);
|
||||
ether = nc_ether;
|
||||
ip = nc_ip;
|
||||
NetSendUDPPacket (ether, ip, nc_port, nc_port, len);
|
||||
|
||||
if (inited)
|
||||
eth_halt ();
|
||||
|
@ -108,10 +148,31 @@ static void nc_send_packet (const char *buf, int len)
|
|||
|
||||
int nc_start (void)
|
||||
{
|
||||
if (memcmp (NetServerEther, NetEtherNullAddr, 6))
|
||||
return 0;
|
||||
int netmask, our_ip;
|
||||
|
||||
return NetLoop (NETCONS); /* wait for arp reply */
|
||||
nc_port = 6666; /* default port */
|
||||
|
||||
if (getenv ("ncip")) {
|
||||
nc_ip = getenv_IPaddr ("ncip");
|
||||
if (!nc_ip)
|
||||
return -1; /* ncip is 0.0.0.0 */
|
||||
char *p = strchr (getenv ("ncip"), ':');
|
||||
if (p)
|
||||
nc_port = simple_strtoul (p + 1, NULL, 10);
|
||||
} else
|
||||
nc_ip = ~0; /* ncip is not set */
|
||||
|
||||
our_ip = getenv_IPaddr ("ipaddr");
|
||||
netmask = getenv_IPaddr ("netmask");
|
||||
|
||||
if (nc_ip == ~0 || /* 255.255.255.255 */
|
||||
((netmask & our_ip) == (netmask & nc_ip) && /* on the same net */
|
||||
(netmask | nc_ip) == ~0)) /* broadcast to our net */
|
||||
memset (nc_ether, 0xff, sizeof nc_ether);
|
||||
else
|
||||
memset (nc_ether, 0, sizeof nc_ether); /* force arp request */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nc_putc (char c)
|
||||
|
@ -146,15 +207,18 @@ int nc_getc (void)
|
|||
input_recursion = 1;
|
||||
|
||||
net_timeout = 0; /* no timeout */
|
||||
while (!nc_buf)
|
||||
while (!input_size)
|
||||
NetLoop (NETCONS);
|
||||
|
||||
input_recursion = 0;
|
||||
|
||||
uchar tmp = nc_buf;
|
||||
uchar c = input_buffer[input_offset];
|
||||
input_offset++;
|
||||
if (input_offset >= sizeof input_buffer)
|
||||
input_offset -= sizeof input_buffer;
|
||||
input_size--;
|
||||
|
||||
nc_buf = 0;
|
||||
return tmp;
|
||||
return c;
|
||||
}
|
||||
|
||||
int nc_tstc (void)
|
||||
|
@ -164,7 +228,7 @@ int nc_tstc (void)
|
|||
if (input_recursion)
|
||||
return 0;
|
||||
|
||||
if (nc_buf)
|
||||
if (input_size)
|
||||
return 1;
|
||||
|
||||
eth = eth_get_dev ();
|
||||
|
@ -174,11 +238,11 @@ int nc_tstc (void)
|
|||
input_recursion = 1;
|
||||
|
||||
net_timeout = 1;
|
||||
NetLoop (NETCONS); /* kind of poll */
|
||||
NetLoop (NETCONS); /* kind of poll */
|
||||
|
||||
input_recursion = 0;
|
||||
|
||||
return nc_buf != 0;
|
||||
return input_size != 0;
|
||||
}
|
||||
|
||||
int drv_nc_init (void)
|
||||
|
|
|
@ -550,7 +550,7 @@ static void smiLoadCcr (struct ctfb_res_modes *var, unsigned short device_id)
|
|||
smiWrite (SMI_INDX_C4, 0x6b, 0x15);
|
||||
|
||||
/* VCLK */
|
||||
freq = 1000000000000L / var -> pixclock;
|
||||
freq = 1000000000000LL / var -> pixclock;
|
||||
|
||||
FindPQ ((unsigned int)freq, &p, &q);
|
||||
|
||||
|
|
|
@ -76,12 +76,17 @@
|
|||
#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
|
||||
|
||||
|
||||
#define CONFIG_COMMANDS ( (CONFIG_CMD_DFL & (~CFG_CMD_NET) & \
|
||||
(~CFG_CMD_RTC) & ~(CFG_CMD_PCI) & ~(CFG_CMD_I2C)) | \
|
||||
#define CONFIG_COMMANDS ((CONFIG_CMD_DFL & \
|
||||
~( CFG_CMD_NET | \
|
||||
CFG_CMD_RTC | \
|
||||
CFG_CMD_PCI | \
|
||||
CFG_CMD_I2C \
|
||||
) ) | \
|
||||
CFG_CMD_IRQ | \
|
||||
CFG_CMD_KGDB | \
|
||||
CFG_CMD_BEDBUG | \
|
||||
CFG_CMD_ELF | CFG_CMD_JFFS2 )
|
||||
CFG_CMD_ELF | \
|
||||
CFG_CMD_JFFS2 )
|
||||
|
||||
/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
|
||||
#include <cmd_confdefs.h>
|
||||
|
|
|
@ -269,31 +269,31 @@
|
|||
/* What U-Boot subsytems do you want enabled? */
|
||||
/*
|
||||
*/
|
||||
#define CONFIG_COMMANDS ( CFG_CMD_ALL & \
|
||||
~CFG_CMD_BMP & \
|
||||
~CFG_CMD_BSP & \
|
||||
~CFG_CMD_DCR & \
|
||||
~CFG_CMD_DHCP & \
|
||||
~CFG_CMD_DOC & \
|
||||
~CFG_CMD_DTT & \
|
||||
~CFG_CMD_EEPROM & \
|
||||
~CFG_CMD_FDC & \
|
||||
~CFG_CMD_FDOS & \
|
||||
~CFG_CMD_HWFLOW & \
|
||||
~CFG_CMD_IDE & \
|
||||
~CFG_CMD_JFFS2 & \
|
||||
~CFG_CMD_KGDB & \
|
||||
~CFG_CMD_MII & \
|
||||
~CFG_CMD_MMC & \
|
||||
~CFG_CMD_NAND & \
|
||||
~CFG_CMD_PCI & \
|
||||
~CFG_CMD_PCMCIA & \
|
||||
~CFG_CMD_REISER & \
|
||||
~CFG_CMD_SCSI & \
|
||||
~CFG_CMD_SPI & \
|
||||
~CFG_CMD_USB & \
|
||||
~CFG_CMD_VFD & \
|
||||
~CFG_CMD_XIMG )
|
||||
#define CONFIG_COMMANDS ( CFG_CMD_ALL & \
|
||||
~( CFG_CMD_BMP | \
|
||||
CFG_CMD_BSP | \
|
||||
CFG_CMD_DCR | \
|
||||
CFG_CMD_DHCP | \
|
||||
CFG_CMD_DOC | \
|
||||
CFG_CMD_DTT | \
|
||||
CFG_CMD_EEPROM | \
|
||||
CFG_CMD_FDC | \
|
||||
CFG_CMD_FDOS | \
|
||||
CFG_CMD_HWFLOW | \
|
||||
CFG_CMD_IDE | \
|
||||
CFG_CMD_JFFS2 | \
|
||||
CFG_CMD_KGDB | \
|
||||
CFG_CMD_MII | \
|
||||
CFG_CMD_MMC | \
|
||||
CFG_CMD_NAND | \
|
||||
CFG_CMD_PCI | \
|
||||
CFG_CMD_PCMCIA | \
|
||||
CFG_CMD_REISER | \
|
||||
CFG_CMD_SCSI | \
|
||||
CFG_CMD_SPI | \
|
||||
CFG_CMD_USB | \
|
||||
CFG_CMD_VFD | \
|
||||
CFG_CMD_XIMG ) )
|
||||
|
||||
/* Where do the internal registers live? */
|
||||
#define CFG_IMMR 0xF0000000
|
||||
|
|
|
@ -206,19 +206,20 @@ static void move64(unsigned long long *src, unsigned long long *dest)
|
|||
*
|
||||
*/
|
||||
const static unsigned long long pattern[] = {
|
||||
0xaaaaaaaaaaaaaaaa,
|
||||
0xcccccccccccccccc,
|
||||
0xf0f0f0f0f0f0f0f0,
|
||||
0xff00ff00ff00ff00,
|
||||
0xffff0000ffff0000,
|
||||
0xffffffff00000000,
|
||||
0x00000000ffffffff,
|
||||
0x0000ffff0000ffff,
|
||||
0x00ff00ff00ff00ff,
|
||||
0x0f0f0f0f0f0f0f0f,
|
||||
0x3333333333333333,
|
||||
0x5555555555555555};
|
||||
const unsigned long long otherpattern = 0x0123456789abcdef;
|
||||
0xaaaaaaaaaaaaaaaaULL,
|
||||
0xccccccccccccccccULL,
|
||||
0xf0f0f0f0f0f0f0f0ULL,
|
||||
0xff00ff00ff00ff00ULL,
|
||||
0xffff0000ffff0000ULL,
|
||||
0xffffffff00000000ULL,
|
||||
0x00000000ffffffffULL,
|
||||
0x0000ffff0000ffffULL,
|
||||
0x00ff00ff00ff00ffULL,
|
||||
0x0f0f0f0f0f0f0f0fULL,
|
||||
0x3333333333333333ULL,
|
||||
0x5555555555555555ULL
|
||||
};
|
||||
const unsigned long long otherpattern = 0x0123456789abcdefULL;
|
||||
|
||||
|
||||
static int memory_post_dataline(unsigned long long * pmem)
|
||||
|
|
|
@ -131,6 +131,10 @@ mkimage$(SFX): mkimage.o crc32.o
|
|||
$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
|
||||
$(STRIP) $@
|
||||
|
||||
ncb$(SFX): ncb.o
|
||||
$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
|
||||
$(STRIP) $@
|
||||
|
||||
gen_eth_addr$(SFX): gen_eth_addr.o
|
||||
$(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^
|
||||
$(STRIP) $@
|
||||
|
@ -156,6 +160,9 @@ crc32.o: crc32.c
|
|||
mkimage.o: mkimage.c
|
||||
$(CC) -g $(CFLAGS) -c $<
|
||||
|
||||
ncb.o: ncb.c
|
||||
$(CC) -g $(CFLAGS) -c $<
|
||||
|
||||
gen_eth_addr.o: gen_eth_addr.c
|
||||
$(CC) -g $(CFLAGS) -c $<
|
||||
|
||||
|
|
36
tools/ncb.c
Normal file
36
tools/ncb.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/socket.h>
|
||||
#include <linux/in.h>
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
int s, len, o, port = 6666;
|
||||
char buf[512];
|
||||
struct sockaddr_in addr;
|
||||
int addr_len = sizeof addr;
|
||||
|
||||
if (argc > 1)
|
||||
port = atoi (argv[1]);
|
||||
|
||||
s = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
o = 1;
|
||||
len = 4;
|
||||
setsockopt (3, SOL_SOCKET, SO_REUSEADDR, &o, len);
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons (port);
|
||||
addr.sin_addr.s_addr = INADDR_ANY; /* receive broadcasts */
|
||||
|
||||
bind (s, (struct sockaddr *) &addr, sizeof addr);
|
||||
|
||||
for (;;) {
|
||||
len = recvfrom (s, buf, sizeof buf, 0, (struct sockaddr *) &addr, &addr_len);
|
||||
if (len < 0)
|
||||
break;
|
||||
write (1, buf, len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue