mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ARM: orion5x: use mac_pton() helper
Instead of custom approach let's use generic helper function. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Detlef Vollmann <dv@vollmann.ch> Cc: Gregory CLEMENT <gregory.clement@free-electrons.com> Tested-by: Tested-by: Detlef Vollmann <dv@vollmann.ch> #on DNS-323 Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
This commit is contained in:
		
							parent
							
								
									d492cccac2
								
							
						
					
					
						commit
						4904dbda41
					
				
					 3 changed files with 10 additions and 95 deletions
				
			
		| 
						 | 
					@ -45,6 +45,7 @@ config MACH_KUROBOX_PRO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_DNS323
 | 
					config MACH_DNS323
 | 
				
			||||||
	bool "D-Link DNS-323"
 | 
						bool "D-Link DNS-323"
 | 
				
			||||||
 | 
						select GENERIC_NET_UTILS
 | 
				
			||||||
	select I2C_BOARDINFO
 | 
						select I2C_BOARDINFO
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support the
 | 
						  Say 'Y' here if you want your kernel to support the
 | 
				
			||||||
| 
						 | 
					@ -52,6 +53,7 @@ config MACH_DNS323
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_TS209
 | 
					config MACH_TS209
 | 
				
			||||||
	bool "QNAP TS-109/TS-209"
 | 
						bool "QNAP TS-109/TS-209"
 | 
				
			||||||
 | 
						select GENERIC_NET_UTILS
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support the
 | 
						  Say 'Y' here if you want your kernel to support the
 | 
				
			||||||
	  QNAP TS-109/TS-209 platform.
 | 
						  QNAP TS-109/TS-209 platform.
 | 
				
			||||||
| 
						 | 
					@ -93,6 +95,7 @@ config MACH_LINKSTATION_LS_HGL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config MACH_TS409
 | 
					config MACH_TS409
 | 
				
			||||||
	bool "QNAP TS-409"
 | 
						bool "QNAP TS-409"
 | 
				
			||||||
 | 
						select GENERIC_NET_UTILS
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Say 'Y' here if you want your kernel to support the
 | 
						  Say 'Y' here if you want your kernel to support the
 | 
				
			||||||
	  QNAP TS-409 platform.
 | 
						  QNAP TS-409 platform.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -173,42 +173,10 @@ static struct mv643xx_eth_platform_data dns323_eth_data = {
 | 
				
			||||||
	.phy_addr = MV643XX_ETH_PHY_ADDR(8),
 | 
						.phy_addr = MV643XX_ETH_PHY_ADDR(8),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* dns323_parse_hex_*() taken from tsx09-common.c; should a common copy of these
 | 
					 | 
				
			||||||
 * functions be kept somewhere?
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static int __init dns323_parse_hex_nibble(char n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (n >= '0' && n <= '9')
 | 
					 | 
				
			||||||
		return n - '0';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (n >= 'A' && n <= 'F')
 | 
					 | 
				
			||||||
		return n - 'A' + 10;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (n >= 'a' && n <= 'f')
 | 
					 | 
				
			||||||
		return n - 'a' + 10;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return -1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __init dns323_parse_hex_byte(const char *b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int hi;
 | 
					 | 
				
			||||||
	int lo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	hi = dns323_parse_hex_nibble(b[0]);
 | 
					 | 
				
			||||||
	lo = dns323_parse_hex_nibble(b[1]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (hi < 0 || lo < 0)
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return (hi << 4) | lo;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __init dns323_read_mac_addr(void)
 | 
					static int __init dns323_read_mac_addr(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u_int8_t addr[6];
 | 
						u_int8_t addr[6];
 | 
				
			||||||
	int i;
 | 
						void __iomem *mac_page;
 | 
				
			||||||
	char *mac_page;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* MAC address is stored as a regular ol' string in /dev/mtdblock4
 | 
						/* MAC address is stored as a regular ol' string in /dev/mtdblock4
 | 
				
			||||||
	 * (0x007d0000-0x00800000) starting at offset 196480 (0x2ff80).
 | 
						 * (0x007d0000-0x00800000) starting at offset 196480 (0x2ff80).
 | 
				
			||||||
| 
						 | 
					@ -217,23 +185,8 @@ static int __init dns323_read_mac_addr(void)
 | 
				
			||||||
	if (!mac_page)
 | 
						if (!mac_page)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Sanity check the string we're looking at */
 | 
						if (!mac_pton((__force const char *) mac_page, addr))
 | 
				
			||||||
	for (i = 0; i < 5; i++) {
 | 
							goto error_fail;
 | 
				
			||||||
		if (*(mac_page + (i * 3) + 2) != ':') {
 | 
					 | 
				
			||||||
			goto error_fail;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for (i = 0; i < 6; i++)	{
 | 
					 | 
				
			||||||
		int byte;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		byte = dns323_parse_hex_byte(mac_page + (i * 3));
 | 
					 | 
				
			||||||
		if (byte < 0) {
 | 
					 | 
				
			||||||
			goto error_fail;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		addr[i] = byte;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	iounmap(mac_page);
 | 
						iounmap(mac_page);
 | 
				
			||||||
	printk("DNS-323: Found ethernet MAC address: %pM\n", addr);
 | 
						printk("DNS-323: Found ethernet MAC address: %pM\n", addr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,53 +53,12 @@ struct mv643xx_eth_platform_data qnap_tsx09_eth_data = {
 | 
				
			||||||
	.phy_addr	= MV643XX_ETH_PHY_ADDR(8),
 | 
						.phy_addr	= MV643XX_ETH_PHY_ADDR(8),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int __init qnap_tsx09_parse_hex_nibble(char n)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (n >= '0' && n <= '9')
 | 
					 | 
				
			||||||
		return n - '0';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (n >= 'A' && n <= 'F')
 | 
					 | 
				
			||||||
		return n - 'A' + 10;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (n >= 'a' && n <= 'f')
 | 
					 | 
				
			||||||
		return n - 'a' + 10;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return -1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __init qnap_tsx09_parse_hex_byte(const char *b)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int hi;
 | 
					 | 
				
			||||||
	int lo;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	hi = qnap_tsx09_parse_hex_nibble(b[0]);
 | 
					 | 
				
			||||||
	lo = qnap_tsx09_parse_hex_nibble(b[1]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (hi < 0 || lo < 0)
 | 
					 | 
				
			||||||
		return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return (hi << 4) | lo;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int __init qnap_tsx09_check_mac_addr(const char *addr_str)
 | 
					static int __init qnap_tsx09_check_mac_addr(const char *addr_str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u_int8_t addr[6];
 | 
						u_int8_t addr[6];
 | 
				
			||||||
	int i;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < 6; i++) {
 | 
						if (!mac_pton(addr_str, addr))
 | 
				
			||||||
		int byte;
 | 
							return -1;
 | 
				
			||||||
 | 
					 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Enforce "xx:xx:xx:xx:xx:xx\n" format.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		if (addr_str[(i * 3) + 2] != ((i < 5) ? ':' : '\n'))
 | 
					 | 
				
			||||||
			return -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		byte = qnap_tsx09_parse_hex_byte(addr_str + (i * 3));
 | 
					 | 
				
			||||||
		if (byte < 0)
 | 
					 | 
				
			||||||
			return -1;
 | 
					 | 
				
			||||||
		addr[i] = byte;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printk(KERN_INFO "tsx09: found ethernet mac address %pM\n", addr);
 | 
						printk(KERN_INFO "tsx09: found ethernet mac address %pM\n", addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,12 +77,12 @@ void __init qnap_tsx09_find_mac_addr(u32 mem_base, u32 size)
 | 
				
			||||||
	unsigned long addr;
 | 
						unsigned long addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (addr = mem_base; addr < (mem_base + size); addr += 1024) {
 | 
						for (addr = mem_base; addr < (mem_base + size); addr += 1024) {
 | 
				
			||||||
		char *nor_page;
 | 
							void __iomem *nor_page;
 | 
				
			||||||
		int ret = 0;
 | 
							int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		nor_page = ioremap(addr, 1024);
 | 
							nor_page = ioremap(addr, 1024);
 | 
				
			||||||
		if (nor_page != NULL) {
 | 
							if (nor_page != NULL) {
 | 
				
			||||||
			ret = qnap_tsx09_check_mac_addr(nor_page);
 | 
								ret = qnap_tsx09_check_mac_addr((__force const char *)nor_page);
 | 
				
			||||||
			iounmap(nor_page);
 | 
								iounmap(nor_page);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue