Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

of/net: Move of_get_mac_address() to a common source file.

There are two identical implementations of of_get_mac_address(), one
each in arch/powerpc/kernel/prom_parse.c and
arch/microblaze/kernel/prom_parse.c. Move this function to a new
common file of_net.{c,h} and adjust all the callers to include the new
header.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
[grant.likely@secretlab.ca: protect header with #ifdef]
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

authored by

David Daney and committed by
Grant Likely
4b6ba8aa 3985c7ce

+74 -82
-3
arch/microblaze/include/asm/prom.h
··· 64 64 /* CPU OF node matching */ 65 65 struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); 66 66 67 - /* Get the MAC address */ 68 - extern const void *of_get_mac_address(struct device_node *np); 69 - 70 67 /** 71 68 * of_irq_map_pci - Resolve the interrupt for a PCI device 72 69 * @pdev: the device whose interrupt is to be resolved
-38
arch/microblaze/kernel/prom_parse.c
··· 110 110 cells = prop ? *(u32 *)prop : of_n_size_cells(dn); 111 111 *size = of_read_number(dma_window, cells); 112 112 } 113 - 114 - /** 115 - * Search the device tree for the best MAC address to use. 'mac-address' is 116 - * checked first, because that is supposed to contain to "most recent" MAC 117 - * address. If that isn't set, then 'local-mac-address' is checked next, 118 - * because that is the default address. If that isn't set, then the obsolete 119 - * 'address' is checked, just in case we're using an old device tree. 120 - * 121 - * Note that the 'address' property is supposed to contain a virtual address of 122 - * the register set, but some DTS files have redefined that property to be the 123 - * MAC address. 124 - * 125 - * All-zero MAC addresses are rejected, because those could be properties that 126 - * exist in the device tree, but were not set by U-Boot. For example, the 127 - * DTS could define 'mac-address' and 'local-mac-address', with zero MAC 128 - * addresses. Some older U-Boots only initialized 'local-mac-address'. In 129 - * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists 130 - * but is all zeros. 131 - */ 132 - const void *of_get_mac_address(struct device_node *np) 133 - { 134 - struct property *pp; 135 - 136 - pp = of_find_property(np, "mac-address", NULL); 137 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 138 - return pp->value; 139 - 140 - pp = of_find_property(np, "local-mac-address", NULL); 141 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 142 - return pp->value; 143 - 144 - pp = of_find_property(np, "address", NULL); 145 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 146 - return pp->value; 147 - 148 - return NULL; 149 - } 150 - EXPORT_SYMBOL(of_get_mac_address);
-3
arch/powerpc/include/asm/prom.h
··· 63 63 /* cache lookup */ 64 64 struct device_node *of_find_next_cache_node(struct device_node *np); 65 65 66 - /* Get the MAC address */ 67 - extern const void *of_get_mac_address(struct device_node *np); 68 - 69 66 #ifdef CONFIG_NUMA 70 67 extern int of_node_to_nid(struct device_node *device); 71 68 #else
-38
arch/powerpc/kernel/prom_parse.c
··· 117 117 cells = prop ? *(u32 *)prop : of_n_size_cells(dn); 118 118 *size = of_read_number(dma_window, cells); 119 119 } 120 - 121 - /** 122 - * Search the device tree for the best MAC address to use. 'mac-address' is 123 - * checked first, because that is supposed to contain to "most recent" MAC 124 - * address. If that isn't set, then 'local-mac-address' is checked next, 125 - * because that is the default address. If that isn't set, then the obsolete 126 - * 'address' is checked, just in case we're using an old device tree. 127 - * 128 - * Note that the 'address' property is supposed to contain a virtual address of 129 - * the register set, but some DTS files have redefined that property to be the 130 - * MAC address. 131 - * 132 - * All-zero MAC addresses are rejected, because those could be properties that 133 - * exist in the device tree, but were not set by U-Boot. For example, the 134 - * DTS could define 'mac-address' and 'local-mac-address', with zero MAC 135 - * addresses. Some older U-Boots only initialized 'local-mac-address'. In 136 - * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists 137 - * but is all zeros. 138 - */ 139 - const void *of_get_mac_address(struct device_node *np) 140 - { 141 - struct property *pp; 142 - 143 - pp = of_find_property(np, "mac-address", NULL); 144 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 145 - return pp->value; 146 - 147 - pp = of_find_property(np, "local-mac-address", NULL); 148 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 149 - return pp->value; 150 - 151 - pp = of_find_property(np, "address", NULL); 152 - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 153 - return pp->value; 154 - 155 - return NULL; 156 - } 157 - EXPORT_SYMBOL(of_get_mac_address);
+1
arch/powerpc/sysdev/mv64x60_dev.c
··· 16 16 #include <linux/mv643xx.h> 17 17 #include <linux/platform_device.h> 18 18 #include <linux/of_platform.h> 19 + #include <linux/of_net.h> 19 20 #include <linux/dma-mapping.h> 20 21 21 22 #include <asm/prom.h>
+1
arch/powerpc/sysdev/tsi108_dev.c
··· 19 19 #include <linux/module.h> 20 20 #include <linux/device.h> 21 21 #include <linux/platform_device.h> 22 + #include <linux/of_net.h> 22 23 #include <asm/tsi108.h> 23 24 24 25 #include <asm/system.h>
+1
drivers/net/fs_enet/fs_enet-main.c
··· 40 40 #include <linux/of_mdio.h> 41 41 #include <linux/of_platform.h> 42 42 #include <linux/of_gpio.h> 43 + #include <linux/of_net.h> 43 44 44 45 #include <linux/vmalloc.h> 45 46 #include <asm/pgtable.h>
+1
drivers/net/gianfar.c
··· 95 95 #include <linux/phy.h> 96 96 #include <linux/phy_fixed.h> 97 97 #include <linux/of.h> 98 + #include <linux/of_net.h> 98 99 99 100 #include "gianfar.h" 100 101 #include "fsl_pq_mdio.h"
+1
drivers/net/ucc_geth.c
··· 28 28 #include <linux/phy.h> 29 29 #include <linux/workqueue.h> 30 30 #include <linux/of_mdio.h> 31 + #include <linux/of_net.h> 31 32 #include <linux/of_platform.h> 32 33 33 34 #include <asm/uaccess.h>
+1
drivers/net/xilinx_emaclite.c
··· 24 24 #include <linux/of_device.h> 25 25 #include <linux/of_platform.h> 26 26 #include <linux/of_mdio.h> 27 + #include <linux/of_net.h> 27 28 #include <linux/phy.h> 28 29 29 30 #define DRIVER_NAME "xilinx_emaclite"
+4
drivers/of/Kconfig
··· 49 49 help 50 50 OpenFirmware I2C accessors 51 51 52 + config OF_NET 53 + depends on NETDEVICES 54 + def_bool y 55 + 52 56 config OF_SPI 53 57 def_tristate SPI 54 58 depends on SPI && !SPARC
+1
drivers/of/Makefile
··· 6 6 obj-$(CONFIG_OF_DEVICE) += device.o platform.o 7 7 obj-$(CONFIG_OF_GPIO) += gpio.o 8 8 obj-$(CONFIG_OF_I2C) += of_i2c.o 9 + obj-$(CONFIG_OF_NET) += of_net.o 9 10 obj-$(CONFIG_OF_SPI) += of_spi.o 10 11 obj-$(CONFIG_OF_MDIO) += of_mdio.o
+48
drivers/of/of_net.c
··· 1 + /* 2 + * OF helpers for network devices. 3 + * 4 + * This file is released under the GPLv2 5 + * 6 + * Initially copied out of arch/powerpc/kernel/prom_parse.c 7 + */ 8 + #include <linux/etherdevice.h> 9 + #include <linux/kernel.h> 10 + #include <linux/of_net.h> 11 + 12 + /** 13 + * Search the device tree for the best MAC address to use. 'mac-address' is 14 + * checked first, because that is supposed to contain to "most recent" MAC 15 + * address. If that isn't set, then 'local-mac-address' is checked next, 16 + * because that is the default address. If that isn't set, then the obsolete 17 + * 'address' is checked, just in case we're using an old device tree. 18 + * 19 + * Note that the 'address' property is supposed to contain a virtual address of 20 + * the register set, but some DTS files have redefined that property to be the 21 + * MAC address. 22 + * 23 + * All-zero MAC addresses are rejected, because those could be properties that 24 + * exist in the device tree, but were not set by U-Boot. For example, the 25 + * DTS could define 'mac-address' and 'local-mac-address', with zero MAC 26 + * addresses. Some older U-Boots only initialized 'local-mac-address'. In 27 + * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists 28 + * but is all zeros. 29 + */ 30 + const void *of_get_mac_address(struct device_node *np) 31 + { 32 + struct property *pp; 33 + 34 + pp = of_find_property(np, "mac-address", NULL); 35 + if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 36 + return pp->value; 37 + 38 + pp = of_find_property(np, "local-mac-address", NULL); 39 + if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 40 + return pp->value; 41 + 42 + pp = of_find_property(np, "address", NULL); 43 + if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) 44 + return pp->value; 45 + 46 + return NULL; 47 + } 48 + EXPORT_SYMBOL(of_get_mac_address);
+15
include/linux/of_net.h
··· 1 + /* 2 + * OF helpers for network devices. 3 + * 4 + * This file is released under the GPLv2 5 + */ 6 + 7 + #ifndef __LINUX_OF_NET_H 8 + #define __LINUX_OF_NET_H 9 + 10 + #ifdef CONFIG_OF_NET 11 + #include <linux/of.h> 12 + extern const void *of_get_mac_address(struct device_node *np); 13 + #endif 14 + 15 + #endif /* __LINUX_OF_NET_H */