Commit 4b6ba8aacbb3185703b797286547d0f8f3859b02
Committed by
Grant Likely
1 parent
3985c7ce85
Exists in
master
and in
7 other branches
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>
Showing 14 changed files with 74 additions and 82 deletions Side-by-side Diff
- arch/microblaze/include/asm/prom.h
- arch/microblaze/kernel/prom_parse.c
- arch/powerpc/include/asm/prom.h
- arch/powerpc/kernel/prom_parse.c
- arch/powerpc/sysdev/mv64x60_dev.c
- arch/powerpc/sysdev/tsi108_dev.c
- drivers/net/fs_enet/fs_enet-main.c
- drivers/net/gianfar.c
- drivers/net/ucc_geth.c
- drivers/net/xilinx_emaclite.c
- drivers/of/Kconfig
- drivers/of/Makefile
- drivers/of/of_net.c
- include/linux/of_net.h
arch/microblaze/include/asm/prom.h
... | ... | @@ -64,9 +64,6 @@ |
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 |
arch/microblaze/kernel/prom_parse.c
... | ... | @@ -110,42 +110,4 @@ |
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); |
arch/powerpc/include/asm/prom.h
... | ... | @@ -63,9 +63,6 @@ |
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 |
arch/powerpc/kernel/prom_parse.c
... | ... | @@ -117,42 +117,4 @@ |
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); |
arch/powerpc/sysdev/mv64x60_dev.c
arch/powerpc/sysdev/tsi108_dev.c
drivers/net/fs_enet/fs_enet-main.c
drivers/net/gianfar.c
drivers/net/ucc_geth.c
drivers/net/xilinx_emaclite.c
drivers/of/Kconfig
drivers/of/Makefile
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); |
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 */ |