@ -169,6 +169,8 @@ static void ether_post_init (int devnum, int hw_addr)
rx . ctrl = MAL_TX_CTRL_WRAP | MAL_RX_CTRL_EMPTY ;
rx . data_len = 0 ;
rx . data_ptr = ( char * ) L1_CACHE_ALIGN ( ( u32 ) rx_buf ) ;
flush_dcache_range ( ( u32 ) & rx , ( u32 ) & rx + sizeof ( mal_desc_t ) ) ;
flush_dcache_range ( ( u32 ) & tx , ( u32 ) & tx + sizeof ( mal_desc_t ) ) ;
switch ( devnum ) {
case 1 :
@ -290,11 +292,14 @@ static void ether_post_send (int devnum, int hw_addr, void *packet, int length)
return ;
}
udelay ( 1000 ) ;
invalidate_dcache_range ( ( u32 ) & tx , ( u32 ) & tx + sizeof ( mal_desc_t ) ) ;
}
tx . ctrl = MAL_TX_CTRL_READY | MAL_TX_CTRL_WRAP | MAL_TX_CTRL_LAST |
EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP ;
tx . data_len = length ;
memcpy ( tx . data_ptr , packet , length ) ;
flush_dcache_range ( ( u32 ) & tx , ( u32 ) & tx + sizeof ( mal_desc_t ) ) ;
flush_dcache_range ( ( u32 ) tx . data_ptr , ( u32 ) tx . data_ptr + length ) ;
sync ( ) ;
out32 ( EMAC_TXM0 + hw_addr , in32 ( EMAC_TXM0 + hw_addr ) | EMAC_TXM0_GNP0 ) ;
@ -312,13 +317,17 @@ static int ether_post_recv (int devnum, int hw_addr, void *packet, int max_lengt
return 0 ;
}
udelay ( 1000 ) ;
invalidate_dcache_range ( ( u32 ) & rx , ( u32 ) & rx + sizeof ( mal_desc_t ) ) ;
}
length = rx . data_len - 4 ;
if ( length < = max_length )
if ( length < = max_length ) {
invalidate_dcache_range ( ( u32 ) rx . data_ptr , ( u32 ) rx . data_ptr + length ) ;
memcpy ( packet , rx . data_ptr , length ) ;
}
sync ( ) ;
rx . ctrl | = MAL_RX_CTRL_EMPTY ;
flush_dcache_range ( ( u32 ) & rx , ( u32 ) & rx + sizeof ( mal_desc_t ) ) ;
sync ( ) ;
return length ;