Commit 96d3bd55 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.2.8pre1

parent a228ad14
......@@ -38,7 +38,7 @@ digiboard.txt
digiepca.txt
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
exception.txt
- how linux v2.1 handles exceptions without verify_area etc.
- how Linux v2.2 handles exceptions without verify_area etc.
filesystems/
- directory with info on the various filesystems that Linux supports.
ftape.txt
......@@ -52,11 +52,11 @@ initrd.txt
ioctl-number.txt
- how to implement and register device/driver ioctl calls.
isdn/
- directory with info on the linux ISDN support, and supported cards.
- directory with info on the Linux ISDN support, and supported cards.
java.txt
- info on the in-kernel binary support for Java(tm)
joystick.txt
- info on using joystick devices (and driver) with linux.
- info on using joystick devices (and driver) with Linux.
kbuild/
- directory with info about the kernel build process
kmod.txt
......@@ -72,7 +72,7 @@ m68k/
magic-number.txt
- list of magic numbers used to mark/protect kernel data structures.
mandatory.txt
- info on the linux implementation of Sys V mandatory file locking.
- info on the Linux implementation of Sys V mandatory file locking.
mca.txt
- info on supporting Micro Channel Architecture (e.g. PS/2) systems.
md.txt
......@@ -100,7 +100,7 @@ pci.txt
pcwd-watchdog.txt
- info and sample code for using with the PC Watchdog reset card.
powerpc/
- directory with info on using linux with the PowerPC.
- directory with info on using Linux with the PowerPC.
ramdisk.txt
- short guide on how to set up and use the RAM disk.
riscom8.txt
......@@ -110,7 +110,7 @@ rtc.txt
scsi.txt
- short blurb on using SCSI support as a module.
serial-console.txt
- how to set up linux with a serial line console as the default.
- how to set up Linux with a serial line console as the default.
smart-config.txt
- description of the Smart Config makefile feature.
smp.tex
......
......@@ -70,8 +70,8 @@ Compilation of kernel
a 'make zImage' instead of 'make all'.
Bug reports etc
---------------
Bug reports etc.
----------------
Please send patches, bug reports and code for the ARM Linux project
to linux@arm.uk.linux.org. Patches will not be included into future
......@@ -116,7 +116,7 @@ Kernel initialisation abort codes
at the top of the screen. The colours have the following significance
when run in a 16 colour mode with the default palette:
Stripes of White,Red,Yellow,Green:
Stripes of white, red, yellow, and green:
Kernel does not support the processor architecture detected.
......@@ -142,11 +142,11 @@ ST506 hard drives
HDC base to the source.
As of 31/3/96 it works with two drives (you should get the ADFS
*configure harddrive set to 2). I've got an internal 20MB and a great
big external 5.25" FH 64MB drive (who could ever want more :-) ).
*configure hard drive set to 2). I've got an internal 20 MB and a great
big external 5.25" FH 64 MB drive (who could ever want more :-) ).
I've just got 240K/s off it (a dd with bs=128k); thats about half of what
RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting
I've just got 240 K/s off it (a dd with bs=128k); that's about half of what
RiscOS gets, but it's a heck of a lot better than the 50 K/s I was getting
last week :-)
Known bug: Drive data errors can cause a hang; including cases where
......
......@@ -105,7 +105,7 @@ general procedure for configuring Unix98 pty support is:
none /dev/pts devpts gid=5,mode=620 0 0
(Note: gid=5 is applicable for RedHat systems for which group "tty" has
(Note: gid=5 is applicable for Red Hat systems for which group "tty" has
gid 5. Adjust according to your distribution. Use mode=600 if you want
"mesg n" to be default.)
- Mount /dev/pts
......@@ -433,7 +433,7 @@ configuration registers on your PCI devices.
Xosview
=======
/proc interface changes require a recent xosview.
Changes to the /proc interface require a recent xosview.
RealPlayer
==========
......
This diff is collapsed.
NetWinder specific documentation
================================
The NetWinder is a small low-power computer, primarily designed
to run Linux. It is based around the StrongARM RISC processor,
DC21285 PCI bridge, with PC-type hardware glued around it.
Port usage
==========
Min - Max Description
---------------------------
0x0000 - 0x000f DMA1
0x0020 - 0x0021 PIC1
0x0060 - 0x006f Keyboard
0x0070 - 0x007f RTC
0x0080 - 0x0087 DMA1
0x0088 - 0x008f DMA2
0x00a0 - 0x00a3 PIC2
0x00c0 - 0x00df DMA2
0x0180 - 0x0187 IRDA
0x01f0 - 0x01f6 ide0
0x0201 Game port
0x0203 RWA010 configuration read
0x0220 - ? SoundBlaster
0x0250 - ? WaveArtist
0x0279 RWA010 configuration index
0x02f8 - 0x02ff Serial ttyS1
0x0300 - 0x031f Ether10
0x0338 GPIO1
0x033a GPIO2
0x0370 - 0x0371 W83977F configuration registers
0x0388 - ? AdLib
0x03c0 - 0x03df VGA
0x03f6 ide0
0x03f8 - 0x03ff Serial ttyS0
0x0400 - 0x0408 DC21143
0x0480 - 0x0487 DMA1
0x0488 - 0x048f DMA2
0x0a79 RWA010 configuration write
0xe800 - 0xe80f ide0/ide1 BM DMA
Interrupt usage
===============
IRQ type Description
---------------------------
0 ISA 100Hz timer
1 ISA Keyboard
2 ISA cascade
3 ISA Serial ttyS1
4 ISA Serial ttyS0
5 ISA PS/2 mouse
6 ISA IRDA
7 ISA Printer
8 ISA RTC alarm
9 ISA
10 ISA GP10 (Orange reset button)
11 ISA
12 ISA WaveArtist
13 ISA
14 ISA hda1
15 ISA
DMA usage
=========
DMA type Description
---------------------------
0 ISA IRDA
1 ISA
2 ISA cascade
3 ISA WaveArtist
4 ISA
5 ISA
6 ISA
7 ISA WaveArtist
ARM Linux 2.2.3
===============
* NOTE * The ARM support in the mainstream Linux kernel sources
is not up to date. Please check ftp.arm.uk.linux.org:/pub/armlinux
for latest updates.
Compilation of kernel
---------------------
In order to compile ARM Linux, you will need a compiler capable of
generating ARM ELF code with GNU extensions. GCC-2.7.2.2 ELF, GCC 2.8.1
and EGCS are good compilers. Note that GCC-2.7.2.2 ELF is rare, and
you probably don't have it.
To build ARM Linux natively, you shouldn't have to alter the ARCH = line in
the top level Makefile. However, if you don't have the ARM Linux ELF tools
installed as default, then you should change the CROSS_COMPILE line as
detailed below.
If you wish to cross-compile, then alter the following lines in the top
level make file:
ARCH = <whatever>
with
ARCH = arm
and
CROSS_COMPILE=
to
CROSS_COMPILE=<your-path-to-your-compiler-without-gcc>
eg.
CROSS_COMPILE=arm-linux-
Do a 'make config', followed by 'make dep', and finally 'make Image' to
build the kernel (arch/arm/boot/Image). A compressed image can be built
by doing a 'make zImage' instead of 'make Image'.
Bug reports etc
---------------
Please send patches, bug reports and code for the ARM Linux project
to linux@arm.linux.org.uk Patches will not be included into future
kernels unless they come to me (or the relevant person concerned).
When sending bug reports, please ensure that they contain all relevant
information, eg. the kernel messages that were printed before/during
the problem, what you were doing, etc.
For patches, please include some explanation as to what the patch does
and why (if relevant).
Modules
-------
Although modularisation is supported (and required for the FP emulator),
each module on an arm2/arm250/arm3 machine when is loaded will take
memory up to the next 32k boundary due to the size of the pages. Hence is
modularisation on these machines really worth it?
However, arm6 and up machines allow modules to take multiples of 4k, and
as such Acorn RiscPCs and other architectures using these processors can
make good use of modularisation.
ADFS Image files
----------------
You can access image files on your ADFS partitions by mounting the ADFS
partition, and then using the loopback device driver. You must have
losetup installed.
Please note that the PCEmulator DOS partitions have a partition table at
the start, and as such, you will have to give '-o offset' to losetup.
Request to developers
---------------------
When writing device drivers which include a separate assembler file, please
include it in with the C file, and not the arch/arm/lib directory. This
allows the driver to be compiled as a loadable module without requiring
half the code to be compiled into the kernel image.
In general, try to avoid using assembler unless it is really necessary. It
makes drivers far less easy to port to other hardware.
ST506 hard drives
-----------------
The ST506 hard drive controllers seem to be working fine (if a little
slowly). At the moment they will only work off the controllers on an
A4x0's motherboard, but for it to work off a Podule just requires
someone with a podule to add the addresses for the IRQ mask and the
HDC base to the source.
As of 31/3/96 it works with two drives (you should get the ADFS
*configure harddrive set to 2). I've got an internal 20MB and a great
big external 5.25" FH 64MB drive (who could ever want more :-) ).
I've just got 240K/s off it (a dd with bs=128k); thats about half of what
RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting
last week :-)
Known bug: Drive data errors can cause a hang; including cases where
the controller has fixed the error using ECC. (Possibly ONLY
in that case...hmm).
1772 Floppy
-----------
This also seems to work OK, but hasn't been stressed much lately. It
hasn't got any code for disc change detection in there at the moment which
could be a bit of a problem! Suggestions on the correct way to do this
are welcome.
Kernel entry (head-armv.S)
--------------------------
The initial entry into the kernel made via head-armv.S uses architecture
independent code. The architecture is selected by the value of 'r1' on
entry, which must be kept unique. You can register a new architecture
by mailing the following details to rmk@arm.uk.linux.org. Please give
the mail a subject of 'Register new architecture':
Name: <name of your architecture>
ARCHDIR: <name of include/asm-arm/arch-* directory>
Description:
<description of your architecture>
Please follow this format - it is an automated system. You should
receive a reply the next day.
---
Russell King (27/03/1999)
There seems to be a problem with exp(double) and our emulator. I haven't
been able to track it down yet. This does not occur with the emulator
supplied by Russell King.
I also found one oddity in the emulator. I don't think it is serious but
will point it out. The ARM calling conventions require floating point
registers f4-f7 to be preserved over a function call. The compiler quite
often uses an stfe instruction to save f4 on the stack upon entry to a
function, and an ldfe instruction to restore it before returning.
I was looking at some code, that calculated a double result, stored it in f4
then made a function call. Upon return from the function call the number in
f4 had been converted to an extended value in the emulator.
This is a side effect of the stfe instruction. The double in f4 had to be
converted to extended, then stored. If an lfm/sfm combination had been used,
then no conversion would occur. This has performance considerations. The
result from the function call and f4 were used in a multiplication. If the
emulator sees a multiply of a double and extended, it promotes the double to
extended, then does the multiply in extended precision.
This code will cause this problem:
double x, y, z;
z = log(x)/log(y);
The result of log(x) (a double) will be calculated, returned in f0, then
moved to f4 to preserve it over the log(y) call. The division will be done
in extended precision, due to the stfe instruction used to save f4 in log(y).
This directory contains the version 0.92 test release of the NetWinder
Floating Point Emulator.
The majority of the code was written by me, Scott Bambrough It is
written in C, with a small number of routines in inline assembler
where required. It was written quickly, with a goal of implementing a
working version of all the floating point instructions the compiler
emits as the first target. I have attempted to be as optimal as
possible, but there remains much room for improvement.
I have attempted to make the emulator as portable as possible. One of
the problems is with leading underscores on kernel symbols. Elf
kernels have no leading underscores, a.out compiled kernels do. I
have attempted to use the C_SYMBOL_NAME macro wherever this may be
important.
Another choice I made was in the file structure. I have attempted to
contain all operating system specfic code in one module (fpmodule.*).
All the other files contain emulator specific code. This should allow
others to port the emulator to NetBSD for instance relatively easily.
The floating point operations are based on SoftFloat Release 2, by
John Hauser. SoftFloat is a software implementation of floating-point
that conforms to the IEC/IEEE Standard for Binary Floating-point
Arithmetic. As many as four formats are supported: single precision,
double precision, extended double precision, and quadruple precision.
All operations required by the standard are implemented, except for
conversions to and from decimal. We use only the single precision,
double precision and extended double precision formats. The port of
SoftFloat to the ARM was done by Phil Blundell, based on an earlier
port of SoftFloat version 1 by Neil Carson for NetBSD/arm32.
The file README.FPE contains a description of what has been implemented
so far in the emulator. The file TODO contains a information on what
remains to be done, and other ideas for the emulator.
Bug reports, comments, suggestions should be directed to me at
<scottb@corelcomputer.com>. General reports of "this program doesn't
work correctly when your emulator is installed" are useful for
determining that bugs still exist; but are virtually useless when
attempting to isolate the problem. Please report them, but don't
expect quick action. Bugs still exist. The problem remains in isolating
which instruction contains the bug. Small programs illustrating a specific
problem are a godsend.
Legal Notices
-------------
The NetWinder Floating Point Emulator is free software. Everything Corel
has written is provided under the GNU GPL. See the file COPYING for copying
conditions. Excluded from the above is the SoftFloat code. John Hauser's
legal notice for SoftFloat is included below.
-------------------------------------------------------------------------------
SoftFloat Legal Notice
SoftFloat was written by John R. Hauser. This work was made possible in
part by the International Computer Science Institute, located at Suite 600,
1947 Center Street, Berkeley, California 94704. Funding was partially
provided by the National Science Foundation under grant MIP-9311980. The
original version of this code was written as part of a project to build
a fixed-point vector processor in collaboration with the University of
California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-------------------------------------------------------------------------------
The following describes the current state of the NetWinder's floating point
emulator.
In the following nomenclature is used to describe the floating point
instructions. It follows the conventions in the ARM manual.
<S|D|E> = <single|double|extended>, no default
{P|M|Z} = {round to +infinity,round to -infinity,round to zero},
default = round to nearest
Note: items enclosed in {} are optional.
Floating Point Coprocessor Data Transfer Instructions (CPDT)
------------------------------------------------------------
LDF/STF - load and store floating
<LDF|STF>{cond}<S|D|E> Fd, Rn
<LDF|STF>{cond}<S|D|E> Fd, [Rn, #<expression>]{!}
<LDF|STF>{cond}<S|D|E> Fd, [Rn], #<expression>
These instructions are fully implemented.
LFM/SFM - load and store multiple floating
Form 1 syntax:
<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn]
<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn, #<expression>]{!}
<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn], #<expression>
Form 2 syntax:
<LFM|SFM>{cond}<FD,EA> Fd, <count>, [Rn]{!}
These instructions are fully implemented. They store/load three words
for each floating point register into the memory location given in the
instruction. The format in memory is unlikely to be compatible with
other implementations, in particular the actual hardware. Specific
mention of this is made in the ARM manuals.
Floating Point Coprocessor Register Transfer Instructions (CPRT)
----------------------------------------------------------------
Conversions, read/write status/control register instructions
FLT{cond}<S,D,E>{P,M,Z} Fn, Rd Convert integer to floating point
FIX{cond}{P,M,Z} Rd, Fn Convert floating point to integer
WFS{cond} Rd Write floating point status register
RFS{cond} Rd Read floating point status register
WFC{cond} Rd Write floating point control register
RFC{cond} Rd Read floating point control register
FLT/FIX are fully implemented.
RFS/WFS are fully implemented.
RFC/WFC are fully implemented. RFC/WFC are supervisor only instructions, and
presently check the CPU mode, and do an invalid instruction trap if not called
from supervisor mode.
Compare instructions
CMF{cond} Fn, Fm Compare floating
CMFE{cond} Fn, Fm Compare floating with exception
CNF{cond} Fn, Fm Compare negated floating
CNFE{cond} Fn, Fm Compare negated floating with exception
These are fully implemented.
Floating Point Coprocessor Data Instructions (CPDT)
---------------------------------------------------
Dyadic operations:
ADF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - add
SUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - subtract
RSF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse subtract
MUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - multiply
DVF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - divide
RDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse divide
These are fully implemented.
FML{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast multiply
FDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast divide
FRD{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast reverse divide
These are fully implemented as well. They use the same algorithm as the
non-fast versions. Hence, in this implementation their performance is
equivalent to the MUF/DVF/RDV instructions. This is acceptable according
to the ARM manual. The manual notes these are defined only for single
operands, on the actual FPA11 hardware they do not work for double or
extended precision operands. The emulator currently does not check
the requested permissions conditions, and performs the requested operation.
RMF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - IEEE remainder
This is fully implemented.
Monadic operations:
MVF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move
MNF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move negated
These are fully implemented.
ABS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - absolute value
SQT{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - square root
RND{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - round
These are fully implemented.
URD{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - unnormalized round
NRM{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - normalize
These are implemented. URD is implemented using the same code as the RND
instruction. Since URD cannot return a unnormalized number, NRM becomes
a NOP.
Library calls:
POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power
RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power
POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2)
LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10
LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e
EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent
SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine
COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine
TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent
ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine
ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine
ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent
These are not implemented. They are not currently issued by the compiler,
and are handled by routines in libc. These are not implemented by the FPA11
hardware, but are handled by the floating point support code. They should
be implemented in future versions.
Signalling:
Signals are implemented. However current ELF kernels produced by Corel
Computer have a bug in them that prevents the module from generating a
SIGFPE. This is caused by a failure to alias fp_current to the kernel
variable current_set[0] correctly.
The kernel provided with this distribution (vmlinux-nwfpe-0.93) contains
a fix for this problem and also incorporates the current version of the
emulator directly. It is possible to run with no floating point module
loaded with this kernel. It is provided as a demonstration of the
technology and for those who want to do floating point work that depends
on signals. It is not strictly necessary to use the module.
A module (either the one provided by Russell King, or the one in this
distribution) can be loaded to replace the functionality of the emulator
built into the kernel.
TODO LIST
---------
POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power
RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power
POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2)
LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10
LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e
EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent
SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine
COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine
TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent
ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine
ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine
ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent
These are not implemented. They are not currently issued by the compiler,
and are handled by routines in libc. These are not implemented by the FPA11
hardware, but are handled by the floating point support code. They should
be implemented in future versions.
There are a couple of ways to approach the implementation of these. One
method would be to use accurate table methods for these routines. I have
a couple of papers by S. Gal from IBM's research labs in Haifa, Israel that
seem to promise extreme accuracy (in the order of 99.8%) and reasonable speed.
These methods are used in GLIBC for some of the transcendental functions.
Another approach, which I know little about is CORDIC. This stands for
Coordinate Rotation Digital Computer, and is a method of computing
transcendental functions using mostly shifts and adds and a few
multiplications and divisions. The ARM excels at shifts and adds,
so such a method could be promising, but requires more research to
determine if it is feasible.
Rounding Methods
The IEEE standard defines 4 rounding modes. Round to nearest is the
default, but rounding to + or - infinity or round to zero are also allowed.
Many architectures allow the rounding mode to be specified by modifying bits
in a control register. Not so with the ARM FPA11 architecture. To change
the rounding mode one must specify it with each instruction.
This has made porting some benchmarks difficult. It is possible to
introduce such a capability into the emulator. The FPCR contains
bits describing the rounding mode. The emulator could be altered to
examine a flag, which if set forced it to ignore the rounding mode in
the instruction, and use the mode specified in the bits in the FPCR.
This would require a method of getting/setting the flag, and the bits
in the FPCR. This requires a kernel call in ArmLinux, as WFC/RFC are
supervisor only instructions. If anyone has any ideas or comments I
would like to hear them.
[NOTE: pulled out from some docs on ARM floating point, specifically
for the Acorn FPE, but not limited to it:
The floating point control register (FPCR) may only be present in some
implementations: it is there to control the hardware in an implementation-
specific manner, for example to disable the floating point system. The user
mode of the ARM is not permitted to use this register (since the right is
reserved to alter it between implementations) and the WFC and RFC
instructions will trap if tried in user mode.
Hence, the answer is yes, you could do this, but then you will run a high
risk of becoming isolated if and when hardware FP emulation comes out
-- Russell].
......@@ -111,7 +111,7 @@ alias char-major-23 pcxx
Boot-time configuration when linked into the kernel
---------------------------------------------------
Per Board to be configured, pass a digi= commandline parameter to the
Per board to be configured, pass a digi= command-line parameter to the
kernel using lilo or loadlin. It consists of a string of comma separated
identifiers or integers. The 6 values in order are:
......@@ -142,7 +142,7 @@ there is an alternate form, in which you must use decimal values only:
append="digi=1,0,0,16,512,851968"
If you don't give a digi= commandline, the compiled-in defaults of
If you don't give a digi= command line, the compiled-in defaults of
board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used.
If you have the resources (io&mem) free for use, configure your board to
......@@ -153,9 +153,9 @@ ports.
Sources of Information
----------------------
Webpage: http://private.fuller.edu/clameter/digi.html
Web page: http://private.fuller.edu/clameter/digi.html
Mailing List: digiboard@list.fuller.edu
Mailing list: digiboard@list.fuller.edu
(Write e-mail to that address to subscribe. Common ListServ commands work.
Archive of messages available)
......
......@@ -11,7 +11,7 @@ Currently the driver only autoprobes for supported PCI boards.
The Linux MAKEDEV command does not support generating the Digiboard
Devices. Users executing digiConfig to setup EISA and PC series cards
will have their device nodes automaticly constructed (cud?? for ~CLOCAL,
will have their device nodes automatically constructed (cud?? for ~CLOCAL,
and ttyD?? for CLOCAL). Users wishing to boot their board from the LILO
prompt, or those users booting PCI cards may use buildDIGI to construct
the necessary nodes.
......@@ -19,7 +19,7 @@ the necessary nodes.
Notes:
------
This driver may be configured via LILO. For users who have already configured
their driver using digiConfig, configuring from lilo will override previous
their driver using digiConfig, configuring from LILO will override previous
settings. Multiple boards may be configured by issuing multiple LILO command
lines. For examples see the bottom of this document.
......
......@@ -95,11 +95,11 @@ SVGALib
=======
Driver contains SVGALib compatibility code. It is turned on by choosing textual
mode for console. You can do it at boottime by using videomode
mode for console. You can do it at boot time by using videomode
2,3,7,0x108-0x10C or 0x1C0. At runtime, `fbset -depth 0' does this work.
Unfortunately, after SVGALib application exits, screen contents is corrupted.
Switching to another console and back fixes it. I hope that it is SVGALib and
not mine problem, but I'm not sure.
Switching to another console and back fixes it. I hope that it is SVGALib's
problem and not mine, but I'm not sure.
Configuration
......@@ -113,7 +113,7 @@ Accepted options:
mem:X - size of memory (X can be in megabytes, kilobytes or bytes)
You can only decrease value determined by driver because of
it always probe for memory. Default is to use whole detected
memory usable for on-screen display (i.e. max. 8MB).
memory usable for on-screen display (i.e. max. 8 MB).
disabled - do not load driver; you can use also `off', but `disabled'
is here too.
enabled - load driver, if you have `video=matrox:disabled' in LILO
......@@ -159,7 +159,7 @@ sdram - tells to driver that you have G200 with SDRAM memory.
inv24 - change timings parameters for 24bpp modes on Millenium and
Millenium II. Specify this if you see strange color shadows around
characters.
noinv24 - use standard timmings. It is default.
noinv24 - use standard timings. It is the default.
inverse - invert colors on screen (for LCD displays)
noinverse - show true colors on screen. It is default.
dev:X - bind driver to device X. Driver numbers device from 0 up to N,
......@@ -252,25 +252,25 @@ Currently there are following known bugs:
access to /dev/fb* - everyone with access to this device can destroy
your monitor, believe me...).
+ 24bpp does not support correctly XF-FBDev on big-endian architectures.
+ interlaced text mode is not supported; it looks like hardware limitiation,
+ interlaced text mode is not supported; it looks like hardware limitation,
but I'm not sure.
+ G200 SGRAM/SDRAM is not autodetected.
+ maybe more...
And following misfeatures:
+ SVGALib does not restore screen on exit.
+ pixclock for text modes is limited by hardware to
83MHz on G200
66MHz on Millenium I
60MHz on Millenium II
Because of I have not access to other devices, I do not know specific
83 MHz on G200
66 MHz on Millennium I
60 MHz on Millennium II
Because I have no access to other devices, I do not know specific
frequencies for them. So driver does not check this and allows you to
set frequency higher that this. It cause sparks, black holes and other
pretty effects on screen. Device was not destroyed during tests :-)
+ my Millenium G200 oscillator has frequency range from 35MHz to 380MHz
(and it works with 8bpp on about 320MHz dotclocks (and changed mclk)).
But Matrox says on product sheet that VCO limit is 50-250MHz, so I believe
them (maybe that chip overheates, but it has very big cooler (G100 has
not one), so it should work).
set frequency higher that this. It causes sparks, black holes and other
pretty effects on screen. Device was not destroyed during tests. :-)
+ my Millennium G200 oscillator has frequency range from 35 MHz to 380 MHz
(and it works with 8bpp on about 320 MHz dotclocks (and changed mclk)).
But Matrox says on product sheet that VCO limit is 50-250 MHz, so I believe
them (maybe that chip overheats, but it has a very big cooler (G100 has
none), so it should work).
+ special mixed video/graphics videomodes of Mystique and Gx00 - 2G8V16 and
G16V16 are not supported
+ color keying is not supported
......@@ -281,14 +281,14 @@ And following misfeatures:
specify vslen=4000 and so on).
+ maybe more...
And following features:
+ 4bpp is available only on Millenium I and Millenium II. It is hardware
limitiation.
+ 4bpp is available only on Millennium I and Millennium II. It is hardware
limitation.
+ current fbset is not able to set 15bpp videomode: you must specify
depth==16 and green.length==5. fbset does not allow you to set
green.length.
+ text mode uses 6 bit VGA palette instead of 8 bit (one of 262144 colors
instead of one of 16M colors). It is due to hardware limitation of
MilleniumI/II and SVGALib compatibility.
Millennium I/II and SVGALib compatibility.
Benchmarks
......@@ -296,14 +296,14 @@ Benchmarks
It is time to redraw whole screen 1000 times in 1024x768, 60Hz. It is
time for draw 6144000 characters on screen through /dev/vcsa
(for 32bpp it is about 3GB of data (exactly 3000 MB); for 8x16 font in
16 seconds, i.e. 187MBps).
16 seconds, i.e. 187 MBps).
Times were obtained from one older version of driver, now they are about 3%
faster, it is kernel-space only time on P-II/350MHz, Millenium I in 33MHz
faster, it is kernel-space only time on P-II/350 MHz, Millennium I in 33 MHz
PCI slot, G200 in AGP 2x slot. I did not test vgacon.
NOACCEL
8x16 12x22
MilleniumI G200 MilleniumI G200
Millennium I G200 Millennium I G200
8bpp 16.42 9.54 12.33 9.13
16bpp 21.00 15.70 19.11 15.02
24bpp 36.66 36.66 35.00 35.00
......@@ -311,7 +311,7 @@ NOACCEL
ACCEL, nofastfont
8x16 12x22 6x11
MilleniumI G200 MilleniumI G200 MilleniumI G200
Millennium I G200 Millennium I G200 Millennium I G200
8bpp 7.79 7.24 13.55 7.78 30.00 21.01
16bpp 9.13 7.78 16.16 7.78 30.00 21.01
24bpp 14.17 10.72 18.69 10.24 34.99 21.01
......@@ -319,7 +319,7 @@ ACCEL, nofastfont
ACCEL, fastfont
8x16 12x22 6x11
MilleniumI G200 MilleniumI G200 MilleniumI G200
Millennium I G200 Millennium I G200 Millennium I G200
8bpp 8.41 6.01 6.54 4.37 16.00 10.51
16bpp 9.54 9.12 8.76 6.17 17.52 14.01
24bpp 15.00 12.36 11.67 10.00 22.01 18.32
......@@ -327,10 +327,10 @@ ACCEL, fastfont
TEXT
8x16
MilleniumI G200
Millennium I G200
TEXT 3.29 1.50
* Yes, it is slower than Millenium I.
* Yes, it is slower than Millennium I.
--
Petr Vandrovec <vandrove@vc.cvut.cz>
......@@ -10,7 +10,7 @@ of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
This means we decide at boot time whenever we want to run in text or
graphics mode. Switching mode later on (in protected mode) is
impossible; BIOS calls work in real mode only. VESA BIOS Extentions
impossible; BIOS calls work in real mode only. VESA BIOS Extensions
Version 2.0 are required, because we need a linear frame buffer.
Advantages:
......@@ -66,10 +66,10 @@ lilo.conf file and rerun LILO. Then you can type in the descired
mode at the "vga=ask" prompt. For example if you like to use
1024x768x256 colors you have to say "305" at this prompt.
If this does not work, this might be becauce your BIOS does not support
linear framebuffers or becauce it does not support this mode at all.
If this does not work, this might be because your BIOS does not support
linear framebuffers or because it does not support this mode at all.
Even if your board does, it might be the BIOS which does not. VESA BIOS
Extentions v2.0 are required, 1.2 is NOT sufficient. You will get a
Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
"bad mode number" message if something goes wrong.
1. Note: LILO cannot handle hex, for booting directly with
......@@ -99,8 +99,8 @@ have these options:
available) and boot linux with loadlin.
* use a native driver (matroxfb/atyfb) instead if vesafb. If none
is available, write a new one!
* VBE 3.0 might work too. I havn't neither a gfx board with VBE 3.0
support nor the specs, so I havn't checked this yet. But maybe...
* VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
support nor the specs, so I have not checked this yet.
Configuration
......@@ -108,7 +108,7 @@ Configuration
The VESA BIOS provides protected mode interface for changing
some parameters. vesafb can use it for palette changes and
to pan the display. It is turned off by default becauce it
to pan the display. It is turned off by default because it
seems not to work with some BIOS versions, but there are options
to turn it on.
......@@ -124,7 +124,7 @@ ypan enable display panning using the VESA protected mode
interface. The visible screen is just a window of the
video memory, console scrolling is done by changing the
start of the window.
pro: * scrolling (fullscreen) is fast, becauce there is
pro: * scrolling (fullscreen) is fast, because there is
no need to copy around data.
* You'll get scrollback (the Shift-PgUp thing),
the video memory can be used as scrollback buffer
......
00-INDEX
- this file (info on some of the filesystems supported by linux).
adfs.txt
- info and mount options for the Acorn Advanced Disc Filing System.
affs.txt
- info and mount options for the Amiga Fast File System.
coda.txt
......
Mount options for ADFS
----------------------
uid=nnn All files in the partition will be owned by
user id nnn. Default 0 (root).
gid=nnn All files in the partition willbe in group
nnn. Default 0 (root).
ownmask=nnn The permission mask for ADFS 'owner' permissions
will be nnn. Default 0700.
othmask=nnn The permission mask for ADFS 'other' permissions
will be nnn. Default 0077.
Mapping of ADFS permissions to Linux permissions
------------------------------------------------
ADFS permissions consist of the following:
Owner read
Owner write
Other read
Other write
(In older versions, an 'execute' permission did exist, but this
does not hold the same meaning as the Linux 'execute' permission
and is now obsolete).
The mapping is performed as follows:
Owner read -> -r--r--r--
Owner write -> --w--w---w
Owner read and filetype UnixExec -> ---x--x--x
These are then masked by ownmask, eg 700 -> -rwx------
Possible owner mode permissions -> -rwx------
Other read -> -r--r--r--
Other write -> --w--w--w-
Other read and filetype UnixExec -> ---x--x--x
These are then masked by othmask, eg 077 -> ----rwxrwx
Possible other mode permissions -> ----rwxrwx
Hence, with the default masks, if a file is owner read/write, and
not a UnixExec filetype, then the permissions will be:
-rw-------
However, if the masks were ownmask=0770,othmask=0007, then this would
be modified to:
-rw-rw----
There is no restriction on what you can do with these masks. You may
wish that either read bits give read access to the file for all, but
keep the default write protection (ownmask=0755,othmask=0577):
-rw-r--r--
You can therefore tailor the permission translation to whatever you
desire the permissions should be under Linux.
......@@ -776,7 +776,7 @@ kernel support.
indicate confusion between the system call creat and the VFS operation
create. The VFS operation create is only called to create new objects.
This create call differs from the Unix one in that it is not invoked
to return a file descriptor. The trunctate and exclusive options,
to return a file descriptor. The truncate and exclusive options,
together with the mode, could simply be part of the mode as it is
under Unix. There should be no flags argument; this is used in open
(2) to return a file descriptor for READ or WRITE mode.
......
Smbfs is a filesystem that implements the SMB protocol, which is the
protocol used by Windows for Workgroups, Windows 95 and Windows NT.
Smbfs was inspired by Samba, the program written by Andrew Tridgell
that turns any unix host into a file server for DOS or Windows clients.
that turns any Unix host into a file server for DOS or Windows clients.
See ftp://nimbus.anu.edu.au/pub/tridge/samba/ for this interesting
program suite and much more information on SMB, NetBIOS over TCP/IP,
and explanations for concepts like netbios name or share.
......
......@@ -177,7 +177,7 @@ panicking. To this end, a number of measures are taken:
Because the extended FAT system is backward compatible, it is
possible for old software to modify directory entries. Measures must
be taken to insure the validity of slots. An extended FAT system can
be taken to ensure the validity of slots. An extended FAT system can
verify that a slot does in fact belong to an 8.3 directory entry by
the following:
......
......@@ -12,7 +12,7 @@ Linux Socket Filtering (LSF) allows a user-space program to
attach a filter onto any socket and allow or disallow certain
types of data to come through the socket. LSF follows exactly
the same filter code structure as the BSD Berkeley Packet Filter
(BPF), so refering to the BSD bpf.4 manpage is very helpful in
(BPF), so referring to the BSD bpf.4 manpage is very helpful in
creating filters.
LSF is much simpler than BPF. One does not have to worry about
......
......@@ -96,7 +96,7 @@ tcp_timestamps - BOOLEAN
Enable timestamps as defined in RFC1323.
tcp_sack - BOOLEAN
Enable select acknowledgements.
Enable select acknowledgments.
tcp_retrans_collapse - BOOLEAN
Bug-to-bug compatibility with some broken printers.
......@@ -119,7 +119,7 @@ icmp_destunreach_rate - INTEGER
icmp_paramprob_rate - INTEGER
icmp_timeexceed_rate - INTEGER
icmp_echoreply_rate - INTEGER (not enabled per default)
Limit the maximal rates for sending ICMP packets to specifc targets.
Limit the maximal rates for sending ICMP packets to specific targets.
0 to disable any limiting, otherwise the maximal rate in jiffies(1)
See the source for more information.
......@@ -173,7 +173,7 @@ redirects - BOOLEAN
bootp_relay - BOOLEAN
Accept packets with source address 0.b.c.d destined
not to this host as local ones. It is supposed, that
BOOTP relay deamon will catch and forward such packets.
BOOTP relay daemon will catch and forward such packets.
default FALSE
Not Implemented Yet.
......
......@@ -14,7 +14,7 @@ Through this driver you can either allow your Linux box to communicate
IP over an AppleTalk network or you can provide IP gatewaying functions
for your AppleTalk users.
You can currently Encapsulate or Decapsulate AppleTalk-IP on LocalTalk,
You can currently encapsulate or decapsulate AppleTalk-IP on LocalTalk,
EtherTalk and PPPTalk. The only limit on the protocol is that of what
kernel AppleTalk layer and drivers are available.
......@@ -23,22 +23,22 @@ Each mode requires its own user space software.
Compiling AppleTalk-IP Decapsulation/Encapsulation
=================================================
AppleTalk-IP Decapsulation needs to be compiled into your kernel. You
will need to turn on Appletalk-IP driver support. Then you will need to
select ONE of the two options; IP to AppleTalk-IP Encapsulation support or
AppleTalk-IP to IP Decapsulation support. If you compile the driver
AppleTalk-IP decapsulation needs to be compiled into your kernel. You
will need to turn on AppleTalk-IP driver support. Then you will need to
select ONE of the two options; IP to AppleTalk-IP encapsulation support or
AppleTalk-IP to IP decapsulation support. If you compile the driver
statically you will only be able to use the driver for the function you have
enabled in the kernel. If you compile the driver as a module you can
select what mode you want it to run in via a module loading param.
ipddp_mode=1 for AppleTalk-IP Encapsulation and ipddp_mode=2 for
AppleTalk-IP to IP Decapsulation.
ipddp_mode=1 for AppleTalk-IP encapsulation and ipddp_mode=2 for
AppleTalk-IP to IP decapsulation.
Basic instructions for user space tools
=======================================
To enable AppleTalk-IP Decapsulation/Encapsulation you will need the
proper tools. You can get the tools for Decapsulation from
http://spacs1.spacs.k12.wi.us/~jschlst/MacGate and for Encapsulation
To enable AppleTalk-IP decapsulation/encapsulation you will need the
proper tools. You can get the tools for decapsulation from
http://spacs1.spacs.k12.wi.us/~jschlst/MacGate and for encapsulation
from http://www.maths.unm.edu/~bradford/ltpc.html
I will briefly describe the operation of the tools, but you will
......@@ -61,8 +61,8 @@ traffic out the ipddp interface.
Common Uses of ipddp.c
----------------------
Of course AppleTalk-IP Decapsulation and Encapsulation, but specificly
Decapsulation is being used most for connecting LocalTalk networks to
Of course AppleTalk-IP decapsulation and encapsulation, but specifically
decapsulation is being used most for connecting LocalTalk networks to
IP networks. Although it has been used on EtherTalk networks to allow
Macs that are only able to tunnel IP over EtherTalk.
......@@ -73,6 +73,6 @@ EtherTalk only network.
Further Assistance
-------------------
You can contact me (Jay Schulist <Jay.Schulist@spacs.k12.wi.us>) with any
questions reguarding Decapsulation or Encapsulation. Bradford W. Johnson
questions regarding decapsulation or encapsulation. Bradford W. Johnson
<johns393@maroon.tc.umn.edu> originally wrote the ipddp.c driver for IP
encapsulation in AppleTalk.
......@@ -5,11 +5,10 @@ This document and the related code was written by me
(Cort Dougan, cort@cs.nmt.edu) please email me if you have questions,
comments or corrections.
Last Change: 10.8.98
Last Change: 3.31.99
SMP support for Linux/PPC is still in its early stages and likely to
be buggy for a while. If you want to help by writing code or testing
different hardware please email me!
If you want to help by writing code or testing different hardware please
email me!
1. State of Supported Hardware
......@@ -29,3 +28,7 @@ different hardware please email me!
BeBox
BeBox support hasn't been added to the 2.1.X kernels from 2.0.X
but work is being done and SMP support for BeBox is in the works.
CHRP
CHRP SMP works and is fairly solid. It's been tested on the IBM F50
with 4 processors for quite some time now.
......@@ -105,7 +105,7 @@ Updates, bugfixes and bugreports:
As the driver is still experimental and under development, you should
watch out for updates. Updates of the driver are available on the
internet from one of my home pages:
Internet from one of my home pages:
http://www.student.informatik.tu-darmstadt.de/~tek/projects/linux.html
or:
http://www.tu-darmstadt.de/~tek01/projects/linux.html
......
......@@ -53,7 +53,7 @@ but the wavetable needs THREE! My working string is:
(IO 2 (BASE 0x0E20)) (ACT Y) ))"
Resources 0x0620, 0x0A20 and 0x0E20 should work. Other on-board devices:
Gameport and StereoEnhance are not required to be inited.
Gameport and StereoEnhance are not required to be initialized.
Now you can execute "isapnp /etc/isapnp.conf". No errors should be reported.
If you correctly installed isapnptools, then isapnp will run every boot time.
......
......@@ -80,7 +80,7 @@ Follow these steps:
2) Install your new kernel as the default boot kernel.
3) Boot MS-DOS and configure the audio card with the boot time device
driver, for MSS irq10 dma3 in our example.
4) <ctrl>-<alt>-<del> and boot Linux. This will mantain the DOS configuration
4) <ctrl>-<alt>-<del> and boot Linux. This will maintain the DOS configuration
and will boot the new kernel with sound driver. The sound driver will find
the audio card and will recognize and attach it.
......
......@@ -81,7 +81,7 @@ ver.0.3.3c
ver.0.3.3b
- Fix version number in awe_version.h
- Fix a small bug in noteoff/relese all
- Fix a small bug in noteoff/release all
ver.0.3.3a
- Fix all notes/sounds off
......
......@@ -17,7 +17,7 @@ The home page of PnP driver project is the following URL:
http://www-jcr.lmh.ox.ac.uk/~pnp/
----------------------------------------------------------------
* Installation on RedHat 5.0 Sound Driver
* Installation on Red Hat 5.0 Sound Driver
Please use install-rh.sh under RedHat5.0 directory.
DO NOT USE install.sh below.
......@@ -31,7 +31,7 @@ See INSTALL.RH for more details.
% su
2. If you have never configured the kernel tree yet, run make config
once (to make depencies and symlinks).
once (to make dependencies and symlinks).
# cd /usr/src/linux
# make xconfig
......@@ -40,7 +40,7 @@ See INSTALL.RH for more details.
# sh ./install.sh
4. Configure your kenrel
4. Configure your kernel
(for Linux 2.[01].x user)
# cd /usr/src/linux
......@@ -77,7 +77,7 @@ See INSTALL.RH for more details.
do it by isapnp tools. Otherwise, skip to 8.
This section described only a brief explanation. For more
detaills, please see AWE64-Mini-HOWTO or isapnp tools FAQ.
details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ.
7a. If you have no isapnp.conf file, generate it by pnpdump.
Otherwise, skip to 7d.
......
......@@ -214,7 +214,7 @@ There are several ways of configuring your sound:
3) In /etc/conf.modules when using modprobe.
4) Via RedHat's /usr/sbin/sndconfig program (text based).
4) Via Red Hat's /usr/sbin/sndconfig program (text based).
5) Via the OSS soundconf program (with the commercial version
of the OSS driver.
......@@ -240,7 +240,7 @@ For More Information (RTFM):
6) The comments and code in linux/drivers/sound.
7) The sndconfig and rhsound documentation from RedHat.
7) The sndconfig and rhsound documentation from Red Hat.
8) The Linux-sound mailing list: sound-list@redhat.com
......
......@@ -23,3 +23,12 @@ modules.conf has:
alias char-major-14 mad16
options sb mad16=1
options mad16 io=0x530 irq=7 dma=0 dma16=1 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
To get the built in mixer to work this needs to be:
options adlib_card io=0x388 # FM synthesizer
options sb mad16=1
options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=816 mpu_irq=5 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
The addition of the "mpu_io=816 mpu_irq=5" to the mad16 options line is
......@@ -15,7 +15,7 @@ CONFIG_SOUND_OPL3SA1=y through 'make config/xconfig/menuconfig'.
You'll need to know all of the relevant info (irq, dma, and io port) for the
chip's WSS mode, since that is the mode the kernel sound driver uses, and of
course you'll also need to know about where the MPU401 and OPL3 ports and
irq's are if you want to use those.
IRQs are if you want to use those.
Here's the skinny on how to load it as a module:
......@@ -24,14 +24,14 @@ Here's the skinny on how to load it as a module:
Module options in detail:
io: This is the WSS's port base.
irq: This is the WSS's irq.
dma: This is the WSS's dma line. In my BIOS setup screen this was
irq: This is the WSS's IRQ.
dma: This is the WSS's DMA line. In my BIOS setup screen this was
listed as "WSS Play DMA"
dma2: This is the WSS's secondary dma line. My BIOS calls it the
dma2: This is the WSS's secondary DMA line. My BIOS calls it the
"WSS capture DMA"
mpu_io: This is the MPU401's port base.
mpu_irq: This is the MPU401's irq.
mpu_irq: This is the MPU401's IRQ.
If you'd like to use the OPL3 FM Synthesizer, make sure you enable
CONFIG_YM3812 (in 'make config'). That'll build the opl3.o module.
......@@ -43,7 +43,7 @@ Here's how:
Say 'y' or 'm' to "SoftOSS software wave table engine" in make config.
If you said yes, the software synth is availible once you boot your new
If you said yes, the software synth is available once you boot your new
kernel.
If you chose to build it as a module, just insmod the resulting softoss2.o
......
......@@ -58,7 +58,7 @@ contributors. (I could have forgotten some names.)
Mika Liljeberg uLaw encoding and decoding routines
Jeff Tranter Linux SOUND HOWTO document
Greg Lee Volume computation algorithm for the GUS and
lot's of valuable suggestions.
lots of valuable suggestions.
Andy Warner ISC port
Jim Lowe,
Amancio Hasty Jr FreeBSD/NetBSD port
......@@ -96,7 +96,7 @@ First of all it's highly recommended to contact me before sending anything
or before even starting to do any work. Tell me what you suggest to be
changed or what you have planned to do. Also ensure you are using the
very latest (development) version of OSS/Free since the change may already be
implemented there. In general it's major waste of time to try to improve
implemented there. In general it's a major waste of time to try to improve a
several months old version. Information about the latest version can be found
from http://www.opensound.com/ossfree. In general there is no point in
sending me patches relative to production kernels.
......@@ -1314,8 +1314,8 @@ which use software configurable I/O port relocation feature of the chip.
This ESS proprietary feature is supported only by OSS/Linux.
There are ES1688 based cards which use different interrupt pin assignment than
recommended by ESS (5, 7, 9/2 and 10). In this case all IRQ's don't work.
At least a card called (Pearl?) Hypersound 16 supports IRQ15 but it doesn't
recommended by ESS (5, 7, 9/2 and 10). In this case all IRQs don't work.
At least a card called (Pearl?) Hypersound 16 supports IRQ 15 but it doesn't
work.
ES1868 is a PnP chip which is (supposed to be) compatible with ESS1688
......
......@@ -9,8 +9,8 @@
This is a sound driver extension for SoundBlaster AWE32 and other
compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable
the wave synth operations. The driver is provided for both Linux
1.2.x and 2.[01].x kernels, and also FreeBSD, on Intel x86 and DEC
the wave synth operations. The driver is provided for Linux 1.2.x
and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC
Alpha systems.
This driver was written by Takashi Iwai <iwai@ww.uni-erlangen.de>,
......@@ -76,7 +76,7 @@ available in most midi files.
% sfxload synthgm
% drvmidi -L 2mbgmgs foo.mid
This makes a big differece (believe me)! For more details, please
This makes a big difference (believe me)! For more details, please
refer to the FAQ list which is available on the URL above.
The current chorus, reverb and equalizer status can be changed by
......@@ -97,14 +97,14 @@ The following flags are defined automatically when using installation
shell script.
- AWE_MODULE_SUPPORT
indicates your linux kernel supports module for each soundcard
(in recent 2.1 kernels and unofficial patched 2.0 kernels as
distributed in the RH5.0 package).
indicates your Linux kernel supports module for each sound card
(in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels
as distributed in the RH5.0 package).
This flag is automatically set when you're using 2.1.x kernels.
You can pass the base address and memory size via the following
module options,
io = base I/O port address (eg. 0x620)
memsize = DRAM size in Kbyes (eg. 512)
memsize = DRAM size in kilobytes (eg. 512)
As default, AWE driver probes these values automatically.
......@@ -117,15 +117,15 @@ Define them only when the driver couldn't detect the card properly.
0 means to autodetect the address.
- AWE_DEFAULT_MEM_SIZE (default: not defined)
specifies the memory size of your AWE32 card in kilo bytes.
specifies the memory size of your AWE32 card in kilobytes.
-1 means to autodetect its size.
[Sample Table Size]
From ver.0.4.0, sample tables are allocated dynamically (except
Linux-1.2.x system), so you need NOT to touch these parameters.
Linux-1.2.x users may need to increase these values to apropriate size
if larger DRAM is equipped with the soundcard.
Linux-1.2.x users may need to increase these values to appropriate size
if the sound card is equipped with more DRAM.
- AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS
......@@ -139,7 +139,7 @@ if larger DRAM is equipped with the soundcard.
passthrough channels.
- AWE_DEBUG_ON (default: defined)
turns on debuggin messages if defined.
turns on debugging messages if defined.
- AWE_HAS_GUS_COMPATIBILITY (default: defined)
Enables GUS compatibility mode if defined, reading GUS patches and
......@@ -170,7 +170,7 @@ if larger DRAM is equipped with the soundcard.
- AWE_ALLOW_SAMPLE_SHARING (default: defined)
Allow sample sharing for differently loaded patches.
This function is available only together with awesfx-0.4.3p3.
Note that this is still an experimantal option.
Note that this is still an experimental option.
- DEF_FM_CHORUS_DEPTH (default: 0x10)
The default strength to be sent to the chorus effect engine.
......@@ -183,8 +183,8 @@ if larger DRAM is equipped with the soundcard.
* ACKNOWLEDGMENTS
Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) for many advices
to programming of AWE32. Many codes are brought from his AWE32-native
Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) for much advice
on programming of AWE32. Much code is brought from his AWE32-native
MOD player, ALMP.
The port of awedrv to FreeBSD is done by Randall Hopper
(rhh@ct.picker.com).
......
......@@ -149,7 +149,7 @@ PART THREE: configure your kernel
.
.
.
make modules_isntall
make modules_install
Here's my autoconf.h SOUND section:
......
......@@ -178,7 +178,7 @@ page-cluster:
The Linux VM subsystem avoids excessive disk seeks by reading
multiple pages on a page fault. The number of pages it reads
is dependant on the amount of memory in your machine.
is dependent on the amount of memory in your machine.
The number of pages the kernel reads in at once is equal to
2 ^ page-cluster. Values above 2 ^ 5 don't make much sense
......
VERSION = 2
PATCHLEVEL = 2
SUBLEVEL = 7
SUBLEVEL = 8
EXTRAVERSION =
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
......
[Some of this is taken from Frohwalt Egerer's original linux-kernel FAQ]
What follows is a suggested proceedure for reporting Linux bugs. You
What follows is a suggested procedure for reporting Linux bugs. You
aren't obliged to use the bug reporting format, it is provided as a guide
to the kind of information that can be useful to developers - no more.
......@@ -23,11 +23,11 @@ mailing list see http://www.tux.org/lkml/).
This is a suggested format for a bug report sent to the Linux kernel mailing
list. Having a standardized bug report form makes it easier for you not to
overlook things, and easier for the developers to find the pieces of
information they're really interested in.
information they're really interested in. Don't feel you have to follow it.
First run the ver_linux script included as scripts/ver_linux or
at <URL:ftp://ftp.sai.msu.su/pub/Linux/ver_linux> It checks out
the version of some important subsystems. Run it with the commnd
the version of some important subsystems. Run it with the command
"sh scripts/ver_linux"
Use that information to fill in all fields of the bug report form, and
......
......@@ -1407,8 +1407,9 @@ asmlinkage int sys_old_adjtimex(struct timex32 *txc_p)
copy_from_user(&txc.tick, &txc_p->tick, sizeof(struct timex32) -
offsetof(struct timex32, time)))
return -EFAULT;
if ((ret = do_adjtimex(&txc)))
ret = do_adjtimex(&txc);
if (ret < 0)
return ret;
/* copy back to timex32 */
......@@ -1418,5 +1419,5 @@ asmlinkage int sys_old_adjtimex(struct timex32 *txc_p)
(put_tv32(&txc_p->time, &txc.time)))
return -EFAULT;
return 0;
return ret;
}
......@@ -109,7 +109,7 @@ $43:
$66:
EXI( ldq $1,0($7) )
subq $4,8,$4
stq $1,0($6)
EXO( stq $1,0($6) )
addq $7,8,$7
subq $0,8,$0
addq $6,8,$6
......
......@@ -154,7 +154,9 @@ ENTRY(lcall7)
.globl ret_from_fork
ret_from_fork:
#ifdef __SMP__
pushl %ebx
call SYMBOL_NAME(schedule_tail)
addl $4, %esp
#endif /* __SMP__ */
GET_CURRENT(%ebx)
jmp ret_from_sys_call
......
......@@ -39,6 +39,7 @@ EXPORT_SYMBOL(local_bh_count);
EXPORT_SYMBOL(local_irq_count);
EXPORT_SYMBOL(enable_irq);
EXPORT_SYMBOL(disable_irq);
EXPORT_SYMBOL(disable_irq_nosync);
EXPORT_SYMBOL(kernel_thread);
EXPORT_SYMBOL_NOVERS(__down_failed);
......
......@@ -1060,8 +1060,9 @@ static void do_edge_ioapic_IRQ(unsigned int irq, struct pt_regs * regs)
if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
action = desc->action;
status &= ~IRQ_PENDING;
status |= IRQ_INPROGRESS;
}
desc->status = status | IRQ_INPROGRESS;
desc->status = status;
spin_unlock(&irq_controller_lock);
/*
......@@ -1112,8 +1113,9 @@ static void do_level_ioapic_IRQ(unsigned int irq, struct pt_regs * regs)
action = NULL;
if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
action = desc->action;
status |= IRQ_INPROGRESS;
}
desc->status = status | IRQ_INPROGRESS;
desc->status = status;
ack_APIC_irq();
spin_unlock(&irq_controller_lock);
......
......@@ -203,7 +203,7 @@ int i8259A_irq_pending(unsigned int irq)
void make_8259A_irq(unsigned int irq)
{
disable_irq(irq);
disable_irq_nosync(irq);
io_apic_irqs &= ~(1<<irq);
irq_desc[irq].handler = &i8259A_irq_type;
enable_irq(irq);
......@@ -242,8 +242,11 @@ static void do_8259A_IRQ(unsigned int irq, struct pt_regs * regs)
status = desc->status & ~IRQ_REPLAY;
action = NULL;
if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))
{
action = desc->action;
desc->status = status | IRQ_INPROGRESS;
status |= IRQ_INPROGRESS;
}
desc->status = status;
}
spin_unlock(&irq_controller_lock);
......@@ -747,7 +750,7 @@ int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction *
* hardware disable after having gotten the irq
* controller lock.
*/
void disable_irq(unsigned int irq)
void disable_irq_nosync(unsigned int irq)
{
unsigned long flags;
......@@ -757,9 +760,21 @@ void disable_irq(unsigned int irq)
irq_desc[irq].handler->disable(irq);
}
spin_unlock_irqrestore(&irq_controller_lock, flags);
}
/*
* Synchronous version of the above, making sure the IRQ is
* no longer running on any other IRQ..
*/
void disable_irq(unsigned int irq)
{
disable_irq_nosync(irq);
if (irq_desc[irq].status & IRQ_INPROGRESS)
synchronize_irq();
if (!local_irq_count[smp_processor_id()] && irq_desc[irq].action) {
do {
barrier();
} while (irq_desc[irq].status & IRQ_INPROGRESS);
}
}
void enable_irq(unsigned int irq)
......@@ -769,7 +784,7 @@ void enable_irq(unsigned int irq)
spin_lock_irqsave(&irq_controller_lock, flags);
switch (irq_desc[irq].depth) {
case 1:
irq_desc[irq].status &= ~(IRQ_DISABLED | IRQ_INPROGRESS);
irq_desc[irq].status &= ~IRQ_DISABLED;
irq_desc[irq].handler->enable(irq);
/* fall throught */
default:
......@@ -951,7 +966,7 @@ unsigned long probe_irq_on(void)
for (i = NR_IRQS-1; i > 0; i--) {
if (!irq_desc[i].action) {
unsigned int status = irq_desc[i].status | IRQ_AUTODETECT;
irq_desc[i].status = status & ~IRQ_INPROGRESS;
irq_desc[i].status = status & ~(IRQ_INPROGRESS|IRQ_DISABLED);
irq_desc[i].handler->startup(i);
}
}
......@@ -975,7 +990,7 @@ unsigned long probe_irq_on(void)
/* It triggered already - consider it spurious. */
if (status & IRQ_INPROGRESS) {
irq_desc[i].status = status & ~IRQ_AUTODETECT;
irq_desc[i].status = (status & ~(IRQ_INPROGRESS | IRQ_AUTODETECT)) | IRQ_DISABLED;
irq_desc[i].handler->shutdown(i);
}
}
......@@ -1005,7 +1020,7 @@ int probe_irq_off(unsigned long unused)
irq_found = i;
nr_irqs++;
}
irq_desc[i].status = status & ~IRQ_AUTODETECT;
irq_desc[i].status = (status & ~(IRQ_AUTODETECT | IRQ_INPROGRESS)) | IRQ_DISABLED;
irq_desc[i].handler->shutdown(i);
}
spin_unlock_irq(&irq_controller_lock);
......
This diff is collapsed.
......@@ -111,6 +111,8 @@ static int cpu_idle(void *unused)
/* endless idle loop with no priority at all */
current->priority = 0;
current->counter = -100;
init_idle();
for (;;) {
if (work)
start_idle = jiffies;
......@@ -139,6 +141,8 @@ int cpu_idle(void *unused)
/* endless idle loop with no priority at all */
current->priority = 0;
current->counter = -100;
init_idle();
while(1) {
if (current_cpu_data.hlt_works_ok && !hlt_counter &&
!current->need_resched)
......
......@@ -39,6 +39,7 @@
#include <asm/io.h>
#include <asm/smp.h>
#include <asm/cobalt.h>
#include <asm/msr.h>
/*
* Machine setup..
......@@ -57,6 +58,7 @@ int MCA_bus = 0;
unsigned int machine_id = 0;
unsigned int machine_submodel_id = 0;
unsigned int BIOS_revision = 0;
unsigned int mca_pentium_flag = 0;
/*
* Setup options
......@@ -244,11 +246,6 @@ __initfunc(void setup_arch(char **cmdline_p,
unsigned long memory_start, memory_end;
char c = ' ', *to = command_line, *from = COMMAND_LINE;
int len = 0;
static unsigned char smptrap=0;
if (smptrap)
return;
smptrap=1;
#ifdef CONFIG_VISWS
visws_get_board_type_and_rev();
......@@ -381,16 +378,6 @@ __initfunc(void setup_arch(char **cmdline_p,
}
#define rdmsr(msr,val1,val2) \
__asm__ __volatile__("rdmsr" \
: "=a" (val1), "=d" (val2) \
: "c" (msr))
#define wrmsr(msr,val1,val2) \
__asm__ __volatile__("wrmsr" \
: /* no outputs */ \
: "c" (msr), "a" (val1), "d" (val2))
__initfunc(static int get_model_name(struct cpuinfo_x86 *c))
{
unsigned int n, dummy, *v;
......
......@@ -40,10 +40,10 @@
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <asm/mtrr.h>
#include <asm/msr.h>
#include "irq.h"
extern unsigned long start_kernel;
extern void update_one_process( struct task_struct *p,
unsigned long ticks, unsigned long user,
unsigned long system, int cpu);
......@@ -147,16 +147,7 @@ int skip_ioapic_setup = 0; /* 1 if "noapic" boot option passed */
*/
#define APIC_DEFAULT_PHYS_BASE 0xfee00000
/*
* Reads and clears the Pentium Timestamp-Counter
*/
#define READ_TSC(x) __asm__ __volatile__ ( "rdtsc" \
:"=a" (((unsigned long*)&(x))[0]), \
"=d" (((unsigned long*)&(x))[1]))
#define CLEAR_TSC \
__asm__ __volatile__ ("\t.byte 0x0f, 0x30;\n"::\
"a"(0x00001000), "d"(0x00001000), "c"(0x10):"memory")
#define CLEAR_TSC wrmsr(0x10, 0x00001000, 0x00001000)
/*
* Setup routine for controlling SMP activation
......@@ -899,6 +890,7 @@ int __init start_secondary(void *unused)
* Everything has been set up for the secondary
* CPUs - they just need to reload everything
* from the task structure
* This function must not return.
*/
void __init initialize_secondary(void)
{
......@@ -940,7 +932,6 @@ static void __init do_boot_cpu(int i)
/*
* We need an idle process for each processor.
*/
kernel_thread(start_secondary, NULL, CLONE_PID);
cpucount++;
......@@ -951,6 +942,8 @@ static void __init do_boot_cpu(int i)
idle->processor = i;
__cpu_logical_map[cpucount] = i;
cpu_number_map[i] = cpucount;
idle->has_cpu = 1; /* we schedule the first task manually */
idle->tss.eip = (unsigned long) start_secondary;
/* start_eip had better be page-aligned! */
start_eip = setup_trampoline();
......@@ -1183,6 +1176,7 @@ void __init smp_boot_cpus(void)
/* Must be done before other processors booted */
mtrr_init_boot_cpu ();
#endif
init_idle();
/*
* Initialize the logical to physical CPU number mapping
* and the per-CPU profiling counter/multiplier
......@@ -1781,6 +1775,7 @@ asmlinkage void smp_invalidate_interrupt(void)
local_flush_tlb();
ack_APIC_irq();
}
static void stop_this_cpu (void)
......@@ -1949,7 +1944,7 @@ int __init calibrate_APIC_clock(void)
/*
* We wrapped around just now. Let's start:
*/
READ_TSC(t1);
rdtscll(t1);
tt1=apic_read(APIC_TMCCT);
#define LOOPS (HZ/10)
......@@ -1960,7 +1955,7 @@ int __init calibrate_APIC_clock(void)
wait_8254_wraparound ();
tt2=apic_read(APIC_TMCCT);
READ_TSC(t2);
rdtscll(t2);
/*
* The APIC bus clock counter is 32 bits only, it
......
......@@ -47,6 +47,7 @@
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/delay.h>
#include <asm/msr.h>
#include <linux/mc146818rtc.h>
#include <linux/timex.h>
......@@ -83,8 +84,8 @@ static inline unsigned long do_fast_gettimeoffset(void)
register unsigned long edx asm("dx");
/* Read the Time Stamp Counter */
__asm__("rdtsc"
:"=a" (eax), "=d" (edx));
rdtsc(eax,edx);
/* .. relative to previous jiffy (32 bits is enough) */
eax -= last_tsc_low; /* tsc_low delta */
......@@ -443,7 +444,8 @@ static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
*/
/* read Pentium cycle counter */
__asm__("rdtsc" : "=a" (last_tsc_low) : : "edx");
rdtscl(last_tsc_low);
outb_p(0x00, 0x43); /* latch the count ASAP */
......@@ -566,12 +568,12 @@ __initfunc(static unsigned long calibrate_tsc(void))
unsigned long endlow, endhigh;
unsigned long count;
__asm__ __volatile__("rdtsc":"=a" (startlow),"=d" (starthigh));
rdtsc(startlow,starthigh);
count = 0;
do {
count++;
} while ((inb(0x61) & 0x20) == 0);
__asm__ __volatile__("rdtsc":"=a" (endlow),"=d" (endhigh));
rdtsc(endlow,endhigh);
last_tsc_low = endlow;
......
......@@ -204,8 +204,11 @@ static void do_cobalt_IRQ(unsigned int irq, struct pt_regs * regs)
status = desc->status & ~IRQ_REPLAY;
action = NULL;
if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS)))
{
action = desc->action;
desc->status = status | IRQ_INPROGRESS;
status |= IRQ_INPROGRESS;
}
desc->status = status;
}
spin_unlock(&irq_controller_lock);
......
......@@ -14,7 +14,7 @@
.s.o:
$(AS) -o $*.o $<
.c.o:
$(CC) $(CFLAGS) -DINITRD_OFFSET=$(IOFF) -DINITRD_SIZE=$(ISZ) -DZIMAGE_OFFSET=$(ZOFF) -DZIMAGE_SIZE=$(ZSZ) -DKERNELBASE=$(KERNELBASE) -c -o $*.o $<
$(CC) $(CFLAGS) -DINITRD_OFFSET=$(IOFF) -DINITRD_SIZE=$(ISZ) -DZIMAGE_OFFSET=$(ZOFF) -DZIMAGE_SIZE=$(ZSZ) -c -o $*.o $<
.S.s:
$(CC) -D__ASSEMBLY__ -traditional -E -o $*.o $<
.S.o:
......@@ -57,7 +57,7 @@ zvmlinux.initrd: zvmlinux
-DINITRD_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd initrd` \
-DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux.initrd image` \
-DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux.initrd image` \
-DKERNELBASE=$(KERNELBASE) -c -o misc.o misc.c
-c -o misc.o misc.c
$(LD) $(ZLINKFLAGS) -o zvmlinux.initrd.tmp $(OBJECTS)
$(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
--add-section=initrd=ramdisk.image.gz \
......@@ -84,7 +84,7 @@ zvmlinux: $(OBJECTS) ../coffboot/vmlinux.gz
#
$(CC) $(CFLAGS) -DINITRD_OFFSET=0 -DINITRD_SIZE=0 \
-DZIMAGE_OFFSET=`sh offset $(OBJDUMP) zvmlinux image` \
-DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux image` -DKERNELBASE=$(KERNELBASE) \
-DZIMAGE_SIZE=`sh size $(OBJDUMP) zvmlinux image` \
-c -o misc.o misc.c
$(LD) $(ZLINKFLAGS) -o zvmlinux.tmp $(OBJECTS)
$(OBJCOPY) $(OBJCOPY_ARGS) -R .comment --add-section=image=../coffboot/vmlinux.gz \
......@@ -95,7 +95,7 @@ floppy: $(TOPDIR)/vmlinux zImage
dd if=zImage of=/dev/fd0H1440 bs=64b
mkprep : mkprep.c
$(HOSTCC) -DKERNELBASE=$(KERNELBASE) -o mkprep mkprep.c
$(HOSTCC) -o mkprep mkprep.c
znetboot : zImage
cp zImage $(TFTPIMAGE)
......
......@@ -6,7 +6,7 @@
.text
/*
* $Id: head.S,v 1.29 1999/03/08 23:41:17 cort Exp $
* $Id: head.S,v 1.31 1999/04/22 06:32:00 davem Exp $
*
* Boot loader philosophy:
* ROM loads us to some arbitrary location
......@@ -23,11 +23,7 @@ start:
start_:
mr r11,r3 /* Save pointer to residual/board data */
mr r25,r5 /* Save OFW pointer */
mfmsr r3 /* Turn off interrupts */
li r4,0
ori r4,r4,MSR_EE
andc r3,r3,r4
li r3,MSR_IP /* Establish default MSR value */
mtmsr r3
/* check if we need to relocate ourselves to the link addr or were we
......@@ -136,6 +132,20 @@ start_ldr:
lis r10,0xdeadc0de@h
ori r10,r10,0xdeadc0de@l
stw r10,0(r9)
/*
* The Radstone firmware maps PCI memory at 0xc0000000 using BAT2
* so disable BATs before setting this to avoid a clash
*/
li r8,0
mtspr DBAT0U,r8
mtspr DBAT1U,r8
mtspr DBAT2U,r8
mtspr DBAT3U,r8
mtspr IBAT0U,r8
mtspr IBAT1U,r8
mtspr IBAT2U,r8
mtspr IBAT3U,r8
blr
hang:
b hang
......
......@@ -127,6 +127,11 @@ static void kbdreset(void)
unsigned char c;
int i;
/* flush input queue */
while ((inb(KBSTATP) & KBINRDY))
{
(void)inb(KBDATAP);
}
/* Send self-test */
while (inb(KBSTATP) & KBOUTRDY) ;
outb(KBSTATP,0xAA);
......
/*
* misc.c
*
* $Id: misc.c,v 1.61 1999/03/08 23:51:02 cort Exp $
* $Id: misc.c,v 1.63 1999/04/05 21:48:20 cort Exp $
*
* Adapted for PowerPC by Gary Thomas
*
......@@ -33,14 +33,16 @@ char *avail_ram;
char *end_avail;
extern char _end[];
#if defined(CONFIG_SERIAL_CONSOLE)
char cmd_preset[] = "console=ttyS0,9600n8";
#ifdef CONFIG_CMDLINE
#define CMDLINE CONFIG_CMDLINE
#else
char cmd_preset[] = "";
#define CMDLINE "";
#endif
char cmd_buf[256];
char *cmd_line = cmd_buf;
char cmd_preset[] = CMDLINE;
char cmd_buf[256];
char *cmd_line = cmd_buf;
int keyb_present = 1; /* keyboard controller is present by default */
RESIDUAL hold_resid_buf;
RESIDUAL *hold_residual = &hold_resid_buf;
unsigned long initrd_start = 0, initrd_end = 0;
......@@ -58,7 +60,8 @@ void _bcopy(char *src, char *dst, int len);
void * memcpy(void * __dest, __const void * __src,
int __n);
void gunzip(void *, int, unsigned char *, int *);
int _cvt(unsigned long val, char *buf, long radix, char *digits);
static int _cvt(unsigned long val, char *buf, long radix, char *digits);
unsigned char inb(int);
void pause()
{
......@@ -93,11 +96,14 @@ static void scroll()
tstc(void)
{
return (
#if defined(CONFIG_SERIAL_CONSOLE)
NS16550_tstc(com_port) ||
if (keyb_present)
return (CRT_tstc() || NS16550_tstc(com_port));
else
NS16550_tstc(com_port);
#else
return (CRT_tstc() );
#endif /* CONFIG_SERIAL_CONSOLE */
CRT_tstc());
}
getc(void)
......@@ -106,7 +112,8 @@ getc(void)
#if defined(CONFIG_SERIAL_CONSOLE)
if (NS16550_tstc(com_port)) return (NS16550_getc(com_port));
#endif /* CONFIG_SERIAL_CONSOLE */
if (CRT_tstc()) return (CRT_getc());
if (keyb_present)
if (CRT_tstc()) return (CRT_getc());
}
}
......@@ -188,6 +195,8 @@ void puts(const char *s)
}
}
cursor(x, y);
orig_x = x;
orig_y = y;
}
......@@ -317,6 +326,8 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
int dev_handle;
int mem_info[2];
int res, size;
unsigned char board_type;
unsigned char base_mod;
lines = 25;
cols = 80;
......@@ -333,14 +344,30 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
flush_instruction_cache();
_put_HID0(_get_HID0() & ~0x0000C000);
_put_MSR((orig_MSR = _get_MSR()) & ~0x0030);
vga_init(0xC0000000);
#if defined(CONFIG_SERIAL_CONSOLE)
com_port = (struct NS16550 *)NS16550_init(1);
com_port = (struct NS16550 *)NS16550_init(0);
#endif /* CONFIG_SERIAL_CONSOLE */
vga_init(0xC0000000);
if (residual)
{
/* Is this Motorola PPCBug? */
if ((1 & residual->VitalProductData.FirmwareSupports) &&
(1 == residual->VitalProductData.FirmwareSupplier)) {
board_type = inb(0x800) & 0xF0;
/* If this is genesis 2 board then check for no
* keyboard controller and more than one processor.
*/
if (board_type == 0xe0) {
base_mod = inb(0x803);
/* if a MVME2300 or a MCME2400 then no keyboard */
if((base_mod == 0x9) || (base_mod == 0xF9)) {
keyb_present = 0; /* no keyboard */
}
}
}
memcpy(hold_residual,residual,sizeof(RESIDUAL));
} else {
/* Assume 32M in the absence of more info... */
......@@ -429,7 +456,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
avail_ram = (char *)PAGE_ALIGN((unsigned long)_end);
puts("zimage at: "); puthex((unsigned long)zimage_start);
puts(" "); puthex((unsigned long)(zimage_size+zimage_start)); puts("\n");
if ( (unsigned long)zimage_start <= 0x008000000 )
if ( (unsigned long)zimage_start <= 0x00800000 )
{
memcpy( (void *)avail_ram, (void *)zimage_start, zimage_size );
zimage_start = (char *)avail_ram;
......@@ -458,9 +485,8 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
puts("avail ram: "); puthex((unsigned long)avail_ram); puts(" ");
puthex((unsigned long)end_avail); puts("\n");
#if !defined(CONFIG_SERIAL_CONSOLE)
CRT_tstc(); /* Forces keyboard to be initialized */
#endif
if (keyb_present)
CRT_tstc(); /* Forces keyboard to be initialized */
puts("\nLinux/PPC load: ");
timer = 0;
......
......@@ -14,15 +14,8 @@
* Modified for x86 hosted builds by Matt Porter <porter@neta.com>
*/
#ifdef linux
#include <linux/types.h>
/*#include <asm/stat.h>*/
/*#include <asm/byteorder.h>*/ /* the byte swap funcs don't work here -- Cort */
#else
#include <unistd.h>
#endif
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
......@@ -168,10 +161,10 @@ void write_prep_partition(int in, int out)
/* set entry point and boot image size skipping over elf header */
#ifdef __i386__
*entry = 0x400/*+65536*/;
*length = info.st_size+0x400;
*length = info.st_size-elfhdr_size+0x400;
#else
*entry = cpu_to_le32(0x400/*+65536*/);
*length = cpu_to_le32(info.st_size+0x400);
*length = cpu_to_le32(info.st_size-elfhdr_size+0x400);
#endif /* __i386__ */
/* sets magic number for msdos partition (used by linux) */
......
#
# Automatically generated by make menuconfig: don't edit
# Automatically generated make config: don't edit
#
#
......@@ -14,7 +14,7 @@ CONFIG_6xx=y
CONFIG_ALL_PPC=y
# CONFIG_APUS is not set
# CONFIG_MBX is not set
# CONFIG_SMP is not set
CONFIG_SMP=y
#
# General setup
......@@ -43,12 +43,11 @@ CONFIG_MAC_KEYBOARD=y
CONFIG_MAC_FLOPPY=y
CONFIG_MAC_SERIAL=y
CONFIG_ADBMOUSE=y
CONFIG_BLK_DEV_IDE_PMAC=y
CONFIG_PROC_DEVICETREE=y
# CONFIG_KGDB is not set
# CONFIG_XMON is not set
# CONFIG_TOTALMP is not set
CONFIG_BOOTX_TEXT=y
# CONFIG_MOTOROLA_HOTSWAP is not set
# CONFIG_CMDLINE_BOOL is not set
#
# Plug and Play support
......@@ -60,6 +59,10 @@ CONFIG_BOOTX_TEXT=y
#
# CONFIG_BLK_DEV_FD is not set
CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
......@@ -70,8 +73,14 @@ CONFIG_BLK_DEV_IDEFLOPPY=y
# CONFIG_BLK_DEV_RZ1000 is not set
# CONFIG_BLK_DEV_IDEPCI is not set
# CONFIG_BLK_DEV_SL82C105 is not set
CONFIG_BLK_DEV_IDE_PMAC=y
# CONFIG_BLK_DEV_IDEDMA_PMAC is not set
# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_DEV_LOOP is not set
#
# Additional Block Devices
#
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_RAM=y
......@@ -101,10 +110,17 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IP_MROUTE is not set
CONFIG_IP_ALIAS=y
# CONFIG_SYN_COOKIES is not set
#
# (it is safe to leave these untouched)
#
CONFIG_INET_RARP=y
CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
#
#
#
# CONFIG_IPX is not set
CONFIG_ATALK=m
# CONFIG_X25 is not set
......@@ -126,12 +142,20 @@ CONFIG_ATALK=m
# SCSI support
#
CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=y
CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_CHR_DEV_SG is not set
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_CHR_DEV_SG=y
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_LOGGING is not set
......@@ -159,10 +183,15 @@ CONFIG_AIC7XXX_RESET_DELAY=15
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_G_NCR5380_PORT is not set
# CONFIG_SCSI_G_NCR5380_MEM is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_NCR53C7xx is not set
CONFIG_SCSI_NCR53C8XX=y
# CONFIG_SCSI_SYM53C8XX is not set
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=20
......@@ -175,6 +204,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
......@@ -205,7 +235,7 @@ CONFIG_BMAC=y
# CONFIG_ACENIC is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_EISA=y
# CONFIG_PCNET32 is not set
CONFIG_PCNET32=y
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
......@@ -229,6 +259,10 @@ CONFIG_DE4X5=y
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
CONFIG_PPP=y
#
# CCP compressors for PPP are only built as modules.
#
# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
# CONFIG_TR is not set
......@@ -256,22 +290,37 @@ CONFIG_PPP=y
# Console drivers
#
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_PM2 is not set
CONFIG_FB_OF=y
CONFIG_FB_CONTROL=y
CONFIG_FB_PLATINUM=y
CONFIG_FB_VALKYRIE=y
CONFIG_FB_ATY=y
# CONFIG_FB_ATY is not set
CONFIG_FB_IMSTT=y
CONFIG_FB_CT65550=y
# CONFIG_FB_S3TRIO is not set
# CONFIG_FB_MATROX is not set
CONFIG_FB_ATY=y
CONFIG_FB_MATROX=y
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G100=y
# CONFIG_FB_MATROX_MULTIHEAD is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
CONFIG_FBCON_ADVANCED=y
# CONFIG_FBCON_MFB is not set
# CONFIG_FBCON_CFB2 is not set
# CONFIG_FBCON_CFB4 is not set
CONFIG_FBCON_CFB8=y
CONFIG_FBCON_CFB16=y
CONFIG_FBCON_CFB24=y
CONFIG_FBCON_CFB32=y
# CONFIG_FBCON_AFB is not set
# CONFIG_FBCON_ILBM is not set
# CONFIG_FBCON_IPLAN2P2 is not set
# CONFIG_FBCON_IPLAN2P4 is not set
# CONFIG_FBCON_IPLAN2P8 is not set
# CONFIG_FBCON_MAC is not set
# CONFIG_FBCON_VGA is not set
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
CONFIG_FBCON_FONTS=y
# CONFIG_FONT_8x8 is not set
......@@ -292,7 +341,17 @@ CONFIG_VT_CONSOLE=y
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_MOUSE is not set
CONFIG_MOUSE=y
#
# Mice
#
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
# CONFIG_MS_BUSMOUSE is not set
CONFIG_PSMOUSE=y
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_WATCHDOG is not set
# CONFIG_NVRAM is not set
......@@ -307,11 +366,20 @@ CONFIG_UNIX98_PTY_COUNT=256
# Joystick support
#
# CONFIG_JOYSTICK is not set
# CONFIG_DTLK is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
# CONFIG_FT_NORMAL_DEBUG is not set
# CONFIG_FT_FULL_DEBUG is not set
# CONFIG_FT_NO_TRACE is not set
# CONFIG_FT_NO_TRACE_AT_ALL is not set
# CONFIG_FT_STD_FDC is not set
# CONFIG_FT_MACH2 is not set
# CONFIG_FT_PROBE_FC10 is not set
# CONFIG_FT_ALT_FDC is not set
#
# Filesystems
......@@ -402,3 +470,10 @@ CONFIG_DMASOUND=y
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_OSS is not set
#
# Kernel hacking
#
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_KGDB is not set
# CONFIG_XMON is not set
# $Id: config.in,v 1.84 1999/02/23 08:08:38 davem Exp $
# $Id: config.in,v 1.91 1999/04/09 07:07:47 cort Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
......@@ -19,12 +19,10 @@ choice 'Machine Type' \
APUS CONFIG_APUS \
MBX CONFIG_MBX" PowerMac
bool 'Symmetric multi-processing support' CONFIG_SMP
if [ "$CONFIG_ALL_PPC" != "y" ];then
define_bool CONFIG_MACH_SPECIFIC y
fi
bool 'Symmetric multi-processing support' CONFIG_SMP
endmenu
if [ "$CONFIG_MBX" = "y" ];then
......@@ -82,13 +80,20 @@ bool 'Power management support for PowerBook 3400/2400' CONFIG_PMAC_PBOOK
bool 'Support for PowerMac keyboard' CONFIG_MAC_KEYBOARD
bool 'Support for PowerMac floppy' CONFIG_MAC_FLOPPY
bool 'Support for PowerMac serial ports' CONFIG_MAC_SERIAL
if [ "$CONFIG_MAC_SERIAL" = "y" ]; then
bool ' Support for console on serial port' CONFIG_SERIAL_CONSOLE
fi
bool 'Support for PowerMac ADB mouse' CONFIG_ADBMOUSE
bool 'Support for PowerMac IDE devices (must also enable IDE)' CONFIG_BLK_DEV_IDE_PMAC
bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE
bool 'Include kgdb kernel debugger' CONFIG_KGDB
bool 'Include xmon kernel debugger' CONFIG_XMON
bool 'Support for TotalImpact TotalMP' CONFIG_TOTALMP
bool 'Support for early boot text console (BootX only)' CONFIG_BOOTX_TEXT
bool 'Support for Motorola Hot Swap' CONFIG_MOTOROLA_HOTSWAP
if [ "$CONFIG_PREP" = "y" -o "$CONFIG_ALL_PPC" = "y" ]; then
bool 'PReP bootloader ernel arguments' CONFIG_CMDLINE_BOOL n
if [ "$CONFIG_CMDLINE_BOOL" = "y" ] ; then
string 'Initial kernel command string' CONFIG_CMDLINE ""
fi
fi
if [ "$CONFIG_APUS" = "y" ]; then
define_bool CONFIG_FB_CONSOLE y
......@@ -177,3 +182,11 @@ if [ "$CONFIG_SOUND" != "n" ]; then
fi
endmenu
mainmenu_option next_comment
comment 'Kernel hacking'
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
bool 'Include kgdb kernel debugger' CONFIG_KGDB
bool 'Include xmon kernel debugger' CONFIG_XMON
endmenu
......@@ -27,7 +27,7 @@ O_OBJS += totalmp.o
endif
ifeq ($(CONFIG_MBX),y)
O_OBJS += mbx_setup.o mbx_pci.o softemu8xx.o
O_OBJS += mbx_setup.o mbx_pci.o softemu8xx.o i8259.o ppc8xx_pic.o
else
ifeq ($(CONFIG_APUS),y)
O_OBJS += apus_setup.o prom.o openpic.o
......@@ -36,7 +36,8 @@ ifneq ($(CONFIG_MBX),y)
O_OBJS += prep_time.o pmac_time.o chrp_time.o \
pmac_setup.o pmac_support.o \
prep_pci.o pmac_pci.o chrp_pci.o \
residual.o prom.o openpic.o feature.o
residual.o prom.o openpic.o feature.o \
prep_nvram.o open_pic.o i8259.o pmac_pic.o indirect_pci.o
OX_OBJS += chrp_setup.o prep_setup.o
endif
endif
......
......@@ -194,13 +194,8 @@ fix_alignment(struct pt_regs *regs)
return -EFAULT; /* bad address */
}
#ifdef __SMP__
if ((flags & F) && (regs->msr & MSR_FP) )
smp_giveup_fpu(current);
#else
if ((flags & F) && last_task_used_math == current)
giveup_fpu();
#endif
if ((flags & F) && (regs->msr & MSR_FP))
giveup_fpu(current);
if (flags & M)
return 0; /* too hard for now */
......@@ -254,27 +249,16 @@ fix_alignment(struct pt_regs *regs)
data.d = current->tss.fpr[reg];
break;
/* these require some floating point conversions... */
/* note that giveup_fpu enables the FPU for the kernel */
/* we'd like to use the assignment, but we have to compile
* the kernel with -msoft-float so it doesn't use the
* fp regs for copying 8-byte objects. */
case LD+F+S:
#ifdef __SMP__
if (regs->msr & MSR_FP )
smp_giveup_fpu(current);
#else
giveup_fpu();
#endif
enable_kernel_fp();
cvt_fd(&data.f, &current->tss.fpr[reg], &current->tss.fpscr);
/* current->tss.fpr[reg] = data.f; */
break;
case ST+F+S:
#ifdef __SMP__
if (regs->msr & MSR_FP )
smp_giveup_fpu(current);
#else
giveup_fpu();
#endif
enable_kernel_fp();
cvt_df(&current->tss.fpr[reg], &data.f, &current->tss.fpscr);
/* data.f = current->tss.fpr[reg]; */
break;
......
......@@ -14,12 +14,50 @@
#include <linux/sched.h>
#include <linux/kd.h>
#include <linux/init.h>
#include <linux/hdreg.h>
/* Get the IDE stuff from the 68k file */
#define ide_init_hwif_ports m68k_ide_init_hwif_ports
#define ide_default_irq m68k_ide_default_irq
#define ide_default_io_base m68k_ide_default_io_base
#define ide_check_region m68k_ide_check_region
#define ide_request_region m68k_ide_request_region
#define ide_release_region m68k_ide_release_region
#define ide_fix_driveid m68k_ide_fix_driveid
#include <asm-m68k/ide.h>
#undef ide_init_hwif_ports
#define ide_default_irq
#define ide_default_io_base
#define ide_check_region
#define ide_request_region
#define ide_release_region
#define ide_fix_driveid
#include <asm/setup.h>
#include <asm/amigahw.h>
#include <asm/amigappc.h>
#include <asm/pgtable.h>
#include <asm/io.h>
#include <asm/machdep.h>
#include <asm/ide.h>
#include "time.h"
#include "local_irq.h"
unsigned long apus_get_rtc_time(void);
int apus_set_rtc_time(unsigned long nowtime);
/* APUS defs */
extern int parse_bootinfo(const struct bi_record *);
extern char _end[];
#ifdef CONFIG_APUS
struct mem_info ramdisk;
unsigned long isa_io_base;
unsigned long isa_mem_base;
unsigned long pci_dram_offset;
#endif
/* END APUS defs */
unsigned long m68k_machtype;
char debug_device[6] = "";
......@@ -72,6 +110,8 @@ __initfunc(void apus_setup_arch(unsigned long * memory_start_p,
int i;
char *p, *q;
m68k_machtype = MACH_AMIGA;
/* Parse the command line for arch-specific options.
* For the m68k, this is currently only "debug=xxx" to enable printing
* certain kernel messages to some machine-specific device. */
......@@ -409,3 +449,194 @@ void cache_clear(__u32 addr, int length)
"isync \n\t"
: : "r" (addr));
}
void
apus_restart(char *cmd)
{
cli();
APUS_WRITE(APUS_REG_LOCK,
REGLOCK_BLACKMAGICK1|REGLOCK_BLACKMAGICK2);
APUS_WRITE(APUS_REG_LOCK,
REGLOCK_BLACKMAGICK1|REGLOCK_BLACKMAGICK3);
APUS_WRITE(APUS_REG_LOCK,
REGLOCK_BLACKMAGICK2|REGLOCK_BLACKMAGICK3);
APUS_WRITE(APUS_REG_SHADOW, REGSHADOW_SELFRESET);
APUS_WRITE(APUS_REG_RESET, REGRESET_AMIGARESET);
for(;;);
}
void
apus_power_off(void)
{
for (;;);
}
void
apus_halt(void)
{
apus_restart(NULL);
}
void
apus_do_IRQ(struct pt_regs *regs,
int cpu,
int isfake)
{
int old_level, new_level;
/* I don't think we need SMP code here - Corey */
old_level = ~(regs->mq) & IPLEMU_IPLMASK;
new_level = (~(regs->mq) >> 3) & IPLEMU_IPLMASK;
if (new_level != 0)
{
APUS_WRITE(APUS_IPL_EMU, IPLEMU_IPLMASK);
APUS_WRITE(APUS_IPL_EMU, (IPLEMU_SETRESET
| (~(new_level) & IPLEMU_IPLMASK)));
APUS_WRITE(APUS_IPL_EMU, IPLEMU_DISABLEINT);
process_int (VEC_SPUR+new_level, regs);
APUS_WRITE(APUS_IPL_EMU, IPLEMU_SETRESET | IPLEMU_DISABLEINT);
APUS_WRITE(APUS_IPL_EMU, IPLEMU_IPLMASK);
APUS_WRITE(APUS_IPL_EMU, (IPLEMU_SETRESET
| (~(old_level) & IPLEMU_IPLMASK)));
}
APUS_WRITE(APUS_IPL_EMU, IPLEMU_DISABLEINT);
}
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
/*
* IDE stuff.
*/
void
apus_ide_insw(ide_ioreg_t port, void *buf, int ns)
{
ide_insw(port, buf, ns);
}
void
apus_ide_outsw(ide_ioreg_t port, void *buf, int ns)
{
ide_outsw(port, buf, ns);
}
int
apus_ide_default_irq(ide_ioreg_t base)
{
m68k_ide_default_irq(base);
}
ide_ioreg_t
apus_ide_default_io_base(int index)
{
m68k_ide_default_io_base(index);
}
int
apus_ide_check_region(ide_ioreg_t from, unsigned int extent)
{
return m68k_ide_check_region(from, extent);
}
void
apus_ide_request_region(ide_ioreg_t from,
unsigned int extent,
const char *name)
{
m68k_ide_request_region(from, extent, name);
}
void
apus_ide_release_region(ide_ioreg_t from,
unsigned int extent)
{
m68k_ide_release_region(from, extent);
}
void
apus_ide_fix_driveid(struct hd_driveid *id)
{
m68k_ide_fix_driveid(id);
}
__initfunc(void
apus_ide_init_hwif_ports (ide_ioreg_t *p, ide_ioreg_t base, int *irq))
{
m68k_ide_init_hwif_ports(p, base, irq);
}
#endif
__initfunc(void
apus_local_init_IRQ(void))
{
ppc_md.mask_irq = amiga_disable_irq;
ppc_md.unmask_irq = amiga_enable_irq;
apus_init_IRQ();
}
__initfunc(void
apus_init(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned long r6, unsigned long r7))
{
/* Parse bootinfo. The bootinfo is located right after
the kernel bss */
parse_bootinfo((const struct bi_record *)&_end);
#ifdef CONFIG_BLK_DEV_INITRD
/* Take care of initrd if we have one. Use data from
bootinfo to avoid the need to initialize PPC
registers when kernel is booted via a PPC reset. */
if ( ramdisk.addr ) {
initrd_start = (unsigned long) __va(ramdisk.addr);
initrd_end = (unsigned long)
__va(ramdisk.size + ramdisk.addr);
}
/* Make sure code below is not executed. */
r4 = 0;
r6 = 0;
#endif /* CONFIG_BLK_DEV_INITRD */
ISA_DMA_THRESHOLD = 0x00ffffff;
ppc_md.setup_arch = apus_setup_arch;
ppc_md.setup_residual = NULL;
ppc_md.get_cpuinfo = apus_get_cpuinfo;
ppc_md.irq_cannonicalize = NULL;
ppc_md.init_IRQ = apus_init_IRQ;
ppc_md.do_IRQ = apus_do_IRQ;
ppc_md.get_irq_source = NULL;
ppc_md.init = NULL;
ppc_md.restart = apus_restart;
ppc_md.power_off = apus_power_off;
ppc_md.halt = apus_halt;
ppc_md.time_init = NULL;
ppc_md.set_rtc_time = apus_set_rtc_time;
ppc_md.get_rtc_time = apus_get_rtc_time;
ppc_md.calibrate_decr = apus_calibrate_decr;
/* These should not be used for the APUS yet, since it uses
the M68K keyboard now. */
ppc_md.kbd_setkeycode = NULL;
ppc_md.kbd_getkeycode = NULL;
ppc_md.kbd_translate = NULL;
ppc_md.kbd_unexpected_up = NULL;
ppc_md.kbd_leds = NULL;
ppc_md.kbd_init_hw = NULL;
ppc_md.kbd_sysrq_xlate = NULL;
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
ppc_ide_md.insw = apus_ide_insw;
ppc_ide_md.outsw = apus_ide_outsw;
ppc_ide_md.default_irq = apus_ide_default_irq;
ppc_ide_md.default_io_base = apus_ide_default_io_base;
ppc_ide_md.check_region = apus_ide_check_region;
ppc_ide_md.request_region = apus_ide_request_region;
ppc_ide_md.release_region = apus_ide_release_region;
ppc_ide_md.fix_driveid = apus_ide_fix_driveid;
ppc_ide_md.ide_init_hwif = apus_ide_init_hwif_ports;
ppc_ide_md.io_base = _IO_BASE;
#endif
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#include <linux/stddef.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/signal.h>
#include <asm/io.h>
#include "i8259.h"
unsigned char cached_8259[2] = { 0xff, 0xff };
#define cached_A1 (cached_8259[0])
#define cached_21 (cached_8259[1])
static void i8259_mask_and_ack_irq(unsigned int irq_nr)
{
if ( irq_nr >= i8259_pic.irq_offset )
irq_nr -= i8259_pic.irq_offset;
if (irq_nr > 7) {
cached_A1 |= 1 << (irq_nr-8);
inb(0xA1); /* DUMMY */
outb(cached_A1,0xA1);
outb(0x20,0xA0); /* Non-specific EOI */
outb(0x20,0x20); /* Non-specific EOI to cascade */
} else {
cached_21 |= 1 << irq_nr;
inb(0x21); /* DUMMY */
outb(cached_21,0x21);
outb(0x20,0x20); /* Non-specific EOI */
}
}
static void i8259_set_irq_mask(int irq_nr)
{
outb(cached_A1,0xA1);
outb(cached_21,0x21);
}
static void i8259_mask_irq(unsigned int irq_nr)
{
if ( irq_nr >= i8259_pic.irq_offset )
irq_nr -= i8259_pic.irq_offset;
if ( irq_nr < 8 )
cached_21 |= 1 << irq_nr;
else
cached_A1 |= 1 << (irq_nr-8);
i8259_set_irq_mask(irq_nr);
}
static void i8259_unmask_irq(unsigned int irq_nr)
{
if ( irq_nr >= i8259_pic.irq_offset )
irq_nr -= i8259_pic.irq_offset;
if ( irq_nr < 8 )
cached_21 &= ~(1 << irq_nr);
else
cached_A1 &= ~(1 << (irq_nr-8));
i8259_set_irq_mask(irq_nr);
}
struct hw_interrupt_type i8259_pic = {
" i8259 ",
NULL,
NULL,
NULL,
i8259_unmask_irq,
i8259_mask_irq,
i8259_mask_and_ack_irq,
0
};
static void
no_action(int cpl, void *dev_id, struct pt_regs *regs)
{
}
void __init i8259_init(void)
{
/* init master interrupt controller */
outb(0x11, 0x20); /* Start init sequence */
outb(0x00, 0x21); /* Vector base */
outb(0x04, 0x21); /* edge tiggered, Cascade (slave) on IRQ2 */
outb(0x01, 0x21); /* Select 8086 mode */
outb(0xFF, 0x21); /* Mask all */
/* init slave interrupt controller */
outb(0x11, 0xA0); /* Start init sequence */
outb(0x08, 0xA1); /* Vector base */
outb(0x02, 0xA1); /* edge triggered, Cascade (slave) on IRQ2 */
outb(0x01, 0xA1); /* Select 8086 mode */
outb(0xFF, 0xA1); /* Mask all */
outb(cached_A1, 0xA1);
outb(cached_21, 0x21);
request_irq( i8259_pic.irq_offset + 2, no_action, SA_INTERRUPT,
"82c59 secondary cascade", NULL );
enable_irq(i8259_pic.irq_offset + 2); /* Enable cascade interrupt */
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment