]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - tools/tools/nanobsd/FlashDevice.sub
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / tools / tools / nanobsd / FlashDevice.sub
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
39 sub_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 }