mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/drivers/net/b44.h
 | 
						|
+++ b/drivers/net/b44.h
 | 
						|
@@ -122,6 +122,7 @@
 | 
						|
 #define  RXCONFIG_FLOW		0x00000020 /* Flow Control Enable */
 | 
						|
 #define  RXCONFIG_FLOW_ACCEPT	0x00000040 /* Accept Unicast Flow Control Frame */
 | 
						|
 #define  RXCONFIG_RFILT		0x00000080 /* Reject Filter */
 | 
						|
+#define  RXCONFIG_CAM_ABSENT	0x00000100 /* CAM Absent */
 | 
						|
 #define B44_RXMAXLEN	0x0404UL /* EMAC RX Max Packet Length */
 | 
						|
 #define B44_TXMAXLEN	0x0408UL /* EMAC TX Max Packet Length */
 | 
						|
 #define B44_MDIO_CTRL	0x0410UL /* EMAC MDIO Control */
 | 
						|
--- a/drivers/net/b44.c
 | 
						|
+++ b/drivers/net/b44.c
 | 
						|
@@ -1299,6 +1299,7 @@ static int b44_set_mac_addr(struct net_d
 | 
						|
 {
 | 
						|
 	struct b44 *bp = dev->priv;
 | 
						|
 	struct sockaddr *addr = p;
 | 
						|
+ 	u32 val;
 | 
						|
 
 | 
						|
 	if (netif_running(dev))
 | 
						|
 		return -EBUSY;
 | 
						|
@@ -1306,7 +1307,11 @@ static int b44_set_mac_addr(struct net_d
 | 
						|
 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
 | 
						|
 
 | 
						|
 	spin_lock_irq(&bp->lock);
 | 
						|
-	__b44_set_mac_addr(bp);
 | 
						|
+   
 | 
						|
+   	val = br32(B44_RXCONFIG);
 | 
						|
+   	if (!(val & RXCONFIG_CAM_ABSENT))
 | 
						|
+		__b44_set_mac_addr(bp);
 | 
						|
+   
 | 
						|
 	spin_unlock_irq(&bp->lock);
 | 
						|
 
 | 
						|
 	return 0;
 | 
						|
@@ -1493,7 +1498,7 @@ static void __b44_set_rx_mode(struct net
 | 
						|
 
 | 
						|
 	val = br32(B44_RXCONFIG);
 | 
						|
 	val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI);
 | 
						|
-	if (dev->flags & IFF_PROMISC) {
 | 
						|
+	if ((dev->flags & IFF_PROMISC) || (val & RXCONFIG_CAM_ABSENT)) {
 | 
						|
 		val |= RXCONFIG_PROMISC;
 | 
						|
 		bw32(B44_RXCONFIG, val);
 | 
						|
 	} else {
 |