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