1150367Sphk#!/bin/sh 2150367Sphk# 3150367Sphk# Copyright (c) 2005 Poul-Henning Kamp. 4150367Sphk# All rights reserved. 5150367Sphk# 6150367Sphk# Redistribution and use in source and binary forms, with or without 7150367Sphk# modification, are permitted provided that the following conditions 8150367Sphk# are met: 9150367Sphk# 1. Redistributions of source code must retain the above copyright 10150367Sphk# notice, this list of conditions and the following disclaimer. 11150367Sphk# 2. Redistributions in binary form must reproduce the above copyright 12150367Sphk# notice, this list of conditions and the following disclaimer in the 13150367Sphk# documentation and/or other materials provided with the distribution. 14150367Sphk# 15150367Sphk# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16150367Sphk# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17150367Sphk# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18150367Sphk# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19150367Sphk# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20150367Sphk# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21150367Sphk# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22150367Sphk# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23150367Sphk# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24150367Sphk# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25150367Sphk# SUCH DAMAGE. 26150367Sphk# 27150367Sphk# $FreeBSD$ 28150367Sphk# 29150367Sphk# Convenience function for commonly used Flash devices. 30150367Sphk# 31150367Sphk# There is a hook over in nanobsd.sh which allows you to call into 32150367Sphk# this function simply with a line like: 33150367Sphk# 34150367Sphk# FlashDevice Sandisk 256 35150367Sphk# 36150367Sphk# This file will then set NANO_MEDIASIZE, NANO_HEADS and NANO_SECTS for you. 37150367Sphk# 38150367Sphk 39150367Sphksub_FlashDevice () { 40154068Sphk 41157149Ssimon a1=`echo $1 | tr '[:upper:]' '[:lower:]'` 42157149Ssimon a2=`echo $2 | tr '[:upper:]' '[:lower:]'` 43154068Sphk case $a1 in 44194285Sedwin hitachi) 45194285Sedwin case $a2 in 46194285Sedwin 256|256mb) 47194285Sedwin NANO_MEDIASIZE=`expr 256204800 / 512` 48194285Sedwin NANO_HEADS=15 49194285Sedwin NANO_SECTS=48 50194285Sedwin ;; 51194285Sedwin *) 52194285Sedwin echo "Unknown Hitachi Flash capacity" 53194285Sedwin exit 2 54194285Sedwin ;; 55194285Sedwin esac 56194285Sedwin ;; 57154068Sphk integral) 58154068Sphk # Source: mich@FreeBSD.org 59154068Sphk case $a2 in 60154068Sphk 256|256mb) 61154068Sphk NANO_MEDIASIZE=`expr 259596288 / 512` 62154068Sphk NANO_HEADS=16 63154068Sphk NANO_SECTS=63 64154068Sphk ;; 65154068Sphk *) 66154068Sphk echo "Unknown Integral i-Pro Flash capacity" 67154068Sphk exit 2 68154068Sphk ;; 69154068Sphk esac 70154068Sphk ;; 71194286Sedwin kodak) 72194286Sedwin # Source: mwlucas@FreeBSD.org 73194310Sedwin case $a2 in 74194286Sedwin 64|64mb) 75194332Sedwin NANO_MEDIASIZE=`expr 64487424 / 512` 76194286Sedwin NANO_HEADS=4 77194286Sedwin NANO_SECTS=32 78194286Sedwin ;; 79194286Sedwin *) 80194286Sedwin echo "Unknown Kodak Flash capacity" 81194286Sedwin exit 2 82194286Sedwin ;; 83194286Sedwin esac 84194286Sedwin ;; 85160725Ssimon memorycorp) 86160725Ssimon # Source: simon@FreeBSD.org 87160725Ssimon case $a2 in 88160725Ssimon 512|512mb) 89160725Ssimon # MC512CFLS2 90160725Ssimon NANO_MEDIASIZE=`expr 519192576 / 512` 91160725Ssimon NANO_HEADS=16 92160725Ssimon NANO_SECTS=63 93160725Ssimon ;; 94160725Ssimon *) 95160725Ssimon echo "Unknown Memory Corp Flash capacity" 96160725Ssimon exit 2 97160725Ssimon ;; 98160725Ssimon esac 99160725Ssimon ;; 100154068Sphk sandisk) 101150367Sphk # Source: 102150367Sphk # SanDisk CompactFlash Memory Card 103150367Sphk # Product Manual 104150367Sphk # Version 10.9 105150367Sphk # Document No. 20-10-00038 106150367Sphk # April 2005 107150367Sphk # Table 2-7 108150367Sphk # NB: notice math error in SDCFJ-4096-388 line. 109150367Sphk # 110154068Sphk case $a2 in 111154068Sphk 32|32mb) 112150367Sphk NANO_MEDIASIZE=`expr 32112640 / 512` 113150367Sphk NANO_HEADS=4 114150367Sphk NANO_SECTS=32 115150367Sphk ;; 116154068Sphk 64|64mb) 117150367Sphk NANO_MEDIASIZE=`expr 64225280 / 512` 118150367Sphk NANO_HEADS=8 119150367Sphk NANO_SECTS=32 120150367Sphk ;; 121154068Sphk 128|128mb) 122150367Sphk NANO_MEDIASIZE=`expr 128450560 / 512` 123150367Sphk NANO_HEADS=8 124150367Sphk NANO_SECTS=32 125150367Sphk ;; 126154068Sphk 256|256mb) 127150367Sphk NANO_MEDIASIZE=`expr 256901120 / 512` 128150367Sphk NANO_HEADS=16 129150367Sphk NANO_SECTS=32 130150367Sphk ;; 131154068Sphk 512|512mb) 132150367Sphk NANO_MEDIASIZE=`expr 512483328 / 512` 133150367Sphk NANO_HEADS=16 134150367Sphk NANO_SECTS=63 135150367Sphk ;; 136154068Sphk 1024|1024mb|1g) 137150367Sphk NANO_MEDIASIZE=`expr 1024966656 / 512` 138150367Sphk NANO_HEADS=16 139150367Sphk NANO_SECTS=63 140150367Sphk ;; 141154068Sphk 2048|2048mb|2g) 142150367Sphk NANO_MEDIASIZE=`expr 2048901120 / 512` 143150367Sphk NANO_HEADS=16 144150367Sphk NANO_SECTS=63 145150367Sphk ;; 146154068Sphk 4096|4096mb|4g) 147181631Santoine NANO_MEDIASIZE=`expr -e 4097802240 / 512` 148150367Sphk NANO_HEADS=16 149150367Sphk NANO_SECTS=63 150150367Sphk ;; 151150367Sphk *) 152150367Sphk echo "Unknown Sandisk Flash capacity" 153150367Sphk exit 2 154150367Sphk ;; 155150367Sphk esac 156150367Sphk ;; 157154068Sphk siliconsystems) 158181631Santoine case $a2 in 159194285Sedwin 256|256mb) 160194285Sedwin NANO_MEDIASIZE=`expr 260571136 / 512` 161194285Sedwin NANO_HEADS=16 162194285Sedwin NANO_SECTS=32 163194285Sedwin ;; 164154068Sphk 4096|4g) 165181631Santoine NANO_MEDIASIZE=`expr -e 4224761856 / 512` 166154068Sphk NANO_HEADS=16 167154068Sphk NANO_SECTS=63 168154068Sphk ;; 169154068Sphk *) 170154068Sphk echo "Unknown SiliconSystems Flash capacity" 171154068Sphk exit 2 172154068Sphk ;; 173154068Sphk esac 174154068Sphk ;; 175154068Sphk soekris) 176181631Santoine case $a2 in 177154068Sphk net4526 | 4526 | net4826 | 4826 | 64 | 64mb) 178150367Sphk NANO_MEDIASIZE=125056 179150367Sphk NANO_HEADS=4 180150367Sphk NANO_SECTS=32 181150367Sphk ;; 182150367Sphk *) 183150367Sphk echo "Unknown Soekris Flash capacity" 184150367Sphk exit 2 185150367Sphk ;; 186150367Sphk esac 187150367Sphk ;; 188154068Sphk transcend) 189181631Santoine case $a2 in 190154068Sphk dom064m) 191154068Sphk NANO_MEDIASIZE=125184 192154068Sphk NANO_HEADS=4 193154068Sphk NANO_SECTS=32 194152458Sphk ;; 195164331Sbenno 2048|2g) 196164331Sbenno NANO_MEDIASIZE=4061232 197164331Sbenno NANO_HEADS=16 198164331Sbenno NANO_SECTS=32 199164331Sbenno ;; 200152458Sphk *) 201154068Sphk echo "Unknown Transcend Flash capacity" 202152458Sphk exit 2 203152458Sphk ;; 204152458Sphk esac 205152458Sphk ;; 206218528Simp # Generic flash media. It assumes that we're booting using packet 207218528Simp # mode so the HEADS and SECTS don't matter. The truncation of the 208218528Simp # size to a slightly lower number is intentional to be conservative 209218528Simp # (eg, 1 sector smaller than N GB is always smaller than any flash 210218528Simp # claiming to be N GB, but wastes a little space sometimes when 1GB 211218528Simp # really means 1GiB). This is intended to be used when producing 212218528Simp # generic images for anybody to boot. Media sizes are specified 'Xg' 213218528Simp # for X GB (10^9 bytes) flash or Xm for X MB (10^6 bytes) flash. 214218528Simp # Power of 2 variants can be specified with gi or mi for GiB and MiB 215218528Simp # sizeed flash and don't try to be conservative (use with caution). 216218528Simp generic) 217218528Simp case $a2 in 218218528Simp *.*) # Catch unsupported 1.5g case, since expr can't 219218528Simp # cope with floats. 220218528Simp echo "Unsupported generic size $a2" 221218528Simp exit 2 222218528Simp ;; 223218528Simp *m) 224218528Simp NANO_HEADS=16 225218528Simp NANO_SECTS=63 226218528Simp NANO_MEDIASIZE=`expr -e ${a2%m} \* 1000000 / 512` 227218528Simp ;; 228218528Simp *g) 229218528Simp NANO_HEADS=16 230218528Simp NANO_SECTS=63 231218528Simp NANO_MEDIASIZE=`expr -e ${a2%g} \* 1000000000 / 512` 232218528Simp ;; 233218528Simp *mi) 234218528Simp NANO_HEADS=16 235218528Simp NANO_SECTS=63 236218528Simp NANO_MEDIASIZE=`expr -e ${a2%mi} \* 1024 \* 1024 / 512` 237218528Simp ;; 238218528Simp *gi) 239218528Simp NANO_HEADS=16 240218528Simp NANO_SECTS=63 241218528Simp NANO_MEDIASIZE=`expr -e ${a2%gi} \* 1024 \* 1024 \* 1024 / 512` 242218528Simp ;; 243218528Simp *) 244218528Simp echo "Unsupported generic size $a2" 245218528Simp exit 2 246218528Simp ;; 247218528Simp esac 248218528Simp ;; 249150367Sphk *) 250150367Sphk echo "Unknown Flash manufacturer" 251150367Sphk exit 2 252150367Sphk ;; 253150367Sphk esac 254150367Sphk} 255