1. 20 11月, 2008 4 次提交
    • L
      mv643xx_eth: implement ->set_rx_mode() · 66e63ffb
      Lennert Buytenhek 提交于
      Currently, if multiple unicast addresses are programmed into a
      mv643xx_eth interface, the core networking will resort to enabling
      promiscuous mode on the interface, as mv643xx_eth does not implement
      ->set_rx_mode().
      
      This patch switches mv643xx_eth over from ->set_multicast_list()
      to ->set_rx_mode(), and implements support for secondary unicast
      addresses.  The hardware can handle multiple unicast addresses as
      long as their first 11 nibbles are the same (i.e. are of the form
      xx:xx:xx:xx:xx:xy where the x part is the same for all addresses), so
      if that is the case, we use that mode.  If it's not the case, we enable
      unicast promiscuous mode in the hardware, which is slightly better than
      enabling promiscuous mode for multicasts as well, which is what would
      happen before.
      
      While we are at it, change the programming sequence so that we
      don't clear all filter bits first, so we don't lose all incoming
      packets while the filter is being reprogrammed.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      66e63ffb
    • L
      mv643xx_eth: inline txq_alloc_desc_index() · 66823b92
      Lennert Buytenhek 提交于
      Since txq_alloc_desc_index() is a very simple function, and since
      descriptor ring index handling for transmit reclaim, receive
      processing and receive refill is already handled inline as well,
      inline txq_alloc_desc_index() into its two call sites.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      66823b92
    • L
      mv643xx_eth: introduce per-port register area pointer · 37a6084f
      Lennert Buytenhek 提交于
      The mv643xx_eth driver uses the rdl()/wrl() macros to read and
      write hardware registers.  Per-port registers are accessed in the
      following way:
      
      	#define PORT_STATUS(p)			(0x0444 + ((p) << 10))
      
      	[...]
      
      	static inline u32 rdl(struct mv643xx_eth_private *mp, int offset)
      	{
      		return readl(mp->shared->base + offset);
      	}
      
      	[...]
      
      	port_status = rdl(mp, PORT_STATUS(mp->port_num));
      
      By giving the per-port 'struct mv643xx_eth_private' its own
      'void __iomem *base' pointer that points to the per-port register
      area, we can get rid of both the double indirection and the << 10
      that is done for every per-port register access -- this patch does
      that.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      37a6084f
    • L
      mv643xx_eth: checkpatch fixes · 10a9948d
      Lennert Buytenhek 提交于
      Fix up a couple of coding style issues caught by checkpatch.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      10a9948d
  2. 04 11月, 2008 2 次提交
    • D
      drivers/net: Kill now superfluous ->last_rx stores. · babcda74
      David S. Miller 提交于
      The generic packet receive code takes care of setting
      netdev->last_rx when necessary, for the sake of the
      bonding ARP monitor.
      
      Drivers need not do it any more.
      
      Some cases had to be skipped over because the drivers
      were making use of the ->last_rx value themselves.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      babcda74
    • L
      mv643xx_eth: fix SMI bus access timeouts · ee04448d
      Lennert Buytenhek 提交于
      The mv643xx_eth mii bus implementation uses wait_event_timeout() to
      wait for SMI completion interrupts.
      
      If wait_event_timeout() would return zero, mv643xx_eth would conclude
      that the SMI access timed out, but this is not necessarily true --
      wait_event_timeout() can also return zero in the case where the SMI
      completion interrupt did happen in time but where it took longer than
      the requested timeout for the process performing the SMI access to be
      scheduled again.  This would lead to occasional SMI access timeouts
      when the system would be under heavy load.
      
      The fix is to ignore the return value of wait_event_timeout(), and
      to re-check the SMI done bit after wait_event_timeout() returns to
      determine whether or not the SMI access timed out.
      Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      ee04448d
  3. 28 10月, 2008 1 次提交
  4. 09 10月, 2008 3 次提交
  5. 01 10月, 2008 1 次提交
  6. 20 9月, 2008 2 次提交
  7. 19 9月, 2008 3 次提交
  8. 14 9月, 2008 7 次提交
  9. 05 9月, 2008 15 次提交
  10. 24 8月, 2008 2 次提交