# ROM preparation for boards with Intel ICH9 # # Copyright (C) 2015 Patrick "P. J." McDermott # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ich9_prepare_rom() { local mac='' local rom_size= dbg 'Generating FD and GbE flash regions for Intel ICH9' # Get current MAC address. for iface in /sys/class/net/*; do [ "x$(cat "${iface}/device/vendor")" = 'x0x8086' ] || continue [ "x$(cat "${iface}/device/device")" = 'x0x10f5' ] || continue mac="$(cat "${iface}/address")" break done # Ask for MAC address. while :; do mac="$(show_prompt 'Enter MAC address' "${mac}" 17)" case "${mac}" in *[!0-9a-zA-Z:]*) continue ;; ??:??:??:??:??:??) break ;; esac done dbg 'MAC address: %s' "${mac}" # Create temporary directory. if ! mkdir "$(get_temp_dir)/ich9"; then err 'Failed to create temporary directory' return 1 fi # Generate FD and GbE flash regions. if ! (cd "$(get_temp_dir)/ich9" && \ ${ICH9GEN} --macaddress "${mac}" >/dev/null 2>&1); then err 'Failed to generate FD and GbE flash regions' rm_temp 'ich9' return 1 fi # Detect ROM size. case "$(wc -c "$(get_temp_dir)/rom" | cut -d ' ' -f 1)" in 4194304) rom_size=4 ;; 8388608) rom_size=8 ;; *) err 'Invalid ROM size' rm_temp 'ich9' return 1 ;; esac # Insert FD and GbE flash regions into ROM. if ! dd if="$(get_temp_dir)/ich9/ich9fdgbe_${rom_size}m.bin" \ of="$(get_temp_dir)/rom" bs=1 count=12k conv=notrunc then err 'Failed to insert FD and GbE flash regions into ROM' rm_temp 'ich9' return 1 fi # Clean up. rm_temp 'ich9' return 0 }