Commit 9d50b265 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.125pre1

parent 830e4ab4
......@@ -93,7 +93,7 @@ S: Calgary, Alberta
S: Canada
N: Ralf Baechle
E: ralf@gnu.ai.mit.edu
E: ralf@gnu.org
P: 1024/AF7B30C1 CF 97 C2 CC 6D AE A7 FE C8 BA 9C FC 88 DE 32 C3
D: Linux/MIPS port
D: Linux/68k hacker
......
......@@ -1479,13 +1479,6 @@ CONFIG_VGA_CONSOLE
display that complies with the generic VGA standard. Virtually
everyone wants that. Say Y.
Use 64KB of VGA video RAM (aka: Maximum VGA Scrollback)
CONFIG_VGA_GET_64KB
Use 64K rather than 32K of video RAM. This doesn't actually work
on all "VGA" controllers. If your vga card can do it, then you
can say Y here to get more scrollback buffer (shift-pgup) on VGA
consoles.
Video mode selection support
CONFIG_VIDEO_SELECT
This enables support for text mode selection on kernel startup. If
......@@ -1507,20 +1500,26 @@ CONFIG_FB
hardware. It represents the frame buffer of some video hardware and
allows application software to access the graphics hardware through
a well-defined interface, so the software doesn't need to know
anything about the low-level (hardware register) stuff. This works
across the different architectures supported by Linux and makes the
implementation of application programs easier and more portable; at
this point, an X server exists which uses the frame buffer device
exclusively.
anything about the low-level (hardware register) stuff.
Frame buffer devices work identically across the different
architectures supported by Linux and make the implementation of
application programs easier and more portable; at this point, an X
server exists which uses the frame buffer device exclusively.
On several non-X86 architectures, the frame buffer device is the
only way to use the graphics hardware.
The device is accessed through special device nodes, usually located
in the /dev directory, i.e. /dev/fb*.
Please read the file Documentation/fb/framebuffer.txt for more
information.
You need an utility program called fbset to make full use of frame
buffer devices. Please read the file
Documentation/fb/framebuffer.txt for more information.
If you want to play with it, say Y here and to the driver for your
graphics board, below. If unsure, say N.
If you want to play with it, say Y here and also to the driver for
your graphics board, below. If unsure, say N, unless you are
compiling a kernel for a non-X86 architecture, in which case you
should say Y.
Acorn VIDC support
CONFIG_FB_ACORN
......@@ -1559,33 +1558,34 @@ CONFIG_FB_AMIGA_AGA
Amiga CyberVision support
CONFIG_FB_CYBER
This enables support for the Cybervision 64 graphics card from Phase5.
Please note that its use is not all that intuitive (i.e. if you have
any questions, be sure to ask!). Say N unless you have a Cybervision
64 or plan to get one before you next recompile the kernel.
Please note that this driver DOES NOT support the Cybervision 64 3D
card, as they use incompatible video chips.
This enables support for the Cybervision 64 graphics card from
Phase5. Please note that its use is not all that intuitive (i.e. if
you have any questions, be sure to ask!). Say N unless you have a
Cybervision 64 or plan to get one before you next recompile the
kernel. Please note that this driver DOES NOT support the
Cybervision 64 3D card, as they use incompatible video chips.
Amiga CyberVision3D support (EXPERIMENTAL)
CONFIG_FB_VIRGE
This enables support for the Cybervision 64/3D graphics card from Phase5.
Please note that its use is not all that intuitive (i.e. if you have
any questions, be sure to ask!). Say N unless you have a Cybervision
64/3D or plan to get one before you next recompile the kernel.
Please note that this driver DOES NOT support the older Cybervision 64
card, as they use incompatible video chips.
This enables support for the Cybervision 64/3D graphics card from
Phase5. Please note that its use is not all that intuitive (i.e. if
you have any questions, be sure to ask!). Say N unless you have a
Cybervision 64/3D or plan to get one before you next recompile the
kernel. Please note that this driver DOES NOT support the older
Cybervision 64 card, as they use incompatible video chips.
Amiga RetinaZ3 support (EXPERIMENTAL)
CONFIG_FB_RETINAZ3
This enables support for the Retina Z3 graphics card. Say N unless you
have a Retina Z3 or plan to get one before you next recompile the kernel.
This enables support for the Retina Z3 graphics card. Say N unless
you have a Retina Z3 or plan to get one before you next recompile
the kernel.
Amiga CLgen driver (EXPERIMENTAL)
CONFIG_FB_CLGEN
This enables support for Cirrus Logic GD542x/543x based boards on Amiga:
SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum. Say N
unless you have such a graphics board or plan to get one before you next
recompile the kernel.
This enables support for Cirrus Logic GD542x/543x based boards on
Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
Say N unless you have such a graphics board or plan to get one
before you next recompile the kernel.
Atari native chipset support
CONFIG_FB_ATARI
......@@ -1686,13 +1686,14 @@ CONFIG_FB_TCX
Virtual Frame Buffer support (ONLY FOR TESTING!)
CONFIG_FB_VIRTUAL
This is a `virtual' frame buffer device. It operates on a chunk of
unswapable kernel memory instead of on the memory of a graphics board.
This means you cannot see any output sent to this frame buffer device,
while it does consume precious memory. The main use of this frame
buffer device is testing and debugging the frame buffer subsystem. Do
NOT enable it for normal systems! To protect the innocent, it has to
be enabled explicitly on boot time using the kernel option `video=vfb:'.
This is a `virtual' frame buffer device. It operates on a chunk of
unswapable kernel memory instead of on the memory of a graphics
board. This means you cannot see any output sent to this frame
buffer device, while it does consume precious memory. The main use
of this frame buffer device is testing and debugging the frame
buffer subsystem. Do NOT enable it for normal systems! To protect
the innocent, it has to be enabled explicitly at boot time using the
kernel option `video=vfb:'.
This driver is also available as a module ( = code which can be
inserted and removed from the running kernel whenever you want).
......@@ -1709,12 +1710,12 @@ CONFIG_FBCON_ADVANCED
drivers. Note that they are used for text console output only; they are
NOT needed for graphical applications.
If you do not enable this option, the needed low level drivers are
automatically enabled, depending on what frame buffer devices you
selected. This is recommended for most users.
If you say N here, the needed low level drivers are automatically
enabled, depending on what frame buffer devices you selected above.
This is recommended for most users.
If you enable this option, you have more fine-grained control over which
low level drivers are enabled. You can e.g. leave out low level drivers
If you say Y here, you have more fine-grained control over which low
level drivers are enabled. You can e.g. leave out low level drivers
for color depths you do not intend to use for text consoles.
Low level frame buffer console drivers can be modules ( = code which
......@@ -1788,13 +1789,13 @@ CONFIG_FBCON_IPLAN2P8
Mac variable bpp packed pixels support
CONFIG_FBCON_MAC
This is the low level frame buffer console driver for 1/2/4/8/16/32
bits per pixel packed pixels on Mac. It supports variable fontwidths
bits per pixel packed pixels on Mac. It supports variable font widths
for low resolution screens.
VGA characters/attributes support
CONFIG_FBCON_VGA
This is the low level frame buffer console driver for VGA text mode, as
used by vgafb.
This is the low level frame buffer console driver for VGA text mode;
it is used if you said Y to "VGA chipset support (text only)" above.
Parallel-port support
CONFIG_PARPORT
......@@ -8988,15 +8989,6 @@ CONFIG_AMIFB_AGA
and CD32. If you intend to run Linux on any of these systems, say Y;
otherwise say N.
Amiga Cybervision support
CONFIG_FB_CYBER
This enables support for the Cybervision 64 graphics card from Phase5.
Please note that its use is not all that intuitive (i.e. if you have
any questions, be sure to ask!). Say N unless you have a Cybervision
64 or plan to get one before you next recompile the kernel.
Please note that this driver DOES NOT support the Cybervision 64 3D
card at present, as they use incompatible video chips.
Amiga GSP (TMS340x0) support
CONFIG_AMIGA_GSP
Include support for Amiga graphics cards that use the Texas
......@@ -9124,6 +9116,11 @@ CONFIG_BLZ1230_SCSI
1260 accelerator, and the optional SCSI module, say Y. Otherwise,
say N.
Blizzard PowerUP 603e+ SCSI support
CONFIG_BLZ603EPLUS_SCSI
If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+
accelerator, say Y. Otherwise, say N.
Fastlane SCSI support
CONFIG_FASTLANE_SCSI
If you have the Phase5 Fastlane Z3 SCSI controller, or plan to use
......@@ -9167,6 +9164,16 @@ CONFIG_ARIADNE
want). The module is called ariadne.o. If you want to compile it as
a module, say M here and read Documentation/modules.txt.
Ariadne II support
CONFIG_ARIADNE2
If you have a VillageTronics Ariadne II Ethernet adapter, say Y.
Otherwise, say N.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you
want). The module is called ariadne2.o. If you want to compile it as
a module, say M here and read Documentation/modules.txt.
A2065 support
CONFIG_A2065
If you have a Commodore A2065 Ethernet adapter, say Y. Otherwise,
......
......@@ -2,7 +2,7 @@
This is a first start for some documentation about frame buffer device
internals.
Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>, 10 June 1998
Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>, 21 July 1998
--------------------------------------------------------------------------------
......@@ -68,14 +68,13 @@ value, and that color is displayed.
True color (FB_VISUAL_TRUECOLOR)
--------------------------------
The pixel value is broken up into red, green, and blue fields, each of which
are looked up in separate red, green, and blue lookup tables.
The pixel value is broken up into red, green, and blue fields.
Direct color (FB_VISUAL_DIRECTCOLOR)
------------------------------------
The pixel value is broken up into red, green, and blue fields. This is what
most people mean when then say `true color'.
The pixel value is broken up into red, green, and blue fields, each of which
are looked up in separate red, green, and blue lookup tables.
Grayscale displays
......
......@@ -79,20 +79,17 @@ You can pass kernel command line options to vesafb with
by comma. Accepted options:
invers - no comment...
redraw - scroll by redrawing the affected part of the screen.
This is the default.
redraw - scroll by redrawing the affected part of the screen
ypan - enable display panning using the VESA protected mode
interface. This enables the Shift-PgUp scrollback
thing and greatly speeds up fullscreen scrolling.
It is slower than "redraw" when scrolling only a halve
screen. Seems not to work with some BIOSes.
screen. This is the default.
ywrap - If your gfx board supports wrap-around, use this one
instead of ypan.
vgapal - Use the standard vga registers for palette changes.
This is the default.
pmipal - Use the protected mode interface for palette changes.
nopal - Don't use the protected mode interface for palette
changes. vesafb will try the standard vga registers
instead.
Have fun!
......
Summary of empty_zero_page layout (kernel point of view)
( collected by Hans Lermen and Martin Mares )
The contents of empty_zero_page are used to pass parameters from the
16-bit realmode code of the kernel to the 32-bit part. References/settings
to it mainly are in:
arch/i386/boot/setup.S
arch/i386/boot/video.S
arch/i386/kernel/head.S
arch/i386/kernel/setup.c
Offset Type Description
------ ---- -----------
0 32 bytes struct screen_info, SCREEN_INFO
ATTENTION, overlaps the following !!!
2 unsigned short EXT_MEM_K, extended memory size in Kb (from int 0x15)
0x20 unsigned short CL_MAGIC, commandline magic number (=0xA33F)
0x22 unsigned short CL_OFFSET, commandline offset
Address of commandline is calculated:
0x90000 + contents of CL_OFFSET
(only taken, when CL_MAGIC = 0xA33F)
0x40 20 bytes struct apm_bios_info, APM_BIOS_INFO
0x80 16 bytes hd0-disk-parameter from intvector 0x41
0x90 16 bytes hd1-disk-parameter from intvector 0x46
0xa0 16 bytes System description table truncated to 16 bytes.
( struct sys_desc_table_struct )
0xb0 - 0x1df Free. Add more parameters here if you really need them.
0x1e0 unsigned long ALT_MEM_K, alternative mem check, in Kb
0x1f1 char size of setup.S, number of sectors
0x1f2 unsigned short MOUNT_ROOT_RDONLY (if !=0)
0x1f4 unsigned short size of compressed kernel-part in the
(b)zImage-file (in 16 byte units, rounded up)
0x1f6 unsigned short swap_dev (unused AFAIK)
0x1f8 unsigned short RAMDISK_FLAGS
0x1fa unsigned short VGA-Mode (old one)
0x1fc unsigned short ORIG_ROOT_DEV (high=Major, low=minor)
0x1ff char AUX_DEVICE_INFO
0x200 short jump to start of setup code aka "reserved" field.
0x202 4 bytes Signature for SETUP-header, ="HdrS"
0x206 unsigned short Version number of header format
Current version is 0x0201...
0x208 8 bytes (used by setup.S for communication with boot loaders,
look there)
0x210 char LOADER_TYPE, = 0, old one
else it is set by the loader:
0xTV: T=0 for LILO
1 for Loadlin
2 for bootsect-loader
3 for SYSLINUX
4 for ETHERBOOT
V = version
0x211 char loadflags:
bit0 = 1: kernel is loaded high (bzImage)
bit7 = 1: Heap and pointer (see below) set by boot
loader.
0x212 unsigned short (setup.S)
0x214 unsigned long KERNEL_START, where the loader started the kernel
0x218 unsigned long INITRD_START, address of loaded ramdisk image
0x21c unsigned long INITRD_SIZE, size in bytes of ramdisk image
0x220 4 bytes (setup.S)
0x224 unsigned short setup.S heap end pointer
0x226 - 0x7ff setup.S code.
0x800 string, 2K max COMMAND_LINE, the kernel commandline as
copied using CL_OFFSET.
Note: this will be copied once more by setup.c
into a local buffer which is only 256 bytes long.
( #define COMMAND_LINE_SIZE 256 )
......@@ -384,6 +384,12 @@ W: http://www.mac.linux-m68k.org/home.html
L: linux-mac68k@wave.lm.com
S: As time permits [Michael confess, you are the mac68k maintainer 8)]
M68K ON HP9000/300
P: Philip Blundell
M: philb@gnu.org
W: http://www.tazenda.demon.co.uk/phil/linux-hp
S: Maintained
MENUCONFIG:
P: Michael Elizabeth Chastain
M: mec@shout.net
......
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 124
SUBLEVEL = 125
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
......@@ -35,6 +35,7 @@ CPP =$(CC) -E
AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip
OBJDUMP =$(CROSS_COMPILE)objdump
MAKE =make
GENKSYMS=/sbin/genksyms
......@@ -155,6 +156,10 @@ ifdef CONFIG_ZORRO
DRIVERS := $(DRIVERS) drivers/zorro/zorro.a
endif
ifeq ($(CONFIG_FC4),y)
DRIVERS := $(DRIVERS) drivers/fc4/fc4.a
endif
ifdef CONFIG_PPC
DRIVERS := $(DRIVERS) drivers/macintosh/macintosh.a
endif
......@@ -316,11 +321,10 @@ modules_install:
if [ -f VIDEO_MODULES ]; then inst_mod VIDEO_MODULES video; fi; \
if [ -f FC4_MODULES ]; then inst_mod FC4_MODULES fc4; fi; \
\
rm -f /tmp/.misc.$$$$ /tmp/.allmods.$$$$; \
ls *.o > /tmp/.allmods.$$$$; \
echo $$MODULES | tr ' ' '\n' | sort | comm -23 /tmp/.allmods.$$$$ - > /tmp/.misc.$$$$; \
if [ -s /tmp/.misc.$$$$ ]; then inst_mod /tmp/.misc.$$$$ misc; fi; \
rm -f /tmp/.misc.$$$$ /tmp/.allmods.$$$$; \
ls *.o > .allmods; \
echo $$MODULES | tr ' ' '\n' | sort | comm -23 .allmods - > .misc; \
if [ -s .misc ]; then inst_mod .misc misc; fi; \
rm -f .misc .allmods; \
)
# modules disabled....
......
......@@ -145,7 +145,7 @@ start_of_setup:
jne bad_sig
jmp good_sig1
! Routine to print ASCII string at DS:SI
! Routine to print ASCIIz string at DS:SI
prtstr: lodsb
and al,al
......@@ -345,7 +345,7 @@ is_disk1:
mov ds,ax
mov ds,ax
xor ax,ax
mov [0x220], ax ! set table length to 0
mov [0xa0], ax ! set table length to 0
mov ah, #0xc0
stc
int 0x15 ! puts feature table at es:bx
......@@ -357,9 +357,13 @@ is_disk1:
sub ax, #DELTA_INITSEG ! aka #INITSEG
mov es,ax
mov si,bx
mov di,#0x220
mov di,#0xa0
mov cx,(si)
add cx,#2 ! table length is a short
cmp cx,#0x10
jc sysdesc_ok
mov cx,#0x10 ! we keep only first 16 bytes
sysdesc_ok:
rep
movsb
pop ds
......
......@@ -103,8 +103,10 @@ int mpc_default_type = 0; /* non-0 if default (table-less)
/*
* This is performance-critical, we want to do it O(1)
*
* the indexing order of this array favors 1:1 mappings
* between pins and IRQs.
*/
static int irq_2_pin[NR_IRQS];
static inline unsigned int io_apic_read(unsigned int reg)
{
......@@ -118,6 +120,15 @@ static inline void io_apic_write(unsigned int reg, unsigned int value)
*(IO_APIC_BASE+4) = value;
}
/*
* Re-write a value: to be used for read-modify-write
* cycles where the read already set up the index register.
*/
static inline void io_apic_modify(unsigned int value)
{
*(IO_APIC_BASE+4) = value;
}
/*
* Synchronize the IO-APIC and the CPU by doing
* a dummy read from the IO-APIC
......@@ -128,59 +139,69 @@ static inline void io_apic_sync(void)
}
/*
* We disable IO-APIC IRQs by setting their 'destination CPU mask' to
* zero. Trick by Ramesh Nalluri.
* Rough estimation of how many shared IRQs there are, can
* be changed anytime.
*/
static inline void disable_IO_APIC_irq(unsigned int irq)
{
int pin = irq_2_pin[irq];
struct IO_APIC_route_entry entry;
#define MAX_PLUS_SHARED_IRQS NR_IRQS
#define PIN_MAP_SIZE (MAX_PLUS_SHARED_IRQS + NR_IRQS)
if (pin != -1) {
*(((int *)&entry) + 1) = io_apic_read(0x11 + pin * 2);
entry.dest.logical.logical_dest = 0x0;
io_apic_write(0x11 + 2 * pin, *(((int *)&entry) + 1));
io_apic_sync();
}
}
static struct irq_pin_list {
int pin, next;
} irq_2_pin[PIN_MAP_SIZE];
static inline void enable_IO_APIC_irq(unsigned int irq)
/*
* The common case is 1:1 IRQ<->pin mappings. Sometimes there are
* shared ISA-space IRQs, so we have to support them. We are super
* fast in the common case, and fast for shared ISA-space IRQs.
*/
static void add_pin_to_irq(unsigned int irq, int pin)
{
int pin = irq_2_pin[irq];
struct IO_APIC_route_entry entry;
static int first_free_entry = NR_IRQS;
struct irq_pin_list *entry = irq_2_pin + irq;
if (pin != -1) {
*(((int *)&entry) + 1) = io_apic_read(0x11 + pin * 2);
entry.dest.logical.logical_dest = 0xff;
io_apic_write(0x11 + 2 * pin, *(((int *)&entry) + 1));
}
}
static inline void mask_IO_APIC_irq(unsigned int irq)
{
int pin = irq_2_pin[irq];
struct IO_APIC_route_entry entry;
while (entry->next)
entry = irq_2_pin + entry->next;
if (pin != -1) {
*(((int *)&entry) + 0) = io_apic_read(0x10 + pin * 2);
entry.mask = 1;
io_apic_write(0x10 + 2 * pin, *(((int *)&entry) + 0));
io_apic_sync();
if (entry->pin != -1) {
entry->next = first_free_entry;
entry = irq_2_pin + entry->next;
if (++first_free_entry >= PIN_MAP_SIZE)
panic("io_apic.c: whoops");
}
entry->pin = pin;
}
static inline void unmask_IO_APIC_irq(unsigned int irq)
{
int pin = irq_2_pin[irq];
struct IO_APIC_route_entry entry;
if (pin != -1) {
*(((int *)&entry) + 0) = io_apic_read(0x10 + pin * 2);
entry.mask = 0;
io_apic_write(0x10 + 2 * pin, *(((int *)&entry) + 0));
}
#define DO_ACTION(name,R,ACTION, FINAL) \
\
static void name##_IO_APIC_irq(unsigned int irq) \
{ \
int pin; \
struct irq_pin_list *entry = irq_2_pin + irq; \
\
for (;;) { \
unsigned int reg; \
pin = entry->pin; \
if (pin == -1) \
break; \
reg = io_apic_read(0x10 + R + pin*2); \
reg ACTION; \
io_apic_modify(reg); \
if (!entry->next) \
break; \
entry = irq_2_pin + entry->next; \
} \
FINAL; \
}
/*
* We disable IO-APIC IRQs by setting their 'destination CPU mask' to
* zero. Trick by Ramesh Nalluri.
*/
DO_ACTION( disable, 1, &= 0x00ffffff, io_apic_sync()) /* destination = 0x00 */
DO_ACTION( enable, 1, |= 0xff000000, ) /* destination = 0xff */
DO_ACTION( mask, 0, |= 0x00010000, io_apic_sync()) /* mask = 1 */
DO_ACTION( unmask, 0, &= 0xfffeffff, ) /* mask = 0 */
static void __init clear_IO_APIC_pin(unsigned int pin)
{
struct IO_APIC_route_entry entry;
......@@ -577,7 +598,7 @@ void __init setup_IO_APIC_irqs(void)
}
irq = pin_2_irq(idx,pin);
irq_2_pin[irq] = pin;
add_pin_to_irq(irq, pin);
if (!IO_APIC_IRQ(irq))
continue;
......@@ -703,8 +724,8 @@ void __init print_IO_APIC(void)
}
printk("IRQ to pin mappings:\n");
for (i = 0; i < NR_IRQS; i++)
printk("%d->%d ", i, irq_2_pin[i]);
for (i = 0; i < PIN_MAP_SIZE; i++)
printk("%d->%d(%d) ", i, irq_2_pin[i].pin, irq_2_pin[i].next);
printk("\n");
printk(".................................... done.\n");
......@@ -716,8 +737,10 @@ static void __init init_sym_mode(void)
{
int i, pin;
for (i = 0; i < NR_IRQS; i++)
irq_2_pin[i] = -1;
for (i = 0; i < PIN_MAP_SIZE; i++) {
irq_2_pin[i].pin = -1;
irq_2_pin[i].next = 0;
}
if (!pirqs_enabled)
for (i = 0; i < MAX_PIRQS; i++)
pirq_entries[i] =- 1;
......
......@@ -86,13 +86,12 @@ extern int _etext, _edata, _end;
* This is set up by the setup-routine at boot-time
*/
#define PARAM ((unsigned char *)empty_zero_page)
#define SCREEN_INFO (*(struct screen_info *) (PARAM+0))
#define EXT_MEM_K (*(unsigned short *) (PARAM+2))
#define ALT_MEM_K (*(unsigned long *) (PARAM+0x1e0))
#ifdef CONFIG_APM
#define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+64))
#endif
#define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40))
#define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80))
#define SCREEN_INFO (*(struct screen_info *) (PARAM+0))
#define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0))
#define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2))
#define RAMDISK_FLAGS (*(unsigned short *) (PARAM+0x1F8))
#define ORIG_ROOT_DEV (*(unsigned short *) (PARAM+0x1FC))
......@@ -101,7 +100,6 @@ extern int _etext, _edata, _end;
#define KERNEL_START (*(unsigned long *) (PARAM+0x214))
#define INITRD_START (*(unsigned long *) (PARAM+0x218))
#define INITRD_SIZE (*(unsigned long *) (PARAM+0x21c))
#define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0x220))
#define COMMAND_LINE ((char *) (PARAM+2048))
#define COMMAND_LINE_SIZE 256
......
......@@ -736,7 +736,6 @@ int __init start_secondary(void *unused)
/* Must be done before calibration delay is computed */
mtrr_init_secondary_cpu ();
#endif
stts();
smp_callin();
while (!smp_commenced)
barrier();
......@@ -752,6 +751,13 @@ void __init initialize_secondary(void)
{
struct thread_struct * p = &current->tss;
/*
* Load up the LDT and the task register.
*/
asm volatile("lldt %%ax": :"a" (p->ldt));
asm volatile("ltr %%ax": :"a" (p->tr));
stts();
/*
* We don't actually need to load the full TSS,
* basically just the stack pointer and the eip.
......@@ -760,8 +766,7 @@ void __init initialize_secondary(void)
* to release it as part of the "reschedule" return.
*/
spin_lock(&scheduler_lock);
asm volatile("lldt %%ax": :"a" (p->ldt));
asm volatile("ltr %%ax": :"a" (p->tr));
asm volatile(
"movl %0,%%esp\n\t"
"jmp *%1"
......
......@@ -288,12 +288,14 @@ void amiga_enable_irq(unsigned int irq)
}
if (irq >= IRQ_AMIGA_CIAB) {
cia_set_irq(&ciab_base, (1 << (irq - IRQ_AMIGA_CIAB)));
cia_able_irq(&ciab_base, CIA_ICR_SETCLR |
(1 << (irq - IRQ_AMIGA_CIAB)));
return;
}
if (irq >= IRQ_AMIGA_CIAA) {
cia_set_irq(&ciaa_base, (1 << (irq - IRQ_AMIGA_CIAA)));
cia_able_irq(&ciaa_base, CIA_ICR_SETCLR |
(1 << (irq - IRQ_AMIGA_CIAA)));
return;
......
......@@ -398,6 +398,28 @@ __initfunc(void config_amiga(void))
/* ensure that the DMA master bit is set */
custom.dmacon = DMAF_SETCLR | DMAF_MASTER;
/* don't use Z2 RAM as system memory on Z3 capable machines */
if (AMIGAHW_PRESENT(ZORRO3)) {
int i, j;
u32 disabled_z2mem = 0;
for (i = 0; i < m68k_num_memory; i++)
if (m68k_memory[i].addr < 16*1024*1024) {
if (i == 0) {
/* don't cut off the branch we're sitting on */
printk("Warning: kernel runs in Zorro II memory\n");
continue;
}
disabled_z2mem += m68k_memory[i].size;
m68k_num_memory--;
for (j = i; j < m68k_num_memory; j++)
m68k_memory[j] = m68k_memory[j+1];
i--;
}
if (disabled_z2mem)
printk("%dK of Zorro II memory will not be used as system memory\n",
disabled_z2mem>>10);
}
/* initialize chipram allocator */
amiga_chip_init ();
......
......@@ -419,6 +419,7 @@ int atari_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_r
unsigned long flags, const char *devname, void *dev_id)
{
int vector;
unsigned long oflags = flags;
/*
* The following is a hack to make some PCI card drivers work,
......@@ -427,9 +428,14 @@ int atari_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_r
flags &= ~SA_SHIRQ;
if (flags == SA_INTERRUPT) {
printk ("%s: SA_INTERRUPT changed to IRQ_TYPE_SLOW for %s\n",
__FUNCTION__, devname);
flags = IRQ_TYPE_SLOW;
}
if (flags < IRQ_TYPE_SLOW || flags > IRQ_TYPE_PRIO) {
printk ("%s: Bad irq type %ld requested from %s\n",
__FUNCTION__, flags, devname);
printk ("%s: Bad irq type 0x%lx <0x%lx> requested from %s\n",
__FUNCTION__, flags, oflags, devname);
return -EINVAL;
}
if (!IS_VALID_INTNO(irq)) {
......
......@@ -273,7 +273,7 @@ __initfunc(void atari_stram_init( void ))
/* determine whether kernel code resides in ST-RAM (then ST-RAM is the
* first memory block at virtual 0x0) */
stram_start = phys_to_virt( 0 );
stram_start = (unsigned long)phys_to_virt(0);
kernel_in_stram = (stram_start == 0);
for( i = 0; i < m68k_num_memory; ++i ) {
......@@ -1465,9 +1465,10 @@ int get_stram_list( char *buf )
for( p = alloc_list; p; p = p->next ) {
if (len + 50 >= PAGE_SIZE)
break;
PRINT_PROC( "0x%08lx-0x%08lx: %s (",
virt_to_phys(p->start),
virt_to_phys(p->start+p->size-1), p->owner );
PRINT_PROC("0x%08lx-0x%08lx: %s (",
virt_to_phys((void *)p->start),
virt_to_phys((void *)p->start+p->size-1),
p->owner);
if (p->flags & BLOCK_STATIC)
PRINT_PROC( "static)\n" );
else if (p->flags & BLOCK_GFP)
......
......@@ -32,6 +32,7 @@ fi
bool 'Macintosh support' CONFIG_MAC
if [ "$CONFIG_MAC" = "y" ]; then
define_bool CONFIG_NUBUS y
define_bool CONFIG_M68K_L2_CACHE y
fi
bool 'Apollo support' CONFIG_APOLLO
bool 'VME (Motorola and BVM) support' CONFIG_VME
......@@ -155,6 +156,7 @@ if [ "$CONFIG_ZORRO" = "y" ]; then
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool 'A4091 SCSI support' CONFIG_A4091_SCSI
bool 'WarpEngine SCSI support' CONFIG_WARPENGINE_SCSI
bool 'Blizzard PowerUP 603e+ SCSI' CONFIG_BLZ603EPLUS_SCSI
bool 'Cyberstorm Mk III SCSI support' CONFIG_CYBERSTORMIII_SCSI
# bool 'GVP Turbo 040/060 SCSI support' CONFIG_GVP_TURBO_SCSI
fi
......@@ -171,6 +173,7 @@ if [ "$CONFIG_ATARI" = "y" ]; then
fi
if [ "$CONFIG_MAC" = "y" ]; then
bool 'MAC NCR5380 SCSI' CONFIG_MAC_SCSI
bool 'MAC NCR53c9[46] SCSI' CONFIG_SCSI_MAC_ESP
fi
#dep_tristate 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG $CONFIG_SCSI
......@@ -211,6 +214,7 @@ fi
tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
if [ "$CONFIG_ZORRO" = "y" ]; then
tristate 'Ariadne support' CONFIG_ARIADNE
tristate 'Ariadne II support' CONFIG_ARIADNE2
tristate 'A2065 support' CONFIG_A2065
tristate 'Hydra support' CONFIG_HYDRA
fi
......@@ -222,6 +226,8 @@ if [ "$CONFIG_APOLLO" = "y" ] ; then
fi
if [ "$CONFIG_MAC" = "y" ]; then
bool 'Mac NS 8390 based ethernet cards' CONFIG_DAYNAPORT
bool 'AV Macintosh onboard MACE ethernet' CONFIG_MACMACE
bool 'Macintosh onboard SONIC ethernet' CONFIG_MACSONIC
fi
if [ "$CONFIG_VME" = "y" -a "$CONFIG_MVME16x" = "y" ]; then
bool 'MVME16x Ethernet support' CONFIG_MVME16x_NET
......
......@@ -396,7 +396,7 @@ SYMBOL_NAME_LABEL(resume)
.data
ALIGN
SYMBOL_NAME_LABEL(sys_call_table)
.long SYMBOL_NAME(sys_setup) /* 0 */
.long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork)
.long SYMBOL_NAME(sys_read)
......
......@@ -7,6 +7,7 @@
#include <linux/elfcore.h>
#include <linux/in6.h>
#include <linux/interrupt.h>
#include <linux/config.h>
#include <asm/setup.h>
#include <asm/machdep.h>
......@@ -30,9 +31,13 @@ EXPORT_SYMBOL(m68k_cputype);
EXPORT_SYMBOL(m68k_is040or060);
EXPORT_SYMBOL(cache_push);
EXPORT_SYMBOL(cache_clear);
#ifndef CONFIG_SINGLE_MEMORY_CHUNK
EXPORT_SYMBOL(mm_vtop);
EXPORT_SYMBOL(mm_ptov);
EXPORT_SYMBOL(mm_end_of_chunk);
#endif
EXPORT_SYMBOL(mm_vtop_fallback);
EXPORT_SYMBOL(m68k_memory);
EXPORT_SYMBOL(kernel_map);
EXPORT_SYMBOL(m68k_debug_device);
EXPORT_SYMBOL(dump_fpu);
......@@ -44,6 +49,7 @@ EXPORT_SYMBOL(local_irq_count);
EXPORT_SYMBOL(local_bh_count);
EXPORT_SYMBOL(enable_irq);
EXPORT_SYMBOL(disable_irq);
EXPORT_SYMBOL(checksignals);
/* Networking helper routines. */
EXPORT_SYMBOL(csum_partial_copy);
......
......@@ -65,6 +65,17 @@ const int frame_extra_sizes[16] = {
-1, /* sizeof(((struct frame *)0)->un.fmtf), */
};
void checksignals(void)
{
sigset_t *blocked = &current->blocked;
unsigned long mask = blocked->sig[0] | sigmask(SIGKILL) | sigmask(SIGINT) | sigmask(SIGQUIT);
mask &= blocked->sig[1];
if (~mask) {
printk("Bad signal mask\n");
*(int *) 0 = 0;
}
}
/*
* Atomically swap in the new signal mask, and wait for a signal.
*/
......
......@@ -452,7 +452,7 @@ static inline void bus_error030 (struct frame *fp)
#endif
errorcode = (mmusr & MMU_I) ? 0 : 1;
if (!(ssw & RW) || ssw & RM)
if (!(ssw & RW) || (ssw & RM))
errorcode |= 2;
if (mmusr & (MMU_I | MMU_WP)) {
......
......@@ -245,13 +245,16 @@ void adb_bus_init(void)
via_write(via1, vIFR, SR_INT);
/* get those pesky clock ticks we missed while booting */
for ( i = 0; i < 30; i++) {
for ( i = 0; i < 60; i++) {
udelay(ADB_DELAY);
adb_hw_setup_IIsi();
udelay(ADB_DELAY);
if (via_read(via1, vBufB) & TREQ)
break;
}
if (i == 60)
printk("adb_IIsi: maybe bus jammed ??\n");
/*
* Ok we probably ;) have a ready to use adb bus. Its also
*/
......
This diff is collapsed.
......@@ -249,7 +249,6 @@ void mac_boom(int booms)
* TODO: serial debug code
*/
#define SCC_BAS (0x50F04000)
struct SCC
{
u_char cha_b_ctrl;
......@@ -260,7 +259,8 @@ struct SCC
u_char char_dummy3;
u_char cha_a_data;
};
# define scc ((*(volatile struct SCC*)SCC_BAS))
# define scc (*((volatile struct SCC*)mac_bi_data.sccbase))
/* Flag that serial port is already initialized and used */
int mac_SCC_init_done = 0;
......@@ -268,6 +268,8 @@ int mac_SCC_init_done = 0;
* not be repeated; used by kgdb */
int mac_SCC_reset_done = 0;
static int scc_port = -1;
static struct console mac_console_driver = {
"debug",
NULL, /* write */
......@@ -282,20 +284,18 @@ static struct console mac_console_driver = {
NULL
};
static int scc_port;
/* Mac: loops_per_sec min. 1900000 ^= .5 us; MFPDELAY was 0.6 us*/
#define US 1
#define uSEC 1
static inline void mac_sccb_out (char c)
{
int i;
do {
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
} while (!(scc.cha_b_ctrl & 0x04)); /* wait for tx buf empty */
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
scc.cha_b_data = c;
}
......@@ -304,10 +304,10 @@ static inline void mac_scca_out (char c)
{
int i;
do {
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
} while (!(scc.cha_a_ctrl & 0x04)); /* wait for tx buf empty */
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
scc.cha_a_data = c;
}
......@@ -337,10 +337,10 @@ int mac_sccb_console_wait_key(struct console *co)
{
int i;
do {
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
} while( !(scc.cha_b_ctrl & 0x01) ); /* wait for rx buf filled */
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
return( scc.cha_b_data );
}
......@@ -349,10 +349,10 @@ int mac_scca_console_wait_key(struct console *co)
{
int i;
do {
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
} while( !(scc.cha_a_ctrl & 0x01) ); /* wait for rx buf filled */
for( i = US; i > 0; --i )
for( i = uSEC; i > 0; --i )
barrier();
return( scc.cha_a_data );
}
......@@ -365,10 +365,10 @@ int mac_scca_console_wait_key(struct console *co)
do { \
int i; \
scc.cha_b_ctrl = (reg); \
for( i = US; i > 0; --i ) \
for( i = uSEC; i > 0; --i ) \
barrier(); \
scc.cha_b_ctrl = (val); \
for( i = US; i > 0; --i ) \
for( i = uSEC; i > 0; --i ) \
barrier(); \
} while(0)
......@@ -376,10 +376,10 @@ int mac_scca_console_wait_key(struct console *co)
do { \
int i; \
scc.cha_a_ctrl = (reg); \
for( i = US; i > 0; --i ) \
for( i = uSEC; i > 0; --i ) \
barrier(); \
scc.cha_a_ctrl = (val); \
for( i = US; i > 0; --i ) \
for( i = uSEC; i > 0; --i ) \
barrier(); \
} while(0)
......@@ -389,7 +389,7 @@ int mac_scca_console_wait_key(struct console *co)
#define LONG_DELAY() \
do { \
int i; \
for( i = 60*US; i > 0; --i ) \
for( i = 60*uSEC; i > 0; --i ) \
barrier(); \
} while(0)
......@@ -399,19 +399,21 @@ __initfunc(static void mac_init_scc_port( int cflag, int port ))
void mac_init_scc_port( int cflag, int port )
#endif
{
extern int mac_SCC_reset_done;
static int clksrc_table[9] =
/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
static int brgsrc_table[9] =
/* reg 14: 0 = RTxC, 2 = PCLK */
{ 2, 2, 2, 2, 2, 2, 0, 2, 2 };
static int clkmode_table[9] =
/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
static int div_table[9] =
/* reg12 (BRG low) */
{ 208, 138, 103, 50, 24, 11, 1, 0, 0 };
extern int mac_SCC_reset_done;
/*
* baud rates: 1200, 1800, 2400, 4800, 9600, 19.2k, 38.4k, 57.6k, 115.2k
*/
static int clksrc_table[9] =
/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
static int clkmode_table[9] =
/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
static int div_table[9] =
/* reg12 (BRG low) */
{ 94, 62, 46, 22, 10, 4, 1, 0, 0 };
int baud = cflag & CBAUD;
int clksrc, clkmode, div, reg3, reg5;
......@@ -426,12 +428,10 @@ void mac_init_scc_port( int cflag, int port )
clkmode = clkmode_table[baud];
div = div_table[baud];
reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40;
reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */;
reg3 = (((cflag & CSIZE) == CS8) ? 0xc0 : 0x40);
reg5 = (((cflag & CSIZE) == CS8) ? 0x60 : 0x20) | 0x82 /* assert DTR/RTS */;
#if 0
if (port) {
#endif
if (port == 1) {
(void)scc.cha_b_ctrl; /* reset reg pointer */
SCCB_WRITE( 9, 0xc0 ); /* reset */
LONG_DELAY(); /* extra delay after WR9 access */
......@@ -442,17 +442,14 @@ void mac_init_scc_port( int cflag, int port )
SCCB_WRITE( 5, reg5 );
SCCB_WRITE( 9, 0 ); /* no interrupts */
LONG_DELAY(); /* extra delay after WR9 access */
SCCB_WRITE( 10, 0 ); /* NRZ mode */
SCCB_WRITE( 10, 0 ); /* NRZ mode */
SCCB_WRITE( 11, clksrc ); /* main clock source */
SCCB_WRITE( 12, div ); /* BRG value */
SCCB_WRITE( 13, 0 ); /* BRG high byte */
SCCB_WRITE( 14, brgsrc_table[baud] );
SCCB_WRITE( 14, brgsrc_table[baud] | (div ? 1 : 0) );
SCCB_WRITE( 14, 1 );
SCCB_WRITE( 3, reg3 | 1 );
SCCB_WRITE( 5, reg5 | 8 );
#if 0
} else {
#endif
} else if (port == 0) {
(void)scc.cha_a_ctrl; /* reset reg pointer */
SCCA_WRITE( 9, 0xc0 ); /* reset */
LONG_DELAY(); /* extra delay after WR9 access */
......@@ -463,17 +460,15 @@ void mac_init_scc_port( int cflag, int port )
SCCA_WRITE( 5, reg5 );
SCCA_WRITE( 9, 0 ); /* no interrupts */
LONG_DELAY(); /* extra delay after WR9 access */
SCCA_WRITE( 10, 0 ); /* NRZ mode */
SCCA_WRITE( 10, 0 ); /* NRZ mode */
SCCA_WRITE( 11, clksrc ); /* main clock source */
SCCA_WRITE( 12, div ); /* BRG value */
SCCA_WRITE( 13, 0 ); /* BRG high byte */
SCCA_WRITE( 14, brgsrc_table[baud] );
SCCA_WRITE( 14, brgsrc_table[baud] | (div ? 1 : 0) );
SCCA_WRITE( 14, 1 );
SCCA_WRITE( 3, reg3 | 1 );
SCCA_WRITE( 5, reg5 | 8 );
#if 0
}
#endif
mac_SCC_reset_done = 1;
mac_SCC_init_done = 1;
}
......@@ -486,18 +481,20 @@ __initfunc(void mac_debug_init(void))
return;
#endif
#ifdef DEBUG_SERIAL
if (!strcmp( m68k_debug_device, "ser" )) {
strcpy( m68k_debug_device, "ser1" );
}
if (!strcmp( m68k_debug_device, "ser1" )) {
/* ST-MFP Modem1 serial port */
if ( !strcmp( m68k_debug_device, "ser" )
|| !strcmp( m68k_debug_device, "ser1" )) {
/* Mac modem port */
mac_init_scc_port( B9600|CS8, 0 );
mac_console_driver.write = mac_scca_console_write;
mac_console_driver.wait_key = mac_scca_console_wait_key;
scc_port = 0;
}
else if (!strcmp( m68k_debug_device, "ser2" )) {
/* SCC Modem2 serial port */
/* Mac printer port */
mac_init_scc_port( B9600|CS8, 1 );
mac_console_driver.write = mac_sccb_console_write;
mac_console_driver.wait_key = mac_sccb_console_wait_key;
scc_port = 1;
}
if (mac_console_driver.write)
register_console(&mac_console_driver);
......
......@@ -27,12 +27,52 @@ void mac_mksound( unsigned int hz, unsigned int ticks )
unsigned long flags;
int samples=512;
if (macintosh_config->ident == MAC_MODEL_C660
|| macintosh_config->ident == MAC_MODEL_Q840)
{
/*
* The Quadra 660AV and 840AV use the "Singer" custom ASIC for sound I/O.
* It appears to be similar to the "AWACS" custom ASIC in the Power Mac
* [678]100. Because Singer and AWACS may have a similar hardware
* interface, this would imply that the code in drivers/sound/dmasound.c
* for AWACS could be used as a basis for Singer support. All we have to
* do is figure out how to do DMA on the 660AV/840AV through the PSC and
* figure out where the Singer hardware sits in memory. (I'd look in the
* vicinity of the AWACS location in a Power Mac [678]100 first, or the
* current location of the Apple Sound Chip--ASC--in other Macs.) The
* Power Mac [678]100 info can be found in MkLinux Mach kernel sources.
*
* Quoted from Apple's Tech Info Library, article number 16405:
* "Among desktop Macintosh computers, only the 660AV, 840AV, and Power
* Macintosh models have 16-bit audio input and output capability
* because of the AT&T DSP3210 hardware circuitry and the 16-bit Singer
* codec circuitry in the AVs. The Audio Waveform Amplifier and
* Converter (AWAC) chip in the Power Macintosh performs the same
* 16-bit I/O functionality. The PowerBook 500 series computers
* support 16-bit stereo output, but only mono input."
*
* http://til.info.apple.com/techinfo.nsf/artnum/n16405
*
* --David Kilzer
*/
return;
}
if(!inited)
{
int i=0;
int j=0;
int k=0;
int l=0;
/*
* The IIfx strikes again!
*/
if(macintosh_config->ident==MAC_MODEL_IIFX)
asc_base=(void *)0x50010000;
for(i=0;i<samples;i++)
{
asc_base[i]=sine_data[j];
......
......@@ -69,7 +69,6 @@
* -
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
......@@ -216,7 +215,10 @@ void mac_debug_handler(int irq, void *dev_id, struct pt_regs *regs);
static void via_do_nubus(int slot, void *via, struct pt_regs *regs);
/*#define DEBUG_VIA*/
/* #define DEBUG_MACINTS */
/* #define DEBUG_NUBUS_INT */
/* #define DEBUG_VIA */
/* #define DEBUG_VIA_NUBUS */
void mac_init_IRQ(void)
{
......@@ -273,13 +275,8 @@ void mac_init_IRQ(void)
* Currently, one interrupt per channel is used, solely
* to pass the correct async_info as parameter!
*/
#if 0 /* want to install debug/SCC shutup routine until SCC init */
sys_request_irq(4, mac_SCC_handler, IRQ_FLG_STD, "INT4", mac_SCC_handler);
#else
sys_request_irq(4, mac_debug_handler, IRQ_FLG_STD, "INT4", mac_debug_handler);
#endif
/* Alan uses IRQ 5 for SCC ?? */
sys_request_irq(5, mac_debug_handler, IRQ_FLG_STD, "INT5", mac_debug_handler);
/* level 6 */
sys_request_irq(6, mac_bang, IRQ_FLG_LOCK, "offswitch", mac_bang);
......@@ -289,25 +286,25 @@ void mac_init_IRQ(void)
/* initialize the handler tables for VIAs */
for (i = 0; i < 8; i++) {
via1_handler[i].handler = mac_default_handler;
via1_handler[i].dev_id = NULL;
via1_param[i].flags = IRQ_FLG_STD;
via1_param[i].devname = NULL;
via2_handler[i].handler = mac_default_handler;
via2_handler[i].dev_id = NULL;
via2_param[i].flags = IRQ_FLG_STD;
via2_param[i].devname = NULL;
rbv_handler[i].handler = mac_default_handler;
rbv_handler[i].dev_id = NULL;
rbv_param[i].flags = IRQ_FLG_STD;
rbv_param[i].devname = NULL;
scc_handler[i].handler = mac_default_handler;
scc_handler[i].dev_id = NULL;
scc_param[i].flags = IRQ_FLG_STD;
scc_param[i].devname = NULL;
via1_handler[i].handler = mac_default_handler;
via1_handler[i].dev_id = NULL;
via1_param[i].flags = IRQ_FLG_STD;
via1_param[i].devname = NULL;
via2_handler[i].handler = mac_default_handler;
via2_handler[i].dev_id = NULL;
via2_param[i].flags = IRQ_FLG_STD;
via2_param[i].devname = NULL;
rbv_handler[i].handler = mac_default_handler;
rbv_handler[i].dev_id = NULL;
rbv_param[i].flags = IRQ_FLG_STD;
rbv_param[i].devname = NULL;
scc_handler[i].handler = mac_default_handler;
scc_handler[i].dev_id = NULL;
scc_param[i].flags = IRQ_FLG_STD;
scc_param[i].devname = NULL;
/* NUBUS interrupts routed through VIA2 slot 2 - special */
nubus_handler[i].handler = nubus_wtf;
......@@ -337,16 +334,16 @@ void mac_init_IRQ(void)
via_table[2] = NULL;
via_table[3] = NULL;
handler_table[2] = &rbv_handler[0];
handler_table[2] = &rbv_handler[0];
handler_table[3] = &scc_handler[0];
handler_table[4] = NULL;
handler_table[5] = NULL;
handler_table[6] = NULL;
handler_table[7] = &nubus_handler[0];
handler_table[7] = &nubus_handler[0];
param_table[2] = &rbv_param[0];
param_table[2] = &rbv_param[0];
param_table[3] = &scc_param[0];
param_table[7] = &nubus_param[0];
param_table[7] = &nubus_param[0];
mac_irqs[2] = &rbv_irqs[0];
mac_irqs[3] = &scc_irqs[0];
......@@ -356,7 +353,8 @@ void mac_init_IRQ(void)
* AV Macs: shutup the PSC ints
*/
if (macintosh_config->ident == MAC_MODEL_C660
|| macintosh_config->ident == MAC_MODEL_Q840) {
|| macintosh_config->ident == MAC_MODEL_Q840)
{
psc_init();
handler_table[2] = &psc3_handler[0];
......@@ -463,9 +461,15 @@ int mac_request_irq (unsigned int irq, void (*handler)(int, void *, struct pt_re
* 980429 MS: RBV is ok, OSS seems to be differentt
*/
if (!via2_is_oss)
/* CB2 (IRQ) indep. interrupt input, positive edge */
/* CA2 (DRQ) indep. interrupt input, positive edge */
via_write(via, vPCR, 0x66);
if (macintosh_config->scsi_type == MAC_SCSI_OLD) {
/* CB2 (IRQ) indep. interrupt input, positive edge */
/* CA2 (DRQ) indep. interrupt input, positive edge */
via_write(via, vPCR, 0x66);
} else {
/* CB2 (IRQ) indep. interrupt input, negative edge */
/* CA2 (DRQ) indep. interrupt input, negative edge */
via_write(via, vPCR, 0x22);
}
#if 0
else
/* CB2 (IRQ) indep. interrupt input, negative edge */
......@@ -614,7 +618,7 @@ void mac_turnon_irq( unsigned int irq )
via_write(via, rIER, via_read(via, rIER)|0x80|(1<<(irqidx)));
else if (srcidx == SRC_VIA2 && via2_is_oss)
via_write(oss_regp, oss_map[irqidx]+8, 2);
else if (srcidx >= SRC_VIA2)
else if (srcidx > SRC_VIA2)
via_write(via, (0x104 + 0x10*srcidx),
via_read(via, (0x104 + 0x10*srcidx))|0x80|(1<<(irqidx)));
else
......@@ -636,7 +640,11 @@ void mac_turnoff_irq( unsigned int irq )
via_write(via, rIER, (via_read(via, rIER)&(1<<irqidx)));
else if (srcidx == SRC_VIA2 && via2_is_oss)
via_write(oss_regp, oss_map[irqidx]+8, 0);
else if (srcidx >= SRC_VIA2)
/*
* VIA2 is fixed. The stuff above VIA2 is for later
* macintoshes only.
*/
else if (srcidx > SRC_VIA2)
via_write(via, (0x104 + 0x10*srcidx),
via_read(via, (0x104 + 0x10*srcidx))|(1<<(irqidx)));
else
......@@ -677,7 +685,7 @@ int mac_irq_pending( unsigned int irq )
pending |= via_read(via, rIFR)&(1<<irqidx);
else if (srcidx == SRC_VIA2 && via2_is_oss)
pending |= via_read(via, oIFR)&0x03&(1<<oss_map[irqidx]);
else if (srcidx >= SRC_VIA2)
else if (srcidx > SRC_VIA2)
pending |= via_read(via, (0x100 + 0x10*srcidx))&(1<<irqidx);
else
pending |= via_read(via, vIFR)&(1<<irqidx);
......@@ -1159,7 +1167,7 @@ void oss_irq(int irq, void *dev_id, struct pt_regs *regs)
* limited verbosity for RBV interrupts (add more if needed)
*/
if ( events != 1<<3 ) /* SCSI IRQ */
printk("oss_irq: irq %d events %x %x %x !\n", irq, srcidx+1,
printk("oss_irq: irq %d srcidx+1 %d events %x %x %x !\n", irq, srcidx+1,
events, adb_ev, nub_ev);
#endif
......@@ -1313,7 +1321,7 @@ void psc_irq(int irq, void *dev_id, struct pt_regs *regs)
* limited verbosity for RBV interrupts (add more if needed)
*/
if ( srcidx == 1 && events != 1<<3 && events != 1<<1 ) /* SCSI IRQ */
printk("psc_irq: irq %d events %x !\n", irq, srcidx+1, events);
printk("psc_irq: irq %d srcidx+1 %d events %x !\n", irq, srcidx+1, events);
#endif
/* to be changed, possibly: for each non'masked', enabled IRQ, read
......
......@@ -51,6 +51,7 @@ static void input_keycode(int, int);
extern struct kbd_struct kbd_table[];
extern void adb_bus_init(void);
extern void handle_scancode(unsigned char);
extern void put_queue(int);
......@@ -59,9 +60,9 @@ static void mac_leds_done(struct adb_request *);
static void keyboard_input(unsigned char *, int, struct pt_regs *);
static void mouse_input(unsigned char *, int, struct pt_regs *);
/* Hook for mouse driver */
void (*adb_mouse_interrupt_hook) (unsigned char *, int);
void (*adb_mouse_interrupt_hook) (char *, int);
/* The mouse driver - for debugging */
extern void mac_mouse_interrupt(char *);
extern void adb_mouse_interrupt(char *, int);
/* end keyb */
/* this map indicates which keys shouldn't autorepeat. */
......@@ -652,6 +653,8 @@ __initfunc(int mac_keyb_init(void))
printk("Configuring keyboard:\n");
udelay(3000);
/*
* turn on all leds - the keyboard driver will turn them back off
* via mac_kbd_leds if everything works ok!
......@@ -676,6 +679,8 @@ __initfunc(int mac_keyb_init(void))
#if 1
printk("configuring coding mode ...\n");
udelay(3000);
/*
* get the keyboard to send separate codes for
* left and right shift, control, option keys.
......@@ -697,6 +702,8 @@ __initfunc(int mac_keyb_init(void))
#if 0 /* seems to hurt, at least Geert's Mac */
printk("Configuring mouse (3-button mode) ...\n");
udelay(3000);
/*
* XXX: taken from the PPC driver again ...
* Try to switch the mouse (id 3) to handler 4, for three-button
......@@ -738,8 +745,3 @@ __initfunc(int mac_keyb_init(void))
__initfunc(void mac_kbd_reset_setup(char *str, int *ints))
{
}
/* for "kbd-reset" cmdline param */
__initfunc(void mac_kbd_reset_setup(char *str, int *ints))
{
}
/*
* Apple Peripheral System Controller (PSC)
*
* The PSC is used on the AV Macs to control IO functions not handled
* by the VIAs (Ethernet, DSP, SCC).
*/
#define PSCBASE 0x50F31000
#define pIFR3 0x130
#define pIFR4 0x140
#define pIFR5 0x150
#define pIFR6 0x160
#define pIER3 0x134
#define pIER4 0x144
#define pIER5 0x154
#define pIER6 0x164
......@@ -5,19 +5,25 @@
* via them as are assorted bits and bobs - eg rtc, adb.
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/delay.h>
#include <asm/adb.h>
#include <asm/bootinfo.h>
#include <asm/macintosh.h>
#include <asm/macints.h>
#include "via6522.h"
#include "psc.h"
#include <asm/mac_psc.h>
volatile unsigned char *via1=(unsigned char *)VIABASE;
volatile unsigned char *via2=(unsigned char *)VIABASE2;
volatile unsigned char *psc=(unsigned char *)PSCBASE;
volatile long *via_memory_bogon=(long *)&via_memory_bogon;
unsigned char via1_clock, via1_datab;
static int rbv=0;
......@@ -38,9 +44,8 @@ static void (*rom_reset)(void);
#define MAC_CLOCK_HIGH (MAC_CLOCK_TICK>>8)
void via_init_clock(void (*func)(int, void *, struct pt_regs *))
void via_configure_base(void)
{
unsigned char c;
switch(macintosh_config->via_type)
{
......@@ -66,6 +71,13 @@ void via_init_clock(void (*func)(int, void *, struct pt_regs *))
break;
default:
}
}
void via_init_clock(void (*func)(int, void *, struct pt_regs *))
{
unsigned char c;
via1_clock=via_read(via1, vACR);
via1_datab=via_read(via1, vBufB);
......@@ -179,29 +191,28 @@ void via_init_clock(void (*func)(int, void *, struct pt_regs *))
}
/*
* get time offset between scheduling timer ticks
* Code stolen from arch/m68k/atari/time.c; underflow check probably
* wrong.
* TBI: get time offset between scheduling timer ticks
*/
#define TICK_SIZE 10000
/* This is always executed with interrupts disabled. */
unsigned long mac_gettimeoffset (void)
{
unsigned long ticks, offset = 0;
unsigned long ticks, offset = 0;
/* read VIA1 timer 2 current value */
ticks = via_read(via1, vT1CL) + (via_read(via1, vT1CH)<<8);
/* The probability of underflow is less than 2% */
if (ticks > MAC_CLOCK_TICK - MAC_CLOCK_TICK / 50)
/* Check for pending timer interrupt in VIA1 IFR */
if (via_read(via1, vIFR) & 0x40)
offset = TICK_SIZE;
/* read VIA1 timer 2 current value */
ticks = via_read(via1, vT1CL) + (via_read(via1, vT1CH)<<8);
/* The probability of underflow is less than 2% */
if (ticks > MAC_CLOCK_TICK - MAC_CLOCK_TICK / 50)
/* Check for pending timer interrupt in VIA1 IFR */
if (via_read(via1, vIFR) & 0x40)
offset = TICK_SIZE;
ticks = MAC_CLOCK_TICK - ticks;
ticks = ticks * 10000L / MAC_CLOCK_TICK;
ticks = MAC_CLOCK_TICK - ticks;
ticks = ticks * 10000L / MAC_CLOCK_TICK;
return ticks + offset;
return ticks + offset;
}
/*
......@@ -218,27 +229,64 @@ void psc_init(void)
}
/*
* The power switch - yes its software!
* The power switch - yes it's software!
*/
void mac_poweroff(void)
{
#if 0
/*
* Powerdown, for the Macs that support it
* MAC_ADB_IISI may need to be moved up here if it doesn't actually
* work using the ADB packet method. --David Kilzer
*/
if(rbv) {
via_write(via2, rBufB, via_read(via2, rBufB)&~0x04);
} else {
/* Direction of vDirB is output */
via_write(via2,vDirB,via_read(via2,vDirB)|0x04);
/* Send a value of 0 on that line */
via_write(via2,vBufB,via_read(via2,vBufB)&~0x04);
if (macintosh_config->adb_type == MAC_ADB_II)
{
if(rbv) {
via_write(via2, rBufB, via_read(via2, rBufB)&~0x04);
} else {
/* Direction of vDirB is output */
via_write(via2,vDirB,via_read(via2,vDirB)|0x04);
/* Send a value of 0 on that line */
via_write(via2,vBufB,via_read(via2,vBufB)&~0x04);
/* Otherwise it prints "It is now.." then shuts off */
mdelay(1000);
}
/* We should never make it this far... */
printk ("It is now safe to switch off your machine.\n");
/* XXX - delay do we need to spin here ? */
while(1); /* Just in case .. */
}
/*
* Initially discovered this technique in the Mach kernel of MkLinux in
* osfmk/src/mach_kernel/ppc/POWERMAC/cuda_power.c. Found equivalent LinuxPPC
* code in arch/ppc/kernel/setup.c, which also has a PMU technique for PowerBooks!
* --David Kilzer
*/
else if (macintosh_config->adb_type == MAC_ADB_IISI
|| macintosh_config->adb_type == MAC_ADB_CUDA)
{
struct adb_request req;
/*
* Print our "safe" message before we send the request
* just in case the request never returns.
*/
printk ("It is now safe to switch off your machine.\n");
adb_request (&req, NULL, 2, CUDA_PACKET, CUDA_POWERDOWN);
printk ("ADB powerdown request sent.\n");
for (;;)
{
adb_poll();
}
}
#endif
/* We should never make it this far... */
/* XXX - delay do we need to spin here ? */
while(1); /* Just in case .. */
}
/*
......@@ -247,28 +295,65 @@ void mac_poweroff(void)
*/
void mac_reset(void)
{
unsigned long flags;
unsigned long *reset_hook;
save_flags(flags);
cli();
#if 0 /* need ROMBASE in booter */
#if 0 /* works on some */
rom_reset = (boot_info.bi_mac.rombase + 0xa);
#else /* testing, doesn't work on SE/30 either */
reset_hook = (unsigned long *) (boot_info.bi_mac.rombase + 0x4);
printk("ROM reset hook: %p\n", *reset_hook);
rom_reset = *reset_hook;
#endif
rom_reset();
/*
* MAC_ADB_IISI may need to be moved up here if it doesn't actually
* work using the ADB packet method. --David Kilzer
*/
if (macintosh_config->adb_type == MAC_ADB_II)
{
unsigned long flags;
unsigned long *reset_hook;
save_flags(flags);
cli();
/* need ROMBASE in booter */
/* works on some */
rom_reset = (void *) (mac_bi_data.rombase + 0xa);
#if 0
/* testing, doesn't work on SE/30 either */
reset_hook = (unsigned long *) (mac_bi_data.rombase + 0x4);
printk("ROM reset hook: %p\n", *reset_hook);
rom_reset = *reset_hook;
#endif
restore_flags(flags);
/* We never make it this far... */
printk(" reboot failed, reboot manually!\n");
/* XXX - delay do we need to spin here ? */
while(1); /* Just in case .. */
rom_reset();
restore_flags(flags);
/* We never make it this far... */
printk ("Restart failed. Please restart manually.\n");
/* XXX - delay do we need to spin here ? */
while(1); /* Just in case .. */
}
/*
* Initially discovered this technique in the Mach kernel of MkLinux in
* osfmk/src/mach_kernel/ppc/POWERMAC/cuda_power.c. Found equivalent LinuxPPC
* code in arch/ppc/kernel/setup.c, which also has a PMU technique!
* --David Kilzer
*
* I suspect the MAC_ADB_CUDA code might work with other ADB types of machines
* but have no way to test this myself. --DDK
*/
else if (macintosh_config->adb_type == MAC_ADB_IISI
|| macintosh_config->adb_type == MAC_ADB_CUDA)
{
struct adb_request req;
adb_request (&req, NULL, 2, CUDA_PACKET, CUDA_RESET_SYSTEM);
printk ("Restart failed. Please restart manually.\n");
for (;;)
{
adb_poll();
}
}
}
/*
......
......@@ -6,6 +6,9 @@
* is a bit incomplete as the Mac documentation doesnt cover this well
*/
#ifndef _ASM_VIA6522_H_
#define _ASM_VIA6522_H_
#define VIABASE 0x50F00000
#define VIABASE2 0x50F02000
......@@ -45,17 +48,32 @@
* Register B has the fun stuff in it
*/
#define VIA2B_vMode32 0x08 /* 24/32bit switch - doubles as cache flush */
#define VIA2B_vPower 0x04 /* Off switch */
#define VIA2B_vBusLk 0x02
#define VIA2B_vCDis 0x01
#define VIA2B_vBusLk 0x02 /* Nubus in use ?? */
#define VIA2B_vCDis 0x01 /* Cache disable */
/*
* The 6522 via is a 2MHz part, and needs a delay. MacOS seems to
* execute MOV (Ax),(Ax) for this... Oh and we can't use udelay
* here... see we need the via to calibrate the udelay loop ...
*/
extern volatile long *via_memory_bogon;
extern __inline__ void via_write(volatile unsigned char *via,int reg, int v)
{
*via_memory_bogon;
*via_memory_bogon;
*via_memory_bogon;
via[reg]=v;
}
extern __inline__ int via_read(volatile unsigned char *via,int reg)
{
*via_memory_bogon;
*via_memory_bogon;
*via_memory_bogon;
return (int)via[reg];
}
......@@ -109,3 +127,5 @@ extern void via1_irq(int, void *, struct pt_regs *);
extern void via2_irq(int, void *, struct pt_regs *);
extern void via_setup_keyboard(void);
#endif /* _ASM_VIA6522_H_ */
......@@ -18,6 +18,7 @@
#include <asm/system.h>
#include <asm/traps.h>
#include <asm/io.h>
#include <asm/machdep.h>
#ifdef CONFIG_AMIGA
#include <asm/amigahw.h>
#endif
......@@ -554,6 +555,14 @@ unsigned long mm_ptov (unsigned long paddr)
* this?). So we have to push first and then additionally to invalidate.
*/
#ifdef CONFIG_M68K_L2_CACHE
/*
* Jes was worried about performance (urhh ???) so its optional
*/
extern void (*mach_l2_flush)(int) = NULL;
#endif
/*
* cache_clear() semantics: Clear any cache entries for the area in question,
* without writing back dirty entries first. This is useful if the data will
......@@ -593,6 +602,10 @@ void cache_clear (unsigned long paddr, int len)
"movec %/d0,%/cacr"
: : "i" (FLUSH_I_AND_D)
: "d0");
#ifdef CONFIG_M68K_L2_CACHE
if(mach_l2_flush)
mach_l2_flush(0);
#endif
}
......@@ -641,6 +654,10 @@ void cache_push (unsigned long paddr, int len)
"movec %/d0,%/cacr"
: : "i" (FLUSH_I)
: "d0");
#ifdef CONFIG_M68K_L2_CACHE
if(mach_l2_flush)
mach_l2_flush(1);
#endif
}
......
# $Id: config.in,v 1.71 1998/09/18 13:25:17 cort Exp $
# $Id: config.in,v 1.72 1998/10/01 14:09:40 cort Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
......@@ -27,7 +27,7 @@ choice 'Machine Type' \
CHRP CONFIG_CHRP \
PowerMac/PReP/CHRP CONFIG_ALL_PPC \
APUS CONFIG_APUS \
MBX CONFIG_MBX" PReP
MBX CONFIG_MBX" PowerMac
endmenu
if [ "$CONFIG_MBX" = "y" ];then
......@@ -184,10 +184,10 @@ comment 'Sound'
tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
if [ "$CONFIG_APUS" = "y" -o "$CONFIG_PMAC" = "y" ]; then
tristate 'Amiga or PowerMac DMA sound support' CONFIG_DMASOUND
tristate 'Amiga or PowerMac DMA sound support' CONFIG_DMASOUND
fi
if [ "$CONFIG_PREP" = "y" -o "$CONFIG_CHRP" = "y" ]; then
source drivers/sound/Config.in
source drivers/sound/Config.in
fi
fi
......
......@@ -8,6 +8,7 @@
#include <asm/head.h>
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/tasks.h>
......
/* $Id: sparc64_ksyms.c,v 1.41 1998/10/04 08:44:16 davem Exp $
/* $Id: sparc64_ksyms.c,v 1.42 1998/10/05 03:18:50 davem Exp $
* arch/sparc64/kernel/sparc64_ksyms.c: Sparc64 specific ksyms support.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
......@@ -62,6 +62,7 @@ extern void *__memscan_zero(void *, size_t);
extern void *__memscan_generic(void *, int, size_t);
extern int __memcmp(const void *, const void *, __kernel_size_t);
extern int __strncmp(const char *, const char *, __kernel_size_t);
extern __kernel_size_t __strlen(const char *);
extern char saved_command_line[];
extern char *getname32(u32 name);
extern void linux_sparc_syscall(void);
......
......@@ -1250,7 +1250,7 @@ static ssize_t extract_entropy(struct random_bucket *r, char * buf,
}
#if HASH_BUFFER_SIZE & 1 /* There's a middle word to deal with */
x = tmp[HASH_BUFFER_SIZE/2];
add_entropy_words(r, x, (__u32)buf);
add_entropy_words(r, x, (__u32)((unsigned long)buf));
x ^= (x >> 16); /* Fold it in half */
((__u16 *)tmp)[HASH_BUFFER_SIZE-1] = (__u16)x;
#endif
......
This diff is collapsed.
......@@ -2104,6 +2104,9 @@ __initfunc(int tty_init(void))
#ifdef CONFIG_ROCKETPORT
rp_init();
#endif
#ifdef CONFIG_MVME16x
serial167_init();
#endif
#ifdef CONFIG_CYCLADES
cy_init();
#endif
......
......@@ -50,14 +50,14 @@ static void dayna_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr,
static void dayna_block_input(struct device *dev, int count,
struct sk_buff *skb, int ring_offset);
static void dayna_block_output(struct device *dev, int count,
const unsigned char *buf, const start_page);
const unsigned char *buf, const int start_page);
static void sane_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr,
int ring_page);
static void sane_block_input(struct device *dev, int count,
struct sk_buff *skb, int ring_offset);
static void sane_block_output(struct device *dev, int count,
const unsigned char *buf, const start_page);
const unsigned char *buf, const int start_page);
static void slow_sane_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr,
int ring_page);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Sar Jul 18 13:00 1998 Gerard Roudier (groudier@club-internet.fr)
Sun Oct 4 14:00 1998 Gerard Roudier (groudier@club-internet.fr)
* revision 3.0i
- Cosmetic changes for sparc (but not for the driver) that needs
__irq_itoa() to be used for printed IRQ value to be understandable.
- Some problems with the driver that didn't occur using driver 2.5f
were due to a SCSI selection problem triggered by a clearly
documented feature that in fact seems not to work: (53C8XX chips
are claimed by the manuals to be able to execute SCSI scripts just
after abitration while the SCSI core is performing SCSI selection).
This optimization is broken and has been removed.
- Some broken scsi devices are confused when a negotiation is started
on a LUN that does not correspond to a real device. According to
SCSI specs, this is a device firmware bug. This has been worked
around by only starting negotiation if the LUN has previously be
used for at least 1 successful SCSI command.
- The 'last message sent' printed out on M_REJECT message reception
was read from the SFBR i/o register after the previous message had
been sent.
This was not correct and affects all previous driver versions and
the original FreeBSD one as well. The SCSI scripts has been fixed
so that it now provides the right information to the C code.
Sat Jul 18 13:00 1998 Gerard Roudier (groudier@club-internet.fr)
* revision 3.0g
- Preliminary fixes for Big Endian (sent by Eddie C. Dost).
Big Endian architectures should work again with the driver.
......
......@@ -147,6 +147,14 @@ else
endif
endif
ifeq ($(CONFIG_BLZ603EPLUS_SCSI),y)
L_OBJS += amiga7xx.o 53c7xx.o
else
ifeq ($(CONFIG_BLZ603EPLUS_SCSI),m)
M_OBJS += amiga7xx.o 53c7xx.o
endif
endif
ifeq ($(CONFIG_WARPENGINE_SCSI),y)
L_OBJS += amiga7xx.o 53c7xx.o
else
......
This diff is collapsed.
......@@ -131,7 +131,7 @@ int blz1230_esp_detect(Scsi_Host_Template *tpnt)
/* Set the command buffer */
esp->esp_command = (volatile unsigned char*) cmd_buffer;
esp->esp_command_dvma = VTOP((unsigned long) cmd_buffer);
esp->esp_command_dvma = virt_to_bus((unsigned long) cmd_buffer);
esp->irq = IRQ_AMIGA_PORTS;
request_irq(IRQ_AMIGA_PORTS, esp_intr, 0,
......
......@@ -107,7 +107,7 @@ int blz2060_esp_detect(Scsi_Host_Template *tpnt)
/* Set the command buffer */
esp->esp_command = (volatile unsigned char*) cmd_buffer;
esp->esp_command_dvma = VTOP((unsigned long) cmd_buffer);
esp->esp_command_dvma = virt_to_bus((unsigned long) cmd_buffer);
esp->irq = IRQ_AMIGA_PORTS;
request_irq(IRQ_AMIGA_PORTS, esp_intr, 0,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -61,6 +61,7 @@
#include <asm/amigaints.h>
#include <asm/setup.h>
#include <video/fbcon.h>
#include <video/fbcon-afb.h>
#include <video/fbcon-ilbm.h>
#include <video/fbcon-mfb.h>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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