13 #include <linux/kernel.h>
14 #include <linux/pci.h>
16 #include <linux/timex.h>
26 #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2))
33 pr_info(
"%s: triggering power-off...\n", __func__);
56 static int __init qnap_tsx09_parse_hex_nibble(
char n)
58 if (n >=
'0' && n <=
'9')
61 if (n >=
'A' && n <=
'F')
64 if (n >=
'a' && n <=
'f')
70 static int __init qnap_tsx09_parse_hex_byte(
const char *
b)
75 hi = qnap_tsx09_parse_hex_nibble(b[0]);
76 lo = qnap_tsx09_parse_hex_nibble(b[1]);
81 return (hi << 4) | lo;
84 static int __init qnap_tsx09_check_mac_addr(
const char *addr_str)
89 for (i = 0; i < 6; i++) {
95 if (addr_str[(i * 3) + 2] != ((i < 5) ?
':' :
'\n'))
98 byte = qnap_tsx09_parse_hex_byte(addr_str + (i * 3));
105 for (i = 0; i < 6; i++)
106 printk(
"%.2x%s", addr[i], (i < 5) ?
":" :
".\n");
122 for (addr = mem_base; addr < (mem_base +
size); addr += 1024) {
126 nor_page =
ioremap(addr, 1024);
127 if (nor_page !=
NULL) {
128 ret = qnap_tsx09_check_mac_addr(nor_page);