Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91a0ce965d |
No files matched your search
-60
@@ -1,60 +0,0 @@
|
||||
#
|
||||
# NOTE! Don't add files that are generated in specific
|
||||
# subdirectories here. Add them in the ".gitignore" file
|
||||
# in that subdirectory instead.
|
||||
#
|
||||
# Normal rules
|
||||
#
|
||||
|
||||
*.rej
|
||||
*.orig
|
||||
*.a
|
||||
*.o
|
||||
*~
|
||||
*.swp
|
||||
*.patch
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
#
|
||||
|
||||
/System.map
|
||||
/u-boot
|
||||
/u-boot.hex
|
||||
/u-boot.map
|
||||
/u-boot.bin
|
||||
/u-boot.srec
|
||||
/u-boot.ldr
|
||||
/u-boot.ldr.hex
|
||||
/u-boot.ldr.srec
|
||||
/u-boot-onenand.bin
|
||||
/u-boot-flexonenand.bin
|
||||
|
||||
#
|
||||
# Generated files
|
||||
#
|
||||
|
||||
*.depend
|
||||
/LOG
|
||||
/errlog
|
||||
/reloc_off
|
||||
|
||||
# stgit generated dirs
|
||||
patches-*
|
||||
.stgit-edit.txt
|
||||
|
||||
# quilt's files
|
||||
patches
|
||||
series
|
||||
|
||||
# cscope files
|
||||
cscope.*
|
||||
|
||||
# tags files
|
||||
/ctags
|
||||
/etags
|
||||
|
||||
# OneNAND IPL files
|
||||
/onenand_ipl/onenand-ipl*
|
||||
/onenand_ipl/board/*/onenand*
|
||||
/onenand_ipl/board/*/*.S
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,21 +1,3 @@
|
||||
NOTE! This copyright does *not* cover the so-called "standalone"
|
||||
applications that use U-Boot services by means of the jump table
|
||||
provided by U-Boot exactly for this purpose - this is merely
|
||||
considered normal use of U-Boot, and does *not* fall under the
|
||||
heading of "derived work".
|
||||
|
||||
The header files "include/image.h" and "include/asm-*/u-boot.h"
|
||||
define interfaces to U-Boot. Including these (unmodified) header
|
||||
files in another file is considered normal use of U-Boot, and does
|
||||
*not* fall under the heading of "derived work".
|
||||
|
||||
Also note that the GPL below is copyrighted by the Free Software
|
||||
Foundation, but the instance of code that it refers to (the U-Boot
|
||||
source code) is copyrighted by me and others who actually wrote it.
|
||||
-- Wolfgang Denk
|
||||
|
||||
=======================================================================
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
|
||||
@@ -18,41 +18,26 @@ N: Dr. Bruno Achauer
|
||||
E: bruno@exet-ag.de
|
||||
D: Support for NetBSD (both as host and target system)
|
||||
|
||||
N: Guillaume Alexandre
|
||||
E: guillaume.alexandre@gespac.ch
|
||||
D: Add PCIPPC6 configuration
|
||||
|
||||
N: Swen Anderson
|
||||
E: sand@peppercon.de
|
||||
D: ERIC Support
|
||||
|
||||
N: Guillaume Alexandre
|
||||
E: guillaume.alexandre@gespac.ch
|
||||
D: Add PCIPPC6 configuration
|
||||
|
||||
N: Pantelis Antoniou
|
||||
E: panto@intracom.gr
|
||||
D: NETVIA & NETPHONE board support, ARTOS support.
|
||||
D: Support for Silicon Turnkey eXpress XTc
|
||||
D: NETVIA board support, ARTOS support.
|
||||
|
||||
N: Pierre Aubert
|
||||
E: <p.aubert@staubli.com>
|
||||
D: Support for RPXClassic board
|
||||
|
||||
N: Yuli Barcohen
|
||||
E: yuli@arabellasw.com
|
||||
D: Unified support for Motorola MPC826xADS/MPC8272ADS/PQ2FADS boards.
|
||||
D: Support for Zephyr Engineering ZPC.1900 board.
|
||||
D: Support for Interphase iSPAN boards.
|
||||
D: Support for Analogue&Micro Adder boards.
|
||||
D: Support for Analogue&Micro Rattler boards.
|
||||
W: http://www.arabellasw.com
|
||||
|
||||
N: Jerry van Baren
|
||||
E: <vanbaren@cideas.com>
|
||||
D: BedBug port to 603e core (MPC82xx). Code for enhanced memory test.
|
||||
|
||||
N: Pavel Bartusek
|
||||
E: <pba@sysgo.com>
|
||||
D: Reiserfs support
|
||||
W: http://www.elinos.com
|
||||
|
||||
N: Andre Beaudin
|
||||
E: <andre.beaudin@colubris.com>
|
||||
D: PCMCIA, Ethernet, TFTP
|
||||
@@ -65,12 +50,6 @@ N: Raphael Bossek
|
||||
E: raphael.bossek@solutions4linux.de
|
||||
D: 8xxrom-0.3.0
|
||||
|
||||
N: Cliff Brake
|
||||
E: cliff.brake@gmail.com
|
||||
D: Port to Vibren PXA255 IDP platform
|
||||
W: http://www.vibren.com
|
||||
W: http://bec-systems.com
|
||||
|
||||
N: Rick Bronson
|
||||
E: rick@efn.org
|
||||
D: Atmel AT91RM9200DK and NAND support
|
||||
@@ -83,12 +62,6 @@ N: Oliver Brown
|
||||
E: obrown@adventnetworks.com
|
||||
D: Port to the gw8260 board
|
||||
|
||||
N: Curt Brune
|
||||
E: curt@cucy.com
|
||||
D: Added support for Samsung S3C4510B CPU (ARM7tdmi based SoC)
|
||||
D: Added support for ESPD-Inc. EVB4510 Board
|
||||
W: http://www.cucy.com
|
||||
|
||||
N: Jonathan De Bruyne
|
||||
E: jonathan.debruyne@siemens.atea.be
|
||||
D: Port to Siemens IAD210 board
|
||||
@@ -102,22 +75,14 @@ E: clark@esteem.com
|
||||
D: ESTEEM192E support
|
||||
|
||||
N: Magnus Damm
|
||||
E: damm@opensource.se
|
||||
E: eramdam@kieray1.p.y.ki.era.ericsson.se
|
||||
D: 8xxrom
|
||||
|
||||
N: Richard Danter
|
||||
E: richard.danter@windriver.com
|
||||
D: Support for Wind River PPMC 7xx/74xx boards
|
||||
|
||||
N: George G. Davis
|
||||
E: gdavis@mvista.com
|
||||
D: Board ports for ADS GraphicsClient+ and Intel Assabet
|
||||
|
||||
N: Arun Dharankar
|
||||
E: ADharankar@ATTBI.Com
|
||||
D: threads / scheduler example code
|
||||
|
||||
N: K?ri Dav??sson
|
||||
N: Kári Davíðsson
|
||||
E: kd@flaga.is
|
||||
D: FLAGA DM Support
|
||||
|
||||
@@ -138,20 +103,10 @@ N: Dave Ellis
|
||||
E: DGE@sixnetio.com
|
||||
D: EEPROM Speedup, SXNI855T port
|
||||
|
||||
N: Thomas Elste
|
||||
E: info@elste.org
|
||||
D: Port for the ModNET50 Board, NET+50 CPU Port
|
||||
W: http://www.imms.de
|
||||
|
||||
N: Daniel Engstr?m
|
||||
N: Daniel Engström
|
||||
E: daniel@omicron.se
|
||||
D: x86 port, Support for sc520_cdp board
|
||||
|
||||
N: Hayden Fraser
|
||||
E: Hayden.Fraser@freescale.com
|
||||
D: Support for ColdFire MCF5253
|
||||
W: www.freescale.com
|
||||
|
||||
N: Dr. Wolfgang Grandegger
|
||||
E: wg@denx.de
|
||||
D: Support for Interphase 4539 T1/E1/J1 PMC, PN62, CCM, SCM boards
|
||||
@@ -165,15 +120,6 @@ N: Thomas Frieden
|
||||
E: ThomasF@hyperion-entertainment.com
|
||||
D: Support for AmigaOne
|
||||
|
||||
N: Niklaus Giger
|
||||
E: niklaus.giger@netstal.com
|
||||
D: Support for HCU(x) boards
|
||||
W: www.netstal.com
|
||||
|
||||
N: Paul Gortmaker
|
||||
E: paul.gortmaker@windriver.com
|
||||
D: Support for WRS SBC8347/8349 boards
|
||||
|
||||
N: Frank Gottschling
|
||||
E: fgottschling@eltec.de
|
||||
D: Support for ELTEC MHPC/BAB7xx/ELPPC boards, cfb-console, i8042, SMI LynxEM
|
||||
@@ -217,123 +163,45 @@ H: Rich Ireland
|
||||
E: r.ireland@computer.org
|
||||
D: FPGA device configuration driver
|
||||
|
||||
H: Mark Jackson
|
||||
E: mpfj@mimc.co.uk
|
||||
D: Port to MIMC200 board
|
||||
|
||||
N: Gary Jennejohn
|
||||
E: garyj@jennejohn.org, gj@denx.de
|
||||
D: Support for Samsung ARM920T S3C2400X, ARM920T "TRAB"
|
||||
W: www.denx.de
|
||||
|
||||
N: Murray Jensen
|
||||
E: Murray.Jensen@csiro.au
|
||||
E: Murray.Jensen@cmst.csiro.au
|
||||
D: Initial 8260 support; GDB support
|
||||
D: Port to Cogent+Hymod boards; Hymod Board Database
|
||||
W: http://www.msa.cmst.csiro.au/ourstaff/MurrayJensen/mjj.html
|
||||
|
||||
N: Yoo. Jonghoon
|
||||
E: yooth@ipone.co.kr
|
||||
D: Added port to the RPXlite board
|
||||
|
||||
N: Mark Jonas
|
||||
E: mark.jonas@freescale.com
|
||||
D: Support for Freescale Total5200 platform
|
||||
W: http://www.mobilegt.com/
|
||||
|
||||
N: Mark Jonas
|
||||
E: mark.jonas@de.bosch.com
|
||||
D: Support for MPR2 board
|
||||
|
||||
N: Sam Song
|
||||
E: samsongshu@yahoo.com.cn
|
||||
D: Port to the RPXlite_DW board
|
||||
|
||||
N: Brad Kemp
|
||||
E: Brad.Kemp@seranoa.com
|
||||
D: Port to Windriver ppmc8260 board
|
||||
|
||||
N: Sangmoon Kim
|
||||
E: dogoil@etinsys.com
|
||||
D: Support for debris board
|
||||
D: Support for KVME080 board
|
||||
|
||||
N: Frederick W. Klatt
|
||||
E: fred.klatt@windriver.com
|
||||
D: Support for Wind River SBC8540/SBC8560 boards
|
||||
|
||||
N: Thomas Koeller
|
||||
E: tkoeller@gmx.net
|
||||
D: Port to Motorola Sandpoint 3 (MPC8240)
|
||||
|
||||
N: Raghu Krishnaprasad
|
||||
E: Raghu.Krishnaprasad@fci.com
|
||||
D: Support for Adder-II MPC852T evaluation board
|
||||
W: http://www.forcecomputers.com
|
||||
|
||||
N: Sergey Kubushyn
|
||||
E: ksi@koi8.net
|
||||
D: Support for various TI DaVinci based boards.
|
||||
|
||||
N: Bernhard Kuhn
|
||||
E: bkuhn@metrowerks.com
|
||||
D Support for Coldfire CPU; Support for Motorola M5272C3 and M5282EVB boards
|
||||
|
||||
N: Prakash Kumar
|
||||
E: prakash@embedx.com
|
||||
D Support for Intrinsyc CERF PXA250 board.
|
||||
|
||||
N: Thomas Lange
|
||||
E: thomas@corelatus.se
|
||||
D: Support for GTH, GTH2 and dbau1x00 boards; lots of PCMCIA fixes
|
||||
|
||||
N: Marc Leeman
|
||||
E: marc.leeman@barco.com
|
||||
D: Support for Barco Streaming Video Card (SVC) and Sample Compress Network (SCN)
|
||||
W: www.barco.com
|
||||
E: thomas@corelatus.com
|
||||
D: Support for GTH board; lots of PCMCIA fixes
|
||||
|
||||
N: The LEOX team
|
||||
E: team@leox.org
|
||||
D: Support for LEOX boards, DS164x RTC
|
||||
W: http://www.leox.org
|
||||
|
||||
N: TsiChung Liew
|
||||
E: Tsi-Chung.Liew@freescale.com
|
||||
D: Support for ColdFire MCF523x, MCF532x, MCF5445x, MCF547x_8x
|
||||
W: www.freescale.com
|
||||
|
||||
N: Leif Lindholm
|
||||
E: leif.lindholm@i3micro.com
|
||||
D: Support for AMD dbau1550 board.
|
||||
|
||||
N: Stephan Linz
|
||||
E: linz@li-pro.net
|
||||
D: Support for Nios Stratix Development Kit (DK-1S10)
|
||||
D: Support for SSV ADNP/ESC1 (Nios Cyclone)
|
||||
W: http://www.li-pro.net
|
||||
|
||||
N: Dave Liu
|
||||
E: daveliu@freescale.com
|
||||
D: Support for MPC8315, MPC832x, MPC8360, MPC837x
|
||||
W: www.freescale.com
|
||||
|
||||
N: Raymond Lo
|
||||
E: lo@routefree.com
|
||||
D: Support for DOS partitions
|
||||
|
||||
N: James MacAulay
|
||||
E: james.macaulay@amirix.com
|
||||
D: Suppport for Amirix AP1000
|
||||
W: www.amirix.com
|
||||
|
||||
N: Dan Malek
|
||||
E: dan@embeddedalley.com
|
||||
E: dan@netx4.com
|
||||
D: FADSROM, the grandfather of all of this
|
||||
D: Support for Silicon Turnkey eXpress XTc
|
||||
|
||||
N: Andrea "llandre" Marson
|
||||
E: andrea.marson@dave-tech.it
|
||||
D: Port to PPChameleonEVB board
|
||||
W: www.dave-tech.it
|
||||
|
||||
N: Reinhard Meyer
|
||||
E: r.meyer@emk-elektronik.de
|
||||
@@ -347,30 +215,15 @@ N: Frank Morauf
|
||||
E: frank.morauf@salzbrenner.com
|
||||
D: Support for Embedded Planet RPX Super Board
|
||||
|
||||
N: David M?ller
|
||||
N: David Müller
|
||||
E: d.mueller@elsoft.ch
|
||||
D: Support for Samsung ARM920T SMDK2410 eval board
|
||||
|
||||
N: Scott McNutt
|
||||
E: smcnutt@psyent.com
|
||||
D: Support for Altera Nios-32 CPU
|
||||
D: Support for Altera Nios-II CPU
|
||||
D: Support for Nios Cyclone Development Kit (DK-1C20)
|
||||
W: http://www.psyent.com
|
||||
|
||||
N: Rolf Offermanns
|
||||
E: rof@sysgo.de
|
||||
D: Initial support for SSV-DNP1110, SMC91111 driver
|
||||
W: www.elinos.com
|
||||
|
||||
N: John Otken
|
||||
E: jotken@softadvances.com
|
||||
D: Support for AMCC Luan 440SP board
|
||||
|
||||
N: Tolunay Orkun
|
||||
E: torkun@nextio.com
|
||||
D: Support for Cogent CSB272 & CSB472 boards
|
||||
|
||||
N: Keith Outwater
|
||||
E: keith_outwater@mvis.com
|
||||
D: Support for generic/custom MPC860T boards (GEN860T, GEN860T_SC)
|
||||
@@ -385,95 +238,30 @@ D: Support for 4xx SCSI, floppy, CDROM, CT69000 video, ...
|
||||
D: Support for PIP405 board
|
||||
D: Support for MIP405 board
|
||||
|
||||
N: Dave Peverley
|
||||
E: dpeverley@mpc-data.co.uk
|
||||
W: http://www.mpc-data.co.uk
|
||||
D: OMAP730 P2 board support
|
||||
|
||||
N: Bill Pitts
|
||||
E: wlp@mindspring.com
|
||||
D: BedBug embedded debugger code
|
||||
|
||||
N: Daniel Poirot
|
||||
E: dan.poirot@windriver.com
|
||||
D: Support for the Wind River sbc405, sbc8240 board
|
||||
W: http://www.windriver.com
|
||||
|
||||
N: Stelian Pop
|
||||
E: stelian.pop@leadtechdesign.com
|
||||
D: Atmel AT91CAP9ADK support
|
||||
|
||||
N: Ricardo Ribalda Delgado
|
||||
E: ricardo.ribalda@uam.es
|
||||
D: PPC440x5 (Virtex5), ML507 Board, eeprom_simul, adt7460, v5fx30teval
|
||||
D: Virtex ppc440 generic architecture
|
||||
W: http://www.ii.uam.es/~rribalda
|
||||
|
||||
N: Stefan Roese
|
||||
E: sr@denx.de
|
||||
D: AMCC PPC4xx Support
|
||||
W: http://www.denx.de
|
||||
E: stefan.roese@esd-electronics.com
|
||||
D: IBM PPC401/403/405GP Support; Windows environment support
|
||||
|
||||
N: Erwin Rol
|
||||
E: erwin@muffin.org
|
||||
D: boot support for RTEMS
|
||||
|
||||
N: Paul Ruhland
|
||||
E: pruhland@rochester.rr.com
|
||||
D: Port to Logic Zoom LH7A40x SDK board(s)
|
||||
|
||||
N: Neil Russell
|
||||
E: caret@c-side.com
|
||||
D: Author of LiMon-1.4.2, which contributed some ideas
|
||||
|
||||
N: Travis B. Sawyer
|
||||
E: travis.sawyer@sandburst.com
|
||||
D: Support for AMCC PPC440GX, XES XPedite1000 440GX PrPMC board. AMCC 440gx Ref Platform (Ocotea)
|
||||
|
||||
N: Paolo Scaffardi
|
||||
E: arsenio@tin.it
|
||||
D: FADS823 configuration, MPC823 video support, I2C, wireless keyboard, lots more
|
||||
|
||||
N: Andre Schwarz
|
||||
E: andre.schwarz@matrix-vision.de
|
||||
D: Support for Matrix Vision boards (MVBLM7/MVBC_P)
|
||||
|
||||
N: Robert Schwebel
|
||||
E: r.schwebel@pengutronix.de
|
||||
D: Support for csb226, logodl and innokom boards (PXA2xx)
|
||||
|
||||
N: Aaron Sells
|
||||
E: sellsa@embeddedplanet.com
|
||||
D: Support for EP82xxM
|
||||
|
||||
N: Art Shipkowski
|
||||
E: art@videon-central.com
|
||||
D: Support for NetSilicon NS7520
|
||||
D: Support for ColdFire MCF5275
|
||||
|
||||
N: Michal Simek
|
||||
E: monstr@monstr.eu
|
||||
D: Support for Microblaze, ML401, XUPV2P board
|
||||
W: www.monstr.eu
|
||||
|
||||
N: Yasushi Shoji
|
||||
E: yashi@atmark-techno.com
|
||||
D: Support for Xilinx MicroBlaze, for Atmark Techno SUZAKU FPGA board
|
||||
|
||||
N: Kurt Stremerch
|
||||
E: kurt@exys.be
|
||||
D: Support for Exys XSEngine board
|
||||
|
||||
N: Andrea Scian
|
||||
E: andrea.scian@dave-tech.it
|
||||
D: Port to B2 board
|
||||
W: www.dave-tech.it
|
||||
|
||||
N: Timur Tabi
|
||||
E: timur@freescale.com
|
||||
D: Support for MPC8349E-mITX
|
||||
W: www.freescale.com
|
||||
|
||||
N: Rob Taylor
|
||||
E: robt@flyingpig.com
|
||||
D: Port to MBX860T and Sandpoint8240
|
||||
@@ -490,34 +278,17 @@ N: Rune Torgersen
|
||||
E: <runet@innovsys.com>
|
||||
D: Support for Motorola MPC8266ADS board
|
||||
|
||||
N: Greg Ungerer
|
||||
E: greg.ungerer@opengear.com
|
||||
D: Support for ks8695 CPU, and OpenGear cmXXXX boards
|
||||
|
||||
N: David Updegraff
|
||||
E: dave@cray.com
|
||||
D: Port to Cray L1 board; DHCP vendor extensions
|
||||
|
||||
N: Christian Vejlbo
|
||||
E: christian.vejlbo@tellabs.com
|
||||
D: FADS860T ethernet support
|
||||
|
||||
N: Robert Whaley
|
||||
E: rwhaley@applieddata.net
|
||||
D: Port to ARM PXA27x adsvix SBC
|
||||
|
||||
N: Martin Winistoerfer
|
||||
E: martinwinistoerfer@gmx.ch
|
||||
D: Port to MPC555/556 microcontrollers and support for cmi board
|
||||
|
||||
N: Ming-Len Wu
|
||||
E: minglen_wu@techware.com.tw
|
||||
D: Motorola MX1ADS board support
|
||||
W: http://www.techware.com.tw/
|
||||
|
||||
N: Xianghua Xiao
|
||||
E: x.xiao@motorola.com
|
||||
D: Support for Motorola 85xx(PowerQUICC III) chip, MPC8540ADS and MPC8560ADS boards.
|
||||
N: Christian Vejlbo
|
||||
E: christian.vejlbo@tellabs.com
|
||||
D: FADS860T ethernet support
|
||||
|
||||
N: John Zhan
|
||||
E: zhanz@sinovee.com
|
||||
@@ -528,27 +299,6 @@ E: azu@sysgo.de
|
||||
D: Overall improvements on StrongARM, ARM720TDMI; Support for Tuxscreen; initial PCMCIA support for ARM
|
||||
W: www.elinos.com
|
||||
|
||||
N: Nobuhiro Iwamatsu
|
||||
E: iwamatsu@nigauri.org
|
||||
D: Support for SuperH, MS7750SE01 and MS7722SE01 boards.
|
||||
W: http://www.nigauri.org/~iwamatsu/
|
||||
|
||||
N: Alan Lu
|
||||
E: alnalu001@gmail.com
|
||||
D: Support for Artila M-501 starter kit
|
||||
W: http://www.artila.com/
|
||||
|
||||
N: Kimmo Leppala
|
||||
E: kimmo.leppala@sysart.fi
|
||||
D: Support for Artila M-501 starter kit
|
||||
W: http://www.sysart.fi/
|
||||
|
||||
N: Timo Tuunainen
|
||||
E: timo.tuunainen@sysart.fi
|
||||
D: Support for Artila M-501 starter kit
|
||||
W: http://www.sysart.fi/
|
||||
|
||||
N: Philip Balister
|
||||
E: philip@opensdr.com
|
||||
D: Port to Lyrtech SFFSDR development board.
|
||||
W: www.opensdr.com
|
||||
N: Pantelis Antoniou
|
||||
E: panto@intracom.gr
|
||||
D: NETVIA board support, ARTOS support.
|
||||
+148
-631
@@ -4,7 +4,7 @@
|
||||
# #
|
||||
# For any board without permanent maintainer, please contact #
|
||||
# Wolfgang Denk <wd@denx.de> #
|
||||
# and Cc: the <u-boot@lists.denx.de> mailing list. #
|
||||
# and Cc: the <U-Boot-Users@lists.sourceforge.net> mailing lists. #
|
||||
# #
|
||||
# Note: lists sorted by Maintainer Name #
|
||||
#########################################################################
|
||||
@@ -14,789 +14,306 @@
|
||||
# PowerPC Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Greg Allen <gallen@arlut.utexas.edu>
|
||||
|
||||
UTX8245 MPC8245
|
||||
UTX8245 MPC8245
|
||||
|
||||
Pantelis Antoniou <panto@intracom.gr>
|
||||
|
||||
NETVIA MPC8xx
|
||||
|
||||
Reinhard Arlt <reinhard.arlt@esd-electronics.com>
|
||||
|
||||
cpci5200 MPC5200
|
||||
mecp5200 MPC5200
|
||||
pf5200 MPC5200
|
||||
|
||||
CPCI750 PPC750FX/GX
|
||||
|
||||
Yuli Barcohen <yuli@arabellasw.com>
|
||||
|
||||
Adder MPC87x/MPC852T
|
||||
ep8248 MPC8248
|
||||
ISPAN MPC8260
|
||||
MPC8260ADS MPC826x/MPC827x/MPC8280
|
||||
Rattler MPC8248
|
||||
ZPC1900 MPC8265
|
||||
|
||||
Michael Barkowski <michael.barkowski@freescale.com>
|
||||
|
||||
MPC8323ERDB MPC8323
|
||||
NETVIA MPC8xx
|
||||
|
||||
Jerry Van Baren <gerald.vanbaren@smiths-aerospace.com>
|
||||
|
||||
sacsng MPC8260
|
||||
sacsng MPC8260
|
||||
|
||||
Rick Bronson <rick@efn.org>
|
||||
|
||||
AT91RM9200DK at91rm9200
|
||||
|
||||
Oliver Brown <obrown@adventnetworks.com>
|
||||
|
||||
gw8260 MPC8260
|
||||
gw8260 MPC8260
|
||||
|
||||
Conn Clark <clark@esteem.com>
|
||||
|
||||
ESTEEM192E MPC8xx
|
||||
|
||||
Joe D'Abbraccio <ljd015@freescale.com>
|
||||
|
||||
MPC837xERDB MPC837x
|
||||
ESTEEM192E MPC8xx
|
||||
|
||||
Kári Davíðsson <kd@flaga.is>
|
||||
|
||||
FLAGADM MPC823
|
||||
|
||||
Torsten Demke <torsten.demke@fci.com>
|
||||
|
||||
eXalion MPC824x
|
||||
FLAGADM MPC823
|
||||
|
||||
Wolfgang Denk <wd@denx.de>
|
||||
|
||||
IceCube_5100 MGT5100
|
||||
IceCube_5200 MPC5200
|
||||
AMX860 MPC860
|
||||
ETX094 MPC850
|
||||
FPS850L MPC850
|
||||
FPS860L MPC860
|
||||
ICU862 MPC862
|
||||
IP860 MPC860
|
||||
IVML24 MPC860
|
||||
IVML24_128 MPC860
|
||||
IVML24_256 MPC860
|
||||
IVMS8 MPC860
|
||||
IVMS8_128 MPC860
|
||||
IVMS8_256 MPC860
|
||||
LANTEC MPC850
|
||||
LWMON MPC823
|
||||
R360MPI MPC823
|
||||
RMU MPC850
|
||||
RRvision MPC823
|
||||
SM850 MPC850
|
||||
SPD823TS MPC823
|
||||
TQM823L MPC823
|
||||
TQM823L_LCD MPC823
|
||||
TQM850L MPC850
|
||||
TQM855L MPC855
|
||||
TQM860L MPC860
|
||||
TQM860L_FEC MPC860
|
||||
TTTech MPC823
|
||||
c2mon MPC855
|
||||
hermes MPC860
|
||||
lwmon MPC823
|
||||
pcu_e MPC855
|
||||
|
||||
AMX860 MPC860
|
||||
ETX094 MPC850
|
||||
FPS850L MPC850
|
||||
FPS860L MPC860
|
||||
ICU862 MPC862
|
||||
IP860 MPC860
|
||||
IVML24 MPC860
|
||||
IVML24_128 MPC860
|
||||
IVML24_256 MPC860
|
||||
IVMS8 MPC860
|
||||
IVMS8_128 MPC860
|
||||
IVMS8_256 MPC860
|
||||
LANTEC MPC850
|
||||
LWMON MPC823
|
||||
NC650 MPC852
|
||||
R360MPI MPC823
|
||||
RMU MPC850
|
||||
RRvision MPC823
|
||||
SM850 MPC850
|
||||
SPD823TS MPC823
|
||||
TQM823L MPC823
|
||||
TQM823L_LCD MPC823
|
||||
TQM850L MPC850
|
||||
TQM855L MPC855
|
||||
TQM860L MPC860
|
||||
TQM860L_FEC MPC860
|
||||
c2mon MPC855
|
||||
hermes MPC860
|
||||
lwmon MPC823
|
||||
pcu_e MPC855
|
||||
CU824 MPC8240
|
||||
Sandpoint8240 MPC8240
|
||||
SL8245 MPC8245
|
||||
|
||||
CU824 MPC8240
|
||||
Sandpoint8240 MPC8240
|
||||
SL8245 MPC8245
|
||||
ATC MPC8250
|
||||
PM825 MPC8250
|
||||
|
||||
ATC MPC8250
|
||||
PM825 MPC8250
|
||||
TQM8255 MPC8255
|
||||
|
||||
TQM8255 MPC8255
|
||||
CPU86 MPC8260
|
||||
PM826 MPC8260
|
||||
TQM8260 MPC8260
|
||||
|
||||
CPU86 MPC8260
|
||||
PM826 MPC8260
|
||||
TQM8260 MPC8260
|
||||
|
||||
P3G4 MPC7410
|
||||
|
||||
PCIPPC2 MPC750
|
||||
PCIPPC6 MPC750
|
||||
|
||||
EXBITGEN PPC405GP
|
||||
PCIPPC2 MPC750
|
||||
PCIPPC6 MPC750
|
||||
|
||||
Jon Diekema <jon.diekema@smiths-aerospace.com>
|
||||
|
||||
sbc8260 MPC8260
|
||||
sbc8260 MPC8260
|
||||
|
||||
Dave Ellis <DGE@sixnetio.com>
|
||||
|
||||
SXNI855T MPC8xx
|
||||
SXNI855T MPC8xx
|
||||
|
||||
Thomas Frieden <ThomasF@hyperion-entertainment.com>
|
||||
|
||||
AmigaOneG3SE MPC7xx
|
||||
|
||||
Matthias Fuchs <matthias.fuchs@esd-electronics.com>
|
||||
|
||||
ADCIOP IOP480 (PPC401)
|
||||
APC405 PPC405GP
|
||||
AR405 PPC405GP
|
||||
ASH405 PPC405EP
|
||||
CANBT PPC405CR
|
||||
CPCI2DP PPC405GP
|
||||
CPCI405 PPC405GP
|
||||
CPCI4052 PPC405GP
|
||||
CPCI405AB PPC405GP
|
||||
CPCI405DT PPC405GP
|
||||
CPCIISER4 PPC405GP
|
||||
DASA_SIM IOP480 (PPC401)
|
||||
DP405 PPC405EP
|
||||
DU405 PPC405GP
|
||||
DU440 PPC440EPx
|
||||
G2000 PPC405EP
|
||||
HH405 PPC405EP
|
||||
HUB405 PPC405EP
|
||||
OCRTC PPC405GP
|
||||
ORSG PPC405GP
|
||||
PCI405 PPC405GP
|
||||
PLU405 PPC405EP
|
||||
PMC405 PPC405GP
|
||||
PMC440 PPC440EPx
|
||||
VOH405 PPC405EP
|
||||
VOM405 PPC405EP
|
||||
WUH405 PPC405EP
|
||||
CMS700 PPC405EP
|
||||
|
||||
Niklaus Giger <niklaus.giger@netstal.com>
|
||||
|
||||
HCU4 PPC405GPr
|
||||
MCU25 PPC405GPr
|
||||
HCU5 PPC440EPx
|
||||
AmigaOneG3SE MPC7xx
|
||||
|
||||
Frank Gottschling <fgottschling@eltec.de>
|
||||
|
||||
MHPC MPC8xx
|
||||
MHPC MPC8xx
|
||||
|
||||
BAB7xx MPC740/MPC750
|
||||
BAB7xx MPC740/MPC750
|
||||
|
||||
Wolfgang Grandegger <wg@denx.de>
|
||||
|
||||
CCM MPC855
|
||||
CCM MPC855
|
||||
|
||||
PN62 MPC8240
|
||||
IPHASE4539 MPC8260
|
||||
SCM MPC8260
|
||||
PN62 MPC8240
|
||||
|
||||
Joe Hamman <joe.hamman@embeddedspecialties.com>
|
||||
IPHASE4539 MPC8260
|
||||
SCM MPC8260
|
||||
|
||||
sbc8548 MPC8548
|
||||
sbc8641d MPC8641D
|
||||
Howard Gray <mvsensor@matrix-vision.de>
|
||||
|
||||
MVS1 MPC823
|
||||
|
||||
Klaus Heydeck <heydeck@kieback-peter.de>
|
||||
|
||||
KUP4K MPC855
|
||||
KUP4X MPC859
|
||||
KUP4K MPC855
|
||||
|
||||
Gary Jennejohn <garyj@denx.de>
|
||||
Murray Jensen <Murray.Jensen@cmst.csiro.au>
|
||||
|
||||
quad100hd PPC405EP
|
||||
cogent_mpc8xx MPC8xx
|
||||
|
||||
Murray Jensen <Murray.Jensen@csiro.au>
|
||||
|
||||
cogent_mpc8xx MPC8xx
|
||||
|
||||
cogent_mpc8260 MPC8260
|
||||
hymod MPC8260
|
||||
|
||||
Larry Johnson <lrj@acm.org>
|
||||
|
||||
korat PPC440EPx
|
||||
cogent_mpc8260 MPC8260
|
||||
hymod MPC8260
|
||||
|
||||
Brad Kemp <Brad.Kemp@seranoa.com>
|
||||
|
||||
ppmc8260 MPC8260
|
||||
|
||||
Sangmoon Kim <dogoil@etinsys.com>
|
||||
|
||||
debris MPC8245
|
||||
KVME080 MPC8245
|
||||
|
||||
Thomas Lange <thomas@corelatus.se>
|
||||
|
||||
GTH MPC860
|
||||
|
||||
Robert Lazarski <robertlazarski@gmail.com>
|
||||
|
||||
ATUM8548 MPC8548
|
||||
|
||||
The LEOX team <team@leox.org>
|
||||
|
||||
ELPT860 MPC860T
|
||||
|
||||
Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
|
||||
linkstation MPC8241
|
||||
|
||||
Dave Liu <daveliu@freescale.com>
|
||||
|
||||
MPC8315ERDB MPC8315
|
||||
MPC832XEMDS MPC832x
|
||||
MPC8360EMDS MPC8360
|
||||
MPC837XEMDS MPC837x
|
||||
ppmc8260 MPC8260
|
||||
|
||||
Nye Liu <nyet@zumanetworks.com>
|
||||
|
||||
ZUMA MPC7xx_74xx
|
||||
ZUMA MPC7xx_74xx
|
||||
|
||||
Jon Loeliger <jdl@freescale.com>
|
||||
Thomas Lange <thomas@corelatus.com>
|
||||
|
||||
MPC8540ADS MPC8540
|
||||
MPC8560ADS MPC8560
|
||||
MPC8541CDS MPC8541
|
||||
MPC8555CDS MPC8555
|
||||
GTH MPC860
|
||||
|
||||
MPC8641HPCN MPC8641D
|
||||
The LEOX team <team@leox.org>
|
||||
|
||||
Dan Malek <dan@embeddedalley.com>
|
||||
|
||||
stxgp3 MPC85xx
|
||||
stxssa MPC85xx
|
||||
stxxtc MPC8xx
|
||||
ELPT860 MPC860T
|
||||
|
||||
Eran Man <eran@nbase.co.il>
|
||||
|
||||
EVB64260_750CX MPC750CX
|
||||
|
||||
Andrea "llandre" Marson <andrea.marson@dave-tech.it>
|
||||
|
||||
PPChameleonEVB PPC405EP
|
||||
EVB64260_750CX MPC750CX
|
||||
|
||||
Reinhard Meyer <r.meyer@emk-elektronik.de>
|
||||
|
||||
TOP860 MPC860T
|
||||
TOP5200 MPC5200
|
||||
TOP860 MPC860
|
||||
|
||||
Tolunay Orkun <torkun@nextio.com>
|
||||
Scott McNutt <smcnutt@artesyncp.com>
|
||||
|
||||
csb272 PPC405GP
|
||||
csb472 PPC405GP
|
||||
|
||||
John Otken <jotken@softadvances.com>
|
||||
|
||||
luan PPC440SP
|
||||
taihu PPC405EP
|
||||
EBONY PPC440GP
|
||||
|
||||
Keith Outwater <Keith_Outwater@mvis.com>
|
||||
|
||||
GEN860T MPC860T
|
||||
GEN860T_SC MPC860T
|
||||
GEN860T MPC860T
|
||||
GEN860T_SC MPC860T
|
||||
|
||||
Frank Panno <fpanno@delphintech.com>
|
||||
|
||||
ep8260 MPC8260
|
||||
ep8260 MPC8260
|
||||
|
||||
Denis Peter <d.peter@mpl.ch>
|
||||
|
||||
MIP405 PPC4xx
|
||||
PIP405 PPC4xx
|
||||
MIP405 PPC4xx
|
||||
PIP405 PPC4xx
|
||||
|
||||
Kim Phillips <kim.phillips@freescale.com>
|
||||
|
||||
MPC8349EMDS MPC8349
|
||||
|
||||
Daniel Poirot <dan.poirot@windriver.com>
|
||||
|
||||
sbc8240 MPC8240
|
||||
sbc405 PPC405GP
|
||||
|
||||
Ricardo Ribalda <ricardo.ribalda@uam.es>
|
||||
|
||||
ml507 PPC440x5
|
||||
v5fx30teval PPC440x5
|
||||
xilinx-pp440-generic PPC440x5
|
||||
|
||||
Stefan Roese <sr@denx.de>
|
||||
|
||||
P3M7448 MPC7448
|
||||
|
||||
uc100 MPC857
|
||||
|
||||
TQM85xx MPC8540/8541/8555/8560
|
||||
|
||||
acadia PPC405EZ
|
||||
alpr PPC440GX
|
||||
bamboo PPC440EP
|
||||
bunbinga PPC405EP
|
||||
canyonlands PPC460EX
|
||||
ebony PPC440GP
|
||||
glacier PPC460GT
|
||||
haleakala PPC405EXr
|
||||
katmai PPC440SPe
|
||||
kilauea PPC405EX
|
||||
lwmon5 PPC440EPx
|
||||
makalu PPC405EX
|
||||
ocotea PPC440GX
|
||||
p3p440 PPC440GP
|
||||
pcs440ep PPC440EP
|
||||
rainier PPC440GRx
|
||||
sequoia PPC440EPx
|
||||
sycamore PPC405GPr
|
||||
taishan PPC440GX
|
||||
walnut PPC405GP
|
||||
yellowstone PPC440GR
|
||||
yosemite PPC440EP
|
||||
zeus PPC405EP
|
||||
|
||||
P3M750 PPC750FX/GX/GL
|
||||
|
||||
Yusdi Santoso <yusdi_santoso@adaptec.com>
|
||||
|
||||
HIDDEN_DRAGON MPC8241/MPC8245
|
||||
|
||||
Travis Sawyer (travis.sawyer@sandburst.com>
|
||||
|
||||
KAREF PPC440GX
|
||||
METROBOX PPC440GX
|
||||
XPEDITE1K PPC440GX
|
||||
|
||||
Heiko Schocher <hs@denx.de>
|
||||
|
||||
ids8247 MPC8247
|
||||
jupiter MPC5200
|
||||
mgcoge MPC8247
|
||||
mgsuvd MPC852
|
||||
mucmc52 MPC5200
|
||||
muas3001 MPC8270
|
||||
municse MPC5200
|
||||
sc3 PPC405GP
|
||||
uc101 MPC5200
|
||||
Stefan Roese <stefan.roese@esd-electronics.com>
|
||||
|
||||
ADCIOP IOP480 (PPC401)
|
||||
AR405 PPC405GP
|
||||
ASH405 PPC405EP
|
||||
CANBT PPC405CR
|
||||
CPCI405 PPC405GP
|
||||
CPCI4052 PPC405GP
|
||||
CPCI405AB PPC405GP
|
||||
CPCI440 PPC440GP
|
||||
CPCIISER4 PPC405GP
|
||||
DASA_SIM IOP480 (PPC401)
|
||||
DU405 PPC405GP
|
||||
OCRTC PPC405GP
|
||||
ORSG PPC405GP
|
||||
PCI405 PPC405GP
|
||||
PMC405 PPC405GP
|
||||
|
||||
Peter De Schrijver <p2@mind.be>
|
||||
|
||||
ML2 PPC4xx
|
||||
|
||||
Andre Schwarz <andre.schwarz@matrix-vision.de>
|
||||
|
||||
mvbc_p MPC5200
|
||||
mvblm7 MPC8343
|
||||
|
||||
Timur Tabi <timur@freescale.com>
|
||||
|
||||
MPC8349E-mITX MPC8349
|
||||
MPC8349E-mITX-GP MPC8349
|
||||
ML2 PPC4xx
|
||||
|
||||
Erik Theisen <etheisen@mindspring.com>
|
||||
|
||||
W7OLMC PPC4xx
|
||||
W7OLMG PPC4xx
|
||||
W7OLMC PPC4xx
|
||||
W7OLMG PPC4xx
|
||||
|
||||
Jim Thompson <jim@musenki.com>
|
||||
|
||||
MUSENKI MPC8245/8241
|
||||
Sandpoint8245 MPC8245
|
||||
MUSENKI MPC8245/8241
|
||||
Sandpoint8245 MPC8245
|
||||
|
||||
Rune Torgersen <runet@innovsys.com>
|
||||
|
||||
MPC8266ADS MPC8266
|
||||
|
||||
|
||||
David Updegraff <dave@cray.com>
|
||||
|
||||
CRAYL1 PPC4xx
|
||||
|
||||
Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
|
||||
MPC8360ERDK MPC8360
|
||||
|
||||
Josef Wagner <Wagner@Microsys.de>
|
||||
|
||||
CPC45 MPC8245
|
||||
PM520 MPC5200
|
||||
|
||||
Stephen Williams <steve@icarus.com>
|
||||
|
||||
JSE PPC405GPr
|
||||
|
||||
Roy Zang <tie-fei.zang@freescale.com>
|
||||
|
||||
mpc7448hpc2 MPC7448
|
||||
MPC8266ADS MPC8266
|
||||
|
||||
John Zhan <zhanz@sinovee.com>
|
||||
|
||||
svm_sc8xx MPC8xx
|
||||
svm_sc8xx MPC8xx
|
||||
|
||||
Feng Kan <fkan@amcc.com>
|
||||
|
||||
redwood PPC4xx
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Unknown / orphaned boards:
|
||||
|
||||
ADS860 MPC8xx
|
||||
FADS823 MPC8xx
|
||||
FADS850SAR MPC8xx
|
||||
FADS860T MPC8xx
|
||||
GENIETV MPC8xx
|
||||
IAD210 MPC8xx
|
||||
MBX MPC8xx
|
||||
MBX860T MPC8xx
|
||||
NX823 MPC8xx
|
||||
RPXClassic MPC8xx
|
||||
RPXlite MPC8xx
|
||||
ADS860 MPC8xx
|
||||
FADS823 MPC8xx
|
||||
FADS850SAR MPC8xx
|
||||
FADS860T MPC8xx
|
||||
GENIETV MPC8xx
|
||||
IAD210 MPC8xx
|
||||
MBX MPC8xx
|
||||
MBX860T MPC8xx
|
||||
NX823 MPC8xx
|
||||
RPXClassic MPC8xx
|
||||
RPXlite MPC8xx
|
||||
|
||||
ERIC PPC4xx
|
||||
CRAYL1 PPC4xx
|
||||
ERIC PPC4xx
|
||||
WALNUT405 PPC4xx
|
||||
|
||||
MOUSSE MPC824x
|
||||
MOUSSE MPC824x
|
||||
|
||||
RPXsuper MPC8260
|
||||
rsdproto MPC8260
|
||||
MPC8260ADS MPC8260
|
||||
RPXsuper MPC8260
|
||||
rsdproto MPC8260
|
||||
|
||||
EVB64260 MPC7xx_74xx
|
||||
EVB64260 MPC7xx_74xx
|
||||
|
||||
|
||||
#########################################################################
|
||||
# ARM Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Rowel Atienza <rowel@diwalabs.com>
|
||||
|
||||
armadillo ARM720T
|
||||
|
||||
Rishi Bhattacharya <rishi@ti.com>
|
||||
|
||||
omap5912osk ARM926EJS
|
||||
|
||||
Cliff Brake <cliff.brake@gmail.com>
|
||||
|
||||
pxa255_idp xscale
|
||||
|
||||
Rick Bronson <rick@efn.org>
|
||||
|
||||
AT91RM9200DK at91rm9200
|
||||
|
||||
George G. Davis <gdavis@mvista.com>
|
||||
|
||||
assabet SA1100
|
||||
gcplus SA1100
|
||||
|
||||
Thomas Elste <info@elste.org>
|
||||
|
||||
modnet50 ARM720T (NET+50)
|
||||
|
||||
Peter Figuli <peposh@etc.sk>
|
||||
|
||||
wepep250 xscale
|
||||
wepep250 xscale
|
||||
|
||||
Marius Gröger <mag@sysgo.de>
|
||||
|
||||
impa7 ARM720T (EP7211)
|
||||
ep7312 ARM720T (EP7312)
|
||||
impa7 ARM720T (EP7211)
|
||||
ep7312 ARM720T (EP7312)
|
||||
|
||||
Kshitij Gupta <kshitij@ti.com>
|
||||
Kyle Harris <kharris@nexus-tech.net>
|
||||
|
||||
omap1510inn ARM925T
|
||||
omap1610inn ARM926EJS
|
||||
|
||||
Sascha Hauer <s.hauer@pengutronix.de>
|
||||
|
||||
imx31_litekit i.MX31
|
||||
imx31_phycore i.MX31
|
||||
lubbock xscale
|
||||
cradle xscale
|
||||
|
||||
Gary Jennejohn <gj@denx.de>
|
||||
|
||||
smdk2400 ARM920T
|
||||
trab ARM920T
|
||||
|
||||
Konstantin Kletschke <kletschke@synertronixx.de>
|
||||
scb9328 ARM920T
|
||||
|
||||
Nishant Kamat <nskamat@ti.com>
|
||||
|
||||
omap1610h2 ARM926EJS
|
||||
|
||||
Sergey Kubushyn <ksi@koi8.net>
|
||||
|
||||
DV-EVM ARM926EJS
|
||||
SONATA ARM926EJS
|
||||
SCHMOOGIE ARM926EJS
|
||||
|
||||
Prakash Kumar <prakash@embedx.com>
|
||||
|
||||
cerf250 xscale
|
||||
|
||||
Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
|
||||
mx31ads i.MX31
|
||||
SMDK6400 S3C6400
|
||||
smdk2400 ARM920T
|
||||
trab ARM920T
|
||||
|
||||
David Müller <d.mueller@elsoft.ch>
|
||||
|
||||
smdk2410 ARM920T
|
||||
VCMA9 ARM920T
|
||||
smdk2410 ARM920T
|
||||
VCMA9 ARM920T
|
||||
|
||||
Rolf Offermanns <rof@sysgo.de>
|
||||
|
||||
shannon SA1100
|
||||
|
||||
Kyungmin Park <kyungmin.park@samsung.com>
|
||||
|
||||
apollon ARM1136EJS
|
||||
|
||||
Peter Pearse <peter.pearse@arm.com>
|
||||
integratorcp All current ARM supplied & supported core modules
|
||||
-see http://www.arm.com/products/DevTools/Hardware_Platforms.html
|
||||
versatile ARM926EJ-S
|
||||
versatile ARM926EJ-S
|
||||
|
||||
Dave Peverley <dpeverley@mpc-data.co.uk>
|
||||
|
||||
omap730p2 ARM926EJS
|
||||
|
||||
Stelian Pop <stelian.pop@leadtechdesign.com>
|
||||
|
||||
at91cap9adk ARM926EJS (AT91CAP9 SoC)
|
||||
at91sam9260ek ARM926EJS (AT91SAM9260 SoC)
|
||||
at91sam9261ek ARM926EJS (AT91SAM9261 SoC)
|
||||
at91sam9263ek ARM926EJS (AT91SAM9263 SoC)
|
||||
at91sam9rlek ARM926EJS (AT91SAM9RL SoC)
|
||||
|
||||
Stefan Roese <sr@denx.de>
|
||||
|
||||
ixdpg425 xscale
|
||||
pdnb3 xscale
|
||||
scpu xscale
|
||||
shannon SA1100
|
||||
|
||||
Robert Schwebel <r.schwebel@pengutronix.de>
|
||||
|
||||
csb226 xscale
|
||||
innokom xscale
|
||||
|
||||
Michael Schwingen <michael@schwingen.org>
|
||||
|
||||
actux1 xscale
|
||||
actux2 xscale
|
||||
actux3 xscale
|
||||
actux4 xscale
|
||||
|
||||
Andrea Scian <andrea.scian@dave-tech.it>
|
||||
|
||||
B2 ARM7TDMI (S3C44B0X)
|
||||
|
||||
Greg Ungerer <greg.ungerer@opengear.com>
|
||||
|
||||
cm4008 ks8695p
|
||||
cm4116 ks8695p
|
||||
cm4148 ks8695p
|
||||
|
||||
Hugo Villeneuve <hugo.villeneuve@lyrtech.com>
|
||||
|
||||
SFFSDR ARM926EJS
|
||||
|
||||
Richard Woodruff <r-woodruff2@ti.com>
|
||||
|
||||
omap2420h4 ARM1136EJS
|
||||
csb226 xscale
|
||||
innokom xscale
|
||||
|
||||
Alex Züpke <azu@sysgo.de>
|
||||
|
||||
lart SA1100
|
||||
dnp1110 SA1110
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Unknown / orphaned boards:
|
||||
Board CPU Last known maintainer / Comment
|
||||
.........................................................................
|
||||
cradle xscale Kyle Harris <kharris@nexus-tech.net> / dead address
|
||||
ixdp425 xscale Kyle Harris <kharris@nexus-tech.net> / dead address
|
||||
lubbock xscale Kyle Harris <kharris@nexus-tech.net> / dead address
|
||||
lart SA1100
|
||||
dnp1110 SA1110
|
||||
|
||||
#########################################################################
|
||||
# x86 Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Daniel Engström <daniel@omicron.se>
|
||||
|
||||
sc520_cdp x86
|
||||
sc520_cdp x86
|
||||
|
||||
#########################################################################
|
||||
# MIPS Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Wolfgang Denk <wd@denx.de>
|
||||
|
||||
incaip MIPS32 4Kc
|
||||
purple MIPS64 5Kc
|
||||
|
||||
Thomas Lange <thomas@corelatus.se>
|
||||
dbau1x00 MIPS32 Au1000
|
||||
gth2 MIPS32 Au1000
|
||||
|
||||
Vlad Lungu <vlad.lungu@windriver.com>
|
||||
qemu_mips MIPS32
|
||||
|
||||
#########################################################################
|
||||
# Nios-32 Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Stephan Linz <linz@li-pro.net>
|
||||
|
||||
DK1S10 Nios-32
|
||||
ADNPESC1 Nios-32
|
||||
|
||||
Scott McNutt <smcnutt@psyent.com>
|
||||
|
||||
DK1C20 Nios-32
|
||||
|
||||
#########################################################################
|
||||
# Nios-II Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Scott McNutt <smcnutt@psyent.com>
|
||||
|
||||
PCI5441 Nios-II
|
||||
PK1C20 Nios-II
|
||||
EP1C20 Nios-II
|
||||
EP1S10 Nios-II
|
||||
EP1S40 Nios-II
|
||||
|
||||
#########################################################################
|
||||
# MicroBlaze Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Yasushi Shoji <yashi@atmark-techno.com>
|
||||
|
||||
SUZAKU MicroBlaze
|
||||
|
||||
Michal Simek <monstr@monstr.eu>
|
||||
|
||||
ML401 MicroBlaze
|
||||
XUPV2P MicroBlaze
|
||||
|
||||
#########################################################################
|
||||
# Coldfire Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Matthias Fuchs <matthias.fuchs@esd-electronics.com>
|
||||
|
||||
TASREG MCF5249
|
||||
|
||||
Hayden Fraser <Hayden.Fraser@freescale.com>
|
||||
|
||||
M5253EVBE mcf52x2
|
||||
|
||||
TsiChung Liew <Tsi-Chung.Liew@freescale.com>
|
||||
|
||||
M52277EVB mcf5227x
|
||||
M5235EVB mcf52x2
|
||||
M5253DEMO mcf52x2
|
||||
M5329EVB mcf532x
|
||||
M5373EVB mcf532x
|
||||
M54455EVB mcf5445x
|
||||
M5475EVB mcf547x_8x
|
||||
M5485EVB mcf547x_8x
|
||||
|
||||
#########################################################################
|
||||
# AVR32 Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
|
||||
|
||||
FAVR-32-EZKIT AT32AP7000
|
||||
|
||||
Mark Jackson <mpfj@mimc.co.uk>
|
||||
|
||||
MIMC200 AT32AP7000
|
||||
|
||||
Alex Raimondi <alex.raimondi@miromico.ch>
|
||||
Julien May <julien.may@miromico.ch>
|
||||
|
||||
HAMMERHEAD AT32AP7000
|
||||
|
||||
Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
|
||||
|
||||
ATSTK1000 AT32AP7xxx
|
||||
ATSTK1002 AT32AP7000
|
||||
ATSTK1003 AT32AP7001
|
||||
ATSTK1004 AT32AP7002
|
||||
ATSTK1006 AT32AP7000
|
||||
ATNGW100 AT32AP7000
|
||||
|
||||
#########################################################################
|
||||
# SuperH Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Yusuke Goda <goda.yusuke@renesas.com>
|
||||
|
||||
MIGO-R SH7722
|
||||
|
||||
Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
<iwamatsu.nobuhiro@renesas.com>
|
||||
|
||||
MS7750SE SH7750
|
||||
MS7722SE SH7722
|
||||
R7780MP SH7780
|
||||
R2DPlus SH7751R
|
||||
SH7763RDP SH7763
|
||||
RSK7203 SH7203
|
||||
AP325RXA SH7723
|
||||
|
||||
Mark Jonas <mark.jonas@de.bosch.com>
|
||||
|
||||
mpr2 SH7720
|
||||
|
||||
Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
|
||||
|
||||
MS7720SE SH7720
|
||||
R0P77850011RL SH7785
|
||||
|
||||
Yusuke Goda <goda.yusuke@renesas.com>
|
||||
|
||||
MIGO-R SH7722
|
||||
|
||||
#########################################################################
|
||||
# Blackfin Systems: #
|
||||
# #
|
||||
# Maintainer Name, Email Address #
|
||||
# Board CPU #
|
||||
#########################################################################
|
||||
|
||||
Mike Frysinger <vapier@gentoo.org>
|
||||
Blackfin Team <u-boot-devel@blackfin.uclinux.org>
|
||||
|
||||
BF533-EZKIT BF533
|
||||
BF533-STAMP BF533
|
||||
BF537-STAMP BF537
|
||||
BF561-EZKIT BF561
|
||||
incaip MIPS32 4Kc
|
||||
purple MIPS64 5Kc
|
||||
|
||||
#########################################################################
|
||||
# End of MAINTAINERS list #
|
||||
|
||||
@@ -1,24 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
: ${JOBS:=}
|
||||
|
||||
if [ "${CROSS_COMPILE}" ] ; then
|
||||
MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
|
||||
else
|
||||
MAKE=make
|
||||
fi
|
||||
|
||||
if [ "${MAKEALL_LOGDIR}" ] ; then
|
||||
LOG_DIR=${MAKEALL_LOGDIR}
|
||||
else
|
||||
LOG_DIR="LOG"
|
||||
fi
|
||||
|
||||
if [ ! "${BUILD_DIR}" ] ; then
|
||||
BUILD_DIR="."
|
||||
fi
|
||||
|
||||
[ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
|
||||
[ -d LOG ] || mkdir LOG || exit 1
|
||||
|
||||
LIST=""
|
||||
|
||||
@@ -26,755 +14,128 @@ LIST=""
|
||||
## MPC5xx Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_5xx=" \
|
||||
cmi_mpc5xx \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC5xxx Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_5xxx=" \
|
||||
BC3450 \
|
||||
cm5200 \
|
||||
cpci5200 \
|
||||
EVAL5200 \
|
||||
fo300 \
|
||||
icecube_5100 \
|
||||
icecube_5200 \
|
||||
inka4x0 \
|
||||
lite5200b \
|
||||
mcc200 \
|
||||
mecp5200 \
|
||||
motionpro \
|
||||
munices \
|
||||
MVBC_P \
|
||||
o2dnt \
|
||||
pf5200 \
|
||||
PM520 \
|
||||
TB5200 \
|
||||
Total5100 \
|
||||
Total5200 \
|
||||
Total5200_Rev2 \
|
||||
TQM5200 \
|
||||
TQM5200_B \
|
||||
TQM5200S \
|
||||
v38b \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC512x Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_512x=" \
|
||||
ads5121 \
|
||||
LIST_5xx=" \
|
||||
cmi_mpc5xx \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC8xx Systems
|
||||
#########################################################################
|
||||
LIST_8xx=" \
|
||||
Adder87x \
|
||||
AdderII \
|
||||
ADS860 \
|
||||
AMX860 \
|
||||
c2mon \
|
||||
CCM \
|
||||
cogent_mpc8xx \
|
||||
ELPT860 \
|
||||
EP88x \
|
||||
ESTEEM192E \
|
||||
ETX094 \
|
||||
FADS823 \
|
||||
FADS850SAR \
|
||||
FADS860T \
|
||||
FLAGADM \
|
||||
FPS850L \
|
||||
GEN860T \
|
||||
GEN860T_SC \
|
||||
GENIETV \
|
||||
GTH \
|
||||
hermes \
|
||||
IAD210 \
|
||||
ICU862_100MHz \
|
||||
IP860 \
|
||||
IVML24 \
|
||||
IVML24_128 \
|
||||
IVML24_256 \
|
||||
IVMS8 \
|
||||
IVMS8_128 \
|
||||
IVMS8_256 \
|
||||
KUP4K \
|
||||
KUP4X \
|
||||
LANTEC \
|
||||
lwmon \
|
||||
MBX \
|
||||
MBX860T \
|
||||
mgsuvd \
|
||||
MHPC \
|
||||
MPC86xADS \
|
||||
MPC885ADS \
|
||||
NETPHONE \
|
||||
NETTA \
|
||||
NETTA2 \
|
||||
NETTA_ISDN \
|
||||
NETVIA \
|
||||
NETVIA_V2 \
|
||||
NX823 \
|
||||
pcu_e \
|
||||
QS823 \
|
||||
QS850 \
|
||||
QS860T \
|
||||
quantum \
|
||||
R360MPI \
|
||||
RBC823 \
|
||||
rmu \
|
||||
RPXClassic \
|
||||
RPXlite \
|
||||
RPXlite_DW \
|
||||
RRvision \
|
||||
SM850 \
|
||||
spc1920 \
|
||||
SPD823TS \
|
||||
svm_sc8xx \
|
||||
SXNI855T \
|
||||
TK885D \
|
||||
TOP860 \
|
||||
TQM823L \
|
||||
TQM823L_LCD \
|
||||
TQM850L \
|
||||
TQM855L \
|
||||
TQM860L \
|
||||
TQM885D \
|
||||
uc100 \
|
||||
v37 \
|
||||
|
||||
LIST_8xx=" \
|
||||
ADS860 AMX860 c2mon CCM \
|
||||
cogent_mpc8xx ESTEEM192E ETX094 ELPT860 \
|
||||
FADS823 FADS850SAR FADS860T FLAGADM \
|
||||
FPS850L GEN860T GEN860T_SC GENIETV \
|
||||
GTH hermes IAD210 ICU862_100MHz \
|
||||
IP860 IVML24 IVML24_128 IVML24_256 \
|
||||
IVMS8 IVMS8_128 IVMS8_256 KUP4K \
|
||||
LANTEC lwmon MBX MBX860T \
|
||||
MHPC MVS1 NETVIA NETVIA_V2 \
|
||||
NX823 pcu_e R360MPI RBC823 \
|
||||
rmu RPXClassic RPXlite RRvision \
|
||||
SM850 SPD823TS svm_sc8xx SXNI855T \
|
||||
TOP860 TQM823L TQM823L_LCD TQM850L \
|
||||
TQM855L TQM860L TTTech v37 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## PPC4xx Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_4xx=" \
|
||||
acadia \
|
||||
acadia_nand \
|
||||
ADCIOP \
|
||||
alpr \
|
||||
AP1000 \
|
||||
AR405 \
|
||||
ASH405 \
|
||||
bamboo \
|
||||
bamboo_nand \
|
||||
bubinga \
|
||||
CANBT \
|
||||
canyonlands \
|
||||
canyonlands_nand \
|
||||
CMS700 \
|
||||
CPCI2DP \
|
||||
CPCI405 \
|
||||
CPCI4052 \
|
||||
CPCI405AB \
|
||||
CPCI405DT \
|
||||
CPCIISER4 \
|
||||
CRAYL1 \
|
||||
csb272 \
|
||||
csb472 \
|
||||
DASA_SIM \
|
||||
DP405 \
|
||||
DU405 \
|
||||
DU440 \
|
||||
ebony \
|
||||
ERIC \
|
||||
EXBITGEN \
|
||||
G2000 \
|
||||
glacier \
|
||||
haleakala \
|
||||
haleakala_nand \
|
||||
hcu4 \
|
||||
hcu5 \
|
||||
HH405 \
|
||||
HUB405 \
|
||||
JSE \
|
||||
KAREF \
|
||||
katmai \
|
||||
kilauea \
|
||||
kilauea_nand \
|
||||
korat \
|
||||
luan \
|
||||
lwmon5 \
|
||||
makalu \
|
||||
mcu25 \
|
||||
METROBOX \
|
||||
MIP405 \
|
||||
MIP405T \
|
||||
ML2 \
|
||||
ml300 \
|
||||
ml507 \
|
||||
ml507_flash \
|
||||
ocotea \
|
||||
OCRTC \
|
||||
ORSG \
|
||||
p3p440 \
|
||||
PCI405 \
|
||||
pcs440ep \
|
||||
PIP405 \
|
||||
PLU405 \
|
||||
PMC405 \
|
||||
PMC440 \
|
||||
PPChameleonEVB \
|
||||
quad100hd \
|
||||
rainier \
|
||||
redwood \
|
||||
sbc405 \
|
||||
sc3 \
|
||||
sequoia \
|
||||
sequoia_nand \
|
||||
taihu \
|
||||
taishan \
|
||||
v5fx30teval \
|
||||
v5fx30teval_flash \
|
||||
VOH405 \
|
||||
VOM405 \
|
||||
W7OLMC \
|
||||
W7OLMG \
|
||||
walnut \
|
||||
WUH405 \
|
||||
xilinx-ppc440-generic \
|
||||
xilinx-ppc440-generic_flash \
|
||||
XPEDITE1K \
|
||||
yellowstone \
|
||||
yosemite \
|
||||
yucca \
|
||||
zeus \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC8220 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_8220=" \
|
||||
Alaska8220 \
|
||||
Yukon8220 \
|
||||
LIST_4xx=" \
|
||||
ADCIOP AR405 ASH405 BUBINGA405EP \
|
||||
CANBT CPCI405 CPCI4052 CPCI405AB \
|
||||
CPCI440 CPCIISER4 CRAYL1 DASA_SIM \
|
||||
DU405 EBONY ERIC MIP405 \
|
||||
MIP405T ML2 OCRTC ORSG \
|
||||
PCI405 PIP405 PMC405 W7OLMC \
|
||||
W7OLMG WALNUT405 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC824x Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_824x=" \
|
||||
A3000 \
|
||||
barco \
|
||||
BMW \
|
||||
CPC45 \
|
||||
CU824 \
|
||||
debris \
|
||||
eXalion \
|
||||
HIDDEN_DRAGON \
|
||||
linkstation_HGLAN \
|
||||
MOUSSE \
|
||||
MUSENKI \
|
||||
MVBLUE \
|
||||
OXC \
|
||||
PN62 \
|
||||
Sandpoint8240 \
|
||||
Sandpoint8245 \
|
||||
sbc8240 \
|
||||
SL8245 \
|
||||
utx8245 \
|
||||
LIST_824x=" \
|
||||
A3000 BMW CPC45 CU824 \
|
||||
MOUSSE MUSENKI OXC PN62 \
|
||||
Sandpoint8240 Sandpoint8245 SL8245 utx8245 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC8260 Systems (includes 8250, 8255 etc.)
|
||||
#########################################################################
|
||||
|
||||
LIST_8260=" \
|
||||
atc \
|
||||
cogent_mpc8260 \
|
||||
CPU86 \
|
||||
CPU87 \
|
||||
ep8248 \
|
||||
ep8260 \
|
||||
ep82xxm \
|
||||
gw8260 \
|
||||
hymod \
|
||||
IPHASE4539 \
|
||||
ISPAN \
|
||||
mgcoge \
|
||||
MPC8260ADS \
|
||||
MPC8266ADS \
|
||||
MPC8272ADS \
|
||||
PM826 \
|
||||
PM828 \
|
||||
ppmc8260 \
|
||||
Rattler8248 \
|
||||
RPXsuper \
|
||||
rsdproto \
|
||||
sacsng \
|
||||
sbc8260 \
|
||||
SCM \
|
||||
TQM8260_AC \
|
||||
TQM8260_AD \
|
||||
TQM8260_AE \
|
||||
TQM8272 \
|
||||
ZPC1900 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC83xx Systems (includes 8349, etc.)
|
||||
#########################################################################
|
||||
|
||||
LIST_83xx=" \
|
||||
MPC8313ERDB_33 \
|
||||
MPC8313ERDB_NAND_66 \
|
||||
MPC8315ERDB \
|
||||
MPC8323ERDB \
|
||||
MPC832XEMDS \
|
||||
MPC832XEMDS_ATM \
|
||||
MPC8349EMDS \
|
||||
MPC8349ITX \
|
||||
MPC8349ITXGP \
|
||||
MPC8360EMDS \
|
||||
MPC8360EMDS_ATM \
|
||||
MPC8360ERDK_33 \
|
||||
MPC8360ERDK_66 \
|
||||
MPC837XEMDS \
|
||||
MPC837XERDB \
|
||||
MVBLM7 \
|
||||
sbc8349 \
|
||||
TQM834x \
|
||||
"
|
||||
|
||||
|
||||
#########################################################################
|
||||
## MPC85xx Systems (includes 8540, 8560 etc.)
|
||||
#########################################################################
|
||||
|
||||
LIST_85xx=" \
|
||||
ATUM8548 \
|
||||
MPC8536DS \
|
||||
MPC8540ADS \
|
||||
MPC8540EVAL \
|
||||
MPC8541CDS \
|
||||
MPC8544DS \
|
||||
MPC8548CDS \
|
||||
MPC8555CDS \
|
||||
MPC8560ADS \
|
||||
MPC8568MDS \
|
||||
MPC8572DS \
|
||||
PM854 \
|
||||
PM856 \
|
||||
sbc8540 \
|
||||
sbc8548 \
|
||||
sbc8560 \
|
||||
socrates \
|
||||
stxgp3 \
|
||||
stxssa \
|
||||
TQM8540 \
|
||||
TQM8541 \
|
||||
TQM8548 \
|
||||
TQM8555 \
|
||||
TQM8560 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MPC86xx Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_86xx=" \
|
||||
MPC8610HPCD \
|
||||
MPC8641HPCN \
|
||||
sbc8641d \
|
||||
LIST_8260=" \
|
||||
atc cogent_mpc8260 CPU86 ep8260 \
|
||||
gw8260 hymod IPHASE4539 MPC8260ADS \
|
||||
MPC8266ADS PM826 ppmc8260 RPXsuper \
|
||||
rsdproto sacsng sbc8260 SCM \
|
||||
TQM8260 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## 74xx/7xx Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_74xx=" \
|
||||
DB64360 \
|
||||
DB64460 \
|
||||
EVB64260 \
|
||||
mpc7448hpc2 \
|
||||
P3G4 \
|
||||
p3m7448 \
|
||||
PCIPPC2 \
|
||||
PCIPPC6 \
|
||||
ZUMA \
|
||||
LIST_74xx=" \
|
||||
EVB64260 PCIPPC2 PCIPPC6 ZUMA \
|
||||
"
|
||||
|
||||
LIST_7xx=" \
|
||||
BAB7xx \
|
||||
CPCI750 \
|
||||
ELPPC \
|
||||
p3m750 \
|
||||
ppmc7xx \
|
||||
LIST_7xx=" \
|
||||
BAB7xx ELPPC \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## PowerPC groups
|
||||
#########################################################################
|
||||
|
||||
LIST_TSEC=" \
|
||||
${LIST_83xx} \
|
||||
${LIST_85xx} \
|
||||
${LIST_86xx} \
|
||||
"
|
||||
|
||||
LIST_ppc=" \
|
||||
${LIST_5xx} \
|
||||
${LIST_512x} \
|
||||
${LIST_5xxx} \
|
||||
${LIST_8xx} \
|
||||
${LIST_8220} \
|
||||
${LIST_824x} \
|
||||
${LIST_8260} \
|
||||
${LIST_83xx} \
|
||||
${LIST_85xx} \
|
||||
${LIST_86xx} \
|
||||
${LIST_4xx} \
|
||||
${LIST_74xx} \
|
||||
${LIST_7xx} \
|
||||
"
|
||||
LIST_ppc="${LIST_5xx} ${LIST_8xx} \
|
||||
${LIST_824x} ${LIST_8260} \
|
||||
${LIST_4xx} \
|
||||
${LIST_74xx} ${LIST_7xx}"
|
||||
|
||||
#########################################################################
|
||||
## StrongARM Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_SA=" \
|
||||
assabet \
|
||||
dnp1110 \
|
||||
gcplus \
|
||||
lart \
|
||||
shannon \
|
||||
"
|
||||
LIST_SA="dnp1110 lart shannon"
|
||||
|
||||
#########################################################################
|
||||
## ARM7 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_ARM7=" \
|
||||
ap7 \
|
||||
ap720t \
|
||||
armadillo \
|
||||
B2 \
|
||||
ep7312 \
|
||||
evb4510 \
|
||||
impa7 \
|
||||
integratorap \
|
||||
lpc2292sodimm \
|
||||
modnet50 \
|
||||
SMN42 \
|
||||
"
|
||||
LIST_ARM7="ep7312 impa7"
|
||||
|
||||
#########################################################################
|
||||
## ARM9 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_ARM9=" \
|
||||
ap920t \
|
||||
ap922_XA10 \
|
||||
ap926ejs \
|
||||
ap946es \
|
||||
ap966 \
|
||||
cp920t \
|
||||
cp922_XA10 \
|
||||
cp926ejs \
|
||||
cp946es \
|
||||
cp966 \
|
||||
lpd7a400 \
|
||||
mx1ads \
|
||||
mx1fs2 \
|
||||
netstar \
|
||||
omap1510inn \
|
||||
omap1610h2 \
|
||||
omap1610inn \
|
||||
omap5912osk \
|
||||
omap730p2 \
|
||||
sbc2410x \
|
||||
scb9328 \
|
||||
smdk2400 \
|
||||
smdk2410 \
|
||||
trab \
|
||||
VCMA9 \
|
||||
versatile \
|
||||
versatileab \
|
||||
versatilepb \
|
||||
voiceblue \
|
||||
davinci_dvevm \
|
||||
davinci_schmoogie \
|
||||
davinci_sffsdr \
|
||||
davinci_sonata \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## ARM10 Systems
|
||||
#########################################################################
|
||||
LIST_ARM10=" \
|
||||
integratorcp \
|
||||
cp1026 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## ARM11 Systems
|
||||
#########################################################################
|
||||
LIST_ARM11=" \
|
||||
cp1136 \
|
||||
omap2420h4 \
|
||||
apollon \
|
||||
imx31_litekit \
|
||||
imx31_phycore \
|
||||
mx31ads \
|
||||
smdk6400 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## AT91 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_at91=" \
|
||||
at91cap9adk \
|
||||
at91rm9200dk \
|
||||
at91sam9260ek \
|
||||
at91sam9261ek \
|
||||
at91sam9263ek \
|
||||
at91sam9rlek \
|
||||
cmc_pu2 \
|
||||
csb637 \
|
||||
kb9202 \
|
||||
mp2usb \
|
||||
m501sk \
|
||||
"
|
||||
LIST_ARM9="at91rm9200dk smdk2400 smdk2410 trab VCMA9"
|
||||
|
||||
#########################################################################
|
||||
## Xscale Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_pxa=" \
|
||||
cerf250 \
|
||||
cradle \
|
||||
csb226 \
|
||||
delta \
|
||||
innokom \
|
||||
lubbock \
|
||||
pleb2 \
|
||||
pxa255_idp \
|
||||
wepep250 \
|
||||
xaeniax \
|
||||
xm250 \
|
||||
xsengine \
|
||||
zylonite \
|
||||
"
|
||||
LIST_pxa="cradle csb226 innokom lubbock wepep250"
|
||||
|
||||
LIST_ixp=" \
|
||||
actux1 \
|
||||
actux2 \
|
||||
actux3 \
|
||||
actux4 \
|
||||
ixdp425 \
|
||||
ixdpg425 \
|
||||
pdnb3 \
|
||||
scpu \
|
||||
"
|
||||
|
||||
LIST_arm="${LIST_SA} ${LIST_ARM7} ${LIST_ARM9} ${LIST_pxa}"
|
||||
|
||||
#########################################################################
|
||||
## ARM groups
|
||||
## MIPS 4Kc Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_arm=" \
|
||||
${LIST_SA} \
|
||||
${LIST_ARM7} \
|
||||
${LIST_ARM9} \
|
||||
${LIST_ARM10} \
|
||||
${LIST_ARM11} \
|
||||
${LIST_at91} \
|
||||
${LIST_pxa} \
|
||||
${LIST_ixp} \
|
||||
"
|
||||
LIST_mips4kc="incaip"
|
||||
|
||||
#########################################################################
|
||||
## MIPS Systems (default = big endian)
|
||||
#########################################################################
|
||||
LIST_mips5kc="purple"
|
||||
|
||||
LIST_mips4kc=" \
|
||||
incaip \
|
||||
qemu_mips \
|
||||
"
|
||||
|
||||
LIST_mips5kc=" \
|
||||
purple \
|
||||
"
|
||||
|
||||
LIST_au1xx0=" \
|
||||
dbau1000 \
|
||||
dbau1100 \
|
||||
dbau1500 \
|
||||
dbau1550 \
|
||||
dbau1550_el \
|
||||
gth2 \
|
||||
"
|
||||
|
||||
LIST_mips=" \
|
||||
${LIST_mips4kc} \
|
||||
${LIST_mips5kc} \
|
||||
${LIST_au1xx0} \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MIPS Systems (little endian)
|
||||
#########################################################################
|
||||
|
||||
LIST_mips4kc_el=""
|
||||
|
||||
LIST_mips5kc_el=""
|
||||
|
||||
LIST_au1xx0_el=" \
|
||||
dbau1550_el \
|
||||
pb1000 \
|
||||
"
|
||||
|
||||
LIST_mips_el=" \
|
||||
${LIST_mips4kc_el} \
|
||||
${LIST_mips5kc_el} \
|
||||
${LIST_au1xx0_el} \
|
||||
"
|
||||
LIST_mips="${LIST_mips4kc} ${LIST_mips5kc}"
|
||||
|
||||
#########################################################################
|
||||
## i386 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_I486=" \
|
||||
sc520_cdp \
|
||||
sc520_spunk \
|
||||
sc520_spunk_rel \
|
||||
"
|
||||
LIST_I486="sc520_cdp sc520_spunk sc520_spunk_rel"
|
||||
|
||||
LIST_x86=" \
|
||||
${LIST_I486} \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## NIOS Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_nios=" \
|
||||
ADNPESC1 \
|
||||
ADNPESC1_base_32 \
|
||||
ADNPESC1_DNPEVA2_base_32\
|
||||
DK1C20 \
|
||||
DK1C20_standard_32 \
|
||||
DK1S10 \
|
||||
DK1S10_standard_32 \
|
||||
DK1S10_mtx_ldk_20 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## Nios-II Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_nios2=" \
|
||||
EP1C20 \
|
||||
EP1S10 \
|
||||
EP1S40 \
|
||||
PCI5441 \
|
||||
PK1C20 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## MicroBlaze Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_microblaze=" \
|
||||
ml401 \
|
||||
suzaku \
|
||||
xupv2p \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## ColdFire Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_coldfire=" \
|
||||
cobra5272 \
|
||||
EB+MCF-EV123 \
|
||||
EB+MCF-EV123_internal \
|
||||
idmr \
|
||||
M52277EVB \
|
||||
M5235EVB \
|
||||
M5249EVB \
|
||||
M5253DEMO \
|
||||
M5253EVBE \
|
||||
M5271EVB \
|
||||
M5272C3 \
|
||||
M5275EVB \
|
||||
M5282EVB \
|
||||
M5329AFEE \
|
||||
M5373EVB \
|
||||
M54451EVB \
|
||||
M54455EVB \
|
||||
M5475AFE \
|
||||
M5485AFE \
|
||||
TASREG \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## AVR32 Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_avr32=" \
|
||||
atstk1002 \
|
||||
atstk1003 \
|
||||
atstk1004 \
|
||||
atstk1006 \
|
||||
atngw100 \
|
||||
favr-32-ezkit \
|
||||
hammerhead \
|
||||
mimc200 \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## Blackfin Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_blackfin=" \
|
||||
bf533-ezkit \
|
||||
bf533-stamp \
|
||||
bf537-stamp \
|
||||
bf561-ezkit \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## SH Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_sh2=" \
|
||||
rsk7203 \
|
||||
"
|
||||
LIST_sh3=" \
|
||||
mpr2 \
|
||||
ms7720se \
|
||||
"
|
||||
|
||||
LIST_sh4=" \
|
||||
ms7750se \
|
||||
ms7722se \
|
||||
MigoR \
|
||||
r7780mp \
|
||||
r2dplus \
|
||||
sh7763rdp \
|
||||
sh7785lcr \
|
||||
ap325rxa \
|
||||
"
|
||||
|
||||
LIST_sh=" \
|
||||
${LIST_sh2} \
|
||||
${LIST_sh3} \
|
||||
${LIST_sh4} \
|
||||
"
|
||||
|
||||
#########################################################################
|
||||
## SPARC Systems
|
||||
#########################################################################
|
||||
|
||||
LIST_sparc="gr_xc3s_1500 gr_cpci_ax2000 gr_ep2s60 grsim grsim_leon2"
|
||||
LIST_x86="${LIST_I486}"
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
|
||||
@@ -788,12 +149,8 @@ build_target() {
|
||||
|
||||
${MAKE} distclean >/dev/null
|
||||
${MAKE} ${target}_config
|
||||
|
||||
${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
|
||||
| tee ${LOG_DIR}/$target.ERR
|
||||
|
||||
${CROSS_COMPILE}size ${BUILD_DIR}/u-boot \
|
||||
| tee -a ${LOG_DIR}/$target.MAKELOG
|
||||
${MAKE} all 2>&1 >LOG/$target.MAKELOG | tee LOG/$target.ERR
|
||||
${CROSS_COMPILE:-ppc_8xx-}size u-boot | tee -a LOG/$target.MAKELOG
|
||||
}
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
@@ -802,18 +159,7 @@ build_target() {
|
||||
for arg in $@
|
||||
do
|
||||
case "$arg" in
|
||||
arm|SA|ARM7|ARM9|ARM10|ARM11|at91|ixp|pxa \
|
||||
|avr32 \
|
||||
|blackfin \
|
||||
|coldfire \
|
||||
|microblaze \
|
||||
|mips|mips_el \
|
||||
|nios|nios2 \
|
||||
|ppc|5xx|5xxx|512x|8xx|8220|824x|8260|83xx|85xx|86xx|4xx|7xx|74xx|TSEC \
|
||||
|sh|sh2|sh3|sh4 \
|
||||
|sparc \
|
||||
|x86|I486 \
|
||||
)
|
||||
5xx|8xx|824x|8260|4xx|7xx|74xx|SA|ARM7|ARM9|ppc|arm|pxa|mips|I486|x86)
|
||||
for target in `eval echo '$LIST_'${arg}`
|
||||
do
|
||||
build_target ${target}
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2007 Semihalf
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 Foundatio; either version 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
|
||||
LIB = $(obj)libapi.a
|
||||
|
||||
COBJS-$(CONFIG_API) += api.o api_net.o api_storage.o api_platform-$(ARCH).o
|
||||
|
||||
COBJS := $(COBJS-y)
|
||||
SRCS := $(COBJS:.o=.c)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
|
||||
$(LIB): $(obj).depend $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
|
||||
sinclude $(obj).depend
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
U-Boot machine/arch independent API for external apps
|
||||
=====================================================
|
||||
|
||||
1. Main assumptions
|
||||
|
||||
- there is a single entry point (syscall) to the API
|
||||
|
||||
- per current design the syscall is a C-callable function in the U-Boot
|
||||
text, which might evolve into a real syscall using machine exception trap
|
||||
once this initial version proves functional
|
||||
|
||||
- the consumer app is responsible for producing appropriate context (call
|
||||
number and arguments)
|
||||
|
||||
- upon entry, the syscall dispatches the call to other (existing) U-Boot
|
||||
functional areas like networking or storage operations
|
||||
|
||||
- consumer application will recognize the API is available by searching
|
||||
a specified (assumed by convention) range of address space for the
|
||||
signature
|
||||
|
||||
- the U-Boot integral part of the API is meant to be thin and non-intrusive,
|
||||
leaving as much processing as possible on the consumer application side,
|
||||
for example it doesn't keep states, but relies on hints from the app and
|
||||
so on
|
||||
|
||||
- optional (CONFIG_API)
|
||||
|
||||
|
||||
2. Calls
|
||||
|
||||
- console related (getc, putc, tstc etc.)
|
||||
- system (reset, platform info)
|
||||
- time (delay, current)
|
||||
- env vars (enumerate all, get, set)
|
||||
- devices (enumerate all, open, close, read, write); currently two classes
|
||||
of devices are recognized and supported: network and storage (ide, scsi,
|
||||
usb etc.)
|
||||
|
||||
|
||||
3. Structure overview
|
||||
|
||||
- core API, integral part of U-Boot, mandatory
|
||||
- implements the single entry point (mimics UNIX syscall)
|
||||
|
||||
- glue
|
||||
- entry point at the consumer side, allows to make syscall, mandatory
|
||||
part
|
||||
|
||||
- helper conveniency wrappers so that consumer app does not have to use
|
||||
the syscall directly, but in a more friendly manner (a la libc calls),
|
||||
optional part
|
||||
|
||||
- consumer application
|
||||
- calls directly, or leverages the provided glue mid-layer
|
||||
@@ -1,669 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined(CONFIG_API)
|
||||
|
||||
#include <command.h>
|
||||
#include <common.h>
|
||||
#include <malloc.h>
|
||||
#include <environment.h>
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include "api_private.h"
|
||||
|
||||
#define DEBUG
|
||||
#undef DEBUG
|
||||
|
||||
/* U-Boot routines needed */
|
||||
extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* This is the API core.
|
||||
*
|
||||
* API_ functions are part of U-Boot code and constitute the lowest level
|
||||
* calls:
|
||||
*
|
||||
* - they know what values they need as arguments
|
||||
* - their direct return value pertains to the API_ "shell" itself (0 on
|
||||
* success, some error code otherwise)
|
||||
* - if the call returns a value it is buried within arguments
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef DEBUG
|
||||
#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
#else
|
||||
#define debugf(fmt, args...)
|
||||
#endif
|
||||
|
||||
typedef int (*cfp_t)(va_list argp);
|
||||
|
||||
static int calls_no;
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_getc(int *c)
|
||||
*/
|
||||
static int API_getc(va_list ap)
|
||||
{
|
||||
int *c;
|
||||
|
||||
if ((c = (int *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
*c = getc();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_tstc(int *c)
|
||||
*/
|
||||
static int API_tstc(va_list ap)
|
||||
{
|
||||
int *t;
|
||||
|
||||
if ((t = (int *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
*t = tstc();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_putc(char *ch)
|
||||
*/
|
||||
static int API_putc(va_list ap)
|
||||
{
|
||||
char *c;
|
||||
|
||||
if ((c = (char *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
putc(*c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_puts(char **s)
|
||||
*/
|
||||
static int API_puts(va_list ap)
|
||||
{
|
||||
char *s;
|
||||
|
||||
if ((s = (char *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
puts(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_reset(void)
|
||||
*/
|
||||
static int API_reset(va_list ap)
|
||||
{
|
||||
do_reset(NULL, 0, 0, NULL);
|
||||
|
||||
/* NOT REACHED */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_get_sys_info(struct sys_info *si)
|
||||
*
|
||||
* fill out the sys_info struct containing selected parameters about the
|
||||
* machine
|
||||
*/
|
||||
static int API_get_sys_info(va_list ap)
|
||||
{
|
||||
struct sys_info *si;
|
||||
|
||||
si = (struct sys_info *)va_arg(ap, u_int32_t);
|
||||
if (si == NULL)
|
||||
return API_ENOMEM;
|
||||
|
||||
return (platform_sys_info(si)) ? 0 : API_ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_udelay(unsigned long *udelay)
|
||||
*/
|
||||
static int API_udelay(va_list ap)
|
||||
{
|
||||
unsigned long *d;
|
||||
|
||||
if ((d = (unsigned long *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
udelay(*d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_get_timer(unsigned long *current, unsigned long *base)
|
||||
*/
|
||||
static int API_get_timer(va_list ap)
|
||||
{
|
||||
unsigned long *base, *cur;
|
||||
|
||||
cur = (unsigned long *)va_arg(ap, u_int32_t);
|
||||
if (cur == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
base = (unsigned long *)va_arg(ap, u_int32_t);
|
||||
if (base == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
*cur = get_timer(*base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_dev_enum(struct device_info *)
|
||||
*
|
||||
*
|
||||
* cookies uniqely identify the previously enumerated device instance and
|
||||
* provide a hint for what to inspect in current enum iteration:
|
||||
*
|
||||
* - net: ð_device struct address from list pointed to by eth_devices
|
||||
*
|
||||
* - storage: block_dev_desc_t struct address from &ide_dev_desc[n],
|
||||
* &scsi_dev_desc[n] and similar tables
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int API_dev_enum(va_list ap)
|
||||
{
|
||||
struct device_info *di;
|
||||
|
||||
/* arg is ptr to the device_info struct we are going to fill out */
|
||||
di = (struct device_info *)va_arg(ap, u_int32_t);
|
||||
if (di == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
if (di->cookie == NULL) {
|
||||
/* start over - clean up enumeration */
|
||||
dev_enum_reset(); /* XXX shouldn't the name contain 'stor'? */
|
||||
debugf("RESTART ENUM\n");
|
||||
|
||||
/* net device enumeration first */
|
||||
if (dev_enum_net(di))
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The hidden assumption is there can only be one active network
|
||||
* device and it is identified upon enumeration (re)start, so there's
|
||||
* no point in trying to find network devices in other cases than the
|
||||
* (re)start and hence the 'next' device can only be storage
|
||||
*/
|
||||
if (!dev_enum_storage(di))
|
||||
/* make sure we mark there are no more devices */
|
||||
di->cookie = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int API_dev_open(va_list ap)
|
||||
{
|
||||
struct device_info *di;
|
||||
int err = 0;
|
||||
|
||||
/* arg is ptr to the device_info struct */
|
||||
di = (struct device_info *)va_arg(ap, u_int32_t);
|
||||
if (di == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
/* Allow only one consumer of the device at a time */
|
||||
if (di->state == DEV_STA_OPEN)
|
||||
return API_EBUSY;
|
||||
|
||||
if (di->cookie == NULL)
|
||||
return API_ENODEV;
|
||||
|
||||
if (di->type & DEV_TYP_STOR)
|
||||
err = dev_open_stor(di->cookie);
|
||||
|
||||
else if (di->type & DEV_TYP_NET)
|
||||
err = dev_open_net(di->cookie);
|
||||
else
|
||||
err = API_ENODEV;
|
||||
|
||||
if (!err)
|
||||
di->state = DEV_STA_OPEN;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
static int API_dev_close(va_list ap)
|
||||
{
|
||||
struct device_info *di;
|
||||
int err = 0;
|
||||
|
||||
/* arg is ptr to the device_info struct */
|
||||
di = (struct device_info *)va_arg(ap, u_int32_t);
|
||||
if (di == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
if (di->state == DEV_STA_CLOSED)
|
||||
return 0;
|
||||
|
||||
if (di->cookie == NULL)
|
||||
return API_ENODEV;
|
||||
|
||||
if (di->type & DEV_TYP_STOR)
|
||||
err = dev_close_stor(di->cookie);
|
||||
|
||||
else if (di->type & DEV_TYP_NET)
|
||||
err = dev_close_net(di->cookie);
|
||||
else
|
||||
/*
|
||||
* In case of unknown device we cannot change its state, so
|
||||
* only return error code
|
||||
*/
|
||||
err = API_ENODEV;
|
||||
|
||||
if (!err)
|
||||
di->state = DEV_STA_CLOSED;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Notice: this is for sending network packets only, as U-Boot does not
|
||||
* support writing to storage at the moment (12.2007)
|
||||
*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_dev_write(
|
||||
* struct device_info *di,
|
||||
* void *buf,
|
||||
* int *len
|
||||
* )
|
||||
*
|
||||
* buf: ptr to buffer from where to get the data to send
|
||||
*
|
||||
* len: length of packet to be sent (in bytes)
|
||||
*
|
||||
*/
|
||||
static int API_dev_write(va_list ap)
|
||||
{
|
||||
struct device_info *di;
|
||||
void *buf;
|
||||
int *len;
|
||||
int err = 0;
|
||||
|
||||
/* 1. arg is ptr to the device_info struct */
|
||||
di = (struct device_info *)va_arg(ap, u_int32_t);
|
||||
if (di == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
/* XXX should we check if device is open? i.e. the ->state ? */
|
||||
|
||||
if (di->cookie == NULL)
|
||||
return API_ENODEV;
|
||||
|
||||
/* 2. arg is ptr to buffer from where to get data to write */
|
||||
buf = (void *)va_arg(ap, u_int32_t);
|
||||
if (buf == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
/* 3. arg is length of buffer */
|
||||
len = (int *)va_arg(ap, u_int32_t);
|
||||
if (len == NULL)
|
||||
return API_EINVAL;
|
||||
if (*len <= 0)
|
||||
return API_EINVAL;
|
||||
|
||||
if (di->type & DEV_TYP_STOR)
|
||||
/*
|
||||
* write to storage is currently not supported by U-Boot:
|
||||
* no storage device implements block_write() method
|
||||
*/
|
||||
return API_ENODEV;
|
||||
|
||||
else if (di->type & DEV_TYP_NET)
|
||||
err = dev_write_net(di->cookie, buf, *len);
|
||||
else
|
||||
err = API_ENODEV;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_dev_read(
|
||||
* struct device_info *di,
|
||||
* void *buf,
|
||||
* size_t *len,
|
||||
* unsigned long *start
|
||||
* size_t *act_len
|
||||
* )
|
||||
*
|
||||
* buf: ptr to buffer where to put the read data
|
||||
*
|
||||
* len: ptr to length to be read
|
||||
* - network: len of packet to read (in bytes)
|
||||
* - storage: # of blocks to read (can vary in size depending on define)
|
||||
*
|
||||
* start: ptr to start block (only used for storage devices, ignored for
|
||||
* network)
|
||||
*
|
||||
* act_len: ptr to where to put the len actually read
|
||||
*/
|
||||
static int API_dev_read(va_list ap)
|
||||
{
|
||||
struct device_info *di;
|
||||
void *buf;
|
||||
lbasize_t *len_stor, *act_len_stor;
|
||||
lbastart_t *start;
|
||||
int *len_net, *act_len_net;
|
||||
|
||||
/* 1. arg is ptr to the device_info struct */
|
||||
di = (struct device_info *)va_arg(ap, u_int32_t);
|
||||
if (di == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
/* XXX should we check if device is open? i.e. the ->state ? */
|
||||
|
||||
if (di->cookie == NULL)
|
||||
return API_ENODEV;
|
||||
|
||||
/* 2. arg is ptr to buffer from where to put the read data */
|
||||
buf = (void *)va_arg(ap, u_int32_t);
|
||||
if (buf == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
if (di->type & DEV_TYP_STOR) {
|
||||
/* 3. arg - ptr to var with # of blocks to read */
|
||||
len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
|
||||
if (!len_stor)
|
||||
return API_EINVAL;
|
||||
if (*len_stor <= 0)
|
||||
return API_EINVAL;
|
||||
|
||||
/* 4. arg - ptr to var with start block */
|
||||
start = (lbastart_t *)va_arg(ap, u_int32_t);
|
||||
|
||||
/* 5. arg - ptr to var where to put the len actually read */
|
||||
act_len_stor = (lbasize_t *)va_arg(ap, u_int32_t);
|
||||
if (!act_len_stor)
|
||||
return API_EINVAL;
|
||||
|
||||
*act_len_stor = dev_read_stor(di->cookie, buf, *len_stor, *start);
|
||||
|
||||
} else if (di->type & DEV_TYP_NET) {
|
||||
|
||||
/* 3. arg points to the var with length of packet to read */
|
||||
len_net = (int *)va_arg(ap, u_int32_t);
|
||||
if (!len_net)
|
||||
return API_EINVAL;
|
||||
if (*len_net <= 0)
|
||||
return API_EINVAL;
|
||||
|
||||
/* 4. - ptr to var where to put the len actually read */
|
||||
act_len_net = (int *)va_arg(ap, u_int32_t);
|
||||
if (!act_len_net)
|
||||
return API_EINVAL;
|
||||
|
||||
*act_len_net = dev_read_net(di->cookie, buf, *len_net);
|
||||
|
||||
} else
|
||||
return API_ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_env_get(const char *name, char **value)
|
||||
*
|
||||
* name: ptr to name of env var
|
||||
*/
|
||||
static int API_env_get(va_list ap)
|
||||
{
|
||||
char *name, **value;
|
||||
|
||||
if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
if ((value = (char **)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
*value = getenv(name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_env_set(const char *name, const char *value)
|
||||
*
|
||||
* name: ptr to name of env var
|
||||
*
|
||||
* value: ptr to value to be set
|
||||
*/
|
||||
static int API_env_set(va_list ap)
|
||||
{
|
||||
char *name, *value;
|
||||
|
||||
if ((name = (char *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
if ((value = (char *)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
setenv(name, value);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pseudo signature:
|
||||
*
|
||||
* int API_env_enum(const char *last, char **next)
|
||||
*
|
||||
* last: ptr to name of env var found in last iteration
|
||||
*/
|
||||
static int API_env_enum(va_list ap)
|
||||
{
|
||||
int i, n;
|
||||
char *last, **next;
|
||||
|
||||
last = (char *)va_arg(ap, u_int32_t);
|
||||
|
||||
if ((next = (char **)va_arg(ap, u_int32_t)) == NULL)
|
||||
return API_EINVAL;
|
||||
|
||||
if (last == NULL)
|
||||
/* start over */
|
||||
*next = ((char *)env_get_addr(0));
|
||||
else {
|
||||
*next = last;
|
||||
|
||||
for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
|
||||
for (n = i; env_get_char(n) != '\0'; ++n) {
|
||||
if (n >= CONFIG_ENV_SIZE) {
|
||||
/* XXX shouldn't we set *next = NULL?? */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (envmatch((uchar *)last, i) < 0)
|
||||
continue;
|
||||
|
||||
/* try to get next name */
|
||||
i = n + 1;
|
||||
if (env_get_char(i) == '\0') {
|
||||
/* no more left */
|
||||
*next = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*next = ((char *)env_get_addr(i));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static cfp_t calls_table[API_MAXCALL] = { NULL, };
|
||||
|
||||
/*
|
||||
* The main syscall entry point - this is not reentrant, only one call is
|
||||
* serviced until finished.
|
||||
*
|
||||
* e.g. syscall(1, int *, u_int32_t, u_int32_t, u_int32_t, u_int32_t);
|
||||
*
|
||||
* call: syscall number
|
||||
*
|
||||
* retval: points to the return value placeholder, this is the place the
|
||||
* syscall puts its return value, if NULL the caller does not
|
||||
* expect a return value
|
||||
*
|
||||
* ... syscall arguments (variable number)
|
||||
*
|
||||
* returns: 0 if the call not found, 1 if serviced
|
||||
*/
|
||||
int syscall(int call, int *retval, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int rv;
|
||||
|
||||
if (call < 0 || call >= calls_no) {
|
||||
debugf("invalid call #%d\n", call);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (calls_table[call] == NULL) {
|
||||
debugf("syscall #%d does not have a handler\n", call);
|
||||
return 0;
|
||||
}
|
||||
|
||||
va_start(ap, retval);
|
||||
rv = calls_table[call](ap);
|
||||
if (retval != NULL)
|
||||
*retval = rv;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void api_init(void)
|
||||
{
|
||||
struct api_signature *sig = NULL;
|
||||
|
||||
/* TODO put this into linker set one day... */
|
||||
calls_table[API_RSVD] = NULL;
|
||||
calls_table[API_GETC] = &API_getc;
|
||||
calls_table[API_PUTC] = &API_putc;
|
||||
calls_table[API_TSTC] = &API_tstc;
|
||||
calls_table[API_PUTS] = &API_puts;
|
||||
calls_table[API_RESET] = &API_reset;
|
||||
calls_table[API_GET_SYS_INFO] = &API_get_sys_info;
|
||||
calls_table[API_UDELAY] = &API_udelay;
|
||||
calls_table[API_GET_TIMER] = &API_get_timer;
|
||||
calls_table[API_DEV_ENUM] = &API_dev_enum;
|
||||
calls_table[API_DEV_OPEN] = &API_dev_open;
|
||||
calls_table[API_DEV_CLOSE] = &API_dev_close;
|
||||
calls_table[API_DEV_READ] = &API_dev_read;
|
||||
calls_table[API_DEV_WRITE] = &API_dev_write;
|
||||
calls_table[API_ENV_GET] = &API_env_get;
|
||||
calls_table[API_ENV_SET] = &API_env_set;
|
||||
calls_table[API_ENV_ENUM] = &API_env_enum;
|
||||
calls_no = API_MAXCALL;
|
||||
|
||||
debugf("API initialized with %d calls\n", calls_no);
|
||||
|
||||
dev_stor_init();
|
||||
|
||||
/*
|
||||
* Produce the signature so the API consumers can find it
|
||||
*/
|
||||
sig = malloc(sizeof(struct api_signature));
|
||||
if (sig == NULL) {
|
||||
printf("API: could not allocate memory for the signature!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
debugf("API sig @ 0x%08x\n", sig);
|
||||
memcpy(sig->magic, API_SIG_MAGIC, 8);
|
||||
sig->version = API_SIG_VERSION;
|
||||
sig->syscall = &syscall;
|
||||
sig->checksum = 0;
|
||||
sig->checksum = crc32(0, (unsigned char *)sig,
|
||||
sizeof(struct api_signature));
|
||||
debugf("syscall entry: 0x%08x\n", sig->syscall);
|
||||
}
|
||||
|
||||
void platform_set_mr(struct sys_info *si, unsigned long start, unsigned long size,
|
||||
int flags)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!si->mr || !size || (flags == 0))
|
||||
return;
|
||||
|
||||
/* find free slot */
|
||||
for (i = 0; i < si->mr_no; i++)
|
||||
if (si->mr[i].flags == 0) {
|
||||
/* insert new mem region */
|
||||
si->mr[i].start = start;
|
||||
si->mr[i].size = size;
|
||||
si->mr[i].flags = flags;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* CONFIG_API */
|
||||
-113
@@ -1,113 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined(CONFIG_API)
|
||||
|
||||
#include <common.h>
|
||||
#include <net.h>
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define DEBUG
|
||||
#undef DEBUG
|
||||
|
||||
#if !defined(CONFIG_NET_MULTI)
|
||||
#error "API/net is currently only available for platforms with CONFIG_NET_MULTI"
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
#else
|
||||
#define debugf(fmt, args...)
|
||||
#endif
|
||||
|
||||
#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
|
||||
|
||||
static int dev_valid_net(void *cookie)
|
||||
{
|
||||
return ((void *)eth_get_dev() == cookie) ? 1 : 0;
|
||||
}
|
||||
|
||||
int dev_open_net(void *cookie)
|
||||
{
|
||||
if (!dev_valid_net(cookie))
|
||||
return API_ENODEV;
|
||||
|
||||
if (eth_init(gd->bd) < 0)
|
||||
return API_EIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dev_close_net(void *cookie)
|
||||
{
|
||||
if (!dev_valid_net(cookie))
|
||||
return API_ENODEV;
|
||||
|
||||
eth_halt();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* There can only be one active eth interface at a time - use what is
|
||||
* currently set to eth_current
|
||||
*/
|
||||
int dev_enum_net(struct device_info *di)
|
||||
{
|
||||
struct eth_device *eth_current = eth_get_dev();
|
||||
|
||||
di->type = DEV_TYP_NET;
|
||||
di->cookie = (void *)eth_current;
|
||||
if (di->cookie == NULL)
|
||||
return 0;
|
||||
|
||||
memcpy(di->di_net.hwaddr, eth_current->enetaddr, 6);
|
||||
|
||||
debugf("device found, returning cookie 0x%08x\n",
|
||||
(u_int32_t)di->cookie);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dev_write_net(void *cookie, void *buf, int len)
|
||||
{
|
||||
/* XXX verify that cookie points to a valid net device??? */
|
||||
|
||||
return eth_send(buf, len);
|
||||
}
|
||||
|
||||
int dev_read_net(void *cookie, void *buf, int len)
|
||||
{
|
||||
/* XXX verify that cookie points to a valid net device??? */
|
||||
|
||||
return eth_receive(buf, len);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_API */
|
||||
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* This file contains routines that fetch data from ARM-dependent sources
|
||||
* (bd_info etc.)
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined(CONFIG_API)
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include <asm/u-boot.h>
|
||||
#include <asm/global_data.h>
|
||||
|
||||
#include "api_private.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Important notice: handling of individual fields MUST be kept in sync with
|
||||
* include/asm-arm/u-boot.h and include/asm-arm/global_data.h, so any changes
|
||||
* need to reflect their current state and layout of structures involved!
|
||||
*/
|
||||
int platform_sys_info(struct sys_info *si)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
|
||||
platform_set_mr(si, gd->bd->bi_dram[i].start,
|
||||
gd->bd->bi_dram[i].size, MR_ATTR_DRAM);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_API */
|
||||
@@ -1,79 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* This file contains routines that fetch data from PowerPC-dependent sources
|
||||
* (bd_info etc.)
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined(CONFIG_API)
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include <asm/u-boot.h>
|
||||
#include <asm/global_data.h>
|
||||
|
||||
#include "api_private.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Important notice: handling of individual fields MUST be kept in sync with
|
||||
* include/asm-ppc/u-boot.h and include/asm-ppc/global_data.h, so any changes
|
||||
* need to reflect their current state and layout of structures involved!
|
||||
*/
|
||||
int platform_sys_info(struct sys_info *si)
|
||||
{
|
||||
si->clk_bus = gd->bus_clk;
|
||||
si->clk_cpu = gd->cpu_clk;
|
||||
|
||||
#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_8260) || \
|
||||
defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
|
||||
#define bi_bar bi_immr_base
|
||||
#elif defined(CONFIG_MPC5xxx)
|
||||
#define bi_bar bi_mbar_base
|
||||
#elif defined(CONFIG_MPC83XX)
|
||||
#define bi_bar bi_immrbar
|
||||
#elif defined(CONFIG_MPC8220)
|
||||
#define bi_bar bi_mbar_base
|
||||
#endif
|
||||
|
||||
#if defined(bi_bar)
|
||||
si->bar = gd->bd->bi_bar;
|
||||
#undef bi_bar
|
||||
#else
|
||||
si->bar = 0;
|
||||
#endif
|
||||
|
||||
platform_set_mr(si, gd->bd->bi_memstart, gd->bd->bi_memsize, MR_ATTR_DRAM);
|
||||
platform_set_mr(si, gd->bd->bi_flashstart, gd->bd->bi_flashsize, MR_ATTR_FLASH);
|
||||
platform_set_mr(si, gd->bd->bi_sramstart, gd->bd->bi_sramsize, MR_ATTR_SRAM);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_API */
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _API_PRIVATE_H_
|
||||
#define _API_PRIVATE_H_
|
||||
|
||||
void api_init(void);
|
||||
void platform_set_mr(struct sys_info *, unsigned long, unsigned long, int);
|
||||
int platform_sys_info(struct sys_info *);
|
||||
|
||||
void dev_enum_reset(void);
|
||||
int dev_enum_storage(struct device_info *);
|
||||
int dev_enum_net(struct device_info *);
|
||||
|
||||
int dev_open_stor(void *);
|
||||
int dev_open_net(void *);
|
||||
int dev_close_stor(void *);
|
||||
int dev_close_net(void *);
|
||||
|
||||
lbasize_t dev_read_stor(void *, void *, lbasize_t, lbastart_t);
|
||||
int dev_read_net(void *, void *, int);
|
||||
int dev_write_net(void *, void *, int);
|
||||
|
||||
void dev_stor_init(void);
|
||||
|
||||
#endif /* _API_PRIVATE_H_ */
|
||||
@@ -1,395 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007-2008 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if defined(CONFIG_API)
|
||||
|
||||
#include <common.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
|
||||
#include <usb.h>
|
||||
#endif
|
||||
|
||||
#define DEBUG
|
||||
#undef DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
#define debugf(fmt, args...) do { printf("%s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
#else
|
||||
#define debugf(fmt, args...)
|
||||
#endif
|
||||
|
||||
#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
|
||||
|
||||
#define ENUM_IDE 0
|
||||
#define ENUM_USB 1
|
||||
#define ENUM_SCSI 2
|
||||
#define ENUM_MMC 3
|
||||
#define ENUM_SATA 4
|
||||
#define ENUM_MAX 5
|
||||
|
||||
struct stor_spec {
|
||||
int max_dev;
|
||||
int enum_started;
|
||||
int enum_ended;
|
||||
int type; /* "external" type: DT_STOR_{IDE,USB,etc} */
|
||||
char *name;
|
||||
};
|
||||
|
||||
static struct stor_spec specs[ENUM_MAX] = { { 0, 0, 0, 0, "" }, };
|
||||
|
||||
|
||||
void dev_stor_init(void)
|
||||
{
|
||||
#if defined(CONFIG_CMD_IDE)
|
||||
specs[ENUM_IDE].max_dev = CFG_IDE_MAXDEVICE;
|
||||
specs[ENUM_IDE].enum_started = 0;
|
||||
specs[ENUM_IDE].enum_ended = 0;
|
||||
specs[ENUM_IDE].type = DEV_TYP_STOR | DT_STOR_IDE;
|
||||
specs[ENUM_IDE].name = "ide";
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_MMC)
|
||||
specs[ENUM_MMC].max_dev = CFG_MMC_MAX_DEVICE;
|
||||
specs[ENUM_MMC].enum_started = 0;
|
||||
specs[ENUM_MMC].enum_ended = 0;
|
||||
specs[ENUM_MMC].type = DEV_TYP_STOR | DT_STOR_MMC;
|
||||
specs[ENUM_MMC].name = "mmc";
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_SATA)
|
||||
specs[ENUM_SATA].max_dev = CFG_SATA_MAX_DEVICE;
|
||||
specs[ENUM_SATA].enum_started = 0;
|
||||
specs[ENUM_SATA].enum_ended = 0;
|
||||
specs[ENUM_SATA].type = DEV_TYP_STOR | DT_STOR_SATA;
|
||||
specs[ENUM_SATA].name = "sata";
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_SCSI)
|
||||
specs[ENUM_SCSI].max_dev = CFG_SCSI_MAX_DEVICE;
|
||||
specs[ENUM_SCSI].enum_started = 0;
|
||||
specs[ENUM_SCSI].enum_ended = 0;
|
||||
specs[ENUM_SCSI].type = DEV_TYP_STOR | DT_STOR_SCSI;
|
||||
specs[ENUM_SCSI].name = "scsi";
|
||||
#endif
|
||||
#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
|
||||
specs[ENUM_USB].max_dev = USB_MAX_STOR_DEV;
|
||||
specs[ENUM_USB].enum_started = 0;
|
||||
specs[ENUM_USB].enum_ended = 0;
|
||||
specs[ENUM_USB].type = DEV_TYP_STOR | DT_STOR_USB;
|
||||
specs[ENUM_USB].name = "usb";
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Finds next available device in the storage group
|
||||
*
|
||||
* type: storage group type - ENUM_IDE, ENUM_SCSI etc.
|
||||
*
|
||||
* first: if 1 the first device in the storage group is returned (if
|
||||
* exists), if 0 the next available device is searched
|
||||
*
|
||||
* more: returns 0/1 depending if there are more devices in this group
|
||||
* available (for future iterations)
|
||||
*
|
||||
* returns: 0/1 depending if device found in this iteration
|
||||
*/
|
||||
static int dev_stor_get(int type, int first, int *more, struct device_info *di)
|
||||
{
|
||||
int found = 0;
|
||||
*more = 0;
|
||||
|
||||
int i;
|
||||
|
||||
block_dev_desc_t *dd;
|
||||
|
||||
if (first) {
|
||||
di->cookie = (void *)get_dev(specs[type].name, 0);
|
||||
if (di->cookie == NULL)
|
||||
return 0;
|
||||
else
|
||||
found = 1;
|
||||
|
||||
} else {
|
||||
for (i = 0; i < specs[type].max_dev; i++)
|
||||
if (di->cookie == (void *)get_dev(specs[type].name, i)) {
|
||||
/* previous cookie found -- advance to the
|
||||
* next device, if possible */
|
||||
|
||||
if (++i >= specs[type].max_dev) {
|
||||
/* out of range, no more to enum */
|
||||
di->cookie = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
di->cookie = (void *)get_dev(specs[type].name, i);
|
||||
if (di->cookie == NULL)
|
||||
return 0;
|
||||
else
|
||||
found = 1;
|
||||
|
||||
/* provide hint if there are more devices in
|
||||
* this group to enumerate */
|
||||
if ((i + 1) < specs[type].max_dev)
|
||||
*more = 1;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found) {
|
||||
di->type = specs[type].type;
|
||||
|
||||
if (di->cookie != NULL) {
|
||||
dd = (block_dev_desc_t *)di->cookie;
|
||||
if (dd->type == DEV_TYPE_UNKNOWN) {
|
||||
debugf("device instance exists, but is not active..");
|
||||
found = 0;
|
||||
} else {
|
||||
di->di_stor.block_count = dd->lba;
|
||||
di->di_stor.block_size = dd->blksz;
|
||||
}
|
||||
}
|
||||
|
||||
} else
|
||||
di->cookie = NULL;
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* returns: ENUM_IDE, ENUM_USB etc. based on block_dev_desc_t
|
||||
*/
|
||||
static int dev_stor_type(block_dev_desc_t *dd)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = ENUM_IDE; i < ENUM_MAX; i++)
|
||||
for (j = 0; j < specs[i].max_dev; j++)
|
||||
if (dd == get_dev(specs[i].name, j))
|
||||
return i;
|
||||
|
||||
return ENUM_MAX;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* returns: 0/1 whether cookie points to some device in this group
|
||||
*/
|
||||
static int dev_is_stor(int type, struct device_info *di)
|
||||
{
|
||||
return (dev_stor_type(di->cookie) == type) ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
static int dev_enum_stor(int type, struct device_info *di)
|
||||
{
|
||||
int found = 0, more = 0;
|
||||
|
||||
debugf("called, type %d\n", type);
|
||||
|
||||
/*
|
||||
* Formulae for enumerating storage devices:
|
||||
* 1. if cookie (hint from previous enum call) is NULL we start again
|
||||
* with enumeration, so return the first available device, done.
|
||||
*
|
||||
* 2. if cookie is not NULL, check if it identifies some device in
|
||||
* this group:
|
||||
*
|
||||
* 2a. if cookie is a storage device from our group (IDE, USB etc.),
|
||||
* return next available (if exists) in this group
|
||||
*
|
||||
* 2b. if it isn't device from our group, check if such devices were
|
||||
* ever enumerated before:
|
||||
* - if not, return the first available device from this group
|
||||
* - else return 0
|
||||
*/
|
||||
|
||||
if (di->cookie == NULL) {
|
||||
|
||||
debugf("group%d - enum restart\n", type);
|
||||
|
||||
/*
|
||||
* 1. Enumeration (re-)started: take the first available
|
||||
* device, if exists
|
||||
*/
|
||||
found = dev_stor_get(type, 1, &more, di);
|
||||
specs[type].enum_started = 1;
|
||||
|
||||
} else if (dev_is_stor(type, di)) {
|
||||
|
||||
debugf("group%d - enum continued for the next device\n", type);
|
||||
|
||||
if (specs[type].enum_ended) {
|
||||
debugf("group%d - nothing more to enum!\n", type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 2a. Attempt to take a next available device in the group */
|
||||
found = dev_stor_get(type, 0, &more, di);
|
||||
|
||||
} else {
|
||||
|
||||
if (specs[type].enum_ended) {
|
||||
debugf("group %d - already enumerated, skipping\n", type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
debugf("group%d - first time enum\n", type);
|
||||
|
||||
if (specs[type].enum_started == 0) {
|
||||
/*
|
||||
* 2b. If enumerating devices in this group did not
|
||||
* happen before, it means the cookie pointed to a
|
||||
* device frome some other group (another storage
|
||||
* group, or network); in this case try to take the
|
||||
* first available device from our group
|
||||
*/
|
||||
specs[type].enum_started = 1;
|
||||
|
||||
/*
|
||||
* Attempt to take the first device in this group:
|
||||
*'first element' flag is set
|
||||
*/
|
||||
found = dev_stor_get(type, 1, &more, di);
|
||||
|
||||
} else {
|
||||
errf("group%d - out of order iteration\n", type);
|
||||
found = 0;
|
||||
more = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If there are no more devices in this group, consider its
|
||||
* enumeration finished
|
||||
*/
|
||||
specs[type].enum_ended = (!more) ? 1 : 0;
|
||||
|
||||
if (found)
|
||||
debugf("device found, returning cookie 0x%08x\n",
|
||||
(u_int32_t)di->cookie);
|
||||
else
|
||||
debugf("no device found\n");
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
void dev_enum_reset(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ENUM_MAX; i ++) {
|
||||
specs[i].enum_started = 0;
|
||||
specs[i].enum_ended = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int dev_enum_storage(struct device_info *di)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* check: ide, usb, scsi, mmc
|
||||
*/
|
||||
for (i = ENUM_IDE; i < ENUM_MAX; i ++) {
|
||||
if (dev_enum_stor(i, di))
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dev_stor_is_valid(int type, block_dev_desc_t *dd)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < specs[type].max_dev; i++)
|
||||
if (dd == get_dev(specs[type].name, i))
|
||||
if (dd->type != DEV_TYPE_UNKNOWN)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int dev_open_stor(void *cookie)
|
||||
{
|
||||
int type = dev_stor_type(cookie);
|
||||
|
||||
if (type == ENUM_MAX)
|
||||
return API_ENODEV;
|
||||
|
||||
if (dev_stor_is_valid(type, (block_dev_desc_t *)cookie))
|
||||
return 0;
|
||||
|
||||
return API_ENODEV;
|
||||
}
|
||||
|
||||
|
||||
int dev_close_stor(void *cookie)
|
||||
{
|
||||
/*
|
||||
* Not much to do as we actually do not alter storage devices upon
|
||||
* close
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int dev_stor_index(block_dev_desc_t *dd)
|
||||
{
|
||||
int i, type;
|
||||
|
||||
type = dev_stor_type(dd);
|
||||
for (i = 0; i < specs[type].max_dev; i++)
|
||||
if (dd == get_dev(specs[type].name, i))
|
||||
return i;
|
||||
|
||||
return (specs[type].max_dev);
|
||||
}
|
||||
|
||||
|
||||
lbasize_t dev_read_stor(void *cookie, void *buf, lbasize_t len, lbastart_t start)
|
||||
{
|
||||
int type;
|
||||
block_dev_desc_t *dd = (block_dev_desc_t *)cookie;
|
||||
|
||||
if ((type = dev_stor_type(dd)) == ENUM_MAX)
|
||||
return 0;
|
||||
|
||||
if (!dev_stor_is_valid(type, dd))
|
||||
return 0;
|
||||
|
||||
if ((dd->block_read) == NULL) {
|
||||
debugf("no block_read() for device 0x%08x\n", cookie);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (dd->block_read(dev_stor_index(dd), start, len, buf));
|
||||
}
|
||||
|
||||
#endif /* CONFIG_API */
|
||||
@@ -1,109 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2007 Semihalf
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 Foundatio; either version 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
ifeq ($(ARCH),ppc)
|
||||
LOAD_ADDR = 0x40000
|
||||
endif
|
||||
|
||||
#ifeq ($(ARCH),arm)
|
||||
#LOAD_ADDR = 0xc100000
|
||||
#endif
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
|
||||
ELF-$(CONFIG_API) += demo
|
||||
BIN-$(CONFIG_API) += demo.bin
|
||||
ELF := $(ELF-y)
|
||||
BIN := $(BIN-y)
|
||||
|
||||
#CFLAGS += -v
|
||||
|
||||
COBJS-$(CONFIG_API) += $(ELF:=.o)
|
||||
SOBJS-$(CONFIG_API) += crt0.o
|
||||
ifeq ($(ARCH),ppc)
|
||||
SOBJS-$(CONFIG_API) += ppcstring.o
|
||||
endif
|
||||
COBJS := $(COBJS-y)
|
||||
SOBJS := $(SOBJS-y)
|
||||
|
||||
LIB = $(obj)libglue.a
|
||||
LIBCOBJS-$(CONFIG_API) += glue.o crc32.o ctype.o string.o vsprintf.o \
|
||||
libgenwrap.o
|
||||
LIBCOBJS := $(LIBCOBJS-y)
|
||||
|
||||
LIBOBJS = $(addprefix $(obj),$(SOBJS) $(LIBCOBJS))
|
||||
|
||||
SRCS := $(COBJS:.o=.c) $(LIBCOBJS:.o=.c) $(SOBJS:.o=.S)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
ELF := $(addprefix $(obj),$(ELF))
|
||||
BIN := $(addprefix $(obj),$(BIN))
|
||||
|
||||
gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
|
||||
|
||||
CPPFLAGS += -I..
|
||||
|
||||
all: $(obj).depend $(OBJS) $(LIB) $(ELF) $(BIN)
|
||||
|
||||
#########################################################################
|
||||
$(LIB): $(obj).depend $(LIBOBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
||||
|
||||
$(ELF):
|
||||
$(obj)%: $(obj)%.o $(LIB)
|
||||
$(LD) $(obj)crt0.o -Ttext $(LOAD_ADDR) \
|
||||
-o $@ $< $(LIB) \
|
||||
-L$(gcclibdir) -lgcc
|
||||
|
||||
$(BIN):
|
||||
$(obj)%.bin: $(obj)%
|
||||
$(OBJCOPY) -O binary $< $@ 2>/dev/null
|
||||
|
||||
$(obj)crc32.c:
|
||||
@rm -f $(obj)crc32.c
|
||||
ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c
|
||||
|
||||
$(obj)ctype.c:
|
||||
@rm -f $(obj)ctype.c
|
||||
ln -s $(src)../lib_generic/ctype.c $(obj)ctype.c
|
||||
|
||||
$(obj)string.c:
|
||||
@rm -f $(obj)string.c
|
||||
ln -s $(src)../lib_generic/string.c $(obj)string.c
|
||||
|
||||
$(obj)vsprintf.c:
|
||||
@rm -f $(obj)vsprintf.c
|
||||
ln -s $(src)../lib_generic/vsprintf.c $(obj)vsprintf.c
|
||||
|
||||
ifeq ($(ARCH),ppc)
|
||||
$(obj)ppcstring.S:
|
||||
@rm -f $(obj)ppcstring.S
|
||||
ln -s $(src)../lib_ppc/ppcstring.S $(obj)ppcstring.S
|
||||
endif
|
||||
|
||||
#########################################################################
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
|
||||
sinclude $(obj).depend
|
||||
|
||||
#########################################################################
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_PPC)
|
||||
|
||||
.text
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
b main
|
||||
|
||||
|
||||
.globl syscall
|
||||
syscall:
|
||||
lis %r11, syscall_ptr@ha
|
||||
addi %r11, %r11, syscall_ptr@l
|
||||
lwz %r11, 0(%r11)
|
||||
mtctr %r11
|
||||
bctr
|
||||
|
||||
|
||||
.globl syscall_ptr
|
||||
syscall_ptr:
|
||||
.align 4
|
||||
.long 0
|
||||
#else
|
||||
#error No support for this arch!
|
||||
#endif
|
||||
@@ -1,300 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007-2008 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include "glue.h"
|
||||
|
||||
#define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
|
||||
|
||||
#define BUF_SZ 2048
|
||||
#define WAIT_SECS 5
|
||||
|
||||
void test_dump_buf(void *, int);
|
||||
void test_dump_di(int);
|
||||
void test_dump_si(struct sys_info *);
|
||||
void test_dump_sig(struct api_signature *);
|
||||
|
||||
static char buf[BUF_SZ];
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rv = 0;
|
||||
int h, i, j;
|
||||
int devs_no;
|
||||
struct api_signature *sig = NULL;
|
||||
ulong start, now;
|
||||
struct device_info *di;
|
||||
|
||||
if (!api_search_sig(&sig))
|
||||
return -1;
|
||||
|
||||
syscall_ptr = sig->syscall;
|
||||
if (syscall_ptr == NULL)
|
||||
return -2;
|
||||
|
||||
if (sig->version > API_SIG_VERSION)
|
||||
return -3;
|
||||
|
||||
printf("API signature found @%x\n", (unsigned int)sig);
|
||||
test_dump_sig(sig);
|
||||
|
||||
printf("\n*** Consumer API test ***\n");
|
||||
printf("syscall ptr 0x%08x@%08x\n", (unsigned int)syscall_ptr,
|
||||
(unsigned int)&syscall_ptr);
|
||||
|
||||
/* console activities */
|
||||
ub_putc('B');
|
||||
|
||||
printf("*** Press any key to continue ***\n");
|
||||
printf("got char 0x%x\n", ub_getc());
|
||||
|
||||
/* system info */
|
||||
test_dump_si(ub_get_sys_info());
|
||||
|
||||
/* timing */
|
||||
printf("\n*** Timing - wait a couple of secs ***\n");
|
||||
start = ub_get_timer(0);
|
||||
printf("\ntime: start %lu\n\n", start);
|
||||
for (i = 0; i < WAIT_SECS; i++)
|
||||
for (j = 0; j < 1000; j++)
|
||||
ub_udelay(1000); /* wait 1 ms */
|
||||
|
||||
/* this is the number of milliseconds that passed from ub_get_timer(0) */
|
||||
now = ub_get_timer(start);
|
||||
printf("\ntime: now %lu\n\n", now);
|
||||
|
||||
/* enumerate devices */
|
||||
printf("\n*** Enumerate devices ***\n");
|
||||
devs_no = ub_dev_enum();
|
||||
|
||||
printf("Number of devices found: %d\n", devs_no);
|
||||
if (devs_no == 0)
|
||||
return -1;
|
||||
|
||||
|
||||
printf("\n*** Show devices ***\n");
|
||||
for (i = 0; i < devs_no; i++) {
|
||||
test_dump_di(i);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("\n*** Operations on devices ***\n");
|
||||
|
||||
/* test opening a device already opened */
|
||||
h = 0;
|
||||
if ((rv = ub_dev_open(h)) != 0) {
|
||||
errf("open device %d error %d\n", h, rv);
|
||||
return -1;
|
||||
}
|
||||
if ((rv = ub_dev_open(h)) != 0)
|
||||
errf("open device %d error %d\n", h, rv);
|
||||
|
||||
ub_dev_close(h);
|
||||
|
||||
/* test storage */
|
||||
printf("Trying storage devices...\n");
|
||||
for (i = 0; i < devs_no; i++) {
|
||||
di = ub_dev_get(i);
|
||||
|
||||
if (di->type & DEV_TYP_STOR)
|
||||
break;
|
||||
|
||||
}
|
||||
if (i == devs_no)
|
||||
printf("No storage devices available\n");
|
||||
else {
|
||||
memset(buf, 0, BUF_SZ);
|
||||
|
||||
if ((rv = ub_dev_open(i)) != 0)
|
||||
errf("open device %d error %d\n", i, rv);
|
||||
|
||||
else if ((rv = ub_dev_read(i, buf, 1, 0)) != 0)
|
||||
errf("could not read from device %d, error %d\n", i, rv);
|
||||
|
||||
printf("Sector 0 dump (512B):\n");
|
||||
test_dump_buf(buf, 512);
|
||||
|
||||
ub_dev_close(i);
|
||||
}
|
||||
|
||||
/* test networking */
|
||||
printf("Trying network devices...\n");
|
||||
for (i = 0; i < devs_no; i++) {
|
||||
di = ub_dev_get(i);
|
||||
|
||||
if (di->type == DEV_TYP_NET)
|
||||
break;
|
||||
|
||||
}
|
||||
if (i == devs_no)
|
||||
printf("No network devices available\n");
|
||||
else {
|
||||
if ((rv = ub_dev_open(i)) != 0)
|
||||
errf("open device %d error %d\n", i, rv);
|
||||
else if ((rv = ub_dev_send(i, &buf, 2048)) != 0)
|
||||
errf("could not send to device %d, error %d\n", i, rv);
|
||||
|
||||
ub_dev_close(i);
|
||||
}
|
||||
|
||||
if (ub_dev_close(h) != 0)
|
||||
errf("could not close device %d\n", h);
|
||||
|
||||
printf("\n*** Env vars ***\n");
|
||||
|
||||
printf("ethact = %s\n", ub_env_get("ethact"));
|
||||
printf("old fileaddr = %s\n", ub_env_get("fileaddr"));
|
||||
ub_env_set("fileaddr", "deadbeef");
|
||||
printf("new fileaddr = %s\n", ub_env_get("fileaddr"));
|
||||
|
||||
const char *env = NULL;
|
||||
|
||||
while ((env = ub_env_enum(env)) != NULL)
|
||||
printf("%s = %s\n", env, ub_env_get(env));
|
||||
|
||||
/* reset */
|
||||
ub_reset();
|
||||
printf("\nHmm, reset returned...?!\n");
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void test_dump_sig(struct api_signature *sig)
|
||||
{
|
||||
printf("signature:\n");
|
||||
printf(" version\t= %d\n", sig->version);
|
||||
printf(" checksum\t= 0x%08x\n", sig->checksum);
|
||||
printf(" sc entry\t= 0x%08x\n", (unsigned int)sig->syscall);
|
||||
}
|
||||
|
||||
void test_dump_si(struct sys_info *si)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("sys info:\n");
|
||||
printf(" clkbus\t= 0x%08x\n", (unsigned int)si->clk_bus);
|
||||
printf(" clkcpu\t= 0x%08x\n", (unsigned int)si->clk_cpu);
|
||||
printf(" bar\t\t= 0x%08x\n", (unsigned int)si->bar);
|
||||
|
||||
printf("---\n");
|
||||
for (i = 0; i < si->mr_no; i++) {
|
||||
if (si->mr[i].flags == 0)
|
||||
break;
|
||||
|
||||
printf(" start\t= 0x%08lx\n", si->mr[i].start);
|
||||
printf(" size\t= 0x%08lx\n", si->mr[i].size);
|
||||
|
||||
switch(si->mr[i].flags & 0x000F) {
|
||||
case MR_ATTR_FLASH:
|
||||
printf(" type FLASH\n");
|
||||
break;
|
||||
case MR_ATTR_DRAM:
|
||||
printf(" type DRAM\n");
|
||||
break;
|
||||
case MR_ATTR_SRAM:
|
||||
printf(" type SRAM\n");
|
||||
break;
|
||||
default:
|
||||
printf(" type UNKNOWN\n");
|
||||
}
|
||||
printf("---\n");
|
||||
}
|
||||
}
|
||||
|
||||
static char *test_stor_typ(int type)
|
||||
{
|
||||
if (type & DT_STOR_IDE)
|
||||
return "IDE";
|
||||
|
||||
if (type & DT_STOR_MMC)
|
||||
return "MMC";
|
||||
|
||||
if (type & DT_STOR_SATA)
|
||||
return "SATA";
|
||||
|
||||
if (type & DT_STOR_SCSI)
|
||||
return "SCSI";
|
||||
|
||||
if (type & DT_STOR_USB)
|
||||
return "USB";
|
||||
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
void test_dump_buf(void *buf, int len)
|
||||
{
|
||||
int i;
|
||||
int line_counter = 0;
|
||||
int sep_flag = 0;
|
||||
int addr = 0;
|
||||
|
||||
printf("%07x:\t", addr);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (line_counter++ > 15) {
|
||||
line_counter = 0;
|
||||
sep_flag = 0;
|
||||
addr += 16;
|
||||
i--;
|
||||
printf("\n%07x:\t", addr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sep_flag++ > 1) {
|
||||
sep_flag = 1;
|
||||
printf(" ");
|
||||
}
|
||||
|
||||
printf("%02x", *((char *)buf++));
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void test_dump_di(int handle)
|
||||
{
|
||||
int i;
|
||||
struct device_info *di = ub_dev_get(handle);
|
||||
|
||||
printf("device info (%d):\n", handle);
|
||||
printf(" cookie\t= 0x%08x\n", (uint32_t)di->cookie);
|
||||
printf(" type\t\t= 0x%08x\n", di->type);
|
||||
|
||||
if (di->type == DEV_TYP_NET) {
|
||||
printf(" hwaddr\t= ");
|
||||
for (i = 0; i < 6; i++)
|
||||
printf("%02x ", di->di_net.hwaddr[i]);
|
||||
|
||||
printf("\n");
|
||||
|
||||
} else if (di->type & DEV_TYP_STOR) {
|
||||
printf(" type\t\t= %s\n", test_stor_typ(di->type));
|
||||
printf(" blk size\t\t= %d\n", (unsigned int)di->di_stor.block_size);
|
||||
printf(" blk count\t\t= %d\n", (unsigned int)di->di_stor.block_count);
|
||||
}
|
||||
}
|
||||
@@ -1,405 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include "glue.h"
|
||||
|
||||
static int valid_sig(struct api_signature *sig)
|
||||
{
|
||||
uint32_t checksum;
|
||||
struct api_signature s;
|
||||
|
||||
if (sig == NULL)
|
||||
return 0;
|
||||
/*
|
||||
* Clear the checksum field (in the local copy) so as to calculate the
|
||||
* CRC with the same initial contents as at the time when the sig was
|
||||
* produced
|
||||
*/
|
||||
s = *sig;
|
||||
s.checksum = 0;
|
||||
|
||||
checksum = crc32(0, (unsigned char *)&s, sizeof(struct api_signature));
|
||||
|
||||
if (checksum != sig->checksum)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Searches for the U-Boot API signature
|
||||
*
|
||||
* returns 1/0 depending on found/not found result
|
||||
*/
|
||||
int api_search_sig(struct api_signature **sig) {
|
||||
|
||||
unsigned char *sp;
|
||||
|
||||
if (sig == NULL)
|
||||
return 0;
|
||||
|
||||
sp = (unsigned char *)API_SEARCH_START;
|
||||
|
||||
while ((sp + (int)API_SIG_MAGLEN) < (unsigned char *)API_SEARCH_END) {
|
||||
if (!memcmp(sp, API_SIG_MAGIC, API_SIG_MAGLEN)) {
|
||||
*sig = (struct api_signature *)sp;
|
||||
if (valid_sig(*sig))
|
||||
return 1;
|
||||
}
|
||||
sp += API_SIG_MAGLEN;
|
||||
}
|
||||
|
||||
*sig = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************
|
||||
*
|
||||
* console
|
||||
*
|
||||
****************************************/
|
||||
|
||||
int ub_getc(void)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (!syscall(API_GETC, NULL, (uint32_t)&c))
|
||||
return -1;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
int ub_tstc(void)
|
||||
{
|
||||
int t;
|
||||
|
||||
if (!syscall(API_TSTC, NULL, (uint32_t)&t))
|
||||
return -1;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
void ub_putc(char c)
|
||||
{
|
||||
syscall(API_PUTC, NULL, (uint32_t)&c);
|
||||
}
|
||||
|
||||
void ub_puts(const char *s)
|
||||
{
|
||||
syscall(API_PUTS, NULL, (uint32_t)s);
|
||||
}
|
||||
|
||||
/****************************************
|
||||
*
|
||||
* system
|
||||
*
|
||||
****************************************/
|
||||
|
||||
void ub_reset(void)
|
||||
{
|
||||
syscall(API_RESET, NULL);
|
||||
}
|
||||
|
||||
#define MR_MAX 5
|
||||
static struct mem_region mr[MR_MAX];
|
||||
static struct sys_info si;
|
||||
|
||||
struct sys_info * ub_get_sys_info(void)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
memset(&si, 0, sizeof(struct sys_info));
|
||||
si.mr = mr;
|
||||
si.mr_no = MR_MAX;
|
||||
memset(&mr, 0, sizeof(mr));
|
||||
|
||||
if (!syscall(API_GET_SYS_INFO, &err, (u_int32_t)&si))
|
||||
return NULL;
|
||||
|
||||
return ((err) ? NULL : &si);
|
||||
}
|
||||
|
||||
/****************************************
|
||||
*
|
||||
* timing
|
||||
*
|
||||
****************************************/
|
||||
|
||||
void ub_udelay(unsigned long usec)
|
||||
{
|
||||
syscall(API_UDELAY, NULL, &usec);
|
||||
}
|
||||
|
||||
unsigned long ub_get_timer(unsigned long base)
|
||||
{
|
||||
unsigned long cur;
|
||||
|
||||
if (!syscall(API_GET_TIMER, NULL, &cur, &base))
|
||||
return 0;
|
||||
|
||||
return cur;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
*
|
||||
* devices
|
||||
*
|
||||
* Devices are identified by handles: numbers 0, 1, 2, ..., MAX_DEVS-1
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
#define MAX_DEVS 6
|
||||
|
||||
static struct device_info devices[MAX_DEVS];
|
||||
|
||||
struct device_info * ub_dev_get(int i)
|
||||
{
|
||||
return ((i < 0 || i >= MAX_DEVS) ? NULL : &devices[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enumerates the devices: fills out device_info elements in the devices[]
|
||||
* array.
|
||||
*
|
||||
* returns: number of devices found
|
||||
*/
|
||||
int ub_dev_enum(void)
|
||||
{
|
||||
struct device_info *di;
|
||||
int n = 0;
|
||||
|
||||
memset(&devices, 0, sizeof(struct device_info) * MAX_DEVS);
|
||||
di = &devices[0];
|
||||
|
||||
if (!syscall(API_DEV_ENUM, NULL, di))
|
||||
return 0;
|
||||
|
||||
while (di->cookie != NULL) {
|
||||
|
||||
if (++n >= MAX_DEVS)
|
||||
break;
|
||||
|
||||
/* take another device_info */
|
||||
di++;
|
||||
|
||||
/* pass on the previous cookie */
|
||||
di->cookie = devices[n - 1].cookie;
|
||||
|
||||
if (!syscall(API_DEV_ENUM, NULL, di))
|
||||
return 0;
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
/*
|
||||
* handle: 0-based id of the device
|
||||
*
|
||||
* returns: 0 when OK, err otherwise
|
||||
*/
|
||||
int ub_dev_open(int handle)
|
||||
{
|
||||
struct device_info *di;
|
||||
int err = 0;
|
||||
|
||||
if (handle < 0 || handle >= MAX_DEVS)
|
||||
return API_EINVAL;
|
||||
|
||||
di = &devices[handle];
|
||||
|
||||
if (!syscall(API_DEV_OPEN, &err, di))
|
||||
return -1;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int ub_dev_close(int handle)
|
||||
{
|
||||
struct device_info *di;
|
||||
|
||||
if (handle < 0 || handle >= MAX_DEVS)
|
||||
return API_EINVAL;
|
||||
|
||||
di = &devices[handle];
|
||||
if (!syscall(API_DEV_CLOSE, NULL, di))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Validates device for read/write, it has to:
|
||||
*
|
||||
* - have sane handle
|
||||
* - be opened
|
||||
*
|
||||
* returns: 0/1 accordingly
|
||||
*/
|
||||
static int dev_valid(int handle)
|
||||
{
|
||||
if (handle < 0 || handle >= MAX_DEVS)
|
||||
return 0;
|
||||
|
||||
if (devices[handle].state != DEV_STA_OPEN)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int dev_stor_valid(int handle)
|
||||
{
|
||||
if (!dev_valid(handle))
|
||||
return 0;
|
||||
|
||||
if (!(devices[handle].type & DEV_TYP_STOR))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ub_dev_read(int handle, void *buf, lbasize_t len, lbastart_t start)
|
||||
{
|
||||
struct device_info *di;
|
||||
lbasize_t act_len;
|
||||
int err = 0;
|
||||
|
||||
if (!dev_stor_valid(handle))
|
||||
return API_ENODEV;
|
||||
|
||||
di = &devices[handle];
|
||||
if (!syscall(API_DEV_READ, &err, di, buf, &len, &start, &act_len))
|
||||
return -1;
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (act_len != len)
|
||||
return API_EIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dev_net_valid(int handle)
|
||||
{
|
||||
if (!dev_valid(handle))
|
||||
return 0;
|
||||
|
||||
if (devices[handle].type != DEV_TYP_NET)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ub_dev_recv(int handle, void *buf, int len)
|
||||
{
|
||||
struct device_info *di;
|
||||
int err = 0, act_len;
|
||||
|
||||
if (!dev_net_valid(handle))
|
||||
return API_ENODEV;
|
||||
|
||||
di = &devices[handle];
|
||||
if (!syscall(API_DEV_READ, &err, di, buf, &len, &act_len))
|
||||
return -1;
|
||||
|
||||
if (err)
|
||||
return -1;
|
||||
|
||||
return act_len;
|
||||
}
|
||||
|
||||
int ub_dev_send(int handle, void *buf, int len)
|
||||
{
|
||||
struct device_info *di;
|
||||
int err = 0;
|
||||
|
||||
if (!dev_net_valid(handle))
|
||||
return API_ENODEV;
|
||||
|
||||
di = &devices[handle];
|
||||
if (!syscall(API_DEV_WRITE, &err, di, buf, &len))
|
||||
return -1;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/****************************************
|
||||
*
|
||||
* env vars
|
||||
*
|
||||
****************************************/
|
||||
|
||||
char * ub_env_get(const char *name)
|
||||
{
|
||||
char *value;
|
||||
|
||||
if (!syscall(API_ENV_GET, NULL, (uint32_t)name, (uint32_t)&value))
|
||||
return NULL;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
void ub_env_set(const char *name, char *value)
|
||||
{
|
||||
syscall(API_ENV_SET, NULL, (uint32_t)name, (uint32_t)value);
|
||||
}
|
||||
|
||||
|
||||
static char env_name[256];
|
||||
|
||||
const char * ub_env_enum(const char *last)
|
||||
{
|
||||
const char *env, *str;
|
||||
int i;
|
||||
|
||||
env = NULL;
|
||||
|
||||
/*
|
||||
* It's OK to pass only the name piece as last (and not the whole
|
||||
* 'name=val' string), since the API_ENUM_ENV call uses envmatch()
|
||||
* internally, which handles such case
|
||||
*/
|
||||
if (!syscall(API_ENV_ENUM, NULL, (uint32_t)last, (uint32_t)&env))
|
||||
return NULL;
|
||||
|
||||
if (!env)
|
||||
/* no more env. variables to enumerate */
|
||||
return NULL;
|
||||
|
||||
/* next enumerated env var */
|
||||
memset(env_name, 0, 256);
|
||||
for (i = 0, str = env; *str != '=' && *str != '\0';)
|
||||
env_name[i++] = *str++;
|
||||
|
||||
env_name[i] = '\0';
|
||||
|
||||
return env_name;
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is the header file for conveniency wrapper routines (API glue)
|
||||
*/
|
||||
|
||||
#ifndef _API_GLUE_H_
|
||||
#define _API_GLUE_H_
|
||||
|
||||
#define API_SEARCH_START (255 * 1024 * 1024) /* start at 1MB below top RAM */
|
||||
#define API_SEARCH_END (256 * 1024 * 1024 - 1) /* ...and search to the end */
|
||||
|
||||
int syscall(int, int *, ...);
|
||||
void * syscall_ptr;
|
||||
|
||||
int api_search_sig(struct api_signature **sig);
|
||||
|
||||
/*
|
||||
* ub_ library calls are part of the application, not U-Boot code! They are
|
||||
* front-end wrappers that are used by the consumer application: they prepare
|
||||
* arguments for particular syscall and jump to the low level syscall()
|
||||
*/
|
||||
|
||||
/* console */
|
||||
int ub_getc(void);
|
||||
int ub_tstc(void);
|
||||
void ub_putc(char c);
|
||||
void ub_puts(const char *s);
|
||||
|
||||
/* system */
|
||||
void ub_reset(void);
|
||||
struct sys_info * ub_get_sys_info(void);
|
||||
|
||||
/* time */
|
||||
void ub_udelay(unsigned long);
|
||||
unsigned long ub_get_timer(unsigned long);
|
||||
|
||||
/* env vars */
|
||||
char * ub_env_get(const char *name);
|
||||
void ub_env_set(const char *name, char *value);
|
||||
const char * ub_env_enum(const char *last);
|
||||
|
||||
/* devices */
|
||||
int ub_dev_enum(void);
|
||||
int ub_dev_open(int handle);
|
||||
int ub_dev_close(int handle);
|
||||
int ub_dev_read(int handle, void *buf,
|
||||
lbasize_t len, lbastart_t start);
|
||||
int ub_dev_send(int handle, void *buf, int len);
|
||||
int ub_dev_recv(int handle, void *buf, int len);
|
||||
struct device_info * ub_dev_get(int);
|
||||
|
||||
#endif /* _API_GLUE_H_ */
|
||||
@@ -1,95 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2007 Semihalf
|
||||
*
|
||||
* Written by: Rafal Jaworowski <raj@semihalf.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* This is is a set of wrappers/stubs that allow to use certain routines from
|
||||
* U-Boot's lib_generic in the standalone app. This way way we can re-use
|
||||
* existing code e.g. operations on strings and similar.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <linux/types.h>
|
||||
#include <api_public.h>
|
||||
|
||||
#include "glue.h"
|
||||
|
||||
/*
|
||||
* printf() and vprintf() are stolen from u-boot/common/console.c
|
||||
*/
|
||||
void printf (const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
uint i;
|
||||
char printbuffer[256];
|
||||
|
||||
va_start (args, fmt);
|
||||
|
||||
/* For this to work, printbuffer must be larger than
|
||||
* anything we ever want to print.
|
||||
*/
|
||||
i = vsprintf (printbuffer, fmt, args);
|
||||
va_end (args);
|
||||
|
||||
/* Print the string */
|
||||
ub_puts (printbuffer);
|
||||
}
|
||||
|
||||
void vprintf (const char *fmt, va_list args)
|
||||
{
|
||||
uint i;
|
||||
char printbuffer[256];
|
||||
|
||||
/* For this to work, printbuffer must be larger than
|
||||
* anything we ever want to print.
|
||||
*/
|
||||
i = vsprintf (printbuffer, fmt, args);
|
||||
|
||||
/* Print the string */
|
||||
ub_puts (printbuffer);
|
||||
}
|
||||
|
||||
void putc (const char c)
|
||||
{
|
||||
ub_putc(c);
|
||||
}
|
||||
|
||||
void udelay(unsigned long usec)
|
||||
{
|
||||
ub_udelay(usec);
|
||||
}
|
||||
|
||||
void do_reset (void)
|
||||
{
|
||||
ub_reset();
|
||||
}
|
||||
|
||||
void *malloc (size_t len)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void hang (void)
|
||||
{
|
||||
while (1) ;
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2000-2002
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelax
|
||||
PLATFORM_LDFLAGS += --relax
|
||||
@@ -1,39 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2000-2002
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
CONFIG_BFIN_CPU := $(strip $(subst ",,$(CONFIG_BFIN_CPU)))
|
||||
CONFIG_BFIN_BOOT_MODE := $(strip $(subst ",,$(CONFIG_BFIN_BOOT_MODE)))
|
||||
|
||||
PLATFORM_RELFLAGS += -ffixed-P5
|
||||
PLATFORM_CPPFLAGS += -DCONFIG_BLACKFIN
|
||||
|
||||
ifneq (,$(CONFIG_BFIN_CPU))
|
||||
PLATFORM_RELFLAGS += -mcpu=$(CONFIG_BFIN_CPU)
|
||||
endif
|
||||
|
||||
SYM_PREFIX = _
|
||||
|
||||
LDR_FLAGS += --use-vmas
|
||||
ifneq (,$(findstring s,$(MAKEFLAGS)))
|
||||
LDR_FLAGS += --quiet
|
||||
endif
|
||||
@@ -1,44 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2003-2006
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
|
||||
LIB = $(obj)lib$(BOARD).a
|
||||
|
||||
COBJS = $(BOARD).o flash.o
|
||||
|
||||
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
SOBJS := $(addprefix $(obj),$(SOBJS))
|
||||
|
||||
$(LIB): $(obj).depend $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||
|
||||
#########################################################################
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
|
||||
sinclude $(obj).depend
|
||||
|
||||
#########################################################################
|
||||
@@ -1,29 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2004 Atmark Techno, Inc.
|
||||
#
|
||||
# Yasushi SHOJI <yashi@atmark-techno.com>
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
TEXT_BASE = 0x80F00000
|
||||
|
||||
PLATFORM_CPPFLAGS += -mno-xl-soft-mul
|
||||
PLATFORM_CPPFLAGS += -mno-xl-soft-div
|
||||
PLATFORM_CPPFLAGS += -mxl-barrel-shift
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2004 Atmark Techno, Inc.
|
||||
*
|
||||
* Yasushi SHOJI <yashi@atmark-techno.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
|
||||
flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
|
||||
|
||||
unsigned long flash_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void flash_print_info(flash_info_t *info)
|
||||
{
|
||||
}
|
||||
|
||||
int flash_erase(flash_info_t *info, int s_first, int s_last)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2004 Atmark Techno, Inc.
|
||||
*
|
||||
* Yasushi SHOJI <yashi@atmark-techno.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* This is a board specific file. It's OK to include board specific
|
||||
* header files */
|
||||
#include <config.h>
|
||||
|
||||
void do_reset(void)
|
||||
{
|
||||
*((unsigned long *)(MICROBLAZE_SYSREG_BASE_ADDR)) = MICROBLAZE_SYSREG_RECONFIGURE;
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2004 Atmark Techno, Inc.
|
||||
*
|
||||
* Yasushi SHOJI <yashi@atmark-techno.com>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(microblaze)
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text ALIGN(0x4):
|
||||
{
|
||||
__text_start = .;
|
||||
cpu/microblaze/start.o (.text)
|
||||
*(.text)
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
.rodata ALIGN(0x4):
|
||||
{
|
||||
__rodata_start = .;
|
||||
*(.rodata)
|
||||
__rodata_end = .;
|
||||
}
|
||||
|
||||
.data ALIGN(0x4):
|
||||
{
|
||||
__data_start = .;
|
||||
*(.data)
|
||||
__data_end = .;
|
||||
}
|
||||
|
||||
.u_boot_cmd ALIGN(0x4):
|
||||
{
|
||||
. = .;
|
||||
__u_boot_cmd_start = .;
|
||||
*(.u_boot_cmd)
|
||||
__u_boot_cmd_end = .;
|
||||
}
|
||||
|
||||
.bss ALIGN(0x4):
|
||||
{
|
||||
__bss_start = .;
|
||||
*(.bss)
|
||||
__bss_end = .;
|
||||
}
|
||||
__end = . ;
|
||||
}
|
||||
@@ -1,162 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2005
|
||||
* BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* (C) Copyright 2000-2003
|
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include "asm/m5282.h"
|
||||
#include "VCxK.h"
|
||||
|
||||
int checkboard (void)
|
||||
{
|
||||
puts ("Board: MCF-EV1 + MCF-EV23 (BuS Elektronik GmbH & Co. KG)\n");
|
||||
#if (TEXT_BASE == CFG_INT_FLASH_BASE)
|
||||
puts (" Boot from Internal FLASH\n");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram (int board_type)
|
||||
{
|
||||
int size, i;
|
||||
|
||||
size = 0;
|
||||
MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6
|
||||
| MCFSDRAMC_DCR_RC ((15 * CFG_CLK) >> 4);
|
||||
#ifdef CFG_SDRAM_BASE0
|
||||
|
||||
MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE (CFG_SDRAM_BASE0)
|
||||
| MCFSDRAMC_DACR_CASL (1)
|
||||
| MCFSDRAMC_DACR_CBM (3)
|
||||
| MCFSDRAMC_DACR_PS_16;
|
||||
|
||||
MCFSDRAMC_DMR0 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
|
||||
|
||||
MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
|
||||
|
||||
*(unsigned short *) (CFG_SDRAM_BASE0) = 0xA5A5;
|
||||
MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
|
||||
for (i = 0; i < 2000; i++)
|
||||
asm (" nop");
|
||||
mbar_writeLong (MCFSDRAMC_DACR0,
|
||||
mbar_readLong (MCFSDRAMC_DACR0) | MCFSDRAMC_DACR_IMRS);
|
||||
*(unsigned int *) (CFG_SDRAM_BASE0 + 0x220) = 0xA5A5;
|
||||
size += CFG_SDRAM_SIZE * 1024 * 1024;
|
||||
#endif
|
||||
#ifdef CFG_SDRAM_BASE1
|
||||
MCFSDRAMC_DACR1 = MCFSDRAMC_DACR_BASE (CFG_SDRAM_BASE1)
|
||||
| MCFSDRAMC_DACR_CASL (1)
|
||||
| MCFSDRAMC_DACR_CBM (3)
|
||||
| MCFSDRAMC_DACR_PS_16;
|
||||
|
||||
MCFSDRAMC_DMR1 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
|
||||
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IP;
|
||||
|
||||
*(unsigned short *) (CFG_SDRAM_BASE1) = 0xA5A5;
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_RE;
|
||||
|
||||
for (i = 0; i < 2000; i++)
|
||||
asm (" nop");
|
||||
|
||||
MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IMRS;
|
||||
*(unsigned int *) (CFG_SDRAM_BASE1 + 0x220) = 0xA5A5;
|
||||
size += CFG_SDRAM_SIZE1 * 1024 * 1024;
|
||||
#endif
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
#if defined(CFG_DRAM_TEST)
|
||||
int testdram (void)
|
||||
{
|
||||
uint *pstart = (uint *) CFG_MEMTEST_START;
|
||||
uint *pend = (uint *) CFG_MEMTEST_END;
|
||||
uint *p;
|
||||
|
||||
printf("SDRAM test phase 1:\n");
|
||||
for (p = pstart; p < pend; p++)
|
||||
*p = 0xaaaaaaaa;
|
||||
|
||||
for (p = pstart; p < pend; p++) {
|
||||
if (*p != 0xaaaaaaaa) {
|
||||
printf ("SDRAM test fails at: %08x\n", (uint) p);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("SDRAM test phase 2:\n");
|
||||
for (p = pstart; p < pend; p++)
|
||||
*p = 0x55555555;
|
||||
|
||||
for (p = pstart; p < pend; p++) {
|
||||
if (*p != 0x55555555) {
|
||||
printf ("SDRAM test fails at: %08x\n", (uint) p);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("SDRAM test passed.\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int misc_init_r(void)
|
||||
{
|
||||
init_vcxk();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
int do_vcimage (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
||||
{
|
||||
int rcode = 0;
|
||||
ulong source;
|
||||
|
||||
switch (argc) {
|
||||
case 2:
|
||||
source = simple_strtoul(argv[1],NULL,16);
|
||||
vcxk_loadimage(source);
|
||||
rcode = 0;
|
||||
break;
|
||||
default:
|
||||
printf ("Usage:\n%s\n", cmdtp->usage);
|
||||
rcode = 1;
|
||||
break;
|
||||
}
|
||||
return rcode;
|
||||
}
|
||||
|
||||
/***************************************************/
|
||||
|
||||
U_BOOT_CMD(
|
||||
vcimage, 2, 0, do_vcimage,
|
||||
"vcimage - loads an image to Display\n",
|
||||
"vcimage addr\n"
|
||||
);
|
||||
|
||||
/* EOF EB+MCF-EV123c */
|
||||
@@ -1,44 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2000-2006
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
|
||||
LIB = $(obj)lib$(BOARD).a
|
||||
|
||||
COBJS = $(BOARD).o cfm_flash.o flash.o VCxK.o mii.o
|
||||
|
||||
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
SOBJS := $(addprefix $(obj),$(SOBJS))
|
||||
|
||||
$(LIB): $(obj).depend $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||
|
||||
#########################################################################
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
|
||||
sinclude $(obj).depend
|
||||
|
||||
#########################################################################
|
||||
@@ -1,136 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2005
|
||||
* BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/m5282.h>
|
||||
#include "VCxK.h"
|
||||
|
||||
vu_char *vcxk_bws = (vu_char *)(CFG_CS3_BASE);
|
||||
#define VCXK_BWS vcxk_bws
|
||||
|
||||
static ulong vcxk_driver;
|
||||
|
||||
|
||||
ulong search_vcxk_driver(void);
|
||||
void vcxk_cls(void);
|
||||
void vcxk_setbrightness(short brightness);
|
||||
int vcxk_request(void);
|
||||
int vcxk_acknowledge_wait(void);
|
||||
void vcxk_clear(void);
|
||||
|
||||
int init_vcxk(void)
|
||||
{
|
||||
VIDEO_Invert_CFG &= ~VIDEO_Invert_IO;
|
||||
VIDEO_INVERT_PORT |= VIDEO_INVERT_PIN;
|
||||
VIDEO_INVERT_DDR |= VIDEO_INVERT_PIN;
|
||||
|
||||
VIDEO_REQUEST_PORT |= VIDEO_REQUEST_PIN;
|
||||
VIDEO_REQUEST_DDR |= VIDEO_REQUEST_PIN;
|
||||
|
||||
VIDEO_ACKNOWLEDGE_DDR &= ~VIDEO_ACKNOWLEDGE_PIN;
|
||||
|
||||
vcxk_driver = search_vcxk_driver();
|
||||
if (vcxk_driver)
|
||||
{
|
||||
/* use flash resist driver */
|
||||
}
|
||||
else
|
||||
{
|
||||
vcxk_cls();
|
||||
vcxk_cls();
|
||||
vcxk_setbrightness(1000);
|
||||
}
|
||||
VIDEO_ENABLE_DDR |= VIDEO_ENABLE_PIN;
|
||||
VIDEO_ENABLE_PORT |= VIDEO_ENABLE_PIN;
|
||||
VIDEO_ENABLE_PORT &= ~VIDEO_ENABLE_PIN;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void vcxk_loadimage(ulong source)
|
||||
{
|
||||
int cnt;
|
||||
vcxk_acknowledge_wait();
|
||||
for (cnt=0; cnt<16384; cnt++)
|
||||
{
|
||||
VCXK_BWS[cnt*2] = (*(vu_char*) source);
|
||||
source++;
|
||||
}
|
||||
vcxk_request();
|
||||
}
|
||||
|
||||
void vcxk_cls(void)
|
||||
{
|
||||
vcxk_acknowledge_wait();
|
||||
vcxk_clear();
|
||||
vcxk_request();
|
||||
}
|
||||
|
||||
void vcxk_clear(void)
|
||||
{
|
||||
int cnt;
|
||||
for (cnt=0; cnt<16384; cnt++)
|
||||
{
|
||||
VCXK_BWS[cnt*2] = 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
void vcxk_setbrightness(short brightness)
|
||||
{
|
||||
VCXK_BWS[0x8000]=(brightness >> 4) +2;
|
||||
VCXK_BWS[0xC000]= (brightness + 23) >> 8;
|
||||
VCXK_BWS[0xC001]= (brightness + 23) & 0xFF;
|
||||
}
|
||||
|
||||
int vcxk_request(void)
|
||||
{
|
||||
if (vcxk_driver)
|
||||
{
|
||||
/* use flash resist driver */
|
||||
}
|
||||
else
|
||||
{
|
||||
VIDEO_REQUEST_PORT &= ~VIDEO_REQUEST_PIN;
|
||||
VIDEO_REQUEST_PORT |= VIDEO_REQUEST_PIN;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int vcxk_acknowledge_wait(void)
|
||||
{
|
||||
if (vcxk_driver)
|
||||
{
|
||||
/* use flash resist driver */
|
||||
}
|
||||
else
|
||||
{
|
||||
while (!(VIDEO_ACKNOWLEDGE_PORT & VIDEO_ACKNOWLEDGE_PIN));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
ulong search_vcxk_driver(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* eof */
|
||||
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2005
|
||||
* BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __VCXK_H_
|
||||
#define __VCXK_H_
|
||||
|
||||
extern int init_vcxk(void);
|
||||
void vcxk_loadimage(ulong source);
|
||||
|
||||
#define VIDEO_ACKNOWLEDGE_PORT MCFGPTB_GPTPORT
|
||||
#define VIDEO_ACKNOWLEDGE_DDR MCFGPTB_GPTDDR
|
||||
#define VIDEO_ACKNOWLEDGE_PIN 0x0001
|
||||
|
||||
#define VIDEO_ENABLE_PORT MCFGPTB_GPTPORT
|
||||
#define VIDEO_ENABLE_DDR MCFGPTB_GPTDDR
|
||||
#define VIDEO_ENABLE_PIN 0x0002
|
||||
|
||||
#define VIDEO_REQUEST_PORT MCFGPTB_GPTPORT
|
||||
#define VIDEO_REQUEST_DDR MCFGPTB_GPTDDR
|
||||
#define VIDEO_REQUEST_PIN 0x0004
|
||||
|
||||
#define VIDEO_Invert_CFG MCFGPIO_PEPAR
|
||||
#define VIDEO_Invert_IO MCFGPIO_PEPAR_PEPA2
|
||||
#define VIDEO_INVERT_PORT MCFGPIO_PORTE
|
||||
#define VIDEO_INVERT_DDR MCFGPIO_DDRE
|
||||
#define VIDEO_INVERT_PIN MCFGPIO_PORT2
|
||||
|
||||
#endif
|
||||
@@ -1,212 +0,0 @@
|
||||
/*
|
||||
* Basic Flash Driver for Freescale MCF 5281/5282 internal FLASH
|
||||
*
|
||||
* (C) Copyright 2005 BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/m5282.h>
|
||||
#include "cfm_flash.h"
|
||||
|
||||
#if defined(CONFIG_M5281) || defined(CONFIG_M5282)
|
||||
|
||||
#if (CFG_CLK>20000000)
|
||||
#define CFM_CLK (((long) CFG_CLK / (400000 * 8) + 1) | 0x40)
|
||||
#else
|
||||
#define CFM_CLK ((long) CFG_CLK / 400000 + 1)
|
||||
#endif
|
||||
|
||||
#define cmf_backdoor_address(addr) (((addr) & 0x0007FFFF) | 0x04000000 | \
|
||||
(CFG_MBAR & 0xC0000000))
|
||||
|
||||
void cfm_flash_print_info (flash_info_t * info)
|
||||
{
|
||||
printf ("Freescale: ");
|
||||
switch (info->flash_id & FLASH_TYPEMASK) {
|
||||
case FREESCALE_ID_MCF5281 & FLASH_TYPEMASK:
|
||||
printf ("MCF5281 internal FLASH\n");
|
||||
break;
|
||||
case FREESCALE_ID_MCF5282 & FLASH_TYPEMASK:
|
||||
printf ("MCF5282 internal FLASH\n");
|
||||
break;
|
||||
default:
|
||||
printf ("Unknown Chip Type\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void cfm_flash_init (flash_info_t * info)
|
||||
{
|
||||
int sector;
|
||||
ulong protection;
|
||||
MCFCFM_MCR = 0;
|
||||
MCFCFM_CLKD = CFM_CLK;
|
||||
debug ("CFM Clock divider: %ld (%d Hz @ %ld Hz)\n",CFM_CLK,\
|
||||
CFG_CLK / (2* ((CFM_CLK & 0x3F)+1) * (1+((CFM_CLK & 0x40)>>6)*7)),\
|
||||
CFG_CLK);
|
||||
MCFCFM_SACC = 0;
|
||||
MCFCFM_DACC = 0;
|
||||
|
||||
if (MCFCFM_SEC & MCFCFM_SEC_KEYEN)
|
||||
puts("CFM backdoor access is enabled\n");
|
||||
if (MCFCFM_SEC & MCFCFM_SEC_SECSTAT)
|
||||
puts("CFM securety is enabled\n");
|
||||
|
||||
#ifdef CONFIG_M5281
|
||||
info->flash_id = (FREESCALE_MANUFACT & FLASH_VENDMASK) |
|
||||
(FREESCALE_ID_MCF5281 & FLASH_TYPEMASK);
|
||||
info->size = 256*1024;
|
||||
info->sector_count = 16;
|
||||
#else
|
||||
info->flash_id = (FREESCALE_MANUFACT & FLASH_VENDMASK) |
|
||||
(FREESCALE_ID_MCF5282 & FLASH_TYPEMASK);
|
||||
info->size = 512*1024;
|
||||
info->sector_count = 32;
|
||||
#endif
|
||||
protection = MCFCFM_PROT;
|
||||
for (sector = 0; sector < info->sector_count; sector++)
|
||||
{
|
||||
if (sector == 0)
|
||||
{
|
||||
info->start[sector] = CFG_INT_FLASH_BASE;
|
||||
}
|
||||
else
|
||||
{
|
||||
info->start[sector] = info->start[sector-1] + 0x04000;
|
||||
}
|
||||
info->protect[sector] = protection & 1;
|
||||
protection >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
int cfm_flash_readycheck(int checkblank)
|
||||
{
|
||||
int rc;
|
||||
unsigned char state;
|
||||
|
||||
rc = ERR_OK;
|
||||
while (!(MCFCFM_USTAT & MCFCFM_USTAT_CCIF));
|
||||
state = MCFCFM_USTAT;
|
||||
if (state & MCFCFM_USTAT_ACCERR)
|
||||
{
|
||||
debug ("%s(): CFM access error",__FUNCTION__);
|
||||
rc = ERR_PROG_ERROR;
|
||||
}
|
||||
if (state & MCFCFM_USTAT_PVIOL)
|
||||
{
|
||||
debug ("%s(): CFM protection violation",__FUNCTION__);
|
||||
rc = ERR_PROTECTED;
|
||||
}
|
||||
if (checkblank)
|
||||
{
|
||||
if (!(state & MCFCFM_USTAT_BLANK))
|
||||
{
|
||||
debug ("%s(): CFM erras error",__FUNCTION__);
|
||||
rc = ERR_NOT_ERASED;
|
||||
}
|
||||
}
|
||||
MCFCFM_USTAT = state & 0x34; /* reset state */
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Erase 16KiB = 8 2KiB pages */
|
||||
|
||||
int cfm_flash_erase_sector (flash_info_t * info, int sector)
|
||||
{
|
||||
ulong address;
|
||||
int page;
|
||||
int rc;
|
||||
rc= ERR_OK;
|
||||
address = cmf_backdoor_address(info->start[sector]);
|
||||
for (page=0; (page<8) && (rc==ERR_OK); page++)
|
||||
{
|
||||
*(volatile __u32*) address = 0;
|
||||
MCFCFM_CMD = MCFCFM_CMD_PGERS;
|
||||
MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
|
||||
rc = cfm_flash_readycheck(0);
|
||||
if (rc==ERR_OK)
|
||||
{
|
||||
*(volatile __u32*) address = 0;
|
||||
MCFCFM_CMD = MCFCFM_CMD_PGERSVER;
|
||||
MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
|
||||
rc = cfm_flash_readycheck(1);
|
||||
}
|
||||
address += 0x800;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int cfm_flash_write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
|
||||
{
|
||||
int rc;
|
||||
ulong dest, data;
|
||||
|
||||
rc = ERR_OK;
|
||||
if (addr & 3)
|
||||
{
|
||||
debug ("Byte and Word alignment not supported\n");
|
||||
rc = ERR_ALIGN;
|
||||
}
|
||||
if (cnt & 3)
|
||||
{
|
||||
debug ("Byte and Word transfer not supported\n");
|
||||
rc = ERR_ALIGN;
|
||||
}
|
||||
dest = cmf_backdoor_address(addr);
|
||||
while ((cnt>=4) && (rc == ERR_OK))
|
||||
{
|
||||
data = *((volatile u32 *) src);
|
||||
*(volatile u32*) dest = data;
|
||||
MCFCFM_CMD = MCFCFM_CMD_PGM;
|
||||
MCFCFM_USTAT = MCFCFM_USTAT_CBEIF;
|
||||
rc = cfm_flash_readycheck(0);
|
||||
if (*(volatile u32*) addr != data) rc = ERR_PROG_ERROR;
|
||||
src +=4;
|
||||
dest +=4;
|
||||
addr +=4;
|
||||
cnt -=4;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
#ifdef CFG_FLASH_PROTECTION
|
||||
|
||||
int cfm_flash_protect(flash_info_t * info,long sector,int prot)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc= ERR_OK;
|
||||
if (prot)
|
||||
{
|
||||
MCFCFM_PROT |= (1<<sector);
|
||||
info->protect[sector]=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MCFCFM_PROT &= ~(1<<sector);
|
||||
info->protect[sector]=0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Basic Flash Driver for Freescale MCF 5282 internal FLASH
|
||||
*
|
||||
* (C) Copyright 2005 BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __CFM_FLASH_H_
|
||||
#define __CFM_FLASH_H_
|
||||
|
||||
#define FREESCALE_MANUFACT 0xFACFFACF
|
||||
#define FREESCALE_ID_MCF5281 0x5281
|
||||
#define FREESCALE_ID_MCF5282 0x5282
|
||||
|
||||
extern void cfm_flash_print_info (flash_info_t * info);
|
||||
extern int cfm_flash_erase_sector (flash_info_t * info, int sector);
|
||||
extern void cfm_flash_init (flash_info_t * info);
|
||||
extern int cfm_flash_write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt);
|
||||
#ifdef CFG_FLASH_PROTECTION
|
||||
extern int cfm_flash_protect(flash_info_t * info,long sector,int prot);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,28 +0,0 @@
|
||||
#
|
||||
# (C) Copyright 2000-2003
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 2 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, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
sinclude $(OBJTREE)/board/$(BOARDDIR)/textbase.mk
|
||||
ifndef TEXT_BASE
|
||||
TEXT_BASE = 0xFE000000
|
||||
endif
|
||||
@@ -1,413 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2005
|
||||
* BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
|
||||
*
|
||||
* Based On
|
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include "cfm_flash.h"
|
||||
|
||||
#define PHYS_FLASH_1 CFG_FLASH_BASE
|
||||
#define FLASH_BANK_SIZE 0x200000
|
||||
|
||||
flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
|
||||
|
||||
void flash_print_info (flash_info_t * info)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (info->flash_id & FLASH_VENDMASK) {
|
||||
case (AMD_MANUFACT & FLASH_VENDMASK):
|
||||
printf ("AMD: ");
|
||||
switch (info->flash_id & FLASH_TYPEMASK) {
|
||||
case (AMD_ID_LV160B & FLASH_TYPEMASK):
|
||||
printf ("AM29LV160B (16Bit)\n");
|
||||
break;
|
||||
default:
|
||||
printf ("Unknown Chip Type\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case FREESCALE_MANUFACT & FLASH_VENDMASK:
|
||||
cfm_flash_print_info (info);
|
||||
break;
|
||||
default:
|
||||
printf ("Unknown Vendor ");
|
||||
break;
|
||||
}
|
||||
|
||||
puts (" Size: ");
|
||||
if ((info->size >> 20) > 0)
|
||||
{
|
||||
printf ("%ld MiB",info->size >> 20);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("%ld KiB",info->size >> 10);
|
||||
}
|
||||
printf (" in %d Sectors\n", info->sector_count);
|
||||
|
||||
printf (" Sector Start Addresses:");
|
||||
for (i = 0; i < info->sector_count; i++) {
|
||||
if ((i % 4) == 0) {
|
||||
printf ("\n ");
|
||||
}
|
||||
printf ("%02d: %08lX%s ", i,info->start[i],
|
||||
info->protect[i] ? " P" : " ");
|
||||
}
|
||||
printf ("\n\n");
|
||||
}
|
||||
|
||||
unsigned long flash_init (void)
|
||||
{
|
||||
int i, j;
|
||||
ulong size = 0;
|
||||
|
||||
for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
|
||||
ulong flashbase = 0;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
flash_info[i].flash_id =
|
||||
(AMD_MANUFACT & FLASH_VENDMASK) |
|
||||
(AMD_ID_LV160B & FLASH_TYPEMASK);
|
||||
flash_info[i].size = FLASH_BANK_SIZE;
|
||||
flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
|
||||
memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
|
||||
flashbase = PHYS_FLASH_1;
|
||||
for (j = 0; j < flash_info[i].sector_count; j++) {
|
||||
if (j == 0) {
|
||||
/* 1st is 16 KiB */
|
||||
flash_info[i].start[j] = flashbase;
|
||||
}
|
||||
if ((j >= 1) && (j <= 2)) {
|
||||
/* 2nd and 3rd are 8 KiB */
|
||||
flash_info[i].start[j] =
|
||||
flashbase + 0x4000 + 0x2000 * (j - 1);
|
||||
}
|
||||
if (j == 3) {
|
||||
/* 4th is 32 KiB */
|
||||
flash_info[i].start[j] = flashbase + 0x8000;
|
||||
}
|
||||
if ((j >= 4) && (j <= 34)) {
|
||||
/* rest is 256 KiB */
|
||||
flash_info[i].start[j] =
|
||||
flashbase + 0x10000 + 0x10000 * (j - 4);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
cfm_flash_init (&flash_info[i]);
|
||||
break;
|
||||
default:
|
||||
panic ("configured to many flash banks!\n");
|
||||
}
|
||||
|
||||
size += flash_info[i].size;
|
||||
}
|
||||
|
||||
flash_protect (FLAG_PROTECT_SET,
|
||||
CFG_FLASH_BASE,
|
||||
CFG_FLASH_BASE + 0xffff, &flash_info[0]);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
#define CMD_READ_ARRAY 0x00F0
|
||||
#define CMD_UNLOCK1 0x00AA
|
||||
#define CMD_UNLOCK2 0x0055
|
||||
#define CMD_ERASE_SETUP 0x0080
|
||||
#define CMD_ERASE_CONFIRM 0x0030
|
||||
#define CMD_PROGRAM 0x00A0
|
||||
#define CMD_UNLOCK_BYPASS 0x0020
|
||||
|
||||
#define MEM_FLASH_ADDR1 (*(volatile u16 *)(info->start[0] + (0x00000555<<1)))
|
||||
#define MEM_FLASH_ADDR2 (*(volatile u16 *)(info->start[0] + (0x000002AA<<1)))
|
||||
|
||||
|
||||
#define BIT_ERASE_DONE 0x0080
|
||||
#define BIT_RDY_MASK 0x0080
|
||||
#define BIT_PROGRAM_ERROR 0x0020
|
||||
#define BIT_TIMEOUT 0x80000000 /* our flag */
|
||||
|
||||
#define ERR_READY -1
|
||||
|
||||
int amd_flash_erase_sector(flash_info_t * info, int sector)
|
||||
{
|
||||
int state;
|
||||
ulong result;
|
||||
|
||||
volatile u16 *addr =
|
||||
(volatile u16 *) (info->start[sector]);
|
||||
|
||||
MEM_FLASH_ADDR1 = CMD_UNLOCK1;
|
||||
MEM_FLASH_ADDR2 = CMD_UNLOCK2;
|
||||
MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
|
||||
|
||||
MEM_FLASH_ADDR1 = CMD_UNLOCK1;
|
||||
MEM_FLASH_ADDR2 = CMD_UNLOCK2;
|
||||
*addr = CMD_ERASE_CONFIRM;
|
||||
|
||||
/* wait until flash is ready */
|
||||
state = 0;
|
||||
set_timer (0);
|
||||
|
||||
do {
|
||||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer (0) > CFG_FLASH_ERASE_TOUT) {
|
||||
MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
|
||||
state = ERR_TIMOUT;
|
||||
}
|
||||
|
||||
if (!state && (result & 0xFFFF) & BIT_ERASE_DONE)
|
||||
state = ERR_READY;
|
||||
}
|
||||
while (!state);
|
||||
if (state == ERR_READY)
|
||||
state = ERR_OK;
|
||||
|
||||
MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
int flash_erase (flash_info_t * info, int s_first, int s_last)
|
||||
{
|
||||
int iflag, cflag;
|
||||
int sector;
|
||||
int rc;
|
||||
|
||||
rc = ERR_OK;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
{
|
||||
rc = ERR_UNKNOWN_FLASH_TYPE;
|
||||
} /* (info->flash_id == FLASH_UNKNOWN) */
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last) || s_last >= info->sector_count)
|
||||
{
|
||||
rc = ERR_INVAL;
|
||||
}
|
||||
|
||||
cflag = icache_status ();
|
||||
icache_disable ();
|
||||
iflag = disable_interrupts ();
|
||||
|
||||
for (sector = s_first; (sector <= s_last) && (rc == ERR_OK); sector++) {
|
||||
|
||||
if (info->protect[sector])
|
||||
{
|
||||
putc('P'); /* protected sector will not erase */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* erase on unprotected sector */
|
||||
puts("E\b");
|
||||
switch (info->flash_id & FLASH_VENDMASK)
|
||||
{
|
||||
case (AMD_MANUFACT & FLASH_VENDMASK):
|
||||
rc = amd_flash_erase_sector(info,sector);
|
||||
break;
|
||||
case (FREESCALE_MANUFACT & FLASH_VENDMASK):
|
||||
rc = cfm_flash_erase_sector(info,sector);
|
||||
break;
|
||||
default:
|
||||
return ERR_UNKNOWN_FLASH_VENDOR;
|
||||
}
|
||||
putc('.');
|
||||
}
|
||||
}
|
||||
if (rc!=ERR_OK)
|
||||
{
|
||||
printf ("\n ");
|
||||
flash_perror (rc);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf (" done\n");
|
||||
}
|
||||
|
||||
udelay (10000); /* allow flash to settle - wait 10 ms */
|
||||
|
||||
if (iflag)
|
||||
enable_interrupts ();
|
||||
|
||||
if (cflag)
|
||||
icache_enable ();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
volatile static int amd_write_word (flash_info_t * info, ulong dest, u16 data)
|
||||
{
|
||||
volatile u16 *addr;
|
||||
ulong result;
|
||||
int cflag, iflag;
|
||||
int state;
|
||||
|
||||
/*
|
||||
* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
addr = (volatile u16 *) dest;
|
||||
|
||||
result = *addr;
|
||||
if ((result & data) != data)
|
||||
return ERR_NOT_ERASED;
|
||||
|
||||
/*
|
||||
* Disable interrupts which might cause a timeout
|
||||
* here. Remember that our exception vectors are
|
||||
* at address 0 in the flash, and we don't want a
|
||||
* (ticker) exception to happen while the flash
|
||||
* chip is in programming mode.
|
||||
*/
|
||||
|
||||
cflag = icache_status ();
|
||||
icache_disable ();
|
||||
iflag = disable_interrupts ();
|
||||
|
||||
MEM_FLASH_ADDR1 = CMD_UNLOCK1;
|
||||
MEM_FLASH_ADDR2 = CMD_UNLOCK2;
|
||||
MEM_FLASH_ADDR1 = CMD_PROGRAM;
|
||||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
set_timer (0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
state = 0;
|
||||
do {
|
||||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer (0) > CFG_FLASH_ERASE_TOUT) {
|
||||
state = ERR_TIMOUT;
|
||||
}
|
||||
if (!state && ((result & BIT_RDY_MASK) == (data & BIT_RDY_MASK)))
|
||||
state = ERR_READY;
|
||||
|
||||
} while (!state);
|
||||
|
||||
*addr = CMD_READ_ARRAY;
|
||||
|
||||
if (state == ERR_READY)
|
||||
state = ERR_OK;
|
||||
if ((*addr != data) && (state != ERR_TIMOUT))
|
||||
state = ERR_PROG_ERROR;
|
||||
|
||||
if (iflag)
|
||||
enable_interrupts ();
|
||||
|
||||
if (cflag)
|
||||
icache_enable ();
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
int amd_flash_write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt)
|
||||
{
|
||||
int rc;
|
||||
ulong dest;
|
||||
u16 data;
|
||||
|
||||
rc = ERR_OK;
|
||||
if (addr & 1)
|
||||
{
|
||||
debug ("Byte alignment not supported\n");
|
||||
rc = ERR_ALIGN;
|
||||
}
|
||||
if (cnt & 1)
|
||||
{
|
||||
debug ("Byte transfer not supported\n");
|
||||
rc = ERR_ALIGN;
|
||||
}
|
||||
|
||||
dest = addr;
|
||||
while ((cnt>=2) && (rc == ERR_OK))
|
||||
{
|
||||
data = *((volatile u16 *) src);
|
||||
rc=amd_write_word (info,dest,data);
|
||||
src +=2;
|
||||
dest +=2;
|
||||
cnt -=2;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
|
||||
{
|
||||
int rc;
|
||||
|
||||
switch (info->flash_id & FLASH_VENDMASK)
|
||||
{
|
||||
case (AMD_MANUFACT & FLASH_VENDMASK):
|
||||
rc = amd_flash_write_buff(info,src,addr,cnt);
|
||||
break;
|
||||
case (FREESCALE_MANUFACT & FLASH_VENDMASK):
|
||||
rc = cfm_flash_write_buff(info,src,addr,cnt);
|
||||
break;
|
||||
default:
|
||||
rc = ERR_UNKNOWN_FLASH_VENDOR;
|
||||
}
|
||||
return rc;
|
||||
|
||||
}
|
||||
int amd_flash_protect(flash_info_t * info,long sector,int prot)
|
||||
{
|
||||
int rc;
|
||||
rc= ERR_OK;
|
||||
if (prot)
|
||||
{
|
||||
info->protect[sector]=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
info->protect[sector]=0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
#ifdef CFG_FLASH_PROTECTION
|
||||
|
||||
int flash_real_protect(flash_info_t * info,long sector,int prot)
|
||||
{
|
||||
int rc;
|
||||
|
||||
switch (info->flash_id & FLASH_VENDMASK)
|
||||
{
|
||||
case (AMD_MANUFACT & FLASH_VENDMASK):
|
||||
rc = amd_flash_protect(info,sector,prot);
|
||||
break;
|
||||
case (FREESCALE_MANUFACT & FLASH_VENDMASK):
|
||||
rc = cfm_flash_protect(info,sector,prot);
|
||||
break;
|
||||
default:
|
||||
rc = ERR_UNKNOWN_FLASH_VENDOR;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,304 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
|
||||
* TsiChung Liew (Tsi-Chung.Liew@freescale.com)
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/fec.h>
|
||||
#include <asm/immap.h>
|
||||
|
||||
#include <config.h>
|
||||
#include <net.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
|
||||
#undef MII_DEBUG
|
||||
#undef ET_DEBUG
|
||||
|
||||
int fecpin_setclear(struct eth_device *dev, int setclear)
|
||||
{
|
||||
if (setclear) {
|
||||
MCFGPIO_PASPAR |= 0x0F00;
|
||||
MCFGPIO_PEHLPAR = CFG_PEHLPAR;
|
||||
} else {
|
||||
MCFGPIO_PASPAR &= 0xF0FF;
|
||||
MCFGPIO_PEHLPAR &= ~CFG_PEHLPAR;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CFG_DISCOVER_PHY) || defined(CONFIG_CMD_MII)
|
||||
#include <miiphy.h>
|
||||
|
||||
/* Make MII read/write commands for the FEC. */
|
||||
#define mk_mii_read(ADDR, REG) (0x60020000 | ((ADDR << 23) | (REG & 0x1f) << 18))
|
||||
|
||||
#define mk_mii_write(ADDR, REG, VAL) (0x50020000 | ((ADDR << 23) | (REG & 0x1f) << 18) | (VAL & 0xffff))
|
||||
|
||||
/* PHY identification */
|
||||
#define PHY_ID_LXT970 0x78100000 /* LXT970 */
|
||||
#define PHY_ID_LXT971 0x001378e0 /* LXT971 and 972 */
|
||||
#define PHY_ID_82555 0x02a80150 /* Intel 82555 */
|
||||
#define PHY_ID_QS6612 0x01814400 /* QS6612 */
|
||||
#define PHY_ID_AMD79C784 0x00225610 /* AMD 79C784 */
|
||||
#define PHY_ID_AMD79C874VC 0x0022561B /* AMD 79C874 */
|
||||
#define PHY_ID_LSI80225 0x0016f870 /* LSI 80225 */
|
||||
#define PHY_ID_LSI80225B 0x0016f880 /* LSI 80225/B */
|
||||
#define PHY_ID_DP83848VV 0x20005C90 /* National 83848 */
|
||||
#define PHY_ID_DP83849 0x20005CA2 /* National 82849 */
|
||||
|
||||
#define STR_ID_LXT970 "LXT970"
|
||||
#define STR_ID_LXT971 "LXT971"
|
||||
#define STR_ID_82555 "Intel82555"
|
||||
#define STR_ID_QS6612 "QS6612"
|
||||
#define STR_ID_AMD79C784 "AMD79C784"
|
||||
#define STR_ID_AMD79C874VC "AMD79C874VC"
|
||||
#define STR_ID_LSI80225 "LSI80225"
|
||||
#define STR_ID_LSI80225B "LSI80225/B"
|
||||
#define STR_ID_DP83848VV "N83848"
|
||||
#define STR_ID_DP83849 "N83849"
|
||||
|
||||
/****************************************************************************
|
||||
* mii_init -- Initialize the MII for MII command without ethernet
|
||||
* This function is a subset of eth_init
|
||||
****************************************************************************
|
||||
*/
|
||||
void mii_reset(struct fec_info_s *info)
|
||||
{
|
||||
volatile fec_t *fecp = (fec_t *) (info->miibase);
|
||||
int i;
|
||||
|
||||
fecp->ecr = FEC_ECR_RESET;
|
||||
for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) {
|
||||
udelay(1);
|
||||
}
|
||||
if (i == FEC_RESET_DELAY) {
|
||||
printf("FEC_RESET_DELAY timeout\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* send command to phy using mii, wait for result */
|
||||
uint mii_send(uint mii_cmd)
|
||||
{
|
||||
struct fec_info_s *info;
|
||||
struct eth_device *dev;
|
||||
volatile fec_t *ep;
|
||||
uint mii_reply;
|
||||
int j = 0;
|
||||
|
||||
/* retrieve from register structure */
|
||||
dev = eth_get_dev();
|
||||
info = dev->priv;
|
||||
|
||||
ep = (fec_t *) info->miibase;
|
||||
|
||||
ep->mmfr = mii_cmd; /* command to phy */
|
||||
|
||||
/* wait for mii complete */
|
||||
while (!(ep->eir & FEC_EIR_MII) && (j < MCFFEC_TOUT_LOOP)) {
|
||||
udelay(1);
|
||||
j++;
|
||||
}
|
||||
if (j >= MCFFEC_TOUT_LOOP) {
|
||||
printf("MII not complete\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
mii_reply = ep->mmfr; /* result from phy */
|
||||
ep->eir = FEC_EIR_MII; /* clear MII complete */
|
||||
#ifdef ET_DEBUG
|
||||
printf("%s[%d] %s: sent=0x%8.8x, reply=0x%8.8x\n",
|
||||
__FILE__, __LINE__, __FUNCTION__, mii_cmd, mii_reply);
|
||||
#endif
|
||||
|
||||
return (mii_reply & 0xffff); /* data read from phy */
|
||||
}
|
||||
#endif /* CFG_DISCOVER_PHY || CONFIG_CMD_MII */
|
||||
|
||||
#if defined(CFG_DISCOVER_PHY)
|
||||
int mii_discover_phy(struct eth_device *dev)
|
||||
{
|
||||
#define MAX_PHY_PASSES 11
|
||||
struct fec_info_s *info = dev->priv;
|
||||
int phyaddr, pass;
|
||||
uint phyno, phytype;
|
||||
|
||||
if (info->phyname_init)
|
||||
return info->phy_addr;
|
||||
|
||||
phyaddr = -1; /* didn't find a PHY yet */
|
||||
for (pass = 1; pass <= MAX_PHY_PASSES && phyaddr < 0; ++pass) {
|
||||
if (pass > 1) {
|
||||
/* PHY may need more time to recover from reset.
|
||||
* The LXT970 needs 50ms typical, no maximum is
|
||||
* specified, so wait 10ms before try again.
|
||||
* With 11 passes this gives it 100ms to wake up.
|
||||
*/
|
||||
udelay(10000); /* wait 10ms */
|
||||
}
|
||||
|
||||
for (phyno = 0; phyno < 32 && phyaddr < 0; ++phyno) {
|
||||
|
||||
phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1));
|
||||
#ifdef ET_DEBUG
|
||||
printf("PHY type 0x%x pass %d type\n", phytype, pass);
|
||||
#endif
|
||||
if (phytype != 0xffff) {
|
||||
phyaddr = phyno;
|
||||
phytype <<= 16;
|
||||
phytype |=
|
||||
mii_send(mk_mii_read(phyno, PHY_PHYIDR2));
|
||||
|
||||
switch (phytype & 0xffffffff) {
|
||||
case PHY_ID_AMD79C874VC:
|
||||
strcpy(info->phy_name,
|
||||
STR_ID_AMD79C874VC);
|
||||
info->phyname_init = 1;
|
||||
break;
|
||||
default:
|
||||
strcpy(info->phy_name, "unknown");
|
||||
info->phyname_init = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef ET_DEBUG
|
||||
printf("PHY @ 0x%x pass %d type ", phyno, pass);
|
||||
switch (phytype & 0xffffffff) {
|
||||
case PHY_ID_AMD79C874VC:
|
||||
printf(STR_ID_AMD79C874VC);
|
||||
break;
|
||||
default:
|
||||
printf("0x%08x\n", phytype);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
if (phyaddr < 0)
|
||||
printf("No PHY device found.\n");
|
||||
|
||||
return phyaddr;
|
||||
}
|
||||
#endif /* CFG_DISCOVER_PHY */
|
||||
|
||||
void mii_init(void) __attribute__((weak,alias("__mii_init")));
|
||||
|
||||
void __mii_init(void)
|
||||
{
|
||||
volatile fec_t *fecp;
|
||||
struct fec_info_s *info;
|
||||
struct eth_device *dev;
|
||||
int miispd = 0, i = 0;
|
||||
u16 autoneg = 0;
|
||||
|
||||
/* retrieve from register structure */
|
||||
dev = eth_get_dev();
|
||||
info = dev->priv;
|
||||
|
||||
fecp = (fec_t *) info->miibase;
|
||||
|
||||
fecpin_setclear(dev, 1);
|
||||
|
||||
mii_reset(info);
|
||||
|
||||
/* We use strictly polling mode only */
|
||||
fecp->eimr = 0;
|
||||
|
||||
/* Clear any pending interrupt */
|
||||
fecp->eir = 0xffffffff;
|
||||
|
||||
/* Set MII speed */
|
||||
miispd = (gd->bus_clk / 1000000) / 5;
|
||||
fecp->mscr = miispd << 1;
|
||||
|
||||
info->phy_addr = mii_discover_phy(dev);
|
||||
|
||||
#define AUTONEGLINK (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)
|
||||
while (i < MCFFEC_TOUT_LOOP) {
|
||||
autoneg = 0;
|
||||
miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &autoneg);
|
||||
i++;
|
||||
|
||||
if ((autoneg & AUTONEGLINK) == AUTONEGLINK)
|
||||
break;
|
||||
|
||||
udelay(500);
|
||||
}
|
||||
if (i >= MCFFEC_TOUT_LOOP) {
|
||||
printf("Auto Negotiation not complete\n");
|
||||
}
|
||||
|
||||
/* adapt to the half/full speed settings */
|
||||
info->dup_spd = miiphy_duplex(dev->name, info->phy_addr) << 16;
|
||||
info->dup_spd |= miiphy_speed(dev->name, info->phy_addr);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Read and write a MII PHY register, routines used by MII Utilities
|
||||
*
|
||||
* FIXME: These routines are expected to return 0 on success, but mii_send
|
||||
* does _not_ return an error code. Maybe 0xFFFF means error, i.e.
|
||||
* no PHY connected...
|
||||
* For now always return 0.
|
||||
* FIXME: These routines only work after calling eth_init() at least once!
|
||||
* Otherwise they hang in mii_send() !!! Sorry!
|
||||
*****************************************************************************/
|
||||
|
||||
int mcffec_miiphy_read(char *devname, unsigned char addr, unsigned char reg,
|
||||
unsigned short *value)
|
||||
{
|
||||
short rdreg; /* register working value */
|
||||
|
||||
#ifdef MII_DEBUG
|
||||
printf("miiphy_read(0x%x) @ 0x%x = ", reg, addr);
|
||||
#endif
|
||||
rdreg = mii_send(mk_mii_read(addr, reg));
|
||||
|
||||
*value = rdreg;
|
||||
|
||||
#ifdef MII_DEBUG
|
||||
printf("0x%04x\n", *value);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mcffec_miiphy_write(char *devname, unsigned char addr, unsigned char reg,
|
||||
unsigned short value)
|
||||
{
|
||||
short rdreg; /* register working value */
|
||||
|
||||
#ifdef MII_DEBUG
|
||||
printf("miiphy_write(0x%x) @ 0x%x = ", reg, addr);
|
||||
#endif
|
||||
|
||||
rdreg = mii_send(mk_mii_write(addr, reg, value));
|
||||
|
||||
#ifdef MII_DEBUG
|
||||
printf("0x%04x\n", value);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */
|
||||
@@ -1 +0,0 @@
|
||||
TEXT_BASE = 0xFFE00000
|
||||
@@ -1,140 +0,0 @@
|
||||
/*
|
||||
* (C) Copyright 2000-2003
|
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* 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 2 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(m68k)
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
SECTIONS
|
||||
{
|
||||
/* Read-only sections, merged into text segment: */
|
||||
. = + SIZEOF_HEADERS;
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
.rela.ctors : { *(.rela.ctors) }
|
||||
.rel.dtors : { *(.rel.dtors) }
|
||||
.rela.dtors : { *(.rela.dtors) }
|
||||
.rel.bss : { *(.rel.bss) }
|
||||
.rela.bss : { *(.rela.bss) }
|
||||
.rel.plt : { *(.rel.plt) }
|
||||
.rela.plt : { *(.rela.plt) }
|
||||
.init : { *(.init) }
|
||||
.plt : { *(.plt) }
|
||||
.text :
|
||||
{
|
||||
/* WARNING - the following is hand-optimized to fit within */
|
||||
/* the sector layout of our flash chips! XXX FIXME XXX */
|
||||
|
||||
cpu/mcf52x2/start.o (.text)
|
||||
common/dlmalloc.o (.text)
|
||||
lib_generic/string.o (.text)
|
||||
lib_generic/vsprintf.o (.text)
|
||||
lib_generic/crc32.o (.text)
|
||||
lib_generic/zlib.o (.text)
|
||||
|
||||
/* . = env_offset; */
|
||||
common/env_embedded.o(.text)
|
||||
|
||||
*(.text)
|
||||
*(.fixup)
|
||||
*(.got1)
|
||||
}
|
||||
_etext = .;
|
||||
PROVIDE (etext = .);
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
}
|
||||
.fini : { *(.fini) } =0
|
||||
.ctors : { *(.ctors) }
|
||||
.dtors : { *(.dtors) }
|
||||
|
||||
/* Read-write section, merged into data segment: */
|
||||
. = (. + 0x00FF) & 0xFFFFFF00;
|
||||
_erotext = .;
|
||||
PROVIDE (erotext = .);
|
||||
.reloc :
|
||||
{
|
||||
__got_start = .;
|
||||
*(.got)
|
||||
__got_end = .;
|
||||
_GOT2_TABLE_ = .;
|
||||
*(.got2)
|
||||
_FIXUP_TABLE_ = .;
|
||||
*(.fixup)
|
||||
}
|
||||
__got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
|
||||
__fixup_entries = (. - _FIXUP_TABLE_)>>2;
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
*(.data1)
|
||||
*(.sdata)
|
||||
*(.sdata2)
|
||||
*(.dynamic)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
|
||||
__u_boot_cmd_start = .;
|
||||
.u_boot_cmd : { *(.u_boot_cmd) }
|
||||
__u_boot_cmd_end = .;
|
||||
|
||||
__start___ex_table = .;
|
||||
__ex_table : { *(__ex_table) }
|
||||
__stop___ex_table = .;
|
||||
|
||||
. = ALIGN(256);
|
||||
__init_begin = .;
|
||||
.text.init : { *(.text.init) }
|
||||
.data.init : { *(.data.init) }
|
||||
. = ALIGN(256);
|
||||
__init_end = .;
|
||||
|
||||
__bss_start = .;
|
||||
.bss (NOLOAD) :
|
||||
{
|
||||
_sbss = .;
|
||||
*(.sbss) *(.scommon)
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
_ebss = .;
|
||||
}
|
||||
_end = . ;
|
||||
PROVIDE (end = .);
|
||||
}
|
||||
@@ -4,9 +4,6 @@
|
||||
# Copyright (C) 2000, 2001, 2002, 2003
|
||||
# The LEOX team <team@leox.org>, http://www.leox.org
|
||||
#
|
||||
# (C) Copyright 2006
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# LEOX.org is about the development of free hardware and software resources
|
||||
# for system on chip.
|
||||
#
|
||||
@@ -34,22 +31,18 @@
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
|
||||
LIB = $(obj)lib$(BOARD).a
|
||||
LIB = lib$(BOARD).a
|
||||
|
||||
COBJS = $(BOARD).o flash.o
|
||||
OBJS = $(BOARD).o flash.o
|
||||
|
||||
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
SOBJS := $(addprefix $(obj),$(SOBJS))
|
||||
|
||||
$(LIB): $(obj).depend $(OBJS)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS)
|
||||
$(LIB): .depend $(OBJS)
|
||||
$(AR) crv $@ $(OBJS)
|
||||
|
||||
#########################################################################
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
|
||||
$(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
|
||||
|
||||
sinclude $(obj).depend
|
||||
sinclude .depend
|
||||
|
||||
#########################################################################
|
||||
@@ -106,7 +106,7 @@ version - print monitor version
|
||||
? - alias for 'help'
|
||||
|
||||
##################################################
|
||||
# Environment Variables (CONFIG_ENV_IS_IN_NVRAM)
|
||||
# Environment Variables (CFG_ENV_IS_IN_NVRAM)
|
||||
##############################
|
||||
|
||||
LEOX_elpt860: printenv
|
||||
@@ -124,9 +124,9 @@ nfsserverip=192.168.0.1
|
||||
preboot=echo;echo Type "run nfsboot" to mount root filesystem over NFS;echo
|
||||
gatewayip=192.168.0.1
|
||||
ramargs=setenv bootargs root=/dev/ram rw
|
||||
rootargs=setenv rootpath /tftp/${ipaddr}
|
||||
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${nfsserverip}:${rootpath}
|
||||
addip=setenv bootargs ${bootargs} ip=${ipaddr}:${nfsserverip}:${gatewayip}:${netmask}:${hostname}:eth0:
|
||||
rootargs=setenv rootpath /tftp/$(ipaddr)
|
||||
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=$(nfsserverip):$(rootpath)
|
||||
addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(nfsserverip):$(gatewayip):$(netmask):$(hostname):eth0:
|
||||
ramboot=tftp 400000 /home/leox/pMulti;run ramargs;bootm
|
||||
nfsboot=tftp 400000 /home/leox/uImage;run rootargs;run nfsargs;run addip;bootm
|
||||
bootcmd=run ramboot
|
||||
|
||||
+265
-214
@@ -33,9 +33,9 @@
|
||||
/*
|
||||
** Note 1: In this file, you have to provide the following functions:
|
||||
** ------
|
||||
** int board_early_init_f(void)
|
||||
** int board_pre_init(void)
|
||||
** int checkboard(void)
|
||||
** phys_size_t initdram(int board_type)
|
||||
** long int initdram(int board_type)
|
||||
** called from 'board_init_f()' into 'common/board.c'
|
||||
**
|
||||
** void reset_phy(void)
|
||||
@@ -53,87 +53,89 @@ static long int dram_size (long int, long int *, long int);
|
||||
|
||||
#define _NOT_USED_ 0xFFFFFFFF
|
||||
|
||||
const uint init_sdram_table[] = {
|
||||
/*
|
||||
* Single Read. (Offset 0 in UPMA RAM)
|
||||
*/
|
||||
0x0FFCCC04, 0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04,
|
||||
0xFFFFFC04, /* last */
|
||||
/*
|
||||
* SDRAM Initialization (offset 5 in UPMA RAM)
|
||||
*
|
||||
* This is no UPM entry point. The following definition uses
|
||||
* the remaining space to establish an initialization
|
||||
* sequence, which is executed by a RUN command.
|
||||
*
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04, /* last */
|
||||
/*
|
||||
* Burst Read. (Offset 8 in UPMA RAM)
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, /* last */
|
||||
/*
|
||||
* Single Write. (Offset 18 in UPMA RAM)
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFFFC04, 0xFFFFFC04, /* last */
|
||||
/*
|
||||
* Burst Write. (Offset 20 in UPMA RAM)
|
||||
*/
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC34, 0x0FAC0C34,
|
||||
0xFFFFFC05, 0xFFFFFC04, 0x0FFCFC04, 0xFFFFFC05, /* last */
|
||||
const uint init_sdram_table[] =
|
||||
{
|
||||
/*
|
||||
* Single Read. (Offset 0 in UPMA RAM)
|
||||
*/
|
||||
0x0FFCCC04, 0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04,
|
||||
0xFFFFFC04, /* last */
|
||||
/*
|
||||
* SDRAM Initialization (offset 5 in UPMA RAM)
|
||||
*
|
||||
* This is no UPM entry point. The following definition uses
|
||||
* the remaining space to establish an initialization
|
||||
* sequence, which is executed by a RUN command.
|
||||
*
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04, /* last */
|
||||
/*
|
||||
* Burst Read. (Offset 8 in UPMA RAM)
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, /* last */
|
||||
/*
|
||||
* Single Write. (Offset 18 in UPMA RAM)
|
||||
*/
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, 0x0FFC3C04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0x0FFFFC04, 0xFFFFFC04, /* last */
|
||||
/*
|
||||
* Burst Write. (Offset 20 in UPMA RAM)
|
||||
*/
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC34, 0x0FAC0C34,
|
||||
0xFFFFFC05, 0xFFFFFC04, 0x0FFCFC04, 0xFFFFFC05, /* last */
|
||||
};
|
||||
|
||||
const uint sdram_table[] = {
|
||||
/*
|
||||
* Single Read. (Offset 0 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF3C04,
|
||||
0xFF0FFC00, /* last */
|
||||
/*
|
||||
* SDRAM Initialization (offset 5 in UPMA RAM)
|
||||
*
|
||||
* This is no UPM entry point. The following definition uses
|
||||
* the remaining space to establish an initialization
|
||||
* sequence, which is executed by a RUN command.
|
||||
*
|
||||
*/
|
||||
0x0FFCCC04, 0xFFAFFC05, 0xFFAFFC05, /* last */
|
||||
/*
|
||||
* Burst Read. (Offset 8 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF3C04,
|
||||
0xF00FFC00, 0xF00FFC00, 0xF00FFC00, 0xFF0FFC00,
|
||||
0x0FFCCC04, 0xFFAFFC05, 0xFFAFFC04, 0xFFAFFC04,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Single Write. (Offset 18 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF0C00,
|
||||
0xFF0FFC04, 0x0FFCCC04, 0xFFAFFC05, /* last */
|
||||
_NOT_USED_,
|
||||
/*
|
||||
* Burst Write. (Offset 20 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC00, 0x00AF0C00,
|
||||
0xF00FFC00, 0xF00FFC00, 0xF00FFC04, 0x0FFCCC04,
|
||||
0xFFAFFC04, 0xFFAFFC05, 0xFFAFFC04, 0xFFAFFC04,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Refresh (Offset 30 in UPMA RAM)
|
||||
*/
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC05, 0xFFFFFC04, 0xFFFFFC05, _NOT_USED_,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Exception. (Offset 3c in UPMA RAM)
|
||||
*/
|
||||
0x0FFFFC34, 0x0FAC0C34, 0xFFFFFC05, 0xFFAFFC04, /* last */
|
||||
const uint sdram_table[] =
|
||||
{
|
||||
/*
|
||||
* Single Read. (Offset 0 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF3C04,
|
||||
0xFF0FFC00, /* last */
|
||||
/*
|
||||
* SDRAM Initialization (offset 5 in UPMA RAM)
|
||||
*
|
||||
* This is no UPM entry point. The following definition uses
|
||||
* the remaining space to establish an initialization
|
||||
* sequence, which is executed by a RUN command.
|
||||
*
|
||||
*/
|
||||
0x0FFCCC04, 0xFFAFFC05, 0xFFAFFC05, /* last */
|
||||
/*
|
||||
* Burst Read. (Offset 8 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF3C04,
|
||||
0xF00FFC00, 0xF00FFC00, 0xF00FFC00, 0xFF0FFC00,
|
||||
0x0FFCCC04, 0xFFAFFC05, 0xFFAFFC04, 0xFFAFFC04,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Single Write. (Offset 18 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC04, 0x00AF0C00,
|
||||
0xFF0FFC04, 0x0FFCCC04, 0xFFAFFC05, /* last */
|
||||
_NOT_USED_,
|
||||
/*
|
||||
* Burst Write. (Offset 20 in UPMA RAM)
|
||||
*/
|
||||
0x0F0FFC24, 0x0F0CFC04, 0xFF0FFC00, 0x00AF0C00,
|
||||
0xF00FFC00, 0xF00FFC00, 0xF00FFC04, 0x0FFCCC04,
|
||||
0xFFAFFC04, 0xFFAFFC05, 0xFFAFFC04, 0xFFAFFC04,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Refresh (Offset 30 in UPMA RAM)
|
||||
*/
|
||||
0x0FFC3C04, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
|
||||
0xFFFFFC05, 0xFFFFFC04, 0xFFFFFC05, _NOT_USED_,
|
||||
0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, 0xFFAFFC04, /* last */
|
||||
/*
|
||||
* Exception. (Offset 3c in UPMA RAM)
|
||||
*/
|
||||
0x0FFFFC34, 0x0FAC0C34, 0xFFFFFC05, 0xFFAFFC04, /* last */
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
@@ -145,18 +147,19 @@ const uint sdram_table[] = {
|
||||
/*
|
||||
* Very early board init code (fpga boot, etc.)
|
||||
*/
|
||||
int board_early_init_f (void)
|
||||
int
|
||||
board_pre_init (void)
|
||||
{
|
||||
volatile immap_t *immr = (immap_t *) CFG_IMMR;
|
||||
volatile immap_t *immr = (immap_t *) CFG_IMMR;
|
||||
|
||||
/*
|
||||
* Light up the red led on ELPT860 pcb (DS1) (PCDAT)
|
||||
*/
|
||||
immr->im_ioport.iop_pcdat &= ~CFG_DS1; /* PCDAT (DS1 = 0) */
|
||||
immr->im_ioport.iop_pcpar &= ~CFG_DS1; /* PCPAR (0=general purpose I/O) */
|
||||
immr->im_ioport.iop_pcdir |= CFG_DS1; /* PCDIR (I/O: 0=input, 1=output) */
|
||||
/*
|
||||
* Light up the red led on ELPT860 pcb (DS1) (PCDAT)
|
||||
*/
|
||||
immr->im_ioport.iop_pcdat &= ~CFG_DS1; /* PCDAT (DS1 = 0) */
|
||||
immr->im_ioport.iop_pcpar &= ~CFG_DS1; /* PCPAR (0=general purpose I/O) */
|
||||
immr->im_ioport.iop_pcdir |= CFG_DS1; /* PCDIR (I/O: 0=input, 1=output) */
|
||||
|
||||
return (0); /* success */
|
||||
return ( 0 ); /* success */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -167,143 +170,150 @@ int board_early_init_f (void)
|
||||
* Return 1 if no second DRAM bank, otherwise returns 0
|
||||
*/
|
||||
|
||||
int checkboard (void)
|
||||
int
|
||||
checkboard (void)
|
||||
{
|
||||
char *s = getenv ("serial#");
|
||||
unsigned char *s = getenv("serial#");
|
||||
|
||||
if (!s || strncmp (s, "ELPT860", 7))
|
||||
printf ("### No HW ID - assuming ELPT860\n");
|
||||
if ( !s || strncmp(s, "ELPT860", 7) )
|
||||
printf ("### No HW ID - assuming ELPT860\n");
|
||||
|
||||
return (0); /* success */
|
||||
return ( 0 ); /* success */
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
phys_size_t initdram (int board_type)
|
||||
long int
|
||||
initdram (int board_type)
|
||||
{
|
||||
volatile immap_t *immap = (immap_t *) CFG_IMMR;
|
||||
volatile memctl8xx_t *memctl = &immap->im_memctl;
|
||||
long int size8, size9;
|
||||
long int size_b0 = 0;
|
||||
volatile immap_t *immap = (immap_t *)CFG_IMMR;
|
||||
volatile memctl8xx_t *memctl = &immap->im_memctl;
|
||||
long int size8, size9;
|
||||
long int size_b0 = 0;
|
||||
|
||||
/*
|
||||
* This sequence initializes SDRAM chips on ELPT860 board
|
||||
*/
|
||||
upmconfig (UPMA, (uint *) init_sdram_table,
|
||||
sizeof (init_sdram_table) / sizeof (uint));
|
||||
/*
|
||||
* This sequence initializes SDRAM chips on ELPT860 board
|
||||
*/
|
||||
upmconfig(UPMA, (uint *)init_sdram_table,
|
||||
sizeof(init_sdram_table)/sizeof(uint));
|
||||
|
||||
memctl->memc_mptpr = 0x0200;
|
||||
memctl->memc_mamr = 0x18002111;
|
||||
memctl->memc_mptpr = 0x0200;
|
||||
memctl->memc_mamr = 0x18002111;
|
||||
|
||||
memctl->memc_mar = 0x00000088;
|
||||
memctl->memc_mcr = 0x80002000; /* CS1: SDRAM bank 0 */
|
||||
memctl->memc_mar = 0x00000088;
|
||||
memctl->memc_mcr = 0x80002000; /* CS1: SDRAM bank 0 */
|
||||
|
||||
upmconfig (UPMA, (uint *) sdram_table,
|
||||
sizeof (sdram_table) / sizeof (uint));
|
||||
upmconfig(UPMA, (uint *)sdram_table,
|
||||
sizeof(sdram_table)/sizeof(uint));
|
||||
|
||||
/*
|
||||
* Preliminary prescaler for refresh (depends on number of
|
||||
* banks): This value is selected for four cycles every 62.4 us
|
||||
* with two SDRAM banks or four cycles every 31.2 us with one
|
||||
* bank. It will be adjusted after memory sizing.
|
||||
*/
|
||||
memctl->memc_mptpr = CFG_MPTPR_2BK_8K;
|
||||
/*
|
||||
* Preliminary prescaler for refresh (depends on number of
|
||||
* banks): This value is selected for four cycles every 62.4 us
|
||||
* with two SDRAM banks or four cycles every 31.2 us with one
|
||||
* bank. It will be adjusted after memory sizing.
|
||||
*/
|
||||
memctl->memc_mptpr = CFG_MPTPR_2BK_8K;
|
||||
|
||||
/*
|
||||
* The following value is used as an address (i.e. opcode) for
|
||||
* the LOAD MODE REGISTER COMMAND during SDRAM initialisation. If
|
||||
* the port size is 32bit the SDRAM does NOT "see" the lower two
|
||||
* address lines, i.e. mar=0x00000088 -> opcode=0x00000022 for
|
||||
* MICRON SDRAMs:
|
||||
* -> 0 00 010 0 010
|
||||
* | | | | +- Burst Length = 4
|
||||
* | | | +----- Burst Type = Sequential
|
||||
* | | +------- CAS Latency = 2
|
||||
* | +----------- Operating Mode = Standard
|
||||
* +-------------- Write Burst Mode = Programmed Burst Length
|
||||
*/
|
||||
memctl->memc_mar = 0x00000088;
|
||||
/*
|
||||
* The following value is used as an address (i.e. opcode) for
|
||||
* the LOAD MODE REGISTER COMMAND during SDRAM initialisation. If
|
||||
* the port size is 32bit the SDRAM does NOT "see" the lower two
|
||||
* address lines, i.e. mar=0x00000088 -> opcode=0x00000022 for
|
||||
* MICRON SDRAMs:
|
||||
* -> 0 00 010 0 010
|
||||
* | | | | +- Burst Length = 4
|
||||
* | | | +----- Burst Type = Sequential
|
||||
* | | +------- CAS Latency = 2
|
||||
* | +----------- Operating Mode = Standard
|
||||
* +-------------- Write Burst Mode = Programmed Burst Length
|
||||
*/
|
||||
memctl->memc_mar = 0x00000088;
|
||||
|
||||
/*
|
||||
* Map controller banks 2 and 3 to the SDRAM banks 2 and 3 at
|
||||
* preliminary addresses - these have to be modified after the
|
||||
* SDRAM size has been determined.
|
||||
*/
|
||||
memctl->memc_or1 = CFG_OR1_PRELIM;
|
||||
memctl->memc_br1 = CFG_BR1_PRELIM;
|
||||
/*
|
||||
* Map controller banks 2 and 3 to the SDRAM banks 2 and 3 at
|
||||
* preliminary addresses - these have to be modified after the
|
||||
* SDRAM size has been determined.
|
||||
*/
|
||||
memctl->memc_or1 = CFG_OR1_PRELIM;
|
||||
memctl->memc_br1 = CFG_BR1_PRELIM;
|
||||
|
||||
memctl->memc_mamr = CFG_MAMR_8COL & (~(MAMR_PTAE)); /* no refresh yet */
|
||||
memctl->memc_mamr = CFG_MAMR_8COL & (~(MAMR_PTAE)); /* no refresh yet */
|
||||
|
||||
udelay (200);
|
||||
udelay (200);
|
||||
|
||||
/* perform SDRAM initializsation sequence */
|
||||
/* perform SDRAM initializsation sequence */
|
||||
|
||||
memctl->memc_mcr = 0x80002105; /* CS1: SDRAM bank 0 */
|
||||
udelay (1);
|
||||
memctl->memc_mcr = 0x80002230; /* CS1: SDRAM bank 0 - execute twice */
|
||||
udelay (1);
|
||||
memctl->memc_mcr = 0x80002105; /* CS1: SDRAM bank 0 */
|
||||
udelay (1);
|
||||
memctl->memc_mcr = 0x80002230; /* CS1: SDRAM bank 0 - execute twice */
|
||||
udelay (1);
|
||||
|
||||
memctl->memc_mamr |= MAMR_PTAE; /* enable refresh */
|
||||
memctl->memc_mamr |= MAMR_PTAE; /* enable refresh */
|
||||
|
||||
udelay (1000);
|
||||
|
||||
/*
|
||||
* Check Bank 0 Memory Size for re-configuration
|
||||
*
|
||||
* try 8 column mode
|
||||
*/
|
||||
size8 = dram_size (CFG_MAMR_8COL,
|
||||
(ulong *) SDRAM_BASE1_PRELIM,
|
||||
SDRAM_MAX_SIZE);
|
||||
|
||||
udelay (1000);
|
||||
|
||||
/*
|
||||
* try 9 column mode
|
||||
*/
|
||||
size9 = dram_size (CFG_MAMR_9COL,
|
||||
(ulong *) SDRAM_BASE1_PRELIM,
|
||||
SDRAM_MAX_SIZE);
|
||||
|
||||
if ( size8 < size9 ) /* leave configuration at 9 columns */
|
||||
{
|
||||
size_b0 = size9;
|
||||
/* debug ("SDRAM Bank 0 in 9 column mode: %ld MB\n", size >> 20); */
|
||||
}
|
||||
else /* back to 8 columns */
|
||||
{
|
||||
size_b0 = size8;
|
||||
memctl->memc_mamr = CFG_MAMR_8COL;
|
||||
udelay (500);
|
||||
/* debug ("SDRAM Bank 0 in 8 column mode: %ld MB\n", size >> 20); */
|
||||
}
|
||||
|
||||
udelay (1000);
|
||||
|
||||
/*
|
||||
* Adjust refresh rate depending on SDRAM type, both banks
|
||||
* For types > 128 MBit leave it at the current (fast) rate
|
||||
*/
|
||||
if ( size_b0 < 0x02000000 )
|
||||
{
|
||||
/* reduce to 15.6 us (62.4 us / quad) */
|
||||
memctl->memc_mptpr = CFG_MPTPR_2BK_4K;
|
||||
udelay (1000);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check Bank 0 Memory Size for re-configuration
|
||||
*
|
||||
* try 8 column mode
|
||||
*/
|
||||
size8 = dram_size (CFG_MAMR_8COL,
|
||||
SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
|
||||
/*
|
||||
* Final mapping: map bigger bank first
|
||||
*/
|
||||
memctl->memc_or1 = ((-size_b0) & 0xFFFF0000) | CFG_OR_TIMING_SDRAM;
|
||||
memctl->memc_br1 = (CFG_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMA | BR_V;
|
||||
|
||||
udelay (1000);
|
||||
{
|
||||
unsigned long reg;
|
||||
|
||||
/*
|
||||
* try 9 column mode
|
||||
*/
|
||||
size9 = dram_size (CFG_MAMR_9COL,
|
||||
SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
|
||||
/* adjust refresh rate depending on SDRAM type, one bank */
|
||||
reg = memctl->memc_mptpr;
|
||||
reg >>= 1; /* reduce to CFG_MPTPR_1BK_8K / _4K */
|
||||
memctl->memc_mptpr = reg;
|
||||
}
|
||||
|
||||
if (size8 < size9) { /* leave configuration at 9 columns */
|
||||
size_b0 = size9;
|
||||
/* debug ("SDRAM Bank 0 in 9 column mode: %ld MB\n", size >> 20); */
|
||||
} else { /* back to 8 columns */
|
||||
udelay(10000);
|
||||
|
||||
size_b0 = size8;
|
||||
memctl->memc_mamr = CFG_MAMR_8COL;
|
||||
udelay (500);
|
||||
/* debug ("SDRAM Bank 0 in 8 column mode: %ld MB\n", size >> 20); */
|
||||
}
|
||||
|
||||
udelay (1000);
|
||||
|
||||
/*
|
||||
* Adjust refresh rate depending on SDRAM type, both banks
|
||||
* For types > 128 MBit leave it at the current (fast) rate
|
||||
*/
|
||||
if (size_b0 < 0x02000000) {
|
||||
/* reduce to 15.6 us (62.4 us / quad) */
|
||||
memctl->memc_mptpr = CFG_MPTPR_2BK_4K;
|
||||
udelay (1000);
|
||||
}
|
||||
|
||||
/*
|
||||
* Final mapping: map bigger bank first
|
||||
*/
|
||||
memctl->memc_or1 = ((-size_b0) & 0xFFFF0000) | CFG_OR_TIMING_SDRAM;
|
||||
memctl->memc_br1 = (CFG_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMA | BR_V;
|
||||
|
||||
{
|
||||
unsigned long reg;
|
||||
|
||||
/* adjust refresh rate depending on SDRAM type, one bank */
|
||||
reg = memctl->memc_mptpr;
|
||||
reg >>= 1; /* reduce to CFG_MPTPR_1BK_8K / _4K */
|
||||
memctl->memc_mptpr = reg;
|
||||
}
|
||||
|
||||
udelay (10000);
|
||||
|
||||
return (size_b0);
|
||||
return (size_b0);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
@@ -317,14 +327,54 @@ phys_size_t initdram (int board_type)
|
||||
*/
|
||||
|
||||
static long int
|
||||
dram_size (long int mamr_value, long int *base, long int maxsize)
|
||||
dram_size (long int mamr_value,
|
||||
long int *base,
|
||||
long int maxsize)
|
||||
{
|
||||
volatile immap_t *immap = (immap_t *) CFG_IMMR;
|
||||
volatile memctl8xx_t *memctl = &immap->im_memctl;
|
||||
volatile immap_t *immap = (immap_t *)CFG_IMMR;
|
||||
volatile memctl8xx_t *memctl = &immap->im_memctl;
|
||||
volatile long int *addr;
|
||||
ulong cnt, val;
|
||||
ulong save[32]; /* to make test non-destructive */
|
||||
unsigned char i = 0;
|
||||
|
||||
memctl->memc_mamr = mamr_value;
|
||||
memctl->memc_mamr = mamr_value;
|
||||
|
||||
return (get_ram_size (base, maxsize));
|
||||
for (cnt = maxsize/sizeof(long); cnt > 0; cnt >>= 1)
|
||||
{
|
||||
addr = base + cnt; /* pointer arith! */
|
||||
|
||||
save[i++] = *addr;
|
||||
*addr = ~cnt;
|
||||
}
|
||||
|
||||
/* write 0 to base address */
|
||||
addr = base;
|
||||
save[i] = *addr;
|
||||
*addr = 0;
|
||||
|
||||
/* check at base address */
|
||||
if ( (val = *addr) != 0 )
|
||||
{
|
||||
*addr = save[i];
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (cnt = 1; cnt <= maxsize/sizeof(long); cnt <<= 1)
|
||||
{
|
||||
addr = base + cnt; /* pointer arith! */
|
||||
|
||||
val = *addr;
|
||||
*addr = save[--i];
|
||||
|
||||
if ( val != (~cnt) )
|
||||
{
|
||||
return (cnt * sizeof(long));
|
||||
}
|
||||
}
|
||||
|
||||
return (maxsize);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
@@ -334,15 +384,16 @@ dram_size (long int mamr_value, long int *base, long int maxsize)
|
||||
|
||||
#define CFG_LBKs (CFG_PA2 | CFG_PA1)
|
||||
|
||||
void reset_phy (void)
|
||||
void
|
||||
reset_phy (void)
|
||||
{
|
||||
volatile immap_t *immr = (immap_t *) CFG_IMMR;
|
||||
volatile immap_t *immr = (immap_t *) CFG_IMMR;
|
||||
|
||||
/*
|
||||
* Ensure LBK LXT901 ethernet 1 & 2 = 0 ... for normal loopback in effect
|
||||
* and no AUI loopback
|
||||
*/
|
||||
immr->im_ioport.iop_padat &= ~CFG_LBKs; /* PADAT (LBK eth 1&2 = 0) */
|
||||
immr->im_ioport.iop_papar &= ~CFG_LBKs; /* PAPAR (0=general purpose I/O) */
|
||||
immr->im_ioport.iop_padir |= CFG_LBKs; /* PADIR (I/O: 0=input, 1=output) */
|
||||
/*
|
||||
* Ensure LBK LXT901 ethernet 1 & 2 = 0 ... for normal loopback in effect
|
||||
* and no AUI loopback
|
||||
*/
|
||||
immr->im_ioport.iop_padat &= ~CFG_LBKs; /* PADAT (LBK eth 1&2 = 0) */
|
||||
immr->im_ioport.iop_papar &= ~CFG_LBKs; /* PAPAR (0=general purpose I/O) */
|
||||
immr->im_ioport.iop_padir |= CFG_LBKs; /* PADIR (I/O: 0=input, 1=output) */
|
||||
}
|
||||
@@ -61,8 +61,8 @@
|
||||
#include <mpc8xx.h>
|
||||
|
||||
|
||||
#ifndef CONFIG_ENV_ADDR
|
||||
# define CONFIG_ENV_ADDR (CFG_FLASH_BASE + CONFIG_ENV_OFFSET)
|
||||
#ifndef CFG_ENV_ADDR
|
||||
# define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET)
|
||||
#endif
|
||||
|
||||
flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
|
||||
@@ -122,11 +122,11 @@ flash_init (void)
|
||||
&flash_info[0]);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ENV_IS_IN_FLASH
|
||||
#ifdef CFG_ENV_IS_IN_FLASH
|
||||
/* ENV protection ON by default */
|
||||
flash_protect(FLAG_PROTECT_SET,
|
||||
CONFIG_ENV_ADDR,
|
||||
CONFIG_ENV_ADDR + CONFIG_ENV_SIZE-1,
|
||||
CFG_ENV_ADDR,
|
||||
CFG_ENV_ADDR + CFG_ENV_SIZE-1,
|
||||
&flash_info[0]);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(powerpc)
|
||||
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
SECTIONS
|
||||
@@ -42,11 +43,11 @@ SECTIONS
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
@@ -77,7 +78,7 @@ SECTIONS
|
||||
lib_ppc/ticks.o (.text)
|
||||
|
||||
. = env_offset;
|
||||
common/env_embedded.o (.text)
|
||||
common/environment.o (.text)
|
||||
|
||||
*(.text)
|
||||
*(.fixup)
|
||||
@@ -90,7 +91,6 @@ SECTIONS
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
*(.rodata.str1.4)
|
||||
*(.eh_frame)
|
||||
}
|
||||
.fini : { *(.fini) } =0
|
||||
.ctors : { *(.ctors) }
|
||||
@@ -123,12 +123,10 @@ SECTIONS
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
|
||||
. = .;
|
||||
__u_boot_cmd_start = .;
|
||||
.u_boot_cmd : { *(.u_boot_cmd) }
|
||||
__u_boot_cmd_end = .;
|
||||
|
||||
. = .;
|
||||
__start___ex_table = .;
|
||||
__ex_table : { *(__ex_table) }
|
||||
__stop___ex_table = .;
|
||||
@@ -141,7 +139,7 @@ SECTIONS
|
||||
__init_end = .;
|
||||
|
||||
__bss_start = .;
|
||||
.bss (NOLOAD) :
|
||||
.bss :
|
||||
{
|
||||
*(.sbss) *(.scommon)
|
||||
*(.dynbss)
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(powerpc)
|
||||
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
SECTIONS
|
||||
@@ -42,11 +43,11 @@ SECTIONS
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
@@ -70,7 +71,7 @@ SECTIONS
|
||||
lib_generic/crc32.o (.text)
|
||||
|
||||
. = env_offset;
|
||||
common/env_embedded.o (.text)
|
||||
common/environment.o (.text)
|
||||
|
||||
*(.text)
|
||||
*(.fixup)
|
||||
@@ -82,8 +83,6 @@ SECTIONS
|
||||
{
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
*(.rodata.str1.4)
|
||||
*(.eh_frame)
|
||||
}
|
||||
.fini : { *(.fini) } =0
|
||||
.ctors : { *(.ctors) }
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/*
|
||||
* (C) Copyright 2002
|
||||
* Hyperion Entertainment, ThomasF@hyperion-entertainment.com
|
||||
* (C) Copyright 2006
|
||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
@@ -14,7 +13,7 @@
|
||||
*
|
||||
* 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
|
||||
* 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
|
||||
@@ -26,54 +25,53 @@
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <pci.h>
|
||||
#include <netdev.h>
|
||||
#include "articiaS.h"
|
||||
#include "memio.h"
|
||||
#include "via686.h"
|
||||
|
||||
__asm__(" .globl send_kb \n "
|
||||
"send_kb: \n "
|
||||
" lis r9, 0xfe00 \n "
|
||||
" \n "
|
||||
" li r4, 0x10 # retries \n "
|
||||
" mtctr r4 \n "
|
||||
" \n "
|
||||
"idle: \n "
|
||||
" lbz r4, 0x64(r9) \n "
|
||||
" andi. r4, r4, 0x02 \n "
|
||||
" bne idle \n "
|
||||
|
||||
"ready: \n "
|
||||
" stb r3, 0x60(r9) \n "
|
||||
" \n "
|
||||
"check: \n "
|
||||
" lbz r4, 0x64(r9) \n "
|
||||
" andi. r4, r4, 0x01 \n "
|
||||
" beq check \n "
|
||||
" \n "
|
||||
" lbz r4, 0x60(r9) \n "
|
||||
" cmpwi r4, 0xfa \n "
|
||||
" beq done \n "
|
||||
|
||||
" bdnz idle \n "
|
||||
|
||||
" li r3, 0 \n "
|
||||
" blr \n "
|
||||
|
||||
"done: \n "
|
||||
" li r3, 1 \n "
|
||||
" blr \n "
|
||||
|
||||
".globl test_kb \n "
|
||||
"test_kb: \n "
|
||||
" mflr r10 \n "
|
||||
" li r3, 0xed \n "
|
||||
" bl send_kb \n "
|
||||
" li r3, 0x01 \n "
|
||||
" bl send_kb \n "
|
||||
" mtlr r10 \n "
|
||||
" blr \n "
|
||||
);
|
||||
__asm(" .globl send_kb \n
|
||||
send_kb: \n
|
||||
lis r9, 0xfe00 \n
|
||||
\n
|
||||
li r4, 0x10 # retries \n
|
||||
mtctr r4 \n
|
||||
\n
|
||||
idle: \n
|
||||
lbz r4, 0x64(r9) \n
|
||||
andi. r4, r4, 0x02 \n
|
||||
bne idle \n
|
||||
\n
|
||||
ready: \n
|
||||
stb r3, 0x60(r9) \n
|
||||
\n
|
||||
check: \n
|
||||
lbz r4, 0x64(r9) \n
|
||||
andi. r4, r4, 0x01 \n
|
||||
beq check \n
|
||||
\n
|
||||
lbz r4, 0x60(r9) \n
|
||||
cmpwi r4, 0xfa \n
|
||||
beq done \n
|
||||
\n
|
||||
bdnz idle \n
|
||||
\n
|
||||
li r3, 0 \n
|
||||
blr \n
|
||||
\n
|
||||
done: \n
|
||||
li r3, 1 \n
|
||||
blr \n
|
||||
\n
|
||||
.globl test_kb \n
|
||||
test_kb: \n
|
||||
mflr r10 \n
|
||||
li r3, 0xed \n
|
||||
bl send_kb \n
|
||||
li r3, 0x01 \n
|
||||
bl send_kb \n
|
||||
mtlr r10 \n
|
||||
blr \n
|
||||
");
|
||||
|
||||
|
||||
int checkboard (void)
|
||||
@@ -82,7 +80,7 @@ int checkboard (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t initdram (int board_type)
|
||||
long initdram (int board_type)
|
||||
{
|
||||
return articiaS_ram_init ();
|
||||
}
|
||||
@@ -90,6 +88,8 @@ phys_size_t initdram (int board_type)
|
||||
|
||||
void after_reloc (ulong dest_addr, gd_t *gd)
|
||||
{
|
||||
/* HJF: DECLARE_GLOBAL_DATA_PTR; */
|
||||
|
||||
board_init_r (gd, dest_addr);
|
||||
}
|
||||
|
||||
@@ -112,11 +112,3 @@ void pci_init_board (void)
|
||||
articiaS_pci_init ();
|
||||
#endif
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
#if defined(CONFIG_3COM)
|
||||
eth_3com_initialize(bis);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# (C) Copyright 2002-2006
|
||||
# (C) Copyright 2002
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
@@ -22,42 +22,35 @@
|
||||
#
|
||||
|
||||
include $(TOPDIR)/config.mk
|
||||
ifneq ($(OBJTREE),$(SRCTREE))
|
||||
$(shell mkdir -p $(obj)../menu)
|
||||
$(shell mkdir -p $(obj)../bios_emulator)
|
||||
endif
|
||||
|
||||
LIB = $(obj)lib$(BOARD).a
|
||||
LIB = lib$(BOARD).a
|
||||
|
||||
COBJS = $(BOARD).o articiaS.o flash.o serial.o smbus.o articiaS_pci.o \
|
||||
via686.o i8259.o ../bios_emulator/x86interface.o \
|
||||
via686.o i8259.o ../bios_emulator/x86interface.o \
|
||||
../bios_emulator/bios.o ../bios_emulator/glue.o \
|
||||
interrupts.o ps2kbd.o video.o usb_uhci.o enet.o \
|
||||
../menu/cmd_menu.o cmd_boota.o nvram.o
|
||||
|
||||
SOBJS = board_asm_init.o memio.o
|
||||
AOBJS = board_asm_init.o memio.o
|
||||
|
||||
OBJS = $(COBJS) $(AOBJS)
|
||||
|
||||
EMUDIR = ../bios_emulator/scitech/src/x86emu/
|
||||
EMUOBJ = $(EMUDIR)decode.o $(EMUDIR)ops2.o $(EMUDIR)fpu.o $(EMUDIR)prim_ops.o \
|
||||
$(EMUDIR)ops.o $(EMUDIR)sys.o
|
||||
EMUSRC = $(EMUOBJ:.o=.c)
|
||||
EMUSRC = $(EMUOBJ:.o=.c)
|
||||
|
||||
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
|
||||
OBJS := $(addprefix $(obj),$(COBJS))
|
||||
SOBJS := $(addprefix $(obj),$(SOBJS))
|
||||
EMUOBJ := $(addprefix $(obj),$(EMUOBJ))
|
||||
|
||||
$(LIB): $(obj).depend $(OBJS) $(SOBJS) $(EMUSRC)
|
||||
make $(obj)libx86emu.a -C ../bios_emulator/scitech/src/x86emu -f makefile.uboot CROSS_COMPILE=$(CROSS_COMPILE)
|
||||
$(LIB): .depend $(OBJS) $(EMUSRC)
|
||||
make libx86emu.a -C ../bios_emulator/scitech/src/x86emu -f makefile.uboot CROSS_COMPILE=$(CROSS_COMPILE)
|
||||
-rm $(LIB)
|
||||
$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) $(EMUOBJ)
|
||||
$(AR) crv $@ $(OBJS) $(EMUOBJ)
|
||||
|
||||
|
||||
#########################################################################
|
||||
|
||||
# defines $(obj).depend target
|
||||
include $(SRCTREE)/rules.mk
|
||||
.depend: Makefile $(AOBJS:.o=.S) $(COBJS:.o=.c)
|
||||
$(CC) -M $(CFLAGS) $(AOBJS:.o=.S) $(COBJS:.o=.c) > $@
|
||||
|
||||
sinclude $(obj).depend
|
||||
sinclude .depend
|
||||
|
||||
#########################################################################
|
||||
@@ -29,8 +29,6 @@
|
||||
#include "smbus.h"
|
||||
#include "via686.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
struct dimm_bank {
|
||||
@@ -84,6 +82,7 @@ static inline unsigned short NSto10PS (unsigned char spd_byte)
|
||||
|
||||
long detect_sdram (uint8 * rom, int dimmNum, struct dimm_bank *banks)
|
||||
{
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
int dimm_address = (dimmNum == 0) ? SM_DIMM0_ADDR : SM_DIMM1_ADDR;
|
||||
uint32 busclock = gd->bus_clk;
|
||||
uint32 memclock = busclock;
|
||||
@@ -395,6 +394,8 @@ uint32 burst_to_len (uint32 support)
|
||||
|
||||
long articiaS_ram_init (void)
|
||||
{
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
register uint32 i;
|
||||
register uint32 value1;
|
||||
register uint32 value2;
|
||||
@@ -674,7 +675,7 @@ static __inline__ void set_msr (unsigned long msr)
|
||||
asm volatile ("mtmsr %0"::"r" (msr));
|
||||
}
|
||||
|
||||
int board_early_init_f (void)
|
||||
int board_pre_init (void)
|
||||
{
|
||||
unsigned char c_value = 0;
|
||||
unsigned long msr;
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
#include "memio.h"
|
||||
#include "articiaS.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#undef ARTICIA_PCI_DEBUG
|
||||
|
||||
#ifdef ARTICIA_PCI_DEBUG
|
||||
@@ -368,11 +366,11 @@ void articiaS_pci_init (void)
|
||||
if (articiaS_init_vga() == -1)
|
||||
{
|
||||
/* If the VGA didn't init and we have stdout set to VGA, reset to serial */
|
||||
/* s = getenv("stdout"); */
|
||||
/* if (s && strcmp(s, "vga") == 0) */
|
||||
/* { */
|
||||
/* setenv("stdout", "serial"); */
|
||||
/* } */
|
||||
/* s = getenv("stdout"); */
|
||||
/* if (s && strcmp(s, "vga") == 0) */
|
||||
/* { */
|
||||
/* setenv("stdout", "serial"); */
|
||||
/* } */
|
||||
}
|
||||
}
|
||||
pci_write_config_byte(PCI_BDF(0,1,0), PCI_INTERRUPT_LINE, 0xFF);
|
||||
@@ -495,6 +493,8 @@ pci_dev_t video_dev;
|
||||
|
||||
int articiaS_init_vga (void)
|
||||
{
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
extern void shutdown_bios(void);
|
||||
pci_dev_t dev = ~0;
|
||||
int busnr = 0;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "../disk/part_amiga.h"
|
||||
#include <asm/cache.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#undef BOOTA_DEBUG
|
||||
|
||||
@@ -109,6 +108,8 @@ int do_boota (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
||||
|
||||
s = getenv ("autostart");
|
||||
if (s && strcmp (s, "yes") == 0) {
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
void (*boot) (bd_t *, char *, block_dev_desc_t *);
|
||||
char *args;
|
||||
|
||||
@@ -119,9 +120,9 @@ int do_boota (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
||||
|
||||
return 0;
|
||||
}
|
||||
#if defined(CONFIG_AMIGAONEG3SE) && defined(CONFIG_CMD_BSP)
|
||||
U_BOOT_CMD(
|
||||
boota, 3, 1, do_boota,
|
||||
#if defined(CONFIG_AMIGAONEG3SE) && (CONFIG_COMMANDS & CFG_CMD_BSP)
|
||||
cmd_tbl_t U_BOOT_CMD(BOOTA) = MK_CMD_ENTRY(
|
||||
"boota", 3, 1, do_boota,
|
||||
"boota - boot an Amiga kernel\n",
|
||||
"address disk"
|
||||
);
|
||||
|
||||
+372
-354
File diff suppressed because it is too large.
Load diff
@@ -123,11 +123,11 @@ unsigned long flash_init (void)
|
||||
&flash_info[0]);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ENV_IS_IN_FLASH
|
||||
#ifdef CFG_ENV_IS_IN_FLASH
|
||||
/* ENV protection ON by default */
|
||||
flash_protect(FLAG_PROTECT_SET,
|
||||
CONFIG_ENV_ADDR,
|
||||
CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1,
|
||||
CFG_ENV_ADDR,
|
||||
CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1,
|
||||
&flash_info[0]);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -176,9 +176,9 @@ external_interrupt(struct pt_regs *regs)
|
||||
else {
|
||||
PRINTF ("\nBogus External Interrupt IRQ %d\n", irq);
|
||||
/*
|
||||
* turn off the bogus interrupt, otherwise it
|
||||
* might repeat forever
|
||||
*/
|
||||
* turn off the bogus interrupt, otherwise it
|
||||
* might repeat forever
|
||||
*/
|
||||
unmask = 0;
|
||||
}
|
||||
|
||||
|
||||
+233
-228
@@ -58,7 +58,7 @@ void i8259_unmask_irq(unsigned int irq);
|
||||
#define KBD_STAT_KOBF 0x01
|
||||
#define KBD_STAT_IBF 0x02
|
||||
#define KBD_STAT_SYS 0x04
|
||||
#define KBD_STAT_CD 0x08
|
||||
#define KBD_STAT_CD 0x08
|
||||
#define KBD_STAT_LOCK 0x10
|
||||
#define KBD_STAT_MOBF 0x20
|
||||
#define KBD_STAT_TI_OUT 0x40
|
||||
@@ -71,50 +71,50 @@ void i8259_unmask_irq(unsigned int irq);
|
||||
* Keyboard Controller Commands
|
||||
*/
|
||||
|
||||
#define KBD_CCMD_READ_MODE 0x20 /* Read mode bits */
|
||||
#define KBD_CCMD_WRITE_MODE 0x60 /* Write mode bits */
|
||||
#define KBD_CCMD_GET_VERSION 0xA1 /* Get controller version */
|
||||
#define KBD_CCMD_READ_MODE 0x20 /* Read mode bits */
|
||||
#define KBD_CCMD_WRITE_MODE 0x60 /* Write mode bits */
|
||||
#define KBD_CCMD_GET_VERSION 0xA1 /* Get controller version */
|
||||
#define KBD_CCMD_MOUSE_DISABLE 0xA7 /* Disable mouse interface */
|
||||
#define KBD_CCMD_MOUSE_ENABLE 0xA8 /* Enable mouse interface */
|
||||
#define KBD_CCMD_TEST_MOUSE 0xA9 /* Mouse interface test */
|
||||
#define KBD_CCMD_SELF_TEST 0xAA /* Controller self test */
|
||||
#define KBD_CCMD_KBD_TEST 0xAB /* Keyboard interface test */
|
||||
#define KBD_CCMD_KBD_DISABLE 0xAD /* Keyboard interface disable */
|
||||
#define KBD_CCMD_KBD_ENABLE 0xAE /* Keyboard interface enable */
|
||||
#define KBD_CCMD_MOUSE_ENABLE 0xA8 /* Enable mouse interface */
|
||||
#define KBD_CCMD_TEST_MOUSE 0xA9 /* Mouse interface test */
|
||||
#define KBD_CCMD_SELF_TEST 0xAA /* Controller self test */
|
||||
#define KBD_CCMD_KBD_TEST 0xAB /* Keyboard interface test */
|
||||
#define KBD_CCMD_KBD_DISABLE 0xAD /* Keyboard interface disable */
|
||||
#define KBD_CCMD_KBD_ENABLE 0xAE /* Keyboard interface enable */
|
||||
#define KBD_CCMD_WRITE_AUX_OBUF 0xD3 /* Write to output buffer as if
|
||||
initiated by the auxiliary device */
|
||||
#define KBD_CCMD_WRITE_MOUSE 0xD4 /* Write the following byte to the mouse */
|
||||
#define KBD_CCMD_WRITE_MOUSE 0xD4 /* Write the following byte to the mouse */
|
||||
|
||||
/*
|
||||
* Keyboard Commands
|
||||
*/
|
||||
|
||||
#define KBD_CMD_SET_LEDS 0xED /* Set keyboard leds */
|
||||
#define KBD_CMD_SET_RATE 0xF3 /* Set typematic rate */
|
||||
#define KBD_CMD_ENABLE 0xF4 /* Enable scanning */
|
||||
#define KBD_CMD_DISABLE 0xF5 /* Disable scanning */
|
||||
#define KBD_CMD_RESET 0xFF /* Reset */
|
||||
#define KBD_CMD_SET_LEDS 0xED /* Set keyboard leds */
|
||||
#define KBD_CMD_SET_RATE 0xF3 /* Set typematic rate */
|
||||
#define KBD_CMD_ENABLE 0xF4 /* Enable scanning */
|
||||
#define KBD_CMD_DISABLE 0xF5 /* Disable scanning */
|
||||
#define KBD_CMD_RESET 0xFF /* Reset */
|
||||
|
||||
/*
|
||||
* Keyboard Replies
|
||||
*/
|
||||
|
||||
#define KBD_REPLY_POR 0xAA /* Power on reset */
|
||||
#define KBD_REPLY_ACK 0xFA /* Command ACK */
|
||||
#define KBD_REPLY_RESEND 0xFE /* Command NACK, send the cmd again */
|
||||
#define KBD_REPLY_POR 0xAA /* Power on reset */
|
||||
#define KBD_REPLY_ACK 0xFA /* Command ACK */
|
||||
#define KBD_REPLY_RESEND 0xFE /* Command NACK, send the cmd again */
|
||||
|
||||
/*
|
||||
* Status Register Bits
|
||||
*/
|
||||
|
||||
#define KBD_STAT_OBF 0x01 /* Keyboard output buffer full */
|
||||
#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */
|
||||
#define KBD_STAT_SELFTEST 0x04 /* Self test successful */
|
||||
#define KBD_STAT_CMD 0x08 /* Last write was a command write (0=data) */
|
||||
#define KBD_STAT_UNLOCKED 0x10 /* Zero if keyboard locked */
|
||||
#define KBD_STAT_MOUSE_OBF 0x20 /* Mouse output buffer full */
|
||||
#define KBD_STAT_GTO 0x40 /* General receive/xmit timeout */
|
||||
#define KBD_STAT_PERR 0x80 /* Parity error */
|
||||
#define KBD_STAT_OBF 0x01 /* Keyboard output buffer full */
|
||||
#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */
|
||||
#define KBD_STAT_SELFTEST 0x04 /* Self test successful */
|
||||
#define KBD_STAT_CMD 0x08 /* Last write was a command write (0=data) */
|
||||
#define KBD_STAT_UNLOCKED 0x10 /* Zero if keyboard locked */
|
||||
#define KBD_STAT_MOUSE_OBF 0x20 /* Mouse output buffer full */
|
||||
#define KBD_STAT_GTO 0x40 /* General receive/xmit timeout */
|
||||
#define KBD_STAT_PERR 0x80 /* Parity error */
|
||||
|
||||
#define AUX_STAT_OBF (KBD_STAT_OBF | KBD_STAT_MOUSE_OBF)
|
||||
|
||||
@@ -122,24 +122,24 @@ void i8259_unmask_irq(unsigned int irq);
|
||||
* Controller Mode Register Bits
|
||||
*/
|
||||
|
||||
#define KBD_MODE_KBD_INT 0x01 /* Keyboard data generate IRQ1 */
|
||||
#define KBD_MODE_MOUSE_INT 0x02 /* Mouse data generate IRQ12 */
|
||||
#define KBD_MODE_SYS 0x04 /* The system flag (?) */
|
||||
#define KBD_MODE_NO_KEYLOCK 0x08 /* The keylock doesn't affect the keyboard if set */
|
||||
#define KBD_MODE_DISABLE_KBD 0x10 /* Disable keyboard interface */
|
||||
#define KBD_MODE_KBD_INT 0x01 /* Keyboard data generate IRQ1 */
|
||||
#define KBD_MODE_MOUSE_INT 0x02 /* Mouse data generate IRQ12 */
|
||||
#define KBD_MODE_SYS 0x04 /* The system flag (?) */
|
||||
#define KBD_MODE_NO_KEYLOCK 0x08 /* The keylock doesn't affect the keyboard if set */
|
||||
#define KBD_MODE_DISABLE_KBD 0x10 /* Disable keyboard interface */
|
||||
#define KBD_MODE_DISABLE_MOUSE 0x20 /* Disable mouse interface */
|
||||
#define KBD_MODE_KCC 0x40 /* Scan code conversion to PC format */
|
||||
#define KBD_MODE_RFU 0x80
|
||||
#define KBD_MODE_KCC 0x40 /* Scan code conversion to PC format */
|
||||
#define KBD_MODE_RFU 0x80
|
||||
|
||||
|
||||
#define KDB_DATA_PORT 0x60
|
||||
#define KDB_DATA_PORT 0x60
|
||||
#define KDB_COMMAND_PORT 0x64
|
||||
|
||||
#define LED_SCR 0x01 /* scroll lock led */
|
||||
#define LED_CAP 0x04 /* caps lock led */
|
||||
#define LED_NUM 0x02 /* num lock led */
|
||||
#define LED_SCR 0x01 /* scroll lock led */
|
||||
#define LED_CAP 0x04 /* caps lock led */
|
||||
#define LED_NUM 0x02 /* num lock led */
|
||||
|
||||
#define KBD_BUFFER_LEN 0x20 /* size of the keyboardbuffer */
|
||||
#define KBD_BUFFER_LEN 0x20 /* size of the keyboardbuffer */
|
||||
|
||||
|
||||
static volatile char kbd_buffer[KBD_BUFFER_LEN];
|
||||
@@ -194,22 +194,21 @@ static unsigned char kbd_ctrl_xlate[] = {
|
||||
* Init
|
||||
******************************************************************/
|
||||
|
||||
int isa_kbd_init (void)
|
||||
int isa_kbd_init(void)
|
||||
{
|
||||
char *result;
|
||||
|
||||
result = kbd_initialize ();
|
||||
if (result != NULL) {
|
||||
result = kbd_initialize ();
|
||||
char* result;
|
||||
result=kbd_initialize();
|
||||
if (result != NULL)
|
||||
{
|
||||
result = kbd_initialize();
|
||||
}
|
||||
if (result == NULL) {
|
||||
printf ("AT Keyboard initialized\n");
|
||||
irq_install_handler (KBD_INTERRUPT,
|
||||
(interrupt_handler_t *) kbd_interrupt,
|
||||
NULL);
|
||||
if(result==NULL) {
|
||||
printf("AT Keyboard initialized\n");
|
||||
irq_install_handler(KBD_INTERRUPT, (interrupt_handler_t *)kbd_interrupt, NULL);
|
||||
return (1);
|
||||
} else {
|
||||
printf ("%s\n", result);
|
||||
}
|
||||
else {
|
||||
printf("%s\n",result);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
@@ -226,20 +225,20 @@ int overwrite_console (void)
|
||||
int drv_isa_kbd_init (void)
|
||||
{
|
||||
int error;
|
||||
device_t kbddev ;
|
||||
device_t kbddev ;
|
||||
char *stdinname = getenv ("stdin");
|
||||
|
||||
if(isa_kbd_init() == -1)
|
||||
if(isa_kbd_init()==-1)
|
||||
return -1;
|
||||
memset (&kbddev, 0, sizeof(kbddev));
|
||||
strcpy(kbddev.name, DEVNAME);
|
||||
kbddev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
|
||||
kbddev.putc = NULL ;
|
||||
memset (&kbddev, 0, sizeof(kbddev));
|
||||
strcpy(kbddev.name, DEVNAME);
|
||||
kbddev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
|
||||
kbddev.putc = NULL ;
|
||||
kbddev.puts = NULL ;
|
||||
kbddev.getc = kbd_getc ;
|
||||
kbddev.tstc = kbd_testc ;
|
||||
|
||||
error = device_register (&kbddev);
|
||||
error = device_register (&kbddev);
|
||||
if(error==0) {
|
||||
/* check if this is the standard input device */
|
||||
if(strcmp(stdinname,DEVNAME)==0) {
|
||||
@@ -302,6 +301,7 @@ int kbd_getc(void)
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* set LEDs */
|
||||
|
||||
void kbd_set_leds(void)
|
||||
@@ -322,139 +322,140 @@ void kbd_set_leds(void)
|
||||
kbd_send_data(leds);
|
||||
}
|
||||
|
||||
void handle_keyboard_event (unsigned char scancode)
|
||||
|
||||
void handle_keyboard_event(unsigned char scancode)
|
||||
{
|
||||
unsigned char keycode;
|
||||
|
||||
/* Convert scancode to keycode */
|
||||
PRINTF ("scancode %x\n", scancode);
|
||||
if (scancode == 0xe0) {
|
||||
e0 = 1; /* special charakters */
|
||||
PRINTF("scancode %x\n",scancode);
|
||||
if(scancode==0xe0) {
|
||||
e0=1; /* special charakters */
|
||||
return;
|
||||
}
|
||||
if (e0 == 1) {
|
||||
e0 = 0; /* delete flag */
|
||||
if (!(((scancode & 0x7F) == 0x38) || /* the right ctrl key */
|
||||
((scancode & 0x7F) == 0x1D) || /* the right alt key */
|
||||
((scancode & 0x7F) == 0x35) || /* the right '/' key */
|
||||
((scancode & 0x7F) == 0x1C) || /* the right enter key */
|
||||
((scancode) == 0x48) || /* arrow up */
|
||||
((scancode) == 0x50) || /* arrow down */
|
||||
((scancode) == 0x4b) || /* arrow left */
|
||||
((scancode) == 0x4d)))
|
||||
/* arrow right */
|
||||
if(e0==1) {
|
||||
e0=0; /* delete flag */
|
||||
if(!( ((scancode&0x7F)==0x38)|| /* the right ctrl key */
|
||||
((scancode&0x7F)==0x1D)|| /* the right alt key */
|
||||
((scancode&0x7F)==0x35)|| /* the right '/' key */
|
||||
((scancode&0x7F)==0x1C)|| /* the right enter key */
|
||||
((scancode)==0x48)|| /* arrow up */
|
||||
((scancode)==0x50)|| /* arrow down */
|
||||
((scancode)==0x4b)|| /* arrow left */
|
||||
((scancode)==0x4d))) /* arrow right */
|
||||
/* we swallow unknown e0 codes */
|
||||
return;
|
||||
}
|
||||
/* special cntrl keys */
|
||||
switch (scancode) {
|
||||
switch(scancode)
|
||||
{
|
||||
case 0x48:
|
||||
kbd_put_queue (27);
|
||||
kbd_put_queue (91);
|
||||
kbd_put_queue ('A');
|
||||
return;
|
||||
kbd_put_queue(27);
|
||||
kbd_put_queue(91);
|
||||
kbd_put_queue('A');
|
||||
return;
|
||||
case 0x50:
|
||||
kbd_put_queue (27);
|
||||
kbd_put_queue (91);
|
||||
kbd_put_queue ('B');
|
||||
return;
|
||||
kbd_put_queue(27);
|
||||
kbd_put_queue(91);
|
||||
kbd_put_queue('B');
|
||||
return;
|
||||
case 0x4b:
|
||||
kbd_put_queue (27);
|
||||
kbd_put_queue (91);
|
||||
kbd_put_queue ('D');
|
||||
return;
|
||||
kbd_put_queue(27);
|
||||
kbd_put_queue(91);
|
||||
kbd_put_queue('D');
|
||||
return;
|
||||
case 0x4D:
|
||||
kbd_put_queue (27);
|
||||
kbd_put_queue (91);
|
||||
kbd_put_queue ('C');
|
||||
return;
|
||||
case 0x58: /* F12 key */
|
||||
if (ctrl == 1) {
|
||||
extern int console_changed;
|
||||
|
||||
setenv ("stdin", DEVNAME);
|
||||
setenv ("stdout", "vga");
|
||||
console_changed = 1;
|
||||
}
|
||||
return;
|
||||
kbd_put_queue(27);
|
||||
kbd_put_queue(91);
|
||||
kbd_put_queue('C');
|
||||
return;
|
||||
case 0x58: /* F12 key */
|
||||
if (ctrl == 1)
|
||||
{
|
||||
extern int console_changed;
|
||||
setenv("stdin", DEVNAME);
|
||||
setenv("stdout", "vga");
|
||||
console_changed = 1;
|
||||
}
|
||||
return;
|
||||
case 0x2A:
|
||||
case 0x36: /* shift pressed */
|
||||
shift = 1;
|
||||
return; /* do nothing else */
|
||||
case 0xAA:
|
||||
case 0xB6: /* shift released */
|
||||
shift = 0;
|
||||
return; /* do nothing else */
|
||||
case 0x38: /* alt pressed */
|
||||
alt = 1;
|
||||
return; /* do nothing else */
|
||||
case 0xB8: /* alt released */
|
||||
alt = 0;
|
||||
return; /* do nothing else */
|
||||
case 0x1d: /* ctrl pressed */
|
||||
ctrl = 1;
|
||||
return; /* do nothing else */
|
||||
case 0x9d: /* ctrl released */
|
||||
ctrl = 0;
|
||||
return; /* do nothing else */
|
||||
case 0x46: /* scrollock pressed */
|
||||
scroll_lock = ~scroll_lock;
|
||||
kbd_set_leds ();
|
||||
return; /* do nothing else */
|
||||
case 0x3A: /* capslock pressed */
|
||||
caps_lock = ~caps_lock;
|
||||
kbd_set_leds ();
|
||||
return;
|
||||
case 0x45: /* numlock pressed */
|
||||
num_lock = ~num_lock;
|
||||
kbd_set_leds ();
|
||||
return;
|
||||
case 0xC6: /* scroll lock released */
|
||||
case 0xC5: /* num lock released */
|
||||
case 0xBA: /* caps lock released */
|
||||
return; /* just swallow */
|
||||
case 0x36: /* shift pressed */
|
||||
shift=1;
|
||||
return; /* do nothing else */
|
||||
case 0xAA:
|
||||
case 0xB6: /* shift released */
|
||||
shift=0;
|
||||
return; /* do nothing else */
|
||||
case 0x38: /* alt pressed */
|
||||
alt=1;
|
||||
return; /* do nothing else */
|
||||
case 0xB8: /* alt released */
|
||||
alt=0;
|
||||
return; /* do nothing else */
|
||||
case 0x1d: /* ctrl pressed */
|
||||
ctrl=1;
|
||||
return; /* do nothing else */
|
||||
case 0x9d: /* ctrl released */
|
||||
ctrl=0;
|
||||
return; /* do nothing else */
|
||||
case 0x46: /* scrollock pressed */
|
||||
scroll_lock=~scroll_lock;
|
||||
kbd_set_leds();
|
||||
return; /* do nothing else */
|
||||
case 0x3A: /* capslock pressed */
|
||||
caps_lock=~caps_lock;
|
||||
kbd_set_leds();
|
||||
return;
|
||||
case 0x45: /* numlock pressed */
|
||||
num_lock=~num_lock;
|
||||
kbd_set_leds();
|
||||
return;
|
||||
case 0xC6: /* scroll lock released */
|
||||
case 0xC5: /* num lock released */
|
||||
case 0xBA: /* caps lock released */
|
||||
return; /* just swallow */
|
||||
}
|
||||
if ((scancode & 0x80) == 0x80) /* key released */
|
||||
if((scancode&0x80)==0x80) /* key released */
|
||||
return;
|
||||
/* now, decide which table we need */
|
||||
if (scancode > (sizeof (kbd_plain_xlate) / sizeof (kbd_plain_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF ("unkown scancode %X\n", scancode);
|
||||
return; /* swallow it */
|
||||
if(scancode > (sizeof(kbd_plain_xlate)/sizeof(kbd_plain_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF("unkown scancode %X\n",scancode);
|
||||
return; /* swallow it */
|
||||
}
|
||||
/* setup plain code first */
|
||||
keycode = kbd_plain_xlate[scancode];
|
||||
if (caps_lock == 1) { /* caps_lock is pressed, overwrite plain code */
|
||||
if (scancode > (sizeof (kbd_shift_xlate) / sizeof (kbd_shift_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF ("unkown caps-locked scancode %X\n", scancode);
|
||||
return; /* swallow it */
|
||||
keycode=kbd_plain_xlate[scancode];
|
||||
if(caps_lock==1) { /* caps_lock is pressed, overwrite plain code */
|
||||
if(scancode > (sizeof(kbd_shift_xlate)/sizeof(kbd_shift_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF("unkown caps-locked scancode %X\n",scancode);
|
||||
return; /* swallow it */
|
||||
}
|
||||
keycode = kbd_shift_xlate[scancode];
|
||||
if (keycode < 'A') { /* we only want the alphas capital */
|
||||
keycode = kbd_plain_xlate[scancode];
|
||||
keycode=kbd_shift_xlate[scancode];
|
||||
if(keycode<'A') { /* we only want the alphas capital */
|
||||
keycode=kbd_plain_xlate[scancode];
|
||||
}
|
||||
}
|
||||
if (shift == 1) { /* shift overwrites caps_lock */
|
||||
if (scancode > (sizeof (kbd_shift_xlate) / sizeof (kbd_shift_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF ("unkown shifted scancode %X\n", scancode);
|
||||
return; /* swallow it */
|
||||
if(shift==1) { /* shift overwrites caps_lock */
|
||||
if(scancode > (sizeof(kbd_shift_xlate)/sizeof(kbd_shift_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF("unkown shifted scancode %X\n",scancode);
|
||||
return; /* swallow it */
|
||||
}
|
||||
keycode = kbd_shift_xlate[scancode];
|
||||
keycode=kbd_shift_xlate[scancode];
|
||||
}
|
||||
if (ctrl == 1) { /* ctrl overwrites caps_lock and shift */
|
||||
if (scancode > (sizeof (kbd_ctrl_xlate) / sizeof (kbd_ctrl_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF ("unkown ctrl scancode %X\n", scancode);
|
||||
return; /* swallow it */
|
||||
if(ctrl==1) { /* ctrl overwrites caps_lock and shift */
|
||||
if(scancode > (sizeof(kbd_ctrl_xlate)/sizeof(kbd_ctrl_xlate[0]))) { /* scancode not in list */
|
||||
PRINTF("unkown ctrl scancode %X\n",scancode);
|
||||
return; /* swallow it */
|
||||
}
|
||||
keycode = kbd_ctrl_xlate[scancode];
|
||||
keycode=kbd_ctrl_xlate[scancode];
|
||||
}
|
||||
/* check if valid keycode */
|
||||
if (keycode == 0xff) {
|
||||
PRINTF ("unkown scancode %X\n", scancode);
|
||||
return; /* swallow unknown codes */
|
||||
if(keycode==0xff) {
|
||||
PRINTF("unkown scancode %X\n",scancode);
|
||||
return; /* swallow unknown codes */
|
||||
}
|
||||
|
||||
kbd_put_queue (keycode);
|
||||
PRINTF ("%x\n", keycode);
|
||||
kbd_put_queue(keycode);
|
||||
PRINTF("%x\n",keycode);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -462,31 +463,34 @@ void handle_keyboard_event (unsigned char scancode)
|
||||
* appropriate action.
|
||||
*
|
||||
*/
|
||||
unsigned char handle_kbd_event (void)
|
||||
unsigned char handle_kbd_event(void)
|
||||
{
|
||||
unsigned char status = kbd_read_status ();
|
||||
unsigned char status = kbd_read_status();
|
||||
unsigned int work = 10000;
|
||||
|
||||
while ((--work > 0) && (status & KBD_STAT_OBF)) {
|
||||
unsigned char scancode;
|
||||
|
||||
scancode = kbd_read_input ();
|
||||
scancode = kbd_read_input();
|
||||
|
||||
/* Error bytes must be ignored to make the
|
||||
Synaptics touchpads compaq use work */
|
||||
/* Ignore error bytes */
|
||||
if (!(status & (KBD_STAT_GTO | KBD_STAT_PERR))) {
|
||||
if (status & KBD_STAT_MOUSE_OBF); /* not supported: handle_mouse_event(scancode); */
|
||||
if (!(status & (KBD_STAT_GTO | KBD_STAT_PERR)))
|
||||
{
|
||||
if (status & KBD_STAT_MOUSE_OBF)
|
||||
; /* not supported: handle_mouse_event(scancode); */
|
||||
else
|
||||
handle_keyboard_event (scancode);
|
||||
handle_keyboard_event(scancode);
|
||||
}
|
||||
status = kbd_read_status ();
|
||||
status = kbd_read_status();
|
||||
}
|
||||
if (!work)
|
||||
PRINTF ("pc_keyb: controller jammed (0x%02X).\n", status);
|
||||
PRINTF("pc_keyb: controller jammed (0x%02X).\n", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Lowlevel Part of keyboard section
|
||||
*/
|
||||
@@ -515,7 +519,7 @@ int kbd_read_data(void)
|
||||
int val;
|
||||
unsigned char status;
|
||||
|
||||
val = -1;
|
||||
val=-1;
|
||||
status = kbd_read_status();
|
||||
if (status & KBD_STAT_OBF) {
|
||||
val = kbd_read_input();
|
||||
@@ -525,91 +529,90 @@ int kbd_read_data(void)
|
||||
return val;
|
||||
}
|
||||
|
||||
int kbd_wait_for_input (void)
|
||||
int kbd_wait_for_input(void)
|
||||
{
|
||||
unsigned long timeout;
|
||||
int val;
|
||||
|
||||
timeout = KBD_TIMEOUT;
|
||||
val = kbd_read_data ();
|
||||
while (val < 0) {
|
||||
if (timeout-- == 0)
|
||||
val=kbd_read_data();
|
||||
while(val < 0)
|
||||
{
|
||||
if(timeout--==0)
|
||||
return -1;
|
||||
udelay (1000);
|
||||
val = kbd_read_data ();
|
||||
udelay(1000);
|
||||
val=kbd_read_data();
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
int kb_wait (void)
|
||||
int kb_wait(void)
|
||||
{
|
||||
unsigned long timeout = KBC_TIMEOUT * 10;
|
||||
|
||||
do {
|
||||
unsigned char status = handle_kbd_event ();
|
||||
|
||||
unsigned char status = handle_kbd_event();
|
||||
if (!(status & KBD_STAT_IBF))
|
||||
return 0; /* ok */
|
||||
udelay (1000);
|
||||
return 0; /* ok */
|
||||
udelay(1000);
|
||||
timeout--;
|
||||
} while (timeout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void kbd_write_command_w (int data)
|
||||
void kbd_write_command_w(int data)
|
||||
{
|
||||
if (kb_wait ())
|
||||
PRINTF ("timeout in kbd_write_command_w\n");
|
||||
kbd_write_command (data);
|
||||
if(kb_wait())
|
||||
PRINTF("timeout in kbd_write_command_w\n");
|
||||
kbd_write_command(data);
|
||||
}
|
||||
|
||||
void kbd_write_output_w (int data)
|
||||
void kbd_write_output_w(int data)
|
||||
{
|
||||
if (kb_wait ())
|
||||
PRINTF ("timeout in kbd_write_output_w\n");
|
||||
kbd_write_output (data);
|
||||
if(kb_wait())
|
||||
PRINTF("timeout in kbd_write_output_w\n");
|
||||
kbd_write_output(data);
|
||||
}
|
||||
|
||||
void kbd_send_data (unsigned char data)
|
||||
void kbd_send_data(unsigned char data)
|
||||
{
|
||||
unsigned char status;
|
||||
|
||||
i8259_mask_irq (KBD_INTERRUPT); /* disable interrupt */
|
||||
kbd_write_output_w (data);
|
||||
status = kbd_wait_for_input ();
|
||||
i8259_mask_irq(KBD_INTERRUPT); /* disable interrupt */
|
||||
kbd_write_output_w(data);
|
||||
status = kbd_wait_for_input();
|
||||
if (status == KBD_REPLY_ACK)
|
||||
i8259_unmask_irq (KBD_INTERRUPT); /* enable interrupt */
|
||||
i8259_unmask_irq(KBD_INTERRUPT); /* enable interrupt */
|
||||
}
|
||||
|
||||
|
||||
char *kbd_initialize (void)
|
||||
char * kbd_initialize(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
in_pointer = 0; /* delete in Buffer */
|
||||
in_pointer = 0; /* delete in Buffer */
|
||||
out_pointer = 0;
|
||||
/*
|
||||
* Test the keyboard interface.
|
||||
* This seems to be the only way to get it going.
|
||||
* If the test is successful a x55 is placed in the input buffer.
|
||||
*/
|
||||
kbd_write_command_w (KBD_CCMD_SELF_TEST);
|
||||
if (kbd_wait_for_input () != 0x55)
|
||||
kbd_write_command_w(KBD_CCMD_SELF_TEST);
|
||||
if (kbd_wait_for_input() != 0x55)
|
||||
return "Kbd: failed self test";
|
||||
/*
|
||||
* Perform a keyboard interface test. This causes the controller
|
||||
* to test the keyboard clock and data lines. The results of the
|
||||
* test are placed in the input buffer.
|
||||
*/
|
||||
kbd_write_command_w (KBD_CCMD_KBD_TEST);
|
||||
if (kbd_wait_for_input () != 0x00)
|
||||
kbd_write_command_w(KBD_CCMD_KBD_TEST);
|
||||
if (kbd_wait_for_input() != 0x00)
|
||||
return "Kbd: interface failed self test";
|
||||
/*
|
||||
* Enable the keyboard by allowing the keyboard clock to run.
|
||||
*/
|
||||
kbd_write_command_w (KBD_CCMD_KBD_ENABLE);
|
||||
status = kbd_wait_for_input ();
|
||||
kbd_write_command_w(KBD_CCMD_KBD_ENABLE);
|
||||
status = kbd_wait_for_input();
|
||||
/*
|
||||
* Reset keyboard. If the read times out
|
||||
* then the assumption is that no keyboard is
|
||||
@@ -619,16 +622,17 @@ char *kbd_initialize (void)
|
||||
* Set up to try again if the keyboard asks for RESEND.
|
||||
*/
|
||||
do {
|
||||
kbd_write_output_w (KBD_CMD_RESET);
|
||||
status = kbd_wait_for_input ();
|
||||
kbd_write_output_w(KBD_CMD_RESET);
|
||||
status = kbd_wait_for_input();
|
||||
if (status == KBD_REPLY_ACK)
|
||||
break;
|
||||
if (status != KBD_REPLY_RESEND) {
|
||||
PRINTF ("status: %X\n", status);
|
||||
if (status != KBD_REPLY_RESEND)
|
||||
{
|
||||
PRINTF("status: %X\n",status);
|
||||
return "Kbd: reset failed, no ACK";
|
||||
}
|
||||
} while (1);
|
||||
if (kbd_wait_for_input () != KBD_REPLY_POR)
|
||||
if (kbd_wait_for_input() != KBD_REPLY_POR)
|
||||
return "Kbd: reset failed, no POR";
|
||||
|
||||
/*
|
||||
@@ -638,43 +642,44 @@ char *kbd_initialize (void)
|
||||
* Set up to try again if the keyboard asks for RESEND.
|
||||
*/
|
||||
do {
|
||||
kbd_write_output_w (KBD_CMD_DISABLE);
|
||||
status = kbd_wait_for_input ();
|
||||
kbd_write_output_w(KBD_CMD_DISABLE);
|
||||
status = kbd_wait_for_input();
|
||||
if (status == KBD_REPLY_ACK)
|
||||
break;
|
||||
if (status != KBD_REPLY_RESEND)
|
||||
return "Kbd: disable keyboard: no ACK";
|
||||
} while (1);
|
||||
|
||||
kbd_write_command_w (KBD_CCMD_WRITE_MODE);
|
||||
kbd_write_output_w (KBD_MODE_KBD_INT
|
||||
| KBD_MODE_SYS
|
||||
| KBD_MODE_DISABLE_MOUSE | KBD_MODE_KCC);
|
||||
kbd_write_command_w(KBD_CCMD_WRITE_MODE);
|
||||
kbd_write_output_w(KBD_MODE_KBD_INT
|
||||
| KBD_MODE_SYS
|
||||
| KBD_MODE_DISABLE_MOUSE
|
||||
| KBD_MODE_KCC);
|
||||
|
||||
/* AMCC powerpc portables need this to use scan-code set 1 -- Cort */
|
||||
kbd_write_command_w (KBD_CCMD_READ_MODE);
|
||||
if (!(kbd_wait_for_input () & KBD_MODE_KCC)) {
|
||||
/* ibm powerpc portables need this to use scan-code set 1 -- Cort */
|
||||
kbd_write_command_w(KBD_CCMD_READ_MODE);
|
||||
if (!(kbd_wait_for_input() & KBD_MODE_KCC)) {
|
||||
/*
|
||||
* If the controller does not support conversion,
|
||||
* Set the keyboard to scan-code set 1.
|
||||
*/
|
||||
kbd_write_output_w (0xF0);
|
||||
kbd_wait_for_input ();
|
||||
kbd_write_output_w (0x01);
|
||||
kbd_wait_for_input ();
|
||||
kbd_write_output_w(0xF0);
|
||||
kbd_wait_for_input();
|
||||
kbd_write_output_w(0x01);
|
||||
kbd_wait_for_input();
|
||||
}
|
||||
kbd_write_output_w (KBD_CMD_ENABLE);
|
||||
if (kbd_wait_for_input () != KBD_REPLY_ACK)
|
||||
kbd_write_output_w(KBD_CMD_ENABLE);
|
||||
if (kbd_wait_for_input() != KBD_REPLY_ACK)
|
||||
return "Kbd: enable keyboard: no ACK";
|
||||
|
||||
/*
|
||||
* Finally, set the typematic rate to maximum.
|
||||
*/
|
||||
kbd_write_output_w (KBD_CMD_SET_RATE);
|
||||
if (kbd_wait_for_input () != KBD_REPLY_ACK)
|
||||
kbd_write_output_w(KBD_CMD_SET_RATE);
|
||||
if (kbd_wait_for_input() != KBD_REPLY_ACK)
|
||||
return "Kbd: Set rate: no ACK";
|
||||
kbd_write_output_w (0x00);
|
||||
if (kbd_wait_for_input () != KBD_REPLY_ACK)
|
||||
kbd_write_output_w(0x00);
|
||||
if (kbd_wait_for_input() != KBD_REPLY_ACK)
|
||||
return "Kbd: Set rate: no ACK";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
#include "memio.h"
|
||||
#include "articiaS.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifndef CFG_NS16550
|
||||
static uint32 ComPort1;
|
||||
|
||||
@@ -152,6 +150,8 @@ const NS16550_t Com1 = (NS16550_t) CFG_NS16550_COM2;
|
||||
|
||||
int serial_init (void)
|
||||
{
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
uint32 clock_divisor = 115200 / gd->baudrate;
|
||||
|
||||
NS16550_init (Com0, clock_divisor);
|
||||
@@ -239,6 +239,8 @@ void serial_puts (const char *string)
|
||||
|
||||
void serial_setbrg (void)
|
||||
{
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
uint32 clock_divisor = 115200 / gd->baudrate;
|
||||
|
||||
NS16550_init (Com0, clock_divisor);
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
|
||||
DIM0_TIM_CTL_0 = 0x737d737d (0xc9)
|
||||
/* DRAM timing control for dimm0 & dimm1; set wait one clock */
|
||||
/* cycle for next data access */
|
||||
/* cycle for next data access */
|
||||
|
||||
DIM2_TIM_CTL_0 = 0x737d737d (0xca)
|
||||
/* DRAM timing control for dimm2 & dimm3; set wait one clock */
|
||||
/* cycle for next data access */
|
||||
/* cycle for next data access */
|
||||
|
||||
DIM0_BNK0_CTL_0 = BNK0_RAM_SIZ_128MB (0x90)
|
||||
/* set dimm0 bank0 for 128 MB */
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(powerpc)
|
||||
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
|
||||
/* Do we need any of these for elf?
|
||||
__DYNAMIC = 0; */
|
||||
SECTIONS
|
||||
@@ -40,11 +41,11 @@ SECTIONS
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.rel.text : { *(.rel.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rela.text : { *(.rela.text) }
|
||||
.rel.data : { *(.rel.data) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rela.data : { *(.rela.data) }
|
||||
.rel.rodata : { *(.rel.rodata) }
|
||||
.rela.rodata : { *(.rela.rodata) }
|
||||
.rel.got : { *(.rel.got) }
|
||||
.rela.got : { *(.rela.got) }
|
||||
.rel.ctors : { *(.rel.ctors) }
|
||||
@@ -62,7 +63,7 @@ SECTIONS
|
||||
cpu/74xx_7xx/start.o (.text)
|
||||
/* store the environment in a seperate sector in the boot flash */
|
||||
/* . = env_offset; */
|
||||
common/env_embedded.o(.text)
|
||||
common/environment.o(.text)
|
||||
|
||||
*(.text)
|
||||
*(.fixup)
|
||||
@@ -75,7 +76,6 @@ SECTIONS
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
*(.rodata.str1.4)
|
||||
*(.eh_frame)
|
||||
}
|
||||
.fini : { *(.fini) } =0
|
||||
.ctors : { *(.ctors) }
|
||||
@@ -108,13 +108,11 @@ SECTIONS
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
|
||||
. = .;
|
||||
__u_boot_cmd_start = .;
|
||||
.u_boot_cmd : { *(.u_boot_cmd) }
|
||||
__u_boot_cmd_end = .;
|
||||
|
||||
|
||||
. = .;
|
||||
__start___ex_table = .;
|
||||
__ex_table : { *(__ex_table) }
|
||||
__stop___ex_table = .;
|
||||
@@ -127,7 +125,7 @@ SECTIONS
|
||||
__init_end = .;
|
||||
|
||||
__bss_start = .;
|
||||
.bss (NOLOAD) :
|
||||
.bss :
|
||||
{
|
||||
*(.sbss) *(.scommon)
|
||||
*(.dynbss)
|
||||
|
||||
@@ -518,11 +518,11 @@ void usb_check_int_chain(void)
|
||||
uhci_td_t *td,*prevtd;
|
||||
|
||||
for(i=0;i<8;i++) {
|
||||
prevtd = &td_int[i]; /* the first previous td is the skeleton td */
|
||||
prevtd=&td_int[i]; /* the first previous td is the skeleton td */
|
||||
link=swap_32(td_int[i].link) & 0xfffffff0; /* next in chain */
|
||||
td=(uhci_td_t *)link; /* assign it */
|
||||
/* all interrupt TDs are finally linked to the td_int[0].
|
||||
* so we process all until we find the td_int[0].
|
||||
* so we process all until we find the td_int[0].
|
||||
* if int0 chain points to a QH, we're also done
|
||||
*/
|
||||
while(((i>0) && (link != (unsigned long)&td_int[0])) ||
|
||||
@@ -595,7 +595,7 @@ int usb_lowlevel_init(void)
|
||||
|
||||
|
||||
busdevfunc=pci_find_device(USB_UHCI_VEND_ID,USB_UHCI_DEV_ID,0); /* get PCI Device ID */
|
||||
if(busdevfunc == -1) {
|
||||
if(busdevfunc==-1) {
|
||||
printf("Error USB UHCI (%04X,%04X) not found\n",USB_UHCI_VEND_ID,USB_UHCI_DEV_ID);
|
||||
return -1;
|
||||
}
|
||||
@@ -642,12 +642,12 @@ int usb_lowlevel_init(void)
|
||||
*/
|
||||
int usb_lowlevel_stop(void)
|
||||
{
|
||||
if(irqvec == -1)
|
||||
if(irqvec==-1)
|
||||
return 1;
|
||||
irq_free_handler(irqvec);
|
||||
irq_free_handler(0);
|
||||
reset_hc();
|
||||
irqvec = -1;
|
||||
irqvec=-1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
#include "via686.h"
|
||||
#include "i8259.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#undef VIA_DEBUG
|
||||
|
||||
#ifdef VIA_DEBUG
|
||||
@@ -97,7 +95,7 @@ void via_isa_init(pci_dev_t dev, struct pci_config_table *table)
|
||||
pci_write_config_byte(dev, 0x80, 0);
|
||||
pci_write_config_byte(dev, 0x85, 0x01);
|
||||
|
||||
/* pci_write_config_byte(dev, 0x77, 0x00); */
|
||||
/* pci_write_config_byte(dev, 0x77, 0x00); */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,7 +210,7 @@ void via_cfgfunc_via686(struct pci_controller *host, pci_dev_t dev, struct pci_c
|
||||
}
|
||||
|
||||
__asm (" .globl via_calibrate_time_base \n"
|
||||
"via_calibrate_time_base: \n"
|
||||
"via_calibrate_time_base: \n"
|
||||
" lis 9, 0xfe00 \n"
|
||||
" li 0, 0x00 \n"
|
||||
" mttbu 0 \n"
|
||||
@@ -228,31 +226,33 @@ __asm (" .globl via_calibrate_time_base \n"
|
||||
|
||||
extern unsigned long via_calibrate_time_base(void);
|
||||
|
||||
void via_calibrate_bus_freq (void)
|
||||
void via_calibrate_bus_freq(void)
|
||||
{
|
||||
unsigned long tb;
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/* This is 20 microseconds */
|
||||
#define CALIBRATE_TIME 28636
|
||||
unsigned long tb;
|
||||
|
||||
/* Enable the timer (and disable speaker) */
|
||||
unsigned char c;
|
||||
/* This is 20 microseconds */
|
||||
#define CALIBRATE_TIME 28636
|
||||
|
||||
c = in_byte (0x61);
|
||||
out_byte (0x61, ((c & ~0x02) | 0x01));
|
||||
|
||||
/* Set timer 2 to low/high writing */
|
||||
out_byte (0x43, 0xb0);
|
||||
out_byte (0x42, CALIBRATE_TIME & 0xff);
|
||||
out_byte (0x42, CALIBRATE_TIME >> 8);
|
||||
/* Enable the timer (and disable speaker) */
|
||||
unsigned char c;
|
||||
c = in_byte(0x61);
|
||||
out_byte(0x61, ((c & ~0x02) | 0x01));
|
||||
|
||||
/* Read the time base */
|
||||
tb = via_calibrate_time_base ();
|
||||
/* Set timer 2 to low/high writing */
|
||||
out_byte(0x43, 0xb0);
|
||||
out_byte(0x42, CALIBRATE_TIME & 0xff);
|
||||
out_byte(0x42, CALIBRATE_TIME >>8);
|
||||
|
||||
if (tb >= 700000)
|
||||
gd->bus_clk = 133333333;
|
||||
else
|
||||
gd->bus_clk = 100000000;
|
||||
/* Read the time base */
|
||||
tb = via_calibrate_time_base();
|
||||
|
||||
if (tb >= 700000)
|
||||
gd->bus_clk = 133333333;
|
||||
else
|
||||
gd->bus_clk = 100000000;
|
||||
|
||||
}
|
||||
|
||||
@@ -262,9 +262,9 @@ void ide_led(uchar led, uchar status)
|
||||
/* unsigned char c = in_byte(0x92); */
|
||||
|
||||
/* if (!status) */
|
||||
/* out_byte(0x92, c | 0xC0); */
|
||||
/* out_byte(0x92, c | 0xC0); */
|
||||
/* else */
|
||||
/* out_byte(0x92, c & ~0xC0); */
|
||||
/* out_byte(0x92, c & ~0xC0); */
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
#include "memio.h"
|
||||
#include <part.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
unsigned char *cursor_position;
|
||||
unsigned int cursor_row;
|
||||
unsigned int cursor_col;
|
||||
@@ -56,7 +54,6 @@ int video_rows(void);
|
||||
int video_cols(void);
|
||||
|
||||
char *prompt_string = "=>";
|
||||
unsigned char video_get_attr(void);
|
||||
|
||||
void video_set_color(unsigned char attr)
|
||||
{
|
||||
@@ -483,6 +480,7 @@ extern char version_string[];
|
||||
void video_banner(void)
|
||||
{
|
||||
block_dev_desc_t *ide;
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
int i;
|
||||
char *s;
|
||||
int maxdev;
|
||||
|
||||
@@ -0,0 +1,335 @@
|
||||
/*
|
||||
* Mostly done after the Scitech Bios emulation
|
||||
* Written by Hans-Jörg Frieden
|
||||
* Hyperion Entertainment
|
||||
*/
|
||||
#include "x86emu.h"
|
||||
#include "glue.h"
|
||||
|
||||
#undef DEBUG
|
||||
#ifdef DEBUG
|
||||
#define PRINTF(fmt, args...) printf(fmt, ## args)
|
||||
#else
|
||||
#define PRINTF(fmt, args...)
|
||||
#endif
|
||||
|
||||
#define BIOS_SEG 0xFFF0
|
||||
#define PCIBIOS_SUCCESSFUL 0
|
||||
#define PCIBIOS_DEVICE_NOT_FOUND 0x86
|
||||
|
||||
typedef unsigned char UBYTE;
|
||||
typedef unsigned short UWORD;
|
||||
typedef unsigned long ULONG;
|
||||
|
||||
typedef char BYTE;
|
||||
typedef short WORT;
|
||||
typedef long LONG;
|
||||
|
||||
static inline UBYTE read_byte(volatile UBYTE* from)
|
||||
{
|
||||
int x;
|
||||
asm volatile ("lbz %0,%1\n eieio" : "=r" (x) : "m" (*from));
|
||||
return (UBYTE)x;
|
||||
}
|
||||
|
||||
static inline void write_byte(volatile UBYTE *to, int x)
|
||||
{
|
||||
asm volatile ("stb %1,%0\n eieio" : "=m" (*to) : "r" (x));
|
||||
}
|
||||
|
||||
static inline UWORD read_word_little(volatile UWORD *from)
|
||||
{
|
||||
int x;
|
||||
asm volatile ("lhbrx %0,0,%1\n eieio" : "=r" (x) : "r" (from), "m" (*from));
|
||||
return (UWORD)x;
|
||||
}
|
||||
|
||||
static inline UWORD read_word_big(volatile UWORD *from)
|
||||
{
|
||||
int x;
|
||||
asm volatile ("lhz %0,%1\n eieio" : "=r" (x) : "m" (*from));
|
||||
return (UWORD)x;
|
||||
}
|
||||
|
||||
static inline void write_word_little(volatile UWORD *to, int x)
|
||||
{
|
||||
asm volatile ("sthbrx %1,0,%2\n eieio" : "=m" (*to) : "r" (x), "r" (to));
|
||||
}
|
||||
|
||||
static inline void write_word_big(volatile UWORD *to, int x)
|
||||
{
|
||||
asm volatile ("sth %1,%0\n eieio" : "=m" (*to) : "r" (x));
|
||||
}
|
||||
|
||||
static inline ULONG read_long_little(volatile ULONG *from)
|
||||
{
|
||||
unsigned long x;
|
||||
asm volatile ("lwbrx %0,0,%1\n eieio" : "=r" (x) : "r" (from), "m"(*from));
|
||||
return (ULONG)x;
|
||||
}
|
||||
|
||||
static inline ULONG read_long_big(volatile ULONG *from)
|
||||
{
|
||||
unsigned long x;
|
||||
asm volatile ("lwz %0,%1\n eieio" : "=r" (x) : "m" (*from));
|
||||
return (ULONG)x;
|
||||
}
|
||||
|
||||
static inline void write_long_little(volatile ULONG *to, ULONG x)
|
||||
{
|
||||
asm volatile ("stwbrx %1,0,%2\n eieio" : "=m" (*to) : "r" (x), "r" (to));
|
||||
}
|
||||
|
||||
static inline void write_long_big(volatile ULONG *to, ULONG x)
|
||||
{
|
||||
asm volatile ("stw %1,%0\n eieio" : "=m" (*to) : "r" (x));
|
||||
}
|
||||
|
||||
#define port_to_mem(from) (0xFE000000|(from))
|
||||
#define in_byte(from) read_byte( (UBYTE *)port_to_mem(from))
|
||||
#define in_word(from) read_word_little((UWORD *)port_to_mem(from))
|
||||
#define in_long(from) read_long_little((ULONG *)port_to_mem(from))
|
||||
#define out_byte(to, val) write_byte((UBYTE *)port_to_mem(to), val)
|
||||
#define out_word(to, val) write_word_little((UWORD *)port_to_mem(to), val)
|
||||
#define out_long(to, val) write_long_little((ULONG *)port_to_mem(to), val)
|
||||
|
||||
static void X86API undefined_intr(int intno)
|
||||
{
|
||||
extern u16 A1_rdw(u32 addr);
|
||||
if (A1_rdw(intno * 4 + 2) == BIOS_SEG)
|
||||
{
|
||||
PRINTF("Undefined interrupt %xh called AX = %xh, BX = %xh, CX = %xh, DX = %xh\n",
|
||||
intno, M.x86.R_AX, M.x86.R_BX, M.x86.R_CX, M.x86.R_DX);
|
||||
X86EMU_halt_sys();
|
||||
}
|
||||
else
|
||||
{
|
||||
PRINTF("Calling interrupt %xh, AL=%xh, AH=%xh\n", intno, M.x86.R_AL, M.x86.R_AH);
|
||||
X86EMU_prepareForInt(intno);
|
||||
}
|
||||
}
|
||||
|
||||
static void X86API int42(int intno);
|
||||
static void X86API int15(int intno);
|
||||
|
||||
static void X86API int10(int intno)
|
||||
{
|
||||
if (A1_rdw(intno*4+2) == BIOS_SEG)
|
||||
int42(intno);
|
||||
else
|
||||
{
|
||||
PRINTF("int10: branching to %04X:%04X, AL=%xh, AH=%xh\n", A1_rdw(intno*4+2), A1_rdw(intno*4),
|
||||
M.x86.R_AL, M.x86.R_AH);
|
||||
X86EMU_prepareForInt(intno);
|
||||
}
|
||||
}
|
||||
|
||||
static void X86API int1A(int intno)
|
||||
{
|
||||
int device;
|
||||
|
||||
switch(M.x86.R_AX)
|
||||
{
|
||||
case 0xB101: /* PCI Bios Present? */
|
||||
M.x86.R_AL = 0x00;
|
||||
M.x86.R_EDX = 0x20494350;
|
||||
M.x86.R_BX = 0x0210;
|
||||
M.x86.R_CL = 3;
|
||||
CLEAR_FLAG(F_CF);
|
||||
break;
|
||||
case 0xB102: /* Find device */
|
||||
device = mypci_find_device(M.x86.R_DX, M.x86.R_CX, M.x86.R_SI);
|
||||
if (device != -1)
|
||||
{
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
M.x86.R_BH = mypci_bus(device);
|
||||
M.x86.R_BL = mypci_devfn(device);
|
||||
}
|
||||
else
|
||||
{
|
||||
M.x86.R_AH = PCIBIOS_DEVICE_NOT_FOUND;
|
||||
}
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
break;
|
||||
case 0xB103: /* Find PCI class code */
|
||||
M.x86.R_AH = PCIBIOS_DEVICE_NOT_FOUND;
|
||||
/*printf("Find by class not yet implmented"); */
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
break;
|
||||
case 0xB108: /* read config byte */
|
||||
M.x86.R_CL = mypci_read_cfg_byte(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("read_config_byte %x,%x,%x -> %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_CL); */
|
||||
break;
|
||||
case 0xB109: /* read config word */
|
||||
M.x86.R_CX = mypci_read_cfg_word(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("read_config_word %x,%x,%x -> %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_CX); */
|
||||
break;
|
||||
case 0xB10A: /* read config dword */
|
||||
M.x86.R_ECX = mypci_read_cfg_long(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("read_config_long %x,%x,%x -> %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_ECX); */
|
||||
break;
|
||||
case 0xB10B: /* write config byte */
|
||||
mypci_write_cfg_byte(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, M.x86.R_CL);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("write_config_byte %x,%x,%x <- %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_CL); */
|
||||
break;
|
||||
case 0xB10C: /* write config word */
|
||||
mypci_write_cfg_word(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, M.x86.R_CX);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("write_config_word %x,%x,%x <- %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_CX); */
|
||||
break;
|
||||
case 0xB10D: /* write config dword */
|
||||
mypci_write_cfg_long(M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, M.x86.R_ECX);
|
||||
M.x86.R_AH = PCIBIOS_SUCCESSFUL;
|
||||
CONDITIONAL_SET_FLAG((M.x86.R_AH != PCIBIOS_SUCCESSFUL), F_CF);
|
||||
/*printf("write_config_long %x,%x,%x <- %x\n", M.x86.R_BH, M.x86.R_BL, M.x86.R_DI, */
|
||||
/* M.x86.R_ECX); */
|
||||
break;
|
||||
default:
|
||||
PRINTF("BIOS int %xh: Unknown function AX=%04xh\n", intno, M.x86.R_AX);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void bios_init(void)
|
||||
{
|
||||
int i;
|
||||
X86EMU_intrFuncs bios_intr_tab[256];
|
||||
|
||||
for (i=0; i<256; i++)
|
||||
{
|
||||
write_long_little(M.mem_base+i*4, BIOS_SEG<<16);
|
||||
bios_intr_tab[i] = undefined_intr;
|
||||
}
|
||||
|
||||
bios_intr_tab[0x10] = int10;
|
||||
bios_intr_tab[0x1A] = int1A;
|
||||
bios_intr_tab[0x42] = int42;
|
||||
bios_intr_tab[0x15] = int15;
|
||||
|
||||
bios_intr_tab[0x6D] = int42;
|
||||
|
||||
X86EMU_setupIntrFuncs(bios_intr_tab);
|
||||
video_init();
|
||||
}
|
||||
|
||||
unsigned char setup_40x25[] =
|
||||
{
|
||||
0x38, 0x28, 0x2d, 0x0a, 0x1f, 6, 0x19,
|
||||
0x1c, 2, 7, 6, 7, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
unsigned char setup_80x25[] =
|
||||
{
|
||||
0x71, 0x50, 0x5a, 0x0a, 0x1f, 6, 0x19,
|
||||
0x1c, 2, 7, 6, 7, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
unsigned char setup_graphics[] =
|
||||
{
|
||||
0x38, 0x28, 0x20, 0x0a, 0x7f, 6, 0x64,
|
||||
0x70, 2, 1, 6, 7, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
unsigned char setup_bw[] =
|
||||
{
|
||||
0x61, 0x50, 0x52, 0x0f, 0x19, 6, 0x19,
|
||||
0x19, 2, 0x0d, 0x0b, 0x0c, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
unsigned char * setup_modes[] =
|
||||
{
|
||||
setup_40x25, /* mode 0: 40x25 bw text */
|
||||
setup_40x25, /* mode 1: 40x25 col text */
|
||||
setup_80x25, /* mode 2: 80x25 bw text */
|
||||
setup_80x25, /* mode 3: 80x25 col text */
|
||||
setup_graphics, /* mode 4: 320x200 col graphics */
|
||||
setup_graphics, /* mode 5: 320x200 bw graphics */
|
||||
setup_graphics, /* mode 6: 640x200 bw graphics */
|
||||
setup_bw /* mode 7: 80x25 mono text */
|
||||
};
|
||||
|
||||
unsigned int setup_cols[] =
|
||||
{
|
||||
40, 40, 80, 80, 40, 40, 80, 80
|
||||
};
|
||||
|
||||
unsigned char setup_modesets[] =
|
||||
{
|
||||
0x2C, 0x28, 0x2D, 0x29, 0x2A, 0x2E, 0x1E, 0x29
|
||||
};
|
||||
|
||||
unsigned int setup_bufsize[] =
|
||||
{
|
||||
2048, 2048, 4096, 2096, 16384, 16384, 16384, 4096
|
||||
};
|
||||
|
||||
void bios_set_mode(int mode)
|
||||
{
|
||||
int i;
|
||||
unsigned char mode_set = setup_modesets[mode]; /* Control register value */
|
||||
unsigned char *setup_regs = setup_modes[mode]; /* Register 3D4 Array */
|
||||
|
||||
/* Switch video off */
|
||||
out_byte(0x3D8, mode_set & 0x37);
|
||||
|
||||
/* Set up parameters at 3D4h */
|
||||
for (i=0; i<16; i++)
|
||||
{
|
||||
out_byte(0x3D4, (unsigned char)i);
|
||||
out_byte(0x3D5, *setup_regs);
|
||||
setup_regs++;
|
||||
}
|
||||
|
||||
/* Enable video */
|
||||
out_byte(0x3D8, mode_set);
|
||||
|
||||
/* Set overscan */
|
||||
if (mode == 6) out_byte(0x3D9, 0x3F);
|
||||
else out_byte(0x3D9, 0x30);
|
||||
}
|
||||
|
||||
static void bios_print_string(void)
|
||||
{
|
||||
extern void video_bios_print_string(char *string, int x, int y, int attr, int count);
|
||||
char *s = (char *)(M.x86.R_ES<<4) + M.x86.R_BP;
|
||||
int attr;
|
||||
if (M.x86.R_AL & 0x02) attr = - 1;
|
||||
else attr = M.x86.R_BL;
|
||||
video_bios_print_string(s, M.x86.R_DH, M.x86.R_DL, attr, M.x86.R_CX);
|
||||
}
|
||||
|
||||
static void X86API int42(int intno)
|
||||
{
|
||||
switch (M.x86.R_AH)
|
||||
{
|
||||
case 0x00:
|
||||
bios_set_mode(M.x86.R_AL);
|
||||
break;
|
||||
case 0x13:
|
||||
bios_print_string();
|
||||
break;
|
||||
default:
|
||||
PRINTF("Warning: VIDEO BIOS interrupt %xh unimplemented function %xh, AL = %xh\n",
|
||||
intno, M.x86.R_AH, M.x86.R_AL);
|
||||
}
|
||||
}
|
||||
|
||||
static void X86API int15(int intno)
|
||||
{
|
||||
PRINTF("Called interrupt 15h: AX = %xh, BX = %xh, CX = %xh, DX = %xh\n",
|
||||
M.x86.R_AX, M.x86.R_BX, M.x86.R_CX, M.x86.R_DX);
|
||||
}
|
||||
@@ -0,0 +1,515 @@
|
||||
#include <common.h>
|
||||
#include <pci.h>
|
||||
#include <74xx_7xx.h>
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
#undef DEBUG
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define PRINTF(format, args...) _printf(format , ## args)
|
||||
#else
|
||||
#define PRINTF(format, argc...)
|
||||
#endif
|
||||
|
||||
static pci_dev_t to_pci(int bus, int devfn)
|
||||
{
|
||||
return PCI_BDF(bus, (devfn>>3), devfn&3);
|
||||
}
|
||||
|
||||
int mypci_find_device(int vendor, int product, int index)
|
||||
{
|
||||
return pci_find_device(vendor, product, index);
|
||||
}
|
||||
|
||||
int mypci_bus(int device)
|
||||
{
|
||||
return PCI_BUS(device);
|
||||
}
|
||||
|
||||
int mypci_devfn(int device)
|
||||
{
|
||||
return (PCI_DEV(device)<<3) | PCI_FUNC(device);
|
||||
}
|
||||
|
||||
|
||||
#define mypci_read_func(type, size) \
|
||||
type mypci_read_cfg_##size##(int bus, int devfn, int offset) \
|
||||
{ \
|
||||
type c; \
|
||||
pci_read_config_##size##(to_pci(bus, devfn), offset, &c); \
|
||||
return c; \
|
||||
}
|
||||
|
||||
#define mypci_write_func(type, size) \
|
||||
void mypci_write_cfg_##size##(int bus, int devfn, int offset, int value) \
|
||||
{ \
|
||||
pci_write_config_##size##(to_pci(bus, devfn), offset, value); \
|
||||
}
|
||||
|
||||
mypci_read_func(u8,byte);
|
||||
mypci_read_func(u16,word);
|
||||
|
||||
mypci_write_func(u8,byte);
|
||||
mypci_write_func(u16,word);
|
||||
|
||||
u32 mypci_read_cfg_long(int bus, int devfn, int offset)
|
||||
{
|
||||
u32 c;
|
||||
pci_read_config_dword(to_pci(bus, devfn), offset, &c);
|
||||
return c;
|
||||
}
|
||||
|
||||
void mypci_write_cfg_long(int bus, int devfn, int offset, int value)
|
||||
{
|
||||
pci_write_config_dword(to_pci(bus, devfn), offset, value);
|
||||
}
|
||||
|
||||
void _printf(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[CFG_PBSIZE];
|
||||
|
||||
va_start(args, fmt);
|
||||
(void)vsprintf(buf, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
printf(buf);
|
||||
}
|
||||
|
||||
char *_getenv(char *name)
|
||||
{
|
||||
return getenv(name);
|
||||
}
|
||||
|
||||
unsigned long get_bar_size(pci_dev_t dev, int offset)
|
||||
{
|
||||
u32 bar_back, bar_value;
|
||||
|
||||
/* Save old BAR value */
|
||||
pci_read_config_dword(dev, offset, &bar_back);
|
||||
|
||||
/* Write all 1's. */
|
||||
pci_write_config_dword(dev, offset, ~0);
|
||||
|
||||
/* Now read back the relevant bits */
|
||||
pci_read_config_dword(dev, offset, &bar_value);
|
||||
|
||||
/* Restore original value */
|
||||
pci_write_config_dword(dev, offset, bar_back);
|
||||
|
||||
if (bar_value == 0) return 0xFFFFFFFF; /* This BAR is disabled */
|
||||
|
||||
if ((bar_value & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY)
|
||||
{
|
||||
/* This is a memory space BAR. Mask it out so we get the size of it */
|
||||
return ~(bar_value & PCI_BASE_ADDRESS_MEM_MASK) + 1;
|
||||
}
|
||||
|
||||
/* Not suitable */
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
void enable_compatibility_hole(void)
|
||||
{
|
||||
u8 cfg;
|
||||
pci_dev_t art = PCI_BDF(0,0,0);
|
||||
|
||||
pci_read_config_byte(art, 0x54, &cfg);
|
||||
/* cfg |= 0x08; */
|
||||
cfg |= 0x20;
|
||||
pci_write_config_byte(art, 0x54, cfg);
|
||||
}
|
||||
|
||||
void disable_compatibility_hole(void)
|
||||
{
|
||||
u8 cfg;
|
||||
pci_dev_t art = PCI_BDF(0,0,0);
|
||||
|
||||
pci_read_config_byte(art, 0x54, &cfg);
|
||||
/* cfg &= ~0x08; */
|
||||
cfg &= ~0x20;
|
||||
pci_write_config_byte(art, 0x54, cfg);
|
||||
}
|
||||
|
||||
void map_rom(pci_dev_t dev, u32 address)
|
||||
{
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, address|PCI_ROM_ADDRESS_ENABLE);
|
||||
}
|
||||
|
||||
void unmap_rom(pci_dev_t dev)
|
||||
{
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, 0);
|
||||
}
|
||||
|
||||
void bat_map(u8 batnum, u32 address, u32 length)
|
||||
{
|
||||
u32 temp = address;
|
||||
address &= 0xFFFE0000;
|
||||
temp &= 0x0001FFFF;
|
||||
length = (length - 1 ) >> 17;
|
||||
length <<= 2;
|
||||
|
||||
switch (batnum)
|
||||
{
|
||||
case 0:
|
||||
__asm volatile ("mtdbatu 0, %0" : : "r" (address | length | 3));
|
||||
__asm volatile ("mtdbatl 0, %0" : : "r" (address | 0x22));
|
||||
break;
|
||||
case 1:
|
||||
__asm volatile ("mtdbatu 1, %0" : : "r" (address | length | 3));
|
||||
__asm volatile ("mtdbatl 1, %0" : : "r" (address | 0x22));
|
||||
break;
|
||||
case 2:
|
||||
__asm volatile ("mtdbatu 2, %0" : : "r" (address | length | 3));
|
||||
__asm volatile ("mtdbatl 2, %0" : : "r" (address | 0x22));
|
||||
break;
|
||||
case 3:
|
||||
__asm volatile ("mtdbatu 3, %0" : : "r" (address | length | 3));
|
||||
__asm volatile ("mtdbatl 3, %0" : : "r" (address | 0x22));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int find_image(u32 rom_address, u32 rom_size, void **image, u32 *image_size);
|
||||
|
||||
int attempt_map_rom(pci_dev_t dev, void *copy_address)
|
||||
{
|
||||
u32 rom_size = 0;
|
||||
u32 rom_address = 0;
|
||||
u32 bar_size = 0;
|
||||
u32 bar_backup = 0;
|
||||
int i,j;
|
||||
void *image = 0;
|
||||
u32 image_size = 0;
|
||||
int did_correct = 0;
|
||||
u32 prefetch_addr = 0;
|
||||
u32 prefetch_size = 0;
|
||||
u32 prefetch_idx = 0;
|
||||
|
||||
/* Get the size of the expansion rom */
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, 0xFFFFFFFF);
|
||||
pci_read_config_dword(dev, PCI_ROM_ADDRESS, &rom_size);
|
||||
if ((rom_size & 0x01) == 0)
|
||||
{
|
||||
PRINTF("No ROM\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
rom_size &= 0xFFFFF800;
|
||||
rom_size = (~rom_size)+1;
|
||||
|
||||
PRINTF("ROM Size is %dK\n", rom_size/1024);
|
||||
|
||||
/*
|
||||
* Try to find a place for the ROM. We always attempt to use
|
||||
* one of the card's bases for this, as this will be in any
|
||||
* bridge's resource range as well as being free of conflicts
|
||||
* with other cards. In a graphics card it is very unlikely
|
||||
* that there won't be any base address that is large enough to
|
||||
* hold the rom.
|
||||
*
|
||||
* FIXME: To work around this, theoretically the largest base
|
||||
* could be used if none is found in the loop below.
|
||||
*/
|
||||
|
||||
for (i = PCI_BASE_ADDRESS_0; i <= PCI_BASE_ADDRESS_5; i += 4)
|
||||
{
|
||||
bar_size = get_bar_size(dev, i);
|
||||
PRINTF("PCI_BASE_ADDRESS_%d is %dK large\n",
|
||||
(i - PCI_BASE_ADDRESS_0)/4,
|
||||
bar_size/1024);
|
||||
if (bar_size != 0xFFFFFFFF && bar_size >= rom_size)
|
||||
{
|
||||
PRINTF("Found a match for rom size\n");
|
||||
pci_read_config_dword(dev, i, &rom_address);
|
||||
rom_address &= 0xFFFFFFF0;
|
||||
if (rom_address != 0 && rom_address != 0xFFFFFFF0) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (rom_address == 0 || rom_address == 0xFFFFFFF0)
|
||||
{
|
||||
PRINTF("No suitable rom address found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Disable the BAR */
|
||||
pci_read_config_dword(dev, i, &bar_backup);
|
||||
pci_write_config_dword(dev, i, 0);
|
||||
|
||||
/* Map ROM */
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, rom_address | PCI_ROM_ADDRESS_ENABLE);
|
||||
|
||||
/* Copy the rom to a place in the emulator space */
|
||||
PRINTF("Claiming BAT 2\n");
|
||||
bat_map(2, rom_address, rom_size);
|
||||
/* show_bat_mapping(); */
|
||||
|
||||
if (0 == find_image(rom_address, rom_size, &image, &image_size))
|
||||
{
|
||||
PRINTF("No x86 BIOS image found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
PRINTF("Copying %ld bytes from 0x%lx to 0x%lx\n", (long)image_size, (long)image, (long)copy_address);
|
||||
|
||||
/* memcpy(copy_address, rom_address, rom_size); */
|
||||
{
|
||||
unsigned char *from = (unsigned char *)image; /* rom_address; */
|
||||
unsigned char *to = (unsigned char *)copy_address;
|
||||
for (j=0; j<image_size /*rom_size*/; j++)
|
||||
{
|
||||
*to++ = *from++;
|
||||
}
|
||||
}
|
||||
|
||||
PRINTF("Copy is done\n");
|
||||
|
||||
/* Unmap the ROM and restore the BAR */
|
||||
pci_write_config_dword(dev, PCI_ROM_ADDRESS, 0);
|
||||
pci_write_config_dword(dev, i, bar_backup);
|
||||
|
||||
/* FIXME: Shouldn't be needed anymore*/
|
||||
/* bat_map(2, 0x80000000, 256*1024*1024);
|
||||
show_bat_mapping(); */
|
||||
|
||||
/*
|
||||
* Since most cards can probably only do 16 bit IO addressing, we
|
||||
* correct their IO base into an appropriate value.
|
||||
* This should do for most.
|
||||
*/
|
||||
for (i = PCI_BASE_ADDRESS_0; i <= PCI_BASE_ADDRESS_5; i += 4)
|
||||
{
|
||||
unsigned long value;
|
||||
pci_read_config_dword(dev, i, &value);
|
||||
if (value & 0x01) /* IO */
|
||||
{
|
||||
did_correct = 1;
|
||||
pci_write_config_dword(dev, i, 0x1001);
|
||||
break;
|
||||
}
|
||||
|
||||
if (value & PCI_BASE_ADDRESS_MEM_PREFETCH)
|
||||
{
|
||||
prefetch_idx = i;
|
||||
prefetch_addr = value & PCI_BASE_ADDRESS_MEM_MASK;
|
||||
prefetch_size = get_bar_size(dev, i);
|
||||
}
|
||||
}
|
||||
|
||||
if (1) /* did_correct) */
|
||||
{
|
||||
extern pci_dev_t pci_find_bridge_for_bus(struct pci_controller *hose, int busnr);
|
||||
int busnr = PCI_BUS(dev);
|
||||
if (busnr)
|
||||
{
|
||||
pci_dev_t bridge;
|
||||
PRINTF("Need to correct bridge device for IO range change\n");
|
||||
bridge = pci_find_bridge_for_bus(NULL, busnr);
|
||||
if (bridge == PCI_ANY_ID)
|
||||
{
|
||||
PRINTF("Didn't find bridge. Hope that's OK\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Set upper I/O base/limit to 0
|
||||
*/
|
||||
pci_write_config_byte(bridge, 0x30, 0x00);
|
||||
pci_write_config_byte(bridge, 0x31, 0x00);
|
||||
pci_write_config_byte(bridge, 0x32, 0x00);
|
||||
pci_write_config_byte(bridge, 0x33, 0x00);
|
||||
if (did_correct)
|
||||
{
|
||||
/*
|
||||
* set lower I/O base to 1000
|
||||
* That is, bits 0:3 are set to 0001 by default.
|
||||
* bits 7:4 contain I/O address bits 15:12
|
||||
* all others are assumed 0.
|
||||
*/
|
||||
pci_write_config_byte(bridge, 0x1C, 0x11);
|
||||
/*
|
||||
* Set lower I/O limit to 1FFF
|
||||
* That is, bits 0:3 are reserved and always 0000
|
||||
* Bits 7:4 contain I/O address bits 15:12
|
||||
* All others are assumed F.
|
||||
*/
|
||||
pci_write_config_byte(bridge, 0x1D, 0x10);
|
||||
pci_write_config_byte(bridge, 0x0D, 0x20);
|
||||
PRINTF("Corrected bridge resource range of bridge at %02x:%02x:%02x\n",
|
||||
PCI_BUS(bridge), PCI_DEV(bridge), PCI_FUNC(bridge));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This card doesn't have I/O, we disable I/O forwarding
|
||||
*/
|
||||
pci_write_config_byte(bridge, 0x1C, 0x11);
|
||||
pci_write_config_byte(bridge, 0x1D, 0x00);
|
||||
pci_write_config_byte(bridge, PCI_INTERRUPT_LINE, 0);
|
||||
pci_write_config_byte(bridge, PCI_INTERRUPT_PIN, 0);
|
||||
pci_write_config_dword(bridge, PCI_COMMAND, PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_IO);
|
||||
PRINTF("Disabled bridge resource range of bridge at %02x:%02x:%02x\n",
|
||||
PCI_BUS(bridge), PCI_DEV(bridge), PCI_FUNC(bridge));
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Correct the prefetchable memory base, which is not set correctly by
|
||||
* the U-Boot autoconfig stuff
|
||||
*/
|
||||
if (prefetch_idx)
|
||||
{
|
||||
/* PRINTF("Setting prefetchable range to %x, %x (%x and %x)\n", */
|
||||
/* prefetch_addr, prefetch_addr+prefetch_size, */
|
||||
/* prefetch_addr>>16, (prefetch_addr+prefetch_size)>>16); */
|
||||
/* pci_write_config_word(bridge, PCI_PREF_MEMORY_BASE, (prefetch_addr>>16)); */
|
||||
/* pci_write_config_word(bridge, PCI_PREF_MEMORY_LIMIT, (prefetch_addr+prefetch_size)>>16); */
|
||||
}
|
||||
|
||||
pci_write_config_word(bridge, PCI_PREF_MEMORY_BASE, 0x1000);
|
||||
pci_write_config_word(bridge, PCI_PREF_MEMORY_LIMIT, 0x0000);
|
||||
|
||||
pci_write_config_byte(bridge, 0xD0, 0x0A);
|
||||
pci_write_config_byte(bridge, 0xD3, 0x04);
|
||||
|
||||
/*
|
||||
* Set the interrupt pin to 0
|
||||
*/
|
||||
#if 0
|
||||
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 0);
|
||||
pci_write_config_byte(dev, PCI_INTERRUPT_PIN, 0);
|
||||
#endif
|
||||
pci_write_config_byte(bridge, PCI_INTERRUPT_LINE, 0);
|
||||
pci_write_config_byte(bridge, PCI_INTERRUPT_PIN, 0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* Finally, enable the card's IO and memory response */
|
||||
pci_write_config_dword(dev, PCI_COMMAND, PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
|
||||
pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 0);
|
||||
pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int find_image(u32 rom_address, u32 rom_size, void **image, u32 *image_size)
|
||||
{
|
||||
int i = 0;
|
||||
unsigned char *rom = (unsigned char *)rom_address;
|
||||
/* if (*rom != 0x55 || *(rom+1) != 0xAA) return 0; /* No bios rom this is, yes. */ */
|
||||
|
||||
for (;;)
|
||||
{
|
||||
unsigned short pci_data_offset = *(rom+0x18) + 256 * *(rom+0x19);
|
||||
unsigned short pci_image_length = (*(rom+pci_data_offset+0x10) + 256 * *(rom+pci_data_offset+0x11)) * 512;
|
||||
unsigned char pci_image_type = *(rom+pci_data_offset+0x14);
|
||||
if (*rom != 0x55 || *(rom+1) != 0xAA)
|
||||
{
|
||||
PRINTF("Invalid header this is\n");
|
||||
return 0;
|
||||
}
|
||||
PRINTF("Image %i: Type %d (%s)\n", i++, pci_image_type,
|
||||
pci_image_type==0 ? "x86" :
|
||||
pci_image_type==1 ? "OpenFirmware" :
|
||||
"Unknown");
|
||||
if (pci_image_type == 0)
|
||||
{
|
||||
*image = rom;
|
||||
*image_size = pci_image_length;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (*(rom+pci_data_offset+0x15) & 0x80)
|
||||
{
|
||||
PRINTF("LAST image encountered, no image found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
rom += pci_image_length;
|
||||
}
|
||||
}
|
||||
|
||||
void show_bat_mapping(void)
|
||||
{
|
||||
u32 dbat0u, dbat0l, ibat0u, ibat0l;
|
||||
u32 dbat1u, dbat1l, ibat1u, ibat1l;
|
||||
u32 dbat2u, dbat2l, ibat2u, ibat2l;
|
||||
u32 dbat3u, dbat3l, ibat3u, ibat3l;
|
||||
u32 msr, hid0, l2cr_reg;
|
||||
|
||||
__asm volatile ("mfdbatu %0,0" : "=r" (dbat0u));
|
||||
__asm volatile ("mfdbatl %0,0" : "=r" (dbat0l));
|
||||
__asm volatile ("mfibatu %0,0" : "=r" (ibat0u));
|
||||
__asm volatile ("mfibatl %0,0" : "=r" (ibat0l));
|
||||
|
||||
__asm volatile ("mfdbatu %0,1" : "=r" (dbat1u));
|
||||
__asm volatile ("mfdbatl %0,1" : "=r" (dbat1l));
|
||||
__asm volatile ("mfibatu %0,1" : "=r" (ibat1u));
|
||||
__asm volatile ("mfibatl %0,1" : "=r" (ibat1l));
|
||||
|
||||
__asm volatile ("mfdbatu %0,2" : "=r" (dbat2u));
|
||||
__asm volatile ("mfdbatl %0,2" : "=r" (dbat2l));
|
||||
__asm volatile ("mfibatu %0,2" : "=r" (ibat2u));
|
||||
__asm volatile ("mfibatl %0,2" : "=r" (ibat2l));
|
||||
|
||||
__asm volatile ("mfdbatu %0,3" : "=r" (dbat3u));
|
||||
__asm volatile ("mfdbatl %0,3" : "=r" (dbat3l));
|
||||
__asm volatile ("mfibatu %0,3" : "=r" (ibat3u));
|
||||
__asm volatile ("mfibatl %0,3" : "=r" (ibat3l));
|
||||
|
||||
__asm volatile ("mfmsr %0" : "=r" (msr));
|
||||
__asm volatile ("mfspr %0,1008": "=r" (hid0));
|
||||
__asm volatile ("mfspr %0,1017": "=r" (l2cr_reg));
|
||||
|
||||
printf("dbat0u: %08x dbat0l: %08x ibat0u: %08x ibat0l: %08x\n",
|
||||
dbat0u, dbat0l, ibat0u, ibat0l);
|
||||
printf("dbat1u: %08x dbat1l: %08x ibat1u: %08x ibat1l: %08x\n",
|
||||
dbat1u, dbat1l, ibat1u, ibat1l);
|
||||
printf("dbat2u: %08x dbat2l: %08x ibat2u: %08x ibat2l: %08x\n",
|
||||
dbat2u, dbat2l, ibat2u, ibat2l);
|
||||
printf("dbat3u: %08x dbat3l: %08x ibat3u: %08x ibat3l: %08x\n",
|
||||
dbat3u, dbat3l, ibat3u, ibat3l);
|
||||
|
||||
printf("\nMSR: %08x HID0: %08x L2CR: %08x \n", msr,hid0, l2cr_reg);
|
||||
}
|
||||
|
||||
|
||||
void remove_init_data(void)
|
||||
{
|
||||
char *s;
|
||||
|
||||
/* Invalidate and disable data cache */
|
||||
invalidate_l1_data_cache();
|
||||
dcache_disable();
|
||||
|
||||
s = getenv("x86_cache");
|
||||
|
||||
if (!s)
|
||||
{
|
||||
icache_enable();
|
||||
dcache_enable();
|
||||
}
|
||||
else if (s)
|
||||
{
|
||||
if (strcmp(s, "dcache")==0)
|
||||
{
|
||||
dcache_enable();
|
||||
}
|
||||
else if (strcmp(s, "icache") == 0)
|
||||
{
|
||||
icache_enable();
|
||||
}
|
||||
else if (strcmp(s, "on")== 0 || strcmp(s, "both") == 0)
|
||||
{
|
||||
dcache_enable();
|
||||
icache_enable();
|
||||
}
|
||||
}
|
||||
|
||||
/* show_bat_mapping();*/
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
#ifndef GLUE_H
|
||||
#define GLUE_H
|
||||
|
||||
typedef unsigned int pci_dev_t;
|
||||
|
||||
int mypci_find_device(int vendor, int product, int index);
|
||||
int mypci_bus(int device);
|
||||
int mypci_devfn(int device);
|
||||
unsigned long get_bar_size(pci_dev_t dev, int offset);
|
||||
|
||||
u8 mypci_read_cfg_byte(int bus, int devfn, int offset);
|
||||
u16 mypci_read_cfg_word(int bus, int devfn, int offset);
|
||||
u32 mypci_read_cfg_long(int bus, int devfn, int offset);
|
||||
|
||||
void mypci_write_cfg_byte(int bus, int devfn, int offset, u8 value);
|
||||
void mypci_write_cfg_word(int bus, int devfn, int offset, u16 value);
|
||||
void mypci_write_cfg_long(int bus, int devfn, int offset, u32 value);
|
||||
|
||||
void _printf(const char *fmt, ...);
|
||||
char *_getenv(char *name);
|
||||
|
||||
void *malloc(size_t size);
|
||||
void memset(void *addr, int value, size_t size);
|
||||
void memcpy(void *to, void *from, size_t numbytes);
|
||||
int strcmp(char *, char *);
|
||||
|
||||
void enable_compatibility_hole(void);
|
||||
void disable_compatibility_hole(void);
|
||||
|
||||
void map_rom(pci_dev_t dev, unsigned long address);
|
||||
void unmap_rom(pci_dev_t dev);
|
||||
int attempt_map_rom(pci_dev_t dev, void *copy_address);
|
||||
|
||||
#define PCI_BASE_ADDRESS_SPACE 0x01 /* 0 = memory, 1 = I/O */
|
||||
#define PCI_BASE_ADDRESS_SPACE_IO 0x01
|
||||
#define PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
|
||||
#define PCI_BASE_ADDRESS_MEM_MASK (~0x0fUL)
|
||||
|
||||
#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
|
||||
#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
|
||||
#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */
|
||||
#define PCI_BASE_ADDRESS_5 0x24 /* 32 bits */
|
||||
#define PCI_BUS(d) (((d) >> 16) & 0xff)
|
||||
#define PCI_DEV(d) (((d) >> 11) & 0x1f)
|
||||
#define PCI_FUNC(d) (((d) >> 8) & 0x7)
|
||||
#define PCI_BDF(b,d,f) ((b) << 16 | (d) << 11 | (f) << 8)
|
||||
|
||||
#define PCI_ANY_ID (~0)
|
||||
#define PCI_ROM_ADDRESS 0x30 /* Bits 31..11 are address, 10..1 reserved */
|
||||
#define PCI_ROM_ADDRESS_ENABLE 0x01
|
||||
|
||||
#define OFF(addr) ((addr) & 0xFFFF)
|
||||
#define SEG(addr) (((addr)>>4) &0xF000)
|
||||
|
||||
#endif
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 3.1.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS16\BC3;%BC3_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS16\BC3;%BC3_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC3_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC3.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_SNAP=
|
||||
PATH %SCITECH_BIN%;%BC3_PATH%\BIN;%DEFPATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC3_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BC3_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BC3_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ 3.1 DOS compilation configuration set up.
|
||||
@@ -0,0 +1,37 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Enable Win32 SDK if desired (sdk on command line)
|
||||
if NOT .%1%==.sdk goto createfiles
|
||||
call win32sdk.bat borland
|
||||
|
||||
:createfiles
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 16 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS16\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS16\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC16.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ 4.5 16 bit DOS compilation configuration set up.
|
||||
@@ -0,0 +1,33 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 32 bit DOS compilation configuration set up (DPMI32).
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\SNAP\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\SNAP\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=1
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 Snap compilation configuration set up.
|
||||
@@ -0,0 +1,46 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit mode with Phar Lap TNT
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS32\BC4;%BC4_PATH%\LIB;%TNT_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS32\BC4;%BC4_PATH%\LIB;%TNT_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;%TNT_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=1
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%TNT_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM If you set the following to a 1, a TNT DosStyle app will be created.
|
||||
REM Otherwise a TNT NtStyle app will be created. NtStyle apps will *only*
|
||||
REM run under real DOS when using our libraries, since we require access
|
||||
REM to functions that the Win32 API does not support (such as direct access
|
||||
REM to video memory, calling Int 10h BIOS functions etc). DosStyle apps
|
||||
REM will however run fine in both DOS and a Win95 DOS box (NT DOS boxes don't
|
||||
REM work too well).
|
||||
REM
|
||||
REM If you are using the RealTime DOS extender, your apps *must* be NtStyle,
|
||||
REM and hence will never be able to run under Win95 or WinNT, only DOS.
|
||||
|
||||
SET DOSSTYLE=
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 32 bit DOS compilation configuration set up (TNT).
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit Windows VxD mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\VXD\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\VXD\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=1
|
||||
SET USE_TNT=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 32-bit VxD compilation configuration set up.
|
||||
@@ -0,0 +1,32 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 16 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN16\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN16\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC16.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=1
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ 4.5 16 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,37 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 4.5 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BC4;%BC4_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC4_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_BC5=
|
||||
SET WIN32_GUI=1
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC4
|
||||
PATH %SCITECH_BIN%;%BC4_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM: Enable Win32 SDK if desired (sdk on command line)
|
||||
if NOT .%1%==.sdk goto createfiles
|
||||
call win32sdk.bat borland
|
||||
|
||||
:createfiles
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC4_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC4_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 4.5 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,40 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET C_INCLUDE=%BC5_PATH%\INCLUDE
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%C_INCLUDE%
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Enable Win32 SDK if desired (sdk on command line)
|
||||
if NOT .%1%==.sdk goto createfiles
|
||||
call win32sdk.bat borland
|
||||
|
||||
:createfiles
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 16 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS16\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS16\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC16.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ 5.0 16 bit DOS compilation configuration set up.
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit DOS compilation configuration set up (DPMI32).
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\SMX32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\SMX32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=1
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit SMX compilation configuration set up (SMX32).
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\SNAP\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\SNAP\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=1
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 Snap compilation configuration set up.
|
||||
@@ -0,0 +1,48 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit mode with Phar Lap TNT
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS32\BC5;%BC5_PATH%\LIB;%TNT_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS32\BC5;%BC5_PATH%\LIB;%TNT_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;%TNT_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=1
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%TNT_PATH%\BIN;%DEFPATH%%BC_CD_PATH%
|
||||
|
||||
REM If you set the following to a 1, a TNT DosStyle app will be created.
|
||||
REM Otherwise a TNT NtStyle app will be created. NtStyle apps will *only*
|
||||
REM run under real DOS when using our libraries, since we require access
|
||||
REM to functions that the Win32 API does not support (such as direct access
|
||||
REM to video memory, calling Int 10h BIOS functions etc). DosStyle apps
|
||||
REM will however run fine in both DOS and a Win95 DOS box (NT DOS boxes don't
|
||||
REM work too well).
|
||||
REM
|
||||
REM If you are using the RealTime DOS extender, your apps *must* be NtStyle,
|
||||
REM and hence will never be able to run under Win95 or WinNT, only DOS.
|
||||
|
||||
SET DOSSTYLE=
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit DOS compilation configuration set up (TNT).
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\VXD\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\VXD\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=1
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit Windows (VxD) compilation configuration set up.
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 16 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN16\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN16\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC16.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=1
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_BC5=1
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ 5.0 16 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,40 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET C_INCLUDE=%BC5_PATH%\INCLUDE
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%C_INCLUDE%
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=1
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Enable Win32 SDK if desired (sdk on command line)
|
||||
if NOT .%1%==.sdk goto createfiles
|
||||
call win32sdk.bat borland
|
||||
|
||||
:createfiles
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BC5;%BC5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BC5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=1
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BC5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BC5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BC5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ 5.0 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,40 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ Builder 5.0 in 32 bit Windows mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\WIN32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\WIN32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET C_INCLUDE=%BCB5_PATH%\INCLUDE
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%C_INCLUDE%
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=1
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BCB5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Enable Win32 SDK if desired (sdk on command line)
|
||||
if NOT .%1%==.sdk goto createfiles
|
||||
call win32sdk.bat borland
|
||||
|
||||
:createfiles
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BCB5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ Builder 5.0 32 bit Windows compilation configuration set up.
|
||||
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ Builder 5.0 in 16 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS16\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS16\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BCB5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC16.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BCB5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BCB5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% >> %BCB5_PATH%\BIN\turboc.cfg
|
||||
echo -L%LIB% > %BCB5_PATH%\BIN\tlink.cfg
|
||||
|
||||
echo Borland C++ Builder 5.0 16 bit DOS compilation configuration set up.
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ Builder 5.0 in 32 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\DOS32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\DOS32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BCB5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BCB5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BCB5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ Builder 5.0 32 bit DOS compilation configuration set up (DPMI32).
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
REM Setup for compiling with Borland C++ Builder 5.0 in 32 bit mode.
|
||||
|
||||
if .%CHECKED%==.1 goto checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\RELEASE\SMX32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Release build enabled.
|
||||
goto setvars
|
||||
|
||||
:checked_build
|
||||
SET LIB=%SCITECH_LIB%\LIB\DEBUG\SMX32\BCB5;%BCB5_PATH%\LIB;.
|
||||
echo Checked debug build enabled.
|
||||
goto setvars
|
||||
|
||||
:setvars
|
||||
SET INCLUDE=INCLUDE;%SCITECH%\INCLUDE;%PRIVATE%\INCLUDE;%BCB5_PATH%\INCLUDE;
|
||||
SET MAKESTARTUP=%SCITECH%\MAKEDEFS\BC32.MK
|
||||
SET USE_DPMI16=
|
||||
SET USE_WIN16=
|
||||
SET USE_WIN32=
|
||||
SET USE_VXD=
|
||||
SET USE_TNT=
|
||||
SET USE_SMX32=1
|
||||
SET USE_SMX16=
|
||||
SET USE_BC5=1
|
||||
SET WIN32_GUI=
|
||||
SET USE_SNAP=
|
||||
SET BC_LIBBASE=BC5
|
||||
PATH %SCITECH_BIN%;%BCB5_PATH%\BIN;%DEFPATH%%BC5_CD_PATH%
|
||||
|
||||
REM: Create Borland compile/link configuration scripts
|
||||
echo -I%INCLUDE% > %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% >> %BCB5_PATH%\BIN\bcc32.cfg
|
||||
echo -L%LIB% > %BCB5_PATH%\BIN\tlink32.cfg
|
||||
|
||||
echo Borland C++ Builder 5.0 32 bit SMX compilation configuration set up (SMX32).
|
||||
Loaded 100 of 5896 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user