1#!/bin/sh 2# 3# Copyright (c) 2005 Poul-Henning Kamp. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD$ 28# 29# Convenience function for commonly used Flash devices. 30# 31# There is a hook over in nanobsd.sh which allows you to call into 32# this function simply with a line like: 33# 34# FlashDevice Sandisk 256 35# 36# This file will then set NANO_MEDIASIZE, NANO_HEADS and NANO_SECTS for you. 37# 38 39sub_FlashDevice () { 40 41 a1=`echo $1 | tr '[:upper:]' '[:lower:]'` 42 a2=`echo $2 | tr '[:upper:]' '[:lower:]'` 43 case $a1 in 44 hitachi) 45 case $a2 in 46 256|256mb) 47 NANO_MEDIASIZE=`expr 256204800 / 512` 48 NANO_HEADS=15 49 NANO_SECTS=48 50 ;; 51 *) 52 echo "Unknown Hitachi Flash capacity" 53 exit 2 54 ;; 55 esac 56 ;; 57 integral) 58 # Source: mich@FreeBSD.org 59 case $a2 in 60 256|256mb) 61 NANO_MEDIASIZE=`expr 259596288 / 512` 62 NANO_HEADS=16 63 NANO_SECTS=63 64 ;; 65 *) 66 echo "Unknown Integral i-Pro Flash capacity" 67 exit 2 68 ;; 69 esac 70 ;; 71 kodak) 72 # Source: mwlucas@FreeBSD.org 73 case $a2 in 74 64|64mb) 75 NANO_MEDIASIZE=`expr 64487424 / 512` 76 NANO_HEADS=4 77 NANO_SECTS=32 78 ;; 79 *) 80 echo "Unknown Kodak Flash capacity" 81 exit 2 82 ;; 83 esac 84 ;; 85 memorycorp) 86 # Source: simon@FreeBSD.org 87 case $a2 in 88 512|512mb) 89 # MC512CFLS2 90 NANO_MEDIASIZE=`expr 519192576 / 512` 91 NANO_HEADS=16 92 NANO_SECTS=63 93 ;; 94 *) 95 echo "Unknown Memory Corp Flash capacity" 96 exit 2 97 ;; 98 esac 99 ;; 100 sandisk) 101 # Source: 102 # SanDisk CompactFlash Memory Card 103 # Product Manual 104 # Version 10.9 105 # Document No. 20-10-00038 106 # April 2005 107 # Table 2-7 108 # NB: notice math error in SDCFJ-4096-388 line. 109 # 110 case $a2 in 111 32|32mb) 112 NANO_MEDIASIZE=`expr 32112640 / 512` 113 NANO_HEADS=4 114 NANO_SECTS=32 115 ;; 116 64|64mb) 117 NANO_MEDIASIZE=`expr 64225280 / 512` 118 NANO_HEADS=8 119 NANO_SECTS=32 120 ;; 121 128|128mb) 122 NANO_MEDIASIZE=`expr 128450560 / 512` 123 NANO_HEADS=8 124 NANO_SECTS=32 125 ;; 126 256|256mb) 127 NANO_MEDIASIZE=`expr 256901120 / 512` 128 NANO_HEADS=16 129 NANO_SECTS=32 130 ;; 131 512|512mb) 132 NANO_MEDIASIZE=`expr 512483328 / 512` 133 NANO_HEADS=16 134 NANO_SECTS=63 135 ;; 136 1024|1024mb|1g) 137 NANO_MEDIASIZE=`expr 1024966656 / 512` 138 NANO_HEADS=16 139 NANO_SECTS=63 140 ;; 141 2048|2048mb|2g) 142 NANO_MEDIASIZE=`expr 2048901120 / 512` 143 NANO_HEADS=16 144 NANO_SECTS=63 145 ;; 146 4096|4096mb|4g) 147 NANO_MEDIASIZE=`expr -e 4097802240 / 512` 148 NANO_HEADS=16 149 NANO_SECTS=63 150 ;; 151 *) 152 echo "Unknown Sandisk Flash capacity" 153 exit 2 154 ;; 155 esac 156 ;; 157 siliconsystems) 158 case $a2 in 159 256|256mb) 160 NANO_MEDIASIZE=`expr 260571136 / 512` 161 NANO_HEADS=16 162 NANO_SECTS=32 163 ;; 164 4096|4g) 165 NANO_MEDIASIZE=`expr -e 4224761856 / 512` 166 NANO_HEADS=16 167 NANO_SECTS=63 168 ;; 169 *) 170 echo "Unknown SiliconSystems Flash capacity" 171 exit 2 172 ;; 173 esac 174 ;; 175 soekris) 176 case $a2 in 177 net4526 | 4526 | net4826 | 4826 | 64 | 64mb) 178 NANO_MEDIASIZE=125056 179 NANO_HEADS=4 180 NANO_SECTS=32 181 ;; 182 *) 183 echo "Unknown Soekris Flash capacity" 184 exit 2 185 ;; 186 esac 187 ;; 188 transcend) 189 case $a2 in 190 dom064m) 191 NANO_MEDIASIZE=125184 192 NANO_HEADS=4 193 NANO_SECTS=32 194 ;; 195 2048|2g) 196 NANO_MEDIASIZE=4061232 197 NANO_HEADS=16 198 NANO_SECTS=32 199 ;; 200 *) 201 echo "Unknown Transcend Flash capacity" 202 exit 2 203 ;; 204 esac 205 ;; 206 # Generic flash media. It assumes that we're booting using packet 207 # mode so the HEADS and SECTS don't matter. The truncation of the 208 # size to a slightly lower number is intentional to be conservative 209 # (eg, 1 sector smaller than N GB is always smaller than any flash 210 # claiming to be N GB, but wastes a little space sometimes when 1GB 211 # really means 1GiB). This is intended to be used when producing 212 # generic images for anybody to boot. Media sizes are specified 'Xg' 213 # for X GB (10^9 bytes) flash or Xm for X MB (10^6 bytes) flash. 214 # Power of 2 variants can be specified with gi or mi for GiB and MiB 215 # sizeed flash and don't try to be conservative (use with caution). 216 generic) 217 case $a2 in 218 *.*) # Catch unsupported 1.5g case, since expr can't 219 # cope with floats. 220 echo "Unsupported generic size $a2" 221 exit 2 222 ;; 223 *m) 224 NANO_HEADS=16 225 NANO_SECTS=63 226 NANO_MEDIASIZE=`expr -e ${a2%m} \* 1000000 / 512` 227 ;; 228 *g) 229 NANO_HEADS=16 230 NANO_SECTS=63 231 NANO_MEDIASIZE=`expr -e ${a2%g} \* 1000000000 / 512` 232 ;; 233 *mi) 234 NANO_HEADS=16 235 NANO_SECTS=63 236 NANO_MEDIASIZE=`expr -e ${a2%mi} \* 1024 \* 1024 / 512` 237 ;; 238 *gi) 239 NANO_HEADS=16 240 NANO_SECTS=63 241 NANO_MEDIASIZE=`expr -e ${a2%gi} \* 1024 \* 1024 \* 1024 / 512` 242 ;; 243 *) 244 echo "Unsupported generic size $a2" 245 exit 2 246 ;; 247 esac 248 ;; 249 *) 250 echo "Unknown Flash manufacturer" 251 exit 2 252 ;; 253 esac 254} 255