static int get_mac_address(u32 *high_dword, u32 *low_dword, u32 search_address, u32 search_length) { char key[] = "ethernet_mac"; unsigned int offset; int i; offset = search(key, (char *)search_address, sizeof(key) - 1, search_length); if (offset == search_length) { printk(BIOS_DEBUG, "Error: Could not locate '%s' in VPD\n", key); return 0; } printk(BIOS_DEBUG, "Located '%s' in VPD\n", key); offset += sizeof(key); /* move to next character */ *high_dword = 0; /* Fetch the MAC address and put the octets in the correct order to * be programmed. * * From RTL8105E_Series_EEPROM-Less_App_Note_1.1 * If the MAC address is 001122334455h: * Write 33221100h to I/O register offset 0x00 via double word access * Write 00005544h to I/O register offset 0x04 via double word access */ for (i = 0; i < 4; i++) { *high_dword |= (get_hex_digit((char *)(search_address + offset)) << (4 + (i * 8))); *high_dword |= (get_hex_digit((char *)(search_address + offset + 1)) << (i * 8)); offset += 3; } *low_dword = 0; for (i = 0; i < 2; i++) { *low_dword |= (get_hex_digit((char *)(search_address + offset)) << (4 + (i * 8))); *low_dword |= (get_hex_digit((char *)(search_address + offset + 1)) << (i * 8)); offset += 3; } return *high_dword | *low_dword; }
static int get_hex (int *start) { int value = convert_hex_digit (*start); int try; *start = readchar (timeout); while ((try = convert_hex_digit (*start)) >= 0) { value <<= 4; value += try; *start = readchar (timeout); } return value; } #if 0 /* Get N 32-bit words from remote, each preceded by a space, and put them in registers starting at REGNO. */ static void get_hex_regs (int n, int regno) { long val; int i; for (i = 0; i < n; i++) { int j; val = 0; for (j = 0; j < 8; j++) val = (val << 4) + get_hex_digit (j == 0); supply_register (regno++, (char *) &val); } }