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

Import 2.3.15pre3

parent 93ef77fa
......@@ -713,14 +713,11 @@ S: Woodbridge, Connecticut 06525
S: USA
N: Paul Gortmaker
E: gpg109@rsphy1.anu.edu.au
W: http://rsphy1.anu.edu.au/~gpg109
D: Real Time Clock driver author.
D: 8390 net driver hacker (ne2000, wd8013, smc-ultra, 3c503, etc.)
D: Ethernet-HOWTO and BootPrompt-HOWTO author.
D: Added many new CONFIG options (modules, ramdisk, generic-serial, etc.)
D: Implemented 1st "official" kernel thread (moved user bdflush to kflushd)
D: Various other random hacks, patches and utilities.
E: p_gortmaker@yahoo.com
D: Author of RTC driver & several net drivers, Ethernet & BootPrompt Howto.
D: Made support for modules, ramdisk, generic-serial, etc. optional.
D: Transformed old user space bdflush into 1st kernel thread - kflushd.
D: Many other patches, documentation files, mini kernels, utilities, ...
N: John E. Gotts
E: jgotts@engin.umich.edu
......@@ -1056,12 +1053,12 @@ S: 602 00 Brno
S: Czech Republic
N: Fred N. van Kempen
E: waltje@uwalt.nl.mugnet.org
E: waltje@linux.com
D: NET-2
D: Drivers
D: Kernel cleanups
S: Hoefbladhof 27
S: 2215 DV Voorhout
S: Korte Heul 95
S: 1403 ND BUSSUM
S: The Netherlands
N: Karl Keyte
......
......@@ -25,10 +25,14 @@ SMP.txt
- notes, and "To Fix" list for multi-processor Linux. (see smp.tex)
VGA-softcursor.txt
- how to change your VGA cursor from a blinking underscore.
arm/
- directory with info about Linux on the ARM architecture.
binfmt_misc.txt
- info on the kernel support for extra binary formats.
cdrom/
- directory with information on the CD-ROM drivers that Linux has.
cpqarray.txt
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
devices.tex
- TeX source listing of all the nodes in /dev/ with major minor #'s
devices.txt
......@@ -39,12 +43,16 @@ digiepca.txt
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
exception.txt
- how Linux v2.2 handles exceptions without verify_area etc.
fb/
- directory with info on the frame buffer graphics abstraction layer.
filesystems/
- directory with info on the various filesystems that Linux supports.
ftape.txt
- notes about the floppy tape device driver
hayes-esp.txt
- info on using the Hayes ESP serial driver.
i386/
- directory with info about Linux on the intel ix86 architecture.
ide.txt
- important info for users of ATA devices (IDE/EIDE disks and CD-ROMS)
initrd.txt
......@@ -57,10 +65,18 @@ java.txt
- info on the in-kernel binary support for Java(tm)
joystick.txt
- info on using joystick devices (and driver) with Linux.
joystick-api.txt
- API specification for applications that will be using the joystick.
joystick-parport.txt
- info on how to hook joysticks/gamepads to the parallel port.
kbuild/
- directory with info about the kernel build process
kernel-docs.txt
- listing of various WWW + books that document kernel internals.
kernel-parameters.txt
- summary listing of command line / boot prompt args for the kernel.
kmod.txt
- - info on the kernel module loader/unloader (kerneld replacement)
- info on the kernel module loader/unloader (kerneld replacement).
locks.txt
- info on file locking implementations, flock() vs. fcntl(), etc.
logo.gif
......@@ -79,6 +95,8 @@ md.txt
- info on boot arguments for the multiple devices driver
memory.txt
- info on typical Linux memory problems.
mkdev.ida
- script to make /dev entries for Intelligent Disk Array Controllers.
modules.txt
- short guide on how to make kernel parts into loadable modules
mtrr.txt
......@@ -101,16 +119,22 @@ pcwd-watchdog.txt
- info and sample code for using with the PC Watchdog reset card.
powerpc/
- directory with info on using Linux with the PowerPC.
proc.txt
- detailed info on Linux's /proc filesystem.
ramdisk.txt
- short guide on how to set up and use the RAM disk.
riscom8.txt
- notes on using the RISCom/8 multi-port serial driver.
rtc.txt
- notes on how to use the Real Time Clock (aka CMOS clock) driver.
scsi-generic.txt
- info on the sg driver for generic (non-disk/CD/tape) SCSI devices.
scsi.txt
- short blurb on using SCSI support as a module.
serial-console.txt
- how to set up Linux with a serial line console as the default.
sgi-visws.txt
- short blurb on the SGI Visual Workstations.
smart-config.txt
- description of the Smart Config makefile feature.
smp.tex
......@@ -127,6 +151,8 @@ stallion.txt
- info on using the Stallion multiport serial driver.
svga.txt
- short guide on selecting video modes at boot via VGA BIOS.
sx.txt
- info on the Specialix SX/SI multiport serial driver.
sysctl/
- directory with info on the /proc/sys/* files
sysrq.txt
......@@ -135,6 +161,8 @@ transname.txt
- how to use name translation to ease use of diskless systems.
unicode.txt
- info on the Unicode character/font mapping used in Linux.
video4linux/
- directory with info regarding video/TV/radio cards and linux.
watchdog.txt
- how to auto-reboot Linux if it has "fallen and can't get up". ;-)
xterm-linux.xpm
......
......@@ -238,13 +238,12 @@ are you need to upgrade to a more recent net-tools that understands the
new /proc/net/dev format. This will also provide support for new
features like IPv6.
As of 2.1.102, the IP firewalling code has been replaced; ipfwadm
will no longer work. You need to obtain "ipchains," available from
http://www.rustcorp.com/linux/ipchains/ , and use that instead of
ipfwadm.
To use masq forwarding you will need to obtain "ipmasqadm,"
available from http://juanjox.linuxhq.com/ .
The IP firewalling and NAT code has been replaced again. The
actual modules (including ipfwadm and ipchains backwards-compatibility
modules) are currently distributed separately: see
http://antarctica.penguincomputing.com/~netfilter/
http://www.samba.org/netfilter/
http://netfilter.kernenotes.org
DHCP clients for 2.0 do not work with the new networking code in the
2.2 kernel. You will need to upgrade your dhcpcd / dhcpclient.
......
This diff is collapsed.
In order to use anything but the most primitive functions of ATM,
several user-mode programs are required to assist the kernel. These
programs and related material can be found via the ATM on Linux Web
page at http://icawww1.epfl.ch/linux-atm/
This diff is collapsed.
......@@ -130,3 +130,5 @@ Code Seq# Include File Comments
0xA3 90-9F DoubleTalk driver in development:
<mailto:jrv@vanzandt.mv.com>
0xAB 00-06 Network block device
0xAD 00 Netfilter device in development:
<mailto:rusty@rustcorp.com.au>
......@@ -90,9 +90,8 @@ First way is lowlevel
---------------------
All ISA PNP configuration registers are accessible via lowlevel
isapnp_cfg_(set|get)_(byte|word|dword) functions.
isapnp_(read|write)_(byte|word|dword) functions.
Before any lowlevel function
The function isapnp_cfg_begin() must be called before any lowlevel function.
The function isapnp_cfg_end() must be always called after configuration
otherwise the access to the ISA PnP configuration functions will be blocked.
......@@ -129,10 +128,12 @@ Example (game port initialization)
return -ENODEV;
if (dev->prepare(dev)<0)
return -EAGAIN;
if (!(dev->resource[0].flags & IORESOURCE_IO))
return -ENODEV;
if (!dev->ro) {
/* override resource */
if (user_port != USER_PORT_AUTO_VALUE)
dev->resource[0].start = user_port;
isapnp_resource_change(&dev->resource[0], user_port, 1);
}
if (dev->activate(dev)<0) {
printk("isapnp configure failed (out of resources?)\n");
......
#!/bin/sh
# Script to create device nodes for SMART array controllers
# Usage:
# mkdev.ida [num controllers] [num log volumes] [num partitions]
#
# With no arguments, the script assumes 1 controller, 16 logical volumes,
# and 16 partitions/volume, which is adequate for most configurations.
#
# If you had 5 controllers and were planning on no more than 4 logical volumes
# each, using a maximum of 8 partitions per volume, you could say:
#
# mkdev.ida 5 4 8
#
# Of course, this has no real benefit over "mkdev.ida 5" except that it
# doesn't create so many device nodes in /dev/ida.
NR_CTLR=${1-1}
NR_VOL=${2-16}
NR_PART=${3-16}
if [ ! -d /dev/ida ]; then
mkdir -p /dev/ida
fi
C=0; while [ $C -lt $NR_CTLR ]; do
MAJ=`expr $C + 72`
D=0; while [ $D -lt $NR_VOL ]; do
P=0; while [ $P -lt $NR_PART ]; do
MIN=`expr $D \* 16 + $P`
if [ $P -eq 0 ]; then
mknod /dev/ida/c${C}d${D} b $MAJ $MIN
else
mknod /dev/ida/c${C}d${D}p${P} b $MAJ $MIN
fi
P=`expr $P + 1`
done
D=`expr $D + 1`
done
C=`expr $C + 1`
done
This is the new release of a module network device driver for General
Instruments (also known as NextLevel) SB1000 cable modem board (also
called internal SURFboard).
I have tested and I am running this module on kernel 2.0.33.
Steven N. Hirsch <shirsch@adelphia.net> gave me a diff patch
(sb1000-1.1.2_127.patch to be applied with 'patch -p') that allows
you to compile and run the driver with kernel versions 2.1.x.
Thanks very much Steve!
Here you'll the following files:
- README
- Makefile
- sb1000.c the actual device driver
- cmconfig.c an ifconfig-like program to correctly set the SB1000
- cmping.c a ping-like program to test your connection
- ftptest.c a small program to test your connection speed with FTP
(requires ftplib version >= 3.0)
The directory ppp/ contains the files I am using to connect to MediaOne
here in Jacksonville, to show how you can use the driver and the cmconfig
program.
Clemmitt Sigler wrote a very good and useful web page and installation
script (for Adelphia PowerLink users but easy to port to other ISPs)
about this SB1000 driver for Linux.
You can find it here:
http://home.adelphia.net/~siglercm/sb1000.html
Thanks very much Clemmitt!
To install and run it:
- cd sb1000-1.1.2
- make
- make install
- configure the SB1000 card using the isapnp tools setting the correct
I/O's and IRQ. You can find more info about the isapnp tools at:
http://www.roestock.demon.co.uk/isapnptools/
(once you're happy with it, you may want to set the configuration
at boot time in one of the /etc/init.d/ scripts)
IMPORTANT NOTICE: after configuring isapnp, please look in the file
/etc/isapnp.conf for the line beginning with:
(READPORT
if it says: '(READPORT 0x0203)' (which should be the default), then
go to the next step. If instead it says something like:
'(READPORT 0x020b)' or '(READPORT 0x<another number>)', then please
follow the instructions at the end of this README file before going
to the next step.
- install the PPP configuration files in the /etc/ppp directory; you
definitely have to change the file ppp@gi-on (the start up file),
setting the correct login name, the phone number for the PPP connection
and the frequency (k stands for kHz, M for MHz) for the cablemodem.
You'll also have to change the last line in the pap-secrets file
writing your login and password there (read the whole file for more
site specific configurations).
You may have to change the firewall file to suit your needs (IPs and
ports allowed to connect).
- start the PPP connection with ppp@gi-on and see what happens; you may
want to set 'pppd' (the last command in the ppp@gi-on file) to debug
mode adding 'debug' at the end of the command ('pppd' prints its info in
the file /var/log/messages and/or /var/log/ppp.log). To make sure 'chat'
s not having problems you may want to add a '-v' (verbose) after the 'chat'
command in 'ppp-on-dialer' and check the results in /var/log/messages)
- if everything is working fine you should see after a few seconds a message
likes this:
cm0: sb1000 at (0x120,0x310), csn 1, S/N 0x2a0d16d8, IRQ 9.
sb1000.c:v1.1.2 6/01/98 (fventuri@mediaone.net)
and ifconfig -a should show you two new interfaces: ppp0 and cm0.
Typing 'cmconfig cm0' will show you more info about the cablemodem interface.
- please let me know if you see any other message coming from 'cm0' in
your '/var/log/messages' or '/var/log/debug' file, to help me debug the
code
- also let me know if you have any problem; if everything works (hopefully),
let me know which speed you can reach downloading the 5Mb test file using
this driver.
- if everything seems to work fine but your computer locks up after a while
(and typically during a lengthy download through the cablemodem), you may
need to add a short delay in the driver to 'slow down' the SURFboard
because your PC might not be able to keep up with the transfer rate of
the SB1000. To do this, edit the 'Makefile' and look for the 'SB1000_DELAY'
define: uncomment those 'CFLAGS' lines (and comment the default ones)
and try setting the delay to something like 60 microseconds with:
'-DSB1000_DELAY=60'; if it still doesn't work or you like playing with
the driver, you may try other numbers: remember though that the higher
the delay, the slower the driver (which slows down the rest of the PC
too when it is actively used). Thanks to Ed Daiga for this tip!
This release has a few things fixed and a better handling of the frame errors.
I also have slightly modified the 'cablemodem' script in the 'ppp' so
you may interested in having a look at it: I basically have added filtering
out broadcast messages (you shouldn't get them with a point-to-point
interface and so far the ones I have received were from hosts trying to
attack my system) and lower debug levels for the driver to avoid seeing
the 'frame error' messages (so far noone has noticed any problem with the
driver even with those messages).
For questions, infos, etc, feel free to email me at:
fventuri@mediaone.net
Good luck,
Franco Venturi
Thanks to Edge for his useful comments and to Steven N. Hirsch
for his patch to run the driver with 2.1.x kernels.
Thanks also to Ed Daiga for his help in finding that adding a delay
in the driver fixes some lock up problems with some slow PCs.
Many thanks to Clemmitt Sigler for his (much needed) web page about the
SB1000 driver for Linux.
An interesting URL for Linux + MediaOne (although with an external modem)
is: http://rlz.ne.mediaone.net/linux/home.shtml
Today, Sep 22 1998, I finished writing a short utility (ftptest.c) to
'measure' your cablemodem speed connection in Linux, downloading to
memory the same file several times. To compile it you need ftplib, version
3 or above. To run it, type:
ftptest URL n
where URL is in the form: ftp://ftp.site.local.isp/pub/testfile
and n is the number of simultaneous FTP connections that you want to run
---------------------------------------------------------------------------
IMPORTANT NOTICE: if in your file /etc/isapnp.conf, you found something
like '(READPORT 0x020b)' or '(READPORT 0x<another number>)', (anything
different from the default 0x0203), you have to change the READ_DATA_PORT
parameter in the sb1000.c file as follows.
- edit the sb1000.c file, look for:
READ_DATA_PORT
(it should be around line 127 in version 1.1.2)
- change the value of READ_DATA_PORT to the same value found in
/etc/isapnp.conf; for instance, if you found a: '(READPORT 0x020b)',
then in sb1000.c you should have:
static const int READ_DATA_PORT = 0x20b;
- save sb1000.c
- compile and install again the driver
(i.e. do a 'make' and a 'make install').
/*
There is only 1 optname (see setsockopt(2)), IP_FW_MASQ_CTL that
must be used.
Funcionality depends on your kernel CONFIG options, here is
an example you can use to create an ``incoming'' tunnel:
See "user.c" module under ipmasqadm tree for a generic example
*/
#undef __KERNEL__ /* Makefile lazyness ;) */
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <asm/types.h> /* For __uXX types */
#include <net/if.h>
#include <netinet/ip_icmp.h>
#include <netinet/udp.h>
#include <netinet/tcp.h>
#include <linux/ip_fw.h> /* For IP_FW_MASQ_CTL */
#include <linux/ip_masq.h> /* For specific masq defs */
int create_listening_masq(struct ip_masq_ctl *masq, int proto, u_int32_t src_addr, u_int16_t src_port, u_int32_t dst_addr)
{
int sockfd;
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (sockfd<0) {
perror("socket(RAW)");
return -1;
}
memset (masq, 0, sizeof (*masq));
/*
* Want user tunnel control
*/
masq->m_target = IP_MASQ_TARGET_USER;
/*
* Want to insert new
*/
masq->m_cmd = IP_MASQ_CMD_INSERT;
masq->u.user.protocol = proto;
masq->u.user.saddr = src_addr;
masq->u.user.sport = src_port;
masq->u.user.rt_daddr = inet_addr("192.168.21.239");
if (setsockopt(sockfd, IPPROTO_IP,
IP_FW_MASQ_CTL, (char *)masq, sizeof(*masq))) {
perror("setsockopt()");
return -1;
}
/* masq struct now contains tunnel details */
fprintf(stderr, "PROTO=%d SRC=0x%X:%x - MASQ=0x%X:%x - DST=0x%X:%x\n",
masq->u.user.protocol,
ntohl(masq->u.user.saddr), ntohs(masq->u.user.sport),
ntohl(masq->u.user.maddr), ntohs(masq->u.user.mport),
ntohl(masq->u.user.daddr), ntohs(masq->u.user.dport));
return 0;
}
int main(void) {
struct ip_masq_ctl masq_buf;
return create_listening_masq(&masq_buf,
IPPROTO_TCP,
inet_addr("192.168.1.4"),
htons(23),
inet_addr("192.168.21.3"));
}
Sun Jul 2 01:38:33 EST 1995
See also: http://www-uk.hpl.hp.com/people/jt/Linux/Wavelan.html
As the date above certify, this ``readme'' is mostly
obsolete. Please read release notes and change list in
driver/net/wavelan.p.h, and consult my web page at :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html
Jean <jt@hpl.hp.com>
1. At present the driver autoprobes for a WaveLAN card only at I/O address
0x390. The version of the card that I use (NCR) supports four I/O addresses
......
......@@ -85,7 +85,6 @@ http://members.xoom.com/yar/synthgm.sbk.gz. Copy it to /usr and gunzip it there.
7) Edit /etc/conf.modules, inserting at the end of the file:
alias sound sb
alias midi awe_wave
post-install awe_wave /usr/bin/sfxload /usr/synthfm.sbk
options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
......
......@@ -32,3 +32,22 @@ options sb mad16=1
options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=816 mpu_irq=5 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
The addition of the "mpu_io=816 mpu_irq=5" to the mad16 options line is
------------------------------------------------------------------------
The mad16 module in addition supports the following options:
option: meaning: default:
joystick=0,1 disabled, enabled disabled
cdtype=0x00,0x02,0x04, disabled, Sony CDU31A, disabled
0x06,0x08,0x0a Mitsumi, Panasonic,
Secondary IDE, Primary IDE
cdport=0x340,0x320, 0x340
0x330,0x360
cdirq=0,3,5,7,9,10,11 disabled, IRQ3, ... disabled
cddma=0,5,6,7 disabled, DMA5, ... DMA5 for Mitsumi or IDE
cddma=0,1,2,3 disabled, DMA1, ... DMA3 for Sony or Panasonic
opl4=0,1 OPL3, OPL4 OPL3
for more details see linux/drivers/sound/mad16.c
Rui Sousa
ALaw/uLaw sample formats
------------------------
This driver does not support the ALaw/uLaw sample formats.
ALaw is the default mode when opening a sound device
using OSS/Free. The reason for the lack of support is
that the hardware does not support these formats, and adding
conversion routines to the kernel would lead to very ugly
code in the presence of the mmap interface to the driver.
And since xquake uses mmap, mmap is considered important :-)
and no sane application uses ALaw/uLaw these days anyway.
In short, playing a Sun .au file as follows:
cat my_file.au > /dev/dsp
does not work. Instead, you may use the play script from
Chris Bagwell's sox-12.14 package (or later, available from the URL
below) to play many different audio file formats.
The script automatically determines the audio format
and does do audio conversions if necessary.
http://home.sprynet.com/sprynet/cbagwell/projects.html
Blocking vs. nonblocking IO
---------------------------
Unlike OSS/Free this driver honours the O_NONBLOCK file flag
not only during open, but also during read and write.
This is an effort to make the sound driver interface more
regular. Timidity has problems with this; a patch
is available from http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html.
(Timidity patched will also run on OSS/Free).
MIDI UART
---------
The driver supports a simple MIDI UART interface, with
no ioctl's supported.
MIDI synthesizer
----------------
The card has an OPL compatible FM synthesizer.
Thomas Sailer
sailer@ife.ee.ethz.ch
This diff is collapsed.
......@@ -89,10 +89,9 @@ S: Maintained
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
P: Paul Gortmaker
M: gpg109@rsphy1.anu.edu.au
M: p_gortmaker@yahoo.com
L: linux-net@vger.rutgers.edu
S: Maintained
W: http://rsphy1.anu.edu.au/~gpg109/ne2000.html
AD1816 SOUND DRIVER
P: Thorsten Knabe
......@@ -182,6 +181,16 @@ M: jgarzik@pobox.com
L: linux-fbdev@vuser.vu.union.edu
S: Maintained
COMPUTONE INTELLIPORT MULTIPORT CARD
P: Doug McNash
P: Michael H. Warfield
M: Doug McNash <dmcnash@computone.com>
M: Michael H. Warfield <mhw@wittsend.com>
W: http://www.computone.com/
W: http://www.wittsend.com/computone.html
L: linux-computone@lazuli.wittsend.com
S: Supported
CONFIGURE, MENUCONFIG, XCONFIG
P: Michael Elizabeth Chastain
M: mec@shout.net
......@@ -410,12 +419,6 @@ M: Gadi Oxman <gadio@netvision.net.il>
L: linux-kernel@vger.rutgers.edu
S: Maintained
IP FIREWALL
P: Paul Russell
M: Paul.Russell@rustcorp.com.au
W: http://www.rustcorp.com/linux/ipchains
S: Supported
IP MASQUERADING:
P: Juanjo Ciarlante
M: jjciarla@raiz.uncu.edu.ar
......@@ -549,6 +552,15 @@ M: vl@kki.org
L: linware@sh.cvut.cz
S: Maintained
NETFILTER
P: Rusty Russell
M: Rusty.Russell@rustcorp.com.au
W: http://www.samba.org/netfilter/
W: http://netfilter.kernelnotes.org
W: http://antarctica.penguincomputing.com/~netfilter/
L: netfilter@lists.samba.org
S: Supported
NETROM NETWORK LAYER
P: Tomi Manninen
M: Tomi.Manninen@hut.fi
......@@ -682,7 +694,7 @@ S: Maintained
REAL TIME CLOCK DRIVER
P: Paul Gortmaker
M: gpg109@rsphy1.anu.edu.au
M: p_gortmaker@yahoo.com
L: linux-kernel@vger.rutgers.edu
S: Maintained
......@@ -869,7 +881,8 @@ S: Supported
WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
P: Jean Tourrilhes
M: jt@hplb.hpl.hp.com
M: jt@hpl.hp.com
W: http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
S: Maintained
WD7000 SCSI DRIVER
......
......@@ -126,6 +126,10 @@ endif
DRIVERS := $(DRIVERS) drivers/net/net.a
ifdef CONFIG_ATM
DRIVERS := $(DRIVERS) drivers/atm/atm.a
endif
ifeq ($(CONFIG_SCSI),y)
DRIVERS := $(DRIVERS) drivers/scsi/scsi.a
endif
......@@ -325,6 +329,7 @@ modules_install:
if [ -f NET_MODULES ]; then inst_mod NET_MODULES net; fi; \
if [ -f IPV4_MODULES ]; then inst_mod IPV4_MODULES ipv4; fi; \
if [ -f IPV6_MODULES ]; then inst_mod IPV6_MODULES ipv6; fi; \
if [ -f ATM_MODULES ]; then inst_mod ATM_MODULES atm; fi; \
if [ -f SCSI_MODULES ]; then inst_mod SCSI_MODULES scsi; fi; \
if [ -f FS_MODULES ]; then inst_mod FS_MODULES fs; fi; \
if [ -f NLS_MODULES ]; then inst_mod NLS_MODULES fs; fi; \
......
......@@ -173,13 +173,6 @@ then
bool 'Symmetric multi-processing support' CONFIG_SMP
fi
if [ "$CONFIG_PCI" = "y" ]; then
bool 'PCI quirks' CONFIG_PCI_QUIRKS
if [ "$CONFIG_PCI_QUIRKS" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool 'PCI bridge optimization (experimental)' CONFIG_PCI_OPTIMIZE
fi
bool 'Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
fi
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
......@@ -216,6 +209,9 @@ if [ "$CONFIG_NET" = "y" ]; then
bool 'Network device support' CONFIG_NETDEVICES
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
if [ "$CONFIG_ATM" = "y" ]; then
source drivers/atm/Config.in
fi
fi
endmenu
fi
......
......@@ -67,11 +67,6 @@ if [ "$CONFIG_PCI" = "y" ]; then
if [ "$CONFIG_PCI_GODIRECT" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
define_bool CONFIG_PCI_DIRECT y
fi
bool ' PCI quirks' CONFIG_PCI_QUIRKS
if [ "$CONFIG_PCI_QUIRKS" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool ' PCI bridge optimization (experimental)' CONFIG_PCI_OPTIMIZE
fi
bool ' Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
fi
bool 'MCA support' CONFIG_MCA
bool 'SGI Visual Workstation support' CONFIG_VISWS
......@@ -136,6 +131,9 @@ if [ "$CONFIG_NET" = "y" ]; then
bool 'Network device support' CONFIG_NETDEVICES
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
if [ "$CONFIG_ATM" = "y" ]; then
source drivers/atm/Config.in
fi
fi
endmenu
fi
......
......@@ -44,8 +44,6 @@ CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_QUIRKS=y
CONFIG_PCI_OLD_PROC=y
# CONFIG_MCA is not set
# CONFIG_VISWS is not set
CONFIG_X86_IO_APIC=y
......@@ -123,8 +121,9 @@ CONFIG_BLK_DEV_IDE_MODES=y
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK is not set
# CONFIG_FIREWALL is not set
# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
......@@ -140,7 +139,6 @@ CONFIG_INET=y
#
# (it is safe to leave these untouched)
#
# CONFIG_INET_RARP is not set
CONFIG_SKB_LARGE=y
#
......@@ -227,6 +225,7 @@ CONFIG_NETDEVICES=y
# CONFIG_ARCNET is not set
CONFIG_DUMMY=m
# CONFIG_EQUALIZER is not set
# CONFIG_NET_SB1000 is not set
#
# Ethernet (10 or 100Mbit)
......@@ -258,6 +257,7 @@ CONFIG_EEXPRESS_PRO100=y
# Token ring devices
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
#
# Wan interfaces
......
This diff is collapsed.
......@@ -110,6 +110,7 @@ EXPORT_SYMBOL(mca_isadapter);
EXPORT_SYMBOL(mca_mark_as_used);
EXPORT_SYMBOL(mca_mark_as_unused);
EXPORT_SYMBOL(mca_find_unused_adapter);
EXPORT_SYMBOL(mca_is_adapter_used);
#endif
#ifdef CONFIG_VT
......
......@@ -584,6 +584,19 @@ static int __init amd_model(struct cpuinfo_x86 *c)
break;
}
break;
case 6: /* An Athlon. We can trust the BIOS probably */
{
u32 ecx, edx, dummy;
cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
printk("L1 I Cache: %dK L1 D Cache: %dK\n",
ecx>>24, edx>>24);
cpuid(0x80000006, &dummy, &dummy, &ecx, &edx);
printk("L2 Cache: %dK\n", ecx>>16);
c->x86_cache_size = ecx>>16;
break;
}
}
return r;
}
......@@ -805,6 +818,11 @@ static struct cpu_model_info cpu_models[] __initdata = {
"K5", "K5", NULL, NULL,
"K6", "K6", "K6-2",
"K6-3", NULL, NULL, NULL, NULL, NULL, NULL }},
{ X86_VENDOR_AMD, 6,
{ "Athlon", "Athlon",
NULL, NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL }},
{ X86_VENDOR_UMC, 4,
{ NULL, "U5D", "U5S", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL }},
......
......@@ -48,9 +48,6 @@ fi
bool 'Sun3x support' CONFIG_SUN3X
define_bool CONFIG_SUN3 n
if [ "$CONFIG_PCI" = "y" ]; then
bool 'Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
fi
bool 'Q40/Q60 support' CONFIG_Q40
comment 'Processor type'
......
......@@ -63,14 +63,6 @@ endmenu
mainmenu_option next_comment
comment 'General setup'
if [ "$CONFIG_PCI" = "y" ]; then
bool ' PCI quirks' CONFIG_PCI_QUIRKS
if [ "$CONFIG_PCI_QUIRKS" = "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool ' PCI bridge optimization (experimental)' CONFIG_PCI_OPTIMIZE
fi
bool ' Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
fi
if [ "$CONFIG_DECSTATION" = "y" ]; then
define_bool CONFIG_CPU_LITTLE_ENDIAN y
else
......
......@@ -50,12 +50,6 @@ else
define_bool CONFIG_PCI y
fi
bool 'PCI quirks' CONFIG_PCI_QUIRKS
if [ "$CONFIG_PCI_QUIRKS" = "y" ]; then
bool ' PCI bridge optimization' CONFIG_PCI_OPTIMIZE
fi
bool 'Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
bool 'Networking support' CONFIG_NET
bool 'Sysctl support' CONFIG_SYSCTL
bool 'System V IPC' CONFIG_SYSVIPC
......@@ -139,6 +133,9 @@ if [ "$CONFIG_NET" = "y" ]; then
bool 'Network device support' CONFIG_NETDEVICES
if [ "$CONFIG_NETDEVICES" = "y" ]; then
source drivers/net/Config.in
if [ "$CONFIG_ATM" = "y" ]; then
source drivers/atm/Config.in
fi
fi
endmenu
fi
......
......@@ -170,6 +170,9 @@ if [ "$CONFIG_NET" = "y" ]; then
# bool 'FDDI driver support' CONFIG_FDDI
# if [ "$CONFIG_FDDI" = "y" ]; then
# fi
if [ "$CONFIG_ATM" = "y" ]; then
source drivers/atm/Config.in
fi
fi
endmenu
fi
......
......@@ -50,9 +50,6 @@ source drivers/sbus/char/Config.in
source drivers/sbus/audio/Config.in
tristate 'Openprom tree appears in /proc/openprom (EXPERIMENTAL)' CONFIG_SUN_OPENPROMFS
if [ "$CONFIG_PCI" = "y" ]; then
bool 'Backward-compatible /proc/pci' CONFIG_PCI_OLD_PROC
fi
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
......
......@@ -11,7 +11,7 @@ SUB_DIRS := block char net parport sound misc
MOD_SUB_DIRS := $(SUB_DIRS)
ALL_SUB_DIRS := $(SUB_DIRS) pci sgi scsi sbus cdrom isdn pnp i2o \
macintosh video dio zorro fc4 usb \
nubus tc ap1000
nubus tc ap1000 atm
ifdef CONFIG_DIO
SUB_DIRS += dio
......@@ -106,6 +106,11 @@ else
endif
endif
ifdef CONFIG_ATM
SUB_DIRS += atm
MOD_SUB_DIRS += atm
endif
ifeq ($(CONFIG_AP1000),y)
SUB_DIRS += ap1000
ALL_SUB_DIRS += ap1000
......
#
# ATM device configuration
#
comment 'ATM drivers'
if [ "$CONFIG_INET" = "y" ]; then
tristate 'ATM over TCP' CONFIG_ATM_TCP y
fi
if [ "$CONFIG_PCI" = "y" ]; then
tristate 'Efficient Networks ENI155P' CONFIG_ATM_ENI y
if [ ! "$CONFIG_ATM_ENI" = "n" ]; then
bool ' Enable extended debugging' CONFIG_ATM_ENI_DEBUG n
bool ' Fine-tune burst settings' CONFIG_ATM_ENI_TUNE_BURST n
if [ "$CONFIG_ATM_ENI_TUNE_BURST" = "y" ]; then
bool ' Enable 16W TX bursts (discouraged)' CONFIG_ATM_ENI_BURST_TX_16W n
bool ' Enable 8W TX bursts (recommended)' CONFIG_ATM_ENI_BURST_TX_8W y
bool ' Enable 4W TX bursts (optional)' CONFIG_ATM_ENI_BURST_TX_4W n
bool ' Enable 2W TX bursts (optional)' CONFIG_ATM_ENI_BURST_TX_2W n
bool ' Enable 16W RX bursts (discouraged)' CONFIG_ATM_ENI_BURST_RX_16W n
bool ' Enable 8W RX bursts (discouraged)' CONFIG_ATM_ENI_BURST_RX_8W n
bool ' Enable 4W RX bursts (recommended)' CONFIG_ATM_ENI_BURST_RX_4W y
bool ' Enable 2W RX bursts (optional)' CONFIG_ATM_ENI_BURST_RX_2W n
fi
fi
tristate 'ZeitNet ZN1221/ZN1225' CONFIG_ATM_ZATM y
if [ ! "$CONFIG_ATM_ZATM" = "n" ]; then
bool ' Enable extended debugging' CONFIG_ATM_ZATM_DEBUG n
bool ' Enable usec resolution timestamps' CONFIG_ATM_ZATM_EXACT_TS y
fi
# bool 'Rolfs TI TNETA1570' CONFIG_ATM_TNETA1570 y
# if [ "$CONFIG_ATM_TNETA1570" = "y" ]; then
# bool ' Enable extended debugging' CONFIG_ATM_TNETA1570_DEBUG n
# fi
tristate 'IDT 77201 (NICStAR)' CONFIG_ATM_NICSTAR
if [ "$CONFIG_ATM_NICSTAR" != "n" ]; then
bool ' Use suni PHY driver' CONFIG_ATM_NICSTAR_USE_SUNI
fi
tristate 'Madge Ambassador (Collage PCI 155 Server)' CONFIG_ATM_AMBASSADOR
if [ "$CONFIG_ATM_AMBASSADOR" != "n" ]; then
bool ' Enable debugging messages' CONFIG_ATM_AMBASSADOR_DEBUG
fi
tristate 'Madge Horizon [Ultra] (Collage PCI 25 and Collage PCI 155 Client)' CONFIG_ATM_HORIZON y
if [ "$CONFIG_ATM_HORIZON" != "n" ]; then
bool ' Enable debugging messages' CONFIG_ATM_HORIZON_DEBUG
fi
fi
# File: drivers/atm/Makefile
#
# Makefile for the Linux network (ATM) device drivers.
#
L_TARGET := atm.a
L_OBJS := atmdev_init.o
M_OBJS :=
MOD_LIST_NAME := ATM_MODULES
include ../../.config
ifeq ($(CONFIG_ATM_ENI),y)
L_OBJS += eni.o
LX_OBJS += suni.o
else
ifeq ($(CONFIG_ATM_ENI),m)
M_OBJS += eni.o
MX_OBJS += suni.o
endif
endif
ifeq ($(CONFIG_ATM_ZATM),y)
L_OBJS += zatm.o uPD98402.o
else
ifeq ($(CONFIG_ATM_ZATM),m)
M_OBJS += zatm.o uPD98402.o
endif
endif
ifeq ($(CONFIG_ATM_TNETA1570),y)
L_OBJS += tneta1570.o suni.o
endif
ifeq ($(CONFIG_ATM_FORE200),y)
L_OBJS += fore200.o
endif
ifeq ($(CONFIG_ATM_NICSTAR),y)
L_OBJS += nicstar.o
ifeq ($(CONFIG_ATM_NICSTAR_USE_SUNI),y)
LX_OBJS += suni.o
endif
else
ifeq ($(CONFIG_ATM_NICSTAR),m)
M_OBJS += nicstar.o
ifeq ($(CONFIG_ATM_NICSTAR_USE_SUNI),y)
MX_OBJS += suni.o
endif
endif
endif
ifeq ($(CONFIG_ATM_HORIZON),y)
L_OBJS += horizon.o
else
ifeq ($(CONFIG_ATM_HORIZON),m)
M_OBJS += horizon.o
endif
endif
ifeq ($(CONFIG_ATM_AMBASSADOR),y)
L_OBJS += ambassador.o
else
ifeq ($(CONFIG_ATM_AMBASSADOR),m)
M_OBJS += ambassador.o
endif
endif
ifeq ($(CONFIG_ATM_TCP),y)
L_OBJS += atmtcp.o
else
ifeq ($(CONFIG_ATM_TCP),m)
M_OBJS += atmtcp.o
endif
endif
EXTRA_CFLAGS=-g
include $(TOPDIR)/Rules.make
This diff is collapsed.
This diff is collapsed.
/* drivers/atm/atmdev_init.c - ATM device driver initialization */
/* Written 1995-1997 by Werner Almesberger, EPFL LRC */
#include <linux/config.h>
#include <linux/init.h>
#ifdef CONFIG_ATM_ENI
extern int eni_detect(void);
#endif
#ifdef CONFIG_ATM_ZATM
extern int zatm_detect(void);
#endif
#ifdef CONFIG_ATM_TNETA1570
extern int tneta1570_detect(void);
#endif
#ifdef CONFIG_ATM_FORE200
extern int fore200_detect(void);
#endif
#ifdef CONFIG_ATM_NICSTAR
extern int nicstar_detect(void);
#endif
#ifdef CONFIG_ATM_AMBASSADOR
extern int amb_detect(void);
#endif
#ifdef CONFIG_ATM_HORIZON
extern int hrz_detect(void);
#endif
__initfunc(int atmdev_init(void))
{
int devs;
devs = 0;
#ifdef CONFIG_ATM_ENI
devs += eni_detect();
#endif
#ifdef CONFIG_ATM_ZATM
devs += zatm_detect();
#endif
#ifdef CONFIG_ATM_TNETA1570
devs += tneta1570_detect();
#endif
#ifdef CONFIG_ATM_FORE200
devs += fore200_detect();
#endif
#ifdef CONFIG_ATM_NICSTAR
devs += nicstar_detect();
#endif
#ifdef CONFIG_ATM_AMBASSADOR
devs += amb_detect();
#endif
#ifdef CONFIG_ATM_HORIZON
devs += hrz_detect();
#endif
return devs;
}
This diff is collapsed.
{ 0x00000080, 993, },
{ 0xa0d0d500, 80, },
{ 0xa0d0f000, 978, },
/* drivers/atm/atmtcp.c - ATM over TCP "device" driver */
/* Written 1997,1998 by Werner Almesberger, EPFL LRC/ICA */
#include <linux/module.h>
#include <linux/atmdev.h>
#include <linux/atm_tcp.h>
#include <asm/uaccess.h>
#include "../../net/atm/tunable.h" /* @@@ fix this */
#include "../../net/atm/protocols.h" /* @@@ fix this */
#define PRIV(dev) ((struct atmtcp_dev_data *) ((dev)->dev_data))
struct atmtcp_dev_data {
struct atm_vcc *vcc; /* control VCC; NULL if detached */
int persist; /* non-zero if persistent */
};
#define DEV_LABEL "atmtcp"
#define MAX_VPI_BITS 8 /* simplifies life */
#define MAX_VCI_BITS 16
static void atmtcp_v_dev_close(struct atm_dev *dev)
{
MOD_DEC_USE_COUNT;
}
static int atmtcp_v_open(struct atm_vcc *vcc,short vpi,int vci)
{
int error;
error = atm_find_ci(vcc,&vpi,&vci);
if (error) return error;
vcc->vpi = vpi;
vcc->vci = vci;
if (vpi == ATM_VPI_UNSPEC || vci == ATM_VCI_UNSPEC) return 0;
vcc->flags |= ATM_VF_ADDR | ATM_VF_READY;
return 0;
}
static void atmtcp_v_close(struct atm_vcc *vcc)
{
vcc->flags &= ~(ATM_VF_READY | ATM_VF_ADDR);
}
static int atmtcp_v_ioctl(struct atm_dev *dev,unsigned int cmd,void *arg)
{
struct atm_cirange ci;
struct atm_vcc *vcc;
if (cmd != ATM_SETCIRANGE) return -EINVAL;
if (copy_from_user(&ci,(void *) arg,sizeof(ci))) return -EFAULT;
if (ci.vpi_bits == ATM_CI_MAX) ci.vpi_bits = MAX_VPI_BITS;
if (ci.vci_bits == ATM_CI_MAX) ci.vci_bits = MAX_VCI_BITS;
if (ci.vpi_bits > MAX_VPI_BITS || ci.vpi_bits < 0 ||
ci.vci_bits > MAX_VCI_BITS || ci.vci_bits < 0) return -EINVAL;
for (vcc = dev->vccs; vcc; vcc = vcc->next)
if ((vcc->vpi >> ci.vpi_bits) ||
(vcc->vci >> ci.vci_bits)) return -EBUSY;
dev->ci_range = ci;
return 0;
}
static int atmtcp_v_send(struct atm_vcc *vcc,struct sk_buff *skb)
{
struct atmtcp_dev_data *dev_data;
struct atm_vcc *out_vcc;
struct sk_buff *new_skb;
struct atmtcp_hdr *hdr;
int size;
dev_data = PRIV(vcc->dev);
if (dev_data) out_vcc = dev_data->vcc;
if (!dev_data || !out_vcc) {
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
if (dev_data) return 0;
vcc->stats->tx_err++;
return -ENOLINK;
}
size = skb->len+sizeof(struct atmtcp_hdr);
if (!atm_charge(out_vcc,atm_pdu2truesize(size))) new_skb = NULL;
else {
new_skb = alloc_skb(size,GFP_ATOMIC);
if (!new_skb)
atm_return(out_vcc,atm_pdu2truesize(size));
}
if (!new_skb) {
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
vcc->stats->tx_err++;
return -ENOBUFS;
}
hdr = (void *) skb_put(new_skb,sizeof(struct atmtcp_hdr));
hdr->vpi = htons(vcc->vpi);
hdr->vci = htons(vcc->vci);
hdr->length = htonl(skb->len);
memcpy(skb_put(new_skb,skb->len),skb->data,skb->len);
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
out_vcc->push(out_vcc,new_skb);
return 0;
}
static int atmtcp_v_proc(struct atm_dev *dev,loff_t *pos,char *page)
{
struct atmtcp_dev_data *dev_data = PRIV(dev);
if (*pos) return 0;
if (!dev_data->persist) return sprintf(page,"ephemeral\n");
return sprintf(page,"persistent, %sconnected\n",
dev_data->vcc ? "" : "dis");
}
static void atmtcp_c_close(struct atm_vcc *vcc)
{
struct atm_dev *atmtcp_dev;
struct atmtcp_dev_data *dev_data;
atmtcp_dev = (struct atm_dev *) vcc->dev_data;
dev_data = PRIV(atmtcp_dev);
dev_data->vcc = NULL;
if (dev_data->persist) return;
kfree(dev_data);
shutdown_atm_dev(atmtcp_dev);
vcc->dev_data = NULL;
}
static int atmtcp_c_send(struct atm_vcc *vcc,struct sk_buff *skb)
{
struct atm_dev *dev;
struct atmtcp_hdr *hdr;
struct atm_vcc *out_vcc;
struct sk_buff *new_skb;
if (!skb->len) return 0;
dev = vcc->dev_data;
hdr = (void *) skb->data;
for (out_vcc = dev->vccs; out_vcc; out_vcc = out_vcc->next)
if (out_vcc->vpi == ntohs(hdr->vpi) &&
out_vcc->vci == ntohs(hdr->vci) &&
out_vcc->qos.rxtp.traffic_class != ATM_NONE)
break;
if (!out_vcc) {
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
vcc->stats->tx_err++;
return 0;
}
skb_pull(skb,sizeof(struct atmtcp_hdr));
if (!atm_charge(out_vcc,atm_pdu2truesize(skb->len))) new_skb = NULL;
else {
new_skb = alloc_skb(skb->len,GFP_KERNEL);
if (!new_skb) atm_return(out_vcc,atm_pdu2truesize(skb->len));
}
if (!new_skb) {
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
return -ENOBUFS;
}
memcpy(skb_put(new_skb,skb->len),skb->data,skb->len);
if (vcc->pop) vcc->pop(vcc,skb);
else dev_kfree_skb(skb);
out_vcc->push(out_vcc,new_skb);
return 0;
}
/*
* Device operations for the virtual ATM devices created by ATMTCP.
*/
static struct atmdev_ops atmtcp_v_dev_ops = {
atmtcp_v_dev_close,
atmtcp_v_open,
atmtcp_v_close,
atmtcp_v_ioctl,
NULL, /* no getsockopt */
NULL, /* no setsockopt */
atmtcp_v_send,
NULL, /* no direct writes */
NULL, /* no send_oam */
NULL, /* no phy_put */
NULL, /* no phy_get */
NULL, /* no feedback */
NULL, /* no change_qos */
NULL, /* no free_rx_skb */
atmtcp_v_proc /* proc_read */
};
/*
* Device operations for the ATMTCP control device.
*/
static struct atmdev_ops atmtcp_c_dev_ops = {
NULL, /* no dev_close */
NULL, /* no open */
atmtcp_c_close,
NULL, /* no ioctl */
NULL, /* no getsockopt */
NULL, /* no setsockopt */
atmtcp_c_send,
NULL, /* no sg_send */
NULL, /* no send_oam */
NULL, /* no phy_put */
NULL, /* no phy_get */
NULL, /* no feedback */
NULL, /* no change_qos */
NULL, /* no free_rx_skb */
NULL /* no proc_read */
};
static struct atm_dev atmtcp_control_dev = {
&atmtcp_c_dev_ops,
NULL, /* no PHY */
"atmtcp", /* type */
999, /* dummy device number */
NULL,NULL, /* pretend not to have any VCCs */
NULL,NULL, /* no data */
0, /* no flags */
NULL, /* no local address */
{ 0 } /* no ESI, no statistics */
};
static int atmtcp_create(int itf,int persist,struct atm_dev **result)
{
struct atmtcp_dev_data *dev_data;
struct atm_dev *dev;
dev_data = kmalloc(sizeof(*dev_data),GFP_KERNEL);
if (!dev_data) return -ENOMEM;
dev = atm_dev_register(DEV_LABEL,&atmtcp_v_dev_ops,itf,0);
if (!dev) {
kfree(dev_data);
return itf == -1 ? -ENOMEM : -EBUSY;
}
MOD_INC_USE_COUNT;
dev->ci_range.vpi_bits = MAX_VPI_BITS;
dev->ci_range.vci_bits = MAX_VCI_BITS;
PRIV(dev) = dev_data;
PRIV(dev)->vcc = NULL;
PRIV(dev)->persist = persist;
if (result) *result = dev;
return 0;
}
int atmtcp_attach(struct atm_vcc *vcc,int itf)
{
struct atm_dev *dev;
dev = NULL;
if (itf != -1) dev = atm_find_dev(itf);
if (dev) {
if (dev->ops != &atmtcp_v_dev_ops) return -EMEDIUMTYPE;
if (PRIV(dev)->vcc) return -EBUSY;
}
else {
int error;
error = atmtcp_create(itf,0,&dev);
if (error) return error;
}
PRIV(dev)->vcc = vcc;
bind_vcc(vcc,&atmtcp_control_dev);
vcc->flags |= ATM_VF_READY | ATM_VF_META;
vcc->dev_data = dev;
(void) atm_init_aal5(vcc); /* @@@ losing AAL in transit ... */
vcc->stats = &atmtcp_control_dev.stats.aal5;
return dev->number;
}
int atmtcp_create_persistent(int itf)
{
return atmtcp_create(itf,1,NULL);
}
int atmtcp_remove_persistent(int itf)
{
struct atm_dev *dev;
struct atmtcp_dev_data *dev_data;
dev = atm_find_dev(itf);
if (!dev) return -ENODEV;
if (dev->ops != &atmtcp_v_dev_ops) return -EMEDIUMTYPE;
dev_data = PRIV(dev);
if (!dev_data->persist) return 0;
dev_data->persist = 0;
if (PRIV(dev)->vcc) return 0;
kfree(dev_data);
shutdown_atm_dev(dev);
return 0;
}
#ifdef MODULE
int init_module(void)
{
atm_tcp_ops.attach = atmtcp_attach;
atm_tcp_ops.create_persistent = atmtcp_create_persistent;
atm_tcp_ops.remove_persistent = atmtcp_remove_persistent;
return 0;
}
void cleanup_module(void)
{
}
#else
struct atm_tcp_ops atm_tcp_ops = {
atmtcp_attach, /* attach */
atmtcp_create_persistent, /* create_persistent */
atmtcp_remove_persistent /* remove_persistent */
};
#endif
This diff is collapsed.
/* drivers/atm/eni.h - Efficient Networks ENI155P device driver declarations */
/* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
#ifndef DRIVER_ATM_ENI_H
#define DRIVER_ATM_ENI_H
#include <linux/atm.h>
#include <linux/atmdev.h>
#include <linux/sonet.h>
#include <linux/skbuff.h>
#include <linux/time.h>
#include <linux/pci.h>
#include "midway.h"
#define KERNEL_OFFSET 0xC0000000 /* kernel 0x0 is at phys 0xC0000000 */
#define DEV_LABEL "eni"
#define UBR_BUFFER (128*1024) /* UBR buffer size */
#define RX_DMA_BUF 8 /* burst and skip a few things */
#define TX_DMA_BUF 100 /* should be enough for 64 kB */
struct eni_free {
unsigned long start; /* counting in bytes */
int order;
};
struct eni_tx {
unsigned long send; /* base, 0 if unused */
int prescaler; /* shaping prescaler */
int resolution; /* shaping divider */
unsigned long tx_pos; /* current TX write position */
unsigned long words; /* size of TX queue */
int index; /* TX channel number */
int reserved; /* reserved peak cell rate */
int shaping; /* shaped peak cell rate */
struct sk_buff_head backlog; /* queue of waiting TX buffers */
};
struct eni_vcc {
int (*rx)(struct atm_vcc *vcc); /* RX function, NULL if none */
unsigned long recv; /* receive buffer */
unsigned long words; /* its size in words */
unsigned long descr; /* next descriptor (RX) */
unsigned long rx_pos; /* current RX descriptor pos */
struct eni_tx *tx; /* TXer, NULL if none */
int rxing; /* number of pending PDUs */
int servicing; /* number of waiting VCs (0 or 1) */
int txing; /* number of pending TX cells/PDUs */
struct timeval timestamp; /* for RX timing */
struct atm_vcc *next; /* next pending RX */
struct sk_buff *last; /* last PDU being DMAed (used to carry
discard information) */
};
struct eni_dev {
/*-------------------------------- base pointers into Midway address
space */
unsigned long phy; /* PHY interface chip registers */
unsigned long reg; /* register base */
unsigned long ram; /* RAM base */
unsigned long vci; /* VCI table */
unsigned long rx_dma; /* RX DMA queue */
unsigned long tx_dma; /* TX DMA queue */
unsigned long service; /* service list */
/*-------------------------------- TX part */
struct eni_tx tx[NR_CHAN]; /* TX channels */
struct eni_tx *ubr; /* UBR channel */
struct sk_buff_head tx_queue; /* PDUs currently being TX DMAed*/
wait_queue_head_t tx_wait; /* for close */
int tx_bw; /* remaining bandwidth */
u32 dma[TX_DMA_BUF*2]; /* DMA request scratch area */
/*-------------------------------- RX part */
u32 serv_read; /* host service read index */
struct atm_vcc *fast,*last_fast;/* queues of VCCs with pending PDUs */
struct atm_vcc *slow,*last_slow;
struct atm_vcc **rx_map; /* for fast lookups */
struct sk_buff_head rx_queue; /* PDUs currently being RX-DMAed */
wait_queue_head_t rx_wait; /* for close */
/*-------------------------------- statistics */
unsigned long lost; /* number of lost cells (RX) */
/*-------------------------------- memory management */
unsigned long base_diff; /* virtual-real base address */
int free_len; /* free list length */
struct eni_free *free_list; /* free list */
int free_list_size; /* maximum size of free list */
/*-------------------------------- ENI links */
struct atm_dev *more; /* other ENI devices */
/*-------------------------------- general information */
int mem; /* RAM on board (in bytes) */
int asic; /* PCI interface type, 0 for FPGA */
unsigned char irq; /* IRQ */
struct pci_dev *pci_dev; /* PCI stuff */
};
#define ENI_DEV(d) ((struct eni_dev *) (d)->dev_data)
#define ENI_VCC(d) ((struct eni_vcc *) (d)->dev_data)
struct eni_skb_prv {
struct atm_skb_data _; /* reserved */
unsigned long pos; /* position of next descriptor */
int size; /* PDU size in reassembly buffer */
};
#define ENI_PRV_SIZE(skb) (((struct eni_skb_prv *) (skb)->cb)->size)
#define ENI_PRV_POS(skb) (((struct eni_skb_prv *) (skb)->cb)->pos)
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* nicstar.c v0.22 Jawaid Bazyar (bazyar@hypermall.com)
* nicstar.c, M. Welsh (matt.welsh@cl.cam.ac.uk)
*
* Hacked October, 1997 by Jawaid Bazyar, Interlink Advertising Services Inc.
* http://www.hypermall.com/
* 10/1/97 - commented out CFG_PHYIE bit - we don't care when the PHY
* interrupts us (except possibly for removal/insertion of the cable?)
* 10/4/97 - began heavy inline documentation of the code. Corrected typos
* and spelling mistakes.
* 10/5/97 - added code to handle PHY interrupts, disable PHY on
* loss of link, and correctly re-enable PHY when link is
* re-established. (put back CFG_PHYIE)
*
* Modified to work with the IDT7721 nicstar -- AAL5 (tested) only.
*
* R. D. Rechenmacher <ron@fnal.gov>, Aug. 6, 1997 $Revision: 1.1 $ $Date: 1999/08/20 11:00:11 $
*
* Linux driver for the IDT77201 NICStAR PCI ATM controller.
* PHY component is expected to be 155 Mbps S/UNI-Lite or IDT 77155;
* see init_nicstar() for PHY initialization to change this. This driver
* expects the Linux ATM stack to support scatter-gather lists
* (skb->atm.iovcnt != 0) for Rx skb's passed to vcc->push.
*
* Implementing minimal-copy of received data:
* IDT always receives data into a small buffer, then large buffers
* as needed. This means that data must always be copied to create
* the linear buffer needed by most non-ATM protocol stacks (e.g. IP)
* Fix is simple: make large buffers large enough to hold entire
* SDU, and leave <small_buffer_data> bytes empty at the start. Then
* copy small buffer contents to head of large buffer.
* Trick is to avoid fragmenting Linux, due to need for a lot of large
* buffers. This is done by 2 things:
* 1) skb->destructor / skb->atm.recycle_buffer
* combined, allow nicstar_free_rx_skb to be called to
* recycle large data buffers
* 2) skb_clone of received buffers
* See nicstar_free_rx_skb and linearize_buffer for implementation
* details.
*
*
*
* Copyright (c) 1996 University of Cambridge Computer Laboratory
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* M. Welsh, 6 July 1996
*
*
*/
/******************************************************************************
*
* nicstarmac.h
*
* Header file for nicstarmac.c
*
******************************************************************************/
typedef unsigned int virt_addr_t;
u_int32_t nicstar_read_eprom_status( virt_addr_t base );
void nicstar_init_eprom( virt_addr_t base );
void nicstar_read_eprom( virt_addr_t, u_int8_t, u_int8_t *, u_int32_t);
This diff is collapsed.
This diff is collapsed.
/* drivers/atm/tonga.h - Efficient Networks Tonga (PCI bridge) declarations */
/* Written 1995 by Werner Almesberger, EPFL LRC */
#ifndef DRIVER_ATM_TONGA_H
#define DRIVER_ATM_TONGA_H
#define PCI_TONGA_CTRL 0x60 /* control register */
#define END_SWAP_DMA 0x80 /* endian swap on DMA */
#define END_SWAP_BYTE 0x40 /* endian swap on slave byte accesses */
#define END_SWAP_WORD 0x20 /* endian swap on slave word accesses */
#define SEPROM_MAGIC 0x0c /* obscure required pattern (ASIC only) */
#define SEPROM_DATA 0x02 /* serial EEPROM data (ASIC only) */
#define SEPROM_CLK 0x01 /* serial EEPROM clock (ASIC only) */
#define SEPROM_ESI_BASE 64 /* start of ESI in serial EEPROM */
#endif
This diff is collapsed.
This diff is collapsed.
/* drivers/atm/uPD98402.h - NEC uPD98402 (PHY) declarations */
/* Written 1995 by Werner Almesberger, EPFL LRC */
#ifndef DRIVERS_ATM_uPD98402_H
#define DRIVERS_ATM_uPD98402_H
/*
* Registers
*/
#define uPD98402_CMR 0x00 /* Command Register */
#define uPD98402_MDR 0x01 /* Mode Register */
#define uPD98402_PICR 0x02 /* PHY Interrupt Cause Register */
#define uPD98402_PIMR 0x03 /* PHY Interrupt Mask Register */
#define uPD98402_ACR 0x04 /* Alarm Cause Register */
#define uPD98402_ACMR 0x05 /* Alarm Cause Mask Register */
#define uPD98402_PCR 0x06 /* Performance Cause Register */
#define uPD98402_PCMR 0x07 /* Performance Cause Mask Register */
#define uPD98402_IACM 0x08 /* Internal Alarm Cause Mask Register */
#define uPD98402_B1ECT 0x09 /* B1 Error Count Register */
#define uPD98402_B2ECT 0x0a /* B2 Error Count Register */
#define uPD98402_B3ECT 0x0b /* B3 Error Count Regster */
#define uPD98402_PFECB 0x0c /* Path FEBE Count Register */
#define uPD98402_LECCT 0x0d /* Line FEBE Count Register */
#define uPD98402_HECCT 0x0e /* HEC Error Count Register */
#define uPD98402_FJCT 0x0f /* Frequence Justification Count Reg */
#define uPD98402_PCOCR 0x10 /* Perf. Counter Overflow Cause Reg */
#define uPD98402_PCOMR 0x11 /* Perf. Counter Overflow Mask Reg */
#define uPD98402_C11T 0x20 /* C11T Data Register */
#define uPD98402_C12T 0x21 /* C12T Data Register */
#define uPD98402_C13T 0x22 /* C13T Data Register */
#define uPD98402_F1T 0x23 /* F1T Data Register */
#define uPD98402_K2T 0x25 /* K2T Data Register */
#define uPD98402_C2T 0x26 /* C2T Data Register */
#define uPD98402_F2T 0x27 /* F2T Data Register */
#define uPD98402_C11R 0x30 /* C11T Data Register */
#define uPD98402_C12R 0x31 /* C12T Data Register */
#define uPD98402_C13R 0x32 /* C13T Data Register */
#define uPD98402_F1R 0x33 /* F1T Data Register */
#define uPD98402_K2R 0x35 /* K2T Data Register */
#define uPD98402_C2R 0x36 /* C2T Data Register */
#define uPD98402_F2R 0x37 /* F2T Data Register */
/* CMR is at 0x00 */
#define uPD98402_CMR_PFRF 0x01 /* Send path FERF */
#define uPD98402_CMR_LFRF 0x02 /* Send line FERF */
#define uPD98402_CMR_PAIS 0x04 /* Send path AIS */
#define uPD98402_CMR_LAIS 0x08 /* Send line AIS */
/* MDR is at 0x01 */
#define uPD98402_MDR_ALP 0x01 /* ATM layer loopback */
#define uPD98402_MDR_TPLP 0x02 /* PMD loopback, to host */
#define uPD98402_MDR_RPLP 0x04 /* PMD loopback, to network */
#define uPD98402_MDR_SS0 0x08 /* SS0 */
#define uPD98402_MDR_SS1 0x10 /* SS1 */
#define uPD98402_MDR_SS_MASK 0x18 /* mask */
#define uPD98402_MDR_SS_SHIFT 3 /* shift */
#define uPD98402_MDR_HEC 0x20 /* disable HEC inbound processing */
#define uPD98402_MDR_FSR 0x40 /* disable frame scrambler */
#define uPD98402_MDR_CSR 0x80 /* disable cell scrambler */
/* PICR is at 0x02, PIMR is at 0x03 */
#define uPD98402_INT_PFM 0x01 /* performance counter has changed */
#define uPD98402_INT_ALM 0x02 /* line fault */
#define uPD98402_INT_RFO 0x04 /* receive FIFO overflow */
#define uPD98402_INT_PCO 0x08 /* performance counter overflow */
#define uPD98402_INT_OTD 0x20 /* OTD has occurred */
#define uPD98402_INT_LOS 0x40 /* Loss Of Signal */
#define uPD98402_INT_LOF 0x80 /* Loss Of Frame */
/* ACR is as 0x04, ACMR is at 0x05 */
#define uPD98402_ALM_PFRF 0x01 /* path FERF */
#define uPD98402_ALM_LFRF 0x02 /* line FERF */
#define uPD98402_ALM_PAIS 0x04 /* path AIS */
#define uPD98402_ALM_LAIS 0x08 /* line AIS */
#define uPD98402_ALM_LOD 0x10 /* loss of delineation */
#define uPD98402_ALM_LOP 0x20 /* loss of pointer */
#define uPD98402_ALM_OOF 0x40 /* out of frame */
/* PCR is at 0x06, PCMR is at 0x07 */
#define uPD98402_PFM_PFEB 0x01 /* path FEBE */
#define uPD98402_PFM_LFEB 0x02 /* line FEBE */
#define uPD98402_PFM_B3E 0x04 /* B3 error */
#define uPD98402_PFM_B2E 0x08 /* B2 error */
#define uPD98402_PFM_B1E 0x10 /* B1 error */
#define uPD98402_PFM_FJ 0x20 /* frequency justification */
/* IACM is at 0x08 */
#define uPD98402_IACM_PFRF 0x01 /* don't generate path FERF */
#define uPD98402_IACM_LFRF 0x02 /* don't generate line FERF */
/* PCOCR is at 0x010, PCOMR is at 0x11 */
#define uPD98402_PCO_B1EC 0x01 /* B1ECT overflow */
#define uPD98402_PCO_B2EC 0x02 /* B2ECT overflow */
#define uPD98402_PCO_B3EC 0x04 /* B3ECT overflow */
#define uPD98402_PCO_PFBC 0x08 /* PFEBC overflow */
#define uPD98402_PCO_LFBC 0x10 /* LFEVC overflow */
#define uPD98402_PCO_HECC 0x20 /* HECCT overflow */
#define uPD98402_PCO_FJC 0x40 /* FJCT overflow */
int uPD98402_init(struct atm_dev *dev);
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -22,6 +22,7 @@ extern int scsi_dev_init(void);
extern int net_dev_init(void);
extern void console_map_init(void);
extern int soc_probe(void);
extern int atmdev_init(void);
void __init device_init(void)
{
......@@ -51,6 +52,9 @@ void __init device_init(void)
#ifdef CONFIG_INET
net_dev_init();
#endif
#ifdef CONFIG_ATM
(void) atmdev_init();
#endif
#ifdef CONFIG_VT
console_map_init();
#endif
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
all: ip2mkdev ip2trace ip2stat
ip2mkdev: ip2mkdev.c
cc -o ip2mkdev ip2mkdev.c
ip2trace: ip2trace.c
cc -o ip2trace ip2trace.c
ip2stat: ip2stat.c
cc -o ip2stat ip2stat.c
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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