Commit 21d0c0d1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Import 2.3.4pre2

parent c8f52932
......@@ -3110,6 +3110,44 @@ CONFIG_SPX
The module will be called af_spx.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
 
DECnet networking
CONFIG_DECNET
The DECnet networking protocol was used in many products made by
Digital (now Compaq). It provides reliable stream and sequenced
packet communications over which run a variety of services similar
to those which run over TCP/IP.
To find some tools to use with the kernel layer support, please
look at Patrick Caulfield's web site:
http://linux.dreamtime.org/decnet/
More detailed documentation is available in the
Documentation/networking/decnet.txt file.
Be sure to turn on the CONFIG_PROCFS and CONFIG_SYSCTL options
when using DECnet, since you will need sysctl support to aid in
configuration at run time.
DECnet SIOCFIGCONF support
CONFIG_DECNET_SIOCGIFCONF
This option should only be turned on if you are really sure that
you know what you are doing. It can break other applications which
use this system call and the proper way to get the information
provided by this call is to use rtnetlink.
DECnet Router Support
CONFIG_DECNET_ROUTER
Add support for turning your DECnet Endnode into a level 1 or 2
router. This is an unfinished option for developers only. If you
do turn it on, then make sure you also have rtnetlink configured
in, since thats the only current method of configuration.
DECnet Raw Socket Support
CONFIG_DECNET_RAW
Add support for the SOCK_RAW type under DECnet. Used by userland
routing programs to receive routing messages from the kernel and
also as a general debugging aid to see whats going on "under the hood".
AppleTalk DDP
CONFIG_ATALK
AppleTalk is the way Apple computers speak to each other on a
......@@ -7525,6 +7563,18 @@ CONFIG_UFS_FS_WRITE
Say Y here if you want to try writing to UFS partitions. This is
experimental, so you should back up your UFS partitions beforehand.
 
EFS filesystem support (experimental)
CONFIG_EFS_FS
EFS is the filesystem used for CDROMs and filesystems by SGI's IRIX.
This implementation only offers read-only access. If you don't know
what all this is about, it's safe to say N. For more information
about EFS see its homepage at http://aeschi.ch.eu.org/efs/.
SGI disklabel support
CONFIG_SGI_DISKLABEL
Say Y to this only if you plan on mounting disks with SGI disklabels.
This is not required to mount EFS-format CDROMs.
BSD disklabel (FreeBSD partition tables) support
CONFIG_BSD_DISKLABEL
FreeBSD uses its own hard disk partition scheme on your PC. It
......@@ -11560,6 +11610,64 @@ CONFIG_BVME6000_SCC
boards from BVM Ltd. Everyone using one of these boards should say
Y here.
 
Universal Serial Bus (USB) Support (Experimental)
CONFIG_USB
This will enable support for the Universal Serial Bus (USB). USB
allows you to connect up to 127 external devices such as keyboards,
mice, printers and modems to your computer through a USB connector.
This code can also be built as a module (i.e. code outside the
kernel that can be added and removed at runtime), consult
Documentation/modules.txt for more information.
UHCI (intel PIIX4 and others) support
CONFIG_USB_UHCI
The UHCI is the USB host controller for many computers, and is built
into all recent boards with intel PCI chipsets. This driver is
needed for these motherboards to support USB.
OHCI (compaq and some others) support
CONFIG_USB_OHCI
The OHCI (Open Host Controller Interface) is the USB host controller
on most non-Intel architectures, several USB-adding PCI cards, and
is on several x86 compatibles with non-Intel chipsets. This driver
is needed for these motherboards to support USB. There is presently
two OHCI drivers in development. Say 'N' here if you would like to
compile the other OHCI driver into the linux kernel.
OHCI-HCD (other OHCI opt. Virt. Root Hub) support
CONFIG_USB_OHCI_HCD
The OHCI (Open Host Controller Interface) is the USB host controller
on most non-Intel architectures, several USB-adding PCI cards, and
is on several x86 compatibles with non-Intel chipsets. This driver
is needed for these motherboards to support USB. There is presently
two OHCI drivers in development.
USB hub support
CONFIG_USB_HUB
To expand beyond the USB ports on the computer, a device called a
hub is used. This driver supports hubs, allowing them to be used.
Say 'Y'
USB mouse support
CONFIG_USB_MOUSE
This driver allows mice to work under the USB stack. It currently
patches into /dev/ps2aux, although it does not require the ps2
mouse code to be included in the kernel as well.
USB keyboard support
CONFIG_USB_KBD
This driver allows usb keyboards to work under the USB stack.
USB audio parsing support (Preliminary)
CONFIG_USB_AUDIO
This driver will eventually handle audio devices, such
as USB speakers.
USB Abstract Control Model support (Preliminary)
CONFIG_USB_ACM
This driver allows for devices which support the Abstract Control Model,
including many USB-based modems, ISDN adapters, and network adapters.
#
# A couple of things I keep forgetting:
# capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet,
......
......@@ -27,3 +27,5 @@ Mount options unique to the isofs filesystem.
nojoliet Ignore Joliet extensions if they are present.
norock Ignore Rock Ridge extensions if they are present.
unhide Show hidden files.
session=x Select number of session on multisession CD
sbsector=xxx Session begins from sector xxx
--( Version: 11.10.1997 )--
TimRu-Erweiterungen:
====================
1. erfolglose Anwahlversuche per ICMP zurueckmelden
---------------------------------------------------
isdnctrl dialtimeout <name> <timeout>
name: Name des Interfaces
timeout: -1: kein Waehl-Timeout
0: jede Telefonnummer dialmax-mal probieren
>0: Zeitraum in Sekunden, in dem die Anwahl versucht wird
isdnctrl dialtimeout bewirkt, dass die Anwahl der Gegenstelle im Fehler-
fall nicht unbegrenzt versucht wird, sondern entweder nach einer bestimmten
Anzahl von Versuchen oder nach einem bestimmten Zeitraum abgebrochen wird
und alle ausstehenden Pakete fuer den durch isdnctrl dialwait bestimmten
Zeitraum mit ICMP_NET_UNREACHABLE beantwortet werden.
isdnctrl dialwait <name> <seconds>
name: Name des Interfaces
seconds: 0: keine Waehl-Unterdrueckung im Fehlerfall
>0: Zeit in Sekunden, in der nach einem erfolglosen Anwahl-
versuch Pakete mit ICMP_NET_UNREACHABLE beantwortet werden
1.1 einzelne Interfaces stoppen / starten
-----------------------------------------
isdnctrl status <name> <status>
name: Name des Interfaces
status: on: Interface einschalten
off: Interface ausschalten
Dieser Befehl wirkt wie 'isdnctrl system on/off' auf Interface-Ebene.
2. bessere Kontrolle ueber Aufbau und Hangup einer Verbindung
-------------------------------------------------------------
isdnctrl <cmd> <name> bringup <seconds> <rule>
isdnctrl <cmd> <name> keepup in <seconds> <rule>
isdnctrl <cmd> <name> keepup out <seconds> <rule>
isdnctrl <cmd> <name> keepup both <seconds> <rule>
cmd: addrule: Regel am Ende der Regelliste anfuegen
insrule: Regel am Anfang der Regelliste einfuegen
delrule: Regel loeschen
default: Was tun, wenn keine Regel passt?
showrules: alle Regeln anzeigen
flushrules: alle Regeln einer Art loeschen (bringup, ...)
flushallrules: alle Regeln loeschen
name: Name des Interfaces
seconds: Mindester Hangup-Timeout ab jetzt
rule: Regel, auf die ein Paket passen muss, damit die Verbindung
aufgebaut oder der Hangup-Timeout verlaengert wird
Eine passende Bringup-Regel erlaubt den Aufbau der Verbindung,
wenn ihr Timeout > 0 ist. Eine Bringup-Regel mit einen Timeout == 0
verhindert einen Verbindungsaufbau. Dieser Timeout muss eigentlich nur
so gross sein, dass die Verbindung zum Gegenrechner erfolgreich
zustande kommt, da das ausloesende Datenpaket danach durch die
Keepup-Logik 'geht' und der Hangup-Timeout erneut berechnet wird.
Eine passende Keepup-Regel verlaengert den Hangup-Timeout, wobei
nach eingehenden und ausgehenden Paketen unterschieden werden kann.
Die Kontrolle eines Paketes stoppt bei der ersten passenden Regel, falls
keine Regel anwendbar ist, gilt die Default-Regel.
Die Regeln haben folgenden Aufbau:
ip/icmp <src>/<mask> <type> <dst>/<mask>
ip/tcp <src>/<mask> <port> <dst>/<mask> <port>
ip/udp <src>/<mask> <port> <dst>/<mask> <port>
ip/* <src>/<mask> <dst>/<mask>
ip/any <src>/<mask> <dst>/<mask>
ipx/*
ipx/any
ppp/ipcp
ppp/ipxcp
ppp/ccp
ppp/lcp
ppp/chap
ppp/pap
ppp/lqr
ppp/*
ppp/any
*/*
any
src: Absender-Adresse des Paketes als Nummer oder Name
dst: Empfaenger-Adresse des Paketes als Nummer oder Name
mask: Subnet-Maske als Anzahl Bits oder als Maske
type: ICMP-Message-Type als Nummer
port: Portnummer als Nummer oder Name
Wildcards ('*', 'any') sind ueberall erlaubt.
Fuer <src> und <dst> gilt:
<host>: Host-Adresse als Nummer oder Name,
Subnet-Mask /32
<host>/<mask>: Host-Adresse als Nummer oder Name,
Subnet-Mask als Anzahl Bits oder Maske
<network>: Netzwerk-Adresse als Nummer oder Name,
Subnet-Mask /32
<network>/<mask>: Host-Adresse als Nummer oder Name,
Subnet-Mask als Anzahl Bits oder Maske
0.0.0.0/0
0/0
*
any: Wildcard, passt auf jede Adresse.
Fuer <ports> gilt:
<from>-<to>: alle Ports von <from> bis <to>, numerische Angabe
<from>-: alle Ports von <from> bis 65535, numerische Angabe
-<to>: alle Ports von 0 bis <to>, numerische Angabe
<port>: ein Port als Nummer oder Name
-, *
oder any: alle Ports
Beginnt die Regel mit einem '!' oder mit 'not', so dreht sich ihre Aussage um:
falls sie NICHT passt, wird die Verbindung aufgebaut, bzw. der
Hangup-Timeout verlaengert.
Default-Regeln werden folgendermassen angegeben:
isdnctrl default <name> bringup <timeout>
name: Name des Interfaces
timeout: 0: Verbindung wird nicht aufgebaut
>0: Verbindung wird aufgebaut, anfaenglicher Timeout
ist <timeout>.
isdnctrl default <name> keepup in <seconds>
isdnctrl default <name> keepup out <seconds>
isdnctrl default <name> keepup both <seconds>
name: Name des Interfaces
seconds: Mindester Hangup-Timeout
3. Budget-Erweiterungen
-----------------------
Diese Erweiterung erlaubt es, bestimmte 'Verbrauchswerte' pro
Zeitraum zu limitieren. Falls ein Budget aufgebraucht ist, findet
keine Anwahl mehr statt und eine bestehende Verbindung wird unterbrochen.
Sobald wieder alle Budgets verfuegbar sind, werden wieder Verbindungen
zugelassen.
Die Gebuehrenimpuls-Zaehlung setzt momentan auf der Uebertragung der
CINF-Pakete, also der Gebuehreninformation waehrend der Verbindung auf.
Unmittelbar nach Aufbau der Verbindung wird der erste Gebuehrenimpuls
'angenommen'.
Fuer ISDN-Anschluesse, bei denen die Gebuehren erst am Ende der Ver-
bindung uebertragen werden, faellt uns bestimmt auch noch was ein ;-).
isdnctrl budget <name> <budget-type> <amount> <period>
setzt die Werte eines bestimmten Budgets. Ein aufgebrauchtes
Budget wird unmittelbar wieder aktiviert.
budget-type: dial: Anzahl der Anwahlversuche (erfolgreich oder
erfolglos) pro Periode
charge: Anzahl der Gebuehreneinheiten pro Periode
online: Online-Zeit pro Periode
amount: Hoehe des Budgets. Bei <budget-type> 'dial' oder 'charge'
ist das die Anzahl Anwahlen oder Einheiten, bei 'online'
eine Zeitangabe (s.u.)
period: Dauer der Periode in folgendem Format (<n> steht fuer eine
natuerliche Zahl):
<n>
<n>s
<n>sec, <n> Sekunden
<n>m
<n>min, <n> Minuten
<n>h
<n>hour, <n> Stunden
<n>d
<n>day, <n> Tage
<n>w
<n>week, <n> Wochen (a 7 Tage)
<n>M
<n>month, <n> Monate (a 30 Tage)
<n>y
<n>year, <n> Jahre (a 365 Tage)
Diese Angaben koennen miteinander kombiniert werden, z.B.:
2h30m15
2hour,30min,15sec
1M2week,1day,8h
isdnctrl budget <name> <budget-type> off
schaltet die Kontrolle des entsprechenden Budgets aus
isdnctrl budget <name> showbudgets
zeigt die momentaten Budgets an
isdnctrl budget <name> savebudgets
gibt die momentaten Budgets in einen Format aus, das vom Befehl 'restore-
budgets' wieder eingelesen kann
isdnctrl budget <name> restorebudgets <saved-budget> ...
setzt die Budgets wieder auf die vorher mit 'savebudgets' ausgegebenen
Werte. Damit koennen Budgets auch ueber den Reboot der Maschine hinaus
Gueltigkeit haben.
Hier ein Beispiel fuer die TimRu-Erweiterung:
# Alle Regeln loeschen
isdnctrl flushallrules ippp0
# Default: jeder Datenverkehr setzt den Hangup-Timeout auf 60 Sek.
isdnctrl default ippp0 keepup both 60
# FTP und Telnet erhoehen den Timeout auf 5 Minuten
isdnctrl addrule ippp0 keepup both 300 ip/tcp 0/0 20-23 0/0 -
# Anzeige der Regeln:
isdnctrl showrules ippp0
# ... erzeugt folgende Ausgabe:
Timeout rules for interface ippp0:
Default bringup policy: true
Default huptimeout for incoming packets: 60 sec.
Default huptimeout for outgoing packets: 60 sec.
Current huptimeout: 60 sec.
Time until hangup: 45 sec.
Keepup-rules for incoming ip-packets:
1-1-0 keepup_in 300 ip/tcp 0/0 20-23 0/0 *
Keepup-rules for outgoing ip-packets:
2-1-0 keepup_out 300 ip/tcp 0/0 * 0/0 20-23
Hier ein Beispiel fuer die Budget-Erweiterung:
# Hoechstens 60 Anwahlversuche pro Stunde
isdnctrl budget ippp0 dial 60 1h
# Hoechstens 3000 Einheiten pro Monat
isdnctrl budget ippp0 charge 3000 1M
# Hoechstens 8 Stunden online pro Tag
isdnctrl budget ippp0 online 8h 1d
# Anzeige der Budgets:
isdnctrl showbudgets ippp0
# ... erzeugt nach kurzer Zeit folgende Ausgabe:
Budgets for interface ippp0:
TYPE AMOUNT PERIOD USED SINCE
dial 60 1h 1 01.07.1997, 17:43:40
charge 3000 1M 2 01.07.1997, 17:43:49
online 8h 1d 2m26s 01.07.1997, 17:43:57
Zum Nachfuehren der Budgets ueber einen laengeren Zeitraum koennte man
folgende Methode verwenden:
beim Herunterfahren oder per 'cron' jede Minute:
INTERFACES="ippp0 ippp1 ippp2"
for i in $INTERFACES; do
isdnctrl savebudgets $i > /var/isdn/saved-budgets/$i
done
und dann beim Neustart:
for f in /var/isdn/saved-budgets/*; do
isdnctrl restorebudgets ${f##*/} `cat $f`
done
Linux DECnet Networking Layer Information
===========================================
1) Other documentation....
o Project Home Pages
http://www.sucs.swan.ac.uk/~rohan/DECnet/index.html - Kernel info
http://linux.dreamtime.org/decnet/ - Userland tools
o FTP sites
ftp://ftp.sucs.swan.ac.uk/pub/Linux/DECnet/
- Swansea University Computer Society DECnet Archive
(contains kernel patches and info)
- Mirror of userland tools on ftp.dreamtime.org
ftp://ftp.dreamtime.org/pub/linux/decnet/
- Patrick Caulfield's archive of userland tools and
Eduardo Serrat's kernel patches
2) Configuring the kernel
Be sure to turn on the following options:
CONFIG_DECNET (obviously)
CONFIG_PROCFS (to see what's going on)
CONFIG_SYSCTL (for easy configuration)
if you want to try out router support (not properly debugged and not
complete yet), you'll need the following options as well...
CONFIG_DECNET_RAW (to receive routing packets)
CONFIG_DECNET_ROUTER (to be able to add/delete routes)
CONFIG_NETLINK (to allow rtnetlink)
CONFIG_RTNETLINK (for communication with the kernel routing layer)
3) Command line options
The kernel command line takes options looking like the following:
decnet=1,2,1
the first two numbers are the node address 1,2 = 1.2 (yes, you must use
commas when specifying them). The third number is the level number for routers
and is optional. It is probably a good idea to set the DECnet address on boot
like this rather than trying to do it later.
There are also equivalent options for modules. The node address and type can
also be set through the /proc/sys/net/decnet/ files, as can other system
parameters.
Currently the only supported device is ethernet. You'll have to set the
ethernet address of your ethernet card according to the DECnet address
of the node in order for it to be recognised (and thus appear in
/proc/net/decnet_dev). There is a utility available at the above
FTP sites called dn2ethaddr which can compute the correct ethernet
address to use. The address can be set by ifconfig either before at
at the time the device is brought up. If you are using RedHat you can
add the line:
MACADDR=AA:00:04:00:03:04
or something similar, to /etc/sysconfig/network-scripts/ifcfg-eth0 or
wherever your network card's configuration lives.
You will also need to set /proc/sys/net/decnet/default_device to the
device you want DECnet to route packets out of when no specific route
is available. Usually this will be eth0, for example:
echo -n "eth0" >/proc/sys/net/decnet/default_device
There is a list of what the other files under /proc/sys/net/decnet/ do
on the kernel patch web site (shown above).
4) How can I tell if its working ?
Here is a quick guide of what to look for in order to know if your DECnet
kernel subsystem is working.
- Is the node address set (see /proc/sys/net/decnet/node_address)
- Is the node of the correct type (see /proc/sys/net/decnet/node_type)
- Is the Ethernet MAC address of each Ethernet card set to match
the DECnet address. If in doubt use the dn2ethaddr utility available
at the ftp archive.
- If the previous two steps are satisfied, and the Ethernet card is up,
you should find that it is listed in /proc/net/decnet_dev and also
that it appears as a directory in /proc/sys/net/decnet/conf/. The
loopback device (lo) should also appear and is required to communicate
within a node.
- If you have any DECnet routers on your network, they should appear
in /proc/net/decnet_neigh, otherwise this file will only contain the
entry for the node itself (if it doesn't check to see if lo is up).
- If you want to send to any node which is not listed in the
/proc/net/decnet_neigh file, you'll need to set the default device
to point to an Ethernet card with connection to a router. This is
again done with the /proc/sys/net/decnet/default_device file.
- Try starting a simple server and client, like the dnping/dnmirror
over the loopback interface. With luck they should communicate.
For this step and those after, you'll need the DECnet library
which can be obtained from the above ftp sites as well as the
actual utilities themselves.
- If this seems to work, then try talking to a node on your local
network, and see if you can obtain the same results.
- At this point you are on your own... :-)
5) How to send a bug report
If you've found a bug and want to report it, then there are several things
you can do to help me work out exactly what it is that is wrong. Useful
information (a lot of which is essential) includes:
- What kernel version are you running ?
- What version of the patch are you running ?
- How far though the above set of tests can you get ?
- What is in the /proc/decnet* files and /proc/sys/net/decnet/* files ?
- Which services are you running ?
- Which client caused the problem ?
- How much data was being transfered ?
- Was the network congested ?
- If there was a kernel panic, please run the output through ksymoops
before sending it to me, otherwise its _useless_.
- How can the problem be reproduced ?
- Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of
tcpdump don't understand how to dump DECnet properly, so including
the hex listing of the packet contents is essential, usually the -x flag.
You may also need to increase the length grabbed with the -s flag)
6) Mailing list
If you are keen to get involved in development, or want to ask questions
about configuration, or even just report bugs, then there is a mailing
list that you can join: send mail to majordomo@dreamtime.org with
subscribe linux-decnet
as the body of the message.
7) Legal Info
The Linux DECnet project team have placed their code under the GPL. The
software is provided "as is" and without warranty express or implied.
DECnet is a trademark of Compaq. This software is not a product of
Compaq. We acknowledge the help of people at Compaq in providing extra
documentation above and beyond what was previously publicly available.
Steve Whitehouse <SteveW@ACM.org>
How to enable CMI 8330 soundchip on Linux
How to enable CMI 8330 (SOUNDPRO) soundchip on Linux
------------------------------------------
Stefan Laudat <Stefan.Laudat@asit.ro>
Hello folks,
The CMI8330 soundchip is a very small chip found on many recent
motherboards. In order to use it you just have to use a proper
isapnp.conf and a little bit of patience.
[Note: The CMI 8338 is unrelated and right now unsupported]
Of course you will have to compile kernel sound support as module,
as shown below:
In order to use CMI8330 under Linux you just have to use a proper isapnp.conf, a good isapnp and a little bit of patience. I use isapnp 1.17, but
you may get a better one I guess at http://www.roestock.demon.co.uk/isapnptools/.
Of course you will have to compile kernel sound support as module, as shown below:
CONFIG_SOUND=m
CONFIG_SOUND_OSS=m
CONFIG_SOUND_SB=m
CONFIG_SOUND_ADLIB=m
CONFIG_SOUND_MPU401=m
# Just for fun :)
# Mikro$chaft sound system (kinda useful here ;))
CONFIG_SOUND_MSS=m
The /etc/isapnp.conf file will be:
<snip below>
(READPORT 0x0203)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING
(VERIFYLD N)
# WSS
(CONFIGURE CMI0001/16777472 (LD 0
(IO 0 (SIZE 8) (BASE 0x0530))
(IO 1 (SIZE 8) (BASE 0x0388))
(INT 0 (IRQ 5 (MODE +E)))
(INT 0 (IRQ 7 (MODE +E)))
(DMA 0 (CHANNEL 0))
(NAME "CMI0001/16777472[0]{CMI8330/C3D Audio Adapter}")
(ACT Y)
))
# Control device ?
# MPU
(CONFIGURE CMI0001/16777472 (LD 1
(IO 0 (SIZE 2) (BASE 0x0330))
......@@ -57,10 +59,11 @@ CONFIG_SOUND_MSS=m
(ACT Y)
))
# SB...
# SoundBlaster
(CONFIGURE CMI0001/16777472 (LD 3
(IO 0 (SIZE 16) (BASE 0x0220))
(INT 0 (IRQ 7 (MODE +E)))
(INT 0 (IRQ 5 (MODE +E)))
(DMA 0 (CHANNEL 1))
(DMA 1 (CHANNEL 5))
(NAME "CMI0001/16777472[3]{CMI8330/C3D Audio Adapter}")
......@@ -74,13 +77,22 @@ CONFIG_SOUND_MSS=m
The module sequence is trivial:
/sbin/modprobe sound
# You need to load the ad1848 module first. That matters, otherwise the
# chip falls into soundblaster compatibility and you won't get it back out
/sbin/insmod ad1848 io=0x530 dma=0 irq=5 soundpro=1
/sbin/insmod soundcore
/sbin/insmod sound
/sbin/insmod uart401
/sbin/insmod sb io=0x220 irq=5 dma=1 dma16=-1
/sbin/insmod mpu401 io=0x330
/sbin/insmod opl3 io=0x388
# insert this first
/sbin/insmod ad1848 io=0x530 irq=7 dma=0 soundpro=1
# The sb module is an alternative to the ad1848 (Microsoft Sound System)
# Anyhow, this is full duplex and has MIDI
/sbin/insmod sb io=0x220 dma=1 dma16=5 irq=5 mpu_io=0x330
The soundchip is now fully initialized. Enjoy it.
Alma Chao <elysian@ethereal.torsion.org> suggests the following /etc/conf.modules:
alias sound ad1848
alias synth0 opl3
options ad1848 io=0x530 irq=7 dma=0 soundpro=1
options opl3 io=0x388
Audio driver for CM8338/CM8738 chips by Chen-Li Tien
Be aware: C-Media Electronics Inc. is basically an IC design house,
and whose development of software drivers is mainly for use by its OEM
customers in their products. C-Media Electronics Inc. itself does not
manufacture end-user products, such as PC or sound cards, so it can
not fully control the drivers provided to consumers. Drivers provided
at this site, therefore, MAY NOT BE APPLICABLE to all sound cards.
Drivers you download from this site may function well at certain
situation, but C-Media Electronics Inc. does not give any guarantee or
assurances. Please be aware that these drivers might cause some
technical difficulties when installed
1. Config cm8338 driver by 'make menuconfig' or 'make config' command.
2. Please select Sound Card (CONFIG_SOUND=m) support and CMPCI driver (CONFIG_SOUND_CMPCI=m) as modules. Resident mode not tested.
3. Compile the kernel if necessary.
4. Compile the modules by 'make modules'.
5. Install the modules by 'make modules_install'
6. Before first time to run the driver, create module dependency by 'depmod -a'
7. To install the driver, enter 'modprobe cmpci'.
Bugs:
1. Real player cannot be run (the same as es1371).
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
......
......@@ -2,7 +2,6 @@
* Copyright (C) 1996 Paul Mackerras.
*/
#include <linux/string.h>
#include <linux/config.h>
#include <asm/machdep.h>
#include <asm/io.h>
#include <asm/page.h>
......
/* $Id: etrap.S,v 1.40 1998/06/12 14:54:03 jj Exp $
/* $Id: etrap.S,v 1.41 1999/05/25 16:53:09 jj Exp $
* etrap.S: Preparing for entry into the kernel on Sparc V9.
*
* Copyright (C) 1996, 1997 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1997, 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 1997, 1998, 1999 Jakub Jelinek (jj@ultra.linux.cz)
*/
#include <asm/asi.h>
......@@ -59,10 +59,9 @@ etrap_irq: rdpr %tstate, %g1 ! Single Group
stb %l5, [%l6 + AOFF_task_tss + AOFF_thread_fpdepth] ! Store
wrpr %g3, 0, %otherwin ! Single Group+4bubbles
wrpr %g2, 0, %wstate ! Single Group+4bubbles
ldxa [%l4] ASI_DMMU, %g2 ! Load Group
stxa %g0, [%l4] ASI_DMMU ! Store Group
stxa %g2, [%l4 + %l4] ASI_DMMU ! Store Group
flush %l6 ! Single Group+9bubbles
wr %g0, ASI_AIUS, %asi ! Single Group+4bubbles
2: wrpr %g0, 0x0, %tl ! Single Group+4bubbles
andn %g1, PSTATE_MM, %l1 ! IEU0 Group
mov %g4, %l4 ! IEU1
......@@ -135,10 +134,9 @@ scetrap: rdpr %pil, %g2 ! Single Group
sll %g2, 3, %g2 ! IEU0 Group
wrpr %g3, 0, %otherwin ! Single Group+4bubbles
wrpr %g2, 0, %wstate ! Single Group+4bubbles
ldxa [%l4] ASI_DMMU, %g2 ! Load Group
stxa %g0, [%l4] ASI_DMMU ! Store Group
stxa %g2, [%l4 + %l4] ASI_DMMU ! Store Group
flush %l6 ! Single Group+9bubbles
wr %g0, ASI_AIUS, %asi ! Single Group+4bubbles
2: wrpr %g0, 0x0, %tl ! Single Group+4bubbles
andn %g1, PSTATE_MM, %l1 ! IEU0 Group
mov %g4, %l4 ! IEU1
......
/* $Id: head.S,v 1.60 1999/04/12 08:08:21 davem Exp $
/* $Id: head.S,v 1.61 1999/05/25 16:53:10 jj Exp $
* head.S: Initial boot code for the Sparc64 port of Linux.
*
* Copyright (C) 1996,1997 David S. Miller (davem@caip.rutgers.edu)
......@@ -286,6 +286,7 @@ sun4u_init:
wr %g6, 0x0, %pic
#endif
wr %g0, ASI_P, %asi
mov 1, %g5
sllx %g5, (PAGE_SHIFT + 1), %g5
sub %g5, (REGWIN_SZ + STACK_BIAS), %g5
......
/* $Id: process.c,v 1.92 1999/05/08 23:04:48 davem Exp $
/* $Id: process.c,v 1.94 1999/05/27 04:49:30 davem Exp $
* arch/sparc64/kernel/process.c
*
* Copyright (C) 1995, 1996 David S. Miller (davem@caip.rutgers.edu)
......
/* $Id: rtrap.S,v 1.45 1998/11/09 15:33:29 davem Exp $
/* $Id: rtrap.S,v 1.46 1999/05/25 16:53:20 jj Exp $
* rtrap.S: Preparing for return from trap on Sparc V9.
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
......@@ -106,7 +106,6 @@ rt_continue: lduh [%g6 + AOFF_task_tss + AOFF_thread_ctx], %l0
brnz,pn %l3, kern_rtt
mov PRIMARY_CONTEXT, %l7
stxa %l0, [%l7] ASI_DMMU
stxa %l0, [%l7 + %l7] ASI_DMMU
flush %o5
rdpr %wstate, %l1
......
......@@ -272,25 +272,26 @@ __initfunc(void smp_boot_cpus(void))
static inline void xcall_deliver(u64 data0, u64 data1, u64 data2, u64 pstate, unsigned long cpu)
{
u64 result, target = (cpu << 14) | 0x70;
int stuck;
int stuck, tmp;
#ifdef XCALL_DEBUG
printk("CPU[%d]: xcall(data[%016lx:%016lx:%016lx],tgt[%016lx])\n",
smp_processor_id(), data0, data1, data2, target);
#endif
again:
tmp = 0x40;
__asm__ __volatile__("
wrpr %0, %1, %%pstate
wr %%g0, %2, %%asi
stxa %3, [0x40] %%asi
stxa %4, [0x50] %%asi
stxa %5, [0x60] %%asi
wrpr %1, %2, %%pstate
stxa %4, [%0] %3
stxa %5, [%0+%8] %3
add %0, %8, %0
stxa %6, [%0+%8] %3
membar #Sync
stxa %%g0, [%6] %%asi
stxa %%g0, [%7] %3
membar #Sync"
: /* No outputs */
: "=r" (tmp)
: "r" (pstate), "i" (PSTATE_IE), "i" (ASI_UDB_INTR_W),
"r" (data0), "r" (data1), "r" (data2), "r" (target));
"r" (data0), "r" (data1), "r" (data2), "r" (target), "r" (0x10), "0" (tmp));
/* NOTE: PSTATE_IE is still clear. */
stuck = 100000;
......
/* $Id: trampoline.S,v 1.8 1998/12/09 21:01:15 davem Exp $
/* $Id: trampoline.S,v 1.9 1999/05/25 16:53:12 jj Exp $
* trampoline.S: Jump start slave processors on sparc64.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
......@@ -130,6 +130,8 @@ sparc64_cpu_startup:
nop
bounce:
wr %g0, ASI_P, %asi
mov PRIMARY_CONTEXT, %g7
stxa %g0, [%g7] ASI_DMMU
membar #Sync
......
/* $Id: traps.c,v 1.58 1999/03/29 12:38:10 jj Exp $
/* $Id: traps.c,v 1.59 1999/05/18 16:57:10 jj Exp $
* arch/sparc64/kernel/traps.c
*
* Copyright (C) 1995,1997 David S. Miller (davem@caip.rutgers.edu)
......@@ -452,15 +452,35 @@ void instruction_dump (unsigned int *pc)
if((((unsigned long) pc) & 3))
return;
printk("Instruction DUMP:");
for(i = -3; i < 6; i++)
printk("%c%08x%c",i?' ':'<',pc[i],i?' ':'>');
printk("\n");
}
void user_instruction_dump (unsigned int *pc)
{
int i;
unsigned int buf[9];
if((((unsigned long) pc) & 3))
return;
if(copy_from_user(buf, pc - 3, sizeof(buf)))
return;
printk("Instruction DUMP:");
for(i = 0; i < 9; i++)
printk("%c%08x%c",i==3?' ':'<',buf[i],i==3?' ':'>');
printk("\n");
}
void die_if_kernel(char *str, struct pt_regs *regs)
{
extern void __show_regs(struct pt_regs * regs);
extern void smp_report_regs(void);
int count = 0;
struct reg_window *lastrw;
/* Amuse the user. */
printk(
......@@ -472,25 +492,28 @@ void die_if_kernel(char *str, struct pt_regs *regs)
printk("%s(%d): %s\n", current->comm, current->pid, str);
__asm__ __volatile__("flushw");
__show_regs(regs);
{
if(regs->tstate & TSTATE_PRIV) {
struct reg_window *rw = (struct reg_window *)
(regs->u_regs[UREG_FP] + STACK_BIAS);
/* Stop the back trace when we hit userland or we
* find some badly aligned kernel stack.
*/
lastrw = (struct reg_window *)current;
while(rw &&
(((unsigned long) rw) >= PAGE_OFFSET) &&
count++ < 30 &&
rw >= lastrw &&
(char *) rw < ((char *) current)
+ sizeof (union task_union) &&
!(((unsigned long) rw) & 0x7)) {
printk("Caller[%016lx]\n", rw->ins[7]);
lastrw = rw;
rw = (struct reg_window *)
(rw->ins[6] + STACK_BIAS);
}
}
if(regs->tstate & TSTATE_PRIV) {
printk("Instruction DUMP:");
instruction_dump ((unsigned int *) regs->tpc);
}
} else
user_instruction_dump ((unsigned int *) regs->tpc);
#ifdef __SMP__
smp_report_regs();
#endif
......
/* $Id: unaligned.c,v 1.15 1999/04/03 11:36:21 anton Exp $
/* $Id: unaligned.c,v 1.16 1999/05/25 16:53:15 jj Exp $
* unaligned.c: Unaligned load/store trap handling with special
* cases for the kernel to do them more quickly.
*
......@@ -228,7 +228,8 @@ __asm__ __volatile__ ( \
"sra %%g7, 0, %%g7\n\t" \
"stx %%l1, [%0]\n\t" \
"stx %%g7, [%0 + 8]\n" \
"0:\n\n\t" \
"0:\n\t" \
"wr %%g0, %5, %%asi\n\n\t" \
".section __ex_table\n\t" \
".word 4b, " #errh "\n\t" \
".word 5b, " #errh "\n\t" \
......@@ -244,7 +245,8 @@ __asm__ __volatile__ ( \
".word 15b, " #errh "\n\t" \
".word 16b, " #errh "\n\n\t" \
".previous\n\t" \
: : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed), "r" (asi) \
: : "r" (dest_reg), "r" (size), "r" (saddr), "r" (is_signed), \
"r" (asi), "i" (ASI_AIUS) \
: "l1", "l2", "g7", "g1", "cc"); \
})
......@@ -282,7 +284,8 @@ __asm__ __volatile__ ( \
"2:\t" "srl %%l1, 8, %%l2\n" \
"16:\t" "stba %%l2, [%0] %%asi\n" \
"17:\t" "stba %%l1, [%0 + 1] %%asi\n" \
"0:\n\n\t" \
"0:\n\t" \
"wr %%g0, %4, %%asi\n\n\t" \
".section __ex_table\n\t" \
".word 4b, " #errh "\n\t" \
".word 5b, " #errh "\n\t" \
......@@ -299,7 +302,7 @@ __asm__ __volatile__ ( \
".word 16b, " #errh "\n\t" \
".word 17b, " #errh "\n\n\t" \
".previous\n\t" \
: : "r" (dst_addr), "r" (size), "r" (src_val), "r" (asi) \
: : "r" (dst_addr), "r" (size), "r" (src_val), "r" (asi), "i" (ASI_AIUS)\
: "l1", "l2", "g7", "g1", "cc"); \
})
......
/* $Id: VIS.h,v 1.3 1997/06/27 14:53:18 jj Exp $
/* $Id: VIS.h,v 1.4 1999/05/25 16:52:50 jj Exp $
* VIS.h: High speed copy/clear operations utilizing the UltraSparc
* Visual Instruction Set.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 1996, 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
*/
/* VIS code can be used for numerous copy/set operation variants.
......@@ -28,6 +28,8 @@
#include <asm/head.h>
#include <asm/asi.h>
#else
#define ASI_AIUS 0x11 /* Secondary, user */
#define ASI_BLK_AIUS 0x71 /* Secondary, user, blk ld/st */
#define ASI_P 0x80 /* Primary, implicit */
#define ASI_S 0x81 /* Secondary, implicit */
#define ASI_BLK_COMMIT_P 0xe0 /* Primary, blk store commit */
......@@ -43,15 +45,28 @@
* cell exchange program...
*/
#define ASI_BLK_XOR (ASI_P ^ ASI_BLK_P)
/* Well, things get more hairy if we use ASI_AIUS as
* USER_DS and ASI_P as KERNEL_DS, we'd reach
* commit block stores this way which is not what we want...
*/
/* ASI_P->ASI_BLK_P && ASI_AIUS->ASI_BLK_AIUS transitions can be done
* as blkasi = asi | ASI_BLK_OR
*/
#define ASI_BLK_OR (ASI_BLK_P & ~ASI_P)
/* Transition back from ASI_BLK_P->ASI_P && ASI_BLK_AIUS->ASI_AIUS is
* more complicated:
* asi = blkasi ^ (blkasi >> 3) ^ ASI_BLK_XOR1
*/
#define ASI_BLK_XOR1 (ASI_BLK_P ^ (ASI_BLK_P >> 3) ^ ASI_P)
#define asi_src %o3
#define asi_dest %o4
#ifdef __KERNEL__
#define ASI_SETSRC_BLK wr asi_src, 0, %asi;
#define ASI_SETSRC_NOBLK wr asi_src, ASI_BLK_XOR, %asi;
#define ASI_SETSRC_NOBLK wr asi_src, 0, %asi;
#define ASI_SETDST_BLK wr asi_dest, 0, %asi;
#define ASI_SETDST_NOBLK wr asi_dest, ASI_BLK_XOR, %asi;
#define ASI_SETDST_NOBLK wr asi_dest, 0, %asi;
#define ASIBLK %asi
#define ASINORMAL %asi
#define LDUB lduba
......
/* $Id: VISbzero.S,v 1.9 1998/06/12 14:53:50 jj Exp $
/* $Id: VISbzero.S,v 1.10 1999/05/25 16:52:56 jj Exp $
* VISbzero.S: High speed clear operations utilizing the UltraSparc
* Visual Instruction Set.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 1996, 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
*/
#include "VIS.h"
......@@ -84,9 +84,14 @@
.align 32
#ifdef __KERNEL__
.globl __bzero, __bzero_noasi
__bzero_noasi:
rd %asi, %g5
ba,pt %xcc, __bzero+12
mov %g5, %o4
__bzero:
rd %asi, %g5
wr %g0, ASI_P, %asi ! LSU Group
__bzero_noasi:
mov ASI_P, %o4
#else
.globl bzero
bzero_private:
......@@ -143,8 +148,8 @@ bzero:
6: andncc %o1, 0x3f, %o3
7: be,pn %xcc, 9f
#ifdef __KERNEL__
rd %asi, %o4
wr %o4, ASI_BLK_XOR, %asi
or %o4, ASI_BLK_OR, %g7
wr %g7, %g0, %asi
VISEntryHalf
#else
wr %g0, ASI_BLK_P, %asi
......@@ -221,7 +226,11 @@ bzero:
add %o0, 2, %o0
1: bne,a,pn %xcc, 8f
EX(STB %g0, [%o0] ASINORMAL, add %g0, 1)
8: retl
8:
#ifdef __KERNEL__
wr %g5, %g0, %asi
#endif
retl
RETL
17: be,pn %xcc, 13b
orcc %o1, 0, %g0
......@@ -230,7 +239,11 @@ bzero:
subcc %o1, 1, %o1
bne,pt %xcc, 8b
EX(STB %g0, [%o0 - 1] ASINORMAL, add %o1, 1)
0: retl
0:
#ifdef __KERNEL__
wr %g5, %g0, %asi
#endif
retl
RETL
#ifdef __KERNEL__
......@@ -239,6 +252,7 @@ bzero:
VISbzerofixup_reto1:
mov %o1, %o0
VISbzerofixup_ret0:
wr %g5, %g0, %asi
retl
wr %g0, 0, %fprs
VISbzerofixup_ret1:
......
/* $Id: VIScopy.S,v 1.19 1998/10/19 21:52:19 davem Exp $
/* $Id: VIScopy.S,v 1.20 1999/05/25 16:52:57 jj Exp $
* VIScopy.S: High speed copy operations utilizing the UltraSparc
* Visual Instruction Set.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1996, 1997, 1998 Jakub Jelinek (jj@ultra.linux.cz)
* Copyright (C) 1996, 1997, 1998, 1999 Jakub Jelinek (jj@ultra.linux.cz)
*/
#include "VIS.h"
......@@ -26,18 +26,25 @@
#ifdef __KERNEL__
#include <asm/visasm.h>
#include <asm/asm_offsets.h>
#define FPU_CLEAN_RETL \
VISExit \
retl; \
clr %o0;
#define FPU_RETL \
VISExit \
retl; \
clr %o0;
#define NORMAL_RETL \
retl; \
clr %o0;
#define FPU_CLEAN_RETL \
ldub [%g6 + AOFF_task_tss + AOFF_thread_current_ds], %o1; \
VISExit \
clr %o0; \
retl; \
wr %o1, %g0, %asi;
#define FPU_RETL \
ldub [%g6 + AOFF_task_tss + AOFF_thread_current_ds], %o1; \
VISExit \
clr %o0; \
retl; \
wr %o1, %g0, %asi;
#define NORMAL_RETL \
ldub [%g6 + AOFF_task_tss + AOFF_thread_current_ds], %o1; \
clr %o0; \
retl; \
wr %o1, %g0, %asi;
#define EX(x,y,a,b) \
98: x,y; \
.section .fixup; \
......@@ -146,10 +153,20 @@
EXVIS(STBLK %fsrc, [%dest] ASIBLK); \
add %dest, 0x40, %dest;
#ifdef __KERNEL__
#define STORE_JUMP(dest, fsrc, target) \
srl asi_dest, 3, %g5; \
EXVIS3(STBLK %fsrc, [%dest] ASIBLK); \
xor asi_dest, ASI_BLK_XOR1, asi_dest;\
add %dest, 0x40, %dest; \
xor asi_dest, %g5, asi_dest; \
ba,pt %xcc, target;
#else
#define STORE_JUMP(dest, fsrc, target) \
EXVIS3(STBLK %fsrc, [%dest] ASIBLK); \
add %dest, 0x40, %dest; \
ba,pt %xcc, target;
#endif
#ifndef __KERNEL__
#define VISLOOP_PAD nop; nop; nop; nop; \
......@@ -157,9 +174,7 @@
nop; nop; nop; nop; \
nop; nop; nop;
#else
#define VISLOOP_PAD nop; nop; nop; nop; \
nop; nop; nop; nop; \
nop;
#define VISLOOP_PAD
#endif
#define FINISH_VISCHUNK(dest, f0, f1, left) \
......@@ -170,11 +185,13 @@
EXVIS4(STDF %f48, [%dest] ASINORMAL); \
add %dest, 8, %dest;
#define UNEVEN_VISCHUNK(dest, f0, f1, left) \
#define UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \
subcc %left, 8, %left; \
bl,pn %xcc, vis_out; \
fsrc1 %f0, %f1; \
ba,a,pt %xcc, vis_slk;
fsrc1 %f0, %f1;
#define UNEVEN_VISCHUNK(dest, f0, f1, left) \
UNEVEN_VISCHUNK_LAST(dest, f0, f1, left) \
ba,a,pt %xcc, vis_out_slk;
/* Macros for non-VIS memcpy code. */
#ifdef REGS_64BIT
......@@ -303,32 +320,32 @@
.type __memcpy_entry,@function
memcpy_private:
__memcpy:
memcpy: mov ASI_BLK_P, asi_src ! IEU0 Group
memcpy: mov ASI_P, asi_src ! IEU0 Group
brnz,pt %o2, __memcpy_entry ! CTI
mov ASI_BLK_P, asi_dest ! IEU1
mov ASI_P, asi_dest ! IEU1
retl
clr %o0
.align 32
.globl __copy_from_user
.type __copy_from_user,@function
__copy_from_user:mov ASI_BLK_S, asi_src ! IEU0 Group
__copy_from_user:rd %asi, asi_src ! IEU0 Group
brnz,pt %o2, __memcpy_entry ! CTI
mov ASI_BLK_P, asi_dest ! IEU1
mov ASI_P, asi_dest ! IEU1
.globl __copy_to_user
.type __copy_to_user,@function
__copy_to_user: mov ASI_BLK_P, asi_src ! IEU0 Group
__copy_to_user: mov ASI_P, asi_src ! IEU0 Group
brnz,pt %o2, __memcpy_entry ! CTI
mov ASI_BLK_S, asi_dest ! IEU1
rd %asi, asi_dest ! IEU1
retl ! CTI Group
clr %o0 ! IEU0 Group
.globl __copy_in_user
.type __copy_in_user,@function
__copy_in_user: mov ASI_BLK_S, asi_src ! IEU0 Group
__copy_in_user: rd %asi, asi_src ! IEU0 Group
brnz,pt %o2, __memcpy_entry ! CTI
mov ASI_BLK_S, asi_dest ! IEU1
mov asi_src, asi_dest ! IEU1
retl ! CTI Group
clr %o0 ! IEU0 Group
#endif
......@@ -446,6 +463,10 @@ dest_is_64byte_aligned:
fmovd %f0, %f2 ! FPU
sub %g3, 0x10, %g3 ! IEU0 Group
sub %o2, %g7, %o2 ! IEU1
#ifdef __KERNEL__
or asi_src, ASI_BLK_OR, asi_src ! IEU0 Group
or asi_dest, ASI_BLK_OR, asi_dest ! IEU1
#endif
alignaddr %g1, %g0, %g0 ! GRU Group
add %g1, %g7, %g1 ! IEU0 Group
subcc %o2, %g3, %o2 ! IEU1
......@@ -584,7 +605,13 @@ finish_f38: FINISH_VISCHUNK(o0, f38, f40, g3)
finish_f40: FINISH_VISCHUNK(o0, f40, f42, g3)
finish_f42: FINISH_VISCHUNK(o0, f42, f44, g3)
finish_f44: FINISH_VISCHUNK(o0, f44, f46, g3)
finish_f46: UNEVEN_VISCHUNK(o0, f46, f0, g3)
finish_f46: UNEVEN_VISCHUNK_LAST(o0, f46, f0, g3)
vis_out_slk:
#ifdef __KERNEL__
srl asi_src, 3, %g5 ! IEU0 Group
xor asi_src, ASI_BLK_XOR1, asi_src ! IEU1
xor asi_src, %g5, asi_src ! IEU0 Group
#endif
vis_slk:ASI_SETSRC_NOBLK ! LSU Group
EXVIS4(LDDF [%o1] ASINORMAL, %f2) ! Load Group
add %o1, 8, %o1 ! IEU0
......@@ -592,7 +619,7 @@ vis_slk:ASI_SETSRC_NOBLK ! LSU Group
ASI_SETDST_NOBLK ! LSU Group
faligndata %f0, %f2, %f8 ! GRU Group
EXVIS5(STDF %f8, [%o0] ASINORMAL) ! Store
bl,pn %xcc, vis_out ! CTI
bl,pn %xcc, vis_out_slp ! CTI
add %o0, 8, %o0 ! IEU0 Group
ASI_SETSRC_NOBLK ! LSU Group
EXVIS4(LDDF [%o1] ASINORMAL, %f0) ! Load Group
......@@ -603,8 +630,20 @@ vis_slk:ASI_SETSRC_NOBLK ! LSU Group
EXVIS5(STDF %f8, [%o0] ASINORMAL) ! Store
bge,pt %xcc, vis_slk ! CTI
add %o0, 8, %o0 ! IEU0 Group
vis_out_slp:
#ifdef __KERNEL__
brz,pt %o2, vis_ret ! CTI Group
mov %g1, %o1 ! IEU0
ba,pt %xcc, vis_slp+4 ! CTI Group
ASI_SETSRC_NOBLK ! LSU Group
#endif
vis_out:brz,pt %o2, vis_ret ! CTI Group
mov %g1, %o1 ! IEU0
#ifdef __KERNEL__
srl asi_src, 3, %g5 ! IEU0 Group
xor asi_src, ASI_BLK_XOR1, asi_src ! IEU1
xor asi_src, %g5, asi_src ! IEU0 Group
#endif
vis_slp:ASI_SETSRC_NOBLK ! LSU Group
EXO2(LDUB [%o1] ASINORMAL, %g5) ! LOAD
add %o1, 1, %o1 ! IEU0
......@@ -970,11 +1009,13 @@ VIScopyfixup_ret:
/* If this is copy_from_user(), zero out the rest of the
* kernel buffer.
*/
ldub [%g6 + AOFF_task_tss + AOFF_thread_current_ds], %o4
andcc asi_src, 0x1, %g0
be,pt %icc, 1f
andcc asi_dest, 0x1, %g0
bne,pn %icc, 1f
VISExit
andcc asi_dest, 0x1, %g0
bne,pn %icc, 1f
nop
save %sp, -160, %sp
mov %i0, %o0
call __bzero
......@@ -982,7 +1023,7 @@ VIScopyfixup_ret:
restore
1: mov %o1, %o0
retl
nop
wr %o4, %g0, %asi
VIScopyfixup1: subcc %g2, 18, %g2
add %o0, 32, %o0
bgeu,a,pt %icc, VIScopyfixup1
......
/* $Id: VIScsum.S,v 1.3 1998/06/12 14:53:57 jj Exp $
/* $Id: VIScsum.S,v 1.4 1999/05/25 16:53:00 jj Exp $
* VIScsum.S: High bandwidth IP checksumming utilizing the UltraSparc
* Visual Instruction Set.
*
......@@ -27,6 +27,7 @@
#include <asm/head.h>
#include <asm/asi.h>
#include <asm/visasm.h>
#include <asm/asm_offsets.h>
#else
#define ASI_BLK_P 0xf0
#define FRPS_FEF 0x04
......@@ -339,9 +340,13 @@ csum_partial:
membar #Sync /* LSU Group */
DO_THE_TRICK(f44,f46,f48,f50,f52,f54,f56,f58,f60,f62,f0,f2,f4,f6,f8,f10,f12,f14)
END_THE_TRICK(f60,f62,f0,f2,f4,f6,f8,f10,f12,f14,f16,f18,f20,f22,f24,f26,f28,f30)
#ifdef __KERNEL__
ldub [%g6 + AOFF_task_tss + AOFF_thread_current_ds], %g7
#endif
and %o1, 0x3f, %o1 /* IEU0 Group */
#ifdef __KERNEL__
VISExit
wr %g7, %g0, %asi
#endif
20: andcc %o1, 0xf0, %g1 /* IEU1 Group */
be,pn %icc, 23f /* CTI */
......
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