Commit 70d8d206 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.17

parent c0711bf3
......@@ -122,7 +122,9 @@ S: 6369 BG Simpelveld
S: The Netherlands
N: Hennus Bergman
E: hennus@sky.ow.nl [My uucp-fed Linux box at home]
E: hennus@cybercomm.nl
W: http://www.cybercomm.nl/~hennus/
P: 1024/77D50909 76 99 FD 31 91 E1 96 1C 90 BB 22 80 62 F6 BD 63
D: Author and maintainer of the QIC-02 tape driver
S: The Netherlands
......@@ -499,7 +501,7 @@ S: USA
N: Grant Guenther
E: grant@torque.net
D: Iomega PPA / ZIP driver
D: drivers for parallel port devices: ppa, ez, bpcd
S: 906-1001 Bay St.
S: Toronto, Ontario, M5S 3A6
S: Canada
......
......@@ -28,6 +28,8 @@ digiboard.txt
- info on the Digiboard PC/X{i,e,eve} multiport boards.
exception.txt
- how linux v2.1 handles exceptions without verify_area etc.
ez.txt
- documentation for the SyQuest parallel port EZ drive support.
filesystems/
- directory with info on the various filesystems that Linux supports.
ide.txt
......
......@@ -89,19 +89,9 @@ feel free to upgrade if you want the gcc bug fixes).
Networking Changes
==================
The network code now assumes less about your setup, which can cause
routing problems due to init scripts expecting the old behavior.
Lines like:
`/sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0'
need to be changed to something like:
`/sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask
255.0.0.0 dev lo'
for routing to be set up correctly.
Please read Documentation/networking/routing.txt. People wanting to use
all the new routing table features such as OSPF classes should also read
Documentation/networking/policy-routing.txt.
SysVinit
========
......
This diff is collapsed.
......@@ -2,6 +2,9 @@
- this file (info on CD-ROMs and Linux)
aztcd
- info on Aztech/Orchid/Okano/Wearnes/Conrad/CyCDROM driver.
bpcd
- info on MicroSolutions backpack CDROM
cdrom-standard.tex
- LaTeX document on standardizing the CD-ROM programming interface.
cdu31a
......
linux/Documentation/cdrom/bpcd (c) 1996 Grant R. Guenther <grant@torque.net>
This file documents the bpcd driver for the MicroSolutions backpack CDrom,
an external parallel port device.
There are apparently two versions of the backpack protocol. This
driver knows about the version 2 protocol - as is used in the 4x
and 6x products. There is no support for the sound hardware that
is included in some models. It should not be difficult to add
support for the ATAPI audio play functions and the corresponding
ioctls.
The driver was developed by reverse engineering the protocol
and testing it on the backpack model 164550. This model
is actually a stock ATAPI drive packaged with a custom
ASIC that implements the IDE over parallel protocol.
I tested with a backpack that happened to contain a Goldstar
drive, but I've seen reports of Sony and Mitsumi drives as well.
Before attempting to use the driver, you will need to
create a new device special file. The following commands will
do that for you:
mknod /dev/bpcd b 41 0
chown root:disk /dev/bpcd
chmod 660 /dev/bpcd
Afterward, you can mount a disk in the usual way:
mount -t iso9660 /dev/bpcd /cdrom
(assuming you have made a directory /cdrom to use as a mount point).
The driver will attempt to detect which parallel port your
backpack is connected to. If this fails for any reason, you
can override it by specifying a port on the LILO command line
(for built in drivers) or the insmod command (for drivers built
as modules). If your drive is on the port at 0x3bc, you would
use one of these commands:
LILO: bpcd=0x3bc
insmod: insmod bpcd bp_base=0x3bc
The driver can detect if the parallel port supports 8-bit
transfers. If so, it will use them. You can force it to use
4-bit (nybble) mode by setting the variable bp_nybble to 1 on
an insmod command, or using the following LILO parameters:
bpcd=0x3bc,1
(you must specify the correct port address if you use this method.)
There is currently no support for EPP or ECP modes. Also,
as far as I can tell, the MicroSolutions protocol does not
support interrupts in the 4-bit and 8-bit modes.
MicroSolutions' protocol allows for several drives to be
chained together off the same parallel port. Currently, this
driver will recognise only one of them. If you do have more
than one drive, it will choose the one with the lowest id number,
where the id number is the last two digits of the product's
serial number.
It is not currently possible to connect a printer to the chained
port on the BackPack and expect Linux to use both devices at once.
If you need to use this driver together with a printer on the
same port, build both the bpcd and lp drivers as modules.
Keep an eye on http://www.torque.net/bpcd.html for news and
other information about the driver. If you have any problems
with this driver, please send me, grant@torque.net, some mail
directly before posting into the newsgroups or mailing lists.
......@@ -42,7 +42,7 @@ foo \kill}%
%
\title{{\bf Linux Allocated Devices}}
\author{Maintained by H. Peter Anvin $<$hpa@zytor.com$>$}
\date{Last revised: December 16, 1996}
\date{Last revised: December 20, 1996}
\maketitle
%
\noindent
......@@ -188,7 +188,8 @@ reply.
\major{64}{}{char }{ENskip kernel encryption package}
\major{65}{}{char }{Sundance ``plink'' Transputer boards}
\major{66}{}{char }{YARC PowerPC PCI coprocessor card}
\major{67}{--119}{}{Unallocated}
\major{67}{}{char }{Coda network filesystem}
\major{68}{--119}{}{Unallocated}
\major{120}{--127}{}{Local/experimental use}
\major{128}{--239}{}{Unallocated}
\major{240}{--254}{}{Local/experimental use}
......@@ -1198,13 +1199,21 @@ $<$jth@prosig.demon.co.uk$>$ for information.
\begin{devicelist}
\major{66}{}{char }{YARC PowerPC PCI coprocessor card}
\minor{0}{/dev/yppcpci00}{First YARC card}
\minor{1}{/dev/yppcpci01}{Second YARC card}
\minor{0}{/dev/yppcpci0}{First YARC card}
\minor{1}{/dev/yppcpci1}{Second YARC card}
\minordots
\end{devicelist}
\begin{devicelist}
\major{67}{--119}{}{Unallocated}
\major{67}{}{char }{Coda network filesystem}
\minor{0}{/dev/cfs0}{Coda cache manager}
\end{devicelist}
\noindent
See {\em http://www.coda.cs.cmu.edu\/} for information about Coda.
\begin{devicelist}
\major{68}{--119}{}{Unallocated}
\end{devicelist}
\begin{devicelist}
......
......@@ -2,7 +2,7 @@
Maintained by H. Peter Anvin <hpa@zytor.com>
Last revised: December 7, 1996
Last revised: December 20, 1996
This list is the successor to Rick Miller's Linux Device List, which
he stopped maintaining when he got busy with other things in 1993. It
......@@ -841,11 +841,16 @@ reply.
<jth@prosig.demon.co.uk> for information.
66 char YARC PowerPC PCI coprocessor card
0 = /dev/yppcpci00 First YARC card
1 = /dev/yppcpci01 Second YARC card
0 = /dev/yppcpci0 First YARC card
1 = /dev/yppcpci1 Second YARC card
...
67-119 UNALLOCATED
67 char Coda network file system
0 = /dev/cfs0 Coda cache manager
See http://www.coda.cs.cmu.edu for information about Coda.
68-119 UNALLOCATED
120-127 LOCAL/EXPERIMENTAL USE
......
linux/Documentation/ez.txt (c) 1996 Grant R. Guenther <grant@torque.net>
This file documents the ez driver for the parallel port versions of
SyQuest's EZ135 and EZ230 removable media disk drives.
Special thanks go to Pedro Soria-Rodriguez for his help testing
the EZFlyer 230 support.
The drive is actually SyQuest's IDE product with a ShuttleTech
IDE <-> parallel converter chip built in.
Before attempting to access the new driver, you will need to
create some device special files. The following commands will
do that for you:
mknod /dev/eza b 40 0
mknod /dev/eza1 b 40 1
mknod /dev/eza2 b 40 2
mknod /dev/eza3 b 40 3
mknod /dev/eza4 b 40 4
chown root:disk /dev/ez*
chmod 660 /dev/ez*
You can make devices for more partitions (up to 15) if you need to.
You can alter certain driver parameters on the LILO or LOADLIN
command line. The general syntax is
ez=base[,irq]
where base is the base address of the parallel port you want to use
and irq is the interrupt number for that port. By default, the
driver uses the ports at 0x378 and irq 7. You can disable the
interrupt by specifying it as 0. For example, to run the driver
on port 0x3bc without an interrupt, you would append the following
to the LILO command line:
ez=0x3bc,0
If you have configured the driver as a loadable module, you can
adjust these parameters on the insmod command line using the
variables ez_base and ez_irq. For example:
insmod ez ez_base=0x3bc
The driver can detect if the parallel port supports 8-bit
transfers. If so, it will use them.
The driver can be used with or without interrupts. If an IRQ
is specified the driver will use it - if it can. If the irq
number is set to 0, an alternative, polling-based, strategy
will be used. Polling consumes more CPU time, but may be more
stable on some systems.
If you experience timeout errors while using this driver - and
you have enabled interrupts - try disabling the interrupt. I
have heard reports of some parallel ports having exceptionally
unreliable interrupts. This could happen on misconfigured
systems in which an inactive sound card shares the same IRQ with
the parallel port. (Remember that most people do not use the
parallel port interrupt for printing.)
It would be advantageous to use multiple mode transfers,
but ShuttleTech's driver does not appear to use them, so I'm not
sure that the converter can handle it.
It is not currently possible to connect a printer to the chained
port on an EZ drive and expect Linux to use both devices at once.
If you need to do this, build both the ez and lp drivers as modules
and load one or the other as required.
When the EZ230 powers on, the "standby timer" is set to about 6
minutes: if the drive is idle for that length of time, it will
put itself into a low power standby mode. It takes a couple of
seconds for the drive to come out of standby mode. So, if you
load this driver while it is in standby mode, you will notice
a "freeze" of a second or two as the driver waits for the EZ230
to come back to life. Once loaded, this driver disables the
standby timer (until you next power up the EZ230 ...)
Keep an eye on http://www.torque.net/ez135.html for news and
other information about the driver. If you have any problems
with this driver, please send me, grant@torque.net, some mail
directly before posting into the newsgroups or mailing lists.
Linux/m68k Amiga Bootstrap version 5.1
--------------------------------------
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-agrw.informatik.uni-kl.de/~jmayer/linux68k/linux68k-faq
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.1 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]
Valid options are:
--help Display the usage information
--kernel file Use kernel image `file' (default is `vmlinux')
--ramdisk file Use ramdisk image `file'.
--debug Enable debug mode
--baud Set the serial port speed (default is 9600)
--memfile file Use memory file `file'
--keep-video Don't reset the video mode
--model id Set the Amiga model to `id'.
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.
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 specialized. 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 allows you to specify your Amiga model, and --debug is for
debugging purposes.
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 looks 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. Abbreviations
----------------
All options also have a shorthand:
--help -h
--kernel -k
--ramdisk -r
--debug -d
--baud -b
--memfile -m
--keep-video -v
--model -t
5. 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.
6. 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 Look at the characters that are dumped to the serial port during
booting.
7. 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.
8. Credits
----------
This readme was written by Geert Uytterhoeven. A lot of information was taken
from the ANNOUNCE-* files by Hamish Macdonald.
This diff is collapsed.
......@@ -63,6 +63,7 @@ Here is a sample of the available modules included in the kernel sources:
aztcd: Aztech,Orchid,Okano,Wearnes
cm206: Philips/LMS CM206
gscd: Goldstar GCDR-420
bpcd: MicroSolutions backpack CDrom
mcd, mcdx: Mitsumi LU005, FX001
optcd: Optics Storage Dolphin 8000AT
sjcd: Sanyo CDR-H94A
......
......@@ -213,8 +213,10 @@ hp100.c:
in increments of 0x020)
ibmtr.c:
io = 0xA20
(Probes ports: 0xA20, 0xA24 -- Ok, 0x220, 0x224, but IBM style..)
io = 0xa20, 0xa24 (autoprobed by default)
irq = 0 (driver cannot select irq - read from hardware)
mem = 0 (shared memory base set at 0xd0000 and not yet
able to override thru mem= parameter.)
lance.c: *Not modularized*
(PCI, and ISA probing; "CONFIG_PCI" needed for PCI support)
......
The directory ip-routing contains:
- patch to official linux-2.0 kernel tree
The directory ftp.inr.ac.ru:/ip-routing contains:
- iproute.c - "professional" routing table maintainance utility.
......
......@@ -107,6 +107,12 @@ M: faith@cs.unc.edu, Stephen.Rothwell@canb.auug.org.au
L: linux-laptop@vger.rutgers.edu
S: Maintained
TOKEN-RING NETWORK DRIVER
P: Paul Norton
M: pnorton@cts.com
L: linux-net@vger.rutgers.edu
S: Maintained
APPLETALK NETWORK LAYER
P: Alan Cox & University Of Michigan
M: net-patches@lxorguk.ukuu.org.uk
......
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 16
SUBLEVEL = 17
ARCH = i386
......
......@@ -133,7 +133,7 @@ extern void ret_from_sys_call(void);
* Use the passed "regs" pointer to determine how much space we need
* for a kernel fork().
*/
void copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
struct task_struct * p, struct pt_regs * regs)
{
struct pt_regs * childregs;
......@@ -159,6 +159,8 @@ void copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
p->tss.pal_flags = 1; /* set FEN, clear everything else */
p->tss.flags = current->tss.flags;
p->mm->context = 0;
return 0;
}
/*
......
......@@ -145,7 +145,7 @@ void mem_init(unsigned long start_mem, unsigned long end_mem)
unsigned long tmp;
end_mem &= PAGE_MASK;
max_mapnr = MAP_NR(end_mem);
max_mapnr = num_physpages = MAP_NR(end_mem);
high_memory = (void *) end_mem;
start_mem = PAGE_ALIGN(start_mem);
......
......@@ -59,6 +59,7 @@ CONFIG_BLK_DEV_RZ1000=y
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_EZ is not set
# CONFIG_BLK_DEV_HD is not set
#
......@@ -116,7 +117,6 @@ CONFIG_EL3=y
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_NET_RADIO is not set
# CONFIG_NET_HAM is not set
# CONFIG_SLIP is not set
# CONFIG_TR is not set
......
......@@ -298,7 +298,7 @@ void release_thread(struct task_struct *dead_task)
{
}
void copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
struct task_struct * p, struct pt_regs * regs)
{
int i;
......@@ -338,6 +338,7 @@ void copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
p->tss.io_bitmap[i] = ~0;
if (last_task_used_math == current)
__asm__("clts ; fnsave %0 ; frstor %0":"=m" (p->tss.i387));
return 0;
}
/*
......
......@@ -211,7 +211,7 @@ void mem_init(unsigned long start_mem, unsigned long end_mem)
end_mem &= PAGE_MASK;
high_memory = (void *) end_mem;
max_mapnr = MAP_NR(end_mem);
max_mapnr = num_physpages = MAP_NR(end_mem);
/* clear the zero-page */
memset(empty_zero_page, 0, PAGE_SIZE);
......
......@@ -18,19 +18,11 @@ COMPILE_ARCH = $(shell uname -m)
# override top level makefile
AS += -m68020
ifdef CONFIG_KERNEL_ELF
LD += -m m68kelf
ifneq ($(COMPILE_ARCH),$(ARCH))
# prefix for cross-compiling binaries
CROSS_COMPILE = m68k-linux-
endif
else
LD += -m m68klinux
ifneq ($(COMPILE_ARCH),$(ARCH))
# prefix for cross-compiling binaries
CROSS_COMPILE = m68k-linuxaout-
endif
endif
#
# Set these to indicate how to link it..
......@@ -42,11 +34,7 @@ endif
# -qmagic (we need to remove the 32 byte header for bootup purposes)
#
ifdef CONFIG_KERNEL_ELF
LINKFLAGS = -Ttext 0x1000
else
LINKFLAGS = -qmagic -Ttext 0xFE0
endif
CFLAGS := $(CFLAGS) -pipe
......@@ -55,7 +43,7 @@ CFLAGS := $(CFLAGS) -m68040
endif
ifdef CONFIG_OPTIMIZE_060
CFLAGS := $(CFLAGS) -m68020-40 -Wa,-m68060
CFLAGS := $(CFLAGS) -m68020-40
endif
HEAD := arch/m68k/kernel/head.o
......
......@@ -50,7 +50,6 @@
#include <linux/delay.h>
#include <linux/config.h>
#include <linux/interrupt.h>
#include <asm/setup.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/irq.h>
......@@ -606,6 +605,8 @@ static long vfmin = 50, vfmax = 90, hfmin = 15000, hfmax = 38000;
#define SPRITEMEMSIZE (64*64/4) /* max 64*64*4 */
#define DUMMYSPRITEMEMSIZE (8)
#define CHIPRAM_SAFETY_LIMIT (16384)
static u_long videomemory, spritememory;
static u_long videomemorysize;
......@@ -639,7 +640,7 @@ typedef union {
u_short w[2];
} copins;
struct copdisplay {
static struct copdisplay {
copins *init;
copins *wait;
copins *list[2][2];
......@@ -662,7 +663,7 @@ static u_short *lofsprite, *shfsprite, *dummysprite;
* Current Video Mode
*/
struct amiga_fb_par {
static struct amiga_fb_par {
/* General Values */
......@@ -835,7 +836,7 @@ static char *amiga_fb_modenames[] = {
"user0", "user1", "user2", "user3", "user4", "user5", "user6", "user7"
};
struct fb_var_screeninfo amiga_fb_predefined[] = {
static struct fb_var_screeninfo amiga_fb_predefined[] = {
/*
* Autodetect (Default) Video Mode
......@@ -1814,7 +1815,7 @@ struct fb_info *amiga_fb_init(long *mem_start)
custom.dmacon = DMAF_ALL | DMAF_MASTER;
switch (boot_info.bi_amiga.chipset) {
switch (amiga_chipset) {
#ifdef CONFIG_AMIFB_OCS
case CS_OCS:
strcat(amiga_fb_name, "OCS");
......@@ -1825,7 +1826,7 @@ struct fb_info *amiga_fb_init(long *mem_start)
maxdepth[TAG_LORES] = 6;
maxfmode = TAG_FMODE_1;
if (!amifb_usermode) /* Set the Default Video Mode */
get_video_mode(boot_info.bi_un.bi_ami.vblank == 50 ?
get_video_mode(amiga_vblank == 50 ?
DEFMODE_PAL : DEFMODE_NTSC);
videomemorysize = VIDEOMEMSIZE_OCS;
break;
......@@ -1841,13 +1842,14 @@ struct fb_info *amiga_fb_init(long *mem_start)
maxfmode = TAG_FMODE_1;
if (!amifb_usermode) { /* Set the Default Video Mode */
if (AMIGAHW_PRESENT(AMBER_FF))
get_video_mode(boot_info.bi_un.bi_ami.vblank == 50 ?
get_video_mode(amiga_vblank == 50 ?
DEFMODE_AMBER_PAL : DEFMODE_AMBER_NTSC);
else
get_video_mode(boot_info.bi_un.bi_ami.vblank == 50 ?
get_video_mode(amiga_vblank == 50 ?
DEFMODE_PAL : DEFMODE_NTSC);
}
if (boot_info.bi_amiga.chip_size > 1048576)
if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT >
VIDEOMEMSIZE_ECS_1M)
videomemorysize = VIDEOMEMSIZE_ECS_2M;
else
videomemorysize = VIDEOMEMSIZE_ECS_1M;
......@@ -1864,7 +1866,8 @@ struct fb_info *amiga_fb_init(long *mem_start)
maxfmode = TAG_FMODE_4;
if (!amifb_usermode) /* Set the Default Video Mode */
get_video_mode(DEFMODE_AGA);
if (boot_info.bi_amiga.chip_size > 1048576)
if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT >
VIDEOMEMSIZE_AGA_1M)
videomemorysize = VIDEOMEMSIZE_AGA_2M;
else
videomemorysize = VIDEOMEMSIZE_AGA_1M;
......@@ -2504,7 +2507,7 @@ static int ami_decode_var(struct fb_var_screeninfo *var,
AMIGAHW_PRESENT(AGNUS_HR_NTSC)) {
par->beamcon0 = BMC0_PAL;
par->hsstop = 1;
} else if (boot_info.bi_un.bi_ami.vblank != 50)
} else if (amiga_vblank != 50)
return -EINVAL;
} else {
/* NTSC video mode
......@@ -2526,7 +2529,7 @@ static int ami_decode_var(struct fb_var_screeninfo *var,
AMIGAHW_PRESENT(AGNUS_HR_NTSC)) {
par->beamcon0 = 0;
par->hsstop = 1;
} else if (boot_info.bi_un.bi_ami.vblank != 60)
} else if (amiga_vblank != 60)
return -EINVAL;
}
if (IS_OCS) {
......
......@@ -97,7 +97,7 @@ void amiga_init_IRQ(void)
cia_init_IRQ(&ciab_base);
}
void amiga_insert_irq(irq_node_t **list, irq_node_t *node)
static inline void amiga_insert_irq(irq_node_t **list, irq_node_t *node)
{
unsigned long flags;
irq_node_t *cur;
......@@ -135,7 +135,7 @@ void amiga_insert_irq(irq_node_t **list, irq_node_t *node)
restore_flags(flags);
}
void amiga_delete_irq(irq_node_t **list, void *dev_id)
static inline void amiga_delete_irq(irq_node_t **list, void *dev_id)
{
unsigned long flags;
irq_node_t *node;
......
......@@ -23,8 +23,6 @@
#include <linux/random.h>
#include <linux/kernel.h>
#include <asm/setup.h>
#include <asm/amigatypes.h>
#include <asm/amigaints.h>
#include <asm/amigahw.h>
#include <asm/irq.h>
......
......@@ -11,7 +11,6 @@
#include <linux/sched.h>
#include <linux/timer.h>
#include <asm/amigatypes.h>
#include <asm/system.h>
#include <asm/amigahw.h>
......
......@@ -8,7 +8,6 @@
#include <linux/types.h>
#include <linux/kernel.h>
#include <asm/setup.h>
#include <asm/amigahw.h>
struct chip_desc {
......@@ -21,7 +20,7 @@ struct chip_desc {
#define DP(ptr) ((struct chip_desc *)(ptr))
static unsigned long chipsize;
u_long amiga_chip_size;
static unsigned long chipavail; /*MILAN*/
/*MILAN*/
......@@ -41,22 +40,20 @@ void amiga_chip_init (void)
if (!AMIGAHW_PRESENT(CHIP_RAM))
return;
chipsize = boot_info.bi_amiga.chip_size;
/* initialize start boundary */
dp = DP(chipaddr);
dp->first = 1;
dp->alloced = 0;
dp->length = chipsize - 2*sizeof(*dp);
dp->length = amiga_chip_size - 2*sizeof(*dp);
/* initialize end boundary */
dp = DP(chipaddr + chipsize) - 1;
dp = DP(chipaddr + amiga_chip_size) - 1;
dp->last = 1;
dp->alloced = 0;
dp->length = chipsize - 2*sizeof(*dp);
dp->length = amiga_chip_size - 2*sizeof(*dp);
chipavail = dp->length; /*MILAN*/
#ifdef DEBUG
......@@ -82,7 +79,7 @@ void *amiga_chip_alloc (long size)
* get pointer to descriptor for last chunk by
* going backwards from end chunk
*/
dp = DP(chipaddr + chipsize) - 1;
dp = DP(chipaddr + amiga_chip_size) - 1;
dp = DP((unsigned long)dp - dp->length) - 1;
while ((dp->alloced || dp->length < size)
......
This diff is collapsed.
......@@ -424,6 +424,7 @@ static int Cyber_encode_fix(struct fb_fix_screeninfo *fix,
fix->xpanstep = 0;
fix->ypanstep = 0;
fix->ywrapstep = 0;
fix->line_length = 0;
for (i = 0; i < arraysize(fix->reserved); i++)
fix->reserved[i] = 0;
......@@ -896,10 +897,10 @@ static void memcpy_fs(int fsfromto, void *to, void *from, int len)
memcpy(to, from, len);
return;
case 1:
memcpy_fromfs(to, from, len);
copy_from_user(to, from, len);
return;
case 2:
memcpy_tofs(to, from, len);
copy_to_user(to, from, len);
return;
}
}
......
#include <linux/types.h>
#include <linux/module.h>
#include <asm/zorro.h>
#include <asm/amigatypes.h>
#include <asm/amigahw.h>
#include <asm/amigatypes.h>
extern volatile u_short amiga_audio_min_period;
extern u_short amiga_audio_period;
static struct symbol_table mach_amiga_symbol_table = {
static struct symbol_table amiga_symbol_table = {
#include <linux/symtab_begin.h>
/*
* Add things here when you find the need for it.
*/
X(amiga_model),
X(amiga_hw_present),
X(amiga_eclock),
X(amiga_colorclock),
X(amiga_chip_alloc),
X(amiga_chip_free),
......@@ -34,7 +36,7 @@ static struct symbol_table mach_amiga_symbol_table = {
#include <linux/symtab_end.h>
};
void mach_amiga_syms_export(void)
void amiga_syms_export(void)
{
register_symtab(&mach_amiga_symbol_table);
register_symtab(&amiga_symbol_table);
}
......@@ -614,10 +614,12 @@ END
/*
* Configured Expansion Devices
* Expansion Devices
*/
static u_long BoardPartFlags[NUM_AUTO] = { 0, };
int zorro_num_autocon;
struct ConfigDev zorro_autocon[ZORRO_NUM_AUTO];
static u_long BoardPartFlags[ZORRO_NUM_AUTO] = { 0, };
/*
......@@ -657,14 +659,14 @@ int zorro_find(int manuf, int prod, int part, int index)
return(0);
}
for (key = index + 1; key <= boot_info.bi_amiga.num_autocon; key++) {
cd = &boot_info.bi_amiga.autocon[key-1];
for (key = index + 1; key <= zorro_num_autocon; key++) {
cd = &zorro_autocon[key-1];
if ((cd->cd_Rom.er_Manufacturer == manuf) &&
(cd->cd_Rom.er_Product == prod) &&
!(BoardPartFlags[key-1] & (1<<part)))
break;
}
return(key <= boot_info.bi_amiga.num_autocon ? key : 0);
return(key <= zorro_num_autocon ? key : 0);
}
......@@ -676,10 +678,10 @@ struct ConfigDev *zorro_get_board(int key)
{
struct ConfigDev *cd = NULL;
if ((key < 1) || (key > boot_info.bi_amiga.num_autocon))
if ((key < 1) || (key > zorro_num_autocon))
printk("zorro_get_board: bad key %d\n", key);
else
cd = &boot_info.bi_amiga.autocon[key-1];
cd = &zorro_autocon[key-1];
return(cd);
}
......@@ -691,7 +693,7 @@ struct ConfigDev *zorro_get_board(int key)
void zorro_config_board(int key, int part)
{
if ((key < 1) || (key > boot_info.bi_amiga.num_autocon))
if ((key < 1) || (key > zorro_num_autocon))
printk("zorro_config_board: bad key %d\n", key);
else if ((part < 0) || (part > 31))
printk("zorro_config_board: bad part %d\n", part);
......@@ -708,7 +710,7 @@ void zorro_config_board(int key, int part)
void zorro_unconfig_board(int key, int part)
{
if ((key < 1) || (key > boot_info.bi_amiga.num_autocon))
if ((key < 1) || (key > zorro_num_autocon))
printk("zorro_unconfig_board: bad key %d\n", key);
else if ((part < 0) || (part > 31))
printk("zorro_unconfig_board: bad part %d\n", part);
......@@ -738,7 +740,7 @@ static int identify(int devnum, char *buf)
int i, j, k, len = 0;
enum GVP_ident epc;
cd = &boot_info.bi_amiga.autocon[devnum];
cd = &zorro_autocon[devnum];
manuf = cd->cd_Rom.er_Manufacturer;
prod = cd->cd_Rom.er_Product;
addr = (u_long)cd->cd_BoardAddr;
......@@ -820,11 +822,11 @@ void zorro_identify(void)
return;
printk("Probing AutoConfig expansion device(s):\n");
for (i = 0; i < boot_info.bi_amiga.num_autocon; i++) {
for (i = 0; i < zorro_num_autocon; i++) {
identify(i, tmp);
printk(tmp);
}
if (!boot_info.bi_amiga.num_autocon)
if (!zorro_num_autocon)
printk("No AutoConfig expansion devices present.\n");
}
......@@ -840,7 +842,7 @@ int zorro_get_list(char *buffer)
if (MACH_IS_AMIGA && AMIGAHW_PRESENT(ZORRO)) {
len = sprintf(buffer, "AutoConfig expansion devices:\n");
for (i = 0; i < boot_info.bi_amiga.num_autocon; i++) {
for (i = 0; i < zorro_num_autocon; i++) {
j = identify(i, tmp);
if (len+j >= 4075) {
len += sprintf(buffer+len, "4K limit reached!\n");
......@@ -911,12 +913,12 @@ void zorro_init(void)
return;
/* Mark all available Zorro II memory */
for (i = 0; i < boot_info.bi_amiga.num_autocon; i++) {
cd = &boot_info.bi_amiga.autocon[i];
for (i = 0; i < zorro_num_autocon; i++) {
cd = &zorro_autocon[i];
if (cd->cd_Rom.er_Type & ERTF_MEMLIST)
mark_region((u_long)cd->cd_BoardAddr, cd->cd_BoardSize, 1);
}
/* Unmark all used Zorro II memory */
for (i = 0; i < boot_info.num_memory; i++)
mark_region(boot_info.memory[i].addr, boot_info.memory[i].size, 0);
for (i = 0; i < m68k_num_memory; i++)
mark_region(m68k_memory[i].addr, m68k_memory[i].size, 0);
}
......@@ -7,8 +7,6 @@
#
# Note 2! The CFLAGS definitions are now in the main makefile...
EXTRA_CFLAGS := -Wa,-m68030
O_TARGET := atari.o
O_OBJS := config.o atakeyb.o ataints.o \
stdma.o atasound.o joystick.o stram.o atafb.o ksyms.o
......
......@@ -210,11 +210,11 @@ And on the MV300 it's difficult to read out the hardware palette. So we
just keep track of the set colors in our own array here, and use that!
*/
struct { unsigned char red,green,blue,pad; } MV300_color[256];
static struct { unsigned char red,green,blue,pad; } MV300_color[256];
#endif /* ATAFB_EXT */
int inverse=0;
static int inverse=0;
extern int fontheight_8x8;
extern int fontwidth_8x8;
......@@ -332,7 +332,7 @@ static char *user6_names[] = {"user6", NULL};
static char *user7_names[] = {"user7", NULL};
static char *dummy_names[] = {"dummy", NULL};
char **fb_var_names[] = {
static char **fb_var_names[] = {
/* Writing the name arrays directly in this array (via "(char *[]){...}")
* crashes gcc 2.5.8 (sigsegv) if the inner array
* contains more than two items. I've also seen that all elements
......@@ -365,7 +365,7 @@ char **fb_var_names[] = {
/* ,NULL */ /* this causes a sigsegv on my gcc-2.5.8 */
};
struct fb_var_screeninfo atari_fb_predefined[] = {
static struct fb_var_screeninfo atari_fb_predefined[] = {
/*
* yres_virtual==0 means use hw-scrolling if possible, else yres
*/
......@@ -467,7 +467,7 @@ struct fb_var_screeninfo atari_fb_predefined[] = {
0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0 }
};
int num_atari_fb_predefined=arraysize(atari_fb_predefined);
static int num_atari_fb_predefined=arraysize(atari_fb_predefined);
static int
......@@ -2348,7 +2348,7 @@ static int pan_display( struct fb_var_screeninfo *var,
#ifdef ATAFB_TT
struct fb_hwswitch tt_switch = {
static struct fb_hwswitch tt_switch = {
tt_detect, tt_encode_fix, tt_decode_var, tt_encode_var,
tt_get_par, tt_set_par, tt_getcolreg, tt_setcolreg,
set_screen_base, NULL, pan_display
......@@ -2356,7 +2356,7 @@ struct fb_hwswitch tt_switch = {
#endif
#ifdef ATAFB_FALCON
struct fb_hwswitch falcon_switch = {
static struct fb_hwswitch falcon_switch = {
falcon_detect, falcon_encode_fix, falcon_decode_var, falcon_encode_var,
falcon_get_par, falcon_set_par, falcon_getcolreg,
falcon_setcolreg, set_screen_base, falcon_blank, falcon_pan_display
......@@ -2364,7 +2364,7 @@ struct fb_hwswitch falcon_switch = {
#endif
#ifdef ATAFB_STE
struct fb_hwswitch st_switch = {
static struct fb_hwswitch st_switch = {
stste_detect, stste_encode_fix, stste_decode_var, stste_encode_var,
stste_get_par, stste_set_par, stste_getcolreg, stste_setcolreg,
stste_set_screen_base, NULL, pan_display
......@@ -2372,7 +2372,7 @@ struct fb_hwswitch st_switch = {
#endif
#ifdef ATAFB_EXT
struct fb_hwswitch ext_switch = {
static struct fb_hwswitch ext_switch = {
ext_detect, ext_encode_fix, ext_decode_var, ext_encode_var,
ext_get_par, ext_set_par, ext_getcolreg, ext_setcolreg, NULL, NULL, NULL
};
......@@ -2463,9 +2463,15 @@ static short green2[]=
static short blue2[]=
{ 0x0000,0xffff};
struct fb_cmap default_16_colors = { 0, 16, red16, green16, blue16, NULL };
struct fb_cmap default_4_colors = { 0, 4, red4, green4, blue4, NULL };
struct fb_cmap default_2_colors = { 0, 2, red2, green2, blue2, NULL };
static struct fb_cmap default_16_colors = {
0, 16, red16, green16, blue16, NULL
};
static struct fb_cmap default_4_colors = {
0, 4, red4, green4, blue4, NULL
};
static struct fb_cmap default_2_colors = {
0, 2, red2, green2, blue2, NULL
};
static struct fb_cmap *
get_default_colormap(int bpp)
......
......@@ -40,7 +40,6 @@
#include <linux/ptrace.h>
#include <linux/kernel_stat.h>
#include <asm/setup.h>
#include <asm/system.h>
#include <asm/traps.h>
......
......@@ -21,7 +21,6 @@ for more details.
#include <linux/errno.h>
#include <linux/mm.h>
#include <asm/setup.h>
#include <asm/atarihw.h>
#include <asm/system.h>
#include <asm/irq.h>
......
......@@ -33,6 +33,7 @@
#include <linux/console.h>
#include <linux/interrupt.h>
#include <asm/bootinfo.h>
#include <asm/setup.h>
#include <asm/atarihw.h>
#include <asm/atarihdreg.h>
......@@ -44,7 +45,10 @@
#include <asm/pgtable.h>
#include <asm/machdep.h>
extern void atari_sched_init(void (*)(int, void *, struct pt_regs *));
u_long atari_mch_cookie;
struct atari_hw_present atari_hw_present;
static void atari_sched_init(void (*)(int, void *, struct pt_regs *));
/* atari specific keyboard functions */
extern int atari_keyb_init(void);
extern int atari_kbdrate (struct kbd_repeat *);
......@@ -57,25 +61,28 @@ extern int atari_free_irq (unsigned int irq, void *dev_id);
extern void atari_enable_irq (unsigned int);
extern void atari_disable_irq (unsigned int);
extern int atari_get_irq_list (char *buf);
static void atari_get_model(char *model);
static int atari_get_hardware_list(char *buffer);
/* atari specific timer functions */
extern unsigned long atari_gettimeoffset (void);
extern void atari_mste_gettod (int *, int *, int *, int *, int *, int *);
extern void atari_gettod (int *, int *, int *, int *, int *, int *);
extern int atari_mste_hwclk (int, struct hwclk_time *);
extern int atari_hwclk (int, struct hwclk_time *);
extern int atari_mste_set_clock_mmss (unsigned long);
extern int atari_set_clock_mmss (unsigned long);
static unsigned long atari_gettimeoffset (void);
static void atari_mste_gettod (int *, int *, int *, int *, int *, int *);
static void atari_gettod (int *, int *, int *, int *, int *, int *);
static int atari_mste_hwclk (int, struct hwclk_time *);
static int atari_hwclk (int, struct hwclk_time *);
static int atari_mste_set_clock_mmss (unsigned long);
static int atari_set_clock_mmss (unsigned long);
extern void atari_mksound( unsigned int count, unsigned int ticks );
extern void atari_reset( void );
static void atari_reset( void );
#ifdef CONFIG_BLK_DEV_FD
extern int atari_floppy_init (void);
extern void atari_floppy_setup(char *, int *);
#endif
extern void atari_waitbut (void);
static void atari_waitbut (void);
extern struct consw fb_con;
extern struct fb_info *atari_fb_init(long *);
extern void atari_debug_init (void);
static void atari_debug_init (void);
extern void atari_video_setup(char *, int *);
extern void atari_syms_export(void);
extern void (*kd_mksound)(unsigned int, unsigned int);
......@@ -205,8 +212,34 @@ static int scc_test( volatile char *ctla )
return( 1 );
}
/*
* Parse an Atari-specific record in the bootinfo
*/
int atari_parse_bootinfo(const struct bi_record *record)
{
int unknown = 0;
const u_long *data = record->data;
switch (record->tag) {
case BI_ATARI_MCH_COOKIE:
atari_mch_cookie = *data;
break;
default:
unknown = 1;
}
return(unknown);
}
/*
* Setup the Atari configuration info
*/
void config_atari(void)
{
memset(&atari_hw_present, 0, sizeof(atari_hw_present));
mach_sched_init = atari_sched_init;
mach_keyb_init = atari_keyb_init;
mach_kbdrate = atari_kbdrate;
......@@ -216,6 +249,8 @@ void config_atari(void)
mach_free_irq = atari_free_irq;
mach_enable_irq = atari_enable_irq;
mach_disable_irq = atari_disable_irq;
mach_get_model = atari_get_model;
mach_get_hardware_list = atari_get_hardware_list;
mach_get_irq_list = atari_get_irq_list;
mach_gettimeoffset = atari_gettimeoffset;
mach_mksound = atari_mksound;
......@@ -230,6 +265,7 @@ void config_atari(void)
mach_max_dma_address = 0xffffff;
mach_debug_init = atari_debug_init;
mach_video_setup = atari_video_setup;
mach_syms_export = atari_syms_export;
kd_mksound = atari_mksound;
/* ++bjoern:
......@@ -432,7 +468,7 @@ void config_atari(void)
}
}
void atari_sched_init(void (*timer_routine)(int, void *, struct pt_regs *))
static void atari_sched_init(void (*timer_routine)(int, void *, struct pt_regs *))
{
/* set Timer C data Register */
mfp.tim_dt_c = INT_TICKS;
......@@ -448,7 +484,7 @@ void atari_sched_init(void (*timer_routine)(int, void *, struct pt_regs *))
#define TICK_SIZE 10000
/* This is always executed with interrupts disabled. */
unsigned long atari_gettimeoffset (void)
static unsigned long atari_gettimeoffset (void)
{
unsigned long ticks, offset = 0;
......@@ -511,8 +547,8 @@ mste_write(struct MSTE_RTC *val)
} while(0)
void atari_mste_gettod (int *yearp, int *monp, int *dayp,
int *hourp, int *minp, int *secp)
static void atari_mste_gettod (int *yearp, int *monp, int *dayp,
int *hourp, int *minp, int *secp)
{
int hr24=0, hour;
struct MSTE_RTC val;
......@@ -538,8 +574,8 @@ void atari_mste_gettod (int *yearp, int *monp, int *dayp,
}
void atari_gettod (int *yearp, int *monp, int *dayp,
int *hourp, int *minp, int *secp)
static void atari_gettod (int *yearp, int *monp, int *dayp,
int *hourp, int *minp, int *secp)
{
unsigned char ctrl;
unsigned short tos_version;
......@@ -591,7 +627,7 @@ void atari_gettod (int *yearp, int *monp, int *dayp,
#define HWCLK_POLL_INTERVAL 5
int atari_mste_hwclk( int op, struct hwclk_time *t )
static int atari_mste_hwclk( int op, struct hwclk_time *t )
{
int hour, year;
int hr24=0;
......@@ -650,7 +686,7 @@ int atari_mste_hwclk( int op, struct hwclk_time *t )
return 0;
}
int atari_hwclk( int op, struct hwclk_time *t )
static int atari_hwclk( int op, struct hwclk_time *t )
{
int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0;
unsigned long flags;
......@@ -777,7 +813,7 @@ int atari_hwclk( int op, struct hwclk_time *t )
}
int atari_mste_set_clock_mmss (unsigned long nowtime)
static int atari_mste_set_clock_mmss (unsigned long nowtime)
{
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
struct MSTE_RTC val;
......@@ -800,7 +836,7 @@ int atari_mste_set_clock_mmss (unsigned long nowtime)
return 0;
}
int atari_set_clock_mmss (unsigned long nowtime)
static int atari_set_clock_mmss (unsigned long nowtime)
{
int retval = 0;
short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
......@@ -840,7 +876,7 @@ int atari_set_clock_mmss (unsigned long nowtime)
}
void atari_waitbut (void)
static void atari_waitbut (void)
{
/* sorry, no-op */
}
......@@ -922,7 +958,7 @@ void ata_par_print (const char *str)
}
void atari_debug_init( void )
static void atari_debug_init( void )
{
extern void (*debug_print_proc)(const char *);
extern char m68k_debug_device[];
......@@ -930,7 +966,7 @@ void atari_debug_init( void )
if (!strcmp( m68k_debug_device, "ser" )) {
/* defaults to ser2 for a Falcon and ser1 otherwise */
strcpy( m68k_debug_device,
((boot_info.bi_atari.mch_cookie >> 16) == ATARI_MCH_FALCON) ?
((atari_mch_cookie >> 16) == ATARI_MCH_FALCON) ?
"ser2" : "ser1" );
}
......@@ -1036,7 +1072,7 @@ void ata_serial_print (const char *str)
/* ++andreas: no need for complicated code, just depend on prefetch */
void atari_reset (void)
static void atari_reset (void)
{
long tc_val = 0;
long reset_addr;
......@@ -1062,7 +1098,9 @@ void atari_reset (void)
/* 68060: clear PCR to turn off superscalar operation */
__asm__ __volatile__
("moveq #0,%/d0\n\t"
".long 0x4e7b0808" /* movec d0,pcr */
".chip 68060\n\t"
"movec %%d0,%%pcr\n\t"
".chip 68k"
: : : "d0" );
}
......@@ -1070,8 +1108,10 @@ void atari_reset (void)
("movel %0,%/d0\n\t"
"andl #0xff000000,%/d0\n\t"
"orw #0xe020,%/d0\n\t" /* map 16 MB, enable, cacheable */
".long 0x4e7b0004\n\t" /* movec d0,itt0 */
".long 0x4e7b0006\n\t" /* movec d0,dtt0 */
".chip 68040\n\t"
"movec %%d0,%%itt0\n\t"
"movec %%d0,%%dtt0\n\t"
".chip 68k\n\t"
"jmp %0@\n\t"
: /* no outputs */
: "a" (jmp_addr040)
......@@ -1080,9 +1120,11 @@ void atari_reset (void)
__asm__ __volatile__
("moveq #0,%/d0\n\t"
"nop\n\t"
".word 0xf4d8\n\t" /* cinva i/d */
".word 0xf518\n\t" /* pflusha */
".long 0x4e7b0003\n\t" /* movec d0,tc */
".chip 68040\n\t"
"cinva %%bc\n\t"
"pflusha\n\t"
"movec %%d0,%%tc\n\t"
".chip 68k\n\t"
"jmp %0@"
: /* no outputs */
: "a" (reset_addr)
......@@ -1097,10 +1139,10 @@ void atari_reset (void)
}
void atari_get_model(char *model)
static void atari_get_model(char *model)
{
strcpy(model, "Atari ");
switch (boot_info.bi_atari.mch_cookie >> 16) {
switch (atari_mch_cookie >> 16) {
case ATARI_MCH_ST:
if (ATARIHW_PRESENT(MSTE_CLK))
strcat (model, "Mega ST");
......@@ -1108,7 +1150,7 @@ void atari_get_model(char *model)
strcat (model, "ST");
break;
case ATARI_MCH_STE:
if ((boot_info.bi_atari.mch_cookie & 0xffff) == 0x10)
if ((atari_mch_cookie & 0xffff) == 0x10)
strcat (model, "Mega STE");
else
strcat (model, "STE");
......@@ -1125,21 +1167,20 @@ void atari_get_model(char *model)
break;
default:
sprintf (model + strlen (model), "(unknown mach cookie 0x%lx)",
boot_info.bi_atari.mch_cookie);
atari_mch_cookie);
break;
}
}
int atari_get_hardware_list(char *buffer)
static int atari_get_hardware_list(char *buffer)
{
int len = 0, i;
for (i = 0; i < boot_info.num_memory; i++)
for (i = 0; i < m68k_num_memory; i++)
len += sprintf (buffer+len, "\t%3ld MB at 0x%08lx (%s)\n",
boot_info.memory[i].size >> 20,
boot_info.memory[i].addr,
(boot_info.memory[i].addr & 0xff000000 ?
m68k_memory[i].size >> 20, m68k_memory[i].addr,
(m68k_memory[i].addr & 0xff000000 ?
"alternate RAM" : "ST-RAM"));
#define ATARIHW_ANNOUNCE(name,str) \
......
......@@ -9,9 +9,11 @@
extern void atari_microwire_cmd( int cmd );
static struct symbol_table mach_atari_symbol_table = {
static struct symbol_table atari_symbol_table = {
#include <linux/symtab_begin.h>
X(atari_mch_cookie),
X(atari_hw_present),
X(is_medusa),
X(atari_register_vme_int),
X(atari_unregister_vme_int),
......@@ -23,6 +25,7 @@ static struct symbol_table mach_atari_symbol_table = {
X(atari_mouse_buttons),
X(atari_mouse_interrupt_hook),
X(atari_MIDI_interrupt_hook),
X(atari_mch_cookie),
X(ikbd_write),
X(ikbd_mouse_y0_top),
X(ikbd_mouse_thresh),
......@@ -34,7 +37,7 @@ static struct symbol_table mach_atari_symbol_table = {
#include <linux/symtab_end.h>
};
void mach_atari_syms_export(void)
void atari_syms_export(void)
{
register_symtab(&mach_atari_symbol_table);
register_symtab(&atari_symbol_table);
}
......@@ -32,7 +32,6 @@
#include <linux/types.h>
#include <linux/genhd.h>
#include <linux/sched.h>
#include <asm/setup.h>
#include <asm/atari_stdma.h>
#include <asm/atariints.h>
#include <asm/atarihw.h>
......
......@@ -26,8 +26,8 @@ void
atari_stram_init (void)
{
struct stram_desc *dp;
stramaddr = boot_info.bi_atari.stram_start;
stramsize = boot_info.bi_atari.stram_size;
stramaddr = atari_stram_start;
stramsize = atari_stram_size;
/* initialize start boundary */
dp = DP (stramaddr);
......@@ -194,11 +194,11 @@ void atari_stram_init( void )
{ int i;
for( i = 0; i < boot_info.num_memory; ++i ) {
if (boot_info.memory[i].addr == 0) {
for( i = 0; i < m68k_num_memory; ++i ) {
if (m68k_memory[i].addr == 0) {
rsvd_stram_beg = PTOV( 0x800 ); /* skip super-only first 2 KB! */
rsvd_stram_end = rsvd_stram_beg;
stram_end = rsvd_stram_beg - 0x800 + boot_info.memory[i].size;
stram_end = rsvd_stram_beg - 0x800 + m68k_memory[i].size;
return;
}
}
......
......@@ -21,6 +21,8 @@
** Modified 9-Sep-96 by Geert Uytterhoeven
** - Rewritten option parsing
** - New parameter passing to linuxboot() (linuxboot_args)
** Modified 6-Oct-96 by Geert Uytterhoeven
** - Updated for the new boot information structure
**
** This file is subject to the terms and conditions of the GNU General Public
** License. See the file COPYING in the main directory of this archive
......@@ -40,7 +42,7 @@
/* required Linux/m68k include files */
#include <linux/a.out.h>
#include <linux/elf.h>
#include <asm/setup.h>
#include <asm/amigahw.h>
#include <asm/page.h>
/* Amiga bootstrap include files */
......@@ -78,7 +80,7 @@ static int Read(int fd, char *buf, int count);
static void Close(int fd);
static int FileSize(const char *path);
static void Sleep(u_long micros);
static int ModifyBootinfo(struct bootinfo *bi);
static int ModifyBootinfo(struct amiga_bootinfo *bi);
static void Usage(void)
......@@ -91,6 +93,7 @@ static void Usage(void)
" -k, --kernel file Use kernel image `file' (default is `vmlinux')\n"
" -r, --ramdisk file Use ramdisk image `file'\n"
" -d, --debug Enable debug mode\n"
" -b, --baud speed Set the serial port speed (default is 9600)\n"
" -m, --memfile file Use memory file `file'\n"
" -v, --keep-video Don't reset the video mode\n"
" -t, --model id Set the Amiga model to `id'\n\n",
......@@ -103,6 +106,7 @@ int main(int argc, char *argv[])
{
int i;
int debugflag = 0, keep_video = 0;
u_int baud = 0;
const char *kernel_name = NULL;
const char *ramdisk_name = NULL;
char commandline[CL_SIZE] = "";
......@@ -126,6 +130,12 @@ int main(int argc, char *argv[])
Usage();
else if (!strcmp(argv[0], "-d") || !strcmp(argv[0], "--debug"))
debugflag = 1;
else if (!strcmp(argv[0], "-b") || !strcmp(argv[0], "--baud"))
if (--argc && !baud) {
baud = atoi(argv[1]);
argv++;
} else
Usage();
else if (!strcmp(argv[0], "-m") || !strcmp(argv[0], "--memfile"))
if (--argc && !memfile_name) {
memfile_name = argv[1];
......@@ -183,6 +193,7 @@ int main(int argc, char *argv[])
args.debugflag = debugflag;
args.keep_video = keep_video;
args.reset_boards = 1;
args.baud = baud;
args.puts = Puts;
args.getchar = GetChar;
args.putchar = PutChar;
......@@ -290,7 +301,7 @@ static void Sleep(u_long micros)
}
static int ModifyBootinfo(struct bootinfo *bi)
static int ModifyBootinfo(struct amiga_bootinfo *bi)
{
/*
* if we have a memory file, read the memory information from it
......@@ -305,7 +316,7 @@ static int ModifyBootinfo(struct bootinfo *bi)
return(FALSE);
}
if (fscanf(fp, "%lu", &bi->bi_amiga.chip_size) != 1) {
if (fscanf(fp, "%lu", &bi->chip_size) != 1) {
fprintf(stderr, "memory file does not contain chip memory size\n");
fclose(fp);
return(FALSE);
......@@ -327,7 +338,7 @@ static int ModifyBootinfo(struct bootinfo *bi)
* change the Amiga model, if necessary
*/
if (model != AMI_UNKNOWN)
bi->bi_amiga.model = model;
bi->model = model;
return(TRUE);
}
......@@ -20,8 +20,6 @@
**
*/
#include <asm/amigatypes.h>
struct MsgPort {
u_char fill1[15];
......
This diff is collapsed.
......@@ -31,7 +31,35 @@
* Amiboot Version
*/
#define AMIBOOT_VERSION "4.0"
#define AMIBOOT_VERSION "5.1"
/*
* Amiga Bootinfo Definitions
*
* All limits herein are `soft' limits, i.e. they don't put constraints
* on the actual parameters in the kernel.
*/
struct amiga_bootinfo {
u_long machtype; /* machine type */
u_long cputype; /* system CPU */
u_long fputype; /* system FPU */
u_long mmutype; /* system MMU */
int num_memory; /* # of memory blocks found */
struct mem_info memory[NUM_MEMINFO];/* memory description */
struct mem_info ramdisk; /* ramdisk description */
char command_line[CL_SIZE]; /* kernel command line parameters */
u_long model; /* Amiga Model */
int num_autocon; /* # of autoconfig devices found */
struct ConfigDev autocon[ZORRO_NUM_AUTO]; /* autoconfig devices */
u_long chip_size; /* size of chip memory (bytes) */
u_char vblank; /* VBLANK frequency */
u_char psfreq; /* power supply frequency */
u_long eclock; /* EClock frequency */
u_long chipset; /* native chipset present */
u_short serper; /* serial port period */
};
/*
......@@ -45,6 +73,7 @@ struct linuxboot_args {
int debugflag;
int keep_video;
int reset_boards;
u_int baud;
void (*puts)(const char *str);
long (*getchar)(void);
void (*putchar)(char c);
......@@ -55,7 +84,7 @@ struct linuxboot_args {
void (*close)(int fd);
int (*filesize)(const char *path);
void (*sleep)(u_long micros);
int (*modify_bootinfo)(struct bootinfo *bi);
int (*modify_bootinfo)(struct amiga_bootinfo *bi);
};
......
This diff is collapsed.
......@@ -4,7 +4,11 @@
** Copyright 1993 by Arjan Knor
**
** Modified by Andreas Schwab
** - clear transparent translation registers
** - clear transparent translation registers
** Modified 18-Aug-96 by Geert Uytterhoeven
** - Updated for the new boot information structure (untested!)
** Modified 1996-11-12 by Andreas Schwab
** - Fixed and tested previous change
**
** This file is subject to the terms and conditions of the GNU General Public
** License. See the file COPYING in the main directory of this archive
......@@ -15,6 +19,26 @@
#ifndef BOOTSTRAP_H
#define BOOTSTRAP_H
/*
* Atari Bootinfo Definitions
*
* All limits herein are `soft' limits, i.e. they don't put constraints
* on the actual parameters in the kernel.
*/
struct atari_bootinfo {
unsigned long machtype; /* machine type */
unsigned long cputype; /* system CPU */
unsigned long fputype; /* system FPU */
unsigned long mmutype; /* system MMU */
int num_memory; /* # of memory blocks found */
struct mem_info memory[NUM_MEMINFO]; /* memory description */
struct mem_info ramdisk; /* ramdisk description */
char command_line[CL_SIZE]; /* kernel command line parameters */
unsigned long mch_cookie; /* _MCH cookie from TOS */
};
/* _MCH cookie values */
#define MACH_ST 0
#define MACH_STE 1
......@@ -74,7 +98,7 @@ static __inline void disable_interrupts (void)
__asm__ volatile ("orw #0x700,sr":);
}
extern struct bootinfo bi;
extern struct atari_bootinfo bi;
static __inline void disable_cache (void)
{
__asm__ volatile ("movec %0,cacr" :: "d" (0));
......
......@@ -51,7 +51,6 @@ bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
bool 'Compile kernel as ELF - if your GCC is ELF-GCC' CONFIG_KERNEL_ELF
if [ "$CONFIG_AMIGA" = "y" ]; then
bool 'Amiga AutoConfig Identification' CONFIG_ZORRO
bool 'Amiga OCS chipset support' CONFIG_AMIFB_OCS
......@@ -79,6 +78,7 @@ if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then
dep_tristate ' Include IDE/ATAPI CDROM support' CONFIG_BLK_DEV_IDECD $CONFIG_BLK_DEV_IDE
dep_tristate ' Include IDE/ATAPI TAPE support' CONFIG_BLK_DEV_IDETAPE $CONFIG_BLK_DEV_IDE
dep_tristate ' Include IDE/ATAPI FLOPPY support' CONFIG_BLK_DEV_IDEFLOPPY $CONFIG_BLK_DEV_IDE
dep_tristate ' SCSI emulation support' CONFIG_BLK_DEV_IDESCSI $CONFIG_BLK_DEV_IDE
fi
if [ "$CONFIG_AMIGA" = "y" ]; then
tristate 'Amiga Zorro II ramdisk support' CONFIG_AMIGA_Z2RAM
......@@ -122,6 +122,9 @@ comment 'SCSI support type (disk, tape, CD-ROM)'
dep_tristate 'SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
dep_tristate 'SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
bool ' Enable vendor-specific extentions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
fi
dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
......
......@@ -160,8 +160,8 @@ extern int console_blanked;
#endif
struct fb_info *fb_info;
struct display *disp;
static struct fb_info *fb_info;
static struct display *disp;
/* ++Geert: Sorry, no hardware cursor support at the moment;
......@@ -455,56 +455,56 @@ struct display_switch {
#ifdef CONFIG_FBCON_MONO
struct display_switch dispsw_mono = {
static struct display_switch dispsw_mono = {
bmove_mono, clear_mono, putc_mono, putcs_mono, rev_char_mono
};
#endif /* CONFIG_FBCON_MONO */
#ifdef CONFIG_FBCON_ILBM
struct display_switch dispsw_ilbm = {
static struct display_switch dispsw_ilbm = {
bmove_ilbm, clear_ilbm, putc_ilbm, putcs_ilbm, rev_char_ilbm
};
#endif /* CONFIG_FBCON_ILBM */
#ifdef CONFIG_FBCON_PLANES
struct display_switch dispsw_plan = {
static struct display_switch dispsw_plan = {
bmove_plan, clear_plan, putc_plan, putcs_plan, rev_char_plan
};
#endif /* CONFIG_FBCON_PLANES */
#ifdef CONFIG_FBCON_2PLANE
struct display_switch dispsw_2_plane = {
static struct display_switch dispsw_2_plane = {
bmove_2_plane, clear_2_plane, putc_2_plane, putcs_2_plane, rev_char_2_plane
};
#endif /* CONFIG_FBCON_2PLANE */
#ifdef CONFIG_FBCON_4PLANE
struct display_switch dispsw_4_plane = {
static struct display_switch dispsw_4_plane = {
bmove_4_plane, clear_4_plane, putc_4_plane, putcs_4_plane, rev_char_4_plane
};
#endif /* CONFIG_FBCON_4PLANE */
#ifdef CONFIG_FBCON_8PLANE
struct display_switch dispsw_8_plane = {
static struct display_switch dispsw_8_plane = {
bmove_8_plane, clear_8_plane, putc_8_plane, putcs_8_plane, rev_char_8_plane
};
#endif /* CONFIG_FBCON_8PLANE */
#ifdef CONFIG_FBCON_8PACKED
struct display_switch dispsw_8_packed = {
static struct display_switch dispsw_8_packed = {
bmove_8_packed, clear_8_packed, putc_8_packed, putcs_8_packed, rev_char_8_packed
};
#endif /* CONFIG_FBCON_8PACKED */
#ifdef CONFIG_FBCON_16PACKED
struct display_switch dispsw_16_packed = {
static struct display_switch dispsw_16_packed = {
bmove_16_packed, clear_16_packed, putc_16_packed, putcs_16_packed,
rev_char_16_packed
};
#endif /* CONFIG_FBCON_16PACKED */
#ifdef CONFIG_FBCON_CYBER
struct display_switch dispsw_cyber = {
static struct display_switch dispsw_cyber = {
bmove_cyber, clear_cyber, putc_cyber, putcs_cyber, rev_char_cyber
};
#endif /* CONFIG_FBCON_CYBER */
......
......@@ -40,7 +40,6 @@ CONFIG_NET=y
CONFIG_SYSVIPC=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
CONFIG_KERNEL_ELF=y
CONFIG_ZORRO=y
CONFIG_AMIFB_OCS=y
CONFIG_AMIFB_ECS=y
......@@ -60,6 +59,7 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_AMIGA_Z2RAM is not set
# CONFIG_ATARI_ACSI is not set
# CONFIG_ACSI_MULTI_LUN is not set
......@@ -74,12 +74,12 @@ CONFIG_BLK_DEV_INITRD=y
#
# Networking options
#
# CONFIG_NETLINK is not set
# CONFIG_FIREWALL is not set
# CONFIG_NET_ALIAS is not set
CONFIG_INET=y
# CONFIG_IP_FORWARD is not set
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_FIREWALL is not set
# CONFIG_IP_ACCT is not set
#
......@@ -87,8 +87,7 @@ CONFIG_INET=y
#
# CONFIG_INET_PCTCP is not set
# CONFIG_INET_RARP is not set
# CONFIG_NO_PATH_MTU_DISCOVERY is not set
# CONFIG_TCP_NAGLE_OFF is not set
CONFIG_PATH_MTU_DISCOVERY=y
CONFIG_IP_NOSR=y
# CONFIG_SKB_LARGE is not set
# CONFIG_IPV6 is not set
......@@ -100,7 +99,6 @@ CONFIG_IP_NOSR=y
# CONFIG_ATALK is not set
# CONFIG_AX25 is not set
# CONFIG_BRIDGE is not set
# CONFIG_NETLINK is not set
#
# SCSI support
......
......@@ -9,7 +9,6 @@
.S.o:
$(CC) -D__ASSEMBLY__ -traditional -c -o $*.o $<
# $(AS) -o $*.o $<
OS_TARGET := fpsp.o
......
......@@ -5,7 +5,6 @@
# for more details.
.S.o:
# $(AS) -o $*.o $<
$(CC) -D__ASSEMBLY__ -traditional -c -o $*.o $<
OS_TARGET := ifpsp.o
......
......@@ -970,7 +970,7 @@ static void respond_string(const char * p, struct tty_struct * tty)
tty_schedule_flip(tty);
}
static void cursor_report(int currcons, struct tty_struct * tty)
static inline void cursor_report(int currcons, struct tty_struct * tty)
{
char buf[40];
......@@ -1242,7 +1242,7 @@ static void setterm_command(int currcons)
}
}
static void insert_char(int currcons)
static inline void insert_char(int currcons)
{
int i;
unsigned short *p = pos;
......
This diff is collapsed.
This diff is collapsed.
#include <linux/config.h>
#include <linux/module.h>
#include <linux/linkage.h>
#include <linux/sched.h>
......@@ -8,6 +7,7 @@
#include <linux/elfcore.h>
#include <asm/setup.h>
#include <asm/machdep.h>
#include <asm/pgtable.h>
#include <asm/irq.h>
#include <asm/semaphore.h>
......@@ -15,16 +15,6 @@
asmlinkage long long __ashrdi3 (long long, int);
extern char m68k_debug_device[];
#ifdef CONFIG_ATARI
extern void mach_atari_syms_export (void);
#endif
#ifdef CONFIG_AMIGA
extern void mach_amiga_syms_export (void);
#endif
#ifdef CONFIG_MAC
extern void mach_mac_syms_export (void);
#endif
extern void dump_thread(struct pt_regs *, struct user *);
extern int dump_fpu(elf_fpregset_t *);
......@@ -33,7 +23,8 @@ static struct symbol_table arch_symbol_table = {
/* platform dependent support */
X(memcmp),
X(boot_info),
X(m68k_machtype),
X(m68k_cputype),
X(m68k_is040or060),
X(cache_push),
X(cache_push_v),
......@@ -48,6 +39,7 @@ static struct symbol_table arch_symbol_table = {
X(dump_thread),
X(strnlen),
X(strrchr),
X(strstr),
/* The following are special because they're not called
explicitly (the C compiler generates them). Fortunately,
......@@ -67,23 +59,6 @@ void arch_syms_export(void)
{
register_symtab(&arch_symbol_table);
switch (boot_info.machtype) {
#ifdef CONFIG_ATARI
case MACH_ATARI:
mach_atari_syms_export();
break;
#endif
#ifdef CONFIG_AMIGA
case MACH_AMIGA:
mach_amiga_syms_export();
break;
#endif
#ifdef CONFIG_MAC
case MACH_MAC:
mach_mac_syms_export();
break;
#endif
default:
break;
}
if (mach_syms_export)
mach_syms_export();
}
......@@ -106,7 +106,7 @@ void release_thread(struct task_struct *dead_task)
{
}
void copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
struct task_struct * p, struct pt_regs * regs)
{
struct pt_regs * childregs;
......@@ -145,6 +145,8 @@ void copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
: "memory");
/* Restore the state in case the fpu was busy */
asm volatile ("frestore %0" : : "m" (p->tss.fpstate[0]));
return 0;
}
/* Fill in the fpu structure for a core dump. */
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -96,7 +96,8 @@ asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
* Until I found it, this one cures the problem and makes
* 1.2 run on the 68040 (Martin Apel).
*/
flush_tlb_page(vma, address);
if (CPU_IS_040_OR_060)
flush_tlb_page(vma, address);
return 0;
/*
......@@ -113,7 +114,7 @@ asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
fault_pc = regs->pc;
if ((fixup = search_exception_table(fault_pc)) != 0) {
struct pt_regs *tregs;
printk("Exception at [<%lx>] (%lx)\n", fault_pc, fixup);
printk(KERN_DEBUG "Exception at [<%lx>] (%lx)\n", fault_pc, fixup);
/* Create a new four word stack frame, discarding the old
one. */
regs->stkadj = frame_extra_sizes[regs->format];
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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