diff options
-rw-r--r-- | src/board/ich9.sh | 81 | ||||
-rw-r--r-- | src/board/local.mk | 1 |
2 files changed, 82 insertions, 0 deletions
diff --git a/src/board/ich9.sh b/src/board/ich9.sh new file mode 100644 index 0000000..b0d7d4e --- /dev/null +++ b/src/board/ich9.sh @@ -0,0 +1,81 @@ +# 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 <http://www.gnu.org/licenses/>. + +ich9_prepare_rom() +{ + local mac='' + local rom_size= + + info 'Generating FD and GbE flash regions for Intel ICH9' + + # Get MAC address. + while :; do + mac="$(show_prompt 'Enter MAC address')" + case "${mac}" in + *[!0-9a-zA-Z:]*) + continue + ;; + ??:??:??:??:??:??) + break + ;; + esac + done + info '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 +} diff --git a/src/board/local.mk b/src/board/local.mk index 06f61e6..e3d4ec5 100644 --- a/src/board/local.mk +++ b/src/board/local.mk @@ -1,4 +1,5 @@ firman_SOURCES += \ + src/board/ich9.sh \ src/board/taurinus_x200_4mb.sh \ src/board/taurinus_x200_8mb.sh \ src/board/x200_4mb.sh \ |