61 lines
2.1 KiB
Diff
61 lines
2.1 KiB
Diff
|
Index: linux-2.6.19/include/asm-arm/arch-ixp4xx/platform.h
|
||
|
===================================================================
|
||
|
--- linux-2.6.19.orig/include/asm-arm/arch-ixp4xx/platform.h
|
||
|
+++ linux-2.6.19/include/asm-arm/arch-ixp4xx/platform.h
|
||
|
@@ -100,6 +100,7 @@ struct mac_plat_info {
|
||
|
int phy_id; /* ID of the connected PHY (PCB/platform dependent) */
|
||
|
int rxq_id; /* Queue ID of the RX-free q*/
|
||
|
int txq_id; /* Where to push the outgoing packets */
|
||
|
+ unsigned char hwaddr[6]; /* Desired hardware address */
|
||
|
};
|
||
|
|
||
|
|
||
|
Index: linux-2.6.19/drivers/net/ixp4xx/mac_driver.c
|
||
|
===================================================================
|
||
|
--- linux-2.6.19.orig/drivers/net/ixp4xx/mac_driver.c
|
||
|
+++ linux-2.6.19/drivers/net/ixp4xx/mac_driver.c
|
||
|
@@ -189,6 +189,24 @@ static int ixmac_open (struct net_device
|
||
|
}
|
||
|
mac->rxq_pkt += RX_QUEUE_PREFILL;
|
||
|
|
||
|
+ /* printk(KERN_INFO "...Platform MAC=0x%02x%02x%02x%02x%02x%02x\n",
|
||
|
+ mac->plat->hwaddr[0],
|
||
|
+ mac->plat->hwaddr[1],
|
||
|
+ mac->plat->hwaddr[2],
|
||
|
+ mac->plat->hwaddr[3],
|
||
|
+ mac->plat->hwaddr[4],
|
||
|
+ mac->plat->hwaddr[5]
|
||
|
+ ); */
|
||
|
+ /* Only use platform or random if there's currently no device hw addr */
|
||
|
+ if (is_zero_ether_addr(dev->dev_addr)) {
|
||
|
+ if (is_zero_ether_addr(mac->plat->hwaddr)) {
|
||
|
+ random_ether_addr(dev->dev_addr);
|
||
|
+ dev->dev_addr[5] = mac->plat->phy_id;
|
||
|
+ }
|
||
|
+ else
|
||
|
+ memcpy(dev->dev_addr, mac->plat->hwaddr, 6);
|
||
|
+ }
|
||
|
+
|
||
|
mac_init(mac);
|
||
|
npe_mh_set_rxqid(npe, mac->plat, RX_DONE_QID);
|
||
|
mac_set_uniaddr(dev);
|
||
|
@@ -434,9 +452,15 @@ static int mac_probe(struct platform_dev
|
||
|
* following commands:
|
||
|
* "ip link set address 02:03:04:04:04:01 dev eth0"
|
||
|
* "ifconfig eth0 hw ether 02:03:04:04:04:07"
|
||
|
- */
|
||
|
- random_ether_addr(dev->dev_addr);
|
||
|
- dev->dev_addr[5] = plat->phy_id;
|
||
|
+ */
|
||
|
+/* Note: moved to ixmac_open to allow notifiers to run for compiled in modules
|
||
|
+ if (is_zero_ether_addr(plat->hwaddr)) {
|
||
|
+ random_ether_addr(dev->dev_addr);
|
||
|
+ dev->dev_addr[5] = plat->phy_id;
|
||
|
+ }
|
||
|
+ else
|
||
|
+ memcpy(dev->dev_addr, plat->hwaddr, 6);
|
||
|
+*/
|
||
|
|
||
|
printk(KERN_INFO IXMAC_NAME " driver " IXMAC_VERSION
|
||
|
": %s on %s with PHY[%d] initialized\n",
|