Commit c5a4ebcd authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.67

parent 09e6af9e
......@@ -25,6 +25,14 @@ S: INR (Ecublens)
S: CH-1015 Lausanne
S: Switzerland
N: Tim Alpaerts
E: tim_alpaerts@toyota-motor-europe.com
D: 802.2 class II logical link control layer,
D: the humble start of an opening towards the IBM SNA protocols
S: Klaproosstraat 72 c 10
S: B-2610 Wilrijk-Antwerpen
S: Belgium
N: H. Peter Anvin
E: hpa@zytor.com
W: http://www.zytor.com/~hpa/
......@@ -144,11 +152,11 @@ D: Original author of the Linux networking code
N: Philip Blundell
E: Philip.Blundell@pobox.com
D: Device driver hacking (especially EtherExpress16/3C505 net cards)
D: Device driver hacking
D: Some Linux/ARM stuff
D: Co-architect of the parallel port sharing system
S: 201 Gilbert Road
S: Cambridge, UK. CB4 3PA
S: Nexus Electronics Ltd
S: 10 St Barnabas Road, Cambridge, UK. CB1 2BY
N: Thomas Bogendoerfer
E: tsbogend@alpha.franken.de
......@@ -359,6 +367,11 @@ S: Grevenbroicher Str. 17
S: 47807 Krefeld
S: Germany
N: Tom Dyas
E: tdyas@eden.rutgers.edu
D: minor hacks and some sparc port stuff
S: New Jersey, USA
N: Drew Eckhardt
E: drew@PoohSticks.ORG
D: SCSI code
......@@ -505,6 +518,15 @@ S: P.O. Box 76, Epping
S: N.S.W., 2121
S: Australia
N: Richard E. Gooch
E: rgooch@atnf.csiro.au
D: parent process death signal to children
D: prctl() syscall
S: CSIRO Australia Telescope National Facility
S: P.O. Box 76, Epping
S: N.S.W., 2121
S: Australia
N: Dmitry S. Gorodchanin
E: begemot@bgm.rosprint.net
D: RISCom/8 driver, misc kernel fixes.
......@@ -606,9 +628,12 @@ S: 34131 Kassel
S: Germany
N: Richard Henderson
E: richard@gnu.ai.mit.edu
E: rth@cygnus.com
E: richard@gnu.org
D: Alpha/ELF, gcc, binutils, and glibc
S: 5450 Mayme #25
S: San Jose, California 95129
S: USA
N: Sebastian Hetze
E: she@lunetix.de
......@@ -798,6 +823,13 @@ N: Rudolf Koenig
E: rfkoenig@immd4.informatik.uni-erlangen.de
D: The Linux Support Team Erlangen
N: Andi Kleen
E: ak@muc.de
D: network hacker, syncookies
S: Schwalbenstr. 96
S: 85551 Ottobrunn
S: Germany
N: Willy Konynenberg
E: willy@xos.nl
W: http://www.xos.nl/
......@@ -850,6 +882,13 @@ E: lam836@cs.cuhk.hk
D: Author of the dialog utility, foundation
D: for Menuconfig's lxdialog.
N: Tom Lees
E: tom@lpsg.demon.co.uk
W: http://www.lpsg.demon.co.uk/
P: 1024/87D4D065 2A 66 86 9D 02 4D A6 1E B8 A2 17 9D 4F 9B 89 D6
D: Original author and current maintainer of
D: PnP code.
N: David van Leeuwen
E: david@tm.tno.nl
D: Philips/LMS cm206 cdrom driver, generic cdrom driver
......@@ -950,6 +989,7 @@ D: Initial implementation of VC's, pty's and select()
N: Pavel Machek
E: pavel@atrey.karlin.mff.cuni.cz
D: Softcursor for vga, hypertech cdrom support, vcsa bugfix
D: Network block device
S: Volkova 1131
S: 198 00 Praha 9
S: Czech Republic
......@@ -980,12 +1020,12 @@ S: Halifax, Nova Scotia
S: Canada B3J 3C8
N: Martin Mares
E: mj@k332.feld.cvut.cz
E: mj@atrey.karlin.mff.cuni.cz
W: http://atrey.karlin.mff.cuni.cz/~mj/
D: BIOS video mode handling code
D: Miscellaneous kernel fixes and hacks
D: MOXA C-218 serial board driver
D: BOOTP support
D: Network autoconfiguration
D: Random kernel hacking
S: Kankovskeho 1241
S: 182 00 Praha 8
S: Czech Republic
......@@ -1182,6 +1222,15 @@ N: David Parsons
E: orc@pell.chi.il.us
D: improved memory detection code.
N: Vojtech Pavlik
E: vojtech@atrey.karlin.mff.cuni.cz
D: Joystick driver
D: arcnet-hardware readme
D: Minor ARCnet hacking
S: Ucitelska 1576
S: Prague 8
S: 182 00 Czech Republic
N: Barak A. Pearlmutter
E: bap@cs.unm.edu
W: http://www.cs.unm.edu/~bap/
......@@ -1209,6 +1258,11 @@ S: Demonstratsii 8-382
S: Tula 300000
S: Russia
N: Kirk Petersen
E: kirk@speakeasy.org
W: http://www.speakeasy.org/~kirk/
D: modularized BSD Unix domain sockets
N: Kai Petzke
E: wpp@marie.physik.tu-berlin.de
W: http://physik.tu-berlin.de/~wpp
......@@ -1660,8 +1714,8 @@ S: 73650 Winterbach
S: Germany
N: Marco van Wieringen
E: mvw@mercury.mcs.nl.mugnet.org
D: Author of acct and quota
E: mvw@planets.elm.net
D: Author of process accounting and diskquota
S: Breeburgsingel 12
S: 2135 CN Hoofddorp
S: The Netherlands
......@@ -1700,6 +1754,7 @@ N: David Woodhouse
E: dwmw2@cam.ac.uk
D: Extensive ARCnet rewrite
D: ARCnet COM20020, COM90xx IO-MAP drivers
D: SO_BINDTODEVICE in 2.1.x (from Elliot Poger's code in 2.0.31)
S: Robinson College, Grange Road
S: Cambridge. CB3 9AN
S: England
......
This diff is collapsed.
Software cursor for VGA by Pavel Machek <pavel@atrey.karlin.mff.cuni.cz>
======================= & Martin Mares <mj@atrey.karlin.mff.cuni.cz>
Linux now has some ability to manipulate cursor appearance. Normally, you
can set the size of hardware cursor (and also work-around some ugly bugs in
those miserable Trident cards -- see #define TRIDENT_GLITCH in drivers/char/
vga.c). In case you enable "Software generated cursor" in the system
configuration, you can play few new tricks: you can make your cursor look
like a non-blinking red block, make it inverse background of the character
it's over or to highlight that character and still choose whether the
original hardware cursor should remain visible or not. And maybe other
things I have never thought of.
The cursor appearance is controlled by a "<ESC>[?1;2;3c" escape sequence
where 1, 2 and 3 are parameters described below. If you omit any of them,
they will default to zeroes.
Parameter #1 specifies cursor size (0=default, 1=invisible, 2=underline, ...,
8=full block) + 16 if you want the software cursor to be applied + 32 if you
want to always change the background color + 64 if you dislike background same
as foreground. (Highlights are ignored for the last two flags.)
The second parameter selects character attribute bits you want to change
(by simple XOR'ing them with the value of this parameter). On standard VGA,
the high 4 bits specify background and the low 4 the foreground. In both
groups, low 3 bits set color (as in normal color codes used by the console)
and the most significant one turns on highlight (or sometimes blinking -- it
depends on the configuration of your VGA).
And the third parameter consists of character attribute bits you want
to set. Bit setting takes place before bit toggling, so you can simply
clear a bit by including it in both the set mask and the toggle mask.
Cyrix Processor Support
-----------------------
Processor Recognition
---------------------
Cyrix processors prior to the 6x86MX power up in a default mode
designed to avoid compatibility problems with software that
makes assumptions about processor capabilities based solely on
the apparent family of processor. Unless special handling is
provided Cyrix chips will be identified as some unknown model
of 486.
The Cyrix processor recognition kernel build option compiles
in code that enables the CPUID instruction on Cyrix processors
and that uses the Cyrix specific DEVID feature to identify the
particular type of Cyrix chip present.
The 6x86MX and later processors have CPUID enabled by default
however special handling is still required to read the specific
processor type using DEVID since the CPUID information gives
family 6, model 0 - i.e. an A step PPro.
The combination of CPUID and DEVID allows all current Cyrix
processors to be recognised and listed correctly in /proc/cpuinfo.
This includes Cx486, 5x86, 6x86, Gx86 (aka MediaGx) and 6x86MX.
Processor recognition is required for all other Cyrix specific
options.
Suspend on Halt Power Saving
----------------------------
The suspend on halt power saving feature allows the processor to
enter a low power mode when the "hlt" instruction is executed. This
results in dramatically reduced operating temperatures if you do
not spend long periods of time running processor intensive tasks.
Cyrix processors allow this feature to be enabled an disabled
through their configuration registers. The default state on reset
is disabled and many (most?) BIOSs leave it disabled hence a
kernel configuration option is provided that adds code to explicitly
enabled suspend on halt when Linux boots.
However there appear to be a few rare cases in which the
combination of suspend on halt and some bus master DMA cards can
cause the system to lock up. If this appears to happen you may
need to leave suspend on halt in its default state. (Note that
an option to _disable_ suspend on halt is not provided. If your
BIOS enables it you have to live with it)
5x86 Performance Features
-------------------------
The 5x86 contains a performance control register that allows
several performance enhancing features to be turned on. Unfortunately
many of these features do not appear to work correctly. The 5x86
performance features kernel build option will attempt to set
the performance control register appropriately but it is
impossible to guarantee that even these conservative settings
will work on all chips.
WARNING: If this is enabled you may find that the only way to
reboot is to power cycle the machine. Even a hard reboot seems
to fail on some systems.
6x86 Performance Features
-------------------------
Like the 5x86 the 6x86 has several Cyrix specific performance
features. Normally a 6x86 aware BIOS will set these to reasonable,
if not fully optimal, settings. The 6x86 performance features
kernel build option mostly just fine tunes them.
6x86 Branch Prediction
----------------------
The 6x86 uses speculative execution coupled with several levels
of branch prediction to maximise processing speed. While the
default power up state is reasonable the branch prediction logic
is configurable and there may be some benefit in fine tuning it.
Unfortunately Cyrix offer no documentation on how to configure
branch prediction and IBM have only partial documentation available.
Further detail and speculation is available from the 6x86opt package
by Mikael Johansson <Mikael.Johansson@helsinki.fi>.
The initial power up state of the 6x86 configures the branch
prediction logic to handle short branches. The 6x86 branch target
buffer features kernel build option enables code that enables
handling of long branches as well. It is not clear if this will
benefit in your particular case or not.
6x86 Variable Sized Paging Mechanism
------------------------------------
The variable sized paging mechanism (VSPM) is a feature of the Cyrix
6x86 family of processors that allows large regions of memory
to be mapped using a single MMU entry rather than many individual
page sized entries. This significantly reduces the overhead in
accessing such regions. It is also ideally suited to use for the
linear mapping of physical memory to kernel memory used by Linux.
The Cyrix documenation offers only a brief paragraph of explanation.
Unfortunately the observed behaviour of VSPM suggests that even
this little information is not entirely correct. Worse still, no one
at Cyrix is able to answer questions concerning VSPM. Given that
every revision of 6x86 has *different* VSPM bugs this is not entirely
surprising! Work arounds are in place for the known bugs in step 1,
revisions 4, 5 and 6 chips. Revision 7 is also believed to work.
WARNING: There appears to be no way to disable a VSPM entry once
it has been created short of a hard reset (which may mean a power
cycle). Failure to clear the VSPM entries means that programs that
use virtual memory layouts different from Linux will crash unexpectedly
after Linux has been running. This includes Windows NT/95, programs
that use DOS extenders etc.
By experiment:
* VSPM pages must be power of two sizes. A single 24MB page fails.
This is not entirely surprising but the documentation could give
the impression that VSPM supports arbitrary sizes.
* Documentation suggests there are 8 VSPM slots (3 bit index) but
tests show the upper four slots mirror the lower four.
* VSPM entries appear to override traditional page table entries
so we must not overlap the start of the vmalloc region.
The following only apply to 1 rev 6 and lower chips. 1 rev 7 and
above do not appear to have these problems.
* With a 16MB page followed by an 8MB page I always get a write
fault on the last 4k of the 8MB page. With 8MB plus 4MB I can't
even boot.
If we have such a memory size we map the first power of two
with a VSPM entry and use traditional paging for the rest.
* Do not try and create a mapping with dirty and accessed flags
clear - a step 1 rev 5 chip will crash.
* The valid bit in a VSPM entry is non-functional. There is no way
to invalidate a VSPM entry once it has been written.
* Attempting to replace a VSPM entry with one that maps a zero
sized region from 0 to 0 crashes the CPU.
What more could be done
-----------------------
Disabling write allocate while we do page copies/clears will
avoid unnecessary cache trashing. However it will also reduce
the apparent memory bandwidth for the operation so it runs
slower (with write allocate the write to memory becomes delayed
and happens asynchronously). Rumour has it that disabling
write allocate for such operations is generally good on an
Intel chip. Disabling and re-enabling write allocate on a
Cyrix would take and extra 60-65 clock cycles each.
The 6x86 allows Address regions to be set up and en/disabling
certain features for these regions. In order to optimize, we could
analyse the setup done (or not done) by the BIOS and optimize it.
However, it is worth noting that the BIOS probably has more
hardware specific details coded in it than we could ever determine
by any form of probing so if it sets something up in a particular
way the motherboard designers may have had very good reasons for
doing it. Trying to play fast and loose may not be such a good
idea for the general case.
* Setting up regions fo the main memory: RCE, WWO, WL(?), WG
* Setting up VGA text (0x000a0000) and graphics memory (PCI:
e.g. 0xe0000000) to RCD, WG
* Setting up BIOS regions to RCD or RCE, WT
* Not touching SMM space (ARR3)
* Disabling WG for Memory Mapped IO
(RCE/D = Region cache enable/disable, WWO = Weak Write Ordering,
WL = Weak Locking, WG = Write Gathering, WT = Write Through.)
Where to get information
------------------------
There is a databook in PDF format (6X-DBOOK.PDF), which can be down-
loaded from Cyrix' WWW server, which contains a description of the
Configuration Registers CCR0 - CCR5, the Device Identification Registers
DIR0 + DIR1 and the Address Region ARRx and Region Control
RCRx registers and an incomplete description of the VSPM mechanism.
More about CPU detection, VSPM and more undocumented features can be
found on the Pentium Compiler Group homepage (http://www.goof.com/pcg)
and by following the links found in the docs.
......@@ -4,7 +4,7 @@
% pages to print... :-) If you're actually putting this in print, you
% may wish to change these.
%
% $Id: devices.tex,v 1.3 1997/11/10 01:29:35 hpa Exp $
% $Id: devices.tex,v 1.28 1997/11/12 23:59:41 davem Exp $
%
\oddsidemargin=0in
\textwidth=6.5in
......
......@@ -91,6 +91,7 @@ Code Seq# Include File Comments
<mailto:natalia@nikhefk.nikhef.nl>
'c' all linux/comstats.h
'f' all linux/ext2_fs.h
'j' 00-3F linux/joystick.h
'k' all asm-sparc/kbio.h, asm-sparc64/kbio.h
'l' 00-3F linux/tcfs_fs.h in development:
<http://mikonos.dia.unisa.it/tcfs>
......@@ -125,3 +126,4 @@ Code Seq# Include File Comments
<mailto:tlewis@mindspring.com>
0xA3 90-9F DoubleTalk driver in development:
<mailto:jrv@vanzandt.mv.com>
0xAB 00-06 Network block device
PC Joystick driver v1.0.6 beta
(c) 1997 Vojtech Pavlik <vojtech@atrey.karlin.mff.cuni.cz>
----------------------------------------------------------------------------
1. Intro
~~~~~~~~
The PC Joystick driver for Linux provides support for analog (variable
resistor based) and digital (switch based) joysticks connected via the PC
game port. It can support up to 2 joysticks.
Because the joystick driver is still in its beta stage I'm very interested
in any problems you encounter while using it. Bug reports and success
stories are also welcome.
2. Usage
~~~~~~~~
If you enable the joystick driver in the kernel configuration, all
connected joystick should be found automatically. If that doesn't work, you
can pass the joystick driver the following kernel command line arguments:
js=0xXX,0xYY
Where XX and YY are bit masks for the two joysticks, with the bits
representing:
Bit | Explanation
-----------------
0 | Axis 0
1 | Axis 1
2 | Axis 2
3 | Axis 3
4 | Button 0
5 | Button 1
6 | Button 2
7 | Button 3
These bitmasks are ANDed with what's found by the driver and the result is
used.
Another method of using the driver is loading it as a module. For that,
select `M' for this driver in the kernel configuration and insert the
module:
insmod js.o js=0xXX,0xYY
To enable the user space programs to read the joystick device, you have to
create the device files using mknod (man mknod for more info):
mknod /dev/js0 c 15 0
mknod /dev/js1 c 15 1
3. Calibration
~~~~~~~~~~~~~~
As of version 1.0 the calibration routines used in the joystick driver are
worth using. The idea of calibration is that you have to calibrate the
joystick only once, and then set the calibration at boot-time, thus removing
the need of re-calibrating it in each program that uses it.
For calibration, use the jscal program, contained in the joystick package
which is available at:
ftp://atrey.karlin.mff.cuni.cz/pub/local/vojtech/joystick/joystick-1.0.6.tar.gz
And soon also at:
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/console/joystick-1.0.6.tar.gz
4. Programming Interface
~~~~~~~~~~~~~~~~~~~~~~~~
The 1.0 driver uses a new, event based approach to the joystick driver.
Instead of the user program polling for the joystick values, the joystick
driver now reports only any changes of its state. See joystick.h and
jstest.c included in the joystick package for more information. The joystick
device can be used in either blocking or nonblocking mode and supports
select() calls.
For backward compatibility the old interface is still included, but will
be dropped in the future.
5. Credits
~~~~~~~~~~
Thanks to the following authors that contributed to the joystick driver
development:
0.1-0.5 Arthur C. Smith <asmith@cbnewsd.att.com>
0.5 Eyal Lebedinsky <eyal@eyal.emu.id.au>
0.6 Jeff Tranter <tranter@software.mitel.com>
0.7 Carlos Puchol <cpg@cs.utexas.edu>
0.7.1-0.8 Matt Rhoten <mrhoten@oz.net>
0.7.3 Dan Fandrich <dan@fch.wimsey.bc.ca>
0.7.3 Sverker Wilberg <sverkerw@manila.docs.uu.se>
0.8 Hal Maney <maney@norden.com>
0.8 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
0.9 Alan Cox <alan@cymru.net>
0.9.0-1.0.6 Vojtech Pavlik <vojtech@atrey.karlin.mff.cuni.cz>
6. Change Log
~~~~~~~~~~~~~
The current (1.0.x) version was originally based on the 0.7.3 version of
the joystick driver, which caused some inconsistencies in version numbering.
The following log documents all changes done to the driver by various
contributors:
Version 0.1 Original version
Works but lacks multi-joystick support
Version 0.2 Added multi-joystick support (minor 0 and 1)
Added delay between measuring joystick axis
Added scaling ioctl
Version 0.3 Modified scaling to use ints to prevent kernel
panics 8-)
Version 0.4 Linux 0.99.6 and fixed race condition in js_read.
After looking at a schematic of a joystick card
it became apparent that any write to the joystick
port started ALL the joystick one shots. If the
one that we are reading is short enough and the
first one to be read, the second one will return
bad data if it's one shot has not expired when
the joystick port is written for the second time.
Thus solves the mystery delay problem in 0.2!
Version 0.5 Upgraded the driver to the 0.99.9 kernel, added
joystick support to the make config options,
updated the driver to return the buttons as
positive logic, and read both axis at once
and added some new ioctls.
Version 0.6 Made necessary changes to work with 0.99.15
kernel (and hopefully 1.0). Also did some
cleanup: indented code, fixed some typos, wrote
man page, etc ...
Version 0.7 Support for modules
Version 0.7.1 Fix bug in reading button state of js1
Add include so module compiles under recent kernels
Version 0.7.3 Include directives changed for joystick.h
Separated out joystick detection/counting, cleanup
Fix for detection of 3-axis joysticks
Better detection announcement
Added I/O port registration, cleaned up code
Version 0.8 New read loop
Cleaned up #includes to allow #include of joystick.h with
gcc -Wall and from g++
Made js_init fail if it finds zero joysticks
General source/comment cleanup
Use of MOD_(INC|DEC)_USE_COUNT
Changes to compile correctly under 1.3 in kernel or as module
Version 0.9 Ported to 2.1.x
Reformatted to resemble Linux coding standard
Removed semaphore bug (we can dump the lot I think)
Fixed xntp timer adjust during joystick timer0 bug
Changed variable names to lower case. Kept binary compatibility.
Better ioctl names. Kept binary compatibility.
Removed 'save_busy'. Just set busy to 1.
Version 0.9.0 Based on 0.7.3
New read function that allows two axes have same value
New joystick calibration code
Real support for 3-axis joysticks
CPU speed independent timeouts
Reads may happen even for unwhole record size => cat /dev/js0 works
Correct error for lseek
/dev/js? can be read simultaneously by several processes
Version 0.9.1 IOCTLs now obey general Linux IOCTL rules ('j' letter assigned)
Use of verify_area result codes
Fuzz correction added
Semaphore and many cli()'s removed
Fix for TurboFire joysticks - read buttons always
Fix for broken joysticks - return with -ENODEV only if joystick
completely disconnected
Fix in read function to allow zero results
Broken line correction added for broken joysticks (eg. JB-500)
Timeouts back separated for easier setting
Some fixes and cleanups in read function
Version 0.9.2 Fixed a typo causing nothing to be working
Version 1.0.0 Event approach started
Version 1.0.1 Complete rewrite
Compiles but doesn't work
Version 1.0.2 Works, many bugs fixed, more yet to come
Version 1.0.3 Tail cutting logic changes & fixes
Fix in js_do_bh - no more zero values for axes
Lost event changest & fixes
Version 1.0.4 Kernel command line & module configuration support
Better cli()/sti() handling
Linux 2.1.25 select => poll changes
Version 1.0.5 Fixes in calibration routines
Better jscal
Version 1.0.6 Backward compatibility with old js driver added
Init value after recalibration bug fixed
Using KERN_* printk() codes
Finally leaving ALPHA and going beta
Cosmetic changes
7. To do
~~~~~~~~
Sooner or later I'll get to these:
Backport & create patches for 2.0
Try using Pentium timers for better precision
Create patches for most common programs using joystick
Support for cards with hw calibration (Gravis Ultrasound, QuickShot)
Support for multiport cards (QuickShot 4-joy board)
Support for multiaxis, multibutton joysticks (Gravis Firebird)
Support for MS digital joystick
00-INDEX
- this file
amiboot.txt
- info and options for the Linux/m68k Amiga bootstrap (Amiboot)
framebuffer.txt
- info about the Linux/m68k frame buffer device
kernel-options.txt
......
Linux/m68k Amiga Bootstrap version 5.6
--------------------------------------
Maintained by Geert Uytterhoeven (Geert.Uytterhoeven@cs.kuleuven.ac.be)
Last revised: June 12, 1997
0. Introduction
---------------
Amiboot is used to boot Linux/m68k on Amiga from the CLI/Shell.
Before you try to boot Linux/m68k for the first time, please read the FAQ
http://www.clark.net/pub/lawrencc/linux/faq/faq.html
and the Installation Guide
http://www.informatik.uni-oldenburg.de/~amigo/inst.html
first. Although the Installation Guide is getting a bit outdated, it's still a
good starting point.
Amiboot 5.6 is meant for Linux/m68k 2.0.x, 2.1.x or higher (kernel bootinfo
interface versions 1.x and 2.x). Please use an older version for older kernels.
1. Running Amiboot
------------------
The Amiboot invocation syntax looks like
amiboot [options] [kernel command line]
Basic options:
--help Display the usage information
--kernel file Use kernel image `file' (default is `vmlinux')
--ramdisk file Use ramdisk image `file'
Advanced options:
--debug Enable debug mode
--baud speed Set the serial port speed (default is 9600 bps)
--memfile file Use memory file `file'
--keep-video Don't reset the video mode
--model id Set the Amiga model to `id'
--processor cfm Set the processor type to `cfm'
The kernel command line contains the options you want to pass to the kernel and
to init, the process that's started first by Linux. Please read
linux/Documentation/m68k/kernel-options.txt for more information.
Normally you only use the --kernel option to specify the file that contains the
Linux/m68k kernel image, and --ramdisk if you want to boot from a ramdisk file,
i.e. a file containing a complete file system, instead of from a hard disk
partition.
Note that both the kernel image and the ramdisk image can be compressed with
gzip. Amiboot knows how to deal with gzipped kernel images, and the kernel
recognizes gzipped ramdisk images.
Example:
amiboot -k vmlinux-2.1.13 root=/dev/hda3 video=font:PEARL8x8
Amiboot will boot the kernel image `vmlinux-2.1.13' and will pass
`root=/dev/hda3 video=font:PEARL8x8' to the kernel.
The other options are more advanced. Don't use them unless you really have to
and you know what you're doing.
The --baud option allows you to specify the serial port speed for initial boot
information and initial kernel messages. Note: this option does not work with
kernels with bootinfo interface versions prior to 2.0.
The --memfile option is used to specify the blocks of memory that will be used
by Linux.
The --keep-video option is necessary if you want to retain the current graphics
mode (on a graphics board) under Linux. Currently this is only useful if you
have a CyberVision 64 graphics board.
Finally, --model and --processor allow you to specify your Amiga model and
processor type if they are detected incorrectly, and --debug dumps some
information which simplifies debugging.
2. The memory file
------------------
If you have some non-AutoConfig memory you want to use under Linux, or if you
want to disable some parts of your memory (e.g. Zorro II RAM on '040 based
systems), you have to use a memory file and the --memfile option. This file
contains information about the memory chunks you want to use under Linux. The
format for the file is:
chipramsize
[0xfastchunkaddr fastchunksize]
[0xfastchunkaddr fastchunksize]
...
For example, if you don't want Linux to use your 2nd meg of chipram, you would
create a file that contains only:
1048576
If you had 1M of chip ram, 2M of 16 bit FAST ram at address 0x200000 and 16M of
32 bit FAST ram at address 0x80000000, and you didn't want Linux to use the
slow 16 bit FAST ram, you'd create a file that looks like:
1048576
0x80000000 16777216
The memory file can also be used to specify in which block of memory the kernel
will be put. Normally Amiboot will put the kernel in the first block of Fast
RAM it will find. If you use a memory file, it will put the kernel in the first
block of fast RAM you specify.
3. Amiga models
---------------
If Amiboot incorrectly detects the model of your Amiga, you can force it to
detect any model you want using the --model option. `id' must be one of the
numbers as defined in linux/include/asm-m68k/amigahw.h (AMI_*). Currently the
following models are known:
Model ID
----- --
Amiga 500 1
Amiga 500+ 2
Amiga 600 3
Amiga 1000 4
Amiga 1200 5
Amiga 2000 6
Amiga 2500 7
Amiga 3000 8
Amiga 3000T 9
Amiga 3000+ 10
Amiga 4000 11
Amiga 4000T 12
CDTV 13
CD32 14
Draco 15
Note that Amiboot can't distinguish among Amiga models that are very similar to
each other (e.g. A500/A1000/A2000/A2500 and A3000/A3000T). Of course this is
harmless and there's no real need to use --model in that case.
Please send me the output of amiboot used with the --debug option if your Amiga
model is detected incorrectly.
4. Processor types
------------------
If your processor is detected incorrectly, you can override this using the
`--processor cfm' option. `cfm' must be a three-digit number with
- `c' the CPU (Central Processing Unit) type,
- 'f' the FPU (Floating Point Unit) type,
- 'm' the MMU (Memory Management Unit) type,
from the table below:
value | CPU | FPU | MMU
-------+-------+-------+-------
0 | - | - | -
1 | 68020 | 68881 | 68851
2 | 68030 | 68882 | 68030
3 | 68040 | 68040 | 68040
4 | 68060 | 68060 | 68060
e.g. `444' if you have a 68060 and `303' if you have a 68LC040.
Note that normally you don't have to use this option. It's only needed for some
combinations of an old Kickstart ROM and a new processor (e.g. a 68060).
5. Abbreviations
----------------
All options also have a shorthand:
--help -h
--kernel -k
--ramdisk -r
--debug -d
--baud -b
--memfile -m
--keep-video -v
--model -t
--processor -p
6. Miscellaneous
----------------
Some expansion boards keep on generating interrupts once they were initialized
under AmigaOS. This can cause an interrupt deadlock while booting Linux. The
following boards are recognized and disabled:
o Helfrich Rainbow 3 Graphics Board
o Helfrich Piccolo Graphics Board
o Helfrich SD64 Graphics Board
o Village Tronic Ariadne Ethernet Board
o Hydra Systems Amiganet Ethernet Board
The following boards are known to cause problems but we don't have a disable
routine for them yet:
o Commodore A2060 Arcnet Card
o Ameristar A560 Arcnet Card
If you write a routine to disable an expansion board, please let me know.
7. Troubleshooting
------------------
- Amiboot says
This bootstrap is too old/new for this kernel
This means that you're using a version of Amiboot that's not compatible
with the kernel you want to boot.
Solution: use the correct Amiboot, or use another kernel.
- Amiboot says
Warning: too many AutoConfig devices. Ignoring device at 0x????????
or
Warning: too many memory blocks. Ignoring block of ???K at 0x????????
This means that you have more AutoConfig devices or memory chunks than
Amiboot supports. Note that you can still boot Linux/m68k, but that the
additional devices or memory blocks can't be used.
Solution: increase the ZORRO_NUM_AUTO (for AutoConfig devices) or
NUM_MEMINFO (for memory chunks) values in the kernel sources
(linux/include/asm-m68k/zorro.h and linux/include/asm-m68k/setup.h) and
recompile both Amiboot and the kernel.
- If all you get is a grey screen, or if Linux/m68k suddenly locks up during
booting, try the following things:
o Boot with the Startup-Sequence disabled, run SetPatch and try again.
o If that doesn't work, remove any expansion devices and retry.
o Check the detected Amiga model and processor type.
o Look at the characters that are dumped to the serial port during
booting.
8. Amiga-Lilo
-------------
Once you have a stable Linux/m68k installation, you may want to try Amiga-Lilo.
Amiga-Lilo allows you to boot Linux/m68k without the overhead of booting
AmigaOS first, and it provides you with a boot menu.
9. Credits
----------
This readme was written by Geert Uytterhoeven. A lot of information was taken
from the ANNOUNCE-* files by Hamish Macdonald.
......@@ -3,8 +3,8 @@
Command Line Options for Linux/m68k
===================================
Date: Sep 14, 1996
Linux/m68k version: 2.0.20
Date: Oct 6, 1997
Linux/m68k version: 2.0.21
Author: Roman.Hodek@informatik.uni-erlangen.de (Roman Hodek)
Update: jds@kom.auc.dk (Jes Sorensen)
......@@ -312,9 +312,11 @@ don't need to expand the sound.
4.1) video=
--------------
Syntax: video=<sub-options...>
Syntax: video=<fbname>:<sub-options...>
The <sub-options> is a comma-separated list of the sub-options listed
The <fbname> parameter specifies the name of the frame buffer,
eg. most atari users will want to specify `atafb' here. The
<sub-options> is a comma-separated list of the sub-options listed
below.
NB: Please notice that this option was renamed from `atavideo' to
......@@ -322,6 +324,9 @@ NB: Please notice that this option was renamed from `atavideo' to
might need to update your boot-scripts if upgrading to 2.0.x from
an 1.2.13ply kernel.
NBB: The behavior of video= was changed in 2.1.57 so the recommended
option is to specify the name of the frame buffer.
4.1.1) Video Mode
-----------------
......@@ -420,7 +425,7 @@ These sub-options are generally only useful together with "internal:".
Syntax:
external:<xres>;<yres>;<depth>;<org>;<scrmem>[;<scrlen>[;<vgabase>\
[;<colw>[;<coltype>]]]]
[;<colw>[;<coltype>[;<xres_virtual>]]]]]
[I had to break this line...]
......@@ -496,6 +501,14 @@ about the color register model of your gfx board. Currently, the types
"vga" (which is also the default) and "mv300" (SANG MV300) are
implemented.
Parameter <xres_virtual> is required for ProMST or ET4000 cards where
the physical linelength differs from the visible length. With ProMST,
xres_virtual must be set to 2048. For ET4000, xres_virtual depends on the
initialisation of the video-card.
If you're missing a corresponding yres_virtual: the external part is legacy,
therefore we don't support hardware-dependend functions like hardware-scroll,
panning or blanking.
4.1.8) eclock:
--------------
......@@ -645,7 +658,13 @@ ignored (other aren't affected).
5.1) video=
-----------
Syntax: video=<sub-options...>
Syntax: video=<fbname>:<sub-options...>
The <fbname> parameter specifies the name of the frame buffer, valid
options are `amifb', `cyberfb', `retz3' and `clgen', provided that the
respective frame buffer devices have been compiled into the kernel (or
compiled as loadable modules). The behavior of the <fbname> option was
changed in 2.1.57 so it is now recommended to specify this option.
The <sub-options> is a comma-separated list of the sub-options listed
below. This option is organized similar to the Atari version of the
......
......@@ -3,15 +3,12 @@ in the Linux kernel. This is not a technical description on
the internals of module, but mostly a sample of how to compile
and use modules.
Note: You should ensure that the modules-X.Y.Z.tar.gz you are using
Note: You should ensure that the modutils-X.Y.Z.tar.gz you are using
is the most up to date one for this kernel. The "X.Y.Z" will reflect
the kernel version at the time of the release of the modules package.
Some older modules packages aren't aware of some of the newer modular
features that the kernel now supports. (If you are unsure, you can
usually find out what the current release of the modules-X.Y.Z.tar.gz
package is by looking up the URL listed for "Bjorn Ekwall" in the
file ./linux/CREDITS)
features that the kernel now supports. The current required version
is listed in the file linux/Documentation/Changes.
In the beginning...
-------------------
......
Network Block Device (TCP version)
Note: Network Block Device is now experimental, which approximately
means, that it works on my computer, and it worked on one of school
computers.
What is it: With this think compiled in kernel, linux can use remote
server as one of its block devices. So every time client computer
wants to read /dev/nd0, it will send request over TCP to server, which
will reply with data readed. This can be used for stations with
low-disk space (or even disklesses - if you boot from floppy) to
borrow disk space from other computer. Unlike NFS, it is possible to
put any filesystem on it etc. It is impossible to use NBD as root
filesystem, since it requires user-level program to start. It also
allows you to run block-device in user land (making server and client
physicaly same computer, communicating using loopback).
Current state: It currently works. Network block device looks like
being pretty stable. I originaly thought that it is impossible to swap
over TCP. It turned out not to be true - swapping over TCP now works
and seems to be deadlock-free, but it requires heavy patches into
Linux's network layer.
Devices: Network block device uses major 43, minors 0..n (where n is
configurable in nbd.h). Create these files by mknod when needed. After
that, your ls -l /dev/ should look like:
brw-rw-rw- 1 root root 43, 0 Apr 11 00:28 nd0
brw-rw-rw- 1 root root 43, 1 Apr 11 00:28 nd1
...
Protocol: Userland program passes file handle with connected TCP
socket to actuall kernel driver. This way, kernel does not have to
care about connecting etc. Protocol is rather simple: If driver is
asked to read from block device, it sends packet of following form
"request" (all data are in network byte order):
__u32 magic; must be equal to 0x12560953
__u32 from; position in bytes to read from / write at
__u32 len; number of bytes to be read / written
__u64 handle; handle of operation
__u32 type; 0 = read
1 = write
... in case of write operation, this is
immediately followed len bytes of data
When operation is completed, server responds with packet of following
structure "reply":
__u32 magic; must be equal to
__u64 handle; handle copyied from request
__u32 error; 0 = operation completed successfully,
else error code
... in case of read operation with no error,
this is immediately followed len bytes of data
For more information, look at http://atrey.karlin.mff.cuni.cz/~pavel.
\title{PLIP: The Parallel Line Internet Protocol Device}
PLIP: The Parallel Line Internet Protocol Device
\author{ Donald Becker (becker@super.org)}
\affiliation{I.D.A. Supercomputing Research Center, Bowie MD 20715}
Donald Becker (becker@super.org)
I.D.A. Supercomputing Research Center, Bowie MD 20715
%% At some point T. Thorn will probably contribute text,
%% \author{ Tommy Thorn (tthorn@daimi.aau.dk)}
At some point T. Thorn will probably contribute text,
Tommy Thorn (tthorn@daimi.aau.dk)
PLIP Introduction
-----------------
\section{PLIP Introduction}
This document describes the parallel port packet pusher for Net/LGX.
This device interface allows a point-to-point connection between two
parallel ports to appear as a IP network interface.
\chapter{PLIP hardware interconnection}
What is PLIP?
=============
PLIP is Parallel Line IP, that is, the transportation of IP packages
over a parallel port. In the case of a PC, the obvious choice is the
printer port. PLIP is a non-standard, but [can use] uses the standard
LapLink null-printer cable [can also work in turbo mode, with a PLIP
cable]. [The protocol used to pack IP packages, is a simple one
initiated by Crynwr.]
Advantages of PLIP
==================
It's cheap, it's available everywhere, and it's easy.
The PLIP cable is all that's needed to connect two Linux boxes, and it
can be build for very few bucks.
Connecting two Linux boxes takes only a seconds decision and a few
minutes work, no need to search for a [supported] netcard. This might
even be especially important in the case of notebooks, where netcard
are not easily available.
Not requiring a netcard also means that apart from connecting the
cables, everything else is software configuration [which in principle
could be made very easy.]
Disadvantages of PLIP
=====================
Doesn't work over a modem, like SLIP and PPP. Limited range, 15 m.
Can only be used to connect three (?) Linux boxes. Doesn't connect to
an exiting ethernet. Isn't standard (not even de facto standard, like
SLIP).
Performance
==========
PLIP easily outperforms ethernet cards....(ups, I was dreaming, but
it *is* getting late. EOB)
PLIP hardware interconnection
-----------------------------
PLIP uses several different data transfer methods. The first (and the
only one implemented in the early version of the code) uses a standard
printer "null" cable to transfers data four bits at a time using
......@@ -22,7 +67,9 @@ bi-directional parallel ports, rather than output-only ``printer''
ports. This allows byte-wide transfers and avoids reconstructing
nibbles into bytes, leading to much faster transfers.
\section{Parallel Transfer Mode 0 Cable}
Parallel Transfer Mode 0 Cable
==============================
The cable for the first transfer mode is a standard
printer "null" cable which transfers data four bits at a time using
data bit outputs of the first port (machine T) connected to the
......@@ -52,7 +99,9 @@ two DB-25 male connectors symmetrically connected as follows:
If the cable you are using has a metallic shield it should be
connected to the metallic DB-25 shell at one end only.
\section{Parallel Transfer Mode 1}
Parallel Transfer Mode 1
========================
The second data transfer method relies on both machines having
bi-directional parallel ports, rather than output-only ``printer''
ports. This allows byte-wide transfers, and avoids reconstructing
......@@ -83,7 +132,9 @@ The cable for this transfer mode should be constructed as follows:
Once again, if the cable you are using has a metallic shield it should
be connected to the metallic DB-25 shell at one end only.
\section{PLIP Mode 0 transfer protocol}
PLIP Mode 0 transfer protocol
=============================
The PLIP driver is compatible with the "Crynwr" parallel port transfer
standard in Mode 0. That standard specifies the following protocol:
......@@ -109,5 +160,3 @@ Send_Byte:
WAIT FOR IN.4 = 1
OUT := high nibble, OUT.4 := 0
WAIT FOR IN.4 = 0
README for the COPS LocalTalk Linux driver (cops.c).
Text File for the COPS LocalTalk Linux driver (cops.c).
By Jay Schulist <Jay.Schulist@spacs.k12.wi.us>
This driver compiles well against 2.1.29 - 2.1.41.
Building the driver from the cops-0.0*.tar.gz file.
1. Untar the cops-0.0*.tar.gz it will make a directory called cops.
2. Copy the cops-kernel.diff to /usr/src/ and then type patch -p0 < cops-kernel.diff
3. In the cops driver directory type make install. It will copy the driver to
the linux/drivers/net directory.
4. When you configure your kernel select Y or M for COPS LocalTalk PC support.
Also make sure you have choosen Appletalk support.
5. Compile like usual and you should bet set.
This driver has 2 modes and they are: Dayna mode and Tangent mode.
This driver has teo modes and they are: Dayna mode and Tangent mode.
Each mode corresponds with the type of card. It has been found
that there are 2 main types of cards and all other cards are
the same and just have different names or only have minor differences
such as more IO ports. As this driver is tested it will
become more clear on exactly what cards are supported. The driver
defaults to using Dayna mode. To change the drivers mode if you build
a driver with dual support use board_type=1 or board_type=2 for
dayna and tangent in the insmod.
become more clear on exactly what cards are supported.
Right now these cards are known to work with the COPS driver. The
LT-200 cards work in a somewhat more limited capacity than the
DL200 cards, which work very well and are in use by many people.
TANGENT driver mode:
Tangent ATB-II, Novell NL-1000, Daystar Digital LT-200
DAYNA driver mode:
Dayna DL2000/DaynaTalk PC (Half Length), COPS LT-95,
Farallon PhoneNET PC III, Farallon PhoneNET PC II
Other cards possibly supported mode unkown though:
Dayna DL2000 (Full length)
The COPS driver defaults to using Dayna mode. To change the drivers
mode if you build a driver with a dual support use board_type=1 or
board_type=2 for Dayna or Tangent with insmod.
Operation/loading of the driver.
** Operation/loading of the driver.
Use modprobe like this: /sbin/modprobe cops.o (IO #) (IRQ #)
If you do not specify any options the driver will try and use the IO = 0x240,
IRQ = 5. As of right now I would only use IRQ 5 for the card, if autoprobing.
Use ifconfig like this: /sbin/ifconfig lt0 127.0.0.34 up
To load multiple COPS driver Localtalk cards you can do one of the following.
insmod cops io=0x240 irq=5
insmod -o cops2 cops io=0x260 irq=3
Or in lilo.conf put something like this:
append="ether=5,0x240,lt0 ether=3,0x260,lt1"
Then bring up the interface with ifconfig. It will look something like this:
lt0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-F7-00-00-00-00-00-00-00-00
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING NOARP MULTICAST MTU:600 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 coll:0
** Netatalk Configuration
You will need to configure atalkd with something like the following to make
it work with the cops.c driver.
* For single LTalk card use.
dummy -seed -phase 2 -net 2000 -addr 2000.10 -zone "1033"
lt0 -seed -phase 1 -net 1000 -addr 1000.50 -zone "1033"
- Or -
* For multiple cards, Ethernet and Localtalk.
eth0 -seed -phase 2 -net 3000 -addr 3000.20 -zone "1033"
lt0 -seed -phase 1 -net 1000 -addr 1000.50 -zone "1033"
* For multiple LocalTalk cards, and an Ethernet card.
* Order seems to matters here, Ethernet last.
lt0 -seed -phase 1 -net 1000 -addr 1000.10 -zone "LocalTalk1"
lt1 -seed -phase 1 -net 2000 -addr 2000.20 -zone "LocalTalk2"
eth0 -seed -phase 2 -net 3000 -addr 3000.30 -zone "EtherTalk"
Documentation on setup and use of EtherTap.
Contact Jay Schulist <Jay.Schulist@spacs.k12.wi.us> if you
have questions or need futher assistance.
Introduction
============
Ethertap provides packet reception and transmission for user
space programs. It can be viewed as a simple ethernet device,
which instead of recieving packets from a network wire, it recieves
them from user space.
Ethertap can be used for anything from Appletalk to IPX to even
building bridging tunnels. It also has many other general purpose
uses.
Ethertap also can do ARP for you. Although this is not enabled per
default.
SetUp
=====
First you will have to enable Ethertap in the kernel configuration.
Then you will need to create any number of ethertap device files,
/dev/tap0->/dev/tap15. This is done by the following command.
mknod /dev/tap* c 36 16 ( 17 18 19 20 for tap1,2,3,4...)
** Replace * with the proper tap device number you need. **
Now with your kernel that has ethertap enabled, you will need
to ifconfig /dev/tap* 192.168.1.1 (replace 192.168.1.1 with the
proper IP number for your situation.)
If you want your Ethertap device to ARP for you would ifconfig
the interface like this: ifconfig tap* 192.168.1.1 arp
Remember that the you need to have a corresponding /dev/tap* file
for each tap* device you need to ifconfig.
Now Ethertap should be ready to use.
Diagram of how Ethertap works. (Courtesy of Alan Cox)
====================================================
This is for a tunnel, but you should be able to
get the general idea.
1.2.3.4 will be the router to the outside world
1.2.3.5 our box
2.0.0.1 our box (appletalk side)
2.0.0.* a pile of macintoys
[1.2.3.4]-------------1.2.3.5[Our Box]2.0.0.1---------> macs
The routing on our box would be
ifconfig eth0 1.2.3.5 netmask 255.255.255.0 up
route add default gw 1.2.3.4
ifconfig tap0 2.0.0.1 netmask 255.255.255.0 up arp
(route add 2.0.0.0 netmask 255.255.255.0)
C code for a Simple program using an EtherTap device
====================================================
This code is just excepts from a real program, so some parts are missing
but the important stuff is below.
void main (void)
{
int TapDevice, eth_pkt_len = 0;
unsigned char full_pkt_len[MAX_PKT_LEN];
TapDevice = open("/dev/tap0", O_RDWR);
if(TapDevice < 0)
{
perror("Error opening device");
exit(1);
}
write(TapDevice, full_packet, eth_pkt_len);
close(TapDevice);
return;
}
......@@ -143,10 +143,22 @@ tcp_syn_taildrop - BOOLEAN
tcp_max_syn_backlog - INTEGER
Undocumented (work in progress)
ip_local_port_range - 2 INTEGERS
Defines the local port range that is used by TCP and UDP to
choose the local port. The first number is the first, the
second the last local port number. For high-usage systems
change this to 32768-61000.
icmp_echo_ignore_all - BOOLEAN
icmp_echo_ignore_broadcasts - BOOLEAN
If either is set to true, then the kernel will ignore either all
ICMP ECHO requests sent to it or just those to broadcast/multicast
addresses, respectively.
Alexey Kuznetsov.
kuznet@ms2.inr.ac.ru
Updated by:
Andi Kleen
ak@muc.de
$Id: ip-sysctl.txt,v 1.3 1997/08/22 19:22:00 freitag Exp $
$Id: ip-sysctl.txt,v 1.5 1997/10/17 03:58:23 tdyas Exp $
......@@ -55,8 +55,4 @@ previous (non-GPL) versions of the driver, please update to this one.
I hope that this all works well for you. I would be pleased to hear how
many people use the driver and if it does its job.
- Craig vk2xlz
INET: csmall@acacia.itd.uts.edu.au craig.small@eol.ieaust.org.au
AMPR: vk2xlz@gonzo.vk2xlz.ampr.org
AX25: vk2xlz@vk2gdm.nsw.aus.oc
- Craig vk2xlz <csmall@small.dropbear.id.au>
......@@ -2,6 +2,7 @@ Mounting the root filesystem via NFS (nfsroot)
==============================================
Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
......@@ -47,12 +48,12 @@ root=/dev/nfs
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
If the nfsroot parameter is NOT give on the command line, the default
If the `nfsroot' parameter is NOT given on the command line, the default
"/tftpboot/%s" will be used.
<server-ip> Specifies the IP address of the NFS server. If this field
is not given, the default address as determined by the
nfsaddrs variable (see below) is used. One use of this
`ip' variable (see below) is used. One use of this
parameter is for example to allow using different servers
for RARP and NFS. Usually you can leave this blank.
......@@ -76,10 +77,16 @@ nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
flags = hard, nointr, noposix, cto, ac
nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
If this parameter is missing on the kernel command line, all fields are
assumed to be empty, and the below mentioned defaults apply. In general
This parameter tells the kernel how to configure IP addresses of devices
and also how to set up the IP routing table. It was originally called `nfsaddrs',
but now the boot-time IP configuration works independently on NFS, so it
was renamed to `ip' and the old name remained as an alias for compatibility
reasons.
If this parameter is missing from the kernel command line, all fields are
assumed to be empty, and the defaults mentioned below apply. In general
this means that the kernel tries to configure everything using both
RARP and BOOTP (depending on what has been enabled during kernel confi-
guration, and if both what protocol answer got in first).
......@@ -95,7 +102,7 @@ nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf
replies from the specified server are accepted. To use
different RARP and NFS server, specify your RARP server
here (or leave it blank), and specify your NFS server in
the nfsroot parameter (see above). If this entry is blank
the `nfsroot' parameter (see above). If this entry is blank
the address of the server is used which answered the RARP
or BOOTP request.
......@@ -105,29 +112,26 @@ nfsaddrs=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf
value has been received by BOOTP.
<netmask> Netmask for local network interface. If this is empty,
the netmask is derived from the client IP address, un-
less a value has been received by BOOTP.
the netmask is derived from the client IP address assuming
classful addressing, unless overriden in BOOTP reply.
<hostname> Name of the client. If empty, the client IP address is
used in ASCII-notation, or the value received by BOOTP.
<device> Name of network device to use. If this is empty, all
devices are used for RARP requests, and the first one
found for BOOTP. For NFS the device is used on which
either RARP or BOOTP replies have been received. If
you only have one device you can safely leave this blank.
devices are used for RARP and BOOTP requests, and the
first one we receive a reply on is configured. If you have
only one device, you can safely leave this blank.
<autoconf> Method to use for autoconfiguration. If this is either
'rarp' or 'bootp' the specified protocol is being used.
'rarp' or 'bootp', the specified protocol is used.
If the value is 'both' or empty, both protocols are used
so far as they have been enabled during kernel configura-
tion. 'none' means no autoconfiguration. In this case you
have to specify all necessary values in the fields before.
tion. 'off' means no autoconfiguration.
The <autoconf> parameter can appear alone as the value to the nfsaddrs
The <autoconf> parameter can appear alone as the value to the `ip'
parameter (without all the ':' characters before) in which case auto-
configuration is used. However, the 'none' value is not available in
that case.
configuration is used.
......@@ -196,9 +200,11 @@ depend on what facilities are available:
4.) Credits
-------
The nfsroot code in the kernel has been written by me, Gero Kuhlmann
<gero@gkminix.han.de>, with the BOOTP code and a couple of bug fixes
contributed by Martin Mares <mj@k332.feld.cvut.cz>. In order to write
the initial version of nfsroot I would like to thank Jens-Uwe Mager
<jum@anubis.han.de> for his help.
The nfsroot code in the kernel and the RARP support have been written
by Gero Kuhlmann <gero@gkminix.han.de>.
The rest of the IP layer autoconfiguration code has been written
by Martin Mares <mj@atrey.karlin.mff.cuni.cz>.
In order to write the initial version of nfsroot I would like to thank
Jens-Uwe Mager <jum@anubis.han.de> for his help.
......@@ -53,11 +53,9 @@ message similar to:
parport0: Printer, BJC-210 (Canon)
Additionally, if you use kerneld, you can add to /etc/conf.modules the
following lines, to have the probe happen automatically:
(If you are using kerneld and have configured parport_probe as a
module, this will just happen.)
post-install parport modprobe parport_probe
pre-remove parport modprobe -r parport_probe
Parport, but not as modules
===========================
......@@ -72,6 +70,31 @@ You can have many `parport=...' statements, one for each port you want
to add. Adding `parport=0' to the kernel command-line will disable
parport support entirely.
Files in /proc
==============
If you have configured the /proc filesystem into your kernel, you will
see a new directory entry: /proc/parport. In there will be a
directory entry for each parallel port for which parport is
configured. In each of those directories are three files describing
that parallel port. For example:
File: Contents:
/proc/parport/0/devices A list of the device drivers using
that port. A "+" will appear by the
name of the device currently using the
port (it might not appear against any).
/proc/parport/0/hardware Parallel port's base address, IRQ line
and DMA channel.
/proc/parport/0/irq The IRQ that parport is using for that
port (as above). This is in a
separate file to allow you to alter it
by writing a new value in (IRQ number
or "none").
Device drivers
==============
......
......@@ -7,3 +7,5 @@ please mail me.
- this file
ppc_htab.txt
- info about the Linux/PPC /proc/ppc_htab entry
sound.txt
- info on sound support under Linux/PPC
Information about /proc/ppc_htab
=====================================================================
This document and the related code was written by me (Cort Dougan), please
email me (cort@cs.nmt.edu) if you have questions, comments or corrections.
This entry in the proc directory is readable by all users but only
writable by root.
The ppc_htab interface is a user level way of accessing the
performance monitoring registers as well as providing information
about the PTE hash table.
1. Reading
Reading this file will give you information about the memory management
hash table that serves as an extended tlb for page translation on the
powerpc.
powerpc. It will also give you information about performance measurement
specific to the cpu that you are using.
Explaination of the fields:
Explanation of the 604 Performance Monitoring Fields:
MMCR0 - the current value of the MMCR0 register
PMC1
PMC2 - the value of the performance counters and a
description of what events they are counting
which are based on MMCR0 bit settings.
Explanation of the PTE Hash Table fields:
Size - hash table size in Kb.
Buckets - number of buckets in the table.
Addess - the virtual kernel address of the hash table base.
Address - the virtual kernel address of the hash table base.
Entries - the number of ptes that can be stored in the hash table.
User/Kernel - how many pte's are in use by the kernel or user at that time.
Overflows - How many of the entries are in their secondary hash location.
Percent full - ratio of free pte entries to in use entries.
Reloads - Count of how many hash table misses have occurred
that were fixed with a reload from the linux tables.
Should always be 0 on 603 based machines.
Non-error Misses - Count of how many hash table misses have occurred
that were completed with the creation of a pte in the linux
tables with a call to do_page_fault().
Error Misses - Number of misses due to errors such as bad address
and permission violations. This includes kernel access of
bad user addresses that are fixed up by the trap handler.
Note that calculation of the data displayed from /proc/ppc_htab takes
a long time and spends a great deal of time in the kernel. It would
......@@ -30,21 +52,70 @@ writable by root.
2. Writing
Writing to ppc_htab is not yet allowed.
Writing to the ppc_htab allows you to change the characteristics of
the powerpc PTE hash table and setup performance monitoring.
Resizing the PTE hash table is not enabled right now due to many
complications with moving the hash table, rehashing the entries
and many many SMP issues that would have to be dealt with.
Write options to ppc_htab:
- To set the size of the hash table to 64Kb:
echo 'size 64' > /dev/ppc_htab
echo 'size 64' > /proc/ppc_htab
The size must be a multiple of 64 and must be greater than or equal to
64.
- To turn off performance monitoring:
echo 'off' > /proc/ppc_htab
- To reset the counters without changing what they're counting:
echo 'reset' > /proc/ppc_htab
Note that counting will continue after the reset if it is enabled.
- To count only events in user mode or only in kernel mode:
echo 'user' > /proc/ppc_htab
...or...
echo 'kernel' > /proc/ppc_htab
Note that these two options are exclusive of one another and the
lack of either of these options counts user and kernel.
Using 'reset' and 'off' reset these flags.
- The 604 has 2 performance counters which can each count events from
a specific set of events. These sets are disjoint so it is not
possible to count _any_ combination of 2 events. One event can
be counted by PMC1 and one by PMC2.
To start counting a particular event use:
echo 'event' > /proc/ppc_htab
and choose from these events:
PMC1
----
'ic miss' - instruction cache misses
'dtlb' - data tlb misses (not hash table misses)
PMC2
----
'dc miss' - data cache misses
'itlb' - instruction tlb misses (not hash table misses)
'load miss time' - cycles to complete a load miss
3. Bugs
Doing a 'less' or 'more' on ppc_htab results in a segmentation violation.
I'm not sure of the cause but in the mean time 'cat' works adequately for
reading the file.
The PMC1 and PMC2 counters can overflow and give no indication of that
in /proc/ppc_htab.
Information about PowerPC Sound support
=====================================================================
Please mail me me (Cort Dougan, cort@cs.nmt.edu) if you have questions,
comments or corrections.
This just covers sound on the PReP systems for now, and later will
contain information on the PowerMac's.
Sound has been tested and is working with the PowerStack and IBM Power
Series onboard sound systems which are based on the cs4231(2) chip.
The sound options when doing the make config are a bit different from the
default, though.
The I/O base, irq and dma lines that you enter during the make config
are ignored and are set when booting according to the machine type.
This is so that one binary can be used for Motorola and IBM machines
which use different values and isn't allowed by the driver, so things are
hacked together in such a way as to allow this information to be set
automatically on boot.
1. PowerStack
Enable support for "Crystal CS4232 based (PnP) cards". Although the
options you set are ignored and determined automatically on boot these
are included for information only:
(830) CS4232 audio I/O base 530, 604, E80 or F40
(10) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
(6) CS4232 audio DMA 0, 1 or 3
(7) CS4232 second (duplex) DMA 0, 1 or 3
This will allow simultaneous record and playback, as 2 different dma
channels are used.
Midi is not supported since the cs4232 driver doesn't support midi yet.
2. IBM machines
I've only tested sound on the Power Personal Series of IBM workstations
so if you try it on others please let me know the result.
Enable support for "Crystal CS4232 based (PnP) cards". Although the
options you set are ignored and determined automatically on boot these
are included for information only:
(530) CS4232 audio I/O base 530, 604, E80 or F40
(5) CS4232 audio IRQ 5, 7, 9, 11, 12 or 15
(1) CS4232 audio DMA 0, 1 or 3
(7) CS4232 second (duplex) DMA 0, 1 or 3
(330) CS4232 MIDI I/O base 330, 370, 3B0 or 3F0
(9) CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15
This setup does _NOT_ allow for recording yet.
Midi is not supported since the cs4232 driver doesn't support midi yet.
......@@ -7,10 +7,7 @@
This small document describes the "Video Mode Selection" feature which
allows to use various special video modes supported by the video BIOS. Due
to usage of the BIOS, the selection is limited to the boot time (before the
kernel decompression starts and works only on 80X86 machines.
IF YOU USE THIS FEATURE, I'LL BE MUCH PLEASED IF YOU SEND ME A MAIL
DESCRIBING YOUR EXPERIENCE WITH IT. BUG REPORTS ARE ALSO WELCOME.
kernel decompression starts) and works only on 80X86 machines.
The video mode to be used is selected by a kernel parameter which can be
specified in the kernel Makefile (the SVGA_MODE=... line) or by the "vga=..."
......
......@@ -70,6 +70,12 @@ M: Remy.Card@linux.org
L: linux-kernel@vger.rutgers.edu
S: Maintained
DISKQUOTA:
P: Marco van Wieringen
M: mvw@planets.elm.net
L: linux-kernel@vger.rutgers.edu
S: Maintained
3C501 NETWORK DRIVER
P: Alan Cox
M: net-patches@lxorguk.ukuu.org.uk
......@@ -85,13 +91,13 @@ W: http://rsphy1.anu.edu.au/~gpg109/ne2000.html
ETHEREXPRESS-16 NETWORK DRIVER
P: Philip Blundell
M: pjb27@cam.ac.uk
M: Philip.Blundell@pobox.com
L: linux-net@vger.rutgers.edu
S: Maintained
3C505 NETWORK DRIVER
P: Philip Blundell
M: phil@tazenda.demon.co.uk
M: Philip.Blundell@pobox.com
L: linux-net@vger.rutgers.edu
S: Maintained
......@@ -167,6 +173,13 @@ M: jreuter@lykos.oche.de
L: linux-hams@vger.rutgers.edu
S: Maintained
BAYCOM/HDLCDRV/SOUNDMODEM DRIVERS FOR AX.25
P: Thomas Sailer
M: sailer@ife.ee.ethz.ch
L: linux-hams@vger.rutgers.edu
W: http://www.ife.ee.ethz.ch/~sailer/ham/ham.html
S: Maintained
BUSLOGIC SCSI DRIVER
P: Leonard N. Zubkoff
M: Leonard N. Zubkoff <lnz@dandelion.com>
......@@ -270,7 +283,7 @@ M68K:
P: Jes Sorensen
M: Jes.Sorensen@cern.ch
W: http://www.clark.net/pub/lawrencc/linux/index.html
L: linux-m68k@phil.uni-sb.de
L: linux-m68k@lists.linux-m68k.org
S: Maintained
MODULE SUPPORT [GENERAL], KERNELD
......@@ -466,6 +479,14 @@ W: http://www.cyberelk.demon.co.uk/parport.html
W: http://www.cage.curtin.edu.au/~campbell/parbus/
S: Maintained
PNP SUPPORT
P: Tom Lees
M: tom@lpsg.demon.co.uk
L: pnp-list@lpsg.demon.co.uk
L: pnp-list@redhat.com (maybe)
W: http://www.lpsg.demon.co.uk/pnp-linux.html
S: Maintained
LINUX FOR POWERPC (PREP)
P: Cort Dougan
M: cort@cs.nmt.edu
......@@ -501,6 +522,16 @@ M: hpa@zytor.com
L: linux-kernel@vger.rutgers.edu
S: Maintained
JOYSTICK DRIVER
P: Vojtech Pavlik
M: vojtech@atrey.karlin.mff.cuni.cz
S: Maintained
NETWORK BLOCK DEVICE
P: Pavel Machek
M: pavel@atrey.karlin.mff.cuni.cz
S: Maintained
REST:
P: Linus Torvalds
S: Buried alive in diapers
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 66
SUBLEVEL = 67
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/)
......
......@@ -248,6 +248,9 @@ CONFIG_82C710_MOUSE=y
# CONFIG_APM is not set
# CONFIG_WATCHDOG is not set
# CONFIG_RTC is not set
# CONFIG_VIDEO_DEV is not set
# CONFIG_VIDEO_BT848 is not set
# CONFIG_VIDEO_PMS is not set
# CONFIG_NVRAM is not set
# CONFIG_JOYSTICK is not set
# CONFIG_MISC_RADIO is not set
......
......@@ -15,6 +15,7 @@
#include <asm/checksum.h>
#include <asm/io.h>
#include <asm/hardirq.h>
#include <asm/delay.h>
extern void dump_thread(struct pt_regs *, struct user *);
extern int dump_fpu(elf_fpregset_t *);
......@@ -42,6 +43,11 @@ EXPORT_SYMBOL_NOVERS(__up_wakeup);
EXPORT_SYMBOL(__intel_bh_counter);
/* Networking helper routines. */
EXPORT_SYMBOL(csum_partial_copy);
/* Delay loops */
EXPORT_SYMBOL(__udelay);
EXPORT_SYMBOL(__delay);
EXPORT_SYMBOL(__const_udelay);
#ifdef __SMP__
EXPORT_SYMBOL(apic_reg); /* Needed internally for the I386 inlines */
......
......@@ -11,6 +11,6 @@ else
endif
L_TARGET = lib.a
L_OBJS = checksum.o semaphore.o locks.o
L_OBJS = checksum.o semaphore.o locks.o delay.o
include $(TOPDIR)/Rules.make
/*
* Precise Delay Loops for i386
*
* Copyright (C) 1993 Linus Torvalds
* Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*
* The __delay function must _NOT_ be inlined as its execution time
* depends wildly on alignment on many x86 processors.
*/
#include <linux/sched.h>
#include <asm/delay.h>
#ifdef __SMP__
#include <asm/smp.h>
#endif
#ifdef __SMP__
#define __udelay_val cpu_data[smp_processor_id()].udelay_val
#else
#define __udelay_val loops_per_sec
#endif
void __delay(unsigned long loops)
{
__asm__ __volatile__(
"1:\tdecl %0\n\tjns 1b"
:/* no outputs */
:"a" (loops)
:"ax");
}
inline void __const_udelay(unsigned long xloops)
{
__asm__("mull %0"
:"=d" (xloops)
:"a" (xloops),"0" (__udelay_val)
:"ax");
__delay(xloops);
}
void __udelay(unsigned long usecs)
{
__const_udelay(usecs * 0x000010c6); /* 2**32 / 1000000 */
}
......@@ -49,6 +49,7 @@ fi
comment 'Additional Block Devices'
tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
#tristate 'Network block device support' CONFIG_BLK_DEV_NBD
bool 'Multiple devices driver support' CONFIG_BLK_DEV_MD
if [ "$CONFIG_BLK_DEV_MD" = "y" ]; then
tristate ' Linear (append) mode' CONFIG_MD_LINEAR
......
......@@ -218,4 +218,12 @@ endif
endif
ifeq ($(CONFIG_BLK_DEV_NBD),y)
L_OBJS += nbd.o
else
ifeq ($(CONFIG_BLK_DEV_NBD),m)
M_OBJS += nbd.o
endif
endif
include $(TOPDIR)/Rules.make
This diff is collapsed.
This diff is collapsed.
......@@ -35,7 +35,7 @@
#define CMD_SEEK 0x0B /* seek */
/* Controller specific commands */
#define CMD_DTCSETPARAM 0x0C /* set drive parameters (DTC 5150X only?) */
#define CMD_DTCSETPARAM 0x0C /* set drive parameters (DTC 5150X & CX only?) */
#define CMD_DTCGETECC 0x0D /* get ecc error length (DTC 5150X only?) */
#define CMD_DTCREADBUF 0x0E /* read sector buffer (DTC 5150X only?) */
#define CMD_DTCWRITEBUF 0x0F /* write sector buffer (DTC 5150X only?) */
......@@ -85,8 +85,6 @@ typedef struct {
u_char control;
} XD_INFO;
#define HDIO_GETGEO 0x0301 /* get drive geometry */
/* this structure is returned to the HDIO_GETGEO ioctl */
typedef struct {
__u8 heads;
......@@ -105,6 +103,9 @@ typedef struct {
} XD_SIGNATURE;
void xd_setup (char *command,int *integers);
#ifndef MODULE
void xd_manual_geo_init (char *command,int *integers);
#endif /* MODULE */
static u_char xd_detect (u_char *controller, unsigned int *address);
static u_char xd_initdrives (void (*init_drive)(u_char drive));
static void xd_geninit (struct gendisk *);
......@@ -120,11 +121,14 @@ static void xd_recalibrate (u_char drive);
static void xd_interrupt_handler (int irq, void *dev_id, struct pt_regs *regs);
static u_char xd_setup_dma (u_char opcode,u_char *buffer,u_int count);
static u_char *xd_build (u_char *cmdblk,u_char command,u_char drive,u_char head,u_short cylinder,u_char sector,u_char count,u_char control);
static void xd_wakeup (void);
static void xd_watchdog (void);
static inline u_char xd_waitport (u_short port,u_char flags,u_char mask,u_long timeout);
static u_int xd_command (u_char *command,u_char mode,u_char *indata,u_char *outdata,u_char *sense,u_long timeout);
/* card specific setup and geometry gathering code */
static void xd_dtc_init_controller (unsigned int address);
static void xd_dtc5150cx_init_drive (u_char drive);
static void xd_dtc_init_drive (u_char drive);
static void xd_wd_init_controller (unsigned int address);
static void xd_wd_init_drive (u_char drive);
......
......@@ -99,9 +99,13 @@ if [ "$CONFIG_WATCHDOG" != "n" ]; then
tristate ' Acquire SBC Watchdog Timer' CONFIG_ACQUIRE_WDT
fi
bool 'Enhanced Real Time Clock Support' CONFIG_RTC
if [ "$CONFIG_PPC" = "y" ]; then
if [ "$CONFIG_ALPHA_BOOK1" = "y" ]; then
bool 'Tadpole ANA H8 Support' CONFIG_H8
fi
tristate 'Video For Linux' CONFIG_VIDEO_DEV
dep_tristate 'BT848 Video For Linux' CONFIG_VIDEO_BT848 $CONFIG_VIDEO_DEV
#dep_tristate 'Quickcam BW Video For Linux' CONFIG_VIDEO_BWQCAM $CONFIG_VIDEO_DEV
dep_tristate 'Mediavision Pro Movie Studio Video For Linux' CONFIG_VIDEO_PMS $CONFIG_VIDEO_DEV
tristate '/dev/nvram support' CONFIG_NVRAM
tristate 'PC joystick support' CONFIG_JOYSTICK
bool 'Radio Device Support' CONFIG_MISC_RADIO
......
......@@ -273,11 +273,47 @@ endif
ifeq ($(CONFIG_NVRAM),y)
M = y
L_OBJS += nvram.o
ifeq ($(CONFIG_PMAC)$(CONFIG_CHRP),)
L_OBJS += nvram.o
endif
else
ifeq ($(CONFIG_NVRAM),m)
MM = m
ifeq ($(CONFIG_PMAC)$(CONFIG_CHRP),)
M_OBJS += nvram.o
endif
endif
endif
ifeq ($(CONFIG_VIDEO_DEV),y)
LX_OBJS += videodev.o
else
ifeq ($(CONFIG_VIDEO_DEV),m)
MX_OBJS += videodev.o
endif
endif
ifeq ($(CONFIG_VIDEO_BT848),y)
L_OBJS += bttv.o
else
ifeq ($(CONFIG_VIDEO_BT848),m)
M_OBJS += bttv.o
endif
endif
ifeq ($(CONFIG_VIDEO_BWQCAM),y)
L_OBJS += bw-qcam.o
else
ifeq ($(CONFIG_VIDEO_BWQCAM),m)
M_OBJS += bw-qcam.o
endif
endif
ifeq ($(CONFIG_VIDEO_PMS),y)
L_OBJS += pms.o
else
ifeq ($(CONFIG_VIDEO_PMS),m)
M_OBJS += pms.o
endif
endif
......
......@@ -62,7 +62,7 @@ static void acq_ping(void)
inb_p(WDT_START);
}
static long acq_write(struct inode *inode, struct file *file, const char *buf, unsigned long count)
static ssize_t acq_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
if(count)
{
......@@ -72,7 +72,7 @@ static long acq_write(struct inode *inode, struct file *file, const char *buf, u
return 0;
}
static long acq_read(struct inode *inode, struct file *file, char *buf, unsigned long count)
static ssize_t acq_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
return -EINVAL;
}
......
......@@ -63,8 +63,8 @@
#include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/poll.h>
#include <linux/poll.h>
#include <linux/types.h>
#include <linux/stddef.h>
#include <linux/timer.h>
......@@ -307,7 +307,7 @@ static void do_apm_timer(unsigned long);
static int do_open(struct inode *, struct file *);
static int do_release(struct inode *, struct file *);
static long do_read(struct inode *, struct file *, char *, unsigned long);
static ssize_t do_read(struct file *, char *, size_t , loff_t *);
static unsigned int do_poll(struct file *, poll_table *);
static int do_ioctl(struct inode *, struct file *, u_int, u_long);
......@@ -812,8 +812,7 @@ static int check_apm_bios_struct(struct apm_bios_struct *as, const char *func)
return 0;
}
static long do_read(struct inode *inode, struct file *fp,
char *buf, unsigned long count)
static ssize_t do_read(struct file *fp, char *buf, size_t count, loff_t *ppos)
{
struct apm_bios_struct * as;
int i;
......
This diff is collapsed.
This diff is collapsed.
/*
bttv - Bt848 frame grabber driver
Copyright (C) 1996,97 Ralph Metzler (rjkm@thp.uni-koeln.de)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _BTTV_H_
#define _BTTV_H_
#define TEST_VBI
#include <linux/types.h>
#include <linux/wait.h>
#include "bt848.h"
typedef unsigned int dword;
struct riscprog {
uint length;
dword *busadr;
dword *prog;
};
/* values that can be set by user programs */
struct bttv_window {
int x, y;
ushort width, height;
ushort bpp, bpl;
ushort swidth, sheight;
short cropx, cropy;
ushort cropwidth, cropheight;
int vidadr;
ushort freq;
int norm;
int interlace;
int color_fmt;
};
/* private data that can only be read (or set indirectly) by user program */
struct bttv {
struct video_device video_dev;
struct video_picture picture; /* Current picture params */
struct video_audio audio_dev; /* Current audio params */
u_char bus; /* PCI bus the Bt848 is on */
u_char devfn;
u_char revision;
u_char irq; /* IRQ used by Bt848 card */
uint bt848_adr; /* bus address of IO mem returned by PCI BIOS */
u_char *bt848_mem; /* pointer to mapped IO memory */
ulong busriscmem;
dword *riscmem;
u_char *vbibuf;
struct bttv_window win;
int type; /* card type */
int audio; /* audio mode */
int user;
int tuner;
int tuneradr;
int dbx;
dword *risc_jmp;
dword *vbi_odd;
dword *vbi_even;
dword bus_vbi_even;
dword bus_vbi_odd;
struct wait_queue *vbiq;
struct wait_queue *capq;
int vbip;
dword *risc_odd;
dword *risc_even;
int cap;
};
/*The following should be done in more portable way. It depends on define
of _ALPHA_BTTV in the Makefile.*/
#ifdef _ALPHA_BTTV
#define btwrite(dat,adr) writel((dat),(char *) (btv->bt848_adr+(adr)))
#define btread(adr) readl(btv->bt848_adr+(adr))
#else
#define btwrite(dat,adr) writel((dat), (char *) (btv->bt848_mem+(adr)))
#define btread(adr) readl(btv->bt848_mem+(adr))
#endif
#define btand(dat,adr) btwrite((dat) & btread(adr), adr)
#define btor(dat,adr) btwrite((dat) | btread(adr), adr)
#define btaor(dat,mask,adr) btwrite((dat) | ((mask) & btread(adr)), adr)
/* bttv ioctls */
#define BTTV_WRITE_BTREG 0x00
#define BTTV_READ_BTREG 0x01
#define BTTV_SET_BTREG 0x02
#define BTTV_SETRISC 0x03
#define BTTV_SETWTW 0x04
#define BTTV_GETWTW 0x05
#define BTTV_DMA 0x06
#define BTTV_CAP_OFF 0x07
#define BTTV_CAP_ON 0x08
#define BTTV_GETBTTV 0x09
#define BTTV_SETFREQ 0x0a
#define BTTV_SETCHAN 0x0b
#define BTTV_INPUT 0x0c
#define BTTV_READEE 0x0d
#define BTTV_WRITEEE 0x0e
#define BTTV_BRIGHT 0x0f
#define BTTV_HUE 0x10
#define BTTV_COLOR 0x11
#define BTTV_CONTRAST 0x12
#define BTTV_SET_FFREQ 0x13
#define BTTV_MUTE 0x14
#define BTTV_GRAB 0x20
#define BTTV_TESTM 0x20
#define BTTV_UNKNOWN 0x00
#define BTTV_MIRO 0x01
#define BTTV_HAUPPAUGE 0x02
#define BTTV_STB 0x03
#define BTTV_INTEL 0x04
#define BTTV_DIAMOND 0x05
#define AUDIO_TUNER 0x00
#define AUDIO_EXTERN 0x01
#define AUDIO_INTERN 0x02
#define AUDIO_OFF 0x03
#define AUDIO_ON 0x04
#define AUDIO_MUTE 0x80
#define AUDIO_UNMUTE 0x81
#define I2C_TSA5522 0xc2
#define I2C_TDA9850 0xb6
#define I2C_HAUPEE 0xa0
#define I2C_STBEE 0xae
#define TDA9850_CON1 0x04
#define TDA9850_CON2 0x05
#define TDA9850_CON3 0x06
#define TDA9850_CON4 0x07
#define TDA9850_ALI1 0x08
#define TDA9850_ALI2 0x09
#define TDA9850_ALI3 0x0a
#endif
This diff is collapsed.
......@@ -116,7 +116,7 @@ static int misc_open(struct inode * inode, struct file * file)
return -ENODEV;
}
if ((file->f_op = c->fops))
if ((file->f_op = c->fops) && file->f_op->open)
return file->f_op->open(inode,file);
else
return -ENODEV;
......
......@@ -13,6 +13,7 @@
* 0.1 1997-05-19 Robin O'Leary <robin@acm.org> - PS/2 emulation
* 0.2 1997-06-03 Robin O'Leary <robin@acm.org> - tap gesture
* 0.3 1997-06-27 Alan Cox <alan@cymru.net> - 2.1 commit
* 0.4 1997-11-09 Alan Cox <alan@cymru.net> - Single Unix VFS API changes
*/
#include <linux/config.h>
......@@ -532,7 +533,7 @@ static int open_pad(struct inode * inode, struct file * file)
/*
* writes are disallowed
*/
static long write_pad(struct inode * inode, struct file * file, const char * buffer, unsigned long count)
static ssize_t write_pad(struct file * file, const char * buffer, size_t count, loff_t *ppos)
{
return -EINVAL;
}
......@@ -553,7 +554,7 @@ void new_sample(int d[3])
/*
* Read pad data. Currently never blocks.
*/
static long read_pad(struct inode * inode, struct file * file, char * buffer, unsigned long count)
static ssize_t read_pad(struct file * file, char * buffer, size_t count, loff_t *ppos)
{
int r;
......
......@@ -29,7 +29,6 @@
* 961118 Changed some verbiage on some of the output, tidied up
* code bits, and added compatibility to 2.1.x.
* 970912 Enabled board on open and disable on close.
* 971107 Took account of recent VFS changes (broke read).
*/
#include <linux/module.h>
......@@ -223,7 +222,7 @@ static void pcwd_send_heartbeat(void)
}
static int pcwd_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
unsigned int cmd, unsigned long arg)
{
int i, cdat, rv;
static struct watchdog_info ident=
......@@ -360,12 +359,8 @@ static int pcwd_ioctl(struct inode *inode, struct file *file,
return 0;
}
static ssize_t pcwd_write(struct file *file, const char *buf, size_t len,
loff_t *ppos)
static long pcwd_write(struct inode *inode, struct file *file, const char *buf, unsigned long len)
{
/* Can't seek (pwrite) on this device */
if (ppos != &file->f_pos)
return -ESPIPE;
if (len)
{
pcwd_send_heartbeat();
......@@ -386,15 +381,11 @@ static int pcwd_open(struct inode *ino, struct file *filep)
return(0);
}
static ssize_t pcwd_read(struct file *file, char *buf, size_t count,
loff_t *ppos)
static ssize_t pcwd_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
unsigned short c = inb(current_readport);
unsigned char cp;
/* Can't seek (pread) on this device */
if (ppos != &file->f_pos)
return -ESPIPE;
switch(MINOR(file->f_dentry->d_inode->i_rdev))
{
case TEMP_MINOR:
......@@ -497,16 +488,11 @@ static struct file_operations pcwd_fops = {
pcwd_read, /* Read */
pcwd_write, /* Write */
NULL, /* Readdir */
NULL, /* Poll */
NULL, /* Select */
pcwd_ioctl, /* IOctl */
NULL, /* MMAP */
pcwd_open, /* Open */
pcwd_close, /* Release */
NULL, /* Fsync */
NULL, /* Fasync */
NULL, /* CheckMediaChange */
NULL, /* Revalidate */
NULL, /* Lock */
pcwd_close /* Close */
};
static struct miscdevice pcwd_miscdev = {
......
This diff is collapsed.
......@@ -113,7 +113,7 @@ static void softdog_ping(void)
return;
}
static long softdog_write(struct inode *inode, struct file *file, const char *data, unsigned long len)
static ssize_t softdog_write(struct file *file, const char *data, size_t len, loff_t *ppos)
{
/*
* Refresh the timer.
......
......@@ -1750,11 +1750,10 @@ static long long qic02_tape_lseek(struct file * file, long long offset, int orig
* request would return the EOF flag for the previous file.
*/
static long qic02_tape_read(struct inode * inode, struct file * filp,
char * buf, unsigned long count)
static ssize_t qic02_tape_read(struct file * filp, char * buf, size_t count, loff_t *ppos)
{
int err;
kdev_t dev = inode->i_rdev;
kdev_t dev = filp->f_dentry->d_inode->i_rdev;
unsigned short flags = filp->f_flags;
unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
int stat;
......@@ -1925,7 +1924,7 @@ static long qic02_tape_read(struct inode * inode, struct file * filp,
{
status_bytes_rd = YES;
buf += bytes_done;
filp->f_pos += bytes_done;
*ppos += bytes_done;
total_bytes_done += bytes_done;
count -= bytes_done;
}
......@@ -1964,11 +1963,11 @@ static long qic02_tape_read(struct inode * inode, struct file * filp,
* tape device again. The driver will detect an exception status in (No Cartridge)
* and force a rewind. After that tar may continue writing.
*/
static long qic02_tape_write(struct inode * inode, struct file * filp,
const char * buf, unsigned long count)
static ssize_t qic02_tape_write( struct file * filp, const char * buf,
size_t count, loff_t *ppos)
{
int err;
kdev_t dev = inode->i_rdev;
kdev_t dev = filp->f_dentry->d_inode->i_rdev;
unsigned short flags = filp->f_flags;
unsigned long bytes_todo, bytes_done, total_bytes_done = 0;
......@@ -2120,7 +2119,7 @@ static long qic02_tape_write(struct inode * inode, struct file * filp,
{
status_bytes_wr = YES;
buf += bytes_done;
filp->f_pos += bytes_done;
*ppos += bytes_done;
total_bytes_done += bytes_done;
count -= bytes_done;
}
......
......@@ -1140,27 +1140,9 @@ static void release_dev(struct file * filp)
}
/*
* Make sure that the tty's task queue isn't activated. If it
* is, take it out of the linked list. The tqueue isn't used by
* pty's, so skip the test for them.
* Make sure that the tty's task queue isn't activated.
*/
if (tty->driver.type != TTY_DRIVER_TYPE_PTY) {
spin_lock_irq(&tqueue_lock);
if (tty->flip.tqueue.sync) {
struct tq_struct *tq, *prev;
for (tq=tq_timer, prev=0; tq; prev=tq, tq=tq->next) {
if (tq == &tty->flip.tqueue) {
if (prev)
prev->next = tq->next;
else
tq_timer = tq->next;
break;
}
}
}
spin_unlock_irq(&tqueue_lock);
}
run_task_queue(&tq_timer);
/*
* The release_mem function takes care of the details of clearing
......
/*
tuner.h - definition for different tuners
Copyright (C) 1997 Markus Schroeder (schroedm@uni-duesseldorf.de)
minor modifications by Ralph Metzler (rjkm@thp.uni-koeln.de)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _TUNER_H
#define _TUNER_H
#define TUNER_TEMIC_PAL 0 /* Miro Gpio Coding -1 */
#define TUNER_PHILIPS_PAL_I 1
#define TUNER_PHILIPS_NTSC 2
#define TUNER_PHILIPS_SECAM 3
#define TUNER_ABSENT 4
#define TUNER_PHILIPS_PAL 5
#define TUNER_TEMIC_NTSC 6
#define TUNER_TEMIC_PAL_I 7
#define NOTUNER 0
#define PAL 1
#define PAL_I 2
#define NTSC 3
#define SECAM 4
#define NoTuner 0
#define Philips 1
#define TEMIC 2
#define Sony 3
struct tunertype {
char *name;
unchar Vendor;
unchar Type;
ushort thresh1; /* frequency Range for UHF,VHF-L, VHF_H */
ushort thresh2;
unchar VHF_L;
unchar VHF_H;
unchar UHF;
unchar config;
unchar I2C;
};
#endif
/*
* Video capture interface for Linux
*
* A generic video device interface for the LINUX operating system
* using a set of device structures/vectors for low level operations.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Author: Alan Cox, <alan@cymru.net>
*
* Fixes:
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/videodev.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#define VIDEO_NUM_DEVICES 256
/*
* Active devices
*/
static struct video_device *video_device[VIDEO_NUM_DEVICES];
/*
* Initialiser list
*/
struct video_init
{
char *name;
int (*init)(struct video_init *);
};
extern int init_bttv_cards(struct video_init *);
static struct video_init video_init_list[]={
#ifdef CONFIG_VIDEO_BT848
{"bttv", init_bttv_cards},
#endif
#ifdef CONFIG_VIDEO_BWQCAM
{"bttv", init_bw_qcams},
#endif
#ifdef CONFIG_VIDEO_PMS
{"bttv", init_pms_cards},
#endif
{"end", NULL}
};
/*
* Read will do some smarts later on. Buffer pin etc.
*/
static ssize_t video_read(struct file *file,
char *buf, size_t count, loff_t *ppos)
{
int err;
struct video_device *vfl=video_device[MINOR(file->f_dentry->d_inode->i_rdev)];
return vfl->read(vfl, buf, count, file->f_flags&O_NONBLOCK);
}
/*
* Write for now does nothing. No reason it shouldnt do overlay setting
* for some boards I guess..
*/
static ssize_t video_write(struct file *file, const char *buf,
size_t count, loff_t *ppos)
{
int err;
struct video_device *vfl=video_device[MINOR(file->f_dentry->d_inode->i_rdev)];
return vfl->write(vfl, buf, count, file->f_flags&O_NONBLOCK);
}
/*
* Open a video device.
*/
static int video_open(struct inode *inode, struct file *file)
{
unsigned int minor = MINOR(inode->i_rdev);
int err;
struct video_device *vfl;
if(minor>=VIDEO_NUM_DEVICES)
return -ENODEV;
vfl=video_device[minor];
if(vfl==NULL)
return -ENODEV;
if(vfl->busy)
return -EBUSY;
vfl->busy=1; /* In case vfl->open sleeps */
if(vfl->open)
{
err=vfl->open(vfl,0); /* Tell the device it is open */
if(err)
{
vfl->busy=0;
return err;
}
}
return 0;
}
/*
* Last close of a video for Linux device
*/
static int video_release(struct inode *inode, struct file *file)
{
struct video_device *vfl=video_device[MINOR(inode->i_rdev)];
if(vfl->close)
vfl->close(vfl);
vfl->busy=0;
return 0;
}
/*
* Question: Should we be able to capture and then seek around the
* image ?
*/
static long long video_lseek(struct file * file,
long long offset, int origin)
{
return -ESPIPE;
}
static int video_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
struct video_device *vfl=video_device[MINOR(inode->i_rdev)];
int err=vfl->ioctl(vfl, cmd, (void *)arg);
if(err!=-ENOIOCTLCMD)
return err;
switch(cmd)
{
default:
return -EINVAL;
}
}
/*
* We need to do MMAP support
*/
/*
* Video For Linux device drivers request registration here.
*/
int video_register_device(struct video_device *vfd)
{
int i=0;
int base=0;
int err;
for(i=base;i<base+VIDEO_NUM_DEVICES;i++)
{
if(video_device[i]==NULL)
{
video_device[i]=vfd;
vfd->minor=i;
/* The init call may sleep so we book the slot out
then call */
MOD_INC_USE_COUNT;
err=vfd->initialize(vfd);
if(err<0)
{
video_device[i]=NULL;
MOD_DEC_USE_COUNT;
return err;
}
return 0;
}
}
return -ENFILE;
}
/*
* Unregister an unused video for linux device
*/
void video_unregister_device(struct video_device *vfd)
{
if(video_device[vfd->minor]!=vfd)
panic("vfd: bad unregister");
video_device[vfd->minor]=NULL;
MOD_DEC_USE_COUNT;
}
static struct file_operations video_fops=
{
video_lseek,
video_read,
video_write,
NULL, /* readdir */
NULL, /* poll */
video_ioctl,
NULL, /* mmap */
video_open,
video_release
};
/*
* Initialise video for linux
*/
int videodev_init(void)
{
struct video_init *vfli = video_init_list;
printk(KERN_INFO "Linux video capture interface: v0.01 ALPHA\n");
if(register_chrdev(VIDEO_MAJOR,"video_capture", &video_fops))
{
printk("video_dev: unable to get major %d\n", VIDEO_MAJOR);
return -EIO;
}
/*
* Init kernel installed video drivers
*/
while(vfli->init!=NULL)
{
vfli->init(vfli);
vfli++;
}
return 0;
}
int init_module(void)
{
return videodev_init();
}
void cleanup_module(void)
{
unregister_chrdev(VIDEO_MAJOR, "video_capture");
}
EXPORT_SYMBOL(video_register_device);
EXPORT_SYMBOL(video_unregister_device);
......@@ -169,7 +169,7 @@ static void wdt_ping(void)
outb_p(0, WDT_DC);
}
static long wdt_write(struct inode *inode, struct file *file, const char *buf, unsigned long count)
static ssize_t wdt_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
{
if(count)
{
......@@ -183,13 +183,13 @@ static long wdt_write(struct inode *inode, struct file *file, const char *buf, u
* Read reports the temperature in farenheit
*/
static long wdt_read(struct inode *inode, struct file *file, char *buf, unsigned long count)
static ssize_t wdt_read(struct file *file, char *buf, size_t count, loff_t *ptr)
{
unsigned short c=inb_p(WDT_RT);
unsigned char cp;
int err;
switch(MINOR(inode->i_rdev))
switch(MINOR(file->f_dentry->d_inode->i_rdev))
{
case TEMP_MINOR:
err=verify_area(VERIFY_WRITE, buf, 1);
......
......@@ -140,9 +140,9 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
fi
fi
if [ ! "$CONFIG_PARPORT" = "n" ]; then
dep_tristate 'PLIP (parallel port) support' CONFIG_PLIP $CONFIG_PARPORT
fi
#if [ ! "$CONFIG_PARPORT" = "n" ]; then
# dep_tristate 'PLIP (parallel port) support' CONFIG_PLIP $CONFIG_PARPORT
#fi
tristate 'PPP (point-to-point) support' CONFIG_PPP
if [ ! "$CONFIG_PPP" = "n" ]; then
......@@ -181,7 +181,7 @@ if [ "$CONFIG_NET_RADIO" != "n" ]; then
bool 'HFmodem support for WSS and Crystal cards' CONFIG_HFMODEM_WSS
fi
fi
tristate 'STRIP (Metricom starmode radio IP)' CONFIG_STRIP
# tristate 'STRIP (Metricom starmode radio IP)' CONFIG_STRIP
tristate 'AT&T WaveLAN & DEC RoamAbout DS support' CONFIG_WAVELAN
fi
......
This diff is collapsed.
(2nd attempt. 1st bounced.)
Hi again
About my previous mail: I've looked into parallel.asm, and I'm
rather confused. Looks like the code agrees with you, but not
the protocol description preceding it?? I got to look more
careful, but it wont be for a while (approx a week).
>From plip.c (v0.04):
>make one yourself. The wiring is:
> INIT 16 - 16 SLCTIN 17 - 17
> GROUND 25 - 25
> D0->ERROR 2 - 15 15 - 2
I saw you removed 1 and 14 from the cable description, but not
16 and 17. Why is that?
Have been successful in getting parallel.com working (the Messy-Loss
software). Using the pksend on the sender and pkall/pkwatch/whatnot
gives me a hung receiver. (The cable works, I've tried unet11, a DOS
cheap-net prog.)
Using PLIP v0.03 and trying to ping the other end gives
88 timeout 88 timeout....(more) 2386 bogus packet size, dropped
on the receiver, and on the sender lots of timeout, but of
course I don't know how much is supposed to work.
The following to something I wrote when I should have gone to bed a
long time ago. Use it for whatever you like, or dump it in the bin. ;^)
/Tommy
-----
Becker [& Co] proudly presents PLIP
What is PLIP?
=============
PLIP is Parallel Line IP, that is, the transportation of IP packages
over a parallel port. In the case of a PC, the obvious choice is the
printer port. PLIP is a non-standard, but [can use] uses the standard
LapLink null-printer cable [can also work in turbo mode, with a PLIP
cable]. [The protocol used to pack IP packages, is a simple one
initiated by Crynwr.]
Advantages of PLIP
==================
It's cheap, it's available everywhere, and it's easy.
The PLIP cable is all that's needed to connect two Linux boxes, and it
can be build for very bucks.
Connecting two Linux boxes takes only a seconds decision and a few
minutes work, no need to search for a [supported] netcard. This might
even be especially important in the case of notebooks, where netcard
are not easily available.
Not requiring a netcard also means that apart from connecting the
cables, everything else is software configuration [which in principle
could be made very easy.]
Disadvantages of PLIP
=====================
Doesn't work over a modem, like SLIP and PPP. Limited range, 15 m.
Can only be used to connect three (?) Linux boxes. Doesn't connect to
an exiting ethernet. Isn't standard (not even de facto standard, like
SLIP).
Performance
==========
PLIP easily outperforms ethernet cards....(ups, I was dreaming, but
it *is* getting late. EOB)
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.
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