From: Stefan E. <se...@us...> - 2004-02-17 11:08:17
|
Update of /cvsroot/blob/blob/src/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24346 Modified Files: ether-smc9196.c Log Message: cleanup; try to fix 'packet too large errors' Index: ether-smc9196.c =================================================================== RCS file: /cvsroot/blob/blob/src/lib/ether-smc9196.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ether-smc9196.c 11 Nov 2003 14:30:45 -0000 1.2 +++ ether-smc9196.c 17 Feb 2004 10:59:29 -0000 1.3 @@ -35,6 +35,7 @@ * defines */ #undef SMC_DEBUG +#undef TEST_MODULE #ifdef SMC_DEBUG # define DBG( x, args... ) if ( dbg>=x ) printf( args ) @@ -75,6 +76,15 @@ static u8 pkt[1024]; /********************************************************************** + * prototypes + */ +static int smc_init(u32 base); +static int writeether( u8 *buf, int size ); +static int readether( u8 *buf, int size ); +static int set_ethaddr( u8 hw_addr[6] ); +static int get_ethaddr( u8 hw_addr[6] ); + +/********************************************************************** * smc memory access functions */ static inline u8 smc_inb( u32 base, int reg ) @@ -418,7 +428,7 @@ */ if ( packet_length > size ) { - printf( "%s: packet (%d) too large for buffer (%d).\n", __FUNCTION__, + DBG( 1, "%s: packet (%d) too large for buffer (%d).\n", __FUNCTION__, packet_length, size ); ret = -1; goto done; @@ -565,7 +575,7 @@ smc_outb(IM_ALLOC_INT, ioaddr, INTERRUPT); break; } - //msleep(1); + msleep(1); } while (-- time_out); if (!time_out) { @@ -579,74 +589,6 @@ } -/********************************************************************** - * test command - */ -static int smctest( int argc, char *argv[] ) -{ - u32 base = smc9196_ether_driver.base; - u8 hw_addr_set[6] = { 2,3,4,5,6,7 }; - //u8 hw_addr_set[6] = { 0x00, 0x50, 0x7f, 0x01, 0xcf, 0x0f }; - u8 hw_addr[6]; - u8 serverip[4] = { 192, 168, 1, 1 }; - u8 clientip[4] = { 192, 168, 1, 191 }; - int i; - static const unsigned char arp_txpacket[] = - { /* destination address */ - /* source address */ - 0x08, 0x06, /* proto */ - /* arp */ - 0x00, 0x01, /* hardware format: ethernet */ - 0x08, 0x00, /* protocol format: ip */ - 0x06, /* hardware length */ - 0x04, /* protocol length */ - 0x00, 0x01 /* arp request */ - }; - static unsigned char arp_tx[64]; - unsigned char *p = arp_tx; - - if (smc_init(base)) - return -EINVAL; - - set_ethaddr( hw_addr_set ); - get_ethaddr( hw_addr ); - - printf( "eth hw addr %02x:%02x:%02x:%02x:%02x:%02x\n", - hw_addr[0], hw_addr[1], hw_addr[2], - hw_addr[3], hw_addr[4], hw_addr[5] ); - - memset (p, 0, sizeof (arp_tx)); - memset (p, 0xff, 6); - memcpy (p + 12, arp_txpacket, sizeof (arp_txpacket)); - memcpy (p + 22, hw_addr, 6); - memcpy (p + 28, clientip, 4); - memcpy (p + 38, serverip, 4); - - i=1024; - while (i-- ) { - //msleep( 100 ); - if (!(i & (~0xf ))) - printf( "." ); - writeether( p, 60 ); - } - - i=1024; - while (i-- ) { - int pkt_size; - - pkt_size = readether( pkt, 1024 ); - if ( pkt_size > 0 ) { - printf( "[%02d]", pkt_size ); - } else { - printf( "." ); - } - } - printf( "\n" ); - - return 0; -} -static char smctesthelp[] = "test smc 91c96 ethernet chip\n"; -__commandlist(smctest, "smctest", smctesthelp); /********************************************************************** * exported functions @@ -737,12 +679,80 @@ /* export ethernet driver */ ether_driver_t smc9196_ether_driver = { - init: smc_init, - rcv: readether, - snd: writeether, - set_addr: set_ethaddr, - get_addr: get_ethaddr, - base: SMC_BASE, + .init = smc_init, + .rcv = readether, + .snd = writeether, + .set_addr = set_ethaddr, + .get_addr = get_ethaddr, + .base = SMC_BASE, }; +/********************************************************************** + * test command + */ +#ifdef TEST_MODULE +static int smctest( int argc, char *argv[] ) +{ + u32 base = smc9196_ether_driver.base; + u8 hw_addr_set[6] = { 2,3,4,5,6,7 }; + u8 hw_addr[6]; + u8 serverip[4] = { 192, 168, 1, 1 }; + u8 clientip[4] = { 192, 168, 1, 191 }; + int i; + static const unsigned char arp_txpacket[] = + { /* destination address */ + /* source address */ + 0x08, 0x06, /* proto */ + /* arp */ + 0x00, 0x01, /* hardware format: ethernet */ + 0x08, 0x00, /* protocol format: ip */ + 0x06, /* hardware length */ + 0x04, /* protocol length */ + 0x00, 0x01 /* arp request */ + }; + static unsigned char arp_tx[64]; + unsigned char *p = arp_tx; + + if (smc_init(base)) + return -EINVAL; + set_ethaddr( hw_addr_set ); + get_ethaddr( hw_addr ); + + printf( "eth hw addr %02x:%02x:%02x:%02x:%02x:%02x\n", + hw_addr[0], hw_addr[1], hw_addr[2], + hw_addr[3], hw_addr[4], hw_addr[5] ); + + memset (p, 0, sizeof (arp_tx)); + memset (p, 0xff, 6); + memcpy (p + 12, arp_txpacket, sizeof (arp_txpacket)); + memcpy (p + 22, hw_addr, 6); + memcpy (p + 28, clientip, 4); + memcpy (p + 38, serverip, 4); + + i=1024; + while (i-- ) { + //msleep( 100 ); + if (!(i & (~0xf ))) + printf( "." ); + writeether( p, 60 ); + } + + i=1024; + while (i-- ) { + int pkt_size; + + pkt_size = readether( pkt, 1024 ); + if ( pkt_size > 0 ) { + printf( "[%02d]", pkt_size ); + } else { + printf( "." ); + } + } + printf( "\n" ); + + return 0; +} +static char smctesthelp[] = "test smc 91c96 ethernet chip\n"; +__commandlist(smctest, "smctest", smctesthelp); +#endif |