diff --git a/[refs] b/[refs]
index 07b98d9c30ae..a661d5b9cf4b 100644
--- a/[refs]
+++ b/[refs]
@@ -1,2 +1,2 @@
---
-refs/heads/master: 18e6756a6b463e09fd3873592ec6b0579c78103d
+refs/heads/master: 2e194583125bfea94d1ceaa6a32e891643befa7d
diff --git a/trunk/CREDITS b/trunk/CREDITS
index 5d75254bcb81..6c06ded9882b 100644
--- a/trunk/CREDITS
+++ b/trunk/CREDITS
@@ -34,7 +34,6 @@ E: magrawal@nortelnetworks.com
D: Basic Interphase 5575 driver with UBR and ABR support.
S: 75 Donald St, Apt 42
S: Weymouth, MA 02188
-S: USA
N: Dave Airlie
E: airlied@linux.ie
@@ -203,7 +202,6 @@ S: MS42
S: Hewlett-Packard
S: 3404 E Harmony Rd
S: Fort Collins, CO 80525
-S: USA
N: Arindam Banerji
E: axb@cse.nd.edu
@@ -446,7 +444,6 @@ E: rbradetich@uswest.net
D: Linux/PA-RISC hacker
S: 1200 Goldenrod Dr.
S: Nampa, Idaho 83686
-S: USA
N: Derrick J. Brashear
E: shadow@dementia.org
@@ -636,7 +633,6 @@ E: scole@lanl.gov
E: elenstev@mesatop.com
D: Various build fixes and kernel documentation.
S: Los Alamos, New Mexico
-S: USA
N: Hamish Coleman
E: hamish@zot.apana.org.au
@@ -2013,7 +2009,6 @@ W: http://www.mathematik.uni-stuttgart.de/~floeff
D: Busmaster driver for HP 10/100 Mbit Network Adapters
S: University of Stuttgart, Germany and
S: Ecole Nationale Superieure des Telecommunications, Paris
-S: France
N: Jamie Lokier
E: jamie@shareable.org
@@ -2183,7 +2178,6 @@ S: Hewlett Packard
S: MS 42
S: 3404 E. Harmony Road
S: Fort Collins, CO 80528
-S: USA
N: Torben Mathiasen
E: torben.mathiasen@compaq.com
@@ -2240,12 +2234,6 @@ D: tc: HFSC scheduler
S: Freiburg
S: Germany
-N: Paul E. McKenney
-E: paulmck@us.ibm.com
-W: http://www.rdrop.com/users/paulmck/
-D: RCU and variants
-D: rcutorture module
-
N: Mike McLagan
E: mike.mclagan@linux.org
W: http://www.invlogic.com/~mmclagan
@@ -2987,10 +2975,6 @@ S: 69 rue Dunois
S: 75013 Paris
S: France
-N: Dipankar Sarma
-E: dipankar@in.ibm.com
-D: RCU
-
N: Hannu Savolainen
E: hannu@opensound.com
D: Maintainer of the sound drivers until 2.1.x days.
@@ -3303,12 +3287,6 @@ S: 3 Ballow Crescent
S: MacGregor A.C.T 2615
S: Australia
-N: Josh Triplett
-E: josh@freedesktop.org
-P: 1024D/D0FE7AFB B24A 65C9 1D71 2AC2 DE87 CA26 189B 9946 D0FE 7AFB
-D: rcutorture maintainer
-D: lock annotations, finding and fixing lock bugs
-
N: Winfried Trümper
E: winni@xpilot.org
W: http://www.shop.de/~winni/
@@ -3680,7 +3658,7 @@ S: Portland, OR
S: USA
N: Michal Wronski
-E: michal.wronski@gmail.com
+E: Michal.Wronski@motorola.com
D: POSIX message queues fs (with K. Benedyczak)
S: Krakow
S: Poland
diff --git a/trunk/Documentation/DMA-mapping.txt b/trunk/Documentation/DMA-mapping.txt
index 028614cdd062..63392c9132b4 100644
--- a/trunk/Documentation/DMA-mapping.txt
+++ b/trunk/Documentation/DMA-mapping.txt
@@ -107,7 +107,7 @@ The query is performed via a call to pci_set_dma_mask():
int pci_set_dma_mask(struct pci_dev *pdev, u64 device_mask);
-The query for consistent allocations is performed via a call to
+The query for consistent allocations is performed via a a call to
pci_set_consistent_dma_mask():
int pci_set_consistent_dma_mask(struct pci_dev *pdev, u64 device_mask);
@@ -117,7 +117,7 @@ device_mask is a bit mask describing which bits of a PCI address your
device supports. It returns zero if your card can perform DMA
properly on the machine given the address mask you provided.
-If it returns non-zero, your device cannot perform DMA properly on
+If it returns non-zero, your device can not perform DMA properly on
this platform, and attempting to do so will result in undefined
behavior. You must either use a different mask, or not use DMA.
diff --git a/trunk/Documentation/DocBook/kernel-api.tmpl b/trunk/Documentation/DocBook/kernel-api.tmpl
index 2b5ac604948c..49c745720f47 100644
--- a/trunk/Documentation/DocBook/kernel-api.tmpl
+++ b/trunk/Documentation/DocBook/kernel-api.tmpl
@@ -158,7 +158,6 @@ X!Ilib/string.c
!Emm/filemap.c
!Emm/memory.c
!Emm/vmalloc.c
-!Imm/page_alloc.c
!Emm/mempool.c
!Emm/page-writeback.c
!Emm/truncate.c
diff --git a/trunk/Documentation/DocBook/libata.tmpl b/trunk/Documentation/DocBook/libata.tmpl
index 07a635590b36..065e8dc23e3a 100644
--- a/trunk/Documentation/DocBook/libata.tmpl
+++ b/trunk/Documentation/DocBook/libata.tmpl
@@ -14,7 +14,7 @@
- 2003-2006
+ 2003-2005
Jeff Garzik
@@ -1400,7 +1400,7 @@ and other resources, etc.
When it's known that HBA is in ready state but ATA/ATAPI
- device is in unknown state, reset only device.
+ device in in unknown state, reset only device.
diff --git a/trunk/Documentation/DocBook/usb.tmpl b/trunk/Documentation/DocBook/usb.tmpl
index 143e5ff7deb8..3608472d7b74 100644
--- a/trunk/Documentation/DocBook/usb.tmpl
+++ b/trunk/Documentation/DocBook/usb.tmpl
@@ -314,7 +314,8 @@
usbdevfs although it wasn't solving what
devfs was.
Every USB device will appear in usbfs, regardless of whether or
- not it has a kernel driver.
+ not it has a kernel driver; but only devices with kernel drivers
+ show up in devfs.
@@ -740,7 +741,7 @@ usbdev_ioctl (int fd, int ifno, unsigned request, void *param)
Synchronous I/O Support
Synchronous requests involve the kernel blocking
- until the user mode request completes, either by
+ until until the user mode request completes, either by
finishing successfully or by reporting an error.
In most cases this is the simplest way to use usbfs,
although as noted above it does prevent performing I/O
diff --git a/trunk/Documentation/DocBook/writing_usb_driver.tmpl b/trunk/Documentation/DocBook/writing_usb_driver.tmpl
index 07cd34c1940b..008a341234d0 100644
--- a/trunk/Documentation/DocBook/writing_usb_driver.tmpl
+++ b/trunk/Documentation/DocBook/writing_usb_driver.tmpl
@@ -224,8 +224,13 @@ static int skel_probe(struct usb_interface *interface,
Conversely, when the device is removed from the USB bus, the disconnect
function is called with the device pointer. The driver needs to clean any
private data that has been allocated at this time and to shut down any
- pending urbs that are in the USB system.
+ pending urbs that are in the USB system. The driver also unregisters
+ itself from the devfs subsystem with the call:
+
+/* remove our devfs node */
+devfs_unregister(skel->devfs);
+
Now that the device is plugged into the system and the driver is bound to
the device, any of the functions in the file_operations structure that
diff --git a/trunk/Documentation/IPMI.txt b/trunk/Documentation/IPMI.txt
index 0e3924ecd76b..9f08d73d90bf 100644
--- a/trunk/Documentation/IPMI.txt
+++ b/trunk/Documentation/IPMI.txt
@@ -468,12 +468,12 @@ BMCs specified on the smb_addr line will be detected.
Setting smb_dbg_probe to 1 will enable debugging of the probing and
detection process for BMCs on the SMBusses.
-Discovering the IPMI compliant BMC on the SMBus can cause devices
+Discovering the IPMI compilant BMC on the SMBus can cause devices
on the I2C bus to fail. The SMBus driver writes a "Get Device ID" IPMI
message as a block write to the I2C bus and waits for a response.
This action can be detrimental to some I2C devices. It is highly recommended
that the known I2c address be given to the SMBus driver in the smb_addr
-parameter. The default address range will not be used when a smb_addr
+parameter. The default adrress range will not be used when a smb_addr
parameter is provided.
When compiled into the kernel, the addresses can be specified on the
diff --git a/trunk/Documentation/MSI-HOWTO.txt b/trunk/Documentation/MSI-HOWTO.txt
index c70306abb7b2..3ec6c720b016 100644
--- a/trunk/Documentation/MSI-HOWTO.txt
+++ b/trunk/Documentation/MSI-HOWTO.txt
@@ -267,7 +267,7 @@ y = The number of MSI capable devices populated in the system.
vector reserved to avoid the case where some MSI-X capable
drivers may attempt to claim all available vector resources.
-z = The number of MSI-X capable devices populated in the system.
+z = The number of MSI-X capable devices pupulated in the system.
This policy ensures that maximum (x - y) is distributed
evenly among MSI-X capable devices.
diff --git a/trunk/Documentation/RCU/checklist.txt b/trunk/Documentation/RCU/checklist.txt
index f4dffadbcb00..1d50cf0c905e 100644
--- a/trunk/Documentation/RCU/checklist.txt
+++ b/trunk/Documentation/RCU/checklist.txt
@@ -221,41 +221,3 @@ over a rather long period of time, but improvements are always welcome!
disable irq on a given acquisition of that lock will result in
deadlock as soon as the RCU callback happens to interrupt that
acquisition's critical section.
-
-13. SRCU (srcu_read_lock(), srcu_read_unlock(), and synchronize_srcu())
- may only be invoked from process context. Unlike other forms of
- RCU, it -is- permissible to block in an SRCU read-side critical
- section (demarked by srcu_read_lock() and srcu_read_unlock()),
- hence the "SRCU": "sleepable RCU". Please note that if you
- don't need to sleep in read-side critical sections, you should
- be using RCU rather than SRCU, because RCU is almost always
- faster and easier to use than is SRCU.
-
- Also unlike other forms of RCU, explicit initialization
- and cleanup is required via init_srcu_struct() and
- cleanup_srcu_struct(). These are passed a "struct srcu_struct"
- that defines the scope of a given SRCU domain. Once initialized,
- the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock()
- and synchronize_srcu(). A given synchronize_srcu() waits only
- for SRCU read-side critical sections governed by srcu_read_lock()
- and srcu_read_unlock() calls that have been passd the same
- srcu_struct. This property is what makes sleeping read-side
- critical sections tolerable -- a given subsystem delays only
- its own updates, not those of other subsystems using SRCU.
- Therefore, SRCU is less prone to OOM the system than RCU would
- be if RCU's read-side critical sections were permitted to
- sleep.
-
- The ability to sleep in read-side critical sections does not
- come for free. First, corresponding srcu_read_lock() and
- srcu_read_unlock() calls must be passed the same srcu_struct.
- Second, grace-period-detection overhead is amortized only
- over those updates sharing a given srcu_struct, rather than
- being globally amortized as they are for other forms of RCU.
- Therefore, SRCU should be used in preference to rw_semaphore
- only in extremely read-intensive situations, or in situations
- requiring SRCU's read-side deadlock immunity or low read-side
- realtime latency.
-
- Note that, rcu_assign_pointer() and rcu_dereference() relate to
- SRCU just as they do to other forms of RCU.
diff --git a/trunk/Documentation/RCU/rcu.txt b/trunk/Documentation/RCU/rcu.txt
index f84407cba816..02e27bf1d365 100644
--- a/trunk/Documentation/RCU/rcu.txt
+++ b/trunk/Documentation/RCU/rcu.txt
@@ -45,8 +45,7 @@ o How can I see where RCU is currently used in the Linux kernel?
Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu",
"rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh",
- "srcu_read_lock", "srcu_read_unlock", "synchronize_rcu",
- "synchronize_net", and "synchronize_srcu".
+ "synchronize_rcu", and "synchronize_net".
o What guidelines should I follow when writing code that uses RCU?
diff --git a/trunk/Documentation/RCU/torture.txt b/trunk/Documentation/RCU/torture.txt
index 25a3c3f7d378..a4948591607d 100644
--- a/trunk/Documentation/RCU/torture.txt
+++ b/trunk/Documentation/RCU/torture.txt
@@ -28,15 +28,6 @@ nreaders This is the number of RCU reading threads supported.
To properly exercise RCU implementations with preemptible
read-side critical sections.
-nfakewriters This is the number of RCU fake writer threads to run. Fake
- writer threads repeatedly use the synchronous "wait for
- current readers" function of the interface selected by
- torture_type, with a delay between calls to allow for various
- different numbers of writers running in parallel.
- nfakewriters defaults to 4, which provides enough parallelism
- to trigger special cases caused by multiple writers, such as
- the synchronize_srcu() early return optimization.
-
stat_interval The number of seconds between output of torture
statistics (via printk()). Regardless of the interval,
statistics are printed when the module is unloaded.
@@ -53,12 +44,9 @@ test_no_idle_hz Whether or not to test the ability of RCU to operate in
a kernel that disables the scheduling-clock interrupt to
idle CPUs. Boolean parameter, "1" to test, "0" otherwise.
-torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API,
- "rcu_sync" for rcu_read_lock() with synchronous reclamation,
- "rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for
- rcu_read_lock_bh() with synchronous reclamation, "srcu" for
- the "srcu_read_lock()" API, and "sched" for the use of
- preempt_disable() together with synchronize_sched().
+torture_type The type of RCU to test: "rcu" for the rcu_read_lock()
+ API, "rcu_bh" for the rcu_read_lock_bh() API, and "srcu"
+ for the "srcu_read_lock()" API.
verbose Enable debug printk()s. Default is disabled.
@@ -130,21 +118,6 @@ o "Free-Block Circulation": Shows the number of torture structures
as it is only incremented if a torture structure's counter
somehow gets incremented farther than it should.
-Different implementations of RCU can provide implementation-specific
-additional information. For example, SRCU provides the following:
-
- srcu-torture: rtc: f8cf46a8 ver: 355 tfle: 0 rta: 356 rtaf: 0 rtf: 346 rtmbe: 0
- srcu-torture: Reader Pipe: 559738 939 0 0 0 0 0 0 0 0 0
- srcu-torture: Reader Batch: 560434 243 0 0 0 0 0 0 0 0
- srcu-torture: Free-Block Circulation: 355 354 353 352 351 350 349 348 347 346 0
- srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1)
-
-The first four lines are similar to those for RCU. The last line shows
-the per-CPU counter state. The numbers in parentheses are the values
-of the "old" and "current" counters for the corresponding CPU. The
-"idx" value maps the "old" and "current" values to the underlying array,
-and is useful for debugging.
-
USAGE
diff --git a/trunk/Documentation/RCU/whatisRCU.txt b/trunk/Documentation/RCU/whatisRCU.txt
index e0d6d99b8f9b..318df44259b3 100644
--- a/trunk/Documentation/RCU/whatisRCU.txt
+++ b/trunk/Documentation/RCU/whatisRCU.txt
@@ -582,7 +582,7 @@ The rcu_read_lock() and rcu_read_unlock() primitive read-acquire
and release a global reader-writer lock. The synchronize_rcu()
primitive write-acquires this same lock, then immediately releases
it. This means that once synchronize_rcu() exits, all RCU read-side
-critical sections that were in progress before synchronize_rcu() was
+critical sections that were in progress before synchonize_rcu() was
called are guaranteed to have completed -- there is no way that
synchronize_rcu() would have been able to write-acquire the lock
otherwise.
@@ -750,7 +750,7 @@ Or, for those who prefer a side-by-side listing:
Either way, the differences are quite small. Read-side locking moves
to rcu_read_lock() and rcu_read_unlock, update-side locking moves from
-a reader-writer lock to a simple spinlock, and a synchronize_rcu()
+from a reader-writer lock to a simple spinlock, and a synchronize_rcu()
precedes the kfree().
However, there is one potential catch: the read-side and update-side
@@ -778,8 +778,6 @@ Markers for RCU read-side critical sections:
rcu_read_unlock
rcu_read_lock_bh
rcu_read_unlock_bh
- srcu_read_lock
- srcu_read_unlock
RCU pointer/list traversal:
@@ -806,7 +804,6 @@ RCU grace period:
synchronize_net
synchronize_sched
synchronize_rcu
- synchronize_srcu
call_rcu
call_rcu_bh
diff --git a/trunk/Documentation/aoe/todo.txt b/trunk/Documentation/aoe/todo.txt
index c09dfad4aed8..7fee1e1165bc 100644
--- a/trunk/Documentation/aoe/todo.txt
+++ b/trunk/Documentation/aoe/todo.txt
@@ -7,7 +7,7 @@ not been observed, but it would be nice to eliminate any potential for
deadlock under memory pressure.
Because ATA over Ethernet is not fragmented by the kernel's IP code,
-the destructor member of the struct sk_buff is available to the aoe
+the destructore member of the struct sk_buff is available to the aoe
driver. By using a mempool for allocating all but the first few
sk_buffs, and by registering a destructor, we should be able to
efficiently allocate sk_buffs without introducing any potential for
diff --git a/trunk/Documentation/arm/SA1100/serial_UART b/trunk/Documentation/arm/SA1100/serial_UART
index a63966f1d083..aea2e91ca0ef 100644
--- a/trunk/Documentation/arm/SA1100/serial_UART
+++ b/trunk/Documentation/arm/SA1100/serial_UART
@@ -24,8 +24,8 @@ The SA1100 serial port had its major/minor numbers officially assigned:
> 7 = /dev/cusa2 Callout device for ttySA2
>
-You must create those inodes in /dev on the root filesystem used
-by your SA1100-based device:
+If you're not using devfs, you must create those inodes in /dev
+on the root filesystem used by your SA1100-based device:
mknod ttySA0 c 204 5
mknod ttySA1 c 204 6
diff --git a/trunk/Documentation/arm/Samsung-S3C24XX/EB2410ITX.txt b/trunk/Documentation/arm/Samsung-S3C24XX/EB2410ITX.txt
index 26422f0f9080..000e3d7a78b2 100644
--- a/trunk/Documentation/arm/Samsung-S3C24XX/EB2410ITX.txt
+++ b/trunk/Documentation/arm/Samsung-S3C24XX/EB2410ITX.txt
@@ -38,7 +38,7 @@ MTD
---
The NAND and NOR support has been merged from the linux-mtd project.
- Any problems, see http://www.linux-mtd.infradead.org/ for more
+ Any prolbems, see http://www.linux-mtd.infradead.org/ for more
information or up-to-date versions of linux-mtd.
diff --git a/trunk/Documentation/arm/Samsung-S3C24XX/GPIO.txt b/trunk/Documentation/arm/Samsung-S3C24XX/GPIO.txt
index 8caea8c237ee..0822764ec270 100644
--- a/trunk/Documentation/arm/Samsung-S3C24XX/GPIO.txt
+++ b/trunk/Documentation/arm/Samsung-S3C24XX/GPIO.txt
@@ -24,7 +24,7 @@ Headers
header include/asm-arm/arch-s3c2410/hardware.h which can be
included by #include
- A useful amount of documentation can be found in the hardware
+ A useful ammount of documentation can be found in the hardware
header on how the GPIO functions (and others) work.
Whilst a number of these functions do make some checks on what
diff --git a/trunk/Documentation/arm/Samsung-S3C24XX/Overview.txt b/trunk/Documentation/arm/Samsung-S3C24XX/Overview.txt
index dda7ecdde87b..3e46d2a31158 100644
--- a/trunk/Documentation/arm/Samsung-S3C24XX/Overview.txt
+++ b/trunk/Documentation/arm/Samsung-S3C24XX/Overview.txt
@@ -80,7 +80,7 @@ Machines
Adding New Machines
-------------------
- The architecture has been designed to support as many machines as can
+ The archicture has been designed to support as many machines as can
be configured for it in one kernel build, and any future additions
should keep this in mind before altering items outside of their own
machine files.
diff --git a/trunk/Documentation/arm/Samsung-S3C24XX/S3C2412.txt b/trunk/Documentation/arm/Samsung-S3C24XX/S3C2412.txt
index 295d971a15ed..cb82a7fc7901 100644
--- a/trunk/Documentation/arm/Samsung-S3C24XX/S3C2412.txt
+++ b/trunk/Documentation/arm/Samsung-S3C24XX/S3C2412.txt
@@ -80,7 +80,7 @@ RTC
Watchdog
--------
- The watchdog hardware is the same as the S3C2410, and is supported by
+ The watchdog harware is the same as the S3C2410, and is supported by
the s3c2410_wdt driver.
diff --git a/trunk/Documentation/block/as-iosched.txt b/trunk/Documentation/block/as-iosched.txt
index e2a66f8143c5..6f47332c883d 100644
--- a/trunk/Documentation/block/as-iosched.txt
+++ b/trunk/Documentation/block/as-iosched.txt
@@ -99,8 +99,8 @@ contrast, many write requests may be dispatched to the disk controller
at a time during a write batch. It is this characteristic that can make
the anticipatory scheduler perform anomalously with controllers supporting
TCQ, or with hardware striped RAID devices. Setting the antic_expire
-queue parameter (see below) to zero disables this behavior, and the
-anticipatory scheduler behaves essentially like the deadline scheduler.
+queue paramter (see below) to zero disables this behavior, and the anticipatory
+scheduler behaves essentially like the deadline scheduler.
When read anticipation is enabled (antic_expire is not zero), reads
are dispatched to the disk controller one at a time.
diff --git a/trunk/Documentation/block/barrier.txt b/trunk/Documentation/block/barrier.txt
index a272c3db8094..03971518b222 100644
--- a/trunk/Documentation/block/barrier.txt
+++ b/trunk/Documentation/block/barrier.txt
@@ -25,7 +25,7 @@ of the following three ways.
i. For devices which have queue depth greater than 1 (TCQ devices) and
support ordered tags, block layer can just issue the barrier as an
ordered request and the lower level driver, controller and drive
-itself are responsible for making sure that the ordering constraint is
+itself are responsible for making sure that the ordering contraint is
met. Most modern SCSI controllers/drives should support this.
NOTE: SCSI ordered tag isn't currently used due to limitation in the
@@ -42,7 +42,7 @@ iii. Devices which have queue depth of 1. This is a degenerate case
of ii. Just keeping issue order suffices. Ancient SCSI
controllers/drives and IDE drives are in this category.
-2. Forced flushing to physical medium
+2. Forced flushing to physcial medium
Again, if you're not gonna do synchronization with disk drives (dang,
it sounds even more appealing now!), the reason you use I/O barriers
@@ -56,7 +56,7 @@ There are four cases,
i. No write-back cache. Keeping requests ordered is enough.
ii. Write-back cache but no flush operation. There's no way to
-guarantee physical-medium commit order. This kind of devices can't to
+gurantee physical-medium commit order. This kind of devices can't to
I/O barriers.
iii. Write-back cache and flush operation but no FUA (forced unit
diff --git a/trunk/Documentation/block/biodoc.txt b/trunk/Documentation/block/biodoc.txt
index 34bf8f60d8f8..f989a9e839b4 100644
--- a/trunk/Documentation/block/biodoc.txt
+++ b/trunk/Documentation/block/biodoc.txt
@@ -135,7 +135,7 @@ Some new queue property settings:
Sets two variables that limit the size of the request.
- The request queue's max_sectors, which is a soft size in
- units of 512 byte sectors, and could be dynamically varied
+ in units of 512 byte sectors, and could be dynamically varied
by the core kernel.
- The request queue's max_hw_sectors, which is a hard limit
@@ -783,7 +783,7 @@ all the outstanding requests. There's a third helper to do that:
blk_queue_invalidate_tags(request_queue_t *q)
- Clear the internal block tag queue and re-add all the pending requests
+ Clear the internal block tag queue and readd all the pending requests
to the request queue. The driver will receive them again on the
next request_fn run, just like it did the first time it encountered
them.
@@ -890,7 +890,7 @@ Aside:
Kvec i/o:
- Ben LaHaise's aio code uses a slightly different structure instead
+ Ben LaHaise's aio code uses a slighly different structure instead
of kiobufs, called a kvec_cb. This contains an array of
tuples (very much like the networking code), together with a callback function
and data pointer. This is embedded into a brw_cb structure when passed
@@ -988,7 +988,7 @@ elevator_exit_fn Allocate and free any elevator specific storage
for a queue.
4.2 Request flows seen by I/O schedulers
-All requests seen by I/O schedulers strictly follow one of the following three
+All requests seens by I/O schedulers strictly follow one of the following three
flows.
set_req_fn ->
@@ -1203,6 +1203,6 @@ temporarily map a bio into the virtual address space.
and Linus' comments - Jan 2001)
9.2 Discussions about kiobuf and bh design on lkml between sct, linus, alan
et al - Feb-March 2001 (many of the initial thoughts that led to bio were
-brought up in this discussion thread)
+brought up in this discusion thread)
9.3 Discussions on mempool on lkml - Dec 2001.
diff --git a/trunk/Documentation/block/deadline-iosched.txt b/trunk/Documentation/block/deadline-iosched.txt
index be08ffd1e9b8..c918b3a6022d 100644
--- a/trunk/Documentation/block/deadline-iosched.txt
+++ b/trunk/Documentation/block/deadline-iosched.txt
@@ -23,11 +23,11 @@ you can do so by typing:
read_expire (in ms)
-----------
-The goal of the deadline io scheduler is to attempt to guarantee a start
+The goal of the deadline io scheduler is to attempt to guarentee a start
service time for a request. As we focus mainly on read latencies, this is
tunable. When a read request first enters the io scheduler, it is assigned
a deadline that is the current time + the read_expire value in units of
-milliseconds.
+miliseconds.
write_expire (in ms)
diff --git a/trunk/Documentation/cciss.txt b/trunk/Documentation/cciss.txt
index f74affe5c829..9c629ffa0e58 100644
--- a/trunk/Documentation/cciss.txt
+++ b/trunk/Documentation/cciss.txt
@@ -80,7 +80,7 @@ the /proc filesystem entry which the "block" side of the driver creates as
the SCSI core may not yet be initialized (because the driver is a block
driver) and attempting to register it with the SCSI core in such a case
would cause a hang. This is best done via an initialization script
-(typically in /etc/init.d, but could vary depending on distribution).
+(typically in /etc/init.d, but could vary depending on distibution).
For example:
for x in /proc/driver/cciss/cciss[0-9]*
@@ -152,7 +152,7 @@ side during the SCSI error recovery process, the cciss driver only
implements the first two of these actions, aborting the command, and
resetting the device. Additionally, most tape drives will not oblige
in aborting commands, and sometimes it appears they will not even
-obey a reset command, though in most circumstances they will. In
+obey a reset coommand, though in most circumstances they will. In
the case that the command cannot be aborted and the device cannot be
reset, the device will be set offline.
diff --git a/trunk/Documentation/computone.txt b/trunk/Documentation/computone.txt
index 5e2a0c76bfa0..b1cf59b84d97 100644
--- a/trunk/Documentation/computone.txt
+++ b/trunk/Documentation/computone.txt
@@ -199,6 +199,30 @@ boxes this will leave gaps in the sequence of device names. ip2mkdev uses
Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and
cuf0 - cuf255 for callout devices.
+If you are using devfs, existing devices are automatically created within
+the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout
+devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will
+create symbolic links in /dev from the old conventional names to the newer
+devfs names as follows:
+
+ /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3
+ /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3
+ /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255
+ /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255
+
+Only devices for existing ports and boards will be created.
+
+IMPORTANT NOTE: The naming convention used for devfs by this driver
+was changed from 1.2.12 to 1.2.13. The old naming convention was to
+use ttf/%d for the tty device and cuf/%d for the cua device. That
+has been changed to conform to an agreed-upon standard of placing
+all the tty devices under tts. The device names are now tts/F%d for
+the tty device and cua/F%d for the cua devices. If you were using
+the older devfs names, you must update for the newer convention.
+
+You do not need to run ip2mkdev if you are using devfs and only want to
+use the devfs native device names.
+
4. USING THE DRIVERS
@@ -232,15 +256,57 @@ cut out and run as "ip2mkdev" to create the necessary device files. To
use the ip2mkdev script, you must have procfs enabled and the proc file
system mounted on /proc.
+You do not need to run ip2mkdev if you are using devfs and only want to
+use the devfs native device names.
+
+
+6. DEVFS
+
+DEVFS is the DEVice File System available as an add on package for the
+2.2.x kernels and available as a configuration option in 2.3.46 and higher.
+Devfs allows for the automatic creation and management of device names
+under control of the device drivers themselves. The Devfs namespace is
+hierarchical and reduces the clutter present in the normal flat /dev
+namespace. Devfs names and conventional device names may be intermixed.
+A userspace daemon, devfsd, exists to allow for automatic creation and
+management of symbolic links from the devfs name space to the conventional
+names. More details on devfs can be found on the DEVFS home site at
+ or in the file kernel
+documentation files, .../linux/Documentation/filesystems/devfs/README.
+
+If you are using devfs, existing devices are automatically created within
+the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout
+devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will
+create symbolic links in /dev from the old conventional names to the newer
+devfs names as follows:
+
+ /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3
+ /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3
+ /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255
+ /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255
+
+Only devices for existing ports and boards will be created.
+
+IMPORTANT NOTE: The naming convention used for devfs by this driver
+was changed from 1.2.12 to 1.2.13. The old naming convention was to
+use ttf/%d for the tty device and cuf/%d for the cua device. That
+has been changed to conform to an agreed-upon standard of placing
+all the tty devices under tts. The device names are now tts/F%d for
+the tty device and cua/F%d for the cua devices. If you were using
+the older devfs names, you must update for the newer convention.
+
+You do not need to run ip2mkdev if you are using devfs and only want to
+use the devfs native device names.
+
-6. NOTES
+7. NOTES
This is a release version of the driver, but it is impossible to test it
in all configurations of Linux. If there is any anomalous behaviour that
does not match the standard serial port's behaviour please let us know.
-7. ip2mkdev shell script
+8. ip2mkdev shell script
Previously, this script was simply attached here. It is now attached as a
shar archive to make it easier to extract the script from the documentation.
diff --git a/trunk/Documentation/cpu-freq/cpufreq-stats.txt b/trunk/Documentation/cpu-freq/cpufreq-stats.txt
index 53d62c1e1c94..6a82948ff4bd 100644
--- a/trunk/Documentation/cpu-freq/cpufreq-stats.txt
+++ b/trunk/Documentation/cpu-freq/cpufreq-stats.txt
@@ -1,5 +1,5 @@
- CPU frequency and voltage scaling statistics in the Linux(TM) kernel
+ CPU frequency and voltage scaling statictics in the Linux(TM) kernel
L i n u x c p u f r e q - s t a t s d r i v e r
@@ -18,8 +18,8 @@ Contents
1. Introduction
cpufreq-stats is a driver that provices CPU frequency statistics for each CPU.
-These statistics are provided in /sysfs as a bunch of read_only interfaces. This
-interface (when configured) will appear in a separate directory under cpufreq
+This statistics is provided in /sysfs as a bunch of read_only interfaces. This
+interface (when configured) will appear in a seperate directory under cpufreq
in /sysfs (/devices/system/cpu/cpuX/cpufreq/stats/) for each CPU.
Various statistics will form read_only files under this directory.
@@ -53,7 +53,7 @@ drwxr-xr-x 3 root root 0 May 14 15:58 ..
This gives the amount of time spent in each of the frequencies supported by
this CPU. The cat output will have " " pair in each line, which
will mean this CPU spent usertime units of time at . Output
-will have one line for each of the supported frequencies. usertime units here
+will have one line for each of the supported freuencies. usertime units here
is 10mS (similar to other time exported in /proc).
--------------------------------------------------------------------------------
@@ -115,7 +115,7 @@ basic statistics which includes time_in_state and total_trans.
"CPU frequency translation statistics details" (CONFIG_CPU_FREQ_STAT_DETAILS)
provides fine grained cpufreq stats by trans_table. The reason for having a
-separate config option for trans_table is:
+seperate config option for trans_table is:
- trans_table goes against the traditional /sysfs rule of one value per
interface. It provides a whole bunch of value in a 2 dimensional matrix
form.
diff --git a/trunk/Documentation/cpu-freq/governors.txt b/trunk/Documentation/cpu-freq/governors.txt
index 6a9c55bd556b..f4b8dc4237e6 100644
--- a/trunk/Documentation/cpu-freq/governors.txt
+++ b/trunk/Documentation/cpu-freq/governors.txt
@@ -57,7 +57,7 @@ selected for each specific use.
Basically, it's the following flow graph:
-CPU can be set to switch independently | CPU can only be set
+CPU can be set to switch independetly | CPU can only be set
within specific "limits" | to specific frequencies
"CPUfreq policy"
@@ -109,7 +109,7 @@ directory.
2.4 Ondemand
------------
-The CPUfreq governor "ondemand" sets the CPU depending on the
+The CPUfreq govenor "ondemand" sets the CPU depending on the
current usage. To do this the CPU must have the capability to
switch the frequency very quickly. There are a number of sysfs file
accessible parameters:
@@ -137,11 +137,11 @@ have to be made in a row before the CPU frequency is actually lower.
If set to '1' then the frequency decreases as quickly as it increases,
if set to '2' it decreases at half the rate of the increase.
-ignore_nice_load: this parameter takes a value of '0' or '1'. When
-set to '0' (its default), all processes are counted towards the
-'cpu utilisation' value. When set to '1', the processes that are
+ignore_nice_load: this parameter takes a value of '0' or '1', when set
+to '0' (its default) then all processes are counted towards towards the
+'cpu utilisation' value. When set to '1' then processes that are
run with a 'nice' value will not count (and thus be ignored) in the
-overall usage calculation. This is useful if you are running a CPU
+overal usage calculation. This is useful if you are running a CPU
intensive calculation on your laptop that you do not care how long it
takes to complete as you can 'nice' it and prevent it from taking part
in the deciding process of whether to increase your CPU frequency.
diff --git a/trunk/Documentation/cputopology.txt b/trunk/Documentation/cputopology.txt
index b61cb9564023..2b28e9ec4e3a 100644
--- a/trunk/Documentation/cputopology.txt
+++ b/trunk/Documentation/cputopology.txt
@@ -26,7 +26,7 @@ The type of **_id is int.
The type of siblings is cpumask_t.
To be consistent on all architectures, the 4 attributes should have
-default values if their values are unavailable. Below is the rule.
+deafult values if their values are unavailable. Below is the rule.
1) physical_package_id: If cpu has no physical package id, -1 is the
default value.
2) core_id: If cpu doesn't support multi-core, its core id is 0.
diff --git a/trunk/Documentation/dell_rbu.txt b/trunk/Documentation/dell_rbu.txt
index 2c0d631de0cf..941343a7a265 100644
--- a/trunk/Documentation/dell_rbu.txt
+++ b/trunk/Documentation/dell_rbu.txt
@@ -4,7 +4,7 @@ for updating BIOS images on Dell servers and desktops.
Scope:
This document discusses the functionality of the rbu driver only.
-It does not cover the support needed from applications to enable the BIOS to
+It does not cover the support needed from aplications to enable the BIOS to
update itself with the image downloaded in to the memory.
Overview:
@@ -16,8 +16,8 @@ OpenManage and Dell Update packages (DUP).
Libsmbios can also be used to update BIOS on Dell systems go to
http://linux.dell.com/libsmbios/ for details.
-Dell_RBU driver supports BIOS update using the monolithic image and packetized
-image methods. In case of monolithic the driver allocates a contiguous chunk
+Dell_RBU driver supports BIOS update using the monilothic image and packetized
+image methods. In case of moniolithic the driver allocates a contiguous chunk
of physical pages having the BIOS image. In case of packetized the app
using the driver breaks the image in to packets of fixed sizes and the driver
would place each packet in contiguous physical memory. The driver also
@@ -41,7 +41,7 @@ The driver supports two types of update mechanism; monolithic and packetized.
These update mechanism depends upon the BIOS currently running on the system.
Most of the Dell systems support a monolithic update where the BIOS image is
copied to a single contiguous block of physical memory.
-In case of packet mechanism the single memory can be broken in smaller chunks
+In case of packet mechanism the single memory can be broken in smaller chuks
of contiguous memory and the BIOS image is scattered in these packets.
By default the driver uses monolithic memory for the update type. This can be
@@ -52,11 +52,11 @@ echo packet > /sys/devices/platform/dell_rbu/image_type
In packet update mode the packet size has to be given before any packets can
be downloaded. It is done as below
echo XXXX > /sys/devices/platform/dell_rbu/packet_size
-In the packet update mechanism, the user needs to create a new file having
+In the packet update mechanism, the user neesd to create a new file having
packets of data arranged back to back. It can be done as follows
The user creates packets header, gets the chunk of the BIOS image and
-places it next to the packetheader; now, the packetheader + BIOS image chunk
-added together should match the specified packet_size. This makes one
+placs it next to the packetheader; now, the packetheader + BIOS image chunk
+added to geather should match the specified packet_size. This makes one
packet, the user needs to create more such packets out of the entire BIOS
image file and then arrange all these packets back to back in to one single
file.
@@ -93,8 +93,8 @@ read back the image downloaded.
NOTE:
This driver requires a patch for firmware_class.c which has the modified
request_firmware_nowait function.
-Also after updating the BIOS image a user mode application needs to execute
-code which sends the BIOS update request to the BIOS. So on the next reboot
-the BIOS knows about the new image downloaded and it updates itself.
-Also don't unload the rbu driver if the image has to be updated.
+Also after updating the BIOS image an user mdoe application neeeds to execute
+code which message the BIOS update request to the BIOS. So on the next reboot
+the BIOS knows about the new image downloaded and it updates it self.
+Also don't unload the rbu drive if the image has to be updated.
diff --git a/trunk/Documentation/devices.txt b/trunk/Documentation/devices.txt
index 28c4f79662c2..addc67b1d770 100644
--- a/trunk/Documentation/devices.txt
+++ b/trunk/Documentation/devices.txt
@@ -2005,7 +2005,7 @@ Your cooperation is appreciated.
116 char Advanced Linux Sound Driver (ALSA)
116 block MicroMemory battery backed RAM adapter (NVRAM)
- Supports 16 boards, 15 partitions each.
+ Supports 16 boards, 15 paritions each.
Requested by neilb at cse.unsw.edu.au.
0 = /dev/umem/d0 Whole of first board
@@ -3094,7 +3094,7 @@ Your cooperation is appreciated.
This major is reserved to assist the expansion to a
larger number space. No device nodes with this major
should ever be created on the filesystem.
- (This is probably not true anymore, but I'll leave it
+ (This is probaly not true anymore, but I'll leave it
for now /Torben)
---LARGE MAJORS!!!!!---
@@ -3205,7 +3205,7 @@ for a session; this includes virtual consoles, serial ports, and
pseudoterminals (PTYs).
All terminal devices share a common set of capabilities known as line
-disciplines; these include the common terminal line discipline as well
+diciplines; these include the common terminal line dicipline as well
as SLIP and PPP modes.
All terminal devices are named similarly; this section explains the
@@ -3285,7 +3285,7 @@ port TTY, for which no alternate device would exist.
Pseudoterminals (PTYs)
Pseudoterminals, or PTYs, are used to create login sessions or provide
-other capabilities requiring a TTY line discipline (including SLIP or
+other capabilities requiring a TTY line dicipline (including SLIP or
PPP capability) to arbitrary data-generation processes. Each PTY has
a master side, named /dev/pty[p-za-e][0-9a-f], and a slave side, named
/dev/tty[p-za-e][0-9a-f]. The kernel arbitrates the use of PTYs by
diff --git a/trunk/Documentation/driver-model/class.txt b/trunk/Documentation/driver-model/class.txt
index 548505f14aa4..2d1d893a5e5d 100644
--- a/trunk/Documentation/driver-model/class.txt
+++ b/trunk/Documentation/driver-model/class.txt
@@ -12,7 +12,7 @@ device. The following device classes have been identified:
Each device class defines a set of semantics and a programming interface
that devices of that class adhere to. Device drivers are the
-implementation of that programming interface for a particular device on
+implemention of that programming interface for a particular device on
a particular bus.
Device classes are agnostic with respect to what bus a device resides
diff --git a/trunk/Documentation/driver-model/driver.txt b/trunk/Documentation/driver-model/driver.txt
index 82132169d47a..59806c9761f7 100644
--- a/trunk/Documentation/driver-model/driver.txt
+++ b/trunk/Documentation/driver-model/driver.txt
@@ -178,7 +178,7 @@ the driver to that device.
A driver's probe() may return a negative errno value to indicate that
the driver did not bind to this device, in which case it should have
-released all resources it allocated.
+released all reasources it allocated.
int (*remove) (struct device * dev);
diff --git a/trunk/Documentation/driver-model/overview.txt b/trunk/Documentation/driver-model/overview.txt
index 07236ed968da..2050c9ffc629 100644
--- a/trunk/Documentation/driver-model/overview.txt
+++ b/trunk/Documentation/driver-model/overview.txt
@@ -57,7 +57,7 @@ the two.
The PCI bus layer freely accesses the fields of struct device. It knows about
the structure of struct pci_dev, and it should know the structure of struct
-device. Individual PCI device drivers that have been converted to the current
+device. Individual PCI device drivers that have been converted the the current
driver model generally do not and should not touch the fields of struct device,
unless there is a strong compelling reason to do so.
diff --git a/trunk/Documentation/dvb/avermedia.txt b/trunk/Documentation/dvb/avermedia.txt
index e44c009ac6c5..8bab8461a4af 100644
--- a/trunk/Documentation/dvb/avermedia.txt
+++ b/trunk/Documentation/dvb/avermedia.txt
@@ -45,9 +45,9 @@ Assumptions and Introduction
by circuitry on the card and is often presented uncompressed.
For a PAL TV signal encoded at a resolution of 768x576 24-bit
color pixels over 25 frames per second - a fair amount of data
- is generated and must be processed by the PC before it can be
+ is generated and must be proceesed by the PC before it can be
displayed on the video monitor screen. Some Analogue TV cards
- for PCs have onboard MPEG2 encoders which permit the raw
+ for PC's have onboard MPEG2 encoders which permit the raw
digital data stream to be presented to the PC in an encoded
and compressed form - similar to the form that is used in
Digital TV.
diff --git a/trunk/Documentation/dvb/cards.txt b/trunk/Documentation/dvb/cards.txt
index ca58e339d85f..9e10092440e1 100644
--- a/trunk/Documentation/dvb/cards.txt
+++ b/trunk/Documentation/dvb/cards.txt
@@ -5,7 +5,7 @@ Hardware supported by the linuxtv.org DVB drivers
frontends (i.e. tuner / demodulator units) used, usually without
changing the product name, revision number or specs. Some cards
are also available in versions with different frontends for
- DVB-S/DVB-C/DVB-T. Thus the frontend drivers are listed separately.
+ DVB-S/DVB-C/DVB-T. Thus the frontend drivers are listed seperately.
Note 1: There is no guarantee that every frontend driver works
out of the box with every card, because of different wiring.
diff --git a/trunk/Documentation/dvb/ci.txt b/trunk/Documentation/dvb/ci.txt
index 531239b29082..95f0e73b2135 100644
--- a/trunk/Documentation/dvb/ci.txt
+++ b/trunk/Documentation/dvb/ci.txt
@@ -32,7 +32,7 @@ This application requires the following to function properly as of now.
descrambler to function,
eg: $ ca_zap channels.conf "TMC"
- (d) Hopefully enjoy your favourite subscribed channel as you do with
+ (d) Hopeflly Enjoy your favourite subscribed channel as you do with
a FTA card.
(3) Currently ca_zap, and dst_test, both are meant for demonstration
@@ -65,7 +65,7 @@ Modules that have been tested by this driver at present are
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With the High Level CI approach any new card with almost any random
architecture can be implemented with this style, the definitions
-inside the switch statement can be easily adapted for any card, thereby
+insidethe switch statement can be easily adapted for any card, thereby
eliminating the need for any additional ioctls.
The disadvantage is that the driver/hardware has to manage the rest. For
diff --git a/trunk/Documentation/dvb/faq.txt b/trunk/Documentation/dvb/faq.txt
index dbcedf5833ee..a42132d60dc8 100644
--- a/trunk/Documentation/dvb/faq.txt
+++ b/trunk/Documentation/dvb/faq.txt
@@ -5,7 +5,7 @@ Some very frequently asked questions about linuxtv-dvb
It's not a bug, it's a feature. Because the frontends have
significant power requirements (and hence get very hot), they
are powered down if they are unused (i.e. if the frontend device
- is closed). The dvb-core.o module parameter "dvb_shutdown_timeout"
+ is closed). The dvb-core.o module paramter "dvb_shutdown_timeout"
allow you to change the timeout (default 5 seconds). Setting the
timeout to 0 disables the timeout feature.
@@ -138,7 +138,7 @@ Some very frequently asked questions about linuxtv-dvb
- v4l2-common: common functions for Video4Linux-2 drivers
- - v4l1-compat: backward compatibility layer for Video4Linux-1 legacy
+ - v4l1-compat: backward compatiblity layer for Video4Linux-1 legacy
applications
- dvb-core: DVB core module. This provides you with the
@@ -153,7 +153,7 @@ Some very frequently asked questions about linuxtv-dvb
- video-buf: capture helper module for the saa7146_vv driver. This
one is responsible to handle capture buffers.
- - dvb-ttpci: The main driver for AV7110 based, full-featured
+ - dvb-ttpci: The main driver for AV7110 based, full-featued
DVB-S/C/T cards
eof
diff --git a/trunk/Documentation/ecryptfs.txt b/trunk/Documentation/ecryptfs.txt
deleted file mode 100644
index 01d8a08351ac..000000000000
--- a/trunk/Documentation/ecryptfs.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-eCryptfs: A stacked cryptographic filesystem for Linux
-
-eCryptfs is free software. Please see the file COPYING for details.
-For documentation, please see the files in the doc/ subdirectory. For
-building and installation instructions please see the INSTALL file.
-
-Maintainer: Phillip Hellewell
-Lead developer: Michael A. Halcrow
-Developers: Michael C. Thompson
- Kent Yoder
-Web Site: http://ecryptfs.sf.net
-
-This software is currently undergoing development. Make sure to
-maintain a backup copy of any data you write into eCryptfs.
-
-eCryptfs requires the userspace tools downloadable from the
-SourceForge site:
-
-http://sourceforge.net/projects/ecryptfs/
-
-Userspace requirements include:
- - David Howells' userspace keyring headers and libraries (version
- 1.0 or higher), obtainable from
- http://people.redhat.com/~dhowells/keyutils/
- - Libgcrypt
-
-
-NOTES
-
-In the beta/experimental releases of eCryptfs, when you upgrade
-eCryptfs, you should copy the files to an unencrypted location and
-then copy the files back into the new eCryptfs mount to migrate the
-files.
-
-
-MOUNT-WIDE PASSPHRASE
-
-Create a new directory into which eCryptfs will write its encrypted
-files (i.e., /root/crypt). Then, create the mount point directory
-(i.e., /mnt/crypt). Now it's time to mount eCryptfs:
-
-mount -t ecryptfs /root/crypt /mnt/crypt
-
-You should be prompted for a passphrase and a salt (the salt may be
-blank).
-
-Try writing a new file:
-
-echo "Hello, World" > /mnt/crypt/hello.txt
-
-The operation will complete. Notice that there is a new file in
-/root/crypt that is at least 12288 bytes in size (depending on your
-host page size). This is the encrypted underlying file for what you
-just wrote. To test reading, from start to finish, you need to clear
-the user session keyring:
-
-keyctl clear @u
-
-Then umount /mnt/crypt and mount again per the instructions given
-above.
-
-cat /mnt/crypt/hello.txt
-
-
-NOTES
-
-eCryptfs version 0.1 should only be mounted on (1) empty directories
-or (2) directories containing files only created by eCryptfs. If you
-mount a directory that has pre-existing files not created by eCryptfs,
-then behavior is undefined. Do not run eCryptfs in higher verbosity
-levels unless you are doing so for the sole purpose of debugging or
-development, since secret values will be written out to the system log
-in that case.
-
-
-Mike Halcrow
-mhalcrow@us.ibm.com
diff --git a/trunk/Documentation/eisa.txt b/trunk/Documentation/eisa.txt
index 6a099edadd62..8c8388da868a 100644
--- a/trunk/Documentation/eisa.txt
+++ b/trunk/Documentation/eisa.txt
@@ -18,7 +18,7 @@ The EISA infrastructure is made up of three parts :
- The bus code implements most of the generic code. It is shared
among all the architectures that the EISA code runs on. It
- implements bus probing (detecting EISA cards available on the bus),
+ implements bus probing (detecting EISA cards avaible on the bus),
allocates I/O resources, allows fancy naming through sysfs, and
offers interfaces for driver to register.
@@ -84,7 +84,7 @@ struct eisa_driver {
id_table : an array of NULL terminated EISA id strings,
followed by an empty string. Each string can
- optionally be paired with a driver-dependant value
+ optionnaly be paired with a driver-dependant value
(driver_data).
driver : a generic driver, such as described in
diff --git a/trunk/Documentation/exception.txt b/trunk/Documentation/exception.txt
index 2d5aded64247..3cb39ade290e 100644
--- a/trunk/Documentation/exception.txt
+++ b/trunk/Documentation/exception.txt
@@ -10,7 +10,7 @@ int verify_area(int type, const void * addr, unsigned long size)
function (which has since been replaced by access_ok()).
This function verified that the memory area starting at address
-'addr' and of size 'size' was accessible for the operation specified
+addr and of size size was accessible for the operation specified
in type (read or write). To do this, verify_read had to look up the
virtual memory area (vma) that contained the address addr. In the
normal case (correctly working program), this test was successful.
diff --git a/trunk/Documentation/fb/fbcon.txt b/trunk/Documentation/fb/fbcon.txt
index 99ea58e65eff..f373df12ed4c 100644
--- a/trunk/Documentation/fb/fbcon.txt
+++ b/trunk/Documentation/fb/fbcon.txt
@@ -163,7 +163,7 @@ from the console layer before unloading the driver. The VGA driver cannot be
unloaded if it is still bound to the console layer. (See
Documentation/console/console.txt for more information).
-This is more complicated in the case of the framebuffer console (fbcon),
+This is more complicated in the case of the the framebuffer console (fbcon),
because fbcon is an intermediate layer between the console and the drivers:
console ---> fbcon ---> fbdev drivers ---> hardware
diff --git a/trunk/Documentation/fb/sisfb.txt b/trunk/Documentation/fb/sisfb.txt
index 2e68e503e72f..3b50c517a08d 100644
--- a/trunk/Documentation/fb/sisfb.txt
+++ b/trunk/Documentation/fb/sisfb.txt
@@ -72,7 +72,7 @@ information. Additionally, "modinfo sisfb" gives an overview over all
supported options including some explanation.
The desired display mode can be specified using the keyword "mode" with
-a parameter in one of the following formats:
+a parameter in one of the follwing formats:
- XxYxDepth or
- XxY-Depth or
- XxY-Depth@Rate or
diff --git a/trunk/Documentation/fb/sstfb.txt b/trunk/Documentation/fb/sstfb.txt
index df27f5bf15db..628d7ffa8769 100644
--- a/trunk/Documentation/fb/sstfb.txt
+++ b/trunk/Documentation/fb/sstfb.txt
@@ -48,12 +48,12 @@ Module Usage
Module insertion:
# insmod sstfb.o
- you should see some strange output from the board:
+ you should see some strange output frome the board:
a big blue square, a green and a red small squares and a vertical
- white rectangle. why? the function's name is self-explanatory:
+ white rectangle. why ? the function's name is self explanatory :
"sstfb_test()"...
(if you don't have a second monitor, you'll have to plug your monitor
- directly to the 2D videocard to see what you're typing)
+ directely to the 2D videocard to see what you're typing)
# con2fb /dev/fbx /dev/ttyx
bind a tty to the new frame buffer. if you already have a frame
buffer driver, the voodoo fb will likely be /dev/fb1. if not,
@@ -72,12 +72,12 @@ Module Usage
Kernel/Modules Options
- You can pass some options to the sstfb module, and via the kernel
- command line when the driver is compiled in:
+ You can pass some otions to sstfb module, and via the kernel command
+ line when the driver is compiled in :
for module : insmod sstfb.o option1=value1 option2=value2 ...
in kernel : video=sstfb:option1,option2:value2,option3 ...
- sstfb supports the following options :
+ sstfb supports the folowing options :
Module Kernel Description
@@ -95,11 +95,11 @@ inverse=1 inverse Supposed to enable inverse console.
clipping=1 clipping Enable or disable clipping.
clipping=0 noclipping With clipping enabled, all offscreen
- reads and writes are discarded.
+ reads and writes are disgarded.
Default: enable clipping.
gfxclk=x gfxclk:x Force graphic clock frequency (in MHz).
- Be careful with this option, it may be
+ Be carefull with this option, it may be
DANGEROUS.
Default: auto
50Mhz for Voodoo 1,
@@ -137,23 +137,23 @@ Bugs
- The driver is 16 bpp only, 24/32 won't work.
- The driver is not your_favorite_toy-safe. this includes SMP...
[Actually from inspection it seems to be safe - Alan]
- - When using XFree86 FBdev (X over fbdev) you may see strange color
+ - when using XFree86 FBdev (X over fbdev) you may see strange color
patterns at the border of your windows (the pixels lose the lowest
- byte -> basically the blue component and some of the green). I'm unable
+ byte -> basicaly the blue component nd some of the green) . I'm unable
to reproduce this with XFree86-3.3, but one of the testers has this
- problem with XFree86-4. Apparently recent Xfree86-4.x solve this
+ problem with XFree86-4. apparently recent Xfree86-4.x solve this
problem.
- I didn't really test changing the palette, so you may find some weird
things when playing with that.
- - Sometimes the driver will not recognise the DAC, and the
- initialisation will fail. This is specifically true for
- voodoo 2 boards, but it should be solved in recent versions. Please
- contact me.
- - The 24/32 is not likely to work anytime soon, knowing that the
- hardware does ... unusual things in 24/32 bpp.
- - When used with another video board, current limitations of the linux
- console subsystem can cause some troubles, specifically, you should
- disable software scrollback, as it can oops badly ...
+ - Sometimes the driver will not recognise the DAC , and the
+ initialisation will fail. this is specificaly true for
+ voodoo 2 boards , but it should be solved in recent versions. please
+ contact me .
+ - the 24/32 is not likely to work anytime soon , knowing that the
+ hardware does ... unusual thigs in 24/32 bpp
+ - When used with anther video board, current limitations of linux
+ console subsystem can cause some troubles, specificaly, you should
+ disable software scrollback , as it can oops badly ...
Todo
@@ -161,7 +161,7 @@ Todo
- Buy more coffee.
- test/port to other arch.
- try to add panning using tweeks with front and back buffer .
- - try to implement accel on voodoo2, this board can actually do a
+ - try to implement accel on voodoo2 , this board can actualy do a
lot in 2D even if it was sold as a 3D only board ...
ghoz.
diff --git a/trunk/Documentation/feature-removal-schedule.txt b/trunk/Documentation/feature-removal-schedule.txt
index 24f3c63b3017..2e410f5aa750 100644
--- a/trunk/Documentation/feature-removal-schedule.txt
+++ b/trunk/Documentation/feature-removal-schedule.txt
@@ -29,6 +29,14 @@ Who: Adrian Bunk
---------------------------
+What: drivers that were depending on OBSOLETE_OSS_DRIVER
+ (config options already removed)
+When: before 2.6.19
+Why: OSS drivers with ALSA replacements
+Who: Adrian Bunk
+
+---------------------------
+
What: raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When: November 2006
Why: Deprecated in favour of the new ioctl-based rawiso interface, which is
@@ -176,7 +184,7 @@ Who: Greg Kroah-Hartman
---------------------------
What: USB driver API moves to EXPORT_SYMBOL_GPL
-When: February 2008
+When: Febuary 2008
Files: include/linux/usb.h, drivers/usb/core/driver.c
Why: The USB subsystem has changed a lot over time, and it has been
possible to create userspace USB drivers using usbfs/libusb/gadgetfs
diff --git a/trunk/Documentation/filesystems/00-INDEX b/trunk/Documentation/filesystems/00-INDEX
index 3c384c0cf86e..16dec61d7671 100644
--- a/trunk/Documentation/filesystems/00-INDEX
+++ b/trunk/Documentation/filesystems/00-INDEX
@@ -26,6 +26,8 @@ cramfs.txt
- info on the cram filesystem for small storage (ROMs etc).
dentry-locking.txt
- info on the RCU-based dcache locking model.
+devfs/
+ - directory containing devfs documentation.
directory-locking
- info about the locking scheme used for directory operations.
dlmfs.txt
diff --git a/trunk/Documentation/filesystems/befs.txt b/trunk/Documentation/filesystems/befs.txt
index 67391a15949a..877a7b1d46ec 100644
--- a/trunk/Documentation/filesystems/befs.txt
+++ b/trunk/Documentation/filesystems/befs.txt
@@ -7,7 +7,7 @@ WARNING
Make sure you understand that this is alpha software. This means that the
implementation is neither complete nor well-tested.
-I DISCLAIM ALL RESPONSIBILITY FOR ANY POSSIBLE BAD EFFECTS OF THIS CODE!
+I DISCLAIM ALL RESPONSIBILTY FOR ANY POSSIBLE BAD EFFECTS OF THIS CODE!
LICENSE
=====
@@ -22,7 +22,7 @@ He has been working on the code since Aug 13, 2001. See the changelog for
details.
Original Author: Makoto Kato
-His original code can still be found at:
+His orriginal code can still be found at:
Does anyone know of a more current email address for Makoto? He doesn't
respond to the address given above...
@@ -39,7 +39,7 @@ Which is it, BFS or BEFS?
================
Be, Inc said, "BeOS Filesystem is officially called BFS, not BeFS".
But Unixware Boot Filesystem is called bfs, too. And they are already in
-the kernel. Because of this naming conflict, on Linux the BeOS
+the kernel. Because of this nameing conflict, on Linux the BeOS
filesystem is called befs.
HOW TO INSTALL
@@ -57,7 +57,7 @@ if the patching step fails (i.e. there are rejected hunks), you can try to
figure it out yourself (it shouldn't be hard), or mail the maintainer
(Will Dyson ) for help.
-step 2. Configuration & make kernel
+step 2. Configuretion & make kernel
The linux kernel has many compile-time options. Most of them are beyond the
scope of this document. I suggest the Kernel-HOWTO document as a good general
diff --git a/trunk/Documentation/filesystems/configfs/configfs.txt b/trunk/Documentation/filesystems/configfs/configfs.txt
index c3a7afb5eabf..c4ff96b7c4e0 100644
--- a/trunk/Documentation/filesystems/configfs/configfs.txt
+++ b/trunk/Documentation/filesystems/configfs/configfs.txt
@@ -1,5 +1,5 @@
-configfs - Userspace-driven kernel object configuration.
+configfs - Userspace-driven kernel object configuation.
Joel Becker
@@ -254,7 +254,7 @@ using the group _init() functions on the group.
Finally, when userspace calls rmdir(2) on the item or group,
ct_group_ops->drop_item() is called. As a config_group is also a
-config_item, it is not necessary for a separate drop_group() method.
+config_item, it is not necessary for a seperate drop_group() method.
The subsystem must config_item_put() the reference that was initialized
upon item allocation. If a subsystem has no work to do, it may omit
the ct_group_ops->drop_item() method, and configfs will call
@@ -406,7 +406,7 @@ that condition is met.
Far better would be an explicit action notifying the subsystem that the
config_item is ready to go. More importantly, an explicit action allows
-the subsystem to provide feedback as to whether the attributes are
+the subsystem to provide feedback as to whether the attibutes are
initialized in a way that makes sense. configfs provides this as
committable items.
@@ -422,7 +422,7 @@ support mkdir(2) or rmdir(2) either. It only allows rename(2). The
"pending" directory does allow mkdir(2) and rmdir(2). An item is
created in the "pending" directory. Its attributes can be modified at
will. Userspace commits the item by renaming it into the "live"
-directory. At this point, the subsystem receives the ->commit_item()
+directory. At this point, the subsystem recieves the ->commit_item()
callback. If all required attributes are filled to satisfaction, the
method returns zero and the item is moved to the "live" directory.
diff --git a/trunk/Documentation/filesystems/directory-locking b/trunk/Documentation/filesystems/directory-locking
index d7099a9266fb..34380d4fbce3 100644
--- a/trunk/Documentation/filesystems/directory-locking
+++ b/trunk/Documentation/filesystems/directory-locking
@@ -82,7 +82,7 @@ own descendent. Moreover, there is exactly one cross-directory rename
Consider the object blocking the cross-directory rename. One
of its descendents is locked by cross-directory rename (otherwise we
-would again have an infinite set of contended objects). But that
+would again have an infinite set of of contended objects). But that
means that cross-directory rename is taking locks out of order. Due
to (2) the order hadn't changed since we had acquired filesystem lock.
But locking rules for cross-directory rename guarantee that we do not
diff --git a/trunk/Documentation/filesystems/dlmfs.txt b/trunk/Documentation/filesystems/dlmfs.txt
index c50bbb2d52b4..9afab845a906 100644
--- a/trunk/Documentation/filesystems/dlmfs.txt
+++ b/trunk/Documentation/filesystems/dlmfs.txt
@@ -68,7 +68,7 @@ request for an already acquired lock will not generate another DLM
call. Userspace programs are assumed to handle their own local
locking.
-Two levels of locks are supported - Shared Read, and Exclusive.
+Two levels of locks are supported - Shared Read, and Exlcusive.
Also supported is a Trylock operation.
For information on the libo2dlm interface, please see o2dlm.h,
diff --git a/trunk/Documentation/filesystems/ext2.txt b/trunk/Documentation/filesystems/ext2.txt
index 4333e836c495..3dd2872416a1 100644
--- a/trunk/Documentation/filesystems/ext2.txt
+++ b/trunk/Documentation/filesystems/ext2.txt
@@ -205,7 +205,7 @@ Reserved Space
In ext2, there is a mechanism for reserving a certain number of blocks
for a particular user (normally the super-user). This is intended to
-allow for the system to continue functioning even if non-privileged users
+allow for the system to continue functioning even if non-priveleged users
fill up all the space available to them (this is independent of filesystem
quotas). It also keeps the filesystem from filling up entirely which
helps combat fragmentation.
diff --git a/trunk/Documentation/filesystems/files.txt b/trunk/Documentation/filesystems/files.txt
index 133e213ebb72..8c206f4e0250 100644
--- a/trunk/Documentation/filesystems/files.txt
+++ b/trunk/Documentation/filesystems/files.txt
@@ -55,7 +55,7 @@ the fdtable structure -
2. Reading of the fdtable as described above must be protected
by rcu_read_lock()/rcu_read_unlock().
-3. For any update to the fd table, files->file_lock must
+3. For any update to the the fd table, files->file_lock must
be held.
4. To look up the file structure given an fd, a reader
diff --git a/trunk/Documentation/filesystems/ntfs.txt b/trunk/Documentation/filesystems/ntfs.txt
index 35f105b29e3e..638cbd3d2b00 100644
--- a/trunk/Documentation/filesystems/ntfs.txt
+++ b/trunk/Documentation/filesystems/ntfs.txt
@@ -13,7 +13,7 @@ Table of contents
- Using NTFS volume and stripe sets
- The Device-Mapper driver
- The Software RAID / MD driver
- - Limitations when using the MD driver
+ - Limitiations when using the MD driver
- ChangeLog
@@ -43,7 +43,7 @@ There is plenty of additional information on the linux-ntfs web site
at http://linux-ntfs.sourceforge.net/
The web site has a lot of additional information, such as a comprehensive
-FAQ, documentation on the NTFS on-disk format, information on the Linux-NTFS
+FAQ, documentation on the NTFS on-disk format, informaiton on the Linux-NTFS
userspace utilities, etc.
@@ -383,14 +383,14 @@ Software RAID / MD driver. For which you need to set up your /etc/raidtab
appropriately (see man 5 raidtab).
Linear volume sets, i.e. linear raid, as well as stripe sets, i.e. raid level
-0, have been tested and work fine (though see section "Limitations when using
+0, have been tested and work fine (though see section "Limitiations when using
the MD driver with NTFS volumes" especially if you want to use linear raid).
Even though untested, there is no reason why mirrors, i.e. raid level 1, and
stripes with parity, i.e. raid level 5, should not work, too.
You have to use the "persistent-superblock 0" option for each raid-disk in the
NTFS volume/stripe you are configuring in /etc/raidtab as the persistent
-superblock used by the MD driver would damage the NTFS volume.
+superblock used by the MD driver would damange the NTFS volume.
Windows by default uses a stripe chunk size of 64k, so you probably want the
"chunk-size 64k" option for each raid-disk, too.
@@ -435,7 +435,7 @@ setup correctly to avoid the possibility of causing damage to the data on the
ntfs volume.
-Limitations when using the Software RAID / MD driver
+Limitiations when using the Software RAID / MD driver
-----------------------------------------------------
Using the md driver will not work properly if any of your NTFS partitions have
diff --git a/trunk/Documentation/filesystems/proc.txt b/trunk/Documentation/filesystems/proc.txt
index 3355e6920105..7240ee7515de 100644
--- a/trunk/Documentation/filesystems/proc.txt
+++ b/trunk/Documentation/filesystems/proc.txt
@@ -410,7 +410,7 @@ VmallocChunk: 111088 kB
this memory, making it slower to access than lowmem.
LowTotal:
LowFree: Lowmem is memory which can be used for everything that
- highmem can be used for, but it is also available for the
+ highmem can be used for, but it is also availble for the
kernel's use for its own data structures. Among many
other things, it is where everything from the Slab is
allocated. Bad things happen when you're out of lowmem.
@@ -1255,7 +1255,7 @@ to allocate (but not use) more memory than is actually available.
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
- allocate slightly more memory in this mode. This is the
+ allocate slighly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
@@ -1588,7 +1588,7 @@ Enable the strict RFC793 interpretation of the TCP urgent pointer field. The
default is to use the BSD compatible interpretation of the urgent pointer
pointing to the first byte after the urgent data. The RFC793 interpretation is
to have it point to the last byte of urgent data. Enabling this option may
-lead to interoperability problems. Disabled by default.
+lead to interoperatibility problems. Disabled by default.
tcp_syncookies
--------------
@@ -1733,7 +1733,7 @@ error_burst and error_cost
These parameters are used to limit how many ICMP destination unreachable to
send from the host in question. ICMP destination unreachable messages are
-sent when we cannot reach the next hop while trying to transmit a packet.
+sent when we can not reach the next hop, while trying to transmit a packet.
It will also print some error messages to kernel logs if someone is ignoring
our ICMP redirects. The higher the error_cost factor is, the fewer
destination unreachable and error messages will be let through. Error_burst
@@ -1857,7 +1857,7 @@ proxy_qlen
Maximum queue length of the delayed proxy arp timer. (see proxy_delay).
-app_solicit
+app_solcit
----------
Determines the number of requests to send to the user level ARP daemon. Use 0
diff --git a/trunk/Documentation/filesystems/spufs.txt b/trunk/Documentation/filesystems/spufs.txt
index 982645a1981d..8edc3952eff4 100644
--- a/trunk/Documentation/filesystems/spufs.txt
+++ b/trunk/Documentation/filesystems/spufs.txt
@@ -84,7 +84,7 @@ FILES
/ibox
The second SPU to CPU communication mailbox. This file is similar to
the first mailbox file, but can be read in blocking I/O mode, and the
- poll family of system calls can be used to wait for it. The possible
+ poll familiy of system calls can be used to wait for it. The possible
operations on an open ibox file are:
read(2)
@@ -105,7 +105,7 @@ FILES
/wbox
- The CPU to SPU communation mailbox. It is write-only and can be written
+ The CPU to SPU communation mailbox. It is write-only can can be written
in units of 32 bits. If the mailbox is full, write() will block and
poll can be used to wait for it becoming empty again. The possible
operations on an open wbox file are: write(2) If a count smaller than
@@ -359,7 +359,7 @@ ERRORS
EFAULT npc is not a valid pointer or status is neither NULL nor a valid
pointer.
- EINTR A signal occurred while spu_run was in progress. The npc value
+ EINTR A signal occured while spu_run was in progress. The npc value
has been updated to the new program counter value if necessary.
EINVAL fd is not a file descriptor returned from spu_create(2).
diff --git a/trunk/Documentation/filesystems/sysfs.txt b/trunk/Documentation/filesystems/sysfs.txt
index 4b5ca26e5048..89b1d196ca80 100644
--- a/trunk/Documentation/filesystems/sysfs.txt
+++ b/trunk/Documentation/filesystems/sysfs.txt
@@ -238,7 +238,7 @@ Top Level Directory Layout
The sysfs directory arrangement exposes the relationship of kernel
data structures.
-The top level sysfs directory looks like:
+The top level sysfs diretory looks like:
block/
bus/
diff --git a/trunk/Documentation/filesystems/tmpfs.txt b/trunk/Documentation/filesystems/tmpfs.txt
index 6dd050878a20..1773106976a2 100644
--- a/trunk/Documentation/filesystems/tmpfs.txt
+++ b/trunk/Documentation/filesystems/tmpfs.txt
@@ -39,7 +39,7 @@ tmpfs has the following uses:
tmpfs /dev/shm tmpfs defaults 0 0
Remember to create the directory that you intend to mount tmpfs on
- if necessary.
+ if necessary (/dev/shm is automagically created if you use devfs).
This mount is _not_ needed for SYSV shared memory. The internal
mount is used for that. (In the 2.3 kernel versions it was
@@ -63,7 +63,7 @@ size: The limit of allocated bytes for this tmpfs instance. The
nr_blocks: The same as size, but in blocks of PAGE_CACHE_SIZE.
nr_inodes: The maximum number of inodes for this instance. The default
is half of the number of your physical RAM pages, or (on a
- machine with highmem) the number of lowmem RAM pages,
+ a machine with highmem) the number of lowmem RAM pages,
whichever is the lower.
These parameters accept a suffix k, m or g for kilo, mega and giga and
diff --git a/trunk/Documentation/filesystems/vfat.txt b/trunk/Documentation/filesystems/vfat.txt
index 069cb1094300..2001abbc60e6 100644
--- a/trunk/Documentation/filesystems/vfat.txt
+++ b/trunk/Documentation/filesystems/vfat.txt
@@ -35,7 +35,7 @@ iocharset=name -- Character set to use for converting between the
you should consider the following option instead.
utf8= -- UTF-8 is the filesystem safe version of Unicode that
- is used by the console. It can be enabled for the
+ is used by the console. It can be be enabled for the
filesystem with this option. If 'uni_xlate' gets set,
UTF-8 gets disabled.
diff --git a/trunk/Documentation/filesystems/vfs.txt b/trunk/Documentation/filesystems/vfs.txt
index 7737bfd03cf8..cd07c21b8400 100644
--- a/trunk/Documentation/filesystems/vfs.txt
+++ b/trunk/Documentation/filesystems/vfs.txt
@@ -410,7 +410,7 @@ otherwise noted.
put_link: called by the VFS to release resources allocated by
follow_link(). The cookie returned by follow_link() is passed
- to this method as the last parameter. It is used by
+ to to this method as the last parameter. It is used by
filesystems such as NFS where page cache is not stable
(i.e. page that was installed when the symbolic link walk
started might not be in the page cache at the end of the
diff --git a/trunk/Documentation/fujitsu/frv/mmu-layout.txt b/trunk/Documentation/fujitsu/frv/mmu-layout.txt
index db10250df6be..11dcc5679887 100644
--- a/trunk/Documentation/fujitsu/frv/mmu-layout.txt
+++ b/trunk/Documentation/fujitsu/frv/mmu-layout.txt
@@ -233,7 +233,7 @@ related kernel services:
(*) __debug_mmu.iamr[]
(*) __debug_mmu.damr[]
- These receive the current IAMR and DAMR contents. These can be viewed with the _amr
+ These receive the current IAMR and DAMR contents. These can be viewed with with the _amr
GDB macro:
(gdb) _amr
diff --git a/trunk/Documentation/highuid.txt b/trunk/Documentation/highuid.txt
index 76034d9dbfc0..2c33926b9099 100644
--- a/trunk/Documentation/highuid.txt
+++ b/trunk/Documentation/highuid.txt
@@ -57,7 +57,7 @@ What's left to be done for 32-bit UIDs on all Linux architectures:
Other filesystems have not been checked yet.
-- The ncpfs and smpfs filesystems cannot presently use 32-bit UIDs in
+- The ncpfs and smpfs filesystems can not presently use 32-bit UIDs in
all ioctl()s. Some new ioctl()s have been added with 32-bit UIDs, but
more are needed. (as well as new user<->kernel data structures)
diff --git a/trunk/Documentation/hrtimers.txt b/trunk/Documentation/hrtimers.txt
index ce31f65e12e7..7620ff735faf 100644
--- a/trunk/Documentation/hrtimers.txt
+++ b/trunk/Documentation/hrtimers.txt
@@ -10,7 +10,7 @@ back and forth trying to integrate high-resolution and high-precision
features into the existing timer framework, and after testing various
such high-resolution timer implementations in practice, we came to the
conclusion that the timer wheel code is fundamentally not suitable for
-such an approach. We initially didn't believe this ('there must be a way
+such an approach. We initially didnt believe this ('there must be a way
to solve this'), and spent a considerable effort trying to integrate
things into the timer wheel, but we failed. In hindsight, there are
several reasons why such integration is hard/impossible:
@@ -27,7 +27,7 @@ several reasons why such integration is hard/impossible:
high-res timers.
- the unpredictable [O(N)] overhead of cascading leads to delays which
- necessitate a more complex handling of high resolution timers, which
+ necessiate a more complex handling of high resolution timers, which
in turn decreases robustness. Such a design still led to rather large
timing inaccuracies. Cascading is a fundamental property of the timer
wheel concept, it cannot be 'designed out' without unevitably
@@ -58,7 +58,7 @@ several reasons why such integration is hard/impossible:
The primary users of precision timers are user-space applications that
utilize nanosleep, posix-timers and itimer interfaces. Also, in-kernel
users like drivers and subsystems which require precise timed events
-(e.g. multimedia) can benefit from the availability of a separate
+(e.g. multimedia) can benefit from the availability of a seperate
high-resolution timer subsystem as well.
While this subsystem does not offer high-resolution clock sources just
@@ -68,7 +68,7 @@ The increasing demand for realtime and multimedia applications along
with other potential users for precise timers gives another reason to
separate the "timeout" and "precise timer" subsystems.
-Another potential benefit is that such a separation allows even more
+Another potential benefit is that such a seperation allows even more
special-purpose optimization of the existing timer wheel for the low
resolution and low precision use cases - once the precision-sensitive
APIs are separated from the timer wheel and are migrated over to
@@ -96,8 +96,8 @@ file systems. The rbtree is solely used for time sorted ordering, while
a separate list is used to give the expiry code fast access to the
queued timers, without having to walk the rbtree.
-(This separate list is also useful for later when we'll introduce
-high-resolution clocks, where we need separate pending and expired
+(This seperate list is also useful for later when we'll introduce
+high-resolution clocks, where we need seperate pending and expired
queues while keeping the time-order intact.)
Time-ordered enqueueing is not purely for the purposes of
diff --git a/trunk/Documentation/ia64/efirtc.txt b/trunk/Documentation/ia64/efirtc.txt
index 057e6bebda8f..ede2c1e51cd7 100644
--- a/trunk/Documentation/ia64/efirtc.txt
+++ b/trunk/Documentation/ia64/efirtc.txt
@@ -26,7 +26,7 @@ to initialize the system view of the time during boot.
Because we wanted to minimize the impact on existing user-level apps using
the CMOS clock, we decided to expose an API that was very similar to the one
used today with the legacy RTC driver (driver/char/rtc.c). However, because
-EFI provides a simpler services, not all ioctl() are available. Also
+EFI provides a simpler services, not all all ioctl() are available. Also
new ioctl()s have been introduced for things that EFI provides but not the
legacy.
diff --git a/trunk/Documentation/ia64/fsys.txt b/trunk/Documentation/ia64/fsys.txt
index 59dd689d9b86..28da181f9966 100644
--- a/trunk/Documentation/ia64/fsys.txt
+++ b/trunk/Documentation/ia64/fsys.txt
@@ -165,7 +165,7 @@ complicated cases.
* Signal handling
The delivery of (asynchronous) signals must be delayed until fsys-mode
-is exited. This is accomplished with the help of the lower-privilege
+is exited. This is acomplished with the help of the lower-privilege
transfer trap: arch/ia64/kernel/process.c:do_notify_resume_user()
checks whether the interrupted task was in fsys-mode and, if so, sets
PSR.lp and returns immediately. When fsys-mode is exited via the
diff --git a/trunk/Documentation/ia64/mca.txt b/trunk/Documentation/ia64/mca.txt
index f097c60cba1b..a71cc6a67ef7 100644
--- a/trunk/Documentation/ia64/mca.txt
+++ b/trunk/Documentation/ia64/mca.txt
@@ -12,7 +12,7 @@ by locks is indeterminate, including linked lists.
---
The complicated ia64 MCA process. All of this is mandated by Intel's
-specification for ia64 SAL, error recovery and unwind, it is not as
+specification for ia64 SAL, error recovery and and unwind, it is not as
if we have a choice here.
* MCA occurs on one cpu, usually due to a double bit memory error.
@@ -94,7 +94,7 @@ if we have a choice here.
INIT is less complicated than MCA. Pressing the nmi button or using
the equivalent command on the management console sends INIT to all
-cpus. SAL picks one of the cpus as the monarch and the rest are
+cpus. SAL picks one one of the cpus as the monarch and the rest are
slaves. All the OS INIT handlers are entered at approximately the same
time. The OS monarch prints the state of all tasks and returns, after
which the slaves return and the system resumes.
diff --git a/trunk/Documentation/ibm-acpi.txt b/trunk/Documentation/ibm-acpi.txt
index 71aa40345272..8b3fd82b2ce7 100644
--- a/trunk/Documentation/ibm-acpi.txt
+++ b/trunk/Documentation/ibm-acpi.txt
@@ -450,7 +450,7 @@ his laptop (the location of sensors may vary on other models):
No commands can be written to this file.
-EXPERIMENTAL: Embedded controller register dump -- /proc/acpi/ibm/ecdump
+EXPERIMENTAL: Embedded controller reigster dump -- /proc/acpi/ibm/ecdump
------------------------------------------------------------------------
This feature is marked EXPERIMENTAL because the implementation
diff --git a/trunk/Documentation/ide.txt b/trunk/Documentation/ide.txt
index 0bf38baa2db9..29866fbfb229 100644
--- a/trunk/Documentation/ide.txt
+++ b/trunk/Documentation/ide.txt
@@ -281,7 +281,7 @@ Summary of ide driver parameters for kernel command line
"idex=serialize" : do not overlap operations on idex. Please note
that you will have to specify this option for
- both the respective primary and secondary channel
+ both the respecitve primary and secondary channel
to take effect.
"idex=four" : four drives on idex and ide(x^1) share same ports
diff --git a/trunk/Documentation/input/amijoy.txt b/trunk/Documentation/input/amijoy.txt
index 4f0e89df5c51..3b8b2d43a68e 100644
--- a/trunk/Documentation/input/amijoy.txt
+++ b/trunk/Documentation/input/amijoy.txt
@@ -79,10 +79,10 @@ JOY0DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
JOY1DAT Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 X7 X6 X5 X4 X3 X2 X1 X0
0=LEFT CONTROLLER PAIR, 1=RIGHT CONTROLLER PAIR.
- (4 counters total). The bit usage for both left and right
+ (4 counters total).The bit usage for both left and right
addresses is shown below. Each 6 bit counter (Y7-Y2,X7-X2) is
clocked by 2 of the signals input from the mouse serial
- stream. Starting with first bit received:
+ stream. Starting with first bit recived:
+-------------------+-----------------------------------------+
| Serial | Bit Name | Description |
diff --git a/trunk/Documentation/input/atarikbd.txt b/trunk/Documentation/input/atarikbd.txt
index 1e7e5853ba4c..8fb896c74114 100644
--- a/trunk/Documentation/input/atarikbd.txt
+++ b/trunk/Documentation/input/atarikbd.txt
@@ -10,7 +10,7 @@ provides a convenient connection point for a mouse and switch-type joysticks.
The ikbd processor also maintains a time-of-day clock with one second
resolution.
The ikbd has been designed to be general enough that it can be used with a
-variety of new computer products. Product variations in a number of
+ariety of new computer products. Product variations in a number of
keyswitches, mouse resolution, etc. can be accommodated.
The ikbd communicates with the main processor over a high speed bi-directional
serial interface. It can function in a variety of modes to facilitate
@@ -30,7 +30,7 @@ is obtained by ORing 0x80 with the make code.
The special codes 0xF6 through 0xFF are reserved for use as follows:
0xF6 status report
0xF7 absolute mouse position record
- 0xF8-0xFB relative mouse position records (lsbs determined by
+ 0xF8-0xFB relative mouse position records(lsbs determind by
mouse button states)
0xFC time-of-day
0xFD joystick report (both sticks)
@@ -84,7 +84,7 @@ selected.
4.2 Absolute Position reporting
The ikbd can also maintain absolute mouse position. Commands exist for
-resetting the mouse position, setting X/Y scaling, and interrogating the
+reseting the mouse position, setting X/Y scaling, and interrogating the
current mouse position.
4.3 Mouse Cursor Key Mode
@@ -406,7 +406,7 @@ INTERROGATION MODE.
9.18 SET JOYSTICK MONITORING
0x17
- rate ; time between samples in hundredths of a second
+ rate ; time between samples in hundreths of a second
Returns: (in packets of two as long as in mode)
%000000xy ; where y is JOYSTICK1 Fire button
; and x is JOYSTICK0 Fire button
@@ -522,7 +522,7 @@ controller memory. The time between data bytes must be less than 20ms.
0x20 ; memory access
{ data } ; 6 data bytes starting at ADR
-This command permits the host to read from the ikbd controller memory.
+This comand permits the host to read from the ikbd controller memory.
9.26 CONTROLLER EXECUTE
diff --git a/trunk/Documentation/input/cs461x.txt b/trunk/Documentation/input/cs461x.txt
index afe0d6543e09..6181747a14d8 100644
--- a/trunk/Documentation/input/cs461x.txt
+++ b/trunk/Documentation/input/cs461x.txt
@@ -27,7 +27,7 @@ This driver have the basic support for PCI devices only; there is no
ISA or PnP ISA cards supported. AFAIK the ns558 have support for Crystal
ISA and PnP ISA series.
-The driver works with ALSA drivers simultaneously. For example, the xracer
+The driver works witn ALSA drivers simultaneously. For exmple, the xracer
uses joystick as input device and PCM device as sound output in one time.
There are no sound or input collisions detected. The source code have
comments about them; but I've found the joystick can be initialized
diff --git a/trunk/Documentation/input/ff.txt b/trunk/Documentation/input/ff.txt
index 085eb15b45b7..c53b1c11aa40 100644
--- a/trunk/Documentation/input/ff.txt
+++ b/trunk/Documentation/input/ff.txt
@@ -38,7 +38,7 @@ joystick.txt for details.
There is an utility called fftest that will allow you to test the driver.
% fftest /dev/input/eventXX
-3. Instructions to the developer
+3. Instructions to the developper
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All interactions are done using the event API. That is, you can use ioctl()
and write() on /dev/input/eventXX.
diff --git a/trunk/Documentation/input/gameport-programming.txt b/trunk/Documentation/input/gameport-programming.txt
index 14e0a8b70225..1ba3d322e0ac 100644
--- a/trunk/Documentation/input/gameport-programming.txt
+++ b/trunk/Documentation/input/gameport-programming.txt
@@ -18,8 +18,8 @@ Make sure struct gameport is initialized to 0 in all other fields. The
gameport generic code will take care of the rest.
If your hardware supports more than one io address, and your driver can
-choose which one to program the hardware to, starting from the more exotic
-addresses is preferred, because the likelihood of clashing with the standard
+choose which one program the hardware to, starting from the more exotic
+addresses is preferred, because the likelyhood of clashing with the standard
0x201 address is smaller.
Eg. if your driver supports addresses 0x200, 0x208, 0x210 and 0x218, then
diff --git a/trunk/Documentation/input/input.txt b/trunk/Documentation/input/input.txt
index ff8cea0225f9..47137e75fdb8 100644
--- a/trunk/Documentation/input/input.txt
+++ b/trunk/Documentation/input/input.txt
@@ -68,8 +68,8 @@ will be available as a character device on major 13, minor 63:
crw-r--r-- 1 root root 13, 63 Mar 28 22:45 mice
- This device has to be created.
- The commands to create it by hand are:
+ This device has to be created, unless you use devfs, in which case it's
+created automatically. The commands to do create it by hand are:
cd /dev
mkdir input
@@ -154,7 +154,7 @@ about it.
3.2 Event handlers
~~~~~~~~~~~~~~~~~~
- Event handlers distribute the events from the devices to userland and
+ Event handlers distrubite the events from the devices to userland and
kernel, as needed.
3.2.1 keybdev
@@ -230,7 +230,7 @@ generated in the kernel straight to the program, with timestamps. The
API is still evolving, but should be useable now. It's described in
section 5.
- This should be the way for GPM and X to get keyboard and mouse
+ This should be the way for GPM and X to get keyboard and mouse mouse
events. It allows for multihead in X without any specific multihead
kernel support. The event codes are the same on all architectures and
are hardware independent.
@@ -279,7 +279,7 @@ struct input_event {
};
'time' is the timestamp, it returns the time at which the event happened.
-Type is for example EV_REL for relative moment, REL_KEY for a keypress or
+Type is for example EV_REL for relative momement, REL_KEY for a keypress or
release. More types are defined in include/linux/input.h.
'code' is event code, for example REL_X or KEY_BACKSPACE, again a complete
@@ -289,3 +289,24 @@ list is in include/linux/input.h.
EV_REL, absolute new value for EV_ABS (joysticks ...), or 0 for EV_KEY for
release, 1 for keypress and 2 for autorepeat.
+6. Contacts
+~~~~~~~~~~~
+ This effort has its home page at:
+
+ http://www.suse.cz/development/input/
+
+You'll find both the latest HID driver and the complete Input driver
+there as well as information how to access the CVS repository for
+latest revisions of the drivers.
+
+ There is also a mailing list for this:
+
+ majordomo@atrey.karlin.mff.cuni.cz
+
+Send "subscribe linux-input" to subscribe to it.
+
+The input changes are also being worked on as part of the LinuxConsole
+project, see:
+
+ http://sourceforge.net/projects/linuxconsole/
+
diff --git a/trunk/Documentation/input/joystick-parport.txt b/trunk/Documentation/input/joystick-parport.txt
index ede5f33daad3..d537c48cc6d0 100644
--- a/trunk/Documentation/input/joystick-parport.txt
+++ b/trunk/Documentation/input/joystick-parport.txt
@@ -456,8 +456,8 @@ uses the following kernel/module command line:
8 | Sony PSX DDR controller
9 | SNES mouse
- The exact type of the PSX controller type is autoprobed when used, so
-hot swapping should work (but is not recommended).
+ The exact type of the PSX controller type is autoprobed when used so
+hot swapping should work (but is not recomended).
Should you want to use more than one of parallel ports at once, you can use
gamecon.map2 and gamecon.map3 as additional command line parameters for two
@@ -465,8 +465,8 @@ more parallel ports.
There are two options specific to PSX driver portion. gamecon.psx_delay sets
the command delay when talking to the controllers. The default of 25 should
-work but you can try lowering it for better performance. If your pads don't
-respond try raising it until they work. Setting the type to 8 allows the
+work but you can try lowering it for better performace. If your pads don't
+respond try raising it untill they work. Setting the type to 8 allows the
driver to be used with Dance Dance Revolution or similar games. Arrow keys are
registered as key presses instead of X and Y axes.
diff --git a/trunk/Documentation/input/joystick.txt b/trunk/Documentation/input/joystick.txt
index 389de9bd9878..841c353297e6 100644
--- a/trunk/Documentation/input/joystick.txt
+++ b/trunk/Documentation/input/joystick.txt
@@ -60,7 +60,7 @@ and install it before going on.
2.2 Device nodes
~~~~~~~~~~~~~~~~
-For applications to be able to use the joysticks,
+For applications to be able to use the joysticks, in you don't use devfs,
you'll have to manually create these nodes in /dev:
cd /dev
diff --git a/trunk/Documentation/input/yealink.txt b/trunk/Documentation/input/yealink.txt
index 0a8c97e87d47..0962c5c948be 100644
--- a/trunk/Documentation/input/yealink.txt
+++ b/trunk/Documentation/input/yealink.txt
@@ -87,13 +87,13 @@ Line 3 Format : 888888888888
Format description:
- From a userspace perspective the world is separated into "digits" and "icons".
+ From a user space perspective the world is seperated in "digits" and "icons".
A digit can have a character set, an icon can only be ON or OFF.
Format specifier
'8' : Generic 7 segment digit with individual addressable segments
- Reduced capability 7 segm digit, when segments are hard wired together.
+ Reduced capabillity 7 segm digit, when segments are hard wired together.
'1' : 2 segments digit only able to produce a 1.
'e' : Most significant day of the month digit,
able to produce at least 1 2 3.
diff --git a/trunk/Documentation/ioctl/hdio.txt b/trunk/Documentation/ioctl/hdio.txt
index c19efdeace2c..11c9be49f37c 100644
--- a/trunk/Documentation/ioctl/hdio.txt
+++ b/trunk/Documentation/ioctl/hdio.txt
@@ -203,7 +203,7 @@ HDIO_SET_MULTCOUNT change IDE blockmode
Source code comments read:
- This is tightly woven into the driver->do_special cannot
+ This is tightly woven into the driver->do_special can not
touch. DON'T do it again until a total personality rewrite
is committed.
diff --git a/trunk/Documentation/isdn/INTERFACE.fax b/trunk/Documentation/isdn/INTERFACE.fax
index 9c8c6d914ec7..7e5731319e30 100644
--- a/trunk/Documentation/isdn/INTERFACE.fax
+++ b/trunk/Documentation/isdn/INTERFACE.fax
@@ -26,7 +26,7 @@ Structure T30_s description:
If the HL-driver receives ISDN_CMD_FAXCMD, all needed information
is in this struct set by the LL.
To signal information to the LL, the HL-driver has to set the
- parameters and use ISDN_STAT_FAXIND.
+ the parameters and use ISDN_STAT_FAXIND.
(Please refer to INTERFACE)
Structure T30_s:
diff --git a/trunk/Documentation/isdn/README.hysdn b/trunk/Documentation/isdn/README.hysdn
index eeca11f00ccd..56cc59df1fb7 100644
--- a/trunk/Documentation/isdn/README.hysdn
+++ b/trunk/Documentation/isdn/README.hysdn
@@ -1,6 +1,6 @@
$Id: README.hysdn,v 1.3.6.1 2001/02/10 14:41:19 kai Exp $
The hysdn driver has been written by
-Werner Cornelius (werner@isdn4linux.de or werner@titro.de)
+by Werner Cornelius (werner@isdn4linux.de or werner@titro.de)
for Hypercope GmbH Aachen Germany. Hypercope agreed to publish this driver
under the GNU General Public License.
diff --git a/trunk/Documentation/java.txt b/trunk/Documentation/java.txt
index c768dc63b34e..e4814c213301 100644
--- a/trunk/Documentation/java.txt
+++ b/trunk/Documentation/java.txt
@@ -22,7 +22,7 @@ other program after you have done the following:
the kernel (CONFIG_BINFMT_MISC) and set it up properly.
If you choose to compile it as a module, you will have
to insert it manually with modprobe/insmod, as kmod
- cannot easily be supported with binfmt_misc.
+ can not easily be supported with binfmt_misc.
Read the file 'binfmt_misc.txt' in this directory to know
more about the configuration process.
diff --git a/trunk/Documentation/kbuild/kconfig-language.txt b/trunk/Documentation/kbuild/kconfig-language.txt
index 125093c3ef76..003fccc14d24 100644
--- a/trunk/Documentation/kbuild/kconfig-language.txt
+++ b/trunk/Documentation/kbuild/kconfig-language.txt
@@ -1,7 +1,7 @@
Introduction
------------
-The configuration database is a collection of configuration options
+The configuration database is collection of configuration options
organized in a tree structure:
+- Code maturity level options
@@ -110,7 +110,7 @@ applicable everywhere (see syntax).
the indentation level, this means it ends at the first line which has
a smaller indentation than the first line of the help text.
"---help---" and "help" do not differ in behaviour, "---help---" is
- used to help visually separate configuration logic from help within
+ used to help visually seperate configuration logic from help within
the file as an aid to developers.
@@ -226,7 +226,7 @@ menuconfig:
"menuconfig"
-This is similar to the simple config entry above, but it also gives a
+This is similiar to the simple config entry above, but it also gives a
hint to front ends, that all suboptions should be displayed as a
separate list of options.
diff --git a/trunk/Documentation/kbuild/makefiles.txt b/trunk/Documentation/kbuild/makefiles.txt
index 50f4eddf899c..e2cbd59cf2d0 100644
--- a/trunk/Documentation/kbuild/makefiles.txt
+++ b/trunk/Documentation/kbuild/makefiles.txt
@@ -390,7 +390,7 @@ more details, with real examples.
The kernel may be built with several different versions of
$(CC), each supporting a unique set of features and options.
kbuild provide basic support to check for valid options for $(CC).
- $(CC) is usually the gcc compiler, but other alternatives are
+ $(CC) is useally the gcc compiler, but other alternatives are
available.
as-option
diff --git a/trunk/Documentation/kdump/kdump.txt b/trunk/Documentation/kdump/kdump.txt
index 99f2d4d4bf7d..08bafa8c1caa 100644
--- a/trunk/Documentation/kdump/kdump.txt
+++ b/trunk/Documentation/kdump/kdump.txt
@@ -249,7 +249,7 @@ If die() is called, and it happens to be a thread with pid 0 or 1, or die()
is called inside interrupt context or die() is called and panic_on_oops is set,
the system will boot into the dump-capture kernel.
-On powererpc systems when a soft-reset is generated, die() is called by all cpus and the system will boot into the dump-capture kernel.
+On powererpc systems when a soft-reset is generated, die() is called by all cpus and the system system will boot into the dump-capture kernel.
For testing purposes, you can trigger a crash by using "ALT-SysRq-c",
"echo c > /proc/sysrq-trigger or write a module to force the panic.
diff --git a/trunk/Documentation/kernel-docs.txt b/trunk/Documentation/kernel-docs.txt
index b53bccbd9727..99d24f2943ee 100644
--- a/trunk/Documentation/kernel-docs.txt
+++ b/trunk/Documentation/kernel-docs.txt
@@ -290,6 +290,17 @@
Description: Very nice 92 pages GPL book on the topic of modules
programming. Lots of examples.
+ * Title: "Device File System (devfs) Overview"
+ Author: Richard Gooch.
+ URL: http://www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html
+ Keywords: filesystem, /dev, devfs, dynamic devices, major/minor
+ allocation, device management.
+ Description: Document describing Richard Gooch's controversial
+ devfs, which allows for dynamic devices, only shows present
+ devices in /dev, gets rid of major/minor numbers allocation
+ problems, and allows for hundreds of identical devices (which some
+ USB systems might demand soon).
+
* Title: "I/O Event Handling Under Linux"
Author: Richard Gooch.
URL: http://www.atnf.csiro.au/~rgooch/linux/docs/io-events.html
diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt
index ff571f9298e0..137e993f4329 100644
--- a/trunk/Documentation/kernel-parameters.txt
+++ b/trunk/Documentation/kernel-parameters.txt
@@ -289,6 +289,9 @@ and is between 256 and 4096 characters. It is defined in the file
autotest [IA64]
+ awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth
+ Format: ,,
+
aztcd= [HW,CD] Aztech CD268 CDROM driver
Format: ,0x79 (?)
@@ -352,9 +355,9 @@ and is between 256 and 4096 characters. It is defined in the file
clock= [BUGS=IA-32, HW] gettimeofday clocksource override.
[Deprecated]
- Forces specified clocksource (if available) to be used
+ Forces specified clocksource (if avaliable) to be used
when calculating gettimeofday(). If specified
- clocksource is not available, it defaults to PIT.
+ clocksource is not avalible, it defaults to PIT.
Format: { pit | tsc | cyclone | pmtmr }
disable_8254_timer
@@ -533,6 +536,10 @@ and is between 256 and 4096 characters. It is defined in the file
Default value is 0.
Value can be changed at runtime via /selinux/enforce.
+ es1370= [HW,OSS]
+ Format: [,]
+ See also header of sound/oss/es1370.c.
+
es1371= [HW,OSS]
Format: ,[,[]]
See also header of sound/oss/es1371.c.
@@ -573,6 +580,9 @@ and is between 256 and 4096 characters. It is defined in the file
gscd= [HW,CD]
Format:
+ gus= [HW,OSS]
+ Format: ,,,
+
gvp11= [HW,SCSI]
hashdist= [KNL,NUMA] Large hashes allocated during boot
@@ -601,8 +611,8 @@ and is between 256 and 4096 characters. It is defined in the file
noirqbalance [IA-32,SMP,KNL] Disable kernel irq balancing
i8042.direct [HW] Put keyboard port into non-translated mode
- i8042.dumbkbd [HW] Pretend that controller can only read data from
- keyboard and cannot control its state
+ i8042.dumbkbd [HW] Pretend that controlled can only read data from
+ keyboard and can not control its state
(Don't attempt to blink the leds)
i8042.noaux [HW] Don't check for auxiliary (== mouse) port
i8042.nokbd [HW] Don't check/create keyboard port
@@ -831,6 +841,12 @@ and is between 256 and 4096 characters. It is defined in the file
(machvec) in a generic kernel.
Example: machvec=hpzx1_swiotlb
+ mad16= [HW,OSS] Format:
+ ,,,,,,
+
+ maui= [HW,OSS]
+ Format: ,
+
max_loop= [LOOP] Maximum number of loopback devices that can
be mounted
Format: <1-256>
@@ -1098,6 +1114,9 @@ and is between 256 and 4096 characters. It is defined in the file
opl3= [HW,OSS]
Format:
+ opl3sa= [HW,OSS]
+ Format: ,,,,,
+
opl3sa2= [HW,OSS] Format:
,,,,,,,[,,
Run specified binary instead of /init from the ramdisk,
@@ -1345,7 +1368,7 @@ and is between 256 and 4096 characters. It is defined in the file
reboot= [BUGS=IA-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
Format: [,[,...]]
- See arch/*/kernel/reboot.c or arch/*/kernel/process.c
+ See arch/*/kernel/reboot.c.
reserve= [KNL,BUGS] Force the kernel to ignore some iomem area
@@ -1432,6 +1455,9 @@ and is between 256 and 4096 characters. It is defined in the file
sg_def_reserved_size= [SCSI]
+ sgalaxy= [HW,OSS]
+ Format: ,,,,
+
shapers= [NET]
Maximal number of shapers.
@@ -1572,6 +1598,9 @@ and is between 256 and 4096 characters. It is defined in the file
snd-ymfpci= [HW,ALSA]
+ sonicvibes= [HW,OSS]
+ Format:
+
sonycd535= [HW,CD]
Format: [,]
diff --git a/trunk/Documentation/keys.txt b/trunk/Documentation/keys.txt
index 3da586bc7859..e373f0212843 100644
--- a/trunk/Documentation/keys.txt
+++ b/trunk/Documentation/keys.txt
@@ -671,7 +671,7 @@ The keyctl syscall functions are:
Note that this setting is inherited across fork/exec.
- [1] The default is: the thread keyring if there is one, otherwise
+ [1] The default default is: the thread keyring if there is one, otherwise
the process keyring if there is one, otherwise the session keyring if
there is one, otherwise the user default session keyring.
@@ -708,14 +708,14 @@ The keyctl syscall functions are:
If the specified key is 0, then any assumed authority will be divested.
- The assumed authoritative key is inherited across fork and exec.
+ The assumed authorititive key is inherited across fork and exec.
===============
KERNEL SERVICES
===============
-The kernel services for key management are fairly simple to deal with. They can
+The kernel services for key managment are fairly simple to deal with. They can
be broken down into two areas: keys and key types.
Dealing with keys is fairly straightforward. Firstly, the kernel service
diff --git a/trunk/Documentation/kobject.txt b/trunk/Documentation/kobject.txt
index e44855513b3d..949f7b5a2053 100644
--- a/trunk/Documentation/kobject.txt
+++ b/trunk/Documentation/kobject.txt
@@ -51,7 +51,7 @@ more complex object types. It provides a set of basic fields that
almost all complex data types share. kobjects are intended to be
embedded in larger data structures and replace fields they duplicate.
-1.2 Definition
+1.2 Defintion
struct kobject {
char name[KOBJ_NAME_LEN];
diff --git a/trunk/Documentation/laptop-mode.txt b/trunk/Documentation/laptop-mode.txt
index c487186eb2b9..5696e879449b 100644
--- a/trunk/Documentation/laptop-mode.txt
+++ b/trunk/Documentation/laptop-mode.txt
@@ -152,7 +152,7 @@ loaded on demand while the application executes) and sequentially accessed data
DO_REMOUNTS:
The control script automatically remounts any mounted journaled filesystems
-with appropriate commit interval options. When this option is set to 0, this
+with approriate commit interval options. When this option is set to 0, this
feature is disabled.
DO_REMOUNT_NOATIME:
diff --git a/trunk/Documentation/lockdep-design.txt b/trunk/Documentation/lockdep-design.txt
index dab123db5a4f..55a7e4fa8cc2 100644
--- a/trunk/Documentation/lockdep-design.txt
+++ b/trunk/Documentation/lockdep-design.txt
@@ -133,7 +133,7 @@ cases there is an inherent "natural" ordering between the two objects
(defined by the properties of the hierarchy), and the kernel grabs the
locks in this fixed order on each of the objects.
-An example of such an object hierarchy that results in "nested locking"
+An example of such an object hieararchy that results in "nested locking"
is that of a "whole disk" block-dev object and a "partition" block-dev
object; the partition is "part of" the whole device and as long as one
always takes the whole disk lock as a higher lock than the partition
@@ -158,11 +158,11 @@ enum bdev_bd_mutex_lock_class
In this case the locking is done on a bdev object that is known to be a
partition.
-The validator treats a lock that is taken in such a nested fashion as a
+The validator treats a lock that is taken in such a nested fasion as a
separate (sub)class for the purposes of validation.
Note: When changing code to use the _nested() primitives, be careful and
-check really thoroughly that the hierarchy is correctly mapped; otherwise
+check really thoroughly that the hiearchy is correctly mapped; otherwise
you can get false positives or false negatives.
Proof of 100% correctness:
@@ -170,7 +170,7 @@ Proof of 100% correctness:
The validator achieves perfect, mathematical 'closure' (proof of locking
correctness) in the sense that for every simple, standalone single-task
-locking sequence that occurred at least once during the lifetime of the
+locking sequence that occured at least once during the lifetime of the
kernel, the validator proves it with a 100% certainty that no
combination and timing of these locking sequences can cause any class of
lock related deadlock. [*]
diff --git a/trunk/Documentation/m68k/kernel-options.txt b/trunk/Documentation/m68k/kernel-options.txt
index 1c41db21d3c1..d5d3f064f552 100644
--- a/trunk/Documentation/m68k/kernel-options.txt
+++ b/trunk/Documentation/m68k/kernel-options.txt
@@ -415,7 +415,7 @@ switch to another mode once Linux has started.
The first 3 parameters of this sub-option should be obvious: ,
and give the dimensions of the screen and the number of
-planes (depth). The depth is the logarithm to base 2 of the number
+planes (depth). The depth is is the logarithm to base 2 of the number
of colors possible. (Or, the other way round: The number of colors is
2^depth).
diff --git a/trunk/Documentation/mca.txt b/trunk/Documentation/mca.txt
index aabce4ad90f9..60913354cb7d 100644
--- a/trunk/Documentation/mca.txt
+++ b/trunk/Documentation/mca.txt
@@ -177,7 +177,7 @@ Currently, there are a number of MCA-specific device drivers.
with clones that have a different adapter id than the original
NE/2.
-6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Adapter/A and
+6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Aapter/A and
Reply Sound Blaster/SCSI (SCSI part)
Better support for these cards than the driver for ISA.
Supports multiple cards with IRQ sharing.
diff --git a/trunk/Documentation/md.txt b/trunk/Documentation/md.txt
index 2202f5dc8ac2..9ae9e4078985 100644
--- a/trunk/Documentation/md.txt
+++ b/trunk/Documentation/md.txt
@@ -62,7 +62,7 @@ be reconstructed (due to no parity).
For this reason, md will normally refuse to start such an array. This
requires the sysadmin to take action to explicitly start the array
-despite possible corruption. This is normally done with
+desipite possible corruption. This is normally done with
mdadm --assemble --force ....
This option is not really available if the array has the root
@@ -175,7 +175,7 @@ All md devices contain:
raid levels that involve striping (1,4,5,6,10). The address space
of the array is conceptually divided into chunks and consecutive
chunks are striped onto neighbouring devices.
- The size should be at least PAGE_SIZE (4k) and should be a power
+ The size should be atleast PAGE_SIZE (4k) and should be a power
of 2. This can only be set while assembling an array
component_size
@@ -214,8 +214,8 @@ All md devices contain:
safe_mode_delay
When an md array has seen no write requests for a certain period
of time, it will be marked as 'clean'. When another write
- request arrives, the array is marked as 'dirty' before the write
- commences. This is known as 'safe_mode'.
+ request arrive, the array is marked as 'dirty' before the write
+ commenses. This is known as 'safe_mode'.
The 'certain period' is controlled by this file which stores the
period as a number of seconds. The default is 200msec (0.200).
Writing a value of 0 disables safemode.
@@ -307,8 +307,8 @@ Each directory contains:
This applies only to raid1 arrays.
spare - device is working, but not a full member.
This includes spares that are in the process
- of being recovered to
- This list may grow in future.
+ of being recoverred to
+ This list make grow in future.
This can be written to.
Writing "faulty" simulates a failure on the device.
Writing "remove" removes the device from the array.
@@ -330,7 +330,7 @@ Each directory contains:
This gives the role that the device has in the array. It will
either be 'none' if the device is not active in the array
(i.e. is a spare or has failed) or an integer less than the
- 'raid_disks' number for the array indicating which position
+ 'raid_disks' number for the array indicating which possition
it currently fills. This can only be set while assembling an
array. A device for which this is set is assumed to be working.
@@ -353,7 +353,7 @@ in the array. These are named
rdNN
-where 'NN' is the position in the array, starting from 0.
+where 'NN' is the possition in the array, starting from 0.
So for a 3 drive array there will be rd0, rd1, rd2.
These are symbolic links to the appropriate 'dev-XXX' entry.
Thus, for example,
diff --git a/trunk/Documentation/memory-barriers.txt b/trunk/Documentation/memory-barriers.txt
index 994355b0cd19..46b9b389df35 100644
--- a/trunk/Documentation/memory-barriers.txt
+++ b/trunk/Documentation/memory-barriers.txt
@@ -670,7 +670,7 @@ effectively random order, despite the write barrier issued by CPU 1:
In the above example, CPU 2 perceives that B is 7, despite the load of *C
-(which would be B) coming after the LOAD of C.
+(which would be B) coming after the the LOAD of C.
If, however, a data dependency barrier were to be placed between the load of C
and the load of *C (ie: B) on CPU 2:
@@ -1915,7 +1915,7 @@ Whilst most CPUs do imply a data dependency barrier on the read when a memory
access depends on a read, not all do, so it may not be relied on.
Other CPUs may also have split caches, but must coordinate between the various
-cachelets for normal memory accesses. The semantics of the Alpha removes the
+cachelets for normal memory accesss. The semantics of the Alpha removes the
need for coordination in absence of memory barriers.
diff --git a/trunk/Documentation/mono.txt b/trunk/Documentation/mono.txt
index e8e1758e87da..807a0c7b4737 100644
--- a/trunk/Documentation/mono.txt
+++ b/trunk/Documentation/mono.txt
@@ -26,7 +26,7 @@ other program after you have done the following:
the kernel (CONFIG_BINFMT_MISC) and set it up properly.
If you choose to compile it as a module, you will have
to insert it manually with modprobe/insmod, as kmod
- cannot be easily supported with binfmt_misc.
+ can not be easily supported with binfmt_misc.
Read the file 'binfmt_misc.txt' in this directory to know
more about the configuration process.
diff --git a/trunk/Documentation/networking/3c509.txt b/trunk/Documentation/networking/3c509.txt
index 0643e3b7168c..867a99f88c68 100644
--- a/trunk/Documentation/networking/3c509.txt
+++ b/trunk/Documentation/networking/3c509.txt
@@ -126,7 +126,7 @@ packets faster than they can be removed from the card. This should be rare
or impossible in normal operation. Possible causes of this error report are:
- a "green" mode enabled that slows the processor down when there is no
- keyboard activity.
+ keyboard activitiy.
- some other device or device driver hogging the bus or disabling interrupts.
Check /proc/interrupts for excessive interrupt counts. The timer tick
diff --git a/trunk/Documentation/networking/NAPI_HOWTO.txt b/trunk/Documentation/networking/NAPI_HOWTO.txt
index 93af3e87c65b..54376e8249c1 100644
--- a/trunk/Documentation/networking/NAPI_HOWTO.txt
+++ b/trunk/Documentation/networking/NAPI_HOWTO.txt
@@ -35,7 +35,7 @@ Legend:
packets out of the rx ring. Note from this that the lower the
load the more we could clean up the rxring
"Ndone" == is the converse of "Done". Note again, that the higher
-the load the more times we couldn't clean up the rxring.
+the load the more times we couldnt clean up the rxring.
Observe that:
when the NIC receives 890Kpackets/sec only 17 rx interrupts are generated.
diff --git a/trunk/Documentation/networking/arcnet-hardware.txt b/trunk/Documentation/networking/arcnet-hardware.txt
index 731de411513c..30a5f01403d3 100644
--- a/trunk/Documentation/networking/arcnet-hardware.txt
+++ b/trunk/Documentation/networking/arcnet-hardware.txt
@@ -139,7 +139,7 @@ And now to the cabling. What you can connect together:
5. An active hub to passive hub.
-Remember that you cannot connect two passive hubs together. The power loss
+Remember, that you can not connect two passive hubs together. The power loss
implied by such a connection is too high for the net to operate reliably.
An example of a typical ARCnet network:
diff --git a/trunk/Documentation/networking/bonding.txt b/trunk/Documentation/networking/bonding.txt
index de809e58092f..dc942eaf490f 100644
--- a/trunk/Documentation/networking/bonding.txt
+++ b/trunk/Documentation/networking/bonding.txt
@@ -1023,7 +1023,7 @@ Changing a Bond's Configuration
files located in /sys/class/net//bonding
The names of these files correspond directly with the command-
-line parameters described elsewhere in this file, and, with the
+line parameters described elsewhere in in this file, and, with the
exception of arp_ip_target, they accept the same values. To see the
current setting, simply cat the appropriate file.
diff --git a/trunk/Documentation/networking/cs89x0.txt b/trunk/Documentation/networking/cs89x0.txt
index 64896470e279..188beb7d6a17 100644
--- a/trunk/Documentation/networking/cs89x0.txt
+++ b/trunk/Documentation/networking/cs89x0.txt
@@ -227,7 +227,7 @@ configuration options are available on the command line:
* media=rj45 - specify media type
or media=bnc
or media=aui
- or media=auto
+ or medai=auto
* duplex=full - specify forced half/full/autonegotiate duplex
or duplex=half
or duplex=auto
@@ -584,7 +584,7 @@ of four ways after installing and or configuring the CS8900/20-based adapter:
1.) The system does not boot properly (or at all).
- 2.) The driver cannot communicate with the adapter, reporting an "Adapter
+ 2.) The driver can not communicate with the adapter, reporting an "Adapter
not found" error message.
3.) You cannot connect to the network or the driver will not load.
@@ -684,7 +684,7 @@ ethernet@crystal.cirrus.com) and request that you be registered for automatic
software-update notification.
Cirrus Logic maintains a web page at http://www.cirrus.com with the
-latest drivers and technical publications.
+the latest drivers and technical publications.
6.4 Current maintainer
diff --git a/trunk/Documentation/networking/cxgb.txt b/trunk/Documentation/networking/cxgb.txt
index 20a887615c4a..76324638626b 100644
--- a/trunk/Documentation/networking/cxgb.txt
+++ b/trunk/Documentation/networking/cxgb.txt
@@ -56,7 +56,7 @@ FEATURES
ethtool -C eth0 rx-usecs 100
- You may also provide a timer latency value while disabling adaptive-rx:
+ You may also provide a timer latency value while disabling adpative-rx:
ethtool -C adaptive-rx off rx-usecs
@@ -172,7 +172,7 @@ PERFORMANCE
smaller window prevents congestion and facilitates better pacing,
especially if/when MAC level flow control does not work well or when it is
not supported on the machine. Experimentation may be necessary to attain
- the correct value. This method is provided as a starting point for the
+ the correct value. This method is provided as a starting point fot the
correct receive buffer size.
Setting the min, max, and default receive buffer (RX_WINDOW) size is
performed in the same manner as single connection.
diff --git a/trunk/Documentation/networking/decnet.txt b/trunk/Documentation/networking/decnet.txt
index badb7480ea62..e6c39c5831f5 100644
--- a/trunk/Documentation/networking/decnet.txt
+++ b/trunk/Documentation/networking/decnet.txt
@@ -82,7 +82,7 @@ ethernet address of your ethernet card has to be set according to the DECnet
address of the node in order for it to be autoconfigured (and then 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 or
+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:
diff --git a/trunk/Documentation/networking/dl2k.txt b/trunk/Documentation/networking/dl2k.txt
index 10e8490fa406..d460492037ef 100644
--- a/trunk/Documentation/networking/dl2k.txt
+++ b/trunk/Documentation/networking/dl2k.txt
@@ -173,7 +173,7 @@ Installing the Driver
Parameter Description
=====================
-You can install this driver without any additional parameter. However, if you
+You can install this driver without any addtional parameter. However, if you
are going to have extensive functions then it is necessary to set extra
parameter. Below is a list of the command line parameters supported by the
Linux device
@@ -222,7 +222,7 @@ rx_timeout=n - Rx DMA wait time for an interrupt.
reach timeout of n * 640 nano seconds.
Set proper rx_coalesce and rx_timeout can
reduce congestion collapse and overload which
- has been a bottleneck for high speed network.
+ has been a bottlenect for high speed network.
For example, rx_coalesce=10 rx_timeout=800.
that is, hardware assert only 1 interrupt
diff --git a/trunk/Documentation/networking/dmfe.txt b/trunk/Documentation/networking/dmfe.txt
index b1b7499dd9d3..046363552d09 100644
--- a/trunk/Documentation/networking/dmfe.txt
+++ b/trunk/Documentation/networking/dmfe.txt
@@ -34,7 +34,7 @@ Next you should configure your network interface with a command similar to :
ifconfig eth0 172.22.3.18
^^^^^^^^^^^
- Your IP Address
+ Your IP Adress
Then you may have to modify the default routing table with command :
diff --git a/trunk/Documentation/networking/driver.txt b/trunk/Documentation/networking/driver.txt
index 4f7da5a2bf4f..a9ad58b49cc5 100644
--- a/trunk/Documentation/networking/driver.txt
+++ b/trunk/Documentation/networking/driver.txt
@@ -37,7 +37,7 @@ Transmit path guidelines:
...
}
- And then at the end of your TX reclamation event handling:
+ And then at the end of your TX reclaimation event handling:
if (netif_queue_stopped(dp->dev) &&
TX_BUFFS_AVAIL(dp) > (MAX_SKB_FRAGS + 1))
diff --git a/trunk/Documentation/networking/e1000.txt b/trunk/Documentation/networking/e1000.txt
index 5c0a5cc03998..71fe15af356c 100644
--- a/trunk/Documentation/networking/e1000.txt
+++ b/trunk/Documentation/networking/e1000.txt
@@ -350,7 +350,7 @@ Additional Configurations
As an example, if you install the e1000 driver for two PRO/1000 adapters
(eth0 and eth1) and set the speed and duplex to 10full and 100half, add
- the following to modules.conf or modprobe.conf:
+ the following to modules.conf or or modprobe.conf:
alias eth0 e1000
alias eth1 e1000
diff --git a/trunk/Documentation/networking/fib_trie.txt b/trunk/Documentation/networking/fib_trie.txt
index 0723db7f8495..f50d0c673c57 100644
--- a/trunk/Documentation/networking/fib_trie.txt
+++ b/trunk/Documentation/networking/fib_trie.txt
@@ -79,7 +79,7 @@ trie_rebalance()
resize()
Analyzes a tnode and optimizes the child array size by either inflating
- or shrinking it repeatedly until it fulfills the criteria for optimal
+ or shrinking it repeatedly until it fullfills the criteria for optimal
level compression. This part follows the original paper pretty closely
and there may be some room for experimentation here.
diff --git a/trunk/Documentation/networking/gen_stats.txt b/trunk/Documentation/networking/gen_stats.txt
index 70e6275b757a..c3297f79c137 100644
--- a/trunk/Documentation/networking/gen_stats.txt
+++ b/trunk/Documentation/networking/gen_stats.txt
@@ -79,8 +79,8 @@ Rate Estimator:
0) Prepare an estimator attribute. Most likely this would be in user
space. The value of this TLV should contain a tc_estimator structure.
- As usual, such a TLV needs to be 32 bit aligned and therefore the
- length needs to be appropriately set, etc. The estimator interval
+ As usual, such a TLV nees to be 32 bit aligned and therefore the
+ length needs to be appropriately set etc. The estimator interval
and ewma log need to be converted to the appropriate values.
tc_estimator.c::tc_setup_estimator() is advisable to be used as the
conversion routine. It does a few clever things. It takes a time
@@ -103,8 +103,8 @@ In the kernel when setting up:
else
failed
-From now on, every time you dump my_rate_est_stats it will contain
-up-to-date info.
+From now on, everytime you dump my_rate_est_stats it will contain
+uptodate info.
Once you are done, call gen_kill_estimator(my_basicstats,
my_rate_est_stats) Make sure that my_basicstats and my_rate_est_stats
diff --git a/trunk/Documentation/networking/ip-sysctl.txt b/trunk/Documentation/networking/ip-sysctl.txt
index fd3c0c012351..935e298f674a 100644
--- a/trunk/Documentation/networking/ip-sysctl.txt
+++ b/trunk/Documentation/networking/ip-sysctl.txt
@@ -495,7 +495,7 @@ icmp_errors_use_inbound_ifaddr - BOOLEAN
Note that if no primary address exists for the interface selected,
then the primary address of the first non-loopback interface that
- has one will be used regardless of this setting.
+ has one will be used regarldess of this setting.
Default: 0
@@ -787,7 +787,7 @@ accept_ra_defrtr - BOOLEAN
disabled if accept_ra is disabled.
accept_ra_pinfo - BOOLEAN
- Learn Prefix Information in Router Advertisement.
+ Learn Prefix Inforamtion in Router Advertisement.
Functional default: enabled if accept_ra is enabled.
disabled if accept_ra is disabled.
diff --git a/trunk/Documentation/networking/netconsole.txt b/trunk/Documentation/networking/netconsole.txt
index 1caa6c734691..53618fb1a717 100644
--- a/trunk/Documentation/networking/netconsole.txt
+++ b/trunk/Documentation/networking/netconsole.txt
@@ -52,6 +52,6 @@ messages is high, but should have no other impact.
Netconsole was designed to be as instantaneous as possible, to
enable the logging of even the most critical kernel bugs. It works
from IRQ contexts as well, and does not enable interrupts while
-sending packets. Due to these unique needs, configuration cannot
+sending packets. Due to these unique needs, configuration can not
be more automatic, and some fundamental limitations will remain:
only IP networks, UDP packets and ethernet devices are supported.
diff --git a/trunk/Documentation/networking/netif-msg.txt b/trunk/Documentation/networking/netif-msg.txt
index c967ddb90d0b..18ad4cea6259 100644
--- a/trunk/Documentation/networking/netif-msg.txt
+++ b/trunk/Documentation/networking/netif-msg.txt
@@ -40,7 +40,7 @@ History
Per-interface rather than per-driver message level setting.
More selective control over the type of messages emitted.
- The netif_msg recommendation adds these features with only a minor
+ The netif_msg recommandation adds these features with only a minor
complexity and code size increase.
The recommendation is the following points
diff --git a/trunk/Documentation/networking/operstates.txt b/trunk/Documentation/networking/operstates.txt
index c9074f9b78bb..4a21d9bb836b 100644
--- a/trunk/Documentation/networking/operstates.txt
+++ b/trunk/Documentation/networking/operstates.txt
@@ -2,7 +2,7 @@
1. Introduction
Linux distinguishes between administrative and operational state of an
-interface. Administrative state is the result of "ip link set dev
+interface. Admininstrative state is the result of "ip link set dev
up or down" and reflects whether the administrator wants to use
the device for traffic.
diff --git a/trunk/Documentation/networking/packet_mmap.txt b/trunk/Documentation/networking/packet_mmap.txt
index 12a008a5c221..aaf99d5f0dad 100644
--- a/trunk/Documentation/networking/packet_mmap.txt
+++ b/trunk/Documentation/networking/packet_mmap.txt
@@ -66,7 +66,7 @@ the following process:
[setup] socket() -------> creation of the capture socket
setsockopt() ---> allocation of the circular buffer (ring)
- mmap() ---------> mapping of the allocated buffer to the
+ mmap() ---------> maping of the allocated buffer to the
user process
[capture] poll() ---------> to wait for incoming packets
@@ -93,7 +93,7 @@ The destruction of the socket and all associated resources
is done by a simple call to close(fd).
Next I will describe PACKET_MMAP settings and it's constraints,
-also the mapping of the circular buffer in the user process and
+also the maping of the circular buffer in the user process and
the use of this buffer.
--------------------------------------------------------------------------------
@@ -153,8 +153,8 @@ we will get the following buffer structure:
A frame can be of any size with the only condition it can fit in a block. A block
can only hold an integer number of frames, or in other words, a frame cannot
-be spawned accross two blocks, so there are some details you have to take into
-account when choosing the frame_size. See "Mapping and use of the circular
+be spawn accross two blocks so there are some datails you have to take into
+account when choosing the frame_size. See "Maping and use of the circular
buffer (ring)".
@@ -215,8 +215,8 @@ called pg_vec, its size limits the number of blocks that can be allocated.
block #1
-kmalloc allocates any number of bytes of physically contiguous memory from
-a pool of pre-determined sizes. This pool of memory is maintained by the slab
+kmalloc allocates any number of bytes of phisically contiguous memory from
+a pool of pre-determined sizes. This pool of memory is mantained by the slab
allocator which is at the end the responsible for doing the allocation and
hence which imposes the maximum memory that kmalloc can allocate.
@@ -262,7 +262,7 @@ i386 architecture:
= 4096 bytes
= 11
-and a value for of 2048 bytes. These parameters will yield
+and a value for of 2048 byteas. These parameters will yield
= 131072/4 = 32768 blocks
= 4096 << 11 = 8 MiB.
@@ -278,7 +278,7 @@ an i386 kernel's memory size is limited to 1GiB.
All memory allocations are not freed until the socket is closed. The memory
allocations are done with GFP_KERNEL priority, this basically means that
the allocation can wait and swap other process' memory in order to allocate
-the necessary memory, so normally limits can be reached.
+the nececessary memory, so normally limits can be reached.
Other constraints
-------------------
@@ -296,7 +296,7 @@ the following (from include/linux/if_packet.h):
- struct tpacket_hdr
- pad to TPACKET_ALIGNMENT=16
- struct sockaddr_ll
- - Gap, chosen so that packet data (Start+tp_net) aligns to
+ - Gap, chosen so that packet data (Start+tp_net) alignes to
TPACKET_ALIGNMENT=16
- Start+tp_mac: [ Optional MAC header ]
- Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
@@ -311,14 +311,14 @@ the following (from include/linux/if_packet.h):
tp_frame_size must be a multiple of TPACKET_ALIGNMENT
tp_frame_nr must be exactly frames_per_block*tp_block_nr
-Note that tp_block_size should be chosen to be a power of two or there will
+Note that tp_block_size should be choosed to be a power of two or there will
be a waste of memory.
--------------------------------------------------------------------------------
-+ Mapping and use of the circular buffer (ring)
++ Maping and use of the circular buffer (ring)
--------------------------------------------------------------------------------
-The mapping of the buffer in the user process is done with the conventional
+The maping of the buffer in the user process is done with the conventional
mmap function. Even the circular buffer is compound of several physically
discontiguous blocks of memory, they are contiguous to the user space, hence
just one call to mmap is needed:
diff --git a/trunk/Documentation/networking/pktgen.txt b/trunk/Documentation/networking/pktgen.txt
index c8eee23be8c0..18d385c068fc 100644
--- a/trunk/Documentation/networking/pktgen.txt
+++ b/trunk/Documentation/networking/pktgen.txt
@@ -7,7 +7,7 @@ Date: 041221
Enable CONFIG_NET_PKTGEN to compile and build pktgen.o either in kernel
or as module. Module is preferred. insmod pktgen if needed. Once running
-pktgen creates a thread on each CPU where each thread has affinity to its CPU.
+pktgen creates a thread on each CPU where each thread has affinty it's CPU.
Monitoring and controlling is done via /proc. Easiest to select a suitable
a sample script and configure.
@@ -18,7 +18,7 @@ root 129 0.3 0.0 0 0 ? SW 2003 523:20 [pktgen/0]
root 130 0.3 0.0 0 0 ? SW 2003 509:50 [pktgen/1]
-For monitoring and control pktgen creates:
+For montoring and control pktgen creates:
/proc/net/pktgen/pgctrl
/proc/net/pktgen/kpktgend_X
/proc/net/pktgen/ethX
@@ -32,7 +32,7 @@ Running:
Stopped: eth1
Result: OK: max_before_softirq=10000
-Most important the devices assigned to thread. Note! A device can only belong
+Most important the devices assigend to thread. Note! A device can only belong
to one thread.
@@ -147,7 +147,7 @@ Examples:
Example scripts
===============
-A collection of small tutorial scripts for pktgen is in examples dir.
+A collection of small tutorial scripts for pktgen is in expamples dir.
pktgen.conf-1-1 # 1 CPU 1 dev
pktgen.conf-1-2 # 1 CPU 2 dev
diff --git a/trunk/Documentation/networking/s2io.txt b/trunk/Documentation/networking/s2io.txt
index 4bde53e85f3f..bd528ffbeb4b 100644
--- a/trunk/Documentation/networking/s2io.txt
+++ b/trunk/Documentation/networking/s2io.txt
@@ -126,7 +126,7 @@ However, you may want to set PCI latency timer to 248.
#setpci -d 17d5:* LATENCY_TIMER=f8
For detailed description of the PCI registers, please see Xframe User Guide.
b. Use 2-buffer mode. This results in large performance boost on
-certain platforms(eg. SGI Altix, IBM xSeries).
+on certain platforms(eg. SGI Altix, IBM xSeries).
c. Ensure Receive Checksum offload is enabled. Use "ethtool -K ethX" command to
set/verify this option.
d. Enable NAPI feature(in kernel configuration Device Drivers ---> Network
diff --git a/trunk/Documentation/networking/sk98lin.txt b/trunk/Documentation/networking/sk98lin.txt
index 4e1cc745ec63..7837c53fd5fe 100644
--- a/trunk/Documentation/networking/sk98lin.txt
+++ b/trunk/Documentation/networking/sk98lin.txt
@@ -180,7 +180,7 @@ To set the driver parameters in this file, proceed as follows:
1. Insert a line of the form :
options sk98lin ...
For "...", the same syntax is required as described for the command
- line parameters of modprobe below.
+ line paramaters of modprobe below.
2. To activate the new parameters, either reboot your computer
or
unload and reload the driver.
@@ -320,7 +320,7 @@ Parameter: Moderation
Values: None, Static, Dynamic
Default: None
-Interrupt moderation is employed to limit the maximum number of interrupts
+Interrupt moderation is employed to limit the maxmimum number of interrupts
the driver has to serve. That is, one or more interrupts (which indicate any
transmit or receive packet to be processed) are queued until the driver
processes them. When queued interrupts are to be served, is determined by the
@@ -364,9 +364,9 @@ Parameter: IntsPerSec
Values: 30...40000 (interrupts per second)
Default: 2000
-This parameter is only used if either static or dynamic interrupt moderation
-is used on a network adapter card. Using this parameter if no moderation is
-applied will lead to no action performed.
+This parameter is only used, if either static or dynamic interrupt moderation
+is used on a network adapter card. Using this paramter if no moderation is
+applied, will lead to no action performed.
This parameter determines the length of any interrupt moderation interval.
Assuming that static interrupt moderation is to be used, an 'IntsPerSec'
@@ -484,7 +484,7 @@ If any problems occur during the installation process, check the
following list:
-Problem: The SK-98xx adapter cannot be found by the driver.
+Problem: The SK-98xx adapter can not be found by the driver.
Solution: In /proc/pci search for the following entry:
'Ethernet controller: SysKonnect SK-98xx ...'
If this entry exists, the SK-98xx or SK-98xx V2.0 adapter has
@@ -497,12 +497,12 @@ Solution: In /proc/pci search for the following entry:
www.syskonnect.com
Some COMPAQ machines have problems dealing with PCI under Linux.
- This problem is described in the 'PCI howto' document
+ Linux. This problem is described in the 'PCI howto' document
(included in some distributions or available from the
web, e.g. at 'www.linux.org').
-Problem: Programs such as 'ifconfig' or 'route' cannot be found or the
+Problem: Programs such as 'ifconfig' or 'route' can not be found or the
error message 'Operation not permitted' is displayed.
Reason: You are not logged in as user 'root'.
Solution: Logout and login as 'root' or change to 'root' via 'su'.
diff --git a/trunk/Documentation/networking/skfp.txt b/trunk/Documentation/networking/skfp.txt
index abfddf81e34a..3a419ed42f81 100644
--- a/trunk/Documentation/networking/skfp.txt
+++ b/trunk/Documentation/networking/skfp.txt
@@ -81,7 +81,7 @@ Makes my life much easier :-)
If you run into problems during installation, check those items:
-Problem: The FDDI adapter cannot be found by the driver.
+Problem: The FDDI adapter can not be found by the driver.
Reason: Look in /proc/pci for the following entry:
'FDDI network controller: SysKonnect SK-FDDI-PCI ...'
If this entry exists, then the FDDI adapter has been
@@ -99,7 +99,7 @@ Reason: Look in /proc/pci for the following entry:
Problem: You want to use your computer as a router between
multiple IP subnetworks (using multiple adapters), but
- you cannot reach computers in other subnetworks.
+ you can not reach computers in other subnetworks.
Reason: Either the router's kernel is not configured for IP
forwarding or there is a problem with the routing table
and gateway configuration in at least one of the
diff --git a/trunk/Documentation/networking/slicecom.txt b/trunk/Documentation/networking/slicecom.txt
index 2f04c9267f89..59cfd95121fb 100644
--- a/trunk/Documentation/networking/slicecom.txt
+++ b/trunk/Documentation/networking/slicecom.txt
@@ -89,7 +89,7 @@ red: green: meaning:
- - no frame-sync, no signal received, or signal SNAFU.
- on "Everything is OK"
-on on Reception is ok, but the remote end sends Remote Alarm
+on on Recepion is ok, but the remote end sends Remote Alarm
on - The interface is unconfigured
-----------------------------------------------------------------
@@ -257,12 +257,12 @@ which begin with '//' are the comments.
// No alarms - Everything OK
//
// LOS - Loss Of Signal - No signal sensed on the input
-// AIS - Alarm Indication Signal - The remote side sends '11111111'-s,
+// AIS - Alarm Indication Signal - The remot side sends '11111111'-s,
// it tells, that there's an error condition, or it's not
// initialised.
// AUXP - Auxiliary Pattern Indication - 01010101.. received.
// LFA - Loss of Frame Alignment - no frame sync received.
-// RRA - Receive Remote Alarm - the remote end's OK, but signals error cond.
+// RRA - Receive Remote Alarm - the remote end's OK, but singnals error cond.
// LMFA - Loss of CRC4 Multiframe Alignment - no CRC4 multiframe sync.
// NMF - No Multiframe alignment Found after 400 msec - no such alarm using
// no-crc4 or crc4 framing, see below.
@@ -364,6 +364,6 @@ Treat them very carefully, these can cause much trouble!
# echo >lbireg 0x1d 0x21
- - Switching the loop off:
+ - Swithing the loop off:
# echo >lbireg 0x1d 0x00
diff --git a/trunk/Documentation/networking/smctr.txt b/trunk/Documentation/networking/smctr.txt
index 9af25b810c1f..4c866f5a0ee4 100644
--- a/trunk/Documentation/networking/smctr.txt
+++ b/trunk/Documentation/networking/smctr.txt
@@ -11,7 +11,7 @@ This driver is rather simple to use. Select Y to Token Ring adapter support
in the kernel configuration. A choice for SMC Token Ring adapters will
appear. This drives supports all SMC ISA/MCA adapters. Choose this
option. I personally recommend compiling the driver as a module (M), but if you
-you would like to compile it statically answer Y instead.
+you would like to compile it staticly answer Y instead.
This driver supports multiple adapters without the need to load multiple copies
of the driver. You should be able to load up to 7 adapters without any kernel
diff --git a/trunk/Documentation/networking/tcp.txt b/trunk/Documentation/networking/tcp.txt
index 0121edc3ba06..0fa300425575 100644
--- a/trunk/Documentation/networking/tcp.txt
+++ b/trunk/Documentation/networking/tcp.txt
@@ -62,7 +62,7 @@ if needed and you will get the expected protocol. If you ask for an
unknown congestion method, then the sysctl attempt will fail.
If you remove a tcp congestion control module, then you will get the next
-available one. Since reno cannot be built as a module, and cannot be
+available one. Since reno can not be built as a module, and can not be
deleted, it will always be available.
How the new TCP output machine [nyi] works.
diff --git a/trunk/Documentation/networking/tms380tr.txt b/trunk/Documentation/networking/tms380tr.txt
index c169a57bc925..179e527b9da1 100644
--- a/trunk/Documentation/networking/tms380tr.txt
+++ b/trunk/Documentation/networking/tms380tr.txt
@@ -24,7 +24,7 @@ This driver is rather simple to use. Select Y to Token Ring adapter support
in the kernel configuration. A choice for SysKonnect Token Ring adapters will
appear. This drives supports all SysKonnect ISA and PCI adapters. Choose this
option. I personally recommend compiling the driver as a module (M), but if you
-you would like to compile it statically answer Y instead.
+you would like to compile it staticly answer Y instead.
This driver supports multiple adapters without the need to load multiple copies
of the driver. You should be able to load up to 7 adapters without any kernel
diff --git a/trunk/Documentation/networking/vortex.txt b/trunk/Documentation/networking/vortex.txt
index 6356d3faed36..6091e5f6794f 100644
--- a/trunk/Documentation/networking/vortex.txt
+++ b/trunk/Documentation/networking/vortex.txt
@@ -359,13 +359,13 @@ steps you should take:
Eliminate some variables: try different cards, different
computers, different cables, different ports on the switch/hub,
- different versions of the kernel or of the driver, etc.
+ different versions of the kernel or ofthe driver, etc.
- OK, it's a driver problem.
You need to generate a report. Typically this is an email to the
maintainer and/or linux-net@vger.kernel.org. The maintainer's
- email address will be in the driver source or in the MAINTAINERS file.
+ email address will be inthe driver source or in the MAINTAINERS file.
- The contents of your report will vary a lot depending upon the
problem. If it's a kernel crash then you should refer to the
diff --git a/trunk/Documentation/networking/wan-router.txt b/trunk/Documentation/networking/wan-router.txt
index 0cf654147634..c96897aa08b6 100644
--- a/trunk/Documentation/networking/wan-router.txt
+++ b/trunk/Documentation/networking/wan-router.txt
@@ -148,7 +148,7 @@ NEW IN THIS RELEASE
for async connections.
o Added the PPPCONFIG utility
- Used to configure the PPPD daemon for the
+ Used to configure the PPPD dameon for the
WANPIPE Async PPP and standard serial port.
The wancfg calls the pppconfig to configure
the pppd.
@@ -214,7 +214,7 @@ PRODUCT COMPONENTS AND RELATED FILES
/usr/local/wanrouter/patches/kdrivers:
Sources of the latest WANPIPE device drivers.
These are used to UPGRADE the linux kernel to the newest
- version if the kernel source has already been patched with
+ version if the kernel source has already been pathced with
WANPIPE drivers.
/usr/local/wanrouter/samples:
@@ -350,7 +350,7 @@ REVISION HISTORY
Available as a patch.
2.0.6 Aug 17, 1999 Increased debugging in statup scripts
- Fixed installation bugs from 2.0.5
+ Fixed insallation bugs from 2.0.5
Kernel patch works for both 2.2.10 and 2.2.11 kernels.
There is no functional difference between the two packages
@@ -434,11 +434,11 @@ beta3-2.1.4 Jul 2000 o X25 M_BIT Problem fix.
change.
beta1-2.1.5 Nov 15 2000
- o Fixed the MultiPort PPP Support for kernels 2.2.16 and above.
+ o Fixed the MulitPort PPP Support for kernels 2.2.16 and above.
2.2.X kernels only
o Secured the driver UDP debugging calls
- - All illegal network debugging calls are reported to
+ - All illegal netowrk debugging calls are reported to
the log.
- Defined a set of allowed commands, all other denied.
@@ -451,7 +451,7 @@ beta1-2.1.5 Nov 15 2000
o Keyboard Led Monitor/Debugger
- A new utilty /usr/sbin/wpkbdmon uses keyboard leds
- to convey operational statistic information of the
+ to convey operatinal statistic information of the
Sangoma WANPIPE cards.
NUM_LOCK = Line State (On=connected, Off=disconnected)
CAPS_LOCK = Tx data (On=transmitting, Off=no tx data)
@@ -470,7 +470,7 @@ beta1-2.1.5 Nov 15 2000
o Fixed the Frame Relay and Chdlc network interfaces so they are
compatible with libpcap libraries. Meaning, tcpdump, snort,
ethereal, and all other packet sniffers and debuggers work on
- all WANPIPE network interfaces.
+ all WANPIPE netowrk interfaces.
- Set the network interface encoding type to ARPHRD_PPP.
This tell the sniffers that data obtained from the
network interface is in pure IP format.
@@ -570,7 +570,7 @@ bata1-2.2.1 Feb 09 2001
Option to COMPILE WANPIPE modules against the currently
running kernel, thus no need for manual kernel and module
- re-compilation.
+ re-compilatin.
o Updates and Bug Fixes to wancfg utility.
diff --git a/trunk/Documentation/nfsroot.txt b/trunk/Documentation/nfsroot.txt
index 719f9a9d60c0..3cc953cb288f 100644
--- a/trunk/Documentation/nfsroot.txt
+++ b/trunk/Documentation/nfsroot.txt
@@ -11,7 +11,7 @@ Updated 2006 by Horms
In order to use a diskless system, such as an X-terminal or printer server
for example, it is necessary for the root filesystem to be present on a
non-disk device. This may be an initramfs (see Documentation/filesystems/
-ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a
+ramfs-rootfs-initramfs.txt), a ramdisk (see Documenation/initrd.txt) or a
filesystem mounted via NFS. The following text describes on how to use NFS
for the root filesystem. For the rest of this text 'client' means the
diskless system, and 'server' means the NFS server.
diff --git a/trunk/Documentation/pci-error-recovery.txt b/trunk/Documentation/pci-error-recovery.txt
index 6650af432523..634d3e5b5756 100644
--- a/trunk/Documentation/pci-error-recovery.txt
+++ b/trunk/Documentation/pci-error-recovery.txt
@@ -172,7 +172,7 @@ is STEP 6 (Permanent Failure).
>>> a value of 0xff on read, and writes will be dropped. If the device
>>> driver attempts more than 10K I/O's to a frozen adapter, it will
>>> assume that the device driver has gone into an infinite loop, and
->>> it will panic the kernel. There doesn't seem to be any other
+>>> it will panic the the kernel. There doesn't seem to be any other
>>> way of stopping a device driver that insists on spinning on I/O.
STEP 2: MMIO Enabled
diff --git a/trunk/Documentation/pi-futex.txt b/trunk/Documentation/pi-futex.txt
index 9a5bc8651c29..5d61dacd21f6 100644
--- a/trunk/Documentation/pi-futex.txt
+++ b/trunk/Documentation/pi-futex.txt
@@ -118,4 +118,4 @@ properties of futexes, and all four combinations are possible: futex,
robust-futex, PI-futex, robust+PI-futex.
More details about priority inheritance can be found in
-Documentation/rt-mutex.txt.
+Documentation/rtmutex.txt.
diff --git a/trunk/Documentation/pm.txt b/trunk/Documentation/pm.txt
index da8589a0e07d..79c0f32a760e 100644
--- a/trunk/Documentation/pm.txt
+++ b/trunk/Documentation/pm.txt
@@ -18,10 +18,10 @@ enabled by default). If a working ACPI implementation is found, the
ACPI driver will override and disable APM, otherwise the APM driver
will be used.
-No, sorry, you cannot have both ACPI and APM enabled and running at
+No sorry, you can not have both ACPI and APM enabled and running at
once. Some people with broken ACPI or broken APM implementations
would like to use both to get a full set of working features, but you
-simply cannot mix and match the two. Only one power management
+simply can not mix and match the two. Only one power management
interface can be in control of the machine at once. Think about it..
User-space Daemons
@@ -106,7 +106,7 @@ void pm_unregister_all(pm_callback cback);
*
* Returns: 0 if the request is successful
* EINVAL if the request is not supported
- * EBUSY if the device is now busy and cannot handle the request
+ * EBUSY if the device is now busy and can not handle the request
* ENOMEM if the device was unable to handle the request due to memory
*
* Details: The device request callback will be called before the
diff --git a/trunk/Documentation/pnp.txt b/trunk/Documentation/pnp.txt
index 9ff966bf76e6..9529c9c9fd59 100644
--- a/trunk/Documentation/pnp.txt
+++ b/trunk/Documentation/pnp.txt
@@ -222,7 +222,7 @@ static struct pnp_driver serial_pnp_driver = {
.remove = serial_pnp_remove,
};
-* name and id_table cannot be NULL.
+* name and id_table can not be NULL.
4.) register the driver
ex:
diff --git a/trunk/Documentation/power/pci.txt b/trunk/Documentation/power/pci.txt
index 24edf25b3bb7..73fc87e5dc38 100644
--- a/trunk/Documentation/power/pci.txt
+++ b/trunk/Documentation/power/pci.txt
@@ -326,7 +326,7 @@ A reference implementation
This is a typical implementation. Drivers can slightly change the order
of the operations in the implementation, ignore some operations or add
-more driver specific operations in it, but drivers should do something like
+more deriver specific operations in it, but drivers should do something like
this on the whole.
5. Resources
diff --git a/trunk/Documentation/power/swsusp.txt b/trunk/Documentation/power/swsusp.txt
index 9ea2208b43b5..823b2cf6e3dc 100644
--- a/trunk/Documentation/power/swsusp.txt
+++ b/trunk/Documentation/power/swsusp.txt
@@ -156,7 +156,7 @@ instead set the PF_NOFREEZE process flag when creating the thread (and
be very carefull).
-Q: What is the difference between "platform", "shutdown" and
+Q: What is the difference between between "platform", "shutdown" and
"firmware" in /sys/power/disk?
A:
@@ -175,8 +175,8 @@ reliable.
Q: I do not understand why you have such strong objections to idea of
selective suspend.
-A: Do selective suspend during runtime power management, that's okay. But
-it's useless for suspend-to-disk. (And I do not see how you could use
+A: Do selective suspend during runtime power managment, that's okay. But
+its useless for suspend-to-disk. (And I do not see how you could use
it for suspend-to-ram, I hope you do not want that).
Lets see, so you suggest to
@@ -211,7 +211,7 @@ slowness may not matter to you. It can always be fixed later.
For devices like disk it does matter, you do not want to spindown for
FREEZE.
-Q: After resuming, system is paging heavily, leading to very bad interactivity.
+Q: After resuming, system is paging heavilly, leading to very bad interactivity.
A: Try running
diff --git a/trunk/Documentation/power/tricks.txt b/trunk/Documentation/power/tricks.txt
index 3b26bb502a4a..c6d58d3da133 100644
--- a/trunk/Documentation/power/tricks.txt
+++ b/trunk/Documentation/power/tricks.txt
@@ -9,7 +9,7 @@ If you want to trick swsusp/S3 into working, you might want to try:
* turn off APIC and preempt
-* use ext2. At least it has working fsck. [If something seems to go
+* use ext2. At least it has working fsck. [If something seemes to go
wrong, force fsck when you have a chance]
* turn off modules
diff --git a/trunk/Documentation/power/userland-swsusp.txt b/trunk/Documentation/power/userland-swsusp.txt
index 64755e9285db..94058220aaf0 100644
--- a/trunk/Documentation/power/userland-swsusp.txt
+++ b/trunk/Documentation/power/userland-swsusp.txt
@@ -91,7 +91,7 @@ unfreeze user space processes frozen by SNAPSHOT_UNFREEZE if they are
still frozen when the device is being closed).
Currently it is assumed that the userland utilities reading/writing the
-snapshot image from/to the kernel will use a swap partition, called the resume
+snapshot image from/to the kernel will use a swap parition, called the resume
partition, as storage space. However, this is not really required, as they
can use, for example, a special (blank) suspend partition or a file on a partition
that is unmounted before SNAPSHOT_ATOMIC_SNAPSHOT and mounted afterwards.
diff --git a/trunk/Documentation/power/video.txt b/trunk/Documentation/power/video.txt
index 2b358498d095..d859faa3a463 100644
--- a/trunk/Documentation/power/video.txt
+++ b/trunk/Documentation/power/video.txt
@@ -16,7 +16,7 @@ problem for S1 standby, because hardware should retain its state over
that.
We either have to run video BIOS during early resume, or interpret it
-using vbetool later, or maybe nothing is necessary on particular
+using vbetool later, or maybe nothing is neccessary on particular
system because video state is preserved. Unfortunately different
methods work on different systems, and no known method suits all of
them.
diff --git a/trunk/Documentation/powerpc/booting-without-of.txt b/trunk/Documentation/powerpc/booting-without-of.txt
index 1ccc8a515b44..5c0ba235f5a5 100644
--- a/trunk/Documentation/powerpc/booting-without-of.txt
+++ b/trunk/Documentation/powerpc/booting-without-of.txt
@@ -145,7 +145,7 @@ it with special cases.
in case you are entering the kernel with MMU enabled
and a non-1:1 mapping.
- r5 : NULL (as to differentiate with method a)
+ r5 : NULL (as to differenciate with method a)
Note about SMP entry: Either your firmware puts your other
CPUs in some sleep loop or spin loop in ROM where you can get
@@ -245,7 +245,7 @@ the block to RAM before passing it to the kernel.
---------
The kernel is entered with r3 pointing to an area of memory that is
- roughly described in include/asm-powerpc/prom.h by the structure
+ roughtly described in include/asm-powerpc/prom.h by the structure
boot_param_header:
struct boot_param_header {
@@ -335,7 +335,7 @@ struct boot_param_header {
"compact" format for the tree itself that is however not backward
compatible. You should always generate a structure of the highest
version defined at the time of your implementation. Currently
- that is version 16, unless you explicitly aim at being backward
+ that is version 16, unless you explicitely aim at being backward
compatible.
- last_comp_version
@@ -418,9 +418,9 @@ zero terminated string and is mandatory for version 1 to 3 of the
format definition (as it is in Open Firmware). Version 0x10 makes it
optional as it can generate it from the unit name defined below.
-There is also a "unit name" that is used to differentiate nodes with
+There is also a "unit name" that is used to differenciate nodes with
the same name at the same level, it is usually made of the node
-names, the "@" sign, and a "unit address", which definition is
+name's, the "@" sign, and a "unit address", which definition is
specific to the bus type the node sits on.
The unit name doesn't exist as a property per-se but is included in
@@ -550,11 +550,11 @@ Here's the basic structure of a single node:
* [child nodes if any]
* token OF_DT_END_NODE (that is 0x00000002)
-So the node content can be summarised as a start token, a full path,
-a list of properties, a list of child nodes, and an end token. Every
+So the node content can be summmarised as a start token, a full path,
+a list of properties, a list of child node and an end token. Every
child node is a full node structure itself as defined above.
-4) Device tree "strings" block
+4) Device tree 'strings" block
In order to save space, property names, which are generally redundant,
are stored separately in the "strings" block. This block is simply the
@@ -573,7 +573,7 @@ implementation of Open Firmware or an implementation compatible with
the Open Firmware client interface, those properties will be created
by the trampoline code in the kernel's prom_init() file. For example,
that's where you'll have to add code to detect your board model and
-set the platform number. However, when using the flattened device-tree
+set the platform number. However, when using the flatenned device-tree
entry point, there is no prom_init() pass, and thus you have to
provide those properties yourself.
@@ -630,11 +630,12 @@ like address space bits, you'll have to add a bus translator to the
prom_parse.c file of the recent kernels for your bus type.
The "reg" property only defines addresses and sizes (if #size-cells
-is non-0) within a given bus. In order to translate addresses upward
+is
+non-0) within a given bus. In order to translate addresses upward
(that is into parent bus addresses, and possibly into cpu physical
addresses), all busses must contain a "ranges" property. If the
"ranges" property is missing at a given level, it's assumed that
-translation isn't possible. The format of the "ranges" property for a
+translation isn't possible. The format of the "ranges" proprety for a
bus is a list of:
bus address, parent bus address, size
@@ -688,7 +689,7 @@ is present).
4) Note about node and property names and character set
-------------------------------------------------------
-While open firmware provides more flexible usage of 8859-1, this
+While open firmware provides more flexibe usage of 8859-1, this
specification enforces more strict rules. Nodes and properties should
be comprised only of ASCII characters 'a' to 'z', '0' to
'9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
@@ -731,12 +732,12 @@ address which can extend beyond that limit.
that typically get driven by the same platform code in the
kernel, you would use a different "model" property but put a
value in "compatible". The kernel doesn't directly use that
- value (see /chosen/linux,platform for how the kernel chooses a
+ value (see /chosen/linux,platform for how the kernel choses a
platform type) but it is generally useful.
The root node is also generally where you add additional properties
specific to your board like the serial number if any, that sort of
- thing. It is recommended that if you add any "custom" property whose
+ thing. it is recommended that if you add any "custom" property whose
name may clash with standard defined ones, you prefix them with your
vendor name and a comma.
@@ -816,7 +817,7 @@ address which can extend beyond that limit.
your board. It's a list of addresses/sizes concatenated
together, with the number of cells of each defined by the
#address-cells and #size-cells of the root node. For example,
- with both of these properties being 2 like in the example given
+ with both of these properties beeing 2 like in the example given
earlier, a 970 based machine with 6Gb of RAM could typically
have a "reg" property here that looks like:
@@ -969,7 +970,7 @@ device-tree in another format. The currently supported formats are:
- "asm": assembly language file. This is a file that can be
sourced by gas to generate a device-tree "blob". That file can
then simply be added to your Makefile. Additionally, the
- assembly file exports some symbols that can be used.
+ assembly file exports some symbols that can be use
The syntax of the dtc tool is
@@ -983,10 +984,10 @@ generated. Supported versions are 1,2,3 and 16. The default is
currently version 3 but that may change in the future to version 16.
Additionally, dtc performs various sanity checks on the tree, like the
-uniqueness of linux, phandle properties, validity of strings, etc...
+uniqueness of linux,phandle properties, validity of strings, etc...
The format of the .dts "source" file is "C" like, supports C and C++
-style comments.
+style commments.
/ {
}
@@ -1068,13 +1069,13 @@ while all this has been defined and implemented.
around. It contains no internal offsets or pointers for this
purpose.
- - An example of code for iterating nodes & retrieving properties
+ - An example of code for iterating nodes & retreiving properties
directly from the flattened tree format can be found in the kernel
file arch/ppc64/kernel/prom.c, look at scan_flat_dt() function,
- its usage in early_init_devtree(), and the corresponding various
+ it's usage in early_init_devtree(), and the corresponding various
early_init_dt_scan_*() callbacks. That code can be re-used in a
GPL bootloader, and as the author of that code, I would be happy
- to discuss possible free licencing to any vendor who wishes to
+ do discuss possible free licencing to any vendor who wishes to
integrate all or part of this code into a non-GPL bootloader.
diff --git a/trunk/Documentation/powerpc/eeh-pci-error-recovery.txt b/trunk/Documentation/powerpc/eeh-pci-error-recovery.txt
index 4530d1bf0286..3764dd4b12cb 100644
--- a/trunk/Documentation/powerpc/eeh-pci-error-recovery.txt
+++ b/trunk/Documentation/powerpc/eeh-pci-error-recovery.txt
@@ -90,7 +90,7 @@ EEH-isolated, there is a firmware call it can make to determine if
this is the case. If so, then the device driver should put itself
into a consistent state (given that it won't be able to complete any
pending work) and start recovery of the card. Recovery normally
-would consist of resetting the PCI device (holding the PCI #RST
+would consist of reseting the PCI device (holding the PCI #RST
line high for two seconds), followed by setting up the device
config space (the base address registers (BAR's), latency timer,
cache line size, interrupt line, and so on). This is followed by a
@@ -116,7 +116,7 @@ At this time, a generic EEH recovery mechanism has been implemented,
so that individual device drivers do not need to be modified to support
EEH recovery. This generic mechanism piggy-backs on the PCI hotplug
infrastructure, and percolates events up through the userspace/udev
-infrastructure. Following is a detailed description of how this is
+infrastructure. Followiing is a detailed description of how this is
accomplished.
EEH must be enabled in the PHB's very early during the boot process,
diff --git a/trunk/Documentation/powerpc/hvcs.txt b/trunk/Documentation/powerpc/hvcs.txt
index f93462c5db25..1e38166f4e54 100644
--- a/trunk/Documentation/powerpc/hvcs.txt
+++ b/trunk/Documentation/powerpc/hvcs.txt
@@ -259,7 +259,7 @@ This index of '2' means that in order to connect to vty-server adapter
It should be noted that due to the system hotplug I/O capabilities of a
system the /dev/hvcs* entry that interacts with a particular vty-server
-adapter is not guaranteed to remain the same across system reboots. Look
+adapter is not guarenteed to remain the same across system reboots. Look
in the Q & A section for more on this issue.
---------------------------------------------------------------------------
diff --git a/trunk/Documentation/prio_tree.txt b/trunk/Documentation/prio_tree.txt
index 3aa68f9a117b..2fbb0c49bc5b 100644
--- a/trunk/Documentation/prio_tree.txt
+++ b/trunk/Documentation/prio_tree.txt
@@ -88,7 +88,7 @@ path which is not desirable. Hence, we do not optimize the height of the
heap-and-size indexed overflow-sub-trees using prio_tree->index_bits.
Instead the overflow sub-trees are indexed using full BITS_PER_LONG bits
of size_index. This may lead to skewed sub-trees because most of the
-higher significant bits of the size_index are likely to be 0 (zero). In
+higher significant bits of the size_index are likely to be be 0 (zero). In
the example above, all 3 overflow-sub-trees are skewed. This may marginally
affect the performance. However, processes rarely map many vmas with the
same start_vm_pgoff but different end_vm_pgoffs. Therefore, we normally
diff --git a/trunk/Documentation/rocket.txt b/trunk/Documentation/rocket.txt
index 1d8582990435..a10678004451 100644
--- a/trunk/Documentation/rocket.txt
+++ b/trunk/Documentation/rocket.txt
@@ -97,7 +97,7 @@ a range of I/O addresses for it to use. The first RocketPort card
requires a 68-byte contiguous block of I/O addresses, starting at one
of the following: 0x100h, 0x140h, 0x180h, 0x200h, 0x240h, 0x280h,
0x300h, 0x340h, 0x380h. This I/O address must be reflected in the DIP
-switches of *all* of the Rocketport cards.
+switiches of *all* of the Rocketport cards.
The second, third, and fourth RocketPort cards require a 64-byte
contiguous block of I/O addresses, starting at one of the following
@@ -107,7 +107,7 @@ second, third, and fourth Rocketport cards (if present) are set via
software control. The DIP switch settings for the I/O address must be
set to the value of the first Rocketport cards.
-In order to distinguish each of the card from the others, each card
+In order to destinguish each of the card from the others, each card
must have a unique board ID set on the dip switches. The first
Rocketport board must be set with the DIP switches corresponding to
the first board, the second board must be set with the DIP switches
@@ -120,7 +120,7 @@ conflict with any other cards in the system, including other
RocketPort cards. Below, you will find a list of commonly used I/O
address ranges which may be in use by other devices in your system.
On a Linux system, "cat /proc/ioports" will also be helpful in
-identifying what I/O addresses are being used by devices on your
+identifying what I/O addresses are being used by devics on your
system.
Remember, the FIRST RocketPort uses 68 I/O addresses. So, if you set it
diff --git a/trunk/Documentation/rpc-cache.txt b/trunk/Documentation/rpc-cache.txt
index 8a382bea6808..5f757c8cf979 100644
--- a/trunk/Documentation/rpc-cache.txt
+++ b/trunk/Documentation/rpc-cache.txt
@@ -24,7 +24,7 @@ The common code handles such things as:
- general cache lookup with correct locking
- supporting 'NEGATIVE' as well as positive entries
- allowing an EXPIRED time on cache items, and removing
- items after they expire, and are no longer in-use.
+ items after they expire, and are no longe in-use.
- making requests to user-space to fill in cache entries
- allowing user-space to directly set entries in the cache
- delaying RPC requests that depend on as-yet incomplete
@@ -53,7 +53,7 @@ Creating a Cache
structure
void cache_put(struct kref *)
This is called when the last reference to an item is
- dropped. The pointer passed is to the 'ref' field
+ is dropped. The pointer passed is to the 'ref' field
in the cache_head. cache_put should release any
references create by 'cache_init' and, if CACHE_VALID
is set, any references created by cache_update.
diff --git a/trunk/Documentation/s390/3270.txt b/trunk/Documentation/s390/3270.txt
index 7a5c73a7ed7f..0a044e647d2d 100644
--- a/trunk/Documentation/s390/3270.txt
+++ b/trunk/Documentation/s390/3270.txt
@@ -111,7 +111,9 @@ Here are the installation steps in detail:
config3270.sh. Inspect the output script it produces,
/tmp/mkdev3270, and then run that script. This will create the
necessary character special device files and make the necessary
- changes to /etc/inittab.
+ changes to /etc/inittab. If you have selected DEVFS, the driver
+ itself creates the device files, and /tmp/mkdev3270 only changes
+ /etc/inittab.
Then notify /sbin/init that /etc/inittab has changed, by issuing
the telinit command with the q operand:
diff --git a/trunk/Documentation/s390/Debugging390.txt b/trunk/Documentation/s390/Debugging390.txt
index 4dd25ee549e9..844c03fe7921 100644
--- a/trunk/Documentation/s390/Debugging390.txt
+++ b/trunk/Documentation/s390/Debugging390.txt
@@ -8,8 +8,8 @@
Overview of Document:
=====================
This document is intended to give an good overview of how to debug
-Linux for s/390 & z/Architecture. It isn't intended as a complete reference & not a
-tutorial on the fundamentals of C & assembly. It doesn't go into
+Linux for s/390 & z/Architecture it isn't intended as a complete reference & not a
+tutorial on the fundamentals of C & assembly, it dosen't go into
390 IO in any detail. It is intended to complement the documents in the
reference section below & any other worthwhile references you get.
@@ -88,7 +88,7 @@ s/390 z/Architecture
0 0 Reserved ( must be 0 ) otherwise specification exception occurs.
1 1 Program Event Recording 1 PER enabled,
- PER is used to facilitate debugging e.g. single stepping.
+ PER is used to facilititate debugging e.g. single stepping.
2-4 2-4 Reserved ( must be 0 ).
@@ -163,7 +163,7 @@ s/390 z/Architecture
1 1 64 bit
32 1=31 bit addressing mode 0=24 bit addressing mode (for backward
- compatibility), linux always runs with this bit set to 1
+ compatibility ), linux always runs with this bit set to 1
33-64 Instruction address.
33-63 Reserved must be 0
@@ -188,7 +188,7 @@ Bytes 0-512 ( 200 hex ) on s/390 & 0-512,4096-4544,4604-5119 currently on z/Arch
are used by the processor itself for holding such information as exception indications &
entry points for exceptions.
Bytes after 0xc00 hex are used by linux for per processor globals on s/390 & z/Architecture
-( there is a gap on z/Architecture too currently between 0xc00 & 1000 which linux uses ).
+( there is a gap on z/Architecure too currently between 0xc00 & 1000 which linux uses ).
The closest thing to this on traditional architectures is the interrupt
vector table. This is a good thing & does simplify some of the kernel coding
however it means that we now cannot catch stray NULL pointers in the
@@ -239,7 +239,7 @@ they go to 64 Bit.
On 390 our limitations & strengths make us slightly different.
For backward compatibility we are only allowed use 31 bits (2GB)
-of our 32 bit addresses, however, we use entirely separate address
+of our 32 bit addresses,however, we use entirely separate address
spaces for the user & kernel.
This means we can support 2GB of non Extended RAM on s/390, & more
@@ -317,9 +317,9 @@ Each process/thread under Linux for S390 has its own kernel task_struct
defined in linux/include/linux/sched.h
The S390 on initialisation & resuming of a process on a cpu sets
the __LC_KERNEL_STACK variable in the spare prefix area for this cpu
-(which we use for per-processor globals).
+( which we use for per processor globals).
-The kernel stack pointer is intimately tied with the task structure for
+The kernel stack pointer is intimately tied with the task stucture for
each processor as follows.
s/390
@@ -354,7 +354,7 @@ static inline struct task_struct * get_current(void)
}
i.e. just anding the current kernel stack pointer with the mask -8192.
-Thankfully because Linux doesn't have support for nested IO interrupts
+Thankfully because Linux dosen't have support for nested IO interrupts
& our devices have large buffers can survive interrupts being shut for
short amounts of time we don't need a separate stack for interrupts.
@@ -366,8 +366,8 @@ Register Usage & Stackframes on Linux for s/390 & z/Architecture
Overview:
---------
This is the code that gcc produces at the top & the bottom of
-each function. It usually is fairly consistent & similar from
-function to function & if you know its layout you can probably
+each function, it usually is fairly consistent & similar from
+function to function & if you know its layout you can probalby
make some headway in finding the ultimate cause of a problem
after a crash without a source level debugger.
@@ -394,7 +394,7 @@ i.e they aren't in registers & they aren't static.
back-chain:
This is a pointer to the stack pointer before entering a
framed functions ( see frameless function ) prologue got by
-dereferencing the address of the current stack pointer,
+deferencing the address of the current stack pointer,
i.e. got by accessing the 32 bit value at the stack pointers
current location.
@@ -724,7 +724,7 @@ This is useful for debugging because
1) You can double check whether the files you expect to be included are the ones
that are being included ( e.g. double check that you aren't going to the i386 asm directory ).
2) Check that macro definitions aren't clashing with typedefs,
-3) Check that definitions aren't being used before they are being included.
+3) Check that definitons aren't being used before they are being included.
4) Helps put the line emitting the error under the microscope if it contains macros.
For convenience the Linux kernel's makefile will do preprocessing automatically for you
@@ -840,11 +840,12 @@ using the strip command to make it a more reasonable size to boot it.
A source/assembly mixed dump of the kernel can be done with the line
objdump --source vmlinux > vmlinux.lst
-Also, if the file isn't compiled -g, this will output as much debugging information
-as it can (e.g. function names). This is very slow as it spends lots
-of time searching for debugging info. The following self explanatory line should be used
-instead if the code isn't compiled -g, as it is much faster:
+Also if the file isn't compiled -g this will output as much debugging information
+as it can ( e.g. function names ), however, this is very slow as it spends lots
+of time searching for debugging info, the following self explanitory line should be used
+instead if the code isn't compiled -g.
objdump --disassemble-all --syms vmlinux > vmlinux.lst
+as it is much faster
As hard drive space is valuble most of us use the following approach.
1) Look at the emitted psw on the console to find the crash address in the kernel.
@@ -860,7 +861,7 @@ Linux source tree.
6) rm /arch/s390/kernel/signal.o
7) make /arch/s390/kernel/signal.o
8) watch the gcc command line emitted
-9) type it in again or alternatively cut & paste it on the console adding the -g option.
+9) type it in again or alernatively cut & paste it on the console adding the -g option.
10) objdump --source arch/s390/kernel/signal.o > signal.lst
This will output the source & the assembly intermixed, as the snippet below shows
This will unfortunately output addresses which aren't the same
@@ -912,8 +913,8 @@ If you wanted to know does ping work but didn't have the source
strace ping -c 1 127.0.0.1
& then look at the man pages for each of the syscalls below,
( In fact this is sometimes easier than looking at some spagetti
-source which conditionally compiles for several architectures ).
-Not everything that it throws out needs to make sense immediately.
+source which conditionally compiles for several architectures )
+Not everything that it throws out needs to make sense immeadiately
Just looking quickly you can see that it is making up a RAW socket
for the ICMP protocol.
@@ -973,9 +974,8 @@ through the pipe for each line containing the string open.
Example 3
---------
-Getting sophisticated
-telnetd crashes & I don't know why
-
+Getting sophistocated
+telnetd crashes on & I don't know why
Steps
-----
1) Replace the following line in /etc/inetd.conf
@@ -1085,7 +1085,8 @@ Notes
-----
Addresses & values in the VM debugger are always hex never decimal
Address ranges are of the format - or .
-e.g. The address range 0x2000 to 0x3000 can be described as 2000-3000 or 2000.1000
+e.g. The address range 0x2000 to 0x3000 can be described described as
+2000-3000 or 2000.1000
The VM Debugger is case insensitive.
@@ -1310,7 +1311,7 @@ for finding out when a particular variable changes.
An alternative way of finding the STD of a currently running process
is to do the following, ( this method is more complex but
-could be quite convenient if you aren't updating the kernel much &
+could be quite convient if you aren't updating the kernel much &
so your kernel structures will stay constant for a reasonable period of
time ).
@@ -1412,7 +1413,7 @@ SMP Specific commands
To find out how many cpus you have
Q CPUS displays all the CPU's available to your virtual machine
To find the cpu that the current cpu VM debugger commands are being directed at do
-Q CPU to change the current cpu VM debugger commands are being directed at do
+Q CPU to change the current cpu cpu VM debugger commands are being directed at do
CPU
On a SMP guest issue a command to all CPUs try prefixing the command with cpu all.
@@ -1673,8 +1674,8 @@ channel is idle & the second for device end ( secondary status ) sometimes you g
concurrently, you check how the IO went on by issuing a TEST SUBCHANNEL at each interrupt,
from which you receive an Interruption response block (IRB). If you get channel & device end
status in the IRB without channel checks etc. your IO probably went okay. If you didn't you
-probably need a doctor to examine the IRB & extended status word etc.
-If an error occurs, more sophistocated control units have a facitity known as
+probably need a doctorto examine the IRB & extended status word etc.
+If an error occurs more sophistocated control units have a facitity known as
concurrent sense this means that if an error occurs Extended sense information will
be presented in the Extended status word in the IRB if not you have to issue a
subsequent SENSE CCW command after the test subchannel.
@@ -1703,7 +1704,7 @@ concentrate on data processing.
IOP's can use one or more links ( known as channel paths ) to talk to each
IO device. It first checks for path availability & chooses an available one,
then starts ( & sometimes terminates IO ).
-There are two types of channel path: ESCON & the Parallel IO interface.
+There are two types of channel path ESCON & the Paralell IO interface.
IO devices are attached to control units, control units provide the
logic to interface the channel paths & channel path IO protocols to
@@ -1742,11 +1743,11 @@ controllers or a control unit which connects to 1000 3270 terminals ).
The 390 IO systems come in 2 flavours the current 390 machines support both
-The Older 360 & 370 Interface,sometimes called the Parallel I/O interface,
+The Older 360 & 370 Interface,sometimes called the paralell I/O interface,
sometimes called Bus-and Tag & sometimes Original Equipment Manufacturers
Interface (OEMI).
-This byte wide Parallel channel path/bus has parity & data on the "Bus" cable
+This byte wide paralell channel path/bus has parity & data on the "Bus" cable
& control lines on the "Tag" cable. These can operate in byte multiplex mode for
sharing between several slow devices or burst mode & monopolize the channel for the
whole burst. Upto 256 devices can be addressed on one of these cables. These cables are
@@ -1776,7 +1777,7 @@ Consoles 3270 & 3215 ( a teletype emulated under linux for a line mode console )
DASD's direct access storage devices ( otherwise known as hard disks ).
Tape Drives.
CTC ( Channel to Channel Adapters ),
-ESCON or Parallel Cables used as a very high speed serial link
+ESCON or Paralell Cables used as a very high speed serial link
between 2 machines. We use 2 cables under linux to do a bi-directional serial link.
@@ -1802,8 +1803,8 @@ OSA 7C09 ON OSA 7C09 SUBCHANNEL = 0001
OSA 7C14 ON OSA 7C14 SUBCHANNEL = 0002
OSA 7C15 ON OSA 7C15 SUBCHANNEL = 0003
-If you have a guest with certain privileges you may be able to see devices
-which don't belong to you. To avoid this, add the option V.
+If you have a guest with certain priviliges you may be able to see devices
+which don't belong to you to avoid this do add the option V.
e.g.
Q V OSA
@@ -1836,7 +1837,7 @@ RDRLIST
RECEIVE / LOG TXT A1 ( replace
8)
filel & press F11 to look at it
-You should see something like:
+You should see someting like.
00020942' SSCH B2334000 0048813C CC 0 SCH 0000 DEV 7C08
CPA 000FFDF0 PARM 00E2C9C4 KEY 0 FPI C0 LPM 80
@@ -1915,7 +1916,7 @@ Assembly
--------
info registers: displays registers other than floating point.
info all-registers: displays floating points as well.
-disassemble: disassembles
+disassemble: dissassembles
e.g.
disassemble without parameters will disassemble the current function
disassemble $pc $pc+10
@@ -1934,7 +1935,7 @@ undisplay : undo's display's
info breakpoints: shows all current breakpoints
-info stack: shows stack back trace ( if this doesn't work too well, I'll show you the
+info stack: shows stack back trace ( if this dosent work too well, I'll show you the
stacktrace by hand below ).
info locals: displays local variables.
@@ -2044,13 +2045,13 @@ what gdb does when the victim receives certain signals.
list:
e.g.
list lists current function source
-list 1,10 list first 10 lines of current file.
+list 1,10 list first 10 lines of curret file.
list test.c:1,10
directory:
Adds directories to be searched for source if gdb cannot find the source.
-(note it is a bit sensititive about slashes)
+(note it is a bit sensititive about slashes )
e.g. To add the root of the filesystem to the searchpath do
directory //
@@ -2122,9 +2123,9 @@ p/x (*(**$sp+56))&0x7fffffff
Disassembling instructions without debug info
---------------------------------------------
-gdb typically complains if there is a lack of debugging
-symbols in the disassemble command with
-"No function contains specified address." To get around
+gdb typically compains if there is a lack of debugging
+symbols in the disassemble command with
+"No function contains specified address." to get around
this do
x/xi
e.g.
@@ -2183,7 +2184,7 @@ ps -aux | grep gdb
kill -SIGSEGV
or alternatively use killall -SIGSEGV gdb if you have the killall command.
Now look at the core dump.
-./gdb core
+./gdb ./gdb core
Displays the following
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
@@ -2315,7 +2316,7 @@ Showing us the shared libraries init uses where they are in memory
/proc/1/mem is the current running processes memory which you
can read & write to like a file.
strace uses this sometimes as it is a bit faster than the
-rather inefficient ptrace interface for peeking at DATA.
+rather inefficent ptrace interface for peeking at DATA.
cat status
@@ -2445,7 +2446,7 @@ displays the following lines as it executes them.
+ RELSTATUS=release
+ MACHTYPE=i586-pc-linux-gnu
-perl -d runs the perlscript in a fully interactive debugger
+perl -d runs the perlscript in a fully intercative debugger
.
Type 'h' in the debugger for help.
@@ -2476,7 +2477,7 @@ Lcrash is a perfectly normal program,however, it requires 2
additional files, Kerntypes which is built using a patch to the
linux kernel sources in the linux root directory & the System.map.
-Kerntypes is an objectfile whose sole purpose in life
+Kerntypes is an an objectfile whose sole purpose in life
is to provide stabs debug info to lcrash, to do this
Kerntypes is built from kerntypes.c which just includes the most commonly
referenced header files used when debugging, lcrash can then read the
diff --git a/trunk/Documentation/s390/cds.txt b/trunk/Documentation/s390/cds.txt
index d80e5733827d..f0be389c7116 100644
--- a/trunk/Documentation/s390/cds.txt
+++ b/trunk/Documentation/s390/cds.txt
@@ -133,7 +133,7 @@ determine the device driver owning the device that raised the interrupt.
In order not to introduce a new I/O concept to the common Linux code,
Linux/390 preserves the IRQ concept and semantically maps the ESA/390
subchannels to Linux as IRQs. This allows Linux/390 to support up to 64k
-different IRQs, uniquely representing a single device each.
+different IRQs, uniquely representig a single device each.
Up to kernel 2.4, Linux/390 used to provide interfaces via the IRQ (subchannel).
For internal use of the common I/O layer, these are still there. However,
@@ -143,7 +143,7 @@ During its startup the Linux/390 system checks for peripheral devices. Each
of those devices is uniquely defined by a so called subchannel by the ESA/390
channel subsystem. While the subchannel numbers are system generated, each
subchannel also takes a user defined attribute, the so called device number.
-Both subchannel number and device number cannot exceed 65535. During driverfs
+Both subchannel number and device number can not exceed 65535. During driverfs
initialisation, the information about control unit type and device types that
imply specific I/O commands (channel command words - CCWs) in order to operate
the device are gathered. Device drivers can retrieve this set of hardware
@@ -177,11 +177,11 @@ This routine returns the characteristics for the device specified.
The function is meant to be called with an irq handler in place; that is,
at earliest during set_online() processing.
-While the request is processed synchronously, the device interrupt
+While the request is procesed synchronously, the device interrupt
handler is called for final ending status. In case of error situations the
interrupt handler may recover appropriately. The device irq handler can
recognize the corresponding interrupts by the interruption parameter be
-0x00524443. The ccw_device must not be locked prior to calling read_dev_chars().
+0x00524443.The ccw_device must not be locked prior to calling read_dev_chars().
The function may be called enabled or disabled.
@@ -325,7 +325,7 @@ with the following CCW flags values defined :
CCW_FLAG_DC - data chaining
CCW_FLAG_CC - command chaining
-CCW_FLAG_SLI - suppress incorrect length
+CCW_FLAG_SLI - suppress incorrct length
CCW_FLAG_SKIP - skip
CCW_FLAG_PCI - PCI
CCW_FLAG_IDA - indirect addressing
@@ -348,7 +348,7 @@ The ccw_device_start() function returns :
not online.
When the I/O request completes, the CDS first level interrupt handler will
-accumulate the status in a struct irb and then call the device interrupt handler.
+accumalate the status in a struct irb and then call the device interrupt handler.
The intparm field will contain the value the device driver has associated with a
particular I/O request. If a pending device status was recognized,
intparm will be set to 0 (zero). This may happen during I/O initiation or delayed
@@ -433,7 +433,7 @@ puts the CPU into I/O disabled state by preserving the current PSW flags.
The device driver is allowed to issue the next ccw_device_start() call from
within its interrupt handler already. It is not required to schedule a
-bottom-half, unless an non deterministically long running error recovery procedure
+bottom-half, unless an non deterministicly long running error recovery procedure
or similar needs to be scheduled. During I/O processing the Linux/390 generic
I/O device driver support has already obtained the IRQ lock, i.e. the handler
must not try to obtain it again when calling ccw_device_start() or we end in a
diff --git a/trunk/Documentation/s390/crypto/crypto-API.txt b/trunk/Documentation/s390/crypto/crypto-API.txt
index 29dee792c887..78a77624a716 100644
--- a/trunk/Documentation/s390/crypto/crypto-API.txt
+++ b/trunk/Documentation/s390/crypto/crypto-API.txt
@@ -61,9 +61,9 @@ Example: z990 crypto instruction for SHA1 algorithm is available
-> when the sha1 algorithm is requested through the crypto API
(which has a module autoloader) the z990 module will be loaded.
-TBD: a userspace module probing mechanism
+TBD: a userspace module probin mechanism
something like 'probe sha1 sha1_z990 sha1' in modprobe.conf
- -> try module sha1_z990, if it fails to load standard module sha1
+ -> try module sha1_z990, if it fails to load load standard module sha1
the 'probe' statement is currently not supported in modprobe.conf
diff --git a/trunk/Documentation/s390/driver-model.txt b/trunk/Documentation/s390/driver-model.txt
index 62c082387aea..efb674eda4d4 100644
--- a/trunk/Documentation/s390/driver-model.txt
+++ b/trunk/Documentation/s390/driver-model.txt
@@ -157,7 +157,7 @@ notify: This function is called by the common I/O layer for some state changes
* In online state, device detached (CIO_GONE) or last path gone
(CIO_NO_PATH). The driver must return !0 to keep the device; for
return code 0, the device will be deleted as usual (also when no
- notify function is registered). If the driver wants to keep the
+ notify function is registerd). If the driver wants to keep the
device, it is moved into disconnected state.
* In disconnected state, device operational again (CIO_OPER). The
common I/O layer performs some sanity checks on device number and
@@ -262,7 +262,7 @@ attribute 'online' which can be 0 or 1.
-----------
The netiucv driver creates an attribute 'connection' under
-bus/iucv/drivers/netiucv. Piping to this attribute creates a new netiucv
+bus/iucv/drivers/netiucv. Piping to this attibute creates a new netiucv
connection to the specified host.
Netiucv connections show up under devices/iucv/ as "netiucv". The interface
diff --git a/trunk/Documentation/s390/monreader.txt b/trunk/Documentation/s390/monreader.txt
index beeaa4b24427..d843bb04906e 100644
--- a/trunk/Documentation/s390/monreader.txt
+++ b/trunk/Documentation/s390/monreader.txt
@@ -83,7 +83,7 @@ This loads the module and sets the DCSS name to "MYDCSS".
NOTE:
-----
-This API provides no interface to control the *MONITOR service, e.g. specify
+This API provides no interface to control the *MONITOR service, e.g. specifiy
which data should be collected. This can be done by the CP command MONITOR
(Class E privileged), see "CP Command and Utility Reference".
diff --git a/trunk/Documentation/s390/s390dbf.txt b/trunk/Documentation/s390/s390dbf.txt
index 000230cd26db..e321a8ed2a2d 100644
--- a/trunk/Documentation/s390/s390dbf.txt
+++ b/trunk/Documentation/s390/s390dbf.txt
@@ -11,7 +11,7 @@ where log records can be stored efficiently in memory, where each component
(e.g. device drivers) can have one separate debug log.
One purpose of this is to inspect the debug logs after a production system crash
in order to analyze the reason for the crash.
-If the system still runs but only a subcomponent which uses dbf fails,
+If the system still runs but only a subcomponent which uses dbf failes,
it is possible to look at the debug logs on a live system via the Linux
debugfs filesystem.
The debug feature may also very useful for kernel and driver development.
@@ -65,7 +65,7 @@ Predefined views for hex/ascii, sprintf and raw binary data are provided.
It is also possible to define other views. The content of
a view can be inspected simply by reading the corresponding debugfs file.
-All debug logs have an actual debug level (range from 0 to 6).
+All debug logs have an an actual debug level (range from 0 to 6).
The default level is 3. Event and Exception functions have a 'level'
parameter. Only debug entries with a level that is lower or equal
than the actual level are written to the log. This means, when
@@ -83,8 +83,8 @@ Example:
It is also possible to deactivate the debug feature globally for every
debug log. You can change the behavior using 2 sysctl parameters in
/proc/sys/s390dbf:
-There are currently 2 possible triggers, which stop the debug feature
-globally. The first possibility is to use the "debug_active" sysctl. If
+There are currently 2 possible triggers, which stop the debug feature
+globally. The first possbility is to use the "debug_active" sysctl. If
set to 1 the debug feature is running. If "debug_active" is set to 0 the
debug feature is turned off.
The second trigger which stops the debug feature is an kernel oops.
@@ -468,7 +468,7 @@ The hex_ascii view shows the data field in hex and ascii representation
The raw view returns a bytestream as the debug areas are stored in memory.
The sprintf view formats the debug entries in the same way as the sprintf
-function would do. The sprintf event/exception functions write to the
+function would do. The sprintf event/expection functions write to the
debug entry a pointer to the format string (size = sizeof(long))
and for each vararg a long value. So e.g. for a debug entry with a format
string plus two varargs one would need to allocate a (3 * sizeof(long))
@@ -556,7 +556,7 @@ The input_proc can be used to implement functionality when it is written to
the view (e.g. like with 'echo "0" > /sys/kernel/debug/s390dbf/dasd/level).
For header_proc there can be used the default function
-debug_dflt_header_fn() which is defined in debug.h.
+debug_dflt_header_fn() which is defined in in debug.h.
and which produces the same header output as the predefined views.
E.g:
00 00964419409:440761 2 - 00 88023ec
diff --git a/trunk/Documentation/sched-coding.txt b/trunk/Documentation/sched-coding.txt
index cbd8db752acf..2b75ef67c9fe 100644
--- a/trunk/Documentation/sched-coding.txt
+++ b/trunk/Documentation/sched-coding.txt
@@ -15,7 +15,7 @@ Main Scheduling Methods
void load_balance(runqueue_t *this_rq, int idle)
Attempts to pull tasks from one cpu to another to balance cpu usage,
if needed. This method is called explicitly if the runqueues are
- imbalanced or periodically by the timer tick. Prior to calling,
+ inbalanced or periodically by the timer tick. Prior to calling,
the current runqueue must be locked and interrupts disabled.
void schedule()
diff --git a/trunk/Documentation/sched-design.txt b/trunk/Documentation/sched-design.txt
index 1605bf0cba8b..9d04e7bbf45f 100644
--- a/trunk/Documentation/sched-design.txt
+++ b/trunk/Documentation/sched-design.txt
@@ -93,9 +93,9 @@ and the goal is also to add a few new things:
Design
======
-The core of the new scheduler contains the following mechanisms:
+the core of the new scheduler are the following mechanizms:
- - *two* priority-ordered 'priority arrays' per CPU. There is an 'active'
+ - *two*, priority-ordered 'priority arrays' per CPU. There is an 'active'
array and an 'expired' array. The active array contains all tasks that
are affine to this CPU and have timeslices left. The expired array
contains all tasks which have used up their timeslices - but this array
diff --git a/trunk/Documentation/scsi/ChangeLog.1992-1997 b/trunk/Documentation/scsi/ChangeLog.1992-1997
index 6faad7e6417c..dc88ee2ab73d 100644
--- a/trunk/Documentation/scsi/ChangeLog.1992-1997
+++ b/trunk/Documentation/scsi/ChangeLog.1992-1997
@@ -1214,7 +1214,7 @@ Thu Jul 21 10:37:39 1994 Eric Youngdale (eric@esp22)
* sr.c(sr_open): Do not allow opens with write access.
-Mon Jul 18 09:51:22 1994 Eric Youngdale (eric@esp22)
+Mon Jul 18 09:51:22 1994 1994 Eric Youngdale (eric@esp22)
* Linux 1.1.31 released.
diff --git a/trunk/Documentation/scsi/NinjaSCSI.txt b/trunk/Documentation/scsi/NinjaSCSI.txt
index 3229b64cf24e..041780f428ac 100644
--- a/trunk/Documentation/scsi/NinjaSCSI.txt
+++ b/trunk/Documentation/scsi/NinjaSCSI.txt
@@ -24,7 +24,7 @@ SCSI device: I-O data CDPS-PX24 (CD-ROM drive)
You can also use "cardctl" program (this program is in pcmcia-cs source
code) to get more info.
-# cat /var/log/messages
+# cat /var/log/messgaes
...
Jan 2 03:45:06 lindberg cardmgr[78]: unsupported card in socket 1
Jan 2 03:45:06 lindberg cardmgr[78]: product info: "WBT", "NinjaSCSI-3", "R1.0"
@@ -36,18 +36,18 @@ Socket 1:
product info: "IO DATA", "CBSC16 ", "1"
-[2] Get the Linux kernel source, and extract it to /usr/src.
- Because the NinjaSCSI driver requires some SCSI header files in Linux
- kernel source, I recommend rebuilding your kernel; this eliminates
- some versioning problems.
+[2] Get Linux kernel source, and extract it to /usr/src.
+ Because NinjaSCSI driver requiers some SCSI header files in Linux kernel
+ source.
+ I recomend rebuilding your kernel. This eliminate some versioning problem.
$ cd /usr/src
$ tar -zxvf linux-x.x.x.tar.gz
$ cd linux
$ make config
...
-[3] If you use this driver with Kernel 2.2, unpack pcmcia-cs in some directory
- and make & install. This driver requires the pcmcia-cs header file.
+[3] If you use this driver with Kernel 2.2, Unpack pcmcia-cs in some directory
+ and make & install. This driver requies pcmcia-cs header file.
$ cd /usr/src
$ tar zxvf cs-pcmcia-cs-3.x.x.tar.gz
...
@@ -59,10 +59,10 @@ $ emacs Makefile
...
$ make
-[5] Copy nsp_cs.ko to suitable place, like /lib/modules//pcmcia/ .
+[5] Copy nsp_cs.o to suitable plase, like /lib/modules//pcmcia/ .
[6] Add these lines to /etc/pcmcia/config .
- If you use pcmcia-cs-3.1.8 or later, we can use "nsp_cs.conf" file.
+ If you yse pcmcia-cs-3.1.8 or later, we can use "nsp_cs.conf" file.
So, you don't need to edit file. Just copy to /etc/pcmcia/ .
-------------------------------------
diff --git a/trunk/Documentation/scsi/aacraid.txt b/trunk/Documentation/scsi/aacraid.txt
index 3367130e64f6..ee03678c8029 100644
--- a/trunk/Documentation/scsi/aacraid.txt
+++ b/trunk/Documentation/scsi/aacraid.txt
@@ -4,7 +4,7 @@ Introduction
-------------------------
The aacraid driver adds support for Adaptec (http://www.adaptec.com)
RAID controllers. This is a major rewrite from the original
-Adaptec supplied driver. It has significantly cleaned up both the code
+Adaptec supplied driver. It has signficantly cleaned up both the code
and the running binary size (the module is less than half the size of
the original).
diff --git a/trunk/Documentation/scsi/aic79xx.txt b/trunk/Documentation/scsi/aic79xx.txt
index 904d49e90ef2..382b439b439e 100644
--- a/trunk/Documentation/scsi/aic79xx.txt
+++ b/trunk/Documentation/scsi/aic79xx.txt
@@ -81,7 +81,7 @@ The following information is available in this file:
an SDTR with an offset of 0 to be sure the target
knows we are async. This works around a firmware defect
in the Quantum Atlas 10K.
- - Implement controller suspend and resume.
+ - Implement controller susupend and resume.
- Clear PCI error state during driver attach so that we
don't disable memory mapped I/O due to a stray write
by some other driver probe that occurred before we
@@ -94,7 +94,7 @@ The following information is available in this file:
- Add support for scsi_report_device_reset() found in
2.5.X kernels.
- Add 7901B support.
- - Simplify handling of the packetized lun Rev A workaround.
+ - Simplify handling of the packtized lun Rev A workaround.
- Correct and simplify handling of the ignore wide residue
message. The previous code would fail to report a residual
if the transaction data length was even and we received
diff --git a/trunk/Documentation/scsi/aic7xxx.txt b/trunk/Documentation/scsi/aic7xxx.txt
index 9b894f116d95..3481fcded4c2 100644
--- a/trunk/Documentation/scsi/aic7xxx.txt
+++ b/trunk/Documentation/scsi/aic7xxx.txt
@@ -160,7 +160,7 @@ The following information is available in this file:
6.2.34 (May 5th, 2003)
- Fix locking regression instroduced in 6.2.29 that
- could cause a lock order reversal between the io_request_lock
+ could cuase a lock order reversal between the io_request_lock
and our per-softc lock. This was only possible on RH9,
SuSE, and kernel.org 2.4.X kernels.
diff --git a/trunk/Documentation/scsi/aic7xxx_old.txt b/trunk/Documentation/scsi/aic7xxx_old.txt
index c92f4473193b..79e5ac6cb6ff 100644
--- a/trunk/Documentation/scsi/aic7xxx_old.txt
+++ b/trunk/Documentation/scsi/aic7xxx_old.txt
@@ -102,7 +102,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
The hardware RAID devices sold by Adaptec are *NOT* supported by this
driver (and will people please stop emailing me about them, they are
a totally separate beast from the bare SCSI controllers and this driver
- cannot be retrofitted in any sane manner to support the hardware RAID
+ can not be retrofitted in any sane manner to support the hardware RAID
features on those cards - Doug Ledford).
@@ -241,7 +241,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
that instead of dumping the register contents on the card, this
option dumps the contents of the sequencer program RAM. This gives
the ability to verify that the instructions downloaded to the
- card's sequencer are indeed what they are supposed to be. Again,
+ card's sequencer are indeed what they are suppossed to be. Again,
unless you have documentation to tell you how to interpret these
numbers, then it is totally useless.
@@ -317,7 +317,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
initial DEVCONFIG values for each of your aic7xxx controllers as
they are listed, and also record what the machine is detecting as
the proper termination on your controllers. NOTE: the order in
- which the initial DEVCONFIG values are printed out is not guaranteed
+ which the initial DEVCONFIG values are printed out is not gauranteed
to be the same order as the SCSI controllers are registered. The
above option and this option both work on the order of the SCSI
controllers as they are registered, so make sure you match the right
diff --git a/trunk/Documentation/scsi/dc395x.txt b/trunk/Documentation/scsi/dc395x.txt
index 88219f96633d..ae3b79a2d275 100644
--- a/trunk/Documentation/scsi/dc395x.txt
+++ b/trunk/Documentation/scsi/dc395x.txt
@@ -20,7 +20,7 @@ Parameters
----------
The driver uses the settings from the EEPROM set in the SCSI BIOS
setup. If there is no EEPROM, the driver uses default values.
-Both can be overridden by command line parameters (module or kernel
+Both can be overriden by command line parameters (module or kernel
parameters).
The following parameters are available:
diff --git a/trunk/Documentation/scsi/dpti.txt b/trunk/Documentation/scsi/dpti.txt
index f36dc0e7c8da..6e45e70243e5 100644
--- a/trunk/Documentation/scsi/dpti.txt
+++ b/trunk/Documentation/scsi/dpti.txt
@@ -48,7 +48,7 @@
* Implemented suggestions from Alan Cox
* Added calculation of resid for sg layer
* Better error handling
- * Added checking underflow conditions
+ * Added checking underflow condtions
* Added DATAPROTECT checking
* Changed error return codes
* Fixed pointer bug in bus reset routine
diff --git a/trunk/Documentation/scsi/ibmmca.txt b/trunk/Documentation/scsi/ibmmca.txt
index 35f6b8ed2295..d16ce5b540f4 100644
--- a/trunk/Documentation/scsi/ibmmca.txt
+++ b/trunk/Documentation/scsi/ibmmca.txt
@@ -229,7 +229,7 @@
In a second step of the driver development, the following improvement has
been applied: The first approach limited the number of devices to 7, far
- fewer than the 15 that it could use, then it just mapped ldn ->
+ fewer than the 15 that it could usem then it just maped ldn ->
(ldn/8,ldn%8) for pun,lun. We ended up with a real mishmash of puns
and luns, but it all seemed to work.
@@ -254,12 +254,12 @@
device to be existant, but it has no ldn assigned, it gets a ldn out of 7
to 14. The numbers are assigned in cyclic order. Therefore it takes 8
dynamical reassignments on the SCSI-devices, until a certain device
- loses its ldn again. This assures that dynamical remapping is avoided
+ loses its ldn again. This assures, that dynamical remapping is avoided
during intense I/O between up to 15 SCSI-devices (means pun,lun
- combinations). A further advantage of this method is that people who
+ combinations). A further advantage of this method is, that people who
build their kernel without probing on all luns will get what they expect,
because the driver just won't assign everything with lun>0 when
- multiple lun probing is inactive.
+ multpile lun probing is inactive.
2.4 SCSI-Device Order
---------------------
@@ -309,9 +309,9 @@
2.6 Abort & Reset Commands
--------------------------
These are implemented with busy waiting for interrupt to arrive.
- ibmmca_reset() and ibmmca_abort() do not work sufficiently well
- up to now and need still a lot of development work. This seems
- to be a problem with other low-level SCSI drivers too, however
+ ibmmca_reset() and ibmmca_abort() do not work sufficently well
+ up to now and need still a lot of development work. But, this seems
+ to be even a problem with other SCSI-low level drivers, too. However,
this should be no excuse.
2.7 Disk Geometry
@@ -684,8 +684,8 @@
not like sending commands to non-existing SCSI-devices and will react
with a command error as a sign of protest. While this error is not
present on IBM SCSI Adapter w/cache, it appears on IBM Integrated SCSI
- Adapters. Therefore, I implemented a workaround to forgive those
- adapters their protests, but it is marked up in the statistics, so
+ Adapters. Therefore, I implemented a workarround to forgive those
+ adapters their protests, but it is marked up in the statisctis, so
after a successful boot, you can see in /proc/scsi/ibmmca/
how often the command errors have been forgiven to the SCSI-subsystem.
If the number is bigger than 0, you have a SCSI subsystem of older
@@ -778,15 +778,15 @@
not accept this, as they stick quite near to ANSI-SCSI and report
a COMMAND_ERROR message which causes the driver to panic. The main
problem was located around the INQUIRY command. Now, for all the
- mentioned commands, the buffersize sent to the adapter is at
+ mentioned commands, the buffersize, sent to the adapter is at
maximum 255 which seems to be a quite reasonable solution.
- TEST_UNIT_READY gets a buffersize of 0 to make sure that no
+ TEST_UNIT_READY gets a buffersize of 0 to make sure, that no
data is transferred in order to avoid any possible command failure.
- 2) On unsuccessful TEST_UNIT_READY, the mid-level driver has to send
- a REQUEST_SENSE in order to see where the problem is located. This
+ 2) On unsuccessful TEST_UNIT_READY, the midlevel-driver has to send
+ a REQUEST_SENSE in order to see, where the problem is located. This
REQUEST_SENSE may have various length in its answer-buffer. IBM
- SCSI-subsystems report a command failure if the returned buffersize
- is different from the sent buffersize, but this can be suppressed by
+ SCSI-subsystems report a command failure, if the returned buffersize
+ is different from the sent buffersize, but this can be supressed by
a special bit, which is now done and problems seem to be solved.
2) Code adaption to all kernel-releases. Now, the 3.2 code compiles on
2.0.x, 2.1.x, 2.2.x and 2.3.x kernel releases without any code-changes.
@@ -1086,7 +1086,7 @@
Q: "Reset SCSI-devices at boottime" halts the system at boottime, why?
A: This is only tested with the IBM SCSI Adapter w/cache. It is not
- yet proven to run on other adapters, however you may be lucky.
+ yet prooved to run on other adapters, however you may be lucky.
In version 3.1d this has been hugely improved and should work better,
now. Normally you really won't need to activate this flag in the
kernel configuration, as all post 1989 SCSI-devices should accept
@@ -1104,7 +1104,7 @@
The parameter 'normal' sets the new industry standard, starting
from pun 0, scanning up to pun 6. This allows you to change your
opinion still after having already compiled the kernel.
- Q: Why can't I find IBM MCA SCSI support in the config menu?
+ Q: Why I cannot find the IBM MCA SCSI support in the config menue?
A: You have to activate MCA bus support, first.
Q: Where can I find the latest info about this driver?
A: See the file MAINTAINERS for the current WWW-address, which offers
@@ -1156,7 +1156,7 @@
Guide) what has to be done for reset, we still share the bad shape of
the reset functions with all other low level SCSI-drivers.
Astonishingly, reset works in most cases quite ok, but the harddisks
- won't run in synchronous mode anymore after a reset, until you reboot.
+ won't run in synchonous mode anymore after a reset, until you reboot.
Q: Why does my XXX w/Cache adapter not use read-prefetch?
A: Ok, that is not completely possible. If a cache is present, the
adapter tries to use it internally. Explicitly, one can use the cache
diff --git a/trunk/Documentation/scsi/megaraid.txt b/trunk/Documentation/scsi/megaraid.txt
index 3c7cea51e687..ff864c0f494c 100644
--- a/trunk/Documentation/scsi/megaraid.txt
+++ b/trunk/Documentation/scsi/megaraid.txt
@@ -4,11 +4,11 @@
Overview:
--------
-Different classes of controllers from LSI Logic accept and respond to the
+Different classes of controllers from LSI Logic, accept and respond to the
user applications in a similar way. They understand the same firmware control
commands. Furthermore, the applications also can treat different classes of
the controllers uniformly. Hence it is logical to have a single module that
-interfaces with the applications on one side and all the low level drivers
+interefaces with the applications on one side and all the low level drivers
on the other.
The advantages, though obvious, are listed for completeness:
diff --git a/trunk/Documentation/scsi/ncr53c8xx.txt b/trunk/Documentation/scsi/ncr53c8xx.txt
index 58ad8db333d9..822d2aca3700 100644
--- a/trunk/Documentation/scsi/ncr53c8xx.txt
+++ b/trunk/Documentation/scsi/ncr53c8xx.txt
@@ -70,7 +70,7 @@ Written by Gerard Roudier
15. SCSI problem troubleshooting
15.1 Problem tracking
15.2 Understanding hardware error reports
-16. Synchronous transfer negotiation tables
+16. Synchonous transfer negotiation tables
16.1 Synchronous timings for 53C875 and 53C860 Ultra-SCSI controllers
16.2 Synchronous timings for fast SCSI-2 53C8XX controllers
17. Serial NVRAM support (by Richard Waltham)
@@ -96,10 +96,10 @@ The original driver has been written for 386bsd and FreeBSD by:
It is now available as a bundle of 2 drivers:
- ncr53c8xx generic driver that supports all the SYM53C8XX family including
- the earliest 810 rev. 1, the latest 896 (2 channel LVD SCSI controller) and
+ the ealiest 810 rev. 1, the latest 896 (2 channel LVD SCSI controller) and
the new 895A (1 channel LVD SCSI controller).
- sym53c8xx enhanced driver (a.k.a. 896 drivers) that drops support of oldest
- chips in order to gain advantage of new features, as LOAD/STORE instructions
+ chips in order to gain advantage of new features, as LOAD/STORE intructions
available since the 810A and hardware phase mismatch available with the
896 and the 895A.
@@ -207,7 +207,7 @@ The 896 and the 895A allows handling of the phase mismatch context from
SCRIPTS (avoids the phase mismatch interrupt that stops the SCSI processor
until the C code has saved the context of the transfer).
Implementing this without using LOAD/STORE instructions would be painfull
-and I didn't even want to try it.
+and I did'nt even want to try it.
The 896 chip supports 64 bit PCI transactions and addressing, while the
895A supports 32 bit PCI transactions and 64 bit addressing.
@@ -631,8 +631,8 @@ string variable using 'insmod'.
A boot setup command for the ncr53c8xx (sym53c8xx) driver begins with the
driver name "ncr53c8xx="(sym53c8xx). The kernel syntax parser then expects
-an optional list of integers separated with comma followed by an optional
-list of comma-separated strings. Example of boot setup command under lilo
+an optionnal list of integers separated with comma followed by an optional
+list of comma-separated strings. Example of boot setup command under lilo
prompt:
lilo: linux root=/dev/hda2 ncr53c8xx=tags:4,sync:10,debug:0x200
@@ -778,7 +778,7 @@ port address 0x1400.
Some scsi boards use a 875 (ultra wide) and only supply narrow connectors.
If you have connected a wide device with a 50 pins to 68 pins cable
converter, any accepted wide negotiation will break further data transfers.
- In such a case, using "wide:0" in the bootup command will be helpful.
+ In such a case, using "wide:0" in the bootup command will be helpfull.
10.2.14 Differential mode
diff:0 never set up diff mode
@@ -899,7 +899,7 @@ boot setup can be:
ncr53c8xx=safe:y,mpar:y
ncr53c8xx=safe:y
-My personal system works flawlessly with the following equivalent setup:
+My personnal system works flawlessly with the following equivalent setup:
ncr53c8xx=mpar:y,spar:y,disc:y,specf:1,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
tags:32,sync:12,debug:0,burst:7,led:1,wide:1,settle:2,diff:0,irqm:0
@@ -1151,7 +1151,7 @@ Driver files:
New driver versions are made available separately in order to allow testing
changes and new features prior to including them into the linux kernel
-distribution. The following URL provides information on latest available
+distribution. The following URL provides informations on latest avalaible
patches:
ftp://ftp.tux.org/pub/people/gerard-roudier/README
@@ -1382,7 +1382,7 @@ SCSI standards, chip cores functionnals and internal driver data structures.
You are not required to decode and understand them, unless you want to help
maintain the driver code.
-16. Synchronous transfer negotiation tables
+16. Synchonous transfer negotiation tables
Tables below have been created by calling the routine the driver uses
for synchronisation negotiation timing calculation and chip setting.
diff --git a/trunk/Documentation/scsi/osst.txt b/trunk/Documentation/scsi/osst.txt
index f536907e241d..ce574e7791ab 100644
--- a/trunk/Documentation/scsi/osst.txt
+++ b/trunk/Documentation/scsi/osst.txt
@@ -56,7 +56,8 @@ Compile your kernel and install the modules.
Now, your osst driver is inside the kernel or available as a module,
depending on your choice during kernel config. You may still need to create
-the device nodes by calling the Makedevs.sh script (see below) manually.
+the device nodes by calling the Makedevs.sh script (see below) manually,
+unless you use a devfs kernel, where this won't be needed.
To load your module, you may use the command
modprobe osst
diff --git a/trunk/Documentation/scsi/ppa.txt b/trunk/Documentation/scsi/ppa.txt
index 067ac394e0b2..5d9223bc1bd5 100644
--- a/trunk/Documentation/scsi/ppa.txt
+++ b/trunk/Documentation/scsi/ppa.txt
@@ -3,7 +3,7 @@
General Iomega ZIP drive page for Linux:
http://www.torque.net/~campbell/
-Driver archive for old drivers:
+Driver achive for old drivers:
http://www.torque.net/~campbell/ppa/
Linux Parport page (parallel port)
diff --git a/trunk/Documentation/scsi/scsi-changer.txt b/trunk/Documentation/scsi/scsi-changer.txt
index d74bbd29eb3a..c132687b017a 100644
--- a/trunk/Documentation/scsi/scsi-changer.txt
+++ b/trunk/Documentation/scsi/scsi-changer.txt
@@ -31,7 +31,7 @@ changers. But it allows to handle nearly all possible cases. It knows
media transport - this one shuffles around the media, i.e. the
transport arm. Also known as "picker".
storage - a slot which can hold a media.
- import/export - the same as above, but is accessible from outside,
+ import/export - the same as above, but is accessable from outside,
i.e. there the operator (you !) can use this to
fill in and remove media from the changer.
Sometimes named "mailslot".
diff --git a/trunk/Documentation/scsi/scsi_eh.txt b/trunk/Documentation/scsi/scsi_eh.txt
index b964eef2f62f..ce767b90bb0d 100644
--- a/trunk/Documentation/scsi/scsi_eh.txt
+++ b/trunk/Documentation/scsi/scsi_eh.txt
@@ -160,7 +160,7 @@ ways.
- Fine-grained EH callbacks
LLDD can implement fine-grained EH callbacks and let SCSI
midlayer drive error handling and call appropriate callbacks.
- This will be discussed further in [2-1].
+ This will be dicussed further in [2-1].
- eh_strategy_handler() callback
This is one big callback which should perform whole error
@@ -194,7 +194,7 @@ lower layers and lower layers are ready to process or fail the scmd
again.
To achieve these goals, EH performs recovery actions with increasing
-severity. Some actions are performed by issuing SCSI commands and
+severity. Some actions are performed by issueing SCSI commands and
others are performed by invoking one of the following fine-grained
hostt EH callbacks. Callbacks may be omitted and omitted ones are
considered to fail always.
diff --git a/trunk/Documentation/scsi/st.txt b/trunk/Documentation/scsi/st.txt
index 5ff65b184265..20e30cf31877 100644
--- a/trunk/Documentation/scsi/st.txt
+++ b/trunk/Documentation/scsi/st.txt
@@ -249,7 +249,7 @@ BOOT TIME CONFIGURATION
If the driver is compiled into the kernel, the same parameters can be
also set using, e.g., the LILO command line. The preferred syntax is
-to use the same keyword used when loading as module but prepended
+is to use the same keyword used when loading as module but prepended
with 'st.'. For instance, to set the maximum number of scatter/gather
segments, the parameter 'st.max_sg_segs=xx' should be used (xx is the
number of scatter/gather segments).
@@ -369,7 +369,7 @@ MTSETDRVBUFFER
the device dependent address. It is recommended to set
this flag unless there are tapes using the device
dependent (from the old times) (global)
- MT_ST_SYSV sets the SYSV semantics (mode)
+ MT_ST_SYSV sets the SYSV sematics (mode)
MT_ST_NOWAIT enables immediate mode (i.e., don't wait for
the command to finish) for some commands (e.g., rewind)
MT_ST_DEBUGGING debugging (global; debugging must be
diff --git a/trunk/Documentation/scsi/sym53c8xx_2.txt b/trunk/Documentation/scsi/sym53c8xx_2.txt
index 26c8a08ca3ea..7f516cdcd262 100644
--- a/trunk/Documentation/scsi/sym53c8xx_2.txt
+++ b/trunk/Documentation/scsi/sym53c8xx_2.txt
@@ -67,7 +67,7 @@ under Linux is contained in 2 files named sym_glue.h and sym_glue.c.
Other drivers files are intended not to depend on the Operating System
on which the driver is used.
-The history of this driver can be summarized as follows:
+The history of this driver can be summerized as follows:
1993: ncr driver written for 386bsd and FreeBSD by:
Wolfgang Stanglmeier
@@ -684,7 +684,7 @@ Field H : SCNTL3 Scsi Control Register 3
Contains the setting of timing values for both asynchronous and
synchronous data transfers.
Field I : SCNTL4 Scsi Control Register 4
- Only meaningful for 53C1010 Ultra3 controllers.
+ Only meaninful for 53C1010 Ultra3 controllers.
Understanding Fields J, K, L and dumps requires to have good knowledge of
SCSI standards, chip cores functionnals and internal driver data structures.
diff --git a/trunk/Documentation/scsi/tmscsim.txt b/trunk/Documentation/scsi/tmscsim.txt
index 8b2168aa4fc7..df7a02bfb5bf 100644
--- a/trunk/Documentation/scsi/tmscsim.txt
+++ b/trunk/Documentation/scsi/tmscsim.txt
@@ -27,7 +27,7 @@ Tekram DC390(T) adapter. This is where the name comes from: tm = Tekram
scsi = SCSI driver, m = AMD (?) as opposed to w for the DC390W/U/F
(NCR53c8X5, X=2/7) driver. Yes, there was also a driver for the latter,
tmscsiw, which supported DC390W/U/F adapters. It's not maintained any more,
-as the ncr53c8xx is perfectly supporting these adapters since some time.
+as the ncr53c8xx is perfectly supporting these adpaters since some time.
The driver first appeared in April 1996, exclusively supported the DC390
and has been enhanced since then in various steps. In May 1998 support for
@@ -381,7 +381,7 @@ Please see http://www.garloff.de/kurt/linux/dc390/problems.html
replaced by the dev index of your scanner). You may try to reset your SCSI
bus afterwards (echo "RESET" >/proc/scsi/tmscsim/?).
The problem seems to be solved as of 2.0d18, thanks to Andreas Rick.
-* If there is a valid partition table, the driver will use it for determining
+* If there is a valid partition table, the driver will use it for determing
the mapping. If there's none, a reasonable mapping (Symbios-like) will be
assumed. Other operating systems may not like this mapping, though
it's consistent with the BIOS' behaviour. Old DC390 drivers ignored the
diff --git a/trunk/Documentation/sh/kgdb.txt b/trunk/Documentation/sh/kgdb.txt
index 05b4ba89d28c..5b04f7f306fc 100644
--- a/trunk/Documentation/sh/kgdb.txt
+++ b/trunk/Documentation/sh/kgdb.txt
@@ -69,7 +69,7 @@ might specify the halt option:
kgdb=halt
-Boot the TARGET machine, which will appear to hang.
+Boot the TARGET machinem, which will appear to hang.
On your DEVELOPMENT machine, cd to the source directory and run the gdb
program. (This is likely to be a cross GDB which runs on your host but
diff --git a/trunk/Documentation/sound/alsa/ALSA-Configuration.txt b/trunk/Documentation/sound/alsa/ALSA-Configuration.txt
index 138673a907f5..e6b57dd46a4f 100644
--- a/trunk/Documentation/sound/alsa/ALSA-Configuration.txt
+++ b/trunk/Documentation/sound/alsa/ALSA-Configuration.txt
@@ -57,6 +57,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
- Default: 1
- For auto-loading more than one card, specify this
option together with snd-card-X aliases.
+ device_mode
+ - permission mask for dynamic sound device filesystem
+ - This is available only when DEVFS is enabled
+ - Default: 0666
+ - E.g.: device_mode=0660
Module snd-pcm-oss
@@ -1263,8 +1268,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
Note: on some notebooks the buffer address cannot be detected
automatically, or causes hang-up during initialization.
- In such a case, specify the buffer top address explicitly via
- the buffer_top option.
+ In such a case, specify the buffer top address explicity via
+ buffer_top option.
For example,
Sony F250: buffer_top=0x25a800
Sony F270: buffer_top=0x272800
@@ -1882,7 +1887,7 @@ options snd-ens1371 index=1
# OSS/Free portion
alias sound-slot-0 snd-interwave
alias sound-slot-1 snd-ens1371
------ /etc/modprobe.conf
+----- /etc/moprobe.conf
In this example, the interwave card is always loaded as the first card
(index 0) and ens1371 as the second (index 1).
@@ -1910,6 +1915,21 @@ Please note that the device mapping above may be varied via the module
options of snd-pcm-oss module.
+DEVFS support
+=============
+
+The ALSA driver fully supports the devfs extension.
+You should add lines below to your devfsd.conf file:
+
+LOOKUP snd MODLOAD ACTION snd
+REGISTER ^sound/.* PERMISSIONS root.audio 660
+REGISTER ^snd/.* PERMISSIONS root.audio 660
+
+Warning: These lines assume that you have the audio group in your system.
+ Otherwise replace audio word with another group name (root for
+ example).
+
+
Proc interfaces (/proc/asound)
==============================
diff --git a/trunk/Documentation/sound/alsa/Audiophile-Usb.txt b/trunk/Documentation/sound/alsa/Audiophile-Usb.txt
index e40cce83327c..b535c2a198f8 100644
--- a/trunk/Documentation/sound/alsa/Audiophile-Usb.txt
+++ b/trunk/Documentation/sound/alsa/Audiophile-Usb.txt
@@ -126,7 +126,7 @@ Here is a list of supported device_setup values for this device:
- Alsa driver default mode
- maintains backward compatibility with setups that do not use this
parameter by not introducing any change
- - results sometimes in corrupted sound as described earlier
+ - results sometimes in corrupted sound as decribed earlier
* device_setup=0x01
- 16bits 48kHz mode with Di disabled
- Ai,Ao,Do can be used at the same time
diff --git a/trunk/Documentation/sound/alsa/CMIPCI.txt b/trunk/Documentation/sound/alsa/CMIPCI.txt
index 4b2b15387056..1872e24442a4 100644
--- a/trunk/Documentation/sound/alsa/CMIPCI.txt
+++ b/trunk/Documentation/sound/alsa/CMIPCI.txt
@@ -16,11 +16,11 @@ As default, ALSA driver assigns the first PCM device (i.e. hw:0,0 for
card#0) for front and 4/6ch playbacks, while the second PCM device
(hw:0,1) is assigned to the second DAC for rear playback.
-There are slight differences between the two DACs:
+There are slight difference between two DACs.
- The first DAC supports U8 and S16LE formats, while the second DAC
supports only S16LE.
-- The second DAC supports only two channel stereo.
+- The seconde DAC supports only two channel stereo.
Please note that the CM8x38 DAC doesn't support continuous playback
rate but only fixed rates: 5512, 8000, 11025, 16000, 22050, 32000,
@@ -76,7 +76,7 @@ in alsa-lib. For example, you can play a WAV file with 6 channels like
% aplay -Dsurround51 sixchannels.wav
-For programming the 4/6 channel playback, you need to specify the PCM
+For programmin the 4/6 channel playback, you need to specify the PCM
channels as you like and set the format S16LE. For example, for playback
with 4 channels,
diff --git a/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
index 077fbe25ebf4..4807ef79a94d 100644
--- a/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
+++ b/trunk/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
@@ -5486,7 +5486,7 @@ struct _snd_pcm_runtime {
Power Management
- If the chip is supposed to work with suspend/resume
+ If the chip is supposed to work with with suspend/resume
functions, you need to add the power-management codes to the
driver. The additional codes for the power-management should be
ifdef 'ed with
diff --git a/trunk/Documentation/sound/alsa/MIXART.txt b/trunk/Documentation/sound/alsa/MIXART.txt
index ef42c44fa1f2..5cb970612870 100644
--- a/trunk/Documentation/sound/alsa/MIXART.txt
+++ b/trunk/Documentation/sound/alsa/MIXART.txt
@@ -31,7 +31,7 @@ With a miXart8AES/EBU there is in addition 1 stereo digital input
Formats
-------
U8, S16_LE, S16_BE, S24_3LE, S24_3BE, FLOAT_LE, FLOAT_BE
-Sample rates : 8000 - 48000 Hz continuously
+Sample rates : 8000 - 48000 Hz continously
Playback
--------
@@ -39,7 +39,7 @@ For instance the playback devices are configured to have max. 4
substreams performing hardware mixing. This could be changed to a
maximum of 24 substreams if wished.
Mono files will be played on the left and right channel. Each channel
-can be muted for each stream to use 8 analog/digital outputs separately.
+can be muted for each stream to use 8 analog/digital outputs seperately.
Capture
-------
@@ -97,4 +97,4 @@ COPYRIGHT
=========
Copyright (c) 2003 Digigram SA
-Distributable under GPL.
+Distributalbe under GPL.
diff --git a/trunk/Documentation/sound/alsa/Procfile.txt b/trunk/Documentation/sound/alsa/Procfile.txt
index f738b296440a..1fe48846d78f 100644
--- a/trunk/Documentation/sound/alsa/Procfile.txt
+++ b/trunk/Documentation/sound/alsa/Procfile.txt
@@ -71,7 +71,7 @@ The status of MIDI I/O is found in midi* files. It shows the device
name and the received/transmitted bytes through the MIDI device.
When the card is equipped with AC97 codecs, there are codec97#*
-subdirectories (described later).
+subdirectories (desribed later).
When the OSS mixer emulation is enabled (and the module is loaded),
oss_mixer file appears here, too. This shows the current mapping of
@@ -161,12 +161,12 @@ seq/drivers
Lists the currently available ALSA sequencer drivers.
seq/clients
- Shows the list of currently available sequencer clients and
+ Shows the list of currently available sequencer clinets and
ports. The connection status and the running status are shown
in this file, too.
seq/queues
- Lists the currently allocated/running sequencer queues.
+ Lists the currently allocated/running sequener queues.
seq/timer
Lists the currently allocated/running sequencer timers.
@@ -182,10 +182,10 @@ When the problem is related with PCM, first try to turn on xrun_debug
mode. This will give you the kernel messages when and where xrun
happened.
-If it's really a bug, report it with the following information:
+If it's really a bug, report it with the following information
- the name of the driver/card, show in /proc/asound/cards
- - the register dump, if available (e.g. card*/cmipci)
+ - the reigster dump, if available (e.g. card*/cmipci)
when it's a PCM problem,
diff --git a/trunk/Documentation/sound/oss/AWE32 b/trunk/Documentation/sound/oss/AWE32
new file mode 100644
index 000000000000..cb179bfeb522
--- /dev/null
+++ b/trunk/Documentation/sound/oss/AWE32
@@ -0,0 +1,76 @@
+ Installing and using Creative AWE midi sound under Linux.
+
+This documentation is devoted to the Creative Sound Blaster AWE32, AWE64 and
+SB32.
+
+1) Make sure you have an ORIGINAL Creative SB32, AWE32 or AWE64 card. This
+ is important, because the driver works only with real Creative cards.
+
+2) The first thing you need to do is re-compile your kernel with support for
+ your sound card. Run your favourite tool to configure the kernel and when
+ you get to the "Sound" menu you should enable support for the following:
+
+ Sound card support,
+ OSS sound modules,
+ 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support,
+ AWE32 synth
+
+ If your card is "Plug and Play" you will also need to enable these two
+ options, found under the "Plug and Play configuration" menu:
+
+ Plug and Play support
+ ISA Plug and Play support
+
+ Now compile and install the kernel in normal fashion. If you don't know
+ how to do this you can find instructions for this in the README file
+ located in the root directory of the kernel source.
+
+3) Before you can start playing midi files you will have to load a sound
+ bank file. The utility needed for doing this is called "sfxload", and it
+ is one of the utilities found in a package called "awesfx". If this
+ package is not available in your distribution you can download the AWE
+ snapshot from Creative Labs Open Source website:
+
+ http://www.opensource.creative.com/snapshot.html
+
+ Once you have unpacked the AWE snapshot you will see a "awesfx"
+ directory. Follow the instructions in awesfx/docs/INSTALL to install the
+ utilities in this package. After doing this, sfxload should be installed
+ as:
+
+ /usr/local/bin/sfxload
+
+ To enable AWE general midi synthesis you should also get the sound bank
+ file for general midi from:
+
+ http://members.xoom.com/yar/synthgm.sbk.gz
+
+ Copy it to a directory of your choice, and unpack it there.
+
+4) Edit /etc/modprobe.conf, and insert the following lines at the end of the
+ file:
+
+ alias sound-slot-0 sb
+ alias sound-service-0-1 awe_wave
+ install awe_wave /sbin/modprobe --first-time -i awe_wave && /usr/local/bin/sfxload PATH_TO_SOUND_BANK_FILE
+
+ You will of course have to change "PATH_TO_SOUND_BANK_FILE" to the full
+ path of of the sound bank file. That will enable the Sound Blaster and AWE
+ wave synthesis. To play midi files you should get one of these programs if
+ you don't already have them:
+
+ Playmidi: http://playmidi.openprojects.net
+
+ AWEMidi Player (drvmidi) Included in the previously mentioned AWE
+ snapshot.
+
+ You will probably have to pass the "-e" switch to playmidi to have it use
+ your midi device. drvmidi should work without switches.
+
+ If something goes wrong please e-mail me. All comments and suggestions are
+ welcome.
+
+ Yaroslav Rosomakho (alons55@dialup.ptt.ru)
+ http://www.yar.opennet.ru
+
+Last Updated: Feb 3 2001
diff --git a/trunk/Documentation/sound/oss/CMI8338 b/trunk/Documentation/sound/oss/CMI8338
new file mode 100644
index 000000000000..387d058c3f95
--- /dev/null
+++ b/trunk/Documentation/sound/oss/CMI8338
@@ -0,0 +1,85 @@
+Audio driver for CM8338/CM8738 chips by Chen-Li Tien
+
+
+HARDWARE SUPPORTED
+================================================================================
+C-Media CMI8338
+C-Media CMI8738
+On-board C-Media chips
+
+
+STEPS TO BUILD DRIVER
+================================================================================
+
+ 1. Backup the Config.in and Makefile in the sound driver directory
+ (/usr/src/linux/driver/sound).
+ The Configure.help provide help when you config driver in step
+ 4, please backup the original one (/usr/src/linux/Document) and
+ copy this file.
+ The cmpci is document for the driver in detail, please copy it
+ to /usr/src/linux/Document/sound so you can refer it. Backup if
+ there is already one.
+
+ 2. Extract the tar file by 'tar xvzf cmpci-xx.tar.gz' in the above
+ directory.
+
+ 3. Change directory to /usr/src/linux
+
+ 4. Config cm8338 driver by 'make menuconfig', 'make config' or
+ 'make xconfig' command.
+
+ 5. Please select Sound Card (CONFIG_SOUND=m) support and CMPCI
+ driver (CONFIG_SOUND_CMPCI=m) as modules. Resident mode not tested.
+ For driver option, please refer 'DRIVER PARAMETER'
+
+ 6. Compile the kernel if necessary.
+
+ 7. Compile the modules by 'make modules'.
+
+ 8. Install the modules by 'make modules_install'
+
+
+INSTALL DRIVER
+================================================================================
+
+ 1. Before first time to run the driver, create module dependency by
+ 'depmod -a'
+
+ 2. To install the driver manually, enter 'modprobe cmpci'.
+
+ 3. Driver installation for various distributions:
+
+ a. Slackware 4.0
+ Add the 'modprobe cmpci' command in your /etc/rc.d/rc.modules
+ file.so you can start the driver automatically each time booting.
+
+ b. Caldera OpenLinux 2.2
+ Use LISA to load the cmpci module.
+
+ c. RedHat 6.0 and S.u.S.E. 6.1
+ Add following command in /etc/conf.modules:
+
+ alias sound cmpci
+
+ also visit http://www.cmedia.com.tw for installation instruction.
+
+DRIVER PARAMETER
+================================================================================
+
+ Some functions for the cm8738 can be configured in Kernel Configuration
+ or modules parameters. Set these parameters to 1 to enable.
+
+ mpuio: I/O ports base for MPU-401, 0 if disabled.
+ fmio: I/O ports base for OPL-3, 0 if disabled.
+ spdif_inverse:Inverse the S/PDIF-in signal, this depends on your
+ CD-ROM or DVD-ROM.
+ spdif_loop: Enable S/PDIF loop, this route S/PDIF-in to S/PDIF-out
+ directly.
+ speakers: Number of speakers used.
+ use_line_as_rear:Enable this if you want to use line-in as
+ rear-out.
+ use_line_as_bass:Enable this if you want to use line-in as
+ bass-out.
+ joystick: Enable joystick. You will need to install Linux joystick
+ driver.
+
diff --git a/trunk/Documentation/sound/oss/INSTALL.awe b/trunk/Documentation/sound/oss/INSTALL.awe
new file mode 100644
index 000000000000..310f42ca1e83
--- /dev/null
+++ b/trunk/Documentation/sound/oss/INSTALL.awe
@@ -0,0 +1,134 @@
+================================================================
+ INSTALLATION OF AWE32 SOUND DRIVER FOR LINUX
+ Takashi Iwai
+================================================================
+
+----------------------------------------------------------------
+* Attention to SB-PnP Card Users
+
+If you're using PnP cards, the initialization of PnP is required
+before loading this driver. You have now three options:
+ 1. Use isapnptools.
+ 2. Use in-kernel isapnp support.
+ 3. Initialize PnP on DOS/Windows, then boot linux by loadlin.
+In this document, only the case 1 case is treated.
+
+----------------------------------------------------------------
+* Installation on Red Hat 5.0 Sound Driver
+
+Please use install-rh.sh under RedHat5.0 directory.
+DO NOT USE install.sh below.
+See INSTALL.RH for more details.
+
+----------------------------------------------------------------
+* Installation/Update by Shell Script
+
+ 1. Become root
+
+ % su
+
+ 2. If you have never configured the kernel tree yet, run make config
+ once (to make dependencies and symlinks).
+
+ # cd /usr/src/linux
+ # make xconfig
+
+ 3. Run install.sh script
+
+ # sh ./install.sh
+
+ 4. Configure your kernel
+
+ (for Linux 2.[01].x user)
+ # cd /usr/src/linux
+ # make xconfig (or make menuconfig)
+
+ (for Linux 1.2.x user)
+ # cd /usr/src/linux
+ # make config
+
+ Answer YES to both "lowlevel drivers" and "AWE32 wave synth" items
+ in Sound menu. ("lowlevel drivers" will appear only in 2.x
+ kernel.)
+
+ 5. Make your kernel (and modules), and install them as usual.
+
+ 5a. make kernel image
+ # make zImage
+
+ 5b. make modules and install them
+ # make modules && make modules_install
+
+ 5c. If you're using lilo, copy the kernel image and run lilo.
+ Otherwise, copy the kernel image to suitable directory or
+ media for your system.
+
+ 6. Reboot the kernel if necessary.
+ - If you updated only the modules, you don't have to reboot
+ the system. Just remove the old sound modules here.
+ in
+ # rmmod sound.o (linux-2.0 or OSS/Free)
+ # rmmod awe_wave.o (linux-2.1)
+
+ 7. If your AWE card is a PnP and not initialized yet, you'll have to
+ do it by isapnp tools. Otherwise, skip to 8.
+
+ This section described only a brief explanation. For more
+ details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ.
+
+ 7a. If you have no isapnp.conf file, generate it by pnpdump.
+ Otherwise, skip to 7d.
+ # pnpdump > /etc/isapnp.conf
+
+ 7b. Edit isapnp.conf file. Comment out the appropriate
+ lines containing desirable I/O ports, DMA and IRQs.
+ Don't forget to enable (ACT Y) line.
+
+ 7c. Add two i/o ports (0xA20 and 0xE20) in WaveTable part.
+ ex)
+ (CONFIGURE CTL0048/58128 (LD 2
+ # ANSI string -->WaveTable<--
+ (IO 0 (BASE 0x0620))
+ (IO 1 (BASE 0x0A20))
+ (IO 2 (BASE 0x0E20))
+ (ACT Y)
+ ))
+
+ 7d. Load the config file.
+ CAUTION: This will reset all PnP cards!
+
+ # isapnp /etc/isapnp.conf
+
+ 8. Load the sound module (if you configured it as a module):
+
+ for 2.0 kernel or OSS/Free monolithic module:
+
+ # modprobe sound.o
+
+ for 2.1 kernel:
+
+ # modprobe sound
+ # insmod uart401
+ # insmod sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
+ (These values depend on your settings.)
+ # insmod awe_wave
+ (Be sure to load awe_wave after sb!)
+
+ See Documentation/sound/oss/AWE32 for
+ more details.
+
+ 9. (only for obsolete systems) If you don't have /dev/sequencer
+ device file, make it according to Readme.linux file on
+ /usr/src/linux/drivers/sound. (Run a shell script included in
+ that file). <-- This file no longer exists in the recent kernels!
+
+ 10. OK, load your own soundfont file, and enjoy MIDI!
+
+ % sfxload synthgm.sbk
+ % drvmidi foo.mid
+
+ 11. For more advanced use (eg. dynamic loading, virtual bank and
+ etc.), please read the awedrv FAQ or the instructions in awesfx
+ and awemidi packages.
+
+Good luck!
diff --git a/trunk/Documentation/sound/oss/MAD16 b/trunk/Documentation/sound/oss/MAD16
new file mode 100644
index 000000000000..865dbd848742
--- /dev/null
+++ b/trunk/Documentation/sound/oss/MAD16
@@ -0,0 +1,56 @@
+(This recipe has been edited to update the configuration symbols,
+ and change over to modprobe.conf for 2.6)
+
+From: Shaw Carruthers
+
+I have been using mad16 sound for some time now with no problems, current
+kernel 2.1.89
+
+lsmod shows:
+
+mad16 5176 0
+sb 22044 0 [mad16]
+uart401 5576 0 [mad16 sb]
+ad1848 14176 1 [mad16]
+sound 61928 0 [mad16 sb uart401 ad1848]
+
+.config has:
+
+CONFIG_SOUND=m
+CONFIG_SOUND_ADLIB=m
+CONFIG_SOUND_MAD16=m
+CONFIG_SOUND_YM3812=m
+
+modprobe.conf has:
+
+alias char-major-14-* mad16
+options sb mad16=1
+options mad16 io=0x530 irq=7 dma=0 dma16=1 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
+
+
+To get the built in mixer to work this needs to be:
+
+options adlib_card io=0x388 # FM synthesizer
+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
diff --git a/trunk/Documentation/sound/oss/Maestro b/trunk/Documentation/sound/oss/Maestro
new file mode 100644
index 000000000000..4a80eb3f8e00
--- /dev/null
+++ b/trunk/Documentation/sound/oss/Maestro
@@ -0,0 +1,123 @@
+ An OSS/Lite Driver for the ESS Maestro family of sound cards
+
+ Zach Brown, December 1999
+
+Driver Status and Availability
+------------------------------
+
+The most recent version of this driver will hopefully always be available at
+ http://www.zabbo.net/maestro/
+
+I will try and maintain the most recent stable version of the driver
+in both the stable and development kernel lines.
+
+ESS Maestro Chip Family
+-----------------------
+
+There are 3 main variants of the ESS Maestro PCI sound chip. The first
+is the Maestro 1. It was originally produced by Platform Tech as the
+'AGOGO'. It can be recognized by Platform Tech's PCI ID 0x1285 with
+0x0100 as the device ID. It was put on some sound boards and a few laptops.
+ESS bought the design and cleaned it up as the Maestro 2. This starts
+their marking with the ESS vendor ID 0x125D and the 'year' device IDs.
+The Maestro 2 claims 0x1968 while the Maestro 2e has 0x1978.
+
+The various families of Maestro are mostly identical as far as this
+driver is concerned. It doesn't touch the DSP parts that differ (though
+it could for FM synthesis).
+
+Driver OSS Behavior
+--------------------
+
+This OSS driver exports /dev/mixer and /dev/dsp to applications, which
+mostly adhere to the OSS spec. This driver doesn't register itself
+with /dev/sndstat, so don't expect information to appear there.
+
+The /dev/dsp device exported behaves almost as expected. Playback is
+supported in all the various lovely formats. 8/16bit stereo/mono from
+8khz to 48khz, and mmap()ing for playback behaves. Capture/recording
+is limited due to oddities with the Maestro hardware. One can only
+record in 16bit stereo. For recording the maestro uses non interleaved
+stereo buffers so that mmap()ing the incoming data does not result in
+a ring buffer of LRLR data. mmap()ing of the read buffers is therefore
+disallowed until this can be cleaned up.
+
+/dev/mixer is an interface to the AC'97 codec on the Maestro. It is
+worth noting that there are a variety of AC'97s that can be wired to
+the Maestro. Which is used is entirely up to the hardware implementor.
+This should only be visible to the user by the presence, or lack, of
+'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them.
+
+The driver doesn't support MIDI or FM playback at the moment. Typically
+the Maestro is wired to an MPU MIDI chip, but some hardware implementations
+don't. We need to assemble a white list of hardware implementations that
+have MIDI wired properly before we can claim to support it safely.
+
+Compiling and Installing
+------------------------
+
+With the drivers inclusion into the kernel, compiling and installing
+is the same as most OSS/Lite modular sound drivers. Compilation
+of the driver is enabled through the CONFIG_SOUND_MAESTRO variable
+in the config system.
+
+It may be modular or statically linked. If it is modular it should be
+installed with the rest of the modules for the kernel on the system.
+Typically this will be in /lib/modules/ somewhere. 'alias sound maestro'
+should also be added to your module configs (typically /etc/conf.modules)
+if you're using modular OSS/Lite sound and want to default to using a
+maestro chip.
+
+As this is a PCI device, the module does not need to be informed of
+any IO or IRQ resources it should use, it devines these from the
+system. Sometimes, on sucky PCs, the BIOS fails to allocated resources
+for the maestro. This will result in a message like:
+ maestro: PCI subsystem reports IRQ 0, this might not be correct.
+from the kernel. Should this happen the sound chip most likely will
+not operate correctly. To solve this one has to dig through their BIOS
+(typically entered by hitting a hot key at boot time) and figure out
+what magic needs to happen so that the BIOS will reward the maestro with
+an IRQ. This operation is incredibly system specific, so you're on your
+own. Sometimes the magic lies in 'PNP Capable Operating System' settings.
+
+There are very few options to the driver. One is 'debug' which will
+tell the driver to print minimal debugging information as it runs. This
+can be collected with 'dmesg' or through the klogd daemon.
+
+The other, more interesting option, is 'dsps_order'. Typically at
+install time the driver will only register one available /dev/dsp device
+for its use. The 'dsps_order' module parameter allows for more devices
+to be allocated, as a power of two. Up to 4 devices can be registered
+( dsps_order=2 ). These devices act as fully distinct units and use
+separate channels in the maestro.
+
+Power Management
+----------------
+
+As of version 0.14, this driver has a minimal understanding of PCI
+Power Management. If it finds a valid power management capability
+on the PCI device it will attempt to use the power management
+functions of the maestro. It will only do this on Maestro 2Es and
+only on machines that are known to function well. You can
+force the use of power management by setting the 'use_pm' module
+option to 1, or can disable it entirely by setting it to 0.
+
+When using power management, the driver does a few things
+differently. It will keep the chip in a lower power mode
+when the module is inserted but /dev/dsp is not open. This
+allows the mixer to function but turns off the clocks
+on other parts of the chip. When /dev/dsp is opened the chip
+is brought into full power mode, and brought back down
+when it is closed. It also powers down the chip entirely
+when the module is removed or the machine is shutdown. This
+can have nonobvious consequences. CD audio may not work
+after a power managing driver is removed. Also, software that
+doesn't understand power management may not be able to talk
+to the powered down chip until the machine goes through a hard
+reboot to bring it back.
+
+.. more details ..
+------------------
+
+drivers/sound/maestro.c contains comments that hopefully explain
+the maestro implementation.
diff --git a/trunk/Documentation/sound/oss/Maestro3 b/trunk/Documentation/sound/oss/Maestro3
new file mode 100644
index 000000000000..a113718e8034
--- /dev/null
+++ b/trunk/Documentation/sound/oss/Maestro3
@@ -0,0 +1,92 @@
+ An OSS/Lite Driver for the ESS Maestro3 family of sound chips
+
+ Zach Brown, January 2001
+
+Driver Status and Availability
+------------------------------
+
+The most recent version of this driver will hopefully always be available at
+ http://www.zabbo.net/maestro3/
+
+I will try and maintain the most recent stable version of the driver
+in both the stable and development kernel lines.
+
+Historically I've sucked pretty hard at actually doing that, however.
+
+ESS Maestro3 Chip Family
+-----------------------
+
+The 'Maestro3' is much like the Maestro2 chip. The noted improvement
+is the removal of the silicon in the '2' that did PCM mixing. All that
+work is now done through a custom DSP called the ASSP, the Asynchronus
+Specific Signal Processor.
+
+The 'Allegro' is a baby version of the Maestro3. I'm not entirely clear
+on the extent of the differences, but the driver supports them both :)
+
+The 'Allegro' shows up as PCI ID 0x1988 and the Maestro3 as 0x1998,
+both under ESS's vendor ID of 0x125D. The Maestro3 can also show up as
+0x199a when hardware strapping is used.
+
+The chip can also act as a multi function device. The modem IDs follow
+the audio multimedia device IDs. (so the modem part of an Allegro shows
+up as 0x1989)
+
+Driver OSS Behavior
+--------------------
+
+This OSS driver exports /dev/mixer and /dev/dsp to applications, which
+mostly adhere to the OSS spec. This driver doesn't register itself
+with /dev/sndstat, so don't expect information to appear there.
+
+The /dev/dsp device exported behaves as expected. Playback is
+supported in all the various lovely formats. 8/16bit stereo/mono from
+8khz to 48khz, with both read()/write(), and mmap().
+
+/dev/mixer is an interface to the AC'97 codec on the Maestro3. It is
+worth noting that there are a variety of AC'97s that can be wired to
+the Maestro3. Which is used is entirely up to the hardware implementor.
+This should only be visible to the user by the presence, or lack, of
+'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them.
+The Allegro has an onchip AC'97.
+
+The driver doesn't support MIDI or FM playback at the moment.
+
+Compiling and Installing
+------------------------
+
+With the drivers inclusion into the kernel, compiling and installing
+is the same as most OSS/Lite modular sound drivers. Compilation
+of the driver is enabled through the CONFIG_SOUND_MAESTRO3 variable
+in the config system.
+
+It may be modular or statically linked. If it is modular it should be
+installed with the rest of the modules for the kernel on the system.
+Typically this will be in /lib/modules/ somewhere. 'alias sound-slot-0
+maestro3' should also be added to your module configs (typically
+/etc/modprobe.conf) if you're using modular OSS/Lite sound and want to
+default to using a maestro3 chip.
+
+There are very few options to the driver. One is 'debug' which will
+tell the driver to print minimal debugging information as it runs. This
+can be collected with 'dmesg' or through the klogd daemon.
+
+One is 'external_amp', which tells the driver to attempt to enable
+an external amplifier. This defaults to '1', you can tell the driver
+not to bother enabling such an amplifier by setting it to '0'.
+
+And the last is 'gpio_pin', which tells the driver which GPIO pin number
+the external amp uses (0-15), The Allegro uses 8 by default, all others 1.
+If everything loads correctly and seems to be working but you get no sound,
+try tweaking this value.
+
+Systems known to need a different value
+ Panasonic ToughBook CF-72: gpio_pin=13
+
+Power Management
+----------------
+
+This driver has a minimal understanding of PCI Power Management. It will
+try and power down the chip when the system is suspended, and power
+it up with it is resumed. It will also try and power down the chip
+when the machine is shut down.
diff --git a/trunk/Documentation/sound/oss/NEWS b/trunk/Documentation/sound/oss/NEWS
new file mode 100644
index 000000000000..a81e0ef72ae9
--- /dev/null
+++ b/trunk/Documentation/sound/oss/NEWS
@@ -0,0 +1,42 @@
+Linux 2.4 Sound Changes
+2000-September-25
+Christoph Hellwig,
+
+
+
+=== isapnp support
+
+The Linux 2.4 Kernel does have reliable in-kernel isapnp support.
+Some drivers (sb.o, ad1816.o awe_wave.o) do now support automatically
+detecting and configuring isapnp devices.
+If you have a not yet supported isapnp soundcard, mail me the content
+of '/proc/isapnp' on your system and some information about your card
+and its driver(s) so I can try to get isapnp working for it.
+
+
+
+=== soundcard resources on kernel commandline
+
+Before Linux 2.4 you had to specify the resources for sounddrivers
+statically linked into the kernel at compile time
+(in make config/menuconfig/xconfig). In Linux 2.4 the resources are
+now specified at the boot-time kernel commandline (e.g. the lilo
+'append=' line or everything that's after the kernel name in grub).
+Read the Configure.help entry for your card for the parameters.
+
+
+=== softoss is gone
+
+In Linux 2.4 the softoss in-kernel software synthesizer is no more aviable.
+Use a user space software synthesizer like timidity instead.
+
+
+
+=== /dev/sndstat and /proc/sound are gone
+
+In older Linux versions those files exported some information about the
+OSS/Free configuration to userspace. In Linux 2.3 they were removed because
+they did not support the growing number of pci soundcards and there were
+some general problems with this interface.
+
+
diff --git a/trunk/Documentation/sound/oss/OPL3-SA b/trunk/Documentation/sound/oss/OPL3-SA
new file mode 100644
index 000000000000..66a91835d918
--- /dev/null
+++ b/trunk/Documentation/sound/oss/OPL3-SA
@@ -0,0 +1,52 @@
+OPL3-SA1 sound driver (opl3sa.o)
+
+---
+Note: This howto only describes how to setup the OPL3-SA1 chip; this info
+does not apply to the SA2, SA3, or SA4.
+---
+
+The Yamaha OPL3-SA1 sound chip is usually found built into motherboards, and
+it's a decent little chip offering a WSS mode, a SB Pro emulation mode, MPU401
+and OPL3 FM Synth capabilities.
+
+You can enable inclusion of the driver via CONFIG_SOUND_OPL3SA1=m, or
+CONFIG_SOUND_OPL3SA1=y through 'make config/xconfig/menuconfig'.
+
+You'll need to know all of the relevant info (irq, dma, and io port) for the
+chip's WSS mode, since that is the mode the kernel sound driver uses, and of
+course you'll also need to know about where the MPU401 and OPL3 ports and
+IRQs are if you want to use those.
+
+Here's the skinny on how to load it as a module:
+
+ modprobe opl3sa io=0x530 irq=11 dma=0 dma2=1 mpu_io=0x330 mpu_irq=5
+
+Module options in detail:
+
+ io: This is the WSS's port base.
+ irq: This is the WSS's IRQ.
+ dma: This is the WSS's DMA line. In my BIOS setup screen this was
+ listed as "WSS Play DMA"
+ dma2: This is the WSS's secondary DMA line. My BIOS calls it the
+ "WSS capture DMA"
+
+ mpu_io: This is the MPU401's port base.
+ mpu_irq: This is the MPU401's IRQ.
+
+If you'd like to use the OPL3 FM Synthesizer, make sure you enable
+CONFIG_SOUND_YM3812 (in 'make config'). That'll build the opl3.o module.
+
+Then a simple 'insmod opl3 io=0x388', and you now have FM Synth.
+
+You can also use the SoftOSS software synthesizer instead of the builtin OPL3.
+Here's how:
+
+Say 'y' or 'm' to "SoftOSS software wave table engine" in make config.
+
+If you said yes, the software synth is available once you boot your new
+kernel.
+
+If you chose to build it as a module, just insmod the resulting softoss2.o
+
+Questions? Comments?
+
diff --git a/trunk/Documentation/sound/oss/README.awe b/trunk/Documentation/sound/oss/README.awe
new file mode 100644
index 000000000000..80054cd8fcde
--- /dev/null
+++ b/trunk/Documentation/sound/oss/README.awe
@@ -0,0 +1,218 @@
+================================================================
+ AWE32 Sound Driver for Linux / FreeBSD
+ version 0.4.3; Nov. 1, 1998
+
+ Takashi Iwai
+================================================================
+
+* GENERAL NOTES
+
+This is a sound driver extension for SoundBlaster AWE32 and other
+compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable
+the wave synth operations. The driver is provided for Linux 1.2.x
+and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC
+Alpha systems.
+
+This driver was written by Takashi Iwai ,
+and provided "as is". The original source (awedrv-0.4.3.tar.gz) and
+binary packages are available on the following URL:
+ http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/
+Note that since the author is apart from this web site, the update is
+not frequent now.
+
+
+* NOTE TO LINUX USERS
+
+To enable this driver on linux-2.[01].x kernels, you need turn on
+"AWE32 synth" options in sound menu when configure your linux kernel
+and modules. The precise installation procedure is described in the
+AWE64-Mini-HOWTO and linux-kernel/Documetation/sound/AWE32.
+
+If you're using PnP cards, the card must be initialized before loading
+the sound driver. There're several options to do this:
+ - Initialize the card via ISA PnP tools, and load the sound module.
+ - Initialize the card on DOS, and load linux by loadlin.exe
+ - Use PnP kernel driver (for Linux-2.x.x)
+The detailed instruction for the solution using isapnp tools is found
+in many documents like above. A brief instruction is also included in
+the installation document of this package.
+For PnP driver project, please refer to the following URL:
+ http://www-jcr.lmh.ox.ac.uk/~pnp/
+
+
+* USING THE DRIVER
+
+The awedrv has several different playing modes to realize easy channel
+allocation for MIDI songs. To hear the exact sound quality, you need
+to obtain the extended sequencer program, drvmidi or playmidi-2.5.
+
+For playing MIDI files, you *MUST* load the soundfont file on the
+driver previously by sfxload utility. Otherwise you'll here no sounds
+at all! All the utilities and driver source packages are found in the
+above URL. The sfxload program is included in the package
+awesfx-0.4.3.tgz. Binary packages are available there, too. See the
+instruction in each package for installation.
+
+Loading a soundfont file is very simple. Just execute the command
+
+ % sfxload synthgm.sbk
+
+Then, sfxload transfers the file "synthgm.sbk" to the driver.
+Both SF1 and SF2 formats are accepted.
+
+Now you can hear midi musics by a midi player.
+
+ % drvmidi foo.mid
+
+If you run MIDI player after MOD player, you need to load soundfont
+files again, since MOD player programs clear the previous loaded
+samples by their own data.
+
+If you have only 512kb on the sound card, I recommend to use dynamic
+sample loading via -L option of drvmidi. 2MB GM/GS soundfont file is
+available in most midi files.
+
+ % sfxload synthgm
+ % drvmidi -L 2mbgmgs foo.mid
+
+This makes a big difference (believe me)! For more details, please
+refer to the FAQ list which is available on the URL above.
+
+The current chorus, reverb and equalizer status can be changed by
+aweset utility program (included in awesfx package). Note that
+some awedrv-native programs (like drvmidi and xmp) will change the
+current settings by themselves. The aweset program is effective
+only for other programs like playmidi.
+
+Enjoy.
+
+
+* COMPILE FLAGS
+
+Compile conditions are defined in awe_config.h.
+
+[Compatibility Conditions]
+The following flags are defined automatically when using installation
+shell script.
+
+- AWE_MODULE_SUPPORT
+ indicates your Linux kernel supports module for each sound card
+ (in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels
+ as distributed in the RH5.0 package).
+ This flag is automatically set when you're using 2.1.x kernels.
+ You can pass the base address and memory size via the following
+ module options,
+ io = base I/O port address (eg. 0x620)
+ memsize = DRAM size in kilobytes (eg. 512)
+ As default, AWE driver probes these values automatically.
+
+
+[Hardware Conditions]
+You DON'T have to define the following two values.
+Define them only when the driver couldn't detect the card properly.
+
+- AWE_DEFAULT_BASE_ADDR (default: not defined)
+ specifies the base port address of your AWE32 card.
+ 0 means to autodetect the address.
+
+- AWE_DEFAULT_MEM_SIZE (default: not defined)
+ specifies the memory size of your AWE32 card in kilobytes.
+ -1 means to autodetect its size.
+
+
+[Sample Table Size]
+From ver.0.4.0, sample tables are allocated dynamically (except
+Linux-1.2.x system), so you need NOT to touch these parameters.
+Linux-1.2.x users may need to increase these values to appropriate size
+if the sound card is equipped with more DRAM.
+
+- AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS
+
+
+[Other Conditions]
+
+- AWE_ALWAYS_INIT_FM (default: not defined)
+ indicates the AWE driver always initialize FM passthrough even
+ without DRAM on board. Emu8000 chip has a restriction for playing
+ samples on DRAM that at least two channels must be occupied as
+ passthrough channels.
+
+- AWE_DEBUG_ON (default: defined)
+ turns on debugging messages if defined.
+
+- AWE_HAS_GUS_COMPATIBILITY (default: defined)
+ Enables GUS compatibility mode if defined, reading GUS patches and
+ GUS control commands. Define this option to use GMOD or other
+ GUS module players.
+
+- CONFIG_AWE32_MIDIEMU (default: defined)
+ Adds a MIDI emulation device by Emu8000 wavetable. The emulation
+ device can be accessed as an external MIDI, and sends the MIDI
+ control codes directly. XG and GS sysex/NRPN are accepted.
+ No MIDI input is supported.
+
+- CONFIG_AWE32_MIXER (default: not defined)
+ Adds a mixer device for AWE32 bass/treble equalizer control.
+ You can access this device using /dev/mixer?? (usually mixer01).
+
+- AWE_USE_NEW_VOLUME_CALC (default: defined)
+ Use the new method to calculate the volume change as compatible
+ with DOS/Win drivers. This option can be toggled via aweset
+ program, or drvmidi player.
+
+- AWE_CHECK_VTARGET (default: defined)
+ Check the current volume target value when searching for an
+ empty channel to allocate a new voice. This is experimentally
+ implemented in this version. (probably, this option doesn't
+ affect the sound quality severely...)
+
+- AWE_ALLOW_SAMPLE_SHARING (default: defined)
+ Allow sample sharing for differently loaded patches.
+ This function is available only together with awesfx-0.4.3p3.
+ Note that this is still an experimental option.
+
+- DEF_FM_CHORUS_DEPTH (default: 0x10)
+ The default strength to be sent to the chorus effect engine.
+ From 0 to 0xff. Larger numbers may often cause weird sounds.
+
+- DEF_FM_REVERB_DEPTH (default: 0x10)
+ The default strength to be sent to the reverb effect engine.
+ From 0 to 0xff. Larger numbers may often cause weird sounds.
+
+
+* ACKNOWLEDGMENTS
+
+Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) for much advice
+on programming of AWE32. Much code is brought from his AWE32-native
+MOD player, ALMP.
+The port of awedrv to FreeBSD is done by Randall Hopper
+(rhh@ct.picker.com).
+The new volume calculation routine was derived from Mark Weaver's
+ADIP compatible routines.
+I also thank linux-awe-ml members for their efforts
+to reboot their system many times :-)
+
+
+* TODO'S
+
+- Complete DOS/Win compatibility
+- DSP-like output
+
+
+* COPYRIGHT
+
+Copyright (C) 1996-1998 Takashi Iwai
+
+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.
diff --git a/trunk/Documentation/sound/oss/Wavefront b/trunk/Documentation/sound/oss/Wavefront
new file mode 100644
index 000000000000..16f57ea43052
--- /dev/null
+++ b/trunk/Documentation/sound/oss/Wavefront
@@ -0,0 +1,339 @@
+ An OSS/Free Driver for WaveFront soundcards
+ (Turtle Beach Maui, Tropez, Tropez Plus)
+
+ Paul Barton-Davis, July 1998
+
+ VERSION 0.2.5
+
+Driver Status
+-------------
+
+Requires: Kernel 2.1.106 or later (the driver is included with kernels
+2.1.109 and above)
+
+As of 7/22/1998, this driver is currently in *BETA* state. This means
+that it compiles and runs, and that I use it on my system (Linux
+2.1.106) with some reasonably demanding applications and uses. I
+believe the code is approaching an initial "finished" state that
+provides bug-free support for the Tropez Plus.
+
+Please note that to date, the driver has ONLY been tested on a Tropez
+Plus. I would very much like to hear (and help out) people with Tropez
+and Maui cards, since I think the driver can support those cards as
+well.
+
+Finally, the driver has not been tested (or even compiled) as a static
+(non-modular) part of the kernel. Alan Cox's good work in modularizing
+OSS/Free for Linux makes this rather unnecessary.
+
+Some Questions
+--------------
+
+**********************************************************************
+0) What does this driver do that the maui driver did not ?
+**********************************************************************
+
+* can fully initialize a WaveFront card from cold boot - no DOS
+ utilities needed
+* working patch/sample/program loading and unloading (the maui
+ driver didn't document how to make this work, and assumed
+ user-level preparation of the patch data for writing
+ to the board. ick.)
+* full user-level access to all WaveFront commands
+* for the Tropez Plus, (primitive) control of the YSS225 FX processor
+* Virtual MIDI mode supported - 2 MIDI devices accessible via the
+ WaveFront's MPU401/UART emulation. One
+ accesses the WaveFront synth, the other accesses the
+ external MIDI connector. Full MIDI read/write semantics
+ for both devices.
+* OSS-compliant /dev/sequencer interface for the WaveFront synth,
+ including native and GUS-format patch downloading.
+* semi-intelligent patch management (prototypical at this point)
+
+**********************************************************************
+1) What to do about MIDI interfaces ?
+**********************************************************************
+
+The Tropez Plus (and perhaps other WF cards) can in theory support up
+to 2 physical MIDI interfaces. One of these is connected to the
+ICS2115 chip (the WaveFront synth itself) and is controlled by
+MPU/UART-401 emulation code running as part of the WaveFront OS. The
+other is controlled by the CS4232 chip present on the board. However,
+physical access to the CS4232 connector is difficult, and it is
+unlikely (though not impossible) that you will want to use it.
+
+An older version of this driver introduced an additional kernel config
+variable which controlled whether or not the CS4232 MIDI interface was
+configured. Because of Alan Cox's work on modularizing the sound
+drivers, and now backporting them to 2.0.34 kernels, there seems to be
+little reason to support "static" configuration variables, and so this
+has been abandoned in favor of *only* module parameters. Specifying
+"mpuio" and "mpuirq" for the cs4232 parameter will result in the
+CS4232 MIDI interface being configured; leaving them unspecified will
+leave it unconfigured (and thus unusable).
+
+BTW, I have heard from one Tropez+ user that the CS4232 interface is
+more reliable than the ICS2115 one. I have had no problems with the
+latter, and I don't have the right cable to test the former one
+out. Reports welcome.
+
+**********************************************************************
+2) Why does line XXX of the code look like this .... ?
+**********************************************************************
+
+Either because it's not finished yet, or because you're a better coder
+than I am, or because you don't understand some aspect of how the card
+or the code works.
+
+I absolutely welcome comments, criticisms and suggestions about the
+design and implementation of the driver.
+
+**********************************************************************
+3) What files are included ?
+**********************************************************************
+
+ drivers/sound/README.wavefront -- this file
+
+ drivers/sound/wavefront.patch -- patches for the 2.1.106 sound drivers
+ needed to make the rest of this work
+ DO NOT USE IF YOU'VE APPLIED THEM
+ BEFORE, OR HAVE 2.1.109 OR ABOVE
+
+ drivers/sound/wavfront.c -- the driver
+ drivers/sound/ys225.h -- data declarations for FX config
+ drivers/sound/ys225.c -- data definitions for FX config
+ drivers/sound/wf_midi.c -- the "uart401" driver
+ to support virtual MIDI mode.
+ include/wavefront.h -- the header file
+ Documentation/sound/oss/Tropez+ -- short docs on configuration
+
+**********************************************************************
+4) How do I compile/install/use it ?
+**********************************************************************
+
+PART ONE: install the source code into your sound driver directory
+
+ cd
+ tar -zxvf
+
+PART TWO: apply the patches
+
+ DO THIS ONLY IF YOU HAVE A KERNEL VERSION BELOW 2.1.109
+ AND HAVE NOT ALREADY INSTALLED THE PATCH(ES).
+
+ cd drivers/sound
+ patch < wavefront.patch
+
+PART THREE: configure your kernel
+
+ cd
+ make xconfig (or whichever config option you use)
+
+ - choose YES for Sound Support
+ - choose MODULE (M) for OSS Sound Modules
+ - choose MODULE(M) to YM3812/OPL3 support
+ - choose MODULE(M) for WaveFront support
+ - choose MODULE(M) for CS4232 support
+
+ - choose "N" for everything else (unless you have other
+ soundcards you want support for)
+
+
+ make boot
+ .
+ .
+ .
+
+ make modules
+ .
+ .
+ .
+ make modules_install
+
+Here's my autoconf.h SOUND section:
+
+/*
+ * Sound
+ */
+#define CONFIG_SOUND 1
+#undef CONFIG_SOUND_OSS
+#define CONFIG_SOUND_OSS_MODULE 1
+#undef CONFIG_SOUND_PAS
+#undef CONFIG_SOUND_SB
+#undef CONFIG_SOUND_ADLIB
+#undef CONFIG_SOUND_GUS
+#undef CONFIG_SOUND_MPU401
+#undef CONFIG_SOUND_PSS
+#undef CONFIG_SOUND_MSS
+#undef CONFIG_SOUND_SSCAPE
+#undef CONFIG_SOUND_TRIX
+#undef CONFIG_SOUND_MAD16
+#undef CONFIG_SOUND_WAVEFRONT
+#define CONFIG_SOUND_WAVEFRONT_MODULE 1
+#undef CONFIG_SOUND_CS4232
+#define CONFIG_SOUND_CS4232_MODULE 1
+#undef CONFIG_SOUND_MAUI
+#undef CONFIG_SOUND_SGALAXY
+#undef CONFIG_SOUND_OPL3SA1
+#undef CONFIG_SOUND_SOFTOSS
+#undef CONFIG_SOUND_YM3812
+#define CONFIG_SOUND_YM3812_MODULE 1
+#undef CONFIG_SOUND_VMIDI
+#undef CONFIG_SOUND_UART6850
+/*
+ * Additional low level sound drivers
+ */
+#undef CONFIG_LOWLEVEL_SOUND
+
+************************************************************
+6) How do I configure my card ?
+************************************************************
+
+You need to edit /etc/modprobe.conf. Here's mine (edited to show the
+relevant details):
+
+ # Sound system
+ alias char-major-14-* wavefront
+ alias synth0 wavefront
+ alias mixer0 cs4232
+ alias audio0 cs4232
+ install wavefront /sbin/modprobe cs4232 && /sbin/modprobe -i wavefront && /sbin/modprobe opl3
+ options wavefront io=0x200 irq=9
+ options cs4232 synthirq=9 synthio=0x200 io=0x530 irq=5 dma=1 dma2=0
+ options opl3 io=0x388
+
+Things to note:
+
+ the wavefront options "io" and "irq" ***MUST*** match the "synthio"
+ and "synthirq" cs4232 options.
+
+ you can do without the opl3 module if you don't
+ want to use the OPL/[34] FM synth on the soundcard
+
+ the opl3 io parameter is conventionally not adjustable.
+ In theory, any not-in-use IO port address would work, but
+ just use 0x388 and stick with the crowd.
+
+**********************************************************************
+7) What about firmware ?
+**********************************************************************
+
+Turtle Beach have not given me permission to distribute their firmware
+for the ICS2115. However, if you have a WaveFront card, then you
+almost certainly have the firmware, and if not, its freely available
+on their website, at:
+
+ http://www.tbeach.com/tbs/downloads/scardsdown.htm#tropezplus
+
+The file is called WFOS2001.MOT (for the Tropez+).
+
+This driver, however, doesn't use the pure firmware as distributed,
+but instead relies on a somewhat processed form of it. You can
+generate this very easily. Following an idea from Andrew Veliath's
+Pinnacle driver, the following flex program will generate the
+processed version:
+
+---- cut here -------------------------
+%option main
+%%
+^S[28].*\r$ printf ("%c%.*s", yyleng-1,yyleng-1,yytext);
+<> { fputc ('\0', stdout); return; }
+\n {}
+. {}
+---- cut here -------------------------
+
+To use it, put the above in file (say, ws.l) compile it like this:
+
+ shell> flex -ows.c ws.l
+ shell> cc -o ws ws.c
+
+and then use it like this:
+
+ ws < my-copy-of-the-oswf.mot-file > /etc/sound/wavefront.os
+
+If you put it somewhere else, you'll always have to use the wf_ospath
+module parameter (see below) or alter the source code.
+
+**********************************************************************
+7) How do I get it working ?
+**********************************************************************
+
+Optionally, you can reboot with the "new" kernel (even though the only
+changes have really been made to a module).
+
+Then, as root do:
+
+ modprobe wavefront
+
+You should get something like this in /var/log/messages:
+
+ WaveFront: firmware 1.20 already loaded.
+
+or
+
+ WaveFront: no response to firmware probe, assume raw.
+
+then:
+
+ WaveFront: waiting for memory configuration ...
+ WaveFront: hardware version 1.64
+ WaveFront: available DRAM 8191k
+ WaveFront: 332 samples used (266 real, 13 aliases, 53 multi), 180 empty
+ WaveFront: 128 programs slots in use
+ WaveFront: 256 patch slots filled, 142 in use
+
+The whole process takes about 16 seconds, the longest waits being
+after reporting the hardware version (during the firmware download),
+and after reporting program status (during patch status inquiry). Its
+shorter (about 10 secs) if the firmware is already loaded (i.e. only
+warm reboots since the last firmware load).
+
+The "available DRAM" line will vary depending on how much added RAM
+your card has. Mine has 8MB.
+
+To check basically functionality, use play(1) or splay(1) to send a
+.WAV or other audio file through the audio portion. Then use playmidi
+to play a General MIDI file. Try the "-D 0" to hear the
+difference between sending MIDI to the WaveFront and using the OPL/3,
+which is the default (I think ...). If you have an external synth(s)
+hooked to the soundcard, you can use "-e" to route to the
+external synth(s) (in theory, -D 1 should work as well, but I think
+there is a bug in playmidi which prevents this from doing what it
+should).
+
+**********************************************************************
+8) What are the module parameters ?
+**********************************************************************
+
+Its best to read wavefront.c for this, but here is a summary:
+
+integers:
+ wf_raw - if set, ignore apparent presence of firmware
+ loaded onto the ICS2115, reset the whole
+ board, and initialize it from scratch. (default = 0)
+
+ fx_raw - if set, always initialize the YSS225 processor
+ on the Tropez plus. (default = 1)
+
+ < The next 4 are basically for kernel hackers to allow
+ tweaking the driver for testing purposes. >
+
+ wait_usecs - loop timer used when waiting for
+ status conditions on the board.
+ The default is 150.
+
+ debug_default - debugging flags. See sound/wavefront.h
+ for WF_DEBUG_* values. Default is zero.
+ Setting this allows you to debug the
+ driver during module installation.
+strings:
+ ospath - path to get to the pre-processed OS firmware.
+ (default: /etc/sound/wavefront.os)
+
+**********************************************************************
+9) Who should I contact if I have problems?
+**********************************************************************
+
+Just me: Paul Barton-Davis
+
+
diff --git a/trunk/Documentation/sound/oss/es1370 b/trunk/Documentation/sound/oss/es1370
new file mode 100644
index 000000000000..7b38b1a096a3
--- /dev/null
+++ b/trunk/Documentation/sound/oss/es1370
@@ -0,0 +1,70 @@
+/proc/sound, /dev/sndstat
+-------------------------
+
+/proc/sound and /dev/sndstat is not supported by the
+driver. To find out whether the driver succeeded loading,
+check the kernel log (dmesg).
+
+
+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 (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
+----------------
+
+This soundcard does not have any hardware MIDI synthesizer;
+MIDI synthesis has to be done in software. To allow this
+the driver/soundcard supports two PCM (/dev/dsp) interfaces.
+The second one goes to the mixer "synth" setting and supports
+only a limited set of sampling rates (44100, 22050, 11025, 5512).
+By setting lineout to 1 on the driver command line
+(eg. insmod es1370 lineout=1) it is even possible on some
+cards to convert the LINEIN jack into a second LINEOUT jack, thus
+making it possible to output four independent audio channels!
+
+There is a freely available software package that allows
+MIDI file playback on this soundcard called Timidity.
+See http://www.cgs.fi/~tt/timidity/.
+
+
+
+Thomas Sailer
+t.sailer@alumni.ethz.ch
diff --git a/trunk/Documentation/sound/oss/rme96xx b/trunk/Documentation/sound/oss/rme96xx
new file mode 100644
index 000000000000..87d7b7b65fa1
--- /dev/null
+++ b/trunk/Documentation/sound/oss/rme96xx
@@ -0,0 +1,767 @@
+Beta release of the rme96xx (driver for RME 96XX cards like the
+"Hammerfall" and the "Hammerfall light")
+
+Important: The driver module has to be installed on a freshly rebooted system,
+otherwise the driver might not be able to acquire its buffers.
+
+features:
+
+ - OSS programming interface (i.e. runs with standard OSS soundsoftware)
+ - OSS/Multichannel interface (OSS multichannel is done by just aquiring
+ more than 2 channels). The driver does not use more than one device
+ ( yet .. this feature may be implemented later )
+ - more than one RME card supported
+
+The driver uses a specific multichannel interface, which I will document
+when the driver gets stable. (take a look at the defines in rme96xx.h,
+which adds blocked multichannel formats i.e instead of
+lrlrlrlr --> llllrrrr etc.
+
+Use the "rmectrl" programm to look at the status of the card ..
+or use xrmectrl, a GUI interface for the ctrl program.
+
+What you can do with the rmectrl program is to set the stereo device for
+OSS emulation (e.g. if you use SPDIF out).
+
+You do:
+
+./ctrl offset 24 24
+
+which makes the stereo device use channels 25 and 26.
+
+Guenter Geiger
+
+copy the first part of the attached source code into rmectrl.c
+and the second part into xrmectrl (or get the program from
+http://gige.xdv.org/pages/soft/pages/rme)
+
+to compile: gcc -o rmectrl rmectrl.c
+------------------------------ snip ------------------------------------
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "rme96xx.h"
+
+/*
+ remctrl.c
+ (C) 2000 Guenter Geiger
+ HP20020201 - Heiko Purnhagen
+*/
+
+/* # define DEVICE_NAME "/dev/mixer" */
+# define DEVICE_NAME "/dev/mixer1"
+
+
+void usage(void)
+{
+ fprintf(stderr,"usage: rmectrl [/dev/mixer] [command [options]]\n\n");
+ fprintf(stderr,"where command is one of:\n");
+ fprintf(stderr," help show this help\n");
+ fprintf(stderr," status show status bits\n");
+ fprintf(stderr," control show control bits\n");
+ fprintf(stderr," mix show mixer/offset status\n");
+ fprintf(stderr," master set sync master\n");
+ fprintf(stderr," pro set spdif out pro\n");
+ fprintf(stderr," emphasis set spdif out emphasis\n");
+ fprintf(stderr," dolby set spdif out no audio\n");
+ fprintf(stderr," optout set spdif out optical\n");
+ fprintf(stderr," wordclock set sync wordclock\n");
+ fprintf(stderr," spdifin set spdif in (0=optical,1=coax,2=intern)\n");
+ fprintf(stderr," syncref set sync source (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n");
+ fprintf(stderr," adat1cd set ADAT1 on internal CD\n");
+ fprintf(stderr," offset set dev (0..3) offset (0..25)\n");
+ exit(-1);
+}
+
+
+int main(int argc, char* argv[])
+{
+ int cards;
+ int ret;
+ int i;
+ double ft;
+ int fd, fdwr;
+ int param,orig;
+ rme_status_t stat;
+ rme_ctrl_t ctrl;
+ char *device;
+ int argidx;
+
+ if (argc < 2)
+ usage();
+
+ if (*argv[1]=='/') {
+ device = argv[1];
+ argidx = 2;
+ }
+ else {
+ device = DEVICE_NAME;
+ argidx = 1;
+ }
+
+ fprintf(stdout,"mixer device %s\n",device);
+ if ((fd = open(device,O_RDONLY)) < 0) {
+ fprintf(stdout,"opening device failed\n");
+ exit(-1);
+ }
+
+ if ((fdwr = open(device,O_WRONLY)) < 0) {
+ fprintf(stdout,"opening device failed\n");
+ exit(-1);
+ }
+
+ if (argc < argidx+1)
+ usage();
+
+ if (!strcmp(argv[argidx],"help"))
+ usage();
+ if (!strcmp(argv[argidx],"-h"))
+ usage();
+ if (!strcmp(argv[argidx],"--help"))
+ usage();
+
+ if (!strcmp(argv[argidx],"status")) {
+ ioctl(fd,SOUND_MIXER_PRIVATE2,&stat);
+ fprintf(stdout,"stat.irq %d\n",stat.irq);
+ fprintf(stdout,"stat.lockmask %d\n",stat.lockmask);
+ fprintf(stdout,"stat.sr48 %d\n",stat.sr48);
+ fprintf(stdout,"stat.wclock %d\n",stat.wclock);
+ fprintf(stdout,"stat.bufpoint %d\n",stat.bufpoint);
+ fprintf(stdout,"stat.syncmask %d\n",stat.syncmask);
+ fprintf(stdout,"stat.doublespeed %d\n",stat.doublespeed);
+ fprintf(stdout,"stat.tc_busy %d\n",stat.tc_busy);
+ fprintf(stdout,"stat.tc_out %d\n",stat.tc_out);
+ fprintf(stdout,"stat.crystalrate %d (0=64k 3=96k 4=88.2k 5=48k 6=44.1k 7=32k)\n",stat.crystalrate);
+ fprintf(stdout,"stat.spdif_error %d\n",stat.spdif_error);
+ fprintf(stdout,"stat.bufid %d\n",stat.bufid);
+ fprintf(stdout,"stat.tc_valid %d\n",stat.tc_valid);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"control")) {
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ fprintf(stdout,"ctrl.start %d\n",ctrl.start);
+ fprintf(stdout,"ctrl.latency %d (0=64 .. 7=8192)\n",ctrl.latency);
+ fprintf(stdout,"ctrl.master %d\n",ctrl.master);
+ fprintf(stdout,"ctrl.ie %d\n",ctrl.ie);
+ fprintf(stdout,"ctrl.sr48 %d\n",ctrl.sr48);
+ fprintf(stdout,"ctrl.spare %d\n",ctrl.spare);
+ fprintf(stdout,"ctrl.doublespeed %d\n",ctrl.doublespeed);
+ fprintf(stdout,"ctrl.pro %d\n",ctrl.pro);
+ fprintf(stdout,"ctrl.emphasis %d\n",ctrl.emphasis);
+ fprintf(stdout,"ctrl.dolby %d\n",ctrl.dolby);
+ fprintf(stdout,"ctrl.opt_out %d\n",ctrl.opt_out);
+ fprintf(stdout,"ctrl.wordclock %d\n",ctrl.wordclock);
+ fprintf(stdout,"ctrl.spdif_in %d (0=optical,1=coax,2=intern)\n",ctrl.spdif_in);
+ fprintf(stdout,"ctrl.sync_ref %d (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n",ctrl.sync_ref);
+ fprintf(stdout,"ctrl.spdif_reset %d\n",ctrl.spdif_reset);
+ fprintf(stdout,"ctrl.spdif_select %d\n",ctrl.spdif_select);
+ fprintf(stdout,"ctrl.spdif_clock %d\n",ctrl.spdif_clock);
+ fprintf(stdout,"ctrl.spdif_write %d\n",ctrl.spdif_write);
+ fprintf(stdout,"ctrl.adat1_cd %d\n",ctrl.adat1_cd);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"mix")) {
+ rme_mixer mix;
+ int i;
+
+ for (i=0; i<4; i++) {
+ mix.devnr = i;
+ ioctl(fd,SOUND_MIXER_PRIVATE1,&mix);
+ if (mix.devnr == i) {
+ fprintf(stdout,"devnr %d\n",mix.devnr);
+ fprintf(stdout,"mix.i_offset %2d (0-25)\n",mix.i_offset);
+ fprintf(stdout,"mix.o_offset %2d (0-25)\n",mix.o_offset);
+ }
+ }
+ exit (0);
+ }
+
+/* the control flags */
+
+ if (argc < argidx+2)
+ usage();
+
+ if (!strcmp(argv[argidx],"master")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("master = %d\n",val);
+ ctrl.master = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"pro")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("pro = %d\n",val);
+ ctrl.pro = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"emphasis")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("emphasis = %d\n",val);
+ ctrl.emphasis = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"dolby")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("dolby = %d\n",val);
+ ctrl.dolby = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"optout")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("optout = %d\n",val);
+ ctrl.opt_out = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"wordclock")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("wordclock = %d\n",val);
+ ctrl.wordclock = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"spdifin")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("spdifin = %d\n",val);
+ ctrl.spdif_in = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"syncref")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("syncref = %d\n",val);
+ ctrl.sync_ref = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+ if (!strcmp(argv[argidx],"adat1cd")) {
+ int val = atoi(argv[argidx+1]);
+ ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
+ printf("adat1cd = %d\n",val);
+ ctrl.adat1_cd = val;
+ ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
+ exit (0);
+ }
+
+/* setting offset */
+
+ if (argc < argidx+4)
+ usage();
+
+ if (!strcmp(argv[argidx],"offset")) {
+ rme_mixer mix;
+
+ mix.devnr = atoi(argv[argidx+1]);
+
+ mix.i_offset = atoi(argv[argidx+2]);
+ mix.o_offset = atoi(argv[argidx+3]);
+ ioctl(fdwr,SOUND_MIXER_PRIVATE1,&mix);
+ fprintf(stdout,"devnr %d\n",mix.devnr);
+ fprintf(stdout,"mix.i_offset to %d\n",mix.i_offset);
+ fprintf(stdout,"mix.o_offset to %d\n",mix.o_offset);
+ exit (0);
+ }
+
+ usage();
+ exit (0); /* to avoid warning */
+}
+
+
+---------------------------- --------------------------------
+#!/usr/bin/wish
+
+# xrmectrl
+# (C) 2000 Guenter Geiger
+# HP20020201 - Heiko Purnhagen
+
+#set defaults "-relief ridged"
+set CTRLPROG "./rmectrl"
+if {$argc} {
+ set CTRLPROG "$CTRLPROG $argv"
+}
+puts "CTRLPROG $CTRLPROG"
+
+frame .butts
+button .butts.exit -text "Exit" -command "exit" -relief ridge
+#button .butts.state -text "State" -command "get_all"
+
+pack .butts.exit -side left
+pack .butts -side bottom
+
+
+#
+# STATUS
+#
+
+frame .status
+
+# Sampling Rate
+
+frame .status.sr
+label .status.sr.text -text "Sampling Rate" -justify left
+radiobutton .status.sr.441 -selectcolor red -text "44.1 kHz" -width 10 -anchor nw -variable srate -value 44100 -font times
+radiobutton .status.sr.480 -selectcolor red -text "48 kHz" -width 10 -anchor nw -variable srate -value 48000 -font times
+radiobutton .status.sr.882 -selectcolor red -text "88.2 kHz" -width 10 -anchor nw -variable srate -value 88200 -font times
+radiobutton .status.sr.960 -selectcolor red -text "96 kHz" -width 10 -anchor nw -variable srate -value 96000 -font times
+
+pack .status.sr.text .status.sr.441 .status.sr.480 .status.sr.882 .status.sr.960 -side top -padx 3
+
+# Lock
+
+frame .status.lock
+label .status.lock.text -text "Lock" -justify left
+checkbutton .status.lock.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatlock1 -font times
+checkbutton .status.lock.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatlock2 -font times
+checkbutton .status.lock.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatlock3 -font times
+
+pack .status.lock.text .status.lock.adat1 .status.lock.adat2 .status.lock.adat3 -side top -padx 3
+
+# Sync
+
+frame .status.sync
+label .status.sync.text -text "Sync" -justify left
+checkbutton .status.sync.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatsync1 -font times
+checkbutton .status.sync.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatsync2 -font times
+checkbutton .status.sync.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatsync3 -font times
+
+pack .status.sync.text .status.sync.adat1 .status.sync.adat2 .status.sync.adat3 -side top -padx 3
+
+# Timecode
+
+frame .status.tc
+label .status.tc.text -text "Timecode" -justify left
+checkbutton .status.tc.busy -selectcolor red -text "busy" -anchor nw -width 10 -variable tcbusy -font times
+checkbutton .status.tc.out -selectcolor red -text "out" -anchor nw -width 10 -variable tcout -font times
+checkbutton .status.tc.valid -selectcolor red -text "valid" -anchor nw -width 10 -variable tcvalid -font times
+
+pack .status.tc.text .status.tc.busy .status.tc.out .status.tc.valid -side top -padx 3
+
+# SPDIF In
+
+frame .status.spdif
+label .status.spdif.text -text "SPDIF In" -justify left
+label .status.spdif.sr -text "--.- kHz" -anchor n -width 10 -font times
+checkbutton .status.spdif.error -selectcolor red -text "Input Lock" -anchor nw -width 10 -variable spdiferr -font times
+
+pack .status.spdif.text .status.spdif.sr .status.spdif.error -side top -padx 3
+
+pack .status.sr .status.lock .status.sync .status.tc .status.spdif -side left -fill x -anchor n -expand 1
+
+
+#
+# CONTROL
+#
+
+proc setprof {} {
+ global CTRLPROG
+ global spprof
+ exec $CTRLPROG pro $spprof
+}
+
+proc setemph {} {
+ global CTRLPROG
+ global spemph
+ exec $CTRLPROG emphasis $spemph
+}
+
+proc setnoaud {} {
+ global CTRLPROG
+ global spnoaud
+ exec $CTRLPROG dolby $spnoaud
+}
+
+proc setoptical {} {
+ global CTRLPROG
+ global spoptical
+ exec $CTRLPROG optout $spoptical
+}
+
+proc setspdifin {} {
+ global CTRLPROG
+ global spdifin
+ exec $CTRLPROG spdifin [expr $spdifin - 1]
+}
+
+proc setsyncsource {} {
+ global CTRLPROG
+ global syncsource
+ exec $CTRLPROG syncref [expr $syncsource -1]
+}
+
+
+proc setmaster {} {
+ global CTRLPROG
+ global master
+ exec $CTRLPROG master $master
+}
+
+proc setwordclock {} {
+ global CTRLPROG
+ global wordclock
+ exec $CTRLPROG wordclock $wordclock
+}
+
+proc setadat1cd {} {
+ global CTRLPROG
+ global adat1cd
+ exec $CTRLPROG adat1cd $adat1cd
+}
+
+
+frame .control
+
+# SPDIF In & SPDIF Out
+
+
+frame .control.spdif
+
+frame .control.spdif.in
+label .control.spdif.in.text -text "SPDIF In" -justify left
+radiobutton .control.spdif.in.input1 -text "Optical" -anchor nw -width 13 -variable spdifin -value 1 -command setspdifin -selectcolor blue -font times
+radiobutton .control.spdif.in.input2 -text "Coaxial" -anchor nw -width 13 -variable spdifin -value 2 -command setspdifin -selectcolor blue -font times
+radiobutton .control.spdif.in.input3 -text "Intern " -anchor nw -width 13 -variable spdifin -command setspdifin -value 3 -selectcolor blue -font times
+
+checkbutton .control.spdif.in.adat1cd -text "ADAT1 Intern" -anchor nw -width 13 -variable adat1cd -command setadat1cd -selectcolor blue -font times
+
+pack .control.spdif.in.text .control.spdif.in.input1 .control.spdif.in.input2 .control.spdif.in.input3 .control.spdif.in.adat1cd
+
+label .control.spdif.space
+
+frame .control.spdif.out
+label .control.spdif.out.text -text "SPDIF Out" -justify left
+checkbutton .control.spdif.out.pro -text "Professional" -anchor nw -width 13 -variable spprof -command setprof -selectcolor blue -font times
+checkbutton .control.spdif.out.emphasis -text "Emphasis" -anchor nw -width 13 -variable spemph -command setemph -selectcolor blue -font times
+checkbutton .control.spdif.out.dolby -text "NoAudio" -anchor nw -width 13 -variable spnoaud -command setnoaud -selectcolor blue -font times
+checkbutton .control.spdif.out.optout -text "Optical Out" -anchor nw -width 13 -variable spoptical -command setoptical -selectcolor blue -font times
+
+pack .control.spdif.out.optout .control.spdif.out.dolby .control.spdif.out.emphasis .control.spdif.out.pro .control.spdif.out.text -side bottom
+
+pack .control.spdif.in .control.spdif.space .control.spdif.out -side top -fill y -padx 3 -expand 1
+
+# Sync Mode & Sync Source
+
+frame .control.sync
+frame .control.sync.mode
+label .control.sync.mode.text -text "Sync Mode" -justify left
+checkbutton .control.sync.mode.master -text "Master" -anchor nw -width 13 -variable master -command setmaster -selectcolor blue -font times
+checkbutton .control.sync.mode.wc -text "Wordclock" -anchor nw -width 13 -variable wordclock -command setwordclock -selectcolor blue -font times
+
+pack .control.sync.mode.text .control.sync.mode.master .control.sync.mode.wc
+
+label .control.sync.space
+
+frame .control.sync.src
+label .control.sync.src.text -text "Sync Source" -justify left
+radiobutton .control.sync.src.input1 -text "ADAT1" -anchor nw -width 13 -variable syncsource -value 1 -command setsyncsource -selectcolor blue -font times
+radiobutton .control.sync.src.input2 -text "ADAT2" -anchor nw -width 13 -variable syncsource -value 2 -command setsyncsource -selectcolor blue -font times
+radiobutton .control.sync.src.input3 -text "ADAT3" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 3 -selectcolor blue -font times
+radiobutton .control.sync.src.input4 -text "SPDIF" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 4 -selectcolor blue -font times
+
+pack .control.sync.src.input4 .control.sync.src.input3 .control.sync.src.input2 .control.sync.src.input1 .control.sync.src.text -side bottom
+
+pack .control.sync.mode .control.sync.space .control.sync.src -side top -fill y -padx 3 -expand 1
+
+label .control.space -text "" -width 10
+
+# Buffer Size
+
+frame .control.buf
+label .control.buf.text -text "Buffer Size (Latency)" -justify left
+radiobutton .control.buf.b1 -selectcolor red -text "64 (1.5 ms)" -width 13 -anchor nw -variable ssrate -value 1 -font times
+radiobutton .control.buf.b2 -selectcolor red -text "128 (3 ms)" -width 13 -anchor nw -variable ssrate -value 2 -font times
+radiobutton .control.buf.b3 -selectcolor red -text "256 (6 ms)" -width 13 -anchor nw -variable ssrate -value 3 -font times
+radiobutton .control.buf.b4 -selectcolor red -text "512 (12 ms)" -width 13 -anchor nw -variable ssrate -value 4 -font times
+radiobutton .control.buf.b5 -selectcolor red -text "1024 (23 ms)" -width 13 -anchor nw -variable ssrate -value 5 -font times
+radiobutton .control.buf.b6 -selectcolor red -text "2048 (46 ms)" -width 13 -anchor nw -variable ssrate -value 6 -font times
+radiobutton .control.buf.b7 -selectcolor red -text "4096 (93 ms)" -width 13 -anchor nw -variable ssrate -value 7 -font times
+radiobutton .control.buf.b8 -selectcolor red -text "8192 (186 ms)" -width 13 -anchor nw -variable ssrate -value 8 -font times
+
+pack .control.buf.text .control.buf.b1 .control.buf.b2 .control.buf.b3 .control.buf.b4 .control.buf.b5 .control.buf.b6 .control.buf.b7 .control.buf.b8 -side top -padx 3
+
+# Offset
+
+frame .control.offset
+
+frame .control.offset.in
+label .control.offset.in.text -text "Offset In" -justify left
+label .control.offset.in.off0 -text "dev\#0: -" -anchor nw -width 10 -font times
+label .control.offset.in.off1 -text "dev\#1: -" -anchor nw -width 10 -font times
+label .control.offset.in.off2 -text "dev\#2: -" -anchor nw -width 10 -font times
+label .control.offset.in.off3 -text "dev\#3: -" -anchor nw -width 10 -font times
+
+pack .control.offset.in.text .control.offset.in.off0 .control.offset.in.off1 .control.offset.in.off2 .control.offset.in.off3
+
+label .control.offset.space
+
+frame .control.offset.out
+label .control.offset.out.text -text "Offset Out" -justify left
+label .control.offset.out.off0 -text "dev\#0: -" -anchor nw -width 10 -font times
+label .control.offset.out.off1 -text "dev\#1: -" -anchor nw -width 10 -font times
+label .control.offset.out.off2 -text "dev\#2: -" -anchor nw -width 10 -font times
+label .control.offset.out.off3 -text "dev\#3: -" -anchor nw -width 10 -font times
+
+pack .control.offset.out.off3 .control.offset.out.off2 .control.offset.out.off1 .control.offset.out.off0 .control.offset.out.text -side bottom
+
+pack .control.offset.in .control.offset.space .control.offset.out -side top -fill y -padx 3 -expand 1
+
+
+pack .control.spdif .control.sync .control.space .control.buf .control.offset -side left -fill both -anchor n -expand 1
+
+
+label .statustext -text Status -justify center -relief ridge
+label .controltext -text Control -justify center -relief ridge
+
+label .statusspace
+label .controlspace
+
+pack .statustext .status .statusspace .controltext .control .controlspace -side top -anchor nw -fill both -expand 1
+
+
+proc get_bit {output sstr} {
+ set idx1 [string last [concat $sstr 1] $output]
+ set idx1 [expr $idx1 != -1]
+ return $idx1
+}
+
+proc get_val {output sstr} {
+ set val [string wordend $output [string last $sstr $output]]
+ set val [string range $output $val [expr $val+1]]
+ return $val
+}
+
+proc get_val2 {output sstr} {
+ set val [string wordend $output [string first $sstr $output]]
+ set val [string range $output $val [expr $val+2]]
+ return $val
+}
+
+proc get_control {} {
+ global spprof
+ global spemph
+ global spnoaud
+ global spoptical
+ global spdifin
+ global ssrate
+ global master
+ global wordclock
+ global syncsource
+ global CTRLPROG
+
+ set f [open "| $CTRLPROG control" r+]
+ set ooo [read $f 1000]
+ close $f
+# puts $ooo
+
+ set spprof [ get_bit $ooo "pro"]
+ set spemph [ get_bit $ooo "emphasis"]
+ set spnoaud [ get_bit $ooo "dolby"]
+ set spoptical [ get_bit $ooo "opt_out"]
+ set spdifin [ expr [ get_val $ooo "spdif_in"] + 1]
+ set ssrate [ expr [ get_val $ooo "latency"] + 1]
+ set master [ expr [ get_val $ooo "master"]]
+ set wordclock [ expr [ get_val $ooo "wordclock"]]
+ set syncsource [ expr [ get_val $ooo "sync_ref"] + 1]
+}
+
+proc get_status {} {
+ global srate
+ global ctrlcom
+
+ global adatlock1
+ global adatlock2
+ global adatlock3
+
+ global adatsync1
+ global adatsync2
+ global adatsync3
+
+ global tcbusy
+ global tcout
+ global tcvalid
+
+ global spdiferr
+ global crystal
+ global .status.spdif.text
+ global CTRLPROG
+
+
+ set f [open "| $CTRLPROG status" r+]
+ set ooo [read $f 1000]
+ close $f
+# puts $ooo
+
+# samplerate
+
+ set idx1 [string last "sr48 1" $ooo]
+ set idx2 [string last "doublespeed 1" $ooo]
+ if {$idx1 >= 0} {
+ set fact1 48000
+ } else {
+ set fact1 44100
+ }
+
+ if {$idx2 >= 0} {
+ set fact2 2
+ } else {
+ set fact2 1
+ }
+ set srate [expr $fact1 * $fact2]
+# ADAT lock
+
+ set val [get_val $ooo lockmask]
+ set adatlock1 0
+ set adatlock2 0
+ set adatlock3 0
+ if {[expr $val & 1]} {
+ set adatlock3 1
+ }
+ if {[expr $val & 2]} {
+ set adatlock2 1
+ }
+ if {[expr $val & 4]} {
+ set adatlock1 1
+ }
+
+# ADAT sync
+ set val [get_val $ooo syncmask]
+ set adatsync1 0
+ set adatsync2 0
+ set adatsync3 0
+
+ if {[expr $val & 1]} {
+ set adatsync3 1
+ }
+ if {[expr $val & 2]} {
+ set adatsync2 1
+ }
+ if {[expr $val & 4]} {
+ set adatsync1 1
+ }
+
+# TC busy
+
+ set tcbusy [get_bit $ooo "busy"]
+ set tcout [get_bit $ooo "out"]
+ set tcvalid [get_bit $ooo "valid"]
+ set spdiferr [expr [get_bit $ooo "spdif_error"] == 0]
+
+# 000=64kHz, 100=88.2kHz, 011=96kHz
+# 111=32kHz, 110=44.1kHz, 101=48kHz
+
+ set val [get_val $ooo crystalrate]
+
+ set crystal "--.- kHz"
+ if {$val == 0} {
+ set crystal "64 kHz"
+ }
+ if {$val == 4} {
+ set crystal "88.2 kHz"
+ }
+ if {$val == 3} {
+ set crystal "96 kHz"
+ }
+ if {$val == 7} {
+ set crystal "32 kHz"
+ }
+ if {$val == 6} {
+ set crystal "44.1 kHz"
+ }
+ if {$val == 5} {
+ set crystal "48 kHz"
+ }
+ .status.spdif.sr configure -text $crystal
+}
+
+proc get_offset {} {
+ global inoffset
+ global outoffset
+ global CTRLPROG
+
+ set f [open "| $CTRLPROG mix" r+]
+ set ooo [read $f 1000]
+ close $f
+# puts $ooo
+
+ if { [string match "*devnr*" $ooo] } {
+ set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
+ set val [get_val2 $ooo i_offset]
+ .control.offset.in.off0 configure -text "dev\#0: $val"
+ set val [get_val2 $ooo o_offset]
+ .control.offset.out.off0 configure -text "dev\#0: $val"
+ } else {
+ .control.offset.in.off0 configure -text "dev\#0: -"
+ .control.offset.out.off0 configure -text "dev\#0: -"
+ }
+ if { [string match "*devnr*" $ooo] } {
+ set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
+ set val [get_val2 $ooo i_offset]
+ .control.offset.in.off1 configure -text "dev\#1: $val"
+ set val [get_val2 $ooo o_offset]
+ .control.offset.out.off1 configure -text "dev\#1: $val"
+ } else {
+ .control.offset.in.off1 configure -text "dev\#1: -"
+ .control.offset.out.off1 configure -text "dev\#1: -"
+ }
+ if { [string match "*devnr*" $ooo] } {
+ set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
+ set val [get_val2 $ooo i_offset]
+ .control.offset.in.off2 configure -text "dev\#2: $val"
+ set val [get_val2 $ooo o_offset]
+ .control.offset.out.off2 configure -text "dev\#2: $val"
+ } else {
+ .control.offset.in.off2 configure -text "dev\#2: -"
+ .control.offset.out.off2 configure -text "dev\#2: -"
+ }
+ if { [string match "*devnr*" $ooo] } {
+ set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
+ set val [get_val2 $ooo i_offset]
+ .control.offset.in.off3 configure -text "dev\#3: $val"
+ set val [get_val2 $ooo o_offset]
+ .control.offset.out.off3 configure -text "dev\#3: $val"
+ } else {
+ .control.offset.in.off3 configure -text "dev\#3: -"
+ .control.offset.out.off3 configure -text "dev\#3: -"
+ }
+}
+
+
+proc get_all {} {
+get_status
+get_control
+get_offset
+}
+
+# main
+while {1} {
+ after 200
+ get_all
+ update
+}
diff --git a/trunk/Documentation/sound/oss/solo1 b/trunk/Documentation/sound/oss/solo1
new file mode 100644
index 000000000000..6f53d407d027
--- /dev/null
+++ b/trunk/Documentation/sound/oss/solo1
@@ -0,0 +1,70 @@
+Recording
+---------
+
+Recording does not work on the author's card, but there
+is at least one report of it working on later silicon.
+The chip behaves differently than described in the data sheet,
+likely due to a chip bug. Working around this would require
+the help of ESS (for example by publishing an errata sheet),
+but ESS has not done so so far.
+
+Also, the chip only supports 24 bit addresses for recording,
+which means it cannot work on some Alpha mainboards.
+
+
+/proc/sound, /dev/sndstat
+-------------------------
+
+/proc/sound and /dev/sndstat is not supported by the
+driver. To find out whether the driver succeeded loading,
+check the kernel log (dmesg).
+
+
+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
+t.sailer@alumni.ethz.ch
diff --git a/trunk/Documentation/sound/oss/sonicvibes b/trunk/Documentation/sound/oss/sonicvibes
new file mode 100644
index 000000000000..84dee2e0b37d
--- /dev/null
+++ b/trunk/Documentation/sound/oss/sonicvibes
@@ -0,0 +1,81 @@
+/proc/sound, /dev/sndstat
+-------------------------
+
+/proc/sound and /dev/sndstat is not supported by the
+driver. To find out whether the driver succeeded loading,
+check the kernel log (dmesg).
+
+
+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 (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 both has an OPL compatible FM synthesizer as well as
+a wavetable synthesizer.
+
+I haven't managed so far to get the OPL synth running.
+
+Using the wavetable synthesizer requires allocating
+1-4MB of physically contiguous memory, which isn't possible
+currently on Linux without ugly hacks like the bigphysarea
+patch. Therefore, the driver doesn't support wavetable
+synthesis.
+
+
+No support from S3
+------------------
+
+I do not get any support from S3. Therefore, the driver
+still has many problems. For example, although the manual
+states that the chip should be able to access the sample
+buffer anywhere in 32bit address space, I haven't managed to
+get it working with buffers above 16M. Therefore, the card
+has the same disadvantages as ISA soundcards.
+
+Given that the card is also very noisy, and if you haven't
+already bought it, you should strongly opt for one of the
+comparatively priced Ensoniq products.
+
+
+Thomas Sailer
+t.sailer@alumni.ethz.ch
diff --git a/trunk/Documentation/sound/oss/ultrasound b/trunk/Documentation/sound/oss/ultrasound
index eed331c738a3..32cd50478b36 100644
--- a/trunk/Documentation/sound/oss/ultrasound
+++ b/trunk/Documentation/sound/oss/ultrasound
@@ -19,7 +19,7 @@ db16 ???
no_wave_dma option
This option defaults to a value of 0, which allows the Ultrasound wavetable
-DSP to use DMA for playback and downloading samples. This is the same
+DSP to use DMA for for playback and downloading samples. This is the same
as the old behaviour. If set to 1, no DMA is needed for downloading samples,
and allows owners of a GUS MAX to make use of simultaneous digital audio
(/dev/dsp), MIDI, and wavetable playback.
diff --git a/trunk/Documentation/sound/oss/vwsnd b/trunk/Documentation/sound/oss/vwsnd
index 4c6cbdb3c548..a6ea0a1df9e4 100644
--- a/trunk/Documentation/sound/oss/vwsnd
+++ b/trunk/Documentation/sound/oss/vwsnd
@@ -12,7 +12,7 @@ boxes.
The Visual Workstation has an Analog Devices AD1843 "SoundComm" audio
codec chip. The AD1843 is accessed through the Cobalt I/O ASIC, also
-known as Lithium. This driver programs both chips.
+known as Lithium. This driver programs both both chips.
==============================================================================
QUICK CONFIGURATION
diff --git a/trunk/Documentation/sparc/sbus_drivers.txt b/trunk/Documentation/sparc/sbus_drivers.txt
index 8418d35484fc..4b9351624f13 100644
--- a/trunk/Documentation/sparc/sbus_drivers.txt
+++ b/trunk/Documentation/sparc/sbus_drivers.txt
@@ -25,8 +25,8 @@ the bits necessary to run your device. The most commonly
used members of this structure, and their typical usage,
will be detailed below.
- Here is a piece of skeleton code for performing a device
-probe in an SBUS driver under Linux:
+ Here is a piece of skeleton code for perofming a device
+probe in an SBUS driverunder Linux:
static int __devinit mydevice_probe_one(struct sbus_dev *sdev)
{
@@ -98,7 +98,7 @@ in your .remove method.
Any memory allocated, registers mapped, IRQs registered,
etc. must be undone by your .remove method so that all resources
-of your device are released by the time it returns.
+of your device are relased by the time it returns.
You should _NOT_ use the for_each_sbus(), for_each_sbusdev(),
and for_all_sbusdev() interfaces. They are deprecated, will be
diff --git a/trunk/Documentation/spi/pxa2xx b/trunk/Documentation/spi/pxa2xx
index a1e0ee20f595..9c45f3df2e18 100644
--- a/trunk/Documentation/spi/pxa2xx
+++ b/trunk/Documentation/spi/pxa2xx
@@ -124,12 +124,12 @@ use a value of 8.
The "pxa2xx_spi_chip.timeout_microsecs" fields is used to efficiently handle
trailing bytes in the SSP receiver fifo. The correct value for this field is
dependent on the SPI bus speed ("spi_board_info.max_speed_hz") and the specific
-slave device. Please note that the PXA2xx SSP 1 does not support trailing byte
+slave device. Please note the the PXA2xx SSP 1 does not support trailing byte
timeouts and must busy-wait any trailing bytes.
The "pxa2xx_spi_chip.enable_loopback" field is used to place the SSP porting
into internal loopback mode. In this mode the SSP controller internally
-connects the SSPTX pin to the SSPRX pin. This is useful for initial setup
+connects the SSPTX pin the the SSPRX pin. This is useful for initial setup
testing.
The "pxa2xx_spi_chip.cs_control" field is used to point to a board specific
@@ -208,7 +208,7 @@ DMA and PIO I/O Support
-----------------------
The pxa2xx_spi driver support both DMA and interrupt driven PIO message
transfers. The driver defaults to PIO mode and DMA transfers must enabled by
-setting the "enable_dma" flag in the "pxa2xx_spi_master" structure and
+setting the "enable_dma" flag in the "pxa2xx_spi_master" structure and and
ensuring that the "pxa2xx_spi_chip.dma_burst_size" field is non-zero. The DMA
mode support both coherent and stream based DMA mappings.
diff --git a/trunk/Documentation/spi/spi-summary b/trunk/Documentation/spi/spi-summary
index 72795796b13d..068732d32276 100644
--- a/trunk/Documentation/spi/spi-summary
+++ b/trunk/Documentation/spi/spi-summary
@@ -262,7 +262,7 @@ NON-STATIC CONFIGURATIONS
Developer boards often play by different rules than product boards, and one
example is the potential need to hotplug SPI devices and/or controllers.
-For those cases you might need to use spi_busnum_to_master() to look
+For those cases you might need to use use spi_busnum_to_master() to look
up the spi bus master, and will likely need spi_new_device() to provide the
board info based on the board that was hotplugged. Of course, you'd later
call at least spi_unregister_device() when that board is removed.
@@ -322,7 +322,7 @@ As soon as it enters probe(), the driver may issue I/O requests to
the SPI device using "struct spi_message". When remove() returns,
the driver guarantees that it won't submit any more such messages.
- - An spi_message is a sequence of protocol operations, executed
+ - An spi_message is a sequence of of protocol operations, executed
as one atomic sequence. SPI driver controls include:
+ when bidirectional reads and writes start ... by how its
diff --git a/trunk/Documentation/stable_kernel_rules.txt b/trunk/Documentation/stable_kernel_rules.txt
index 02a481225b0d..e409e5d07486 100644
--- a/trunk/Documentation/stable_kernel_rules.txt
+++ b/trunk/Documentation/stable_kernel_rules.txt
@@ -4,7 +4,7 @@ Rules on what kind of patches are accepted, and which ones are not, into the
"-stable" tree:
- It must be obviously correct and tested.
- - It cannot be bigger than 100 lines, with context.
+ - It can not be bigger than 100 lines, with context.
- It must fix only one thing.
- It must fix a real bug that bothers people (not a, "This could be a
problem..." type thing).
@@ -14,7 +14,7 @@ Rules on what kind of patches are accepted, and which ones are not, into the
critical.
- No "theoretical race condition" issues, unless an explanation of how the
race can be exploited is also provided.
- - It cannot contain any "trivial" fixes in it (spelling changes,
+ - It can not contain any "trivial" fixes in it (spelling changes,
whitespace cleanups, etc).
- It must be accepted by the relevant subsystem maintainer.
- It must follow the Documentation/SubmittingPatches rules.
diff --git a/trunk/Documentation/uml/UserModeLinux-HOWTO.txt b/trunk/Documentation/uml/UserModeLinux-HOWTO.txt
index b60590eca18f..544430e39980 100644
--- a/trunk/Documentation/uml/UserModeLinux-HOWTO.txt
+++ b/trunk/Documentation/uml/UserModeLinux-HOWTO.txt
@@ -157,7 +157,7 @@
13. What to do when UML doesn't work
13.1 Strange compilation errors when you build from source
- 13.2 (obsolete)
+ 13.2 UML hangs on boot after mounting devfs
13.3 A variety of panics and hangs with /tmp on a reiserfs filesystem
13.4 The compile fails with errors about conflicting types for 'open', 'dup', and 'waitpid'
13.5 UML doesn't work when /tmp is an NFS filesystem
@@ -379,6 +379,31 @@
bug fixes and enhancements that have gone into subsequent releases.
+ If you build your own kernel, and want to boot it from one of the
+ filesystems distributed from this site, then, in nearly all cases,
+ devfs must be compiled into the kernel and mounted at boot time. The
+ exception is the SuSE filesystem. For this, devfs must either not be
+ in the kernel at all, or "devfs=nomount" must be on the kernel command
+ line. Any disagreement between the kernel and the filesystem being
+ booted about whether devfs is being used will result in the boot
+ getting no further than single-user mode.
+
+
+ If you don't want to use devfs, you can remove the need for it from a
+ filesystem by copying /dev from someplace, making a bunch of /dev/ubd
+ devices:
+
+
+ UML# for i in 0 1 2 3 4 5 6 7; do mknod ubd$i b 98 $i; done
+
+
+
+
+ and changing /etc/fstab and /etc/inittab to refer to the non-devfs
+ devices.
+
+
+
22..22.. CCoommppiilliinngg aanndd iinnssttaalllliinngg kkeerrnneell mmoodduulleess
UML modules are built in the same way as the native kernel (with the
@@ -814,7 +839,9 @@
+o None - device=none
- This causes the device to disappear.
+ This causes the device to disappear. If you are using devfs, the
+ device will not appear in /dev. If not, then attempts to open it
+ will return -ENODEV.
@@ -1020,7 +1047,7 @@
Note that the IP address you assign to the host end of the tap device
must be different than the IP you assign to the eth device inside UML.
- If you are short on IPs and don't want to consume two per UML, then
+ If you are short on IPs and don't want to comsume two per UML, then
you can reuse the host's eth IP address for the host ends of the tap
devices. Internally, the UMLs must still get unique IPs for their eth
devices. You can also give the UMLs non-routable IPs (192.168.x.x or
@@ -2031,7 +2058,7 @@
there are multiple COWs associated with a backing file, a -d merge of
one of them will invalidate all of the others. However, it is
convenient if you're short of disk space, and it should also be
- noticeably faster than a non-destructive merge.
+ noticably faster than a non-destructive merge.
@@ -3871,6 +3898,29 @@
+ 1133..22.. UUMMLL hhaannggss oonn bboooott aafftteerr mmoouunnttiinngg ddeevvffss
+
+ The boot looks like this:
+
+
+ VFS: Mounted root (ext2 filesystem) readonly.
+ Mounted devfs on /dev
+
+
+
+
+ You're probably running a recent distribution on an old machine. I
+ saw this with the RH7.1 filesystem running on a Pentium. The shared
+ library loader, ld.so, was executing an instruction (cmove) which the
+ Pentium didn't support. That instruction was apparently added later.
+ If you run UML under the debugger, you'll see the hang caused by one
+ instruction causing an infinite SIGILL stream.
+
+
+ The fix is to boot UML on an older filesystem.
+
+
+
1133..33.. AA vvaarriieettyy ooff ppaanniiccss aanndd hhaannggss wwiitthh //ttmmpp oonn aa rreeiisseerrffss ffiilleessyyss--
tteemm
@@ -3903,9 +3953,9 @@
1133..55.. UUMMLL ddooeessnn''tt wwoorrkk wwhheenn //ttmmpp iiss aann NNFFSS ffiilleessyysstteemm
- This seems to be a similar situation with the ReiserFS problem above.
+ This seems to be a similar situation with the resierfs problem above.
Some versions of NFS seems not to handle mmap correctly, which UML
- depends on. The workaround is have /tmp be a non-NFS directory.
+ depends on. The workaround is have /tmp be non-NFS directory.
1133..66.. UUMMLL hhaannggss oonn bboooott wwhheenn ccoommppiilleedd wwiitthh ggpprrooff ssuuppppoorrtt
@@ -3972,7 +4022,7 @@
nneett
If you can connect to the host, and the host can connect to UML, but
- you cannot connect to any other machines, then you may need to enable
+ you can not connect to any other machines, then you may need to enable
IP Masquerading on the host. Usually this is only experienced when
using private IP addresses (192.168.x.x or 10.x.x.x) for host/UML
networking, rather than the public address space that your host is
@@ -4621,7 +4671,7 @@
Chris Reahard built a specialized root filesystem for running a DNS
server jailed inside UML. It's available from the download
page in the Jail
- Filesystems section.
+ Filesysems section.
diff --git a/trunk/Documentation/unshare.txt b/trunk/Documentation/unshare.txt
index a8643513a5f6..90a5e9e5bef1 100644
--- a/trunk/Documentation/unshare.txt
+++ b/trunk/Documentation/unshare.txt
@@ -260,7 +260,7 @@ items:
a pointer to it.
7.4) Appropriately modify architecture specific code to register the
- new system call.
+ the new system call.
8) Test Specification
---------------------
diff --git a/trunk/Documentation/usb/URB.txt b/trunk/Documentation/usb/URB.txt
index 8ffce746d496..a49e5f2c2b46 100644
--- a/trunk/Documentation/usb/URB.txt
+++ b/trunk/Documentation/usb/URB.txt
@@ -184,7 +184,7 @@ you can pass information to the completion handler.
Note that even when an error (or unlink) is reported, data may have been
transferred. That's because USB transfers are packetized; it might take
sixteen packets to transfer your 1KByte buffer, and ten of them might
-have transferred successfully before the completion was called.
+have transferred succesfully before the completion was called.
NOTE: ***** WARNING *****
diff --git a/trunk/Documentation/usb/acm.txt b/trunk/Documentation/usb/acm.txt
index 737d6104c3f3..8ef45ea8f691 100644
--- a/trunk/Documentation/usb/acm.txt
+++ b/trunk/Documentation/usb/acm.txt
@@ -49,6 +49,20 @@ Abstract Control Model (USB CDC ACM) specification.
Unfortunately many modems and most ISDN TAs use proprietary interfaces and
thus won't work with this drivers. Check for ACM compliance before buying.
+ The driver (with devfs) creates these devices in /dev/usb/acm:
+
+ crw-r--r-- 1 root root 166, 0 Apr 1 10:49 0
+ crw-r--r-- 1 root root 166, 1 Apr 1 10:49 1
+ crw-r--r-- 1 root root 166, 2 Apr 1 10:49 2
+
+ And so on, up to 31, with the limit being possible to change in acm.c to up
+to 256, so you can use up to 256 USB modems with one computer (you'll need
+three USB cards for that, though).
+
+ If you don't use devfs, then you can create device nodes with the same
+minor/major numbers anywhere you want, but either the above location or
+/dev/usb/ttyACM0 is preferred.
+
To use the modems you need these modules loaded:
usbcore.ko
diff --git a/trunk/Documentation/usb/error-codes.txt b/trunk/Documentation/usb/error-codes.txt
index 9cf83e8c27b8..39c68f8c4e6c 100644
--- a/trunk/Documentation/usb/error-codes.txt
+++ b/trunk/Documentation/usb/error-codes.txt
@@ -126,7 +126,7 @@ one or more packets could finish before an error stops further endpoint I/O.
urb->transfer_flags.
-ENODEV Device was removed. Often preceded by a burst of
- other errors, since the hub driver doesn't detect
+ other errors, since the hub driver does't detect
device removal events immediately.
-EXDEV ISO transfer only partially completed
@@ -145,7 +145,7 @@ one or more packets could finish before an error stops further endpoint I/O.
hardware problems such as bad devices (including firmware) or cables.
(**) This is also one of several codes that different kinds of host
-controller use to indicate a transfer has failed because of device
+controller use to to indicate a transfer has failed because of device
disconnect. In the interval before the hub driver starts disconnect
processing, devices may receive such fault reports for every request.
diff --git a/trunk/Documentation/usb/hiddev.txt b/trunk/Documentation/usb/hiddev.txt
index 6a790754e963..cd6fb4b58e1f 100644
--- a/trunk/Documentation/usb/hiddev.txt
+++ b/trunk/Documentation/usb/hiddev.txt
@@ -118,7 +118,7 @@ index, the ioctl returns -1 and sets errno to -EINVAL.
HIDIOCGDEVINFO - struct hiddev_devinfo (read)
Gets a hiddev_devinfo structure which describes the device.
-HIDIOCGSTRING - struct hiddev_string_descriptor (read/write)
+HIDIOCGSTRING - struct struct hiddev_string_descriptor (read/write)
Gets a string descriptor from the device. The caller must fill in the
"index" field to indicate which descriptor should be returned.
diff --git a/trunk/Documentation/usb/mtouchusb.txt b/trunk/Documentation/usb/mtouchusb.txt
index e43cfffaa100..cd806bfc8b81 100644
--- a/trunk/Documentation/usb/mtouchusb.txt
+++ b/trunk/Documentation/usb/mtouchusb.txt
@@ -11,7 +11,7 @@ CHANGES
Changed reset from standard USB dev reset to vendor reset
Changed data sent to host from compensated to raw coordinates
Eliminated vendor/product module params
- Performed multiple successful tests with an EXII-5010UC
+ Performed multiple successfull tests with an EXII-5010UC
SUPPORTED HARDWARE:
@@ -38,7 +38,7 @@ This driver appears to be one of possible 2 Linux USB Input Touchscreen
drivers. Although 3M produces a binary only driver available for
download, I persist in updating this driver since I would like to use the
touchscreen for embedded apps using QTEmbedded, DirectFB, etc. So I feel the
-logical choice is to use Linux Input.
+logical choice is to use Linux Imput.
Currently there is no way to calibrate the device via this driver. Even if
the device could be calibrated, the driver pulls to raw coordinate data from
@@ -63,7 +63,7 @@ TODO:
Implement a control urb again to handle requests to and from the device
such as calibration, etc once/if it becomes available.
-DISCLAIMER:
+DISCLAMER:
I am not a MicroTouch/3M employee, nor have I ever been. 3M does not support
this driver! If you want touch drivers only supported within X, please go to:
diff --git a/trunk/Documentation/usb/usb-serial.txt b/trunk/Documentation/usb/usb-serial.txt
index 8dc2bacc8f1f..a2dee6e6190d 100644
--- a/trunk/Documentation/usb/usb-serial.txt
+++ b/trunk/Documentation/usb/usb-serial.txt
@@ -13,6 +13,7 @@ CONFIGURATION
Currently the driver can handle up to 256 different serial interfaces at
one time.
+ If you are not using devfs:
The major number that the driver uses is 188 so to use the driver,
create the following nodes:
mknod /dev/ttyUSB0 c 188 0
@@ -25,6 +26,10 @@ CONFIGURATION
mknod /dev/ttyUSB254 c 188 254
mknod /dev/ttyUSB255 c 188 255
+ If you are using devfs:
+ The devices supported by this driver will show up as
+ /dev/usb/tts/{0,1,...}
+
When the device is connected and recognized by the driver, the driver
will print to the system log, which node(s) the device has been bound
to.
@@ -223,7 +228,7 @@ Cypress M8 CY4601 Family Serial Driver
-Cypress HID->COM RS232 adapter
Note: Cypress Semiconductor claims no affiliation with the
- hid->com device.
+ the hid->com device.
Most devices using chipsets under the CY4601 family should
work with the driver. As long as they stay true to the CY4601
@@ -272,7 +277,7 @@ Digi AccelePort Driver
work under SMP with the uhci driver.
The driver is generally working, though we still have a few more ioctls
- to implement and final testing and debugging to do. The parallel port
+ to implement and final testing and debugging to do. The paralled port
on the USB 2 is supported as a serial to parallel converter; in other
words, it appears as another USB serial port on Linux, even though
physically it is really a parallel port. The Digi Acceleport USB 8
@@ -422,7 +427,7 @@ Options supported:
debug - extra verbose debugging info
(default: 0; nonzero enables)
use_lowlatency - use low_latency flag to speed up tty layer
- when reading from the device.
+ when reading from from the device.
(default: 0; nonzero enables)
See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
diff --git a/trunk/Documentation/video4linux/README.pvrusb2 b/trunk/Documentation/video4linux/README.pvrusb2
index a4b7ae800866..c73a32c34528 100644
--- a/trunk/Documentation/video4linux/README.pvrusb2
+++ b/trunk/Documentation/video4linux/README.pvrusb2
@@ -155,7 +155,7 @@ Source file list / functional overview:
pvrusb2-i2c-core.[ch] - This module provides an implementation of a
kernel-friendly I2C adaptor driver, through which other external
I2C client drivers (e.g. msp3400, tuner, lirc) may connect and
- operate corresponding chips within the pvrusb2 device. It is
+ operate corresponding chips within the the pvrusb2 device. It is
through here that other V4L modules can reach into this driver to
operate specific pieces (and those modules are in turn driven by
glue logic which is coordinated by pvrusb2-hdw, doled out by
diff --git a/trunk/Documentation/video4linux/Zoran b/trunk/Documentation/video4linux/Zoran
index deb218f77adb..040a2c841ae9 100644
--- a/trunk/Documentation/video4linux/Zoran
+++ b/trunk/Documentation/video4linux/Zoran
@@ -144,7 +144,7 @@ tv broadcast formats all aver the world.
The CCIR defines parameters needed for broadcasting the signal.
The CCIR has defined different standards: A,B,D,E,F,G,D,H,I,K,K1,L,M,N,...
-The CCIR says not much about the colorsystem used !!!
+The CCIR says not much about about the colorsystem used !!!
And talking about a colorsystem says not to much about how it is broadcast.
The CCIR standards A,E,F are not used any more.
diff --git a/trunk/Documentation/video4linux/cx2341x/fw-decoder-api.txt b/trunk/Documentation/video4linux/cx2341x/fw-decoder-api.txt
index 78bf5f21e513..9df4fb3ea0f2 100644
--- a/trunk/Documentation/video4linux/cx2341x/fw-decoder-api.txt
+++ b/trunk/Documentation/video4linux/cx2341x/fw-decoder-api.txt
@@ -102,7 +102,7 @@ Param[0]
Name CX2341X_DEC_GET_XFER_INFO
Enum 9/0x09
Description
- This API call may be used to detect an end of stream condition.
+ This API call may be used to detect an end of stream condtion.
Result[0]
Stream type
Result[1]
diff --git a/trunk/Documentation/video4linux/cx2341x/fw-encoder-api.txt b/trunk/Documentation/video4linux/cx2341x/fw-encoder-api.txt
index 15df0df57ddd..001c68644b08 100644
--- a/trunk/Documentation/video4linux/cx2341x/fw-encoder-api.txt
+++ b/trunk/Documentation/video4linux/cx2341x/fw-encoder-api.txt
@@ -280,7 +280,7 @@ Param[0]
Param[1]
Unknown, but leaving this to 0 seems to work best. Indications are that
this might have to do with USB support, although passing anything but 0
- only breaks things.
+ onl breaks things.
-------------------------------------------------------------------------------
diff --git a/trunk/Documentation/video4linux/cx2341x/fw-osd-api.txt b/trunk/Documentation/video4linux/cx2341x/fw-osd-api.txt
index 0a602f3e601b..da98ae30a37a 100644
--- a/trunk/Documentation/video4linux/cx2341x/fw-osd-api.txt
+++ b/trunk/Documentation/video4linux/cx2341x/fw-osd-api.txt
@@ -97,7 +97,7 @@ Result[0]
Result[1]
top left vertical offset
Result[2]
- bottom right horizontal offset
+ bottom right hotizontal offset
Result[3]
bottom right vertical offset
diff --git a/trunk/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt b/trunk/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt
index faccee68f603..93fec32a1188 100644
--- a/trunk/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt
+++ b/trunk/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt
@@ -30,7 +30,7 @@ provide for a handler)
GP_SAMPLE register is at 0x35C058
Bits are then right shifted into the GP_SAMPLE register at the specified
-rate; you get an interrupt when a full DWORD is received.
+rate; you get an interrupt when a full DWORD is recieved.
You need to recover the actual RC5 bits out of the (oversampled) IR sensor
bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An
actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
diff --git a/trunk/Documentation/video4linux/et61x251.txt b/trunk/Documentation/video4linux/et61x251.txt
index 1bdee8f85b9a..cd584f20a997 100644
--- a/trunk/Documentation/video4linux/et61x251.txt
+++ b/trunk/Documentation/video4linux/et61x251.txt
@@ -80,7 +80,7 @@ Some of the features of the driver are:
high compression quality (see also "Notes for V4L2 application developers"
paragraph);
- full support for the capabilities of every possible image sensors that can
- be connected to the ET61X[12]51 bridges, including, for instance, red, green,
+ be connected to the ET61X[12]51 bridges, including, for istance, red, green,
blue and global gain adjustments and exposure control (see "Supported
devices" paragraph for details);
- use of default color settings for sunlight conditions;
@@ -222,7 +222,7 @@ identifier - of the camera registered as "/dev/video0":
[root@localhost #] echo 1 > i2c_reg
[root@localhost #] cat i2c_val
-Note that if the sensor registers cannot be read, "cat" will fail.
+Note that if the sensor registers can not be read, "cat" will fail.
To avoid race conditions, all the I/O accesses to the files are serialized.
diff --git a/trunk/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt b/trunk/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt
index faccee68f603..93fec32a1188 100644
--- a/trunk/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt
+++ b/trunk/Documentation/video4linux/hauppauge-wintv-cx88-ir.txt
@@ -30,7 +30,7 @@ provide for a handler)
GP_SAMPLE register is at 0x35C058
Bits are then right shifted into the GP_SAMPLE register at the specified
-rate; you get an interrupt when a full DWORD is received.
+rate; you get an interrupt when a full DWORD is recieved.
You need to recover the actual RC5 bits out of the (oversampled) IR sensor
bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An
actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
diff --git a/trunk/Documentation/video4linux/meye.txt b/trunk/Documentation/video4linux/meye.txt
index ecb34160e61d..2137da97552f 100644
--- a/trunk/Documentation/video4linux/meye.txt
+++ b/trunk/Documentation/video4linux/meye.txt
@@ -29,7 +29,7 @@ driver (PCI vendor/device is 0x136b/0xff01)
The third one, present in recent (more or less last year) Picturebooks
(C1M* models), is not supported. The manufacturer has given the specs
-to the developers under a NDA (which allows the development of a GPL
+to the developers under a NDA (which allows the develoment of a GPL
driver however), but things are not moving very fast (see
http://r-engine.sourceforge.net/) (PCI vendor/device is 0x10cf/0x2011).
diff --git a/trunk/Documentation/video4linux/sn9c102.txt b/trunk/Documentation/video4linux/sn9c102.txt
index 8cda472db36d..1d20895b4354 100644
--- a/trunk/Documentation/video4linux/sn9c102.txt
+++ b/trunk/Documentation/video4linux/sn9c102.txt
@@ -60,7 +60,7 @@ It's worth to note that SONiX has never collaborated with the author during the
development of this project, despite several requests for enough detailed
specifications of the register tables, compression engine and video data format
of the above chips. Nevertheless, these informations are no longer necessary,
-because all the aspects related to these chips are known and have been
+becouse all the aspects related to these chips are known and have been
described in detail in this documentation.
The driver relies on the Video4Linux2 and USB core modules. It has been
@@ -85,7 +85,7 @@ Some of the features of the driver are:
high compression quality (see also "Notes for V4L2 application developers"
and "Video frame formats" paragraphs);
- full support for the capabilities of many of the possible image sensors that
- can be connected to the SN9C10x bridges, including, for instance, red, green,
+ can be connected to the SN9C10x bridges, including, for istance, red, green,
blue and global gain adjustments and exposure (see "Supported devices"
paragraph for details);
- use of default color settings for sunlight conditions;
diff --git a/trunk/Documentation/video4linux/w9968cf.txt b/trunk/Documentation/video4linux/w9968cf.txt
index e0bba8393c77..0d53ce774b01 100644
--- a/trunk/Documentation/video4linux/w9968cf.txt
+++ b/trunk/Documentation/video4linux/w9968cf.txt
@@ -15,7 +15,7 @@ Index
5. Supported devices
6. Module dependencies
7. Module loading
-8. Module parameters
+8. Module paramaters
9. Contact information
10. Credits
diff --git a/trunk/Documentation/video4linux/zr36120.txt b/trunk/Documentation/video4linux/zr36120.txt
index 1a1c2d03a5c8..ac6d92d01944 100644
--- a/trunk/Documentation/video4linux/zr36120.txt
+++ b/trunk/Documentation/video4linux/zr36120.txt
@@ -118,9 +118,9 @@ card is not there, please try if any other card gives some
response, and mail me if you got a working tvcard addition.
PS. 1 will trigger the watchdog exception. Changing
diff --git a/trunk/Documentation/x86_64/boot-options.txt b/trunk/Documentation/x86_64/boot-options.txt
index f3c57f43ba64..74b77f9e91bc 100644
--- a/trunk/Documentation/x86_64/boot-options.txt
+++ b/trunk/Documentation/x86_64/boot-options.txt
@@ -109,7 +109,7 @@ Idle loop
Rebooting
reboot=b[ios] | t[riple] | k[bd] [, [w]arm | [c]old]
- bios Use the CPU reboot vector for warm reset
+ bios Use the CPU reboto vector for warm reset
warm Don't set the cold reboot flag
cold Set the cold reboot flag
triple Force a triple fault (init)
diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS
index 8c35b3c503aa..1c6223d3ce70 100644
--- a/trunk/MAINTAINERS
+++ b/trunk/MAINTAINERS
@@ -977,13 +977,6 @@ L: ebtables-devel@lists.sourceforge.net
W: http://ebtables.sourceforge.net/
S: Maintained
-ECRYPT FILE SYSTEM
-P: Mike Halcrow, Phillip Hellewell
-M: mhalcrow@us.ibm.com, phillip@hellewell.homeip.net
-L: ecryptfs-devel@lists.sourceforge.net
-W: http://ecryptfs.sourceforge.net/
-S: Supported
-
EDAC-CORE
P: Doug Thompson
M: norsk5@xmission.com
@@ -1900,6 +1893,11 @@ M: rroesler@syskonnect.de
W: http://www.syskonnect.com
S: Supported
+MAESTRO PCI SOUND DRIVERS
+P: Zach Brown
+M: zab@zabbo.net
+S: Odd Fixes
+
MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
P: Michael Kerrisk
M: mtk-manpages@gmx.net
@@ -2436,19 +2434,6 @@ M: mporter@kernel.crashing.org
L: linux-kernel@vger.kernel.org
S: Maintained
-READ-COPY UPDATE (RCU)
-P: Dipankar Sarma
-M: dipankar@in.ibm.com
-W: http://www.rdrop.com/users/paulmck/rclock/
-L: linux-kernel@vger.kernel.org
-S: Supported
-
-RCUTORTURE MODULE
-P: Josh Triplett
-M: josh@freedesktop.org
-L: linux-kernel@vger.kernel.org
-S: Maintained
-
REAL TIME CLOCK DRIVER
P: Paul Gortmaker
M: p_gortmaker@yahoo.com
@@ -2869,11 +2854,6 @@ M: hlhung3i@gmail.com
W: http://tcp-lp-mod.sourceforge.net/
S: Maintained
-TI FLASH MEDIA INTERFACE DRIVER
-P: Alex Dubov
-M: oakad@yahoo.com
-S: Maintained
-
TI OMAP RANDOM NUMBER GENERATOR SUPPORT
P: Deepak Saxena
M: dsaxena@plexity.net
@@ -3397,6 +3377,12 @@ M: Henk.Vergonet@gmail.com
L: usbb2k-api-dev@nongnu.org
S: Maintained
+YMFPCI YAMAHA PCI SOUND (Use ALSA instead)
+P: Pete Zaitcev
+M: zaitcev@yahoo.com
+L: linux-kernel@vger.kernel.org
+S: Obsolete
+
Z8530 DRIVER FOR AX.25
P: Joerg Reuter
M: jreuter@yaina.de
diff --git a/trunk/Makefile b/trunk/Makefile
index adb2c748e105..4c6c5e32ef96 100644
--- a/trunk/Makefile
+++ b/trunk/Makefile
@@ -1321,7 +1321,7 @@ define xtags
--langdef=kconfig \
--language-force=kconfig \
--regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
- $(all-defconfigs) | xargs -r $1 -a \
+ $(all-defconfigs) | xargs $1 -a \
--langdef=dotconfig \
--language-force=dotconfig \
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
@@ -1329,7 +1329,7 @@ define xtags
$(all-sources) | xargs $1 -a; \
$(all-kconfigs) | xargs $1 -a \
--regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
- $(all-defconfigs) | xargs -r $1 -a \
+ $(all-defconfigs) | xargs $1 -a \
--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
else \
$(all-sources) | xargs $1 -a; \
diff --git a/trunk/arch/alpha/Kconfig b/trunk/arch/alpha/Kconfig
index 7e55ea66c6d4..2b36afd8e969 100644
--- a/trunk/arch/alpha/Kconfig
+++ b/trunk/arch/alpha/Kconfig
@@ -534,7 +534,7 @@ config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous Memory Support (EXPERIMENTAL)"
depends on EXPERIMENTAL
help
- Say Y to support efficient handling of discontiguous physical memory,
+ Say Y to upport efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons.
See for more.
diff --git a/trunk/arch/alpha/kernel/alpha_ksyms.c b/trunk/arch/alpha/kernel/alpha_ksyms.c
index 8b02420f732e..dbe327d32b6f 100644
--- a/trunk/arch/alpha/kernel/alpha_ksyms.c
+++ b/trunk/arch/alpha/kernel/alpha_ksyms.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/alpha/kernel/alpha_ksyms.c
+ * linux/arch/alpha/kernel/ksyms.c
*
* Export the alpha-specific functions that are needed for loadable
* modules.
diff --git a/trunk/arch/alpha/kernel/head.S b/trunk/arch/alpha/kernel/head.S
index e27d23c74ba8..1e2a62a1f75f 100644
--- a/trunk/arch/alpha/kernel/head.S
+++ b/trunk/arch/alpha/kernel/head.S
@@ -1,5 +1,5 @@
/*
- * arch/alpha/kernel/head.S
+ * alpha/boot/head.S
*
* initial boot stuff.. At this point, the bootloader has already
* switched into OSF/1 PAL-code, and loaded us at the correct address
diff --git a/trunk/arch/alpha/kernel/machvec_impl.h b/trunk/arch/alpha/kernel/machvec_impl.h
index 0caa45aa128d..08b8302e64ca 100644
--- a/trunk/arch/alpha/kernel/machvec_impl.h
+++ b/trunk/arch/alpha/kernel/machvec_impl.h
@@ -1,5 +1,5 @@
/*
- * linux/arch/alpha/kernel/machvec_impl.h
+ * linux/arch/alpha/kernel/machvec.h
*
* Copyright (C) 1997, 1998 Richard Henderson
*
diff --git a/trunk/arch/alpha/lib/dbg_stackcheck.S b/trunk/arch/alpha/lib/dbg_stackcheck.S
index 78f6b924ad8f..3c1f3e6522e5 100644
--- a/trunk/arch/alpha/lib/dbg_stackcheck.S
+++ b/trunk/arch/alpha/lib/dbg_stackcheck.S
@@ -1,5 +1,5 @@
/*
- * arch/alpha/lib/dbg_stackcheck.S
+ * arch/alpha/lib/stackcheck.S
* Contributed by Richard Henderson (rth@tamu.edu)
*
* Verify that we have not overflowed the stack. Oops if we have.
diff --git a/trunk/arch/alpha/lib/dbg_stackkill.S b/trunk/arch/alpha/lib/dbg_stackkill.S
index c1e40a1a43d5..e9f6a9dcf2b7 100644
--- a/trunk/arch/alpha/lib/dbg_stackkill.S
+++ b/trunk/arch/alpha/lib/dbg_stackkill.S
@@ -1,5 +1,5 @@
/*
- * arch/alpha/lib/dbg_stackkill.S
+ * arch/alpha/lib/killstack.S
* Contributed by Richard Henderson (rth@cygnus.com)
*
* Clobber the balance of the kernel stack, hoping to catch
diff --git a/trunk/arch/alpha/lib/memset.S b/trunk/arch/alpha/lib/memset.S
index 311b8cfc6914..8ff6e7e1773e 100644
--- a/trunk/arch/alpha/lib/memset.S
+++ b/trunk/arch/alpha/lib/memset.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/alpha/lib/memset.S
+ * linux/arch/alpha/memset.S
*
* This is an efficient (and small) implementation of the C library "memset()"
* function for the alpha.
diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig
index adb05de40e24..f9362ee9955f 100644
--- a/trunk/arch/arm/Kconfig
+++ b/trunk/arch/arm/Kconfig
@@ -629,7 +629,7 @@ config ALIGNMENT_TRAP
depends on CPU_CP15_MMU
default y if !ARCH_EBSA110
help
- ARM processors cannot fetch/store information which is not
+ ARM processors can not fetch/store information which is not
naturally aligned on the bus, i.e., a 4 byte fetch must start at an
address divisible by 4. On 32-bit ARM processors, these non-aligned
fetch/store instructions will be emulated in software if you say
diff --git a/trunk/arch/arm/boot/compressed/head-clps7500.S b/trunk/arch/arm/boot/compressed/head-clps7500.S
index 4f3c78ac30a0..941c5f5cbacf 100644
--- a/trunk/arch/arm/boot/compressed/head-clps7500.S
+++ b/trunk/arch/arm/boot/compressed/head-clps7500.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/boot/compressed/head-clps7500.S
+ * linux/arch/arm/boot/compressed/head.S
*
* Copyright (C) 1999, 2000, 2001 Nexus Electronics Ltd
*/
diff --git a/trunk/arch/arm/common/sa1111.c b/trunk/arch/arm/common/sa1111.c
index 30046ad41ced..29818bd3248f 100644
--- a/trunk/arch/arm/common/sa1111.c
+++ b/trunk/arch/arm/common/sa1111.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/common/sa1111.c
+ * linux/arch/arm/mach-sa1100/sa1111.c
*
* SA1111 support
*
diff --git a/trunk/arch/arm/mach-imx/leds.c b/trunk/arch/arm/mach-imx/leds.c
index cf30803e019b..471c1db7c57f 100644
--- a/trunk/arch/arm/mach-imx/leds.c
+++ b/trunk/arch/arm/mach-imx/leds.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-imx/leds.c
+ * linux/arch/arm/mach-imx/leds.h
*
* Copyright (C) 2004 Sascha Hauer
*
diff --git a/trunk/arch/arm/mach-imx/leds.h b/trunk/arch/arm/mach-imx/leds.h
index 49dc1c1da338..83fa21e795a9 100644
--- a/trunk/arch/arm/mach-imx/leds.h
+++ b/trunk/arch/arm/mach-imx/leds.h
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-imx/leds.h
+ * include/asm-arm/arch-imx/leds.h
*
* Copyright (c) 2004 Sascha Hauer
*
diff --git a/trunk/arch/arm/mach-ixp4xx/coyote-pci.c b/trunk/arch/arm/mach-ixp4xx/coyote-pci.c
index 7bc94f3def1c..2cebb2878895 100644
--- a/trunk/arch/arm/mach-ixp4xx/coyote-pci.c
+++ b/trunk/arch/arm/mach-ixp4xx/coyote-pci.c
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-ixp4xx/coyote-pci.c
+ * arch/arch/mach-ixp4xx/coyote-pci.c
*
* PCI setup routines for ADI Engineering Coyote platform
*
diff --git a/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c
index 509a95a692a4..ed5270800217 100644
--- a/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c
+++ b/trunk/arch/arm/mach-ixp4xx/ixdpg425-pci.c
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-ixp4xx/ixdpg425-pci.c
+ * arch/arch/mach-ixp4xx/ixdpg425-pci.c
*
* PCI setup routines for Intel IXDPG425 Platform
*
diff --git a/trunk/arch/arm/mach-lh7a40x/arch-lpd7a40x.c b/trunk/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
index a21b12f06c6b..a6910114b24c 100644
--- a/trunk/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
+++ b/trunk/arch/arm/mach-lh7a40x/arch-lpd7a40x.c
@@ -164,7 +164,7 @@ static void lh7a40x_ack_cpld_irq (u32 irq)
/* CPLD doesn't have ack capability, but some devices may */
#if defined (CPLD_INTMASK_TOUCH)
- /* The touch control *must* mask the interrupt because the
+ /* The touch control *must* mask the the interrupt because the
* interrupt bit is read by the driver to determine if the pen
* is still down. */
if (irq == IRQ_TOUCH)
diff --git a/trunk/arch/arm/mach-omap1/serial.c b/trunk/arch/arm/mach-omap1/serial.c
index c4b790217a5b..976edfb882e2 100644
--- a/trunk/arch/arm/mach-omap1/serial.c
+++ b/trunk/arch/arm/mach-omap1/serial.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap1/serial.c
+ * linux/arch/arm/mach-omap1/id.c
*
* OMAP1 CPU identification code
*
diff --git a/trunk/arch/arm/mach-omap2/board-apollon.c b/trunk/arch/arm/mach-omap2/board-apollon.c
index c37b0e6d1248..2db6b732b084 100644
--- a/trunk/arch/arm/mach-omap2/board-apollon.c
+++ b/trunk/arch/arm/mach-omap2/board-apollon.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/board-apollon.c
+ * linux/arch/arm/mach-omap/omap2/board-apollon.c
*
* Copyright (C) 2005,2006 Samsung Electronics
* Author: Kyungmin Park
diff --git a/trunk/arch/arm/mach-omap2/board-generic.c b/trunk/arch/arm/mach-omap2/board-generic.c
index 90938151bcf1..eaecbf422d8c 100644
--- a/trunk/arch/arm/mach-omap2/board-generic.c
+++ b/trunk/arch/arm/mach-omap2/board-generic.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/board-generic.c
+ * linux/arch/arm/mach-omap/omap2/board-generic.c
*
* Copyright (C) 2005 Nokia Corporation
* Author: Paul Mundt
diff --git a/trunk/arch/arm/mach-omap2/board-h4.c b/trunk/arch/arm/mach-omap2/board-h4.c
index 26a95a642ad7..996aeda1285d 100644
--- a/trunk/arch/arm/mach-omap2/board-h4.c
+++ b/trunk/arch/arm/mach-omap2/board-h4.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/board-h4.c
+ * linux/arch/arm/mach-omap/omap2/board-h4.c
*
* Copyright (C) 2005 Nokia Corporation
* Author: Paul Mundt
diff --git a/trunk/arch/arm/mach-omap2/irq.c b/trunk/arch/arm/mach-omap2/irq.c
index 11870093d7a1..1ed2fff4691a 100644
--- a/trunk/arch/arm/mach-omap2/irq.c
+++ b/trunk/arch/arm/mach-omap2/irq.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/irq.c
+ * linux/arch/arm/mach-omap/omap2/irq.c
*
* Interrupt handler for OMAP2 boards.
*
diff --git a/trunk/arch/arm/mach-omap2/prcm-regs.h b/trunk/arch/arm/mach-omap2/prcm-regs.h
index 5e1c4b53ee9d..22ac7be4f782 100644
--- a/trunk/arch/arm/mach-omap2/prcm-regs.h
+++ b/trunk/arch/arm/mach-omap2/prcm-regs.h
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/prcm-regs.h
+ * linux/arch/arm/mach-omap2/prcm-reg.h
*
* OMAP24XX Power Reset and Clock Management (PRCM) registers
*
diff --git a/trunk/arch/arm/mach-omap2/serial.c b/trunk/arch/arm/mach-omap2/serial.c
index aaa5589e8169..0884bc7c23b7 100644
--- a/trunk/arch/arm/mach-omap2/serial.c
+++ b/trunk/arch/arm/mach-omap2/serial.c
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-omap2/serial.c
+ * arch/arm/mach-omap/omap2/serial.c
*
* OMAP2 serial support.
*
diff --git a/trunk/arch/arm/mach-omap2/sram-fn.S b/trunk/arch/arm/mach-omap2/sram-fn.S
index b27576690f8d..a5ef7f611da9 100644
--- a/trunk/arch/arm/mach-omap2/sram-fn.S
+++ b/trunk/arch/arm/mach-omap2/sram-fn.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-omap2/sram-fn.S
+ * linux/arch/arm/mach-omap2/sram.S
*
* Omap2 specific functions that need to be run in internal SRAM
*
diff --git a/trunk/arch/arm/mach-pxa/corgi_lcd.c b/trunk/arch/arm/mach-pxa/corgi_lcd.c
index a72476c24621..d7815491b752 100644
--- a/trunk/arch/arm/mach-pxa/corgi_lcd.c
+++ b/trunk/arch/arm/mach-pxa/corgi_lcd.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/mach-pxa/corgi_lcd.c
+ * linux/drivers/video/w100fb.c
*
* Corgi/Spitz LCD Specific Code
*
diff --git a/trunk/arch/arm/mach-pxa/leds.h b/trunk/arch/arm/mach-pxa/leds.h
index 7f0dfe01345a..4f829b8c39dd 100644
--- a/trunk/arch/arm/mach-pxa/leds.h
+++ b/trunk/arch/arm/mach-pxa/leds.h
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-pxa/leds.h
+ * include/asm-arm/arch-pxa/leds.h
*
* Copyright (c) 2001 Jeff Sutherland, Accelent Systems Inc.
*
diff --git a/trunk/arch/arm/mach-s3c2410/Kconfig b/trunk/arch/arm/mach-s3c2410/Kconfig
index 63965c78de8c..df37594c30f8 100644
--- a/trunk/arch/arm/mach-s3c2410/Kconfig
+++ b/trunk/arch/arm/mach-s3c2410/Kconfig
@@ -13,7 +13,7 @@ config MACH_ANUBIS
bool "Simtec Electronics ANUBIS"
select CPU_S3C2440
help
- Say Y here if you are using the Simtec Electronics ANUBIS
+ Say Y gere if you are using the Simtec Electronics ANUBIS
development system
config MACH_OSIRIS
diff --git a/trunk/arch/arm/mach-s3c2410/s3c2400-gpio.c b/trunk/arch/arm/mach-s3c2410/s3c2400-gpio.c
index 1576d01d5f82..f2a78175a70a 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c2400-gpio.c
+++ b/trunk/arch/arm/mach-s3c2410/s3c2400-gpio.c
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/s3c2400-gpio.c
+/* linux/arch/arm/mach-s3c2410/gpio.c
*
* Copyright (c) 2006 Lucas Correia Villa Real
*
diff --git a/trunk/arch/arm/mach-s3c2410/s3c2410-clock.c b/trunk/arch/arm/mach-s3c2410/s3c2410-clock.c
index 00abe199a08e..99718663318e 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c2410-clock.c
+++ b/trunk/arch/arm/mach-s3c2410/s3c2410-clock.c
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/s3c2410-clock.c
+/* linux/arch/arm/mach-s3c2410/clock.c
*
* Copyright (c) 2006 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-s3c2410/s3c2410-gpio.c b/trunk/arch/arm/mach-s3c2410/s3c2410-gpio.c
index a2098f692d83..471a71490010 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c2410-gpio.c
+++ b/trunk/arch/arm/mach-s3c2410/s3c2410-gpio.c
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/s3c2410-gpio.c
+/* linux/arch/arm/mach-s3c2410/gpio.c
*
* Copyright (c) 2004-2006 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-s3c2410/s3c2442.c b/trunk/arch/arm/mach-s3c2410/s3c2442.c
index 581667efd13c..debae2430557 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c2442.c
+++ b/trunk/arch/arm/mach-s3c2410/s3c2442.c
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/s3c2442.c
+/* linux/arch/arm/mach-s3c2410/s3c2440.c
*
* Copyright (c) 2006 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-s3c2410/s3c244x-irq.c b/trunk/arch/arm/mach-s3c2410/s3c244x-irq.c
index ec702f88b299..0d13546c3500 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c244x-irq.c
+++ b/trunk/arch/arm/mach-s3c2410/s3c244x-irq.c
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/s3c244x-irq.c
+/* linux/arch/arm/mach-s3c2410/s3c2440-irq.c
*
* Copyright (c) 2003,2004 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-s3c2410/s3c244x.h b/trunk/arch/arm/mach-s3c2410/s3c244x.h
index 1488c1eb37e6..3e7f5f75134d 100644
--- a/trunk/arch/arm/mach-s3c2410/s3c244x.h
+++ b/trunk/arch/arm/mach-s3c2410/s3c244x.h
@@ -1,4 +1,4 @@
-/* arch/arm/mach-s3c2410/s3c244x.h
+/* arch/arm/mach-s3c2410/s3c2440.h
*
* Copyright (c) 2004-2005 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-s3c2410/usb-simtec.h b/trunk/arch/arm/mach-s3c2410/usb-simtec.h
index d8aa6127dedb..92c0cc83aeec 100644
--- a/trunk/arch/arm/mach-s3c2410/usb-simtec.h
+++ b/trunk/arch/arm/mach-s3c2410/usb-simtec.h
@@ -1,4 +1,4 @@
-/* linux/arch/arm/mach-s3c2410/usb-simtec.h
+/* linux/arch/arm/mach-s3c2410/usb-simtec.c
*
* Copyright (c) 2004 Simtec Electronics
* Ben Dooks
diff --git a/trunk/arch/arm/mach-sa1100/dma.c b/trunk/arch/arm/mach-sa1100/dma.c
index 2ea2a657a034..3c6441d4bc59 100644
--- a/trunk/arch/arm/mach-sa1100/dma.c
+++ b/trunk/arch/arm/mach-sa1100/dma.c
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-sa1100/dma.c
+ * arch/arm/kernel/dma-sa1100.c
*
* Support functions for the SA11x0 internal DMA channels.
*
diff --git a/trunk/arch/arm/mach-shark/leds.c b/trunk/arch/arm/mach-shark/leds.c
index 5386a81f796a..7cd86d357a3c 100644
--- a/trunk/arch/arm/mach-shark/leds.c
+++ b/trunk/arch/arm/mach-shark/leds.c
@@ -1,5 +1,5 @@
/*
- * arch/arm/mach-shark/leds.c
+ * arch/arm/kernel/leds-shark.c
* by Alexander Schulz
*
* derived from:
diff --git a/trunk/arch/arm/plat-omap/sram-fn.S b/trunk/arch/arm/plat-omap/sram-fn.S
index 9e1813c77e05..85cffe2c6266 100644
--- a/trunk/arch/arm/plat-omap/sram-fn.S
+++ b/trunk/arch/arm/plat-omap/sram-fn.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/plat-omap/sram-fn.S
+ * linux/arch/arm/plat-omap/sram.S
*
* Functions that need to be run in internal SRAM
*
diff --git a/trunk/arch/cris/arch-v10/drivers/Kconfig b/trunk/arch/cris/arch-v10/drivers/Kconfig
index 734d5f3a5304..8b50e8402954 100644
--- a/trunk/arch/cris/arch-v10/drivers/Kconfig
+++ b/trunk/arch/cris/arch-v10/drivers/Kconfig
@@ -550,7 +550,7 @@ config ETRAX_IDE
select BLK_DEV_IDEDMA
help
Enable this to get support for ATA/IDE.
- You can't use parallel ports or SCSI ports
+ You can't use paralell ports or SCSI ports
at the same time.
@@ -744,7 +744,7 @@ config ETRAX_PA_CHANGEABLE_BITS
default "FF"
help
This is a bitmask with information of what bits in PA that a user
- can change the value on using ioctl's.
+ can change change the value on using ioctl's.
Bit set = changeable.
You probably want 00 here.
diff --git a/trunk/arch/cris/arch-v32/Kconfig b/trunk/arch/cris/arch-v32/Kconfig
index 4f79d8ed3e1c..22f0ddc04c50 100644
--- a/trunk/arch/cris/arch-v32/Kconfig
+++ b/trunk/arch/cris/arch-v32/Kconfig
@@ -162,7 +162,7 @@ config ETRAX_SDRAM_GRP1_CONFIG
depends on ETRAX_ARCH_V32
default "0"
help
- SDRAM configuration for group 1. The default value is 0
+ SDRAM configuration for group 1. The defult value is 0
because group 1 is not used in the default configuration,
described in the help for SDRAM_GRP0_CONFIG.
diff --git a/trunk/arch/h8300/kernel/ints.c b/trunk/arch/h8300/kernel/ints.c
index 1bfc77e391d5..1488b6ace18c 100644
--- a/trunk/arch/h8300/kernel/ints.c
+++ b/trunk/arch/h8300/kernel/ints.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/h8300/kernel/ints.c
+ * linux/arch/h8300/platform/h8300h/ints.c
*
* Yoshinori Sato
*
diff --git a/trunk/arch/i386/Kconfig b/trunk/arch/i386/Kconfig
index 8ff1c6fb5aa1..af219e51734f 100644
--- a/trunk/arch/i386/Kconfig
+++ b/trunk/arch/i386/Kconfig
@@ -682,7 +682,7 @@ config EFI
depends on ACPI
default n
---help---
- This enables the kernel to boot on EFI platforms using
+ This enables the the kernel to boot on EFI platforms using
system configuration information passed to it from the firmware.
This also enables the kernel to use any EFI runtime services that are
available (such as the EFI variable services).
diff --git a/trunk/arch/i386/kernel/acpi/boot.c b/trunk/arch/i386/kernel/acpi/boot.c
index 92f79cdd9a48..1aaea6ab8c46 100644
--- a/trunk/arch/i386/kernel/acpi/boot.c
+++ b/trunk/arch/i386/kernel/acpi/boot.c
@@ -62,6 +62,8 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return
#include
#endif /* CONFIG_X86_LOCAL_APIC */
+static inline int gsi_irq_sharing(int gsi) { return gsi; }
+
#endif /* X86 */
#define BAD_MADT_ENTRY(entry, end) ( \
@@ -466,7 +468,12 @@ void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
{
- *irq = gsi;
+#ifdef CONFIG_X86_IO_APIC
+ if (use_pci_vector() && !platform_legacy_irq(gsi))
+ *irq = IO_APIC_VECTOR(gsi);
+ else
+#endif
+ *irq = gsi_irq_sharing(gsi);
return 0;
}
diff --git a/trunk/arch/i386/kernel/cpu/common.c b/trunk/arch/i386/kernel/cpu/common.c
index d9f3e3c31f05..b2f24d57fddd 100644
--- a/trunk/arch/i386/kernel/cpu/common.c
+++ b/trunk/arch/i386/kernel/cpu/common.c
@@ -669,7 +669,8 @@ void __cpuinit cpu_init(void)
*/
atomic_inc(&init_mm.mm_count);
current->active_mm = &init_mm;
- BUG_ON(current->mm);
+ if (current->mm)
+ BUG();
enter_lazy_tlb(&init_mm, current);
load_esp0(t, thread);
diff --git a/trunk/arch/i386/kernel/efi.c b/trunk/arch/i386/kernel/efi.c
index 8b40648d0ef0..f9436989473c 100644
--- a/trunk/arch/i386/kernel/efi.c
+++ b/trunk/arch/i386/kernel/efi.c
@@ -498,7 +498,8 @@ void __init efi_enter_virtual_mode(void)
check_range_for_systab(md);
}
- BUG_ON(!efi.systab);
+ if (!efi.systab)
+ BUG();
status = phys_efi_set_virtual_address_map(
memmap.desc_size * memmap.nr_map,
diff --git a/trunk/arch/i386/kernel/i8259.c b/trunk/arch/i386/kernel/i8259.c
index d07ed31f11e3..ea5f4e7958d8 100644
--- a/trunk/arch/i386/kernel/i8259.c
+++ b/trunk/arch/i386/kernel/i8259.c
@@ -34,15 +34,35 @@
* moves to arch independent land
*/
-static int i8259A_auto_eoi;
DEFINE_SPINLOCK(i8259A_lock);
+
+static void end_8259A_irq (unsigned int irq)
+{
+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) &&
+ irq_desc[irq].action)
+ enable_8259A_irq(irq);
+}
+
+#define shutdown_8259A_irq disable_8259A_irq
+
+static int i8259A_auto_eoi;
+
static void mask_and_ack_8259A(unsigned int);
-static struct irq_chip i8259A_chip = {
- .name = "XT-PIC",
- .mask = disable_8259A_irq,
- .unmask = enable_8259A_irq,
- .mask_ack = mask_and_ack_8259A,
+unsigned int startup_8259A_irq(unsigned int irq)
+{
+ enable_8259A_irq(irq);
+ return 0; /* never anything pending */
+}
+
+static struct hw_interrupt_type i8259A_irq_type = {
+ .typename = "XT-PIC",
+ .startup = startup_8259A_irq,
+ .shutdown = shutdown_8259A_irq,
+ .enable = enable_8259A_irq,
+ .disable = disable_8259A_irq,
+ .ack = mask_and_ack_8259A,
+ .end = end_8259A_irq,
};
/*
@@ -113,7 +133,7 @@ void make_8259A_irq(unsigned int irq)
{
disable_irq_nosync(irq);
io_apic_irqs &= ~(1<
#include
#include
-#include
-#include
-#include
#include
#include
@@ -41,8 +38,6 @@
#include
#include
#include
-#include
-#include
#include
#include
@@ -91,6 +86,15 @@ static struct irq_pin_list {
int apic, pin, next;
} irq_2_pin[PIN_MAP_SIZE];
+int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
+#ifdef CONFIG_PCI_MSI
+#define vector_to_irq(vector) \
+ (platform_legacy_irq(vector) ? vector : vector_irq[vector])
+#else
+#define vector_to_irq(vector) (vector)
+#endif
+
+
union entry_union {
struct { u32 w1, w2; };
struct IO_APIC_route_entry entry;
@@ -276,7 +280,7 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t cpumask)
break;
entry = irq_2_pin + entry->next;
}
- set_native_irq_info(irq, cpumask);
+ set_irq_info(irq, cpumask);
spin_unlock_irqrestore(&ioapic_lock, flags);
}
@@ -1177,45 +1181,46 @@ static inline int IO_APIC_irq_trigger(int irq)
/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 };
-static int __assign_irq_vector(int irq)
+int assign_irq_vector(int irq)
{
static int current_vector = FIRST_DEVICE_VECTOR, offset = 0;
+ unsigned long flags;
int vector;
- BUG_ON((unsigned)irq >= NR_IRQ_VECTORS);
+ BUG_ON(irq != AUTO_ASSIGN && (unsigned)irq >= NR_IRQ_VECTORS);
- if (IO_APIC_VECTOR(irq) > 0)
- return IO_APIC_VECTOR(irq);
+ spin_lock_irqsave(&vector_lock, flags);
+ if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0) {
+ spin_unlock_irqrestore(&vector_lock, flags);
+ return IO_APIC_VECTOR(irq);
+ }
+next:
current_vector += 8;
if (current_vector == SYSCALL_VECTOR)
- current_vector += 8;
+ goto next;
if (current_vector >= FIRST_SYSTEM_VECTOR) {
offset++;
- if (!(offset % 8))
+ if (!(offset%8)) {
+ spin_unlock_irqrestore(&vector_lock, flags);
return -ENOSPC;
+ }
current_vector = FIRST_DEVICE_VECTOR + offset;
}
vector = current_vector;
- IO_APIC_VECTOR(irq) = vector;
-
- return vector;
-}
-
-static int assign_irq_vector(int irq)
-{
- unsigned long flags;
- int vector;
+ vector_irq[vector] = irq;
+ if (irq != AUTO_ASSIGN)
+ IO_APIC_VECTOR(irq) = vector;
- spin_lock_irqsave(&vector_lock, flags);
- vector = __assign_irq_vector(irq);
spin_unlock_irqrestore(&vector_lock, flags);
return vector;
}
-static struct irq_chip ioapic_chip;
+
+static struct hw_interrupt_type ioapic_level_type;
+static struct hw_interrupt_type ioapic_edge_type;
#define IOAPIC_AUTO -1
#define IOAPIC_EDGE 0
@@ -1223,14 +1228,16 @@ static struct irq_chip ioapic_chip;
static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
{
+ unsigned idx;
+
+ idx = use_pci_vector() && !platform_legacy_irq(irq) ? vector : irq;
+
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
trigger == IOAPIC_LEVEL)
- set_irq_chip_and_handler(irq, &ioapic_chip,
- handle_fasteoi_irq);
+ irq_desc[idx].chip = &ioapic_level_type;
else
- set_irq_chip_and_handler(irq, &ioapic_chip,
- handle_edge_irq);
- set_intr_gate(vector, interrupt[irq]);
+ irq_desc[idx].chip = &ioapic_edge_type;
+ set_intr_gate(vector, interrupt[idx]);
}
static void __init setup_IO_APIC_irqs(void)
@@ -1339,8 +1346,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
* The timer IRQ doesn't have to know that behind the
* scene we have a 8259A-master in AEOI mode ...
*/
- irq_desc[0].chip = &ioapic_chip;
- set_irq_handler(0, handle_edge_irq);
+ irq_desc[0].chip = &ioapic_edge_type;
/*
* Add it to the IO-APIC irq-routing table:
@@ -1475,12 +1481,17 @@ void __init print_IO_APIC(void)
);
}
}
+ if (use_pci_vector())
+ printk(KERN_INFO "Using vector-based indexing\n");
printk(KERN_DEBUG "IRQ to pin mappings:\n");
for (i = 0; i < NR_IRQS; i++) {
struct irq_pin_list *entry = irq_2_pin + i;
if (entry->pin < 0)
continue;
- printk(KERN_DEBUG "IRQ%d ", i);
+ if (use_pci_vector() && !platform_legacy_irq(i))
+ printk(KERN_DEBUG "IRQ%d ", IO_APIC_VECTOR(i));
+ else
+ printk(KERN_DEBUG "IRQ%d ", i);
for (;;) {
printk("-> %d:%d", entry->apic, entry->pin);
if (!entry->next)
@@ -1907,8 +1918,6 @@ static int __init timer_irq_works(void)
*/
/*
- * Startup quirk:
- *
* Starting up a edge-triggered IO-APIC interrupt is
* nasty - we need to make sure that we get the edge.
* If it is already asserted for some reason, we need
@@ -1916,10 +1925,8 @@ static int __init timer_irq_works(void)
*
* This is not complete - we should be able to fake
* an edge even if it isn't on the 8259A...
- *
- * (We do this for level-triggered IRQs too - it cannot hurt.)
*/
-static unsigned int startup_ioapic_irq(unsigned int irq)
+static unsigned int startup_edge_ioapic_irq(unsigned int irq)
{
int was_pending = 0;
unsigned long flags;
@@ -1936,18 +1943,47 @@ static unsigned int startup_ioapic_irq(unsigned int irq)
return was_pending;
}
-static void ack_ioapic_irq(unsigned int irq)
+/*
+ * Once we have recorded IRQ_PENDING already, we can mask the
+ * interrupt for real. This prevents IRQ storms from unhandled
+ * devices.
+ */
+static void ack_edge_ioapic_irq(unsigned int irq)
{
- move_native_irq(irq);
+ move_irq(irq);
+ if ((irq_desc[irq].status & (IRQ_PENDING | IRQ_DISABLED))
+ == (IRQ_PENDING | IRQ_DISABLED))
+ mask_IO_APIC_irq(irq);
ack_APIC_irq();
}
-static void ack_ioapic_quirk_irq(unsigned int irq)
+/*
+ * Level triggered interrupts can just be masked,
+ * and shutting down and starting up the interrupt
+ * is the same as enabling and disabling them -- except
+ * with a startup need to return a "was pending" value.
+ *
+ * Level triggered interrupts are special because we
+ * do not touch any IO-APIC register while handling
+ * them. We ack the APIC in the end-IRQ handler, not
+ * in the start-IRQ-handler. Protection against reentrance
+ * from the same interrupt is still provided, both by the
+ * generic IRQ layer and by the fact that an unacked local
+ * APIC does not accept IRQs.
+ */
+static unsigned int startup_level_ioapic_irq (unsigned int irq)
+{
+ unmask_IO_APIC_irq(irq);
+
+ return 0; /* don't check for pending */
+}
+
+static void end_level_ioapic_irq (unsigned int irq)
{
unsigned long v;
int i;
- move_native_irq(irq);
+ move_irq(irq);
/*
* It appears there is an erratum which affects at least version 0x11
* of I/O APIC (that's the 82093AA and cores integrated into various
@@ -1982,26 +2018,105 @@ static void ack_ioapic_quirk_irq(unsigned int irq)
}
}
-static int ioapic_retrigger_irq(unsigned int irq)
+#ifdef CONFIG_PCI_MSI
+static unsigned int startup_edge_ioapic_vector(unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ return startup_edge_ioapic_irq(irq);
+}
+
+static void ack_edge_ioapic_vector(unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ move_native_irq(vector);
+ ack_edge_ioapic_irq(irq);
+}
+
+static unsigned int startup_level_ioapic_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ return startup_level_ioapic_irq (irq);
+}
+
+static void end_level_ioapic_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ move_native_irq(vector);
+ end_level_ioapic_irq(irq);
+}
+
+static void mask_IO_APIC_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ mask_IO_APIC_irq(irq);
+}
+
+static void unmask_IO_APIC_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ unmask_IO_APIC_irq(irq);
+}
+
+#ifdef CONFIG_SMP
+static void set_ioapic_affinity_vector (unsigned int vector,
+ cpumask_t cpu_mask)
+{
+ int irq = vector_to_irq(vector);
+
+ set_native_irq_info(vector, cpu_mask);
+ set_ioapic_affinity_irq(irq, cpu_mask);
+}
+#endif
+#endif
+
+static int ioapic_retrigger(unsigned int irq)
{
send_IPI_self(IO_APIC_VECTOR(irq));
return 1;
}
-static struct irq_chip ioapic_chip __read_mostly = {
- .name = "IO-APIC",
- .startup = startup_ioapic_irq,
- .mask = mask_IO_APIC_irq,
- .unmask = unmask_IO_APIC_irq,
- .ack = ack_ioapic_irq,
- .eoi = ack_ioapic_quirk_irq,
+/*
+ * Level and edge triggered IO-APIC interrupts need different handling,
+ * so we use two separate IRQ descriptors. Edge triggered IRQs can be
+ * handled with the level-triggered descriptor, but that one has slightly
+ * more overhead. Level-triggered interrupts cannot be handled with the
+ * edge-triggered handler, without risking IRQ storms and other ugly
+ * races.
+ */
+static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
+ .typename = "IO-APIC-edge",
+ .startup = startup_edge_ioapic,
+ .shutdown = shutdown_edge_ioapic,
+ .enable = enable_edge_ioapic,
+ .disable = disable_edge_ioapic,
+ .ack = ack_edge_ioapic,
+ .end = end_edge_ioapic,
#ifdef CONFIG_SMP
- .set_affinity = set_ioapic_affinity_irq,
+ .set_affinity = set_ioapic_affinity,
#endif
- .retrigger = ioapic_retrigger_irq,
+ .retrigger = ioapic_retrigger,
};
+static struct hw_interrupt_type ioapic_level_type __read_mostly = {
+ .typename = "IO-APIC-level",
+ .startup = startup_level_ioapic,
+ .shutdown = shutdown_level_ioapic,
+ .enable = enable_level_ioapic,
+ .disable = disable_level_ioapic,
+ .ack = mask_and_ack_level_ioapic,
+ .end = end_level_ioapic,
+#ifdef CONFIG_SMP
+ .set_affinity = set_ioapic_affinity,
+#endif
+ .retrigger = ioapic_retrigger,
+};
static inline void init_IO_APIC_traps(void)
{
@@ -2020,6 +2135,11 @@ static inline void init_IO_APIC_traps(void)
*/
for (irq = 0; irq < NR_IRQS ; irq++) {
int tmp = irq;
+ if (use_pci_vector()) {
+ if (!platform_legacy_irq(tmp))
+ if ((tmp = vector_to_irq(tmp)) == -1)
+ continue;
+ }
if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) {
/*
* Hmm.. We don't have an entry for this,
@@ -2030,21 +2150,20 @@ static inline void init_IO_APIC_traps(void)
make_8259A_irq(irq);
else
/* Strange. Oh, well.. */
- irq_desc[irq].chip = &no_irq_chip;
+ irq_desc[irq].chip = &no_irq_type;
}
}
}
-/*
- * The local APIC irq-chip implementation:
- */
-
-static void ack_apic(unsigned int irq)
+static void enable_lapic_irq (unsigned int irq)
{
- ack_APIC_irq();
+ unsigned long v;
+
+ v = apic_read(APIC_LVT0);
+ apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED);
}
-static void mask_lapic_irq (unsigned int irq)
+static void disable_lapic_irq (unsigned int irq)
{
unsigned long v;
@@ -2052,19 +2171,21 @@ static void mask_lapic_irq (unsigned int irq)
apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED);
}
-static void unmask_lapic_irq (unsigned int irq)
+static void ack_lapic_irq (unsigned int irq)
{
- unsigned long v;
-
- v = apic_read(APIC_LVT0);
- apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED);
+ ack_APIC_irq();
}
-static struct irq_chip lapic_chip __read_mostly = {
- .name = "local-APIC-edge",
- .mask = mask_lapic_irq,
- .unmask = unmask_lapic_irq,
- .eoi = ack_apic,
+static void end_lapic_irq (unsigned int i) { /* nothing */ }
+
+static struct hw_interrupt_type lapic_irq_type __read_mostly = {
+ .typename = "local-APIC-edge",
+ .startup = NULL, /* startup_irq() not used for IRQ0 */
+ .shutdown = NULL, /* shutdown_irq() not used for IRQ0 */
+ .enable = enable_lapic_irq,
+ .disable = disable_lapic_irq,
+ .ack = ack_lapic_irq,
+ .end = end_lapic_irq
};
static void setup_nmi (void)
@@ -2235,7 +2356,7 @@ static inline void check_timer(void)
printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
disable_8259A_irq(0);
- set_irq_chip_and_handler(0, &lapic_chip, handle_fasteoi_irq);
+ irq_desc[0].chip = &lapic_irq_type;
apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */
enable_8259A_irq(0);
@@ -2410,238 +2531,6 @@ static int __init ioapic_init_sysfs(void)
device_initcall(ioapic_init_sysfs);
-/*
- * Dynamic irq allocate and deallocation
- */
-int create_irq(void)
-{
- /* Allocate an unused irq */
- int irq, new, vector;
- unsigned long flags;
-
- irq = -ENOSPC;
- spin_lock_irqsave(&vector_lock, flags);
- for (new = (NR_IRQS - 1); new >= 0; new--) {
- if (platform_legacy_irq(new))
- continue;
- if (irq_vector[new] != 0)
- continue;
- vector = __assign_irq_vector(new);
- if (likely(vector > 0))
- irq = new;
- break;
- }
- spin_unlock_irqrestore(&vector_lock, flags);
-
- if (irq >= 0) {
- set_intr_gate(vector, interrupt[irq]);
- dynamic_irq_init(irq);
- }
- return irq;
-}
-
-void destroy_irq(unsigned int irq)
-{
- unsigned long flags;
-
- dynamic_irq_cleanup(irq);
-
- spin_lock_irqsave(&vector_lock, flags);
- irq_vector[irq] = 0;
- spin_unlock_irqrestore(&vector_lock, flags);
-}
-
-/*
- * MSI mesage composition
- */
-#ifdef CONFIG_PCI_MSI
-static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg)
-{
- int vector;
- unsigned dest;
-
- vector = assign_irq_vector(irq);
- if (vector >= 0) {
- dest = cpu_mask_to_apicid(TARGET_CPUS);
-
- msg->address_hi = MSI_ADDR_BASE_HI;
- msg->address_lo =
- MSI_ADDR_BASE_LO |
- ((INT_DEST_MODE == 0) ?
- MSI_ADDR_DEST_MODE_PHYSICAL:
- MSI_ADDR_DEST_MODE_LOGICAL) |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- MSI_ADDR_REDIRECTION_CPU:
- MSI_ADDR_REDIRECTION_LOWPRI) |
- MSI_ADDR_DEST_ID(dest);
-
- msg->data =
- MSI_DATA_TRIGGER_EDGE |
- MSI_DATA_LEVEL_ASSERT |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- MSI_DATA_DELIVERY_FIXED:
- MSI_DATA_DELIVERY_LOWPRI) |
- MSI_DATA_VECTOR(vector);
- }
- return vector;
-}
-
-#ifdef CONFIG_SMP
-static void set_msi_irq_affinity(unsigned int irq, cpumask_t mask)
-{
- struct msi_msg msg;
- unsigned int dest;
- cpumask_t tmp;
- int vector;
-
- cpus_and(tmp, mask, cpu_online_map);
- if (cpus_empty(tmp))
- tmp = TARGET_CPUS;
-
- vector = assign_irq_vector(irq);
- if (vector < 0)
- return;
-
- dest = cpu_mask_to_apicid(mask);
-
- read_msi_msg(irq, &msg);
-
- msg.data &= ~MSI_DATA_VECTOR_MASK;
- msg.data |= MSI_DATA_VECTOR(vector);
- msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
- msg.address_lo |= MSI_ADDR_DEST_ID(dest);
-
- write_msi_msg(irq, &msg);
- set_native_irq_info(irq, mask);
-}
-#endif /* CONFIG_SMP */
-
-/*
- * IRQ Chip for MSI PCI/PCI-X/PCI-Express Devices,
- * which implement the MSI or MSI-X Capability Structure.
- */
-static struct irq_chip msi_chip = {
- .name = "PCI-MSI",
- .unmask = unmask_msi_irq,
- .mask = mask_msi_irq,
- .ack = ack_ioapic_irq,
-#ifdef CONFIG_SMP
- .set_affinity = set_msi_irq_affinity,
-#endif
- .retrigger = ioapic_retrigger_irq,
-};
-
-int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev)
-{
- struct msi_msg msg;
- int ret;
- ret = msi_compose_msg(dev, irq, &msg);
- if (ret < 0)
- return ret;
-
- write_msi_msg(irq, &msg);
-
- set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq);
-
- return 0;
-}
-
-void arch_teardown_msi_irq(unsigned int irq)
-{
- return;
-}
-
-#endif /* CONFIG_PCI_MSI */
-
-/*
- * Hypertransport interrupt support
- */
-#ifdef CONFIG_HT_IRQ
-
-#ifdef CONFIG_SMP
-
-static void target_ht_irq(unsigned int irq, unsigned int dest)
-{
- u32 low, high;
- low = read_ht_irq_low(irq);
- high = read_ht_irq_high(irq);
-
- low &= ~(HT_IRQ_LOW_DEST_ID_MASK);
- high &= ~(HT_IRQ_HIGH_DEST_ID_MASK);
-
- low |= HT_IRQ_LOW_DEST_ID(dest);
- high |= HT_IRQ_HIGH_DEST_ID(dest);
-
- write_ht_irq_low(irq, low);
- write_ht_irq_high(irq, high);
-}
-
-static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask)
-{
- unsigned int dest;
- cpumask_t tmp;
-
- cpus_and(tmp, mask, cpu_online_map);
- if (cpus_empty(tmp))
- tmp = TARGET_CPUS;
-
- cpus_and(mask, tmp, CPU_MASK_ALL);
-
- dest = cpu_mask_to_apicid(mask);
-
- target_ht_irq(irq, dest);
- set_native_irq_info(irq, mask);
-}
-#endif
-
-static struct hw_interrupt_type ht_irq_chip = {
- .name = "PCI-HT",
- .mask = mask_ht_irq,
- .unmask = unmask_ht_irq,
- .ack = ack_ioapic_irq,
-#ifdef CONFIG_SMP
- .set_affinity = set_ht_irq_affinity,
-#endif
- .retrigger = ioapic_retrigger_irq,
-};
-
-int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
-{
- int vector;
-
- vector = assign_irq_vector(irq);
- if (vector >= 0) {
- u32 low, high;
- unsigned dest;
- cpumask_t tmp;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
-
- high = HT_IRQ_HIGH_DEST_ID(dest);
-
- low = HT_IRQ_LOW_BASE |
- HT_IRQ_LOW_DEST_ID(dest) |
- HT_IRQ_LOW_VECTOR(vector) |
- ((INT_DEST_MODE == 0) ?
- HT_IRQ_LOW_DM_PHYSICAL :
- HT_IRQ_LOW_DM_LOGICAL) |
- HT_IRQ_LOW_RQEOI_EDGE |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- HT_IRQ_LOW_MT_FIXED :
- HT_IRQ_LOW_MT_ARBITRATED) |
- HT_IRQ_LOW_IRQ_MASKED;
-
- write_ht_irq_low(irq, low);
- write_ht_irq_high(irq, high);
-
- set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq);
- }
- return vector;
-}
-#endif /* CONFIG_HT_IRQ */
-
/* --------------------------------------------------------------------------
ACPI-based IOAPIC Configuration
-------------------------------------------------------------------------- */
@@ -2795,7 +2684,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
ioapic_write_entry(ioapic, pin, entry);
spin_lock_irqsave(&ioapic_lock, flags);
- set_native_irq_info(irq, TARGET_CPUS);
+ set_native_irq_info(use_pci_vector() ? entry.vector : irq, TARGET_CPUS);
spin_unlock_irqrestore(&ioapic_lock, flags);
return 0;
diff --git a/trunk/arch/i386/kernel/irq.c b/trunk/arch/i386/kernel/irq.c
index 3dd2e180151b..5fe547cd8f9f 100644
--- a/trunk/arch/i386/kernel/irq.c
+++ b/trunk/arch/i386/kernel/irq.c
@@ -55,7 +55,6 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
{
/* high bit used in ret_from_ code */
int irq = ~regs->orig_eax;
- struct irq_desc *desc = irq_desc + irq;
#ifdef CONFIG_4KSTACKS
union irq_ctx *curctx, *irqctx;
u32 *isp;
@@ -95,7 +94,7 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
* current stack (which is the irq stack already after all)
*/
if (curctx != irqctx) {
- int arg1, arg2, arg3, ebx;
+ int arg1, arg2, ebx;
/* build the stack frame on the IRQ stack */
isp = (u32*) ((char*)irqctx + sizeof(*irqctx));
@@ -111,17 +110,16 @@ fastcall unsigned int do_IRQ(struct pt_regs *regs)
(curctx->tinfo.preempt_count & SOFTIRQ_MASK);
asm volatile(
- " xchgl %%ebx,%%esp \n"
- " call *%%edi \n"
+ " xchgl %%ebx,%%esp \n"
+ " call __do_IRQ \n"
" movl %%ebx,%%esp \n"
- : "=a" (arg1), "=d" (arg2), "=c" (arg3), "=b" (ebx)
- : "0" (irq), "1" (desc), "2" (regs), "3" (isp),
- "D" (desc->handle_irq)
- : "memory", "cc"
+ : "=a" (arg1), "=d" (arg2), "=b" (ebx)
+ : "0" (irq), "1" (regs), "2" (isp)
+ : "memory", "cc", "ecx"
);
} else
#endif
- desc->handle_irq(irq, desc, regs);
+ __do_IRQ(irq, regs);
irq_exit();
@@ -255,8 +253,7 @@ int show_interrupts(struct seq_file *p, void *v)
for_each_online_cpu(j)
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
#endif
- seq_printf(p, " %8s", irq_desc[i].chip->name);
- seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq));
+ seq_printf(p, " %14s", irq_desc[i].chip->typename);
seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next)
diff --git a/trunk/arch/i386/kernel/ldt.c b/trunk/arch/i386/kernel/ldt.c
index 445211eb2d57..983f95707e11 100644
--- a/trunk/arch/i386/kernel/ldt.c
+++ b/trunk/arch/i386/kernel/ldt.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/i386/kernel/ldt.c
+ * linux/kernel/ldt.c
*
* Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
* Copyright (C) 1999 Ingo Molnar
diff --git a/trunk/arch/i386/kernel/smpboot.c b/trunk/arch/i386/kernel/smpboot.c
index 4bb8b77cd65b..9d93ecf6d999 100644
--- a/trunk/arch/i386/kernel/smpboot.c
+++ b/trunk/arch/i386/kernel/smpboot.c
@@ -648,7 +648,7 @@ static void map_cpu_to_logical_apicid(void)
{
int cpu = smp_processor_id();
int apicid = logical_smp_processor_id();
- int node = apicid_to_node(apicid);
+ int node = apicid_to_node(hard_smp_processor_id());
if (!node_online(node))
node = first_online_node;
diff --git a/trunk/arch/i386/mach-visws/visws_apic.c b/trunk/arch/i386/mach-visws/visws_apic.c
index 5929f884d79b..828522541a88 100644
--- a/trunk/arch/i386/mach-visws/visws_apic.c
+++ b/trunk/arch/i386/mach-visws/visws_apic.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/i386/mach-visws/visws_apic.c
+ * linux/arch/i386/mach_visws/visws_apic.c
*
* Copyright (C) 1999 Bent Hagemark, Ingo Molnar
*
diff --git a/trunk/arch/i386/mm/discontig.c b/trunk/arch/i386/mm/discontig.c
index 455597db84df..51e3739dd227 100644
--- a/trunk/arch/i386/mm/discontig.c
+++ b/trunk/arch/i386/mm/discontig.c
@@ -153,7 +153,8 @@ static void __init find_max_pfn_node(int nid)
*/
if (node_start_pfn[nid] > max_pfn)
node_start_pfn[nid] = max_pfn;
- BUG_ON(node_start_pfn[nid] > node_end_pfn[nid]);
+ if (node_start_pfn[nid] > node_end_pfn[nid])
+ BUG();
}
/*
diff --git a/trunk/arch/i386/mm/init.c b/trunk/arch/i386/mm/init.c
index 167416155ee4..90089c14c23d 100644
--- a/trunk/arch/i386/mm/init.c
+++ b/trunk/arch/i386/mm/init.c
@@ -569,7 +569,8 @@ void __init mem_init(void)
int bad_ppro;
#ifdef CONFIG_FLATMEM
- BUG_ON(!mem_map);
+ if (!mem_map)
+ BUG();
#endif
bad_ppro = ppro_with_ram_bug();
diff --git a/trunk/arch/i386/pci/fixup.c b/trunk/arch/i386/pci/fixup.c
index b60d7e8689ed..83c3645ccc43 100644
--- a/trunk/arch/i386/pci/fixup.c
+++ b/trunk/arch/i386/pci/fixup.c
@@ -393,7 +393,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_video);
* We pretend to bring them out of full D3 state, and restore the proper
* IRQ, PCI cache line size, and BARs, otherwise the device won't function
* properly. In some cases, the device will generate an interrupt on
- * the wrong IRQ line, causing any devices sharing the line it's
+ * the wrong IRQ line, causing any devices sharing the the line it's
* *supposed* to use to be disabled by the kernel's IRQ debug code.
*/
static u16 toshiba_line_size;
diff --git a/trunk/arch/i386/pci/irq.c b/trunk/arch/i386/pci/irq.c
index 47f02af74be3..4a8995c9c762 100644
--- a/trunk/arch/i386/pci/irq.c
+++ b/trunk/arch/i386/pci/irq.c
@@ -981,6 +981,10 @@ static void __init pcibios_fixup_irqs(void)
pci_name(bridge), 'A' + pin, irq);
}
if (irq >= 0) {
+ if (use_pci_vector() &&
+ !platform_legacy_irq(irq))
+ irq = IO_APIC_VECTOR(irq);
+
printk(KERN_INFO "PCI->APIC IRQ transform: %s[%c] -> IRQ %d\n",
pci_name(dev), 'A' + pin, irq);
dev->irq = irq;
@@ -1165,3 +1169,33 @@ static int pirq_enable_irq(struct pci_dev *dev)
}
return 0;
}
+
+int pci_vector_resources(int last, int nr_released)
+{
+ int count = nr_released;
+
+ int next = last;
+ int offset = (last % 8);
+
+ while (next < FIRST_SYSTEM_VECTOR) {
+ next += 8;
+#ifdef CONFIG_X86_64
+ if (next == IA32_SYSCALL_VECTOR)
+ continue;
+#else
+ if (next == SYSCALL_VECTOR)
+ continue;
+#endif
+ count++;
+ if (next >= FIRST_SYSTEM_VECTOR) {
+ if (offset%8) {
+ next = FIRST_DEVICE_VECTOR + offset;
+ offset++;
+ continue;
+ }
+ count--;
+ }
+ }
+
+ return count;
+}
diff --git a/trunk/arch/ia64/kernel/Makefile b/trunk/arch/ia64/kernel/Makefile
index cfa099b04cda..31497496eb4b 100644
--- a/trunk/arch/ia64/kernel/Makefile
+++ b/trunk/arch/ia64/kernel/Makefile
@@ -30,7 +30,6 @@ obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o
obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o
obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o
obj-$(CONFIG_AUDIT) += audit.o
-obj-$(CONFIG_PCI_MSI) += msi_ia64.o
mca_recovery-y += mca_drv.o mca_drv_asm.o
obj-$(CONFIG_IA64_ESI) += esi.o
diff --git a/trunk/arch/ia64/kernel/acpi-processor.c b/trunk/arch/ia64/kernel/acpi-processor.c
index 4d4993a47e55..e683630c8ce2 100644
--- a/trunk/arch/ia64/kernel/acpi-processor.c
+++ b/trunk/arch/ia64/kernel/acpi-processor.c
@@ -1,5 +1,5 @@
/*
- * arch/ia64/kernel/acpi-processor.c
+ * arch/ia64/kernel/cpufreq/processor.c
*
* Copyright (C) 2005 Intel Corporation
* Venkatesh Pallipadi
diff --git a/trunk/arch/ia64/kernel/entry.S b/trunk/arch/ia64/kernel/entry.S
index 3390b7c5a63f..e5b1be51b197 100644
--- a/trunk/arch/ia64/kernel/entry.S
+++ b/trunk/arch/ia64/kernel/entry.S
@@ -1,5 +1,5 @@
/*
- * arch/ia64/kernel/entry.S
+ * ia64/kernel/entry.S
*
* Kernel entry points.
*
diff --git a/trunk/arch/ia64/kernel/irq_ia64.c b/trunk/arch/ia64/kernel/irq_ia64.c
index ab2d19c3661f..a041367f043b 100644
--- a/trunk/arch/ia64/kernel/irq_ia64.c
+++ b/trunk/arch/ia64/kernel/irq_ia64.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/ia64/kernel/irq_ia64.c
+ * linux/arch/ia64/kernel/irq.c
*
* Copyright (C) 1998-2001 Hewlett-Packard Co
* Stephane Eranian
@@ -30,7 +30,6 @@
#include
#include
#include
-#include
#include
#include
@@ -106,25 +105,6 @@ reserve_irq_vector (int vector)
return test_and_set_bit(pos, ia64_vector_mask);
}
-/*
- * Dynamic irq allocate and deallocation for MSI
- */
-int create_irq(void)
-{
- int vector = assign_irq_vector(AUTO_ASSIGN);
-
- if (vector >= 0)
- dynamic_irq_init(vector);
-
- return vector;
-}
-
-void destroy_irq(unsigned int irq)
-{
- dynamic_irq_cleanup(irq);
- free_irq_vector(irq);
-}
-
#ifdef CONFIG_SMP
# define IS_RESCHEDULE(vec) (vec == IA64_IPI_RESCHEDULE)
#else
diff --git a/trunk/arch/ia64/kernel/msi_ia64.c b/trunk/arch/ia64/kernel/msi_ia64.c
deleted file mode 100644
index 822e59a1b822..000000000000
--- a/trunk/arch/ia64/kernel/msi_ia64.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * MSI hooks for standard x86 apic
- */
-
-#include
-#include
-#include
-#include
-
-/*
- * Shifts for APIC-based data
- */
-
-#define MSI_DATA_VECTOR_SHIFT 0
-#define MSI_DATA_VECTOR(v) (((u8)v) << MSI_DATA_VECTOR_SHIFT)
-
-#define MSI_DATA_DELIVERY_SHIFT 8
-#define MSI_DATA_DELIVERY_FIXED (0 << MSI_DATA_DELIVERY_SHIFT)
-#define MSI_DATA_DELIVERY_LOWPRI (1 << MSI_DATA_DELIVERY_SHIFT)
-
-#define MSI_DATA_LEVEL_SHIFT 14
-#define MSI_DATA_LEVEL_DEASSERT (0 << MSI_DATA_LEVEL_SHIFT)
-#define MSI_DATA_LEVEL_ASSERT (1 << MSI_DATA_LEVEL_SHIFT)
-
-#define MSI_DATA_TRIGGER_SHIFT 15
-#define MSI_DATA_TRIGGER_EDGE (0 << MSI_DATA_TRIGGER_SHIFT)
-#define MSI_DATA_TRIGGER_LEVEL (1 << MSI_DATA_TRIGGER_SHIFT)
-
-/*
- * Shift/mask fields for APIC-based bus address
- */
-
-#define MSI_TARGET_CPU_SHIFT 4
-#define MSI_ADDR_HEADER 0xfee00000
-
-#define MSI_ADDR_DESTID_MASK 0xfff0000f
-#define MSI_ADDR_DESTID_CPU(cpu) ((cpu) << MSI_TARGET_CPU_SHIFT)
-
-#define MSI_ADDR_DESTMODE_SHIFT 2
-#define MSI_ADDR_DESTMODE_PHYS (0 << MSI_ADDR_DESTMODE_SHIFT)
-#define MSI_ADDR_DESTMODE_LOGIC (1 << MSI_ADDR_DESTMODE_SHIFT)
-
-#define MSI_ADDR_REDIRECTION_SHIFT 3
-#define MSI_ADDR_REDIRECTION_CPU (0 << MSI_ADDR_REDIRECTION_SHIFT)
-#define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT)
-
-static struct irq_chip ia64_msi_chip;
-
-#ifdef CONFIG_SMP
-static void ia64_set_msi_irq_affinity(unsigned int irq, cpumask_t cpu_mask)
-{
- struct msi_msg msg;
- u32 addr;
-
- read_msi_msg(irq, &msg);
-
- addr = msg.address_lo;
- addr &= MSI_ADDR_DESTID_MASK;
- addr |= MSI_ADDR_DESTID_CPU(cpu_physical_id(first_cpu(cpu_mask)));
- msg.address_lo = addr;
-
- write_msi_msg(irq, &msg);
- set_native_irq_info(irq, cpu_mask);
-}
-#endif /* CONFIG_SMP */
-
-int ia64_setup_msi_irq(unsigned int irq, struct pci_dev *pdev)
-{
- struct msi_msg msg;
- unsigned long dest_phys_id;
- unsigned int vector;
-
- dest_phys_id = cpu_physical_id(first_cpu(cpu_online_map));
- vector = irq;
-
- msg.address_hi = 0;
- msg.address_lo =
- MSI_ADDR_HEADER |
- MSI_ADDR_DESTMODE_PHYS |
- MSI_ADDR_REDIRECTION_CPU |
- MSI_ADDR_DESTID_CPU(dest_phys_id);
-
- msg.data =
- MSI_DATA_TRIGGER_EDGE |
- MSI_DATA_LEVEL_ASSERT |
- MSI_DATA_DELIVERY_FIXED |
- MSI_DATA_VECTOR(vector);
-
- write_msi_msg(irq, &msg);
- set_irq_chip_and_handler(irq, &ia64_msi_chip, handle_edge_irq);
-
- return 0;
-}
-
-void ia64_teardown_msi_irq(unsigned int irq)
-{
- return; /* no-op */
-}
-
-static void ia64_ack_msi_irq(unsigned int irq)
-{
- move_native_irq(irq);
- ia64_eoi();
-}
-
-static int ia64_msi_retrigger_irq(unsigned int irq)
-{
- unsigned int vector = irq;
- ia64_resend_irq(vector);
-
- return 1;
-}
-
-/*
- * Generic ops used on most IA64 platforms.
- */
-static struct irq_chip ia64_msi_chip = {
- .name = "PCI-MSI",
- .mask = mask_msi_irq,
- .unmask = unmask_msi_irq,
- .ack = ia64_ack_msi_irq,
-#ifdef CONFIG_SMP
- .set_affinity = ia64_set_msi_irq_affinity,
-#endif
- .retrigger = ia64_msi_retrigger_irq,
-};
-
-
-int arch_setup_msi_irq(unsigned int irq, struct pci_dev *pdev)
-{
- if (platform_setup_msi_irq)
- return platform_setup_msi_irq(irq, pdev);
-
- return ia64_setup_msi_irq(irq, pdev);
-}
-
-void arch_teardown_msi_irq(unsigned int irq)
-{
- if (platform_teardown_msi_irq)
- return platform_teardown_msi_irq(irq);
-
- return ia64_teardown_msi_irq(irq);
-}
diff --git a/trunk/arch/ia64/pci/pci.c b/trunk/arch/ia64/pci/pci.c
index b30be7c48ba8..15c7c670da39 100644
--- a/trunk/arch/ia64/pci/pci.c
+++ b/trunk/arch/ia64/pci/pci.c
@@ -810,3 +810,12 @@ pcibios_prep_mwi (struct pci_dev *dev)
}
return rc;
}
+
+int pci_vector_resources(int last, int nr_released)
+{
+ int count = nr_released;
+
+ count += (IA64_LAST_DEVICE_VECTOR - last);
+
+ return count;
+}
diff --git a/trunk/arch/ia64/sn/kernel/Makefile b/trunk/arch/ia64/sn/kernel/Makefile
index 2d78f34dd763..ab9c48c88012 100644
--- a/trunk/arch/ia64/sn/kernel/Makefile
+++ b/trunk/arch/ia64/sn/kernel/Makefile
@@ -19,4 +19,3 @@ xp-y := xp_main.o xp_nofault.o
obj-$(CONFIG_IA64_SGI_SN_XP) += xpc.o
xpc-y := xpc_main.o xpc_channel.o xpc_partition.o
obj-$(CONFIG_IA64_SGI_SN_XP) += xpnet.o
-obj-$(CONFIG_PCI_MSI) += msi_sn.o
diff --git a/trunk/arch/ia64/sn/kernel/xpnet.c b/trunk/arch/ia64/sn/kernel/xpnet.c
index c8173db0d84f..007703c494a4 100644
--- a/trunk/arch/ia64/sn/kernel/xpnet.c
+++ b/trunk/arch/ia64/sn/kernel/xpnet.c
@@ -225,7 +225,7 @@ xpnet_receive(partid_t partid, int channel, struct xpnet_message *msg)
skb_put(skb, (msg->size - msg->leadin_ignore - msg->tailout_ignore));
/*
- * Move the data over from the other side.
+ * Move the data over from the the other side.
*/
if ((XPNET_VERSION_MINOR(msg->version) == 1) &&
(msg->embedded_bytes != 0)) {
diff --git a/trunk/arch/m68k/mm/motorola.c b/trunk/arch/m68k/mm/motorola.c
index afcccdc6ad45..49015e32d8fc 100644
--- a/trunk/arch/m68k/mm/motorola.c
+++ b/trunk/arch/m68k/mm/motorola.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/m68k/mm/motorola.c
+ * linux/arch/m68k/motorola.c
*
* Routines specific to the Motorola MMU, originally from:
* linux/arch/m68k/init.c
diff --git a/trunk/arch/m68k/sun3/sun3dvma.c b/trunk/arch/m68k/sun3/sun3dvma.c
index a2bc2da7f8f0..6c265222cbcd 100644
--- a/trunk/arch/m68k/sun3/sun3dvma.c
+++ b/trunk/arch/m68k/sun3/sun3dvma.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/m68k/sun3/sun3dvma.c
+ * linux/arch/m68k/mm/sun3dvma.c
*
* Copyright (C) 2000 Sam Creasey
*
diff --git a/trunk/arch/m68knommu/Kconfig b/trunk/arch/m68knommu/Kconfig
index 6d920d4bdc3d..e767f2ddae72 100644
--- a/trunk/arch/m68knommu/Kconfig
+++ b/trunk/arch/m68knommu/Kconfig
@@ -161,8 +161,8 @@ config CLOCK_FREQ
frequency, it may or may not be the same as the external clock
crystal fitted to your board. Some processors have an internal
PLL and can have their frequency programmed at run time, others
- use internal dividers. In general the kernel won't setup a PLL
- if it is fitted (there are some exceptions). This value will be
+ use internal dividers. In gernal the kernel won't setup a PLL
+ if it is fitted (there are some expections). This value will be
specific to the exact CPU that you are using.
config CLOCK_DIV
@@ -495,7 +495,7 @@ config VECTORBASE
hex "Address of the base of system vectors"
default "0"
help
- Define the address of the system vectors. Commonly this is
+ Define the address of the the system vectors. Commonly this is
put at the start of RAM, but it doesn't have to be. On ColdFire
platforms this address is programmed into the VBR register, thus
actually setting the address to use.
diff --git a/trunk/arch/m68knommu/platform/68328/head-pilot.S b/trunk/arch/m68knommu/platform/68328/head-pilot.S
index aecff532b343..9e07faa3e81d 100644
--- a/trunk/arch/m68knommu/platform/68328/head-pilot.S
+++ b/trunk/arch/m68knommu/platform/68328/head-pilot.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/m68knommu/platform/68328/head-pilot.S
+ * linux/arch/m68knommu/platform/68328/head-rom.S
* - A startup file for the MC68328
*
* Copyright (C) 1998 D. Jeff Dionne ,
diff --git a/trunk/arch/mips/dec/prom/call_o32.S b/trunk/arch/mips/dec/prom/call_o32.S
index e523454bda3a..0dd56db9b3d0 100644
--- a/trunk/arch/mips/dec/prom/call_o32.S
+++ b/trunk/arch/mips/dec/prom/call_o32.S
@@ -1,5 +1,5 @@
/*
- * arch/mips/dec/prom/call_o32.S
+ * arch/mips/dec/call_o32.S
*
* O32 interface for the 64 (or N32) ABI.
*
diff --git a/trunk/arch/mips/mm/tlbex.c b/trunk/arch/mips/mm/tlbex.c
index 6f8b25cfa6f0..375e0991505d 100644
--- a/trunk/arch/mips/mm/tlbex.c
+++ b/trunk/arch/mips/mm/tlbex.c
@@ -1211,7 +1211,7 @@ static void __init build_r4000_tlb_refill_handler(void)
* Overflow check: For the 64bit handler, we need at least one
* free instruction slot for the wrap-around branch. In worst
* case, if the intended insertion point is a delay slot, we
- * need three, with the second nop'ed and the third being
+ * need three, with the the second nop'ed and the third being
* unused.
*/
#ifdef CONFIG_32BIT
diff --git a/trunk/arch/mips/pci/fixup-vr4133.c b/trunk/arch/mips/pci/fixup-vr4133.c
index 597b89764ba1..8e01d0c1b76b 100644
--- a/trunk/arch/mips/pci/fixup-vr4133.c
+++ b/trunk/arch/mips/pci/fixup-vr4133.c
@@ -1,5 +1,5 @@
/*
- * arch/mips/pci/fixup-vr4133.c
+ * arch/mips/vr41xx/nec-cmbvr4133/pci_fixup.c
*
* The NEC CMB-VR4133 Board specific PCI fixups.
*
diff --git a/trunk/arch/mips/tx4938/common/irq.c b/trunk/arch/mips/tx4938/common/irq.c
index cbfb34221b59..dc30d66123b6 100644
--- a/trunk/arch/mips/tx4938/common/irq.c
+++ b/trunk/arch/mips/tx4938/common/irq.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/mips/tx4938/common/irq.c
+ * linux/arch/mps/tx4938/common/irq.c
*
* Common tx4938 irq handler
* Copyright (C) 2000-2001 Toshiba Corporation
diff --git a/trunk/arch/parisc/kernel/entry.S b/trunk/arch/parisc/kernel/entry.S
index 192357a3b9fe..95c1b8ec4289 100644
--- a/trunk/arch/parisc/kernel/entry.S
+++ b/trunk/arch/parisc/kernel/entry.S
@@ -941,8 +941,8 @@ syscall_exit_rfi:
* to "proper" values now (otherwise we'll wind up restoring
* whatever was last stored in the task structure, which might
* be inconsistent if an interrupt occured while on the gateway
- * page). Note that we may be "trashing" values the user put in
- * them, but we don't support the user changing them.
+ * page) Note that we may be "trashing" values the user put in
+ * them, but we don't support the the user changing them.
*/
STREG %r0,PT_SR2(%r16)
diff --git a/trunk/arch/powerpc/Kconfig b/trunk/arch/powerpc/Kconfig
index 96ef656e4669..032e6ab5d3c4 100644
--- a/trunk/arch/powerpc/Kconfig
+++ b/trunk/arch/powerpc/Kconfig
@@ -1002,7 +1002,7 @@ config CONSISTENT_START_BOOL
depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
help
This option allows you to set the base virtual address
- of the consistent memory pool. This pool of virtual
+ of the the consistent memory pool. This pool of virtual
memory is used to make consistent memory allocations.
config CONSISTENT_START
@@ -1013,7 +1013,7 @@ config CONSISTENT_SIZE_BOOL
bool "Set custom consistent memory pool size"
depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
help
- This option allows you to set the size of the
+ This option allows you to set the size of the the
consistent memory pool. This pool of virtual memory
is used to make consistent memory allocations.
diff --git a/trunk/arch/powerpc/boot/Makefile b/trunk/arch/powerpc/boot/Makefile
index 003520b56303..c383d56bbe18 100644
--- a/trunk/arch/powerpc/boot/Makefile
+++ b/trunk/arch/powerpc/boot/Makefile
@@ -113,7 +113,7 @@ endif
endif
quiet_cmd_wrap = WRAP $@
- cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux
+ cmd_wrap =$(wrapper) -c -o $@ -p $2 $(CROSSWRAP) vmlinux
quiet_cmd_wrap_initrd = WRAP $@
cmd_wrap_initrd =$(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
-i $(obj)/ramdisk.image.gz vmlinux
diff --git a/trunk/arch/powerpc/kernel/perfmon_fsl_booke.c b/trunk/arch/powerpc/kernel/perfmon_fsl_booke.c
index e0dcf2b41fbe..bdc3977a7b06 100644
--- a/trunk/arch/powerpc/kernel/perfmon_fsl_booke.c
+++ b/trunk/arch/powerpc/kernel/perfmon_fsl_booke.c
@@ -1,4 +1,4 @@
-/* arch/powerpc/kernel/perfmon_fsl_booke.c
+/* kernel/perfmon_fsl_booke.c
* Freescale Book-E Performance Monitor code
*
* Author: Andy Fleming
diff --git a/trunk/arch/powerpc/oprofile/op_model_7450.c b/trunk/arch/powerpc/oprofile/op_model_7450.c
index d8ee3aea83f8..e0491c3c71f1 100644
--- a/trunk/arch/powerpc/oprofile/op_model_7450.c
+++ b/trunk/arch/powerpc/oprofile/op_model_7450.c
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/oprofile/op_model_7450.c
+ * oprofile/op_model_7450.c
*
* Freescale 745x/744x oprofile support, based on fsl_booke support
* Copyright (C) 2004 Anton Blanchard , IBM
diff --git a/trunk/arch/powerpc/oprofile/op_model_fsl_booke.c b/trunk/arch/powerpc/oprofile/op_model_fsl_booke.c
index e29dede31423..93d63e62662f 100644
--- a/trunk/arch/powerpc/oprofile/op_model_fsl_booke.c
+++ b/trunk/arch/powerpc/oprofile/op_model_fsl_booke.c
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/oprofile/op_model_fsl_booke.c
+ * oprofile/op_model_e500.c
*
* Freescale Book-E oprofile support, based on ppc64 oprofile support
* Copyright (C) 2004 Anton Blanchard , IBM
diff --git a/trunk/arch/powerpc/platforms/83xx/mpc834x_sys.h b/trunk/arch/powerpc/platforms/83xx/mpc834x_sys.h
index 7d5bbef084e7..fedecb73f7ff 100644
--- a/trunk/arch/powerpc/platforms/83xx/mpc834x_sys.h
+++ b/trunk/arch/powerpc/platforms/83xx/mpc834x_sys.h
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/platforms/83xx/mpc834x_sys.h
+ * arch/powerppc/platforms/83xx/mpc834x_sys.h
*
* MPC834X SYS common board definitions
*
diff --git a/trunk/arch/powerpc/platforms/85xx/mpc8540_ads.h b/trunk/arch/powerpc/platforms/85xx/mpc8540_ads.h
index da82f4c0fdac..c0d56d2bb5a5 100644
--- a/trunk/arch/powerpc/platforms/85xx/mpc8540_ads.h
+++ b/trunk/arch/powerpc/platforms/85xx/mpc8540_ads.h
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/platforms/85xx/mpc8540_ads.h
+ * arch/ppc/platforms/85xx/mpc8540_ads.h
*
* MPC8540ADS board definitions
*
diff --git a/trunk/arch/powerpc/platforms/85xx/mpc85xx.h b/trunk/arch/powerpc/platforms/85xx/mpc85xx.h
index 83415db33378..b44db6268f3d 100644
--- a/trunk/arch/powerpc/platforms/85xx/mpc85xx.h
+++ b/trunk/arch/powerpc/platforms/85xx/mpc85xx.h
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/platforms/85xx/mpc85xx.h
+ * arch/ppc/platforms/85xx/mpc85xx.h
*
* MPC85xx soc definitions/function decls
*
diff --git a/trunk/arch/powerpc/platforms/85xx/mpc85xx_cds.h b/trunk/arch/powerpc/platforms/85xx/mpc85xx_cds.h
index b251c9feb3dc..671f54ff185a 100644
--- a/trunk/arch/powerpc/platforms/85xx/mpc85xx_cds.h
+++ b/trunk/arch/powerpc/platforms/85xx/mpc85xx_cds.h
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/platforms/85xx/mpc85xx_cds.h
+ * arch/ppc/platforms/85xx/mpc85xx_cds_common.h
*
* MPC85xx CDS board definitions
*
diff --git a/trunk/arch/powerpc/platforms/cell/interrupt.c b/trunk/arch/powerpc/platforms/cell/interrupt.c
index 6b57a47c5d37..6cc59e0b4582 100644
--- a/trunk/arch/powerpc/platforms/cell/interrupt.c
+++ b/trunk/arch/powerpc/platforms/cell/interrupt.c
@@ -21,6 +21,12 @@
* 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.
+ *
+ * TODO:
+ * - Fix various assumptions related to HW CPU numbers vs. linux CPU numbers
+ * vs node numbers in the setup code
+ * - Implement proper handling of maxcpus=1/2 (that is, routing of irqs from
+ * a non-active node to the active node)
*/
#include
@@ -44,24 +50,25 @@ struct iic {
u8 target_id;
u8 eoi_stack[16];
int eoi_ptr;
- struct irq_host *host;
+ struct device_node *node;
};
static DEFINE_PER_CPU(struct iic, iic);
#define IIC_NODE_COUNT 2
-static struct irq_host *iic_hosts[IIC_NODE_COUNT];
+static struct irq_host *iic_host;
/* Convert between "pending" bits and hw irq number */
static irq_hw_number_t iic_pending_to_hwnum(struct cbe_iic_pending_bits bits)
{
unsigned char unit = bits.source & 0xf;
+ unsigned char node = bits.source >> 4;
+ unsigned char class = bits.class & 3;
+ /* Decode IPIs */
if (bits.flags & CBE_IIC_IRQ_IPI)
- return IIC_IRQ_IPI0 | (bits.prio >> 4);
- else if (bits.class <= 3)
- return (bits.class << 4) | unit;
+ return IIC_IRQ_TYPE_IPI | (bits.prio >> 4);
else
- return IIC_IRQ_INVALID;
+ return (node << IIC_IRQ_NODE_SHIFT) | (class << 4) | unit;
}
static void iic_mask(unsigned int irq)
@@ -86,21 +93,70 @@ static struct irq_chip iic_chip = {
.eoi = iic_eoi,
};
+
+static void iic_ioexc_eoi(unsigned int irq)
+{
+}
+
+static void iic_ioexc_cascade(unsigned int irq, struct irq_desc *desc,
+ struct pt_regs *regs)
+{
+ struct cbe_iic_regs *node_iic = desc->handler_data;
+ unsigned int base = (irq & 0xffffff00) | IIC_IRQ_TYPE_IOEXC;
+ unsigned long bits, ack;
+ int cascade;
+
+ for (;;) {
+ bits = in_be64(&node_iic->iic_is);
+ if (bits == 0)
+ break;
+ /* pre-ack edge interrupts */
+ ack = bits & IIC_ISR_EDGE_MASK;
+ if (ack)
+ out_be64(&node_iic->iic_is, ack);
+ /* handle them */
+ for (cascade = 63; cascade >= 0; cascade--)
+ if (bits & (0x8000000000000000UL >> cascade)) {
+ unsigned int cirq =
+ irq_linear_revmap(iic_host,
+ base | cascade);
+ if (cirq != NO_IRQ)
+ generic_handle_irq(cirq, regs);
+ }
+ /* post-ack level interrupts */
+ ack = bits & ~IIC_ISR_EDGE_MASK;
+ if (ack)
+ out_be64(&node_iic->iic_is, ack);
+ }
+ desc->chip->eoi(irq);
+}
+
+
+static struct irq_chip iic_ioexc_chip = {
+ .typename = " CELL-IOEX",
+ .mask = iic_mask,
+ .unmask = iic_unmask,
+ .eoi = iic_ioexc_eoi,
+};
+
/* Get an IRQ number from the pending state register of the IIC */
static unsigned int iic_get_irq(struct pt_regs *regs)
{
struct cbe_iic_pending_bits pending;
struct iic *iic;
+ unsigned int virq;
iic = &__get_cpu_var(iic);
*(unsigned long *) &pending =
in_be64((unsigned long __iomem *) &iic->regs->pending_destr);
+ if (!(pending.flags & CBE_IIC_IRQ_VALID))
+ return NO_IRQ;
+ virq = irq_linear_revmap(iic_host, iic_pending_to_hwnum(pending));
+ if (virq == NO_IRQ)
+ return NO_IRQ;
iic->eoi_stack[++iic->eoi_ptr] = pending.prio;
BUG_ON(iic->eoi_ptr > 15);
- if (pending.flags & CBE_IIC_IRQ_VALID)
- return irq_linear_revmap(iic->host,
- iic_pending_to_hwnum(pending));
- return NO_IRQ;
+ return virq;
}
#ifdef CONFIG_SMP
@@ -108,12 +164,7 @@ static unsigned int iic_get_irq(struct pt_regs *regs)
/* Use the highest interrupt priorities for IPI */
static inline int iic_ipi_to_irq(int ipi)
{
- return IIC_IRQ_IPI0 + IIC_NUM_IPIS - 1 - ipi;
-}
-
-static inline int iic_irq_to_ipi(int irq)
-{
- return IIC_NUM_IPIS - 1 - (irq - IIC_IRQ_IPI0);
+ return IIC_IRQ_TYPE_IPI + 0xf - ipi;
}
void iic_setup_cpu(void)
@@ -123,7 +174,7 @@ void iic_setup_cpu(void)
void iic_cause_IPI(int cpu, int mesg)
{
- out_be64(&per_cpu(iic, cpu).regs->generate, (IIC_NUM_IPIS - 1 - mesg) << 4);
+ out_be64(&per_cpu(iic, cpu).regs->generate, (0xf - mesg) << 4);
}
u8 iic_get_target_id(int cpu)
@@ -134,9 +185,7 @@ EXPORT_SYMBOL_GPL(iic_get_target_id);
struct irq_host *iic_get_irq_host(int node)
{
- if (node < 0 || node >= IIC_NODE_COUNT)
- return NULL;
- return iic_hosts[node];
+ return iic_host;
}
EXPORT_SYMBOL_GPL(iic_get_irq_host);
@@ -149,34 +198,20 @@ static irqreturn_t iic_ipi_action(int irq, void *dev_id, struct pt_regs *regs)
return IRQ_HANDLED;
}
-
static void iic_request_ipi(int ipi, const char *name)
{
- int node, virq;
+ int virq;
- for (node = 0; node < IIC_NODE_COUNT; node++) {
- char *rname;
- if (iic_hosts[node] == NULL)
- continue;
- virq = irq_create_mapping(iic_hosts[node],
- iic_ipi_to_irq(ipi));
- if (virq == NO_IRQ) {
- printk(KERN_ERR
- "iic: failed to map IPI %s on node %d\n",
- name, node);
- continue;
- }
- rname = kzalloc(strlen(name) + 16, GFP_KERNEL);
- if (rname)
- sprintf(rname, "%s node %d", name, node);
- else
- rname = (char *)name;
- if (request_irq(virq, iic_ipi_action, IRQF_DISABLED,
- rname, (void *)(long)ipi))
- printk(KERN_ERR
- "iic: failed to request IPI %s on node %d\n",
- name, node);
+ virq = irq_create_mapping(iic_host, iic_ipi_to_irq(ipi));
+ if (virq == NO_IRQ) {
+ printk(KERN_ERR
+ "iic: failed to map IPI %s\n", name);
+ return;
}
+ if (request_irq(virq, iic_ipi_action, IRQF_DISABLED, name,
+ (void *)(long)ipi))
+ printk(KERN_ERR
+ "iic: failed to request IPI %s\n", name);
}
void iic_request_IPIs(void)
@@ -193,16 +228,24 @@ void iic_request_IPIs(void)
static int iic_host_match(struct irq_host *h, struct device_node *node)
{
- return h->host_data != NULL && node == h->host_data;
+ return device_is_compatible(node,
+ "IBM,CBEA-Internal-Interrupt-Controller");
}
static int iic_host_map(struct irq_host *h, unsigned int virq,
irq_hw_number_t hw)
{
- if (hw < IIC_IRQ_IPI0)
- set_irq_chip_and_handler(virq, &iic_chip, handle_fasteoi_irq);
- else
+ switch (hw & IIC_IRQ_TYPE_MASK) {
+ case IIC_IRQ_TYPE_IPI:
set_irq_chip_and_handler(virq, &iic_chip, handle_percpu_irq);
+ break;
+ case IIC_IRQ_TYPE_IOEXC:
+ set_irq_chip_and_handler(virq, &iic_ioexc_chip,
+ handle_fasteoi_irq);
+ break;
+ default:
+ set_irq_chip_and_handler(virq, &iic_chip, handle_fasteoi_irq);
+ }
return 0;
}
@@ -211,11 +254,39 @@ static int iic_host_xlate(struct irq_host *h, struct device_node *ct,
irq_hw_number_t *out_hwirq, unsigned int *out_flags)
{
- /* Currently, we don't translate anything. That needs to be fixed as
- * we get better defined device-trees. iic interrupts have to be
- * explicitely mapped by whoever needs them
- */
- return -ENODEV;
+ unsigned int node, ext, unit, class;
+ const u32 *val;
+
+ if (!device_is_compatible(ct,
+ "IBM,CBEA-Internal-Interrupt-Controller"))
+ return -ENODEV;
+ if (intsize != 1)
+ return -ENODEV;
+ val = get_property(ct, "#interrupt-cells", NULL);
+ if (val == NULL || *val != 1)
+ return -ENODEV;
+
+ node = intspec[0] >> 24;
+ ext = (intspec[0] >> 16) & 0xff;
+ class = (intspec[0] >> 8) & 0xff;
+ unit = intspec[0] & 0xff;
+
+ /* Check if node is in supported range */
+ if (node > 1)
+ return -EINVAL;
+
+ /* Build up interrupt number, special case for IO exceptions */
+ *out_hwirq = (node << IIC_IRQ_NODE_SHIFT);
+ if (unit == IIC_UNIT_IIC && class == 1)
+ *out_hwirq |= IIC_IRQ_TYPE_IOEXC | ext;
+ else
+ *out_hwirq |= IIC_IRQ_TYPE_NORMAL |
+ (class << IIC_IRQ_CLASS_SHIFT) | unit;
+
+ /* Dummy flags, ignored by iic code */
+ *out_flags = IRQ_TYPE_EDGE_RISING;
+
+ return 0;
}
static struct irq_host_ops iic_host_ops = {
@@ -225,7 +296,7 @@ static struct irq_host_ops iic_host_ops = {
};
static void __init init_one_iic(unsigned int hw_cpu, unsigned long addr,
- struct irq_host *host)
+ struct device_node *node)
{
/* XXX FIXME: should locate the linux CPU number from the HW cpu
* number properly. We are lucky for now
@@ -237,19 +308,19 @@ static void __init init_one_iic(unsigned int hw_cpu, unsigned long addr,
iic->target_id = ((hw_cpu & 2) << 3) | ((hw_cpu & 1) ? 0xf : 0xe);
iic->eoi_stack[0] = 0xff;
- iic->host = host;
+ iic->node = of_node_get(node);
out_be64(&iic->regs->prio, 0);
- printk(KERN_INFO "IIC for CPU %d at %lx mapped to %p, target id 0x%x\n",
- hw_cpu, addr, iic->regs, iic->target_id);
+ printk(KERN_INFO "IIC for CPU %d target id 0x%x : %s\n",
+ hw_cpu, iic->target_id, node->full_name);
}
static int __init setup_iic(void)
{
struct device_node *dn;
struct resource r0, r1;
- struct irq_host *host;
- int found = 0;
+ unsigned int node, cascade, found = 0;
+ struct cbe_iic_regs *node_iic;
const u32 *np;
for (dn = NULL;
@@ -269,19 +340,33 @@ static int __init setup_iic(void)
of_node_put(dn);
return -ENODEV;
}
- host = NULL;
- if (found < IIC_NODE_COUNT) {
- host = irq_alloc_host(IRQ_HOST_MAP_LINEAR,
- IIC_SOURCE_COUNT,
- &iic_host_ops,
- IIC_IRQ_INVALID);
- iic_hosts[found] = host;
- BUG_ON(iic_hosts[found] == NULL);
- iic_hosts[found]->host_data = of_node_get(dn);
- found++;
- }
- init_one_iic(np[0], r0.start, host);
- init_one_iic(np[1], r1.start, host);
+ found++;
+ init_one_iic(np[0], r0.start, dn);
+ init_one_iic(np[1], r1.start, dn);
+
+ /* Setup cascade for IO exceptions. XXX cleanup tricks to get
+ * node vs CPU etc...
+ * Note that we configure the IIC_IRR here with a hard coded
+ * priority of 1. We might want to improve that later.
+ */
+ node = np[0] >> 1;
+ node_iic = cbe_get_cpu_iic_regs(np[0]);
+ cascade = node << IIC_IRQ_NODE_SHIFT;
+ cascade |= 1 << IIC_IRQ_CLASS_SHIFT;
+ cascade |= IIC_UNIT_IIC;
+ cascade = irq_create_mapping(iic_host, cascade);
+ if (cascade == NO_IRQ)
+ continue;
+ set_irq_data(cascade, node_iic);
+ set_irq_chained_handler(cascade , iic_ioexc_cascade);
+ out_be64(&node_iic->iic_ir,
+ (1 << 12) /* priority */ |
+ (node << 4) /* dest node */ |
+ IIC_UNIT_THREAD_0 /* route them to thread 0 */);
+ /* Flush pending (make sure it triggers if there is
+ * anything pending
+ */
+ out_be64(&node_iic->iic_is, 0xfffffffffffffffful);
}
if (found)
@@ -292,6 +377,12 @@ static int __init setup_iic(void)
void __init iic_init_IRQ(void)
{
+ /* Setup an irq host data structure */
+ iic_host = irq_alloc_host(IRQ_HOST_MAP_LINEAR, IIC_SOURCE_COUNT,
+ &iic_host_ops, IIC_IRQ_INVALID);
+ BUG_ON(iic_host == NULL);
+ irq_set_default_host(iic_host);
+
/* Discover and initialize iics */
if (setup_iic() < 0)
panic("IIC: Failed to initialize !\n");
diff --git a/trunk/arch/powerpc/platforms/cell/interrupt.h b/trunk/arch/powerpc/platforms/cell/interrupt.h
index 5560a92ec3ab..9ba1d3c17b4b 100644
--- a/trunk/arch/powerpc/platforms/cell/interrupt.h
+++ b/trunk/arch/powerpc/platforms/cell/interrupt.h
@@ -2,48 +2,76 @@
#define ASM_CELL_PIC_H
#ifdef __KERNEL__
/*
- * Mapping of IIC pending bits into per-node
- * interrupt numbers.
+ * Mapping of IIC pending bits into per-node interrupt numbers.
*
- * IRQ FF CC SS PP FF CC SS PP Description
+ * Interrupt numbers are in the range 0...0x1ff where the top bit
+ * (0x100) represent the source node. Only 2 nodes are supported with
+ * the current code though it's trivial to extend that if necessary using
+ * higher level bits
*
- * 00-3f 80 02 +0 00 - 80 02 +0 3f South Bridge
- * 00-3f 80 02 +b 00 - 80 02 +b 3f South Bridge
- * 41-4a 80 00 +1 ** - 80 00 +a ** SPU Class 0
- * 51-5a 80 01 +1 ** - 80 01 +a ** SPU Class 1
- * 61-6a 80 02 +1 ** - 80 02 +a ** SPU Class 2
- * 70-7f C0 ** ** 00 - C0 ** ** 0f IPI
+ * The bottom 8 bits are split into 2 type bits and 6 data bits that
+ * depend on the type:
*
- * F flags
- * C class
- * S source
- * P Priority
- * + node number
- * * don't care
+ * 00 (0x00 | data) : normal interrupt. data is (class << 4) | source
+ * 01 (0x40 | data) : IO exception. data is the exception number as
+ * defined by bit numbers in IIC_SR
+ * 10 (0x80 | data) : IPI. data is the IPI number (obtained from the priority)
+ * and node is always 0 (IPIs are per-cpu, their source is
+ * not relevant)
+ * 11 (0xc0 | data) : reserved
*
- * A node consists of a Cell Broadband Engine and an optional
- * south bridge device providing a maximum of 64 IRQs.
- * The south bridge may be connected to either IOIF0
- * or IOIF1.
- * Each SPE is represented as three IRQ lines, one per
- * interrupt class.
- * 16 IRQ numbers are reserved for inter processor
- * interruptions, although these are only used in the
- * range of the first node.
+ * In addition, interrupt number 0x80000000 is defined as always invalid
+ * (that is the node field is expected to never extend to move than 23 bits)
*
- * This scheme needs 128 IRQ numbers per BIF node ID,
- * which means that with the total of 512 lines
- * available, we can have a maximum of four nodes.
*/
enum {
- IIC_IRQ_INVALID = 0xff,
- IIC_IRQ_MAX = 0x3f,
- IIC_IRQ_EXT_IOIF0 = 0x20,
- IIC_IRQ_EXT_IOIF1 = 0x2b,
- IIC_IRQ_IPI0 = 0x40,
- IIC_NUM_IPIS = 0x10, /* IRQs reserved for IPI */
- IIC_SOURCE_COUNT = 0x50,
+ IIC_IRQ_INVALID = 0x80000000u,
+ IIC_IRQ_NODE_MASK = 0x100,
+ IIC_IRQ_NODE_SHIFT = 8,
+ IIC_IRQ_MAX = 0x1ff,
+ IIC_IRQ_TYPE_MASK = 0xc0,
+ IIC_IRQ_TYPE_NORMAL = 0x00,
+ IIC_IRQ_TYPE_IOEXC = 0x40,
+ IIC_IRQ_TYPE_IPI = 0x80,
+ IIC_IRQ_CLASS_SHIFT = 4,
+ IIC_IRQ_CLASS_0 = 0x00,
+ IIC_IRQ_CLASS_1 = 0x10,
+ IIC_IRQ_CLASS_2 = 0x20,
+ IIC_SOURCE_COUNT = 0x200,
+
+ /* Here are defined the various source/dest units. Avoid using those
+ * definitions if you can, they are mostly here for reference
+ */
+ IIC_UNIT_SPU_0 = 0x4,
+ IIC_UNIT_SPU_1 = 0x7,
+ IIC_UNIT_SPU_2 = 0x3,
+ IIC_UNIT_SPU_3 = 0x8,
+ IIC_UNIT_SPU_4 = 0x2,
+ IIC_UNIT_SPU_5 = 0x9,
+ IIC_UNIT_SPU_6 = 0x1,
+ IIC_UNIT_SPU_7 = 0xa,
+ IIC_UNIT_IOC_0 = 0x0,
+ IIC_UNIT_IOC_1 = 0xb,
+ IIC_UNIT_THREAD_0 = 0xe, /* target only */
+ IIC_UNIT_THREAD_1 = 0xf, /* target only */
+ IIC_UNIT_IIC = 0xe, /* source only (IO exceptions) */
+
+ /* Base numbers for the external interrupts */
+ IIC_IRQ_EXT_IOIF0 =
+ IIC_IRQ_TYPE_NORMAL | IIC_IRQ_CLASS_2 | IIC_UNIT_IOC_0,
+ IIC_IRQ_EXT_IOIF1 =
+ IIC_IRQ_TYPE_NORMAL | IIC_IRQ_CLASS_2 | IIC_UNIT_IOC_1,
+
+ /* Base numbers for the IIC_ISR interrupts */
+ IIC_IRQ_IOEX_TMI = IIC_IRQ_TYPE_IOEXC | IIC_IRQ_CLASS_1 | 63,
+ IIC_IRQ_IOEX_PMI = IIC_IRQ_TYPE_IOEXC | IIC_IRQ_CLASS_1 | 62,
+ IIC_IRQ_IOEX_ATI = IIC_IRQ_TYPE_IOEXC | IIC_IRQ_CLASS_1 | 61,
+ IIC_IRQ_IOEX_MATBFI = IIC_IRQ_TYPE_IOEXC | IIC_IRQ_CLASS_1 | 60,
+ IIC_IRQ_IOEX_ELDI = IIC_IRQ_TYPE_IOEXC | IIC_IRQ_CLASS_1 | 59,
+
+ /* Which bits in IIC_ISR are edge sensitive */
+ IIC_ISR_EDGE_MASK = 0x4ul,
};
extern void iic_init_IRQ(void);
@@ -52,7 +80,6 @@ extern void iic_request_IPIs(void);
extern void iic_setup_cpu(void);
extern u8 iic_get_target_id(int cpu);
-extern struct irq_host *iic_get_irq_host(int node);
extern void spider_init_IRQ(void);
diff --git a/trunk/arch/powerpc/platforms/cell/spider-pic.c b/trunk/arch/powerpc/platforms/cell/spider-pic.c
index 742a03282b44..608b1ebc56b2 100644
--- a/trunk/arch/powerpc/platforms/cell/spider-pic.c
+++ b/trunk/arch/powerpc/platforms/cell/spider-pic.c
@@ -243,7 +243,6 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic)
const u32 *imap, *tmp;
int imaplen, intsize, unit;
struct device_node *iic;
- struct irq_host *iic_host;
#if 0 /* Enable that when we have a way to retreive the node as well */
/* First, we check wether we have a real "interrupts" in the device
@@ -289,11 +288,11 @@ static unsigned int __init spider_find_cascade_and_node(struct spider_pic *pic)
* the iic host from the iic OF node, but that way I'm still compatible
* with really really old old firmwares for which we don't have a node
*/
- iic_host = iic_get_irq_host(pic->node_id);
- if (iic_host == NULL)
- return NO_IRQ;
/* Manufacture an IIC interrupt number of class 2 */
- virq = irq_create_mapping(iic_host, 0x20 | unit);
+ virq = irq_create_mapping(NULL,
+ (pic->node_id << IIC_IRQ_NODE_SHIFT) |
+ (2 << IIC_IRQ_CLASS_SHIFT) |
+ unit);
if (virq == NO_IRQ)
printk(KERN_ERR "spider_pic: failed to map cascade !");
return virq;
diff --git a/trunk/arch/powerpc/platforms/cell/spu_base.c b/trunk/arch/powerpc/platforms/cell/spu_base.c
index 0f5c8ebc7fc3..f78680346e5f 100644
--- a/trunk/arch/powerpc/platforms/cell/spu_base.c
+++ b/trunk/arch/powerpc/platforms/cell/spu_base.c
@@ -568,24 +568,23 @@ static void spu_unmap(struct spu *spu)
/* This function shall be abstracted for HV platforms */
static int __init spu_map_interrupts(struct spu *spu, struct device_node *np)
{
- struct irq_host *host;
unsigned int isrc;
const u32 *tmp;
- host = iic_get_irq_host(spu->node);
- if (host == NULL)
- return -ENODEV;
-
- /* Get the interrupt source from the device-tree */
+ /* Get the interrupt source unit from the device-tree */
tmp = get_property(np, "isrc", NULL);
if (!tmp)
return -ENODEV;
- spu->isrc = isrc = tmp[0];
+ isrc = tmp[0];
+
+ /* Add the node number */
+ isrc |= spu->node << IIC_IRQ_NODE_SHIFT;
+ spu->isrc = isrc;
/* Now map interrupts of all 3 classes */
- spu->irqs[0] = irq_create_mapping(host, 0x00 | isrc);
- spu->irqs[1] = irq_create_mapping(host, 0x10 | isrc);
- spu->irqs[2] = irq_create_mapping(host, 0x20 | isrc);
+ spu->irqs[0] = irq_create_mapping(NULL, IIC_IRQ_CLASS_0 | isrc);
+ spu->irqs[1] = irq_create_mapping(NULL, IIC_IRQ_CLASS_1 | isrc);
+ spu->irqs[2] = irq_create_mapping(NULL, IIC_IRQ_CLASS_2 | isrc);
/* Right now, we only fail if class 2 failed */
return spu->irqs[2] == NO_IRQ ? -EINVAL : 0;
diff --git a/trunk/arch/powerpc/sysdev/ipic.c b/trunk/arch/powerpc/sysdev/ipic.c
index 6ebdae8e6f69..0251b7c68d0e 100644
--- a/trunk/arch/powerpc/sysdev/ipic.c
+++ b/trunk/arch/powerpc/sysdev/ipic.c
@@ -1,5 +1,5 @@
/*
- * arch/powerpc/sysdev/ipic.c
+ * include/asm-ppc/ipic.c
*
* IPIC routines implementations.
*
diff --git a/trunk/arch/powerpc/sysdev/mpic.c b/trunk/arch/powerpc/sysdev/mpic.c
index 3ee03a9a98fa..723972bb5bd9 100644
--- a/trunk/arch/powerpc/sysdev/mpic.c
+++ b/trunk/arch/powerpc/sysdev/mpic.c
@@ -341,7 +341,7 @@ static void __init mpic_scan_ht_pic(struct mpic *mpic, u8 __iomem *devbase,
u8 id = readb(devbase + pos + PCI_CAP_LIST_ID);
if (id == PCI_CAP_ID_HT) {
id = readb(devbase + pos + 3);
- if (id == HT_CAPTYPE_IRQ)
+ if (id == 0x80)
break;
}
}
diff --git a/trunk/arch/ppc/Kconfig b/trunk/arch/ppc/Kconfig
index 077711e63104..fdd9e7b66244 100644
--- a/trunk/arch/ppc/Kconfig
+++ b/trunk/arch/ppc/Kconfig
@@ -1345,7 +1345,7 @@ config CONSISTENT_START_BOOL
depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
help
This option allows you to set the base virtual address
- of the consistent memory pool. This pool of virtual
+ of the the consistent memory pool. This pool of virtual
memory is used to make consistent memory allocations.
config CONSISTENT_START
@@ -1356,7 +1356,7 @@ config CONSISTENT_SIZE_BOOL
bool "Set custom consistent memory pool size"
depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
help
- This option allows you to set the size of the
+ This option allows you to set the size of the the
consistent memory pool. This pool of virtual memory
is used to make consistent memory allocations.
diff --git a/trunk/arch/ppc/boot/include/mpsc_defs.h b/trunk/arch/ppc/boot/include/mpsc_defs.h
index 9f37e1355b17..2ce7bbba7277 100644
--- a/trunk/arch/ppc/boot/include/mpsc_defs.h
+++ b/trunk/arch/ppc/boot/include/mpsc_defs.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/boot/include/mpsc_defs.h
+ * drivers/serial/mpsc/mpsc_defs.h
*
* Register definitions for the Marvell Multi-Protocol Serial Controller (MPSC),
* Serial DMA Controller (SDMA), and Baud Rate Generator (BRG).
diff --git a/trunk/arch/ppc/platforms/4xx/xparameters/xparameters.h b/trunk/arch/ppc/platforms/4xx/xparameters/xparameters.h
index 66ec5f35f306..cd7d0e7d9863 100644
--- a/trunk/arch/ppc/platforms/4xx/xparameters/xparameters.h
+++ b/trunk/arch/ppc/platforms/4xx/xparameters/xparameters.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/4xx/xparameters/xparameters.h
+ * include/asm-ppc/xparameters.h
*
* This file includes the correct xparameters.h for the CONFIG'ed board plus
* fixups to translate board specific XPAR values to a common set of names
diff --git a/trunk/arch/ppc/platforms/85xx/Kconfig b/trunk/arch/ppc/platforms/85xx/Kconfig
index 6f2d0add7de6..7ddd331a7145 100644
--- a/trunk/arch/ppc/platforms/85xx/Kconfig
+++ b/trunk/arch/ppc/platforms/85xx/Kconfig
@@ -24,12 +24,12 @@ config MPC8540_ADS
config MPC8548_CDS
bool "Freescale MPC8548 CDS"
help
- This option enables support for the MPC8548 CDS evaluation board.
+ This option enablese support for the MPC8548 CDS evaluation board.
config MPC8555_CDS
bool "Freescale MPC8555 CDS"
help
- This option enables support for the MPC8555 CDS evaluation board.
+ This option enablese support for the MPC8555 CDS evaluation board.
config MPC8560_ADS
bool "Freescale MPC8560 ADS"
@@ -51,22 +51,22 @@ config STX_GP3
config TQM8540
bool "TQ Components TQM8540"
help
- This option enables support for the TQ Components TQM8540 board.
+ This option enablese support for the TQ Components TQM8540 board.
config TQM8541
bool "TQ Components TQM8541"
help
- This option enables support for the TQ Components TQM8541 board.
+ This option enablese support for the TQ Components TQM8541 board.
config TQM8555
bool "TQ Components TQM8555"
help
- This option enables support for the TQ Components TQM8555 board.
+ This option enablese support for the TQ Components TQM8555 board.
config TQM8560
bool "TQ Components TQM8560"
help
- This option enables support for the TQ Components TQM8560 board.
+ This option enablese support for the TQ Components TQM8560 board.
endchoice
@@ -94,7 +94,7 @@ config MPC8560
default y
config 85xx_PCI2
- bool "Support for 2nd PCI host controller"
+ bool "Supprt for 2nd PCI host controller"
depends on MPC8555_CDS
default y
diff --git a/trunk/arch/ppc/platforms/lopec.h b/trunk/arch/ppc/platforms/lopec.h
index d597b6878693..5490edb2d263 100644
--- a/trunk/arch/ppc/platforms/lopec.h
+++ b/trunk/arch/ppc/platforms/lopec.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/lopec.h
+ * include/asm-ppc/lopec_serial.h
*
* Definitions for Motorola LoPEC board.
*
diff --git a/trunk/arch/ppc/platforms/mpc8272ads_setup.c b/trunk/arch/ppc/platforms/mpc8272ads_setup.c
index d7b3a6afa78f..d5d36c372c8e 100644
--- a/trunk/arch/ppc/platforms/mpc8272ads_setup.c
+++ b/trunk/arch/ppc/platforms/mpc8272ads_setup.c
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/mpc8272ads_setup.c
+ * arch/ppc/platforms/82xx/pq2ads_pd.c
*
* MPC82xx Board-specific PlatformDevice descriptions
*
diff --git a/trunk/arch/ppc/platforms/mpc885ads_setup.c b/trunk/arch/ppc/platforms/mpc885ads_setup.c
index 02293141efb5..bf388ed04d46 100644
--- a/trunk/arch/ppc/platforms/mpc885ads_setup.c
+++ b/trunk/arch/ppc/platforms/mpc885ads_setup.c
@@ -1,4 +1,4 @@
-/*arch/ppc/platforms/mpc885ads_setup.c
+/*arch/ppc/platforms/mpc885ads-setup.c
*
* Platform setup for the Freescale mpc885ads board
*
diff --git a/trunk/arch/ppc/platforms/mvme5100.h b/trunk/arch/ppc/platforms/mvme5100.h
index 9e2a09e636ae..edd479439a4e 100644
--- a/trunk/arch/ppc/platforms/mvme5100.h
+++ b/trunk/arch/ppc/platforms/mvme5100.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/mvme5100.h
+ * include/asm-ppc/platforms/mvme5100.h
*
* Definitions for Motorola MVME5100.
*
diff --git a/trunk/arch/ppc/platforms/powerpmc250.h b/trunk/arch/ppc/platforms/powerpmc250.h
index d33ad8dc0439..41a6dc881911 100644
--- a/trunk/arch/ppc/platforms/powerpmc250.h
+++ b/trunk/arch/ppc/platforms/powerpmc250.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/powerpmc250.h
+ * include/asm-ppc/platforms/powerpmc250.h
*
* Definitions for Force PowerPMC-250 board support
*
diff --git a/trunk/arch/ppc/platforms/prpmc750.h b/trunk/arch/ppc/platforms/prpmc750.h
index 4c7adcc9ae33..015b4f52c3eb 100644
--- a/trunk/arch/ppc/platforms/prpmc750.h
+++ b/trunk/arch/ppc/platforms/prpmc750.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/prpmc750.h
+ * include/asm-ppc/platforms/prpmc750.h
*
* Definitions for Motorola PrPMC750 board support
*
diff --git a/trunk/arch/ppc/platforms/prpmc800.h b/trunk/arch/ppc/platforms/prpmc800.h
index 26f604e05cfa..e53ec9b42a35 100644
--- a/trunk/arch/ppc/platforms/prpmc800.h
+++ b/trunk/arch/ppc/platforms/prpmc800.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/prpmc800.h
+ * include/asm-ppc/platforms/prpmc800.h
*
* Definitions for Motorola PrPMC800 board support
*
diff --git a/trunk/arch/ppc/platforms/spruce.h b/trunk/arch/ppc/platforms/spruce.h
index f1f96f1de72a..a31ff7ee698f 100644
--- a/trunk/arch/ppc/platforms/spruce.h
+++ b/trunk/arch/ppc/platforms/spruce.h
@@ -1,5 +1,5 @@
/*
- * arch/ppc/platforms/spruce.h
+ * include/asm-ppc/platforms/spruce.h
*
* Definitions for IBM Spruce reference board support
*
diff --git a/trunk/arch/sh/boards/bigsur/io.c b/trunk/arch/sh/boards/bigsur/io.c
index 23071f97eec3..6835381da5fd 100644
--- a/trunk/arch/sh/boards/bigsur/io.c
+++ b/trunk/arch/sh/boards/bigsur/io.c
@@ -1,5 +1,5 @@
/*
- * arch/sh/boards/bigsur/io.c
+ * include/asm-sh/io_bigsur.c
*
* By Dustin McIntire (dustin@sensoria.com) (c)2001
* Derived from io_hd64465.h, which bore the message:
diff --git a/trunk/arch/sh/boards/bigsur/led.c b/trunk/arch/sh/boards/bigsur/led.c
index d221439aafcc..6b08c0e1c453 100644
--- a/trunk/arch/sh/boards/bigsur/led.c
+++ b/trunk/arch/sh/boards/bigsur/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/bigsur/led.c
+ * linux/arch/sh/kernel/led_bigsur.c
*
* By Dustin McIntire (dustin@sensoria.com) (c)2001
* Derived from led_se.c and led.c, which bore the message:
diff --git a/trunk/arch/sh/boards/ec3104/io.c b/trunk/arch/sh/boards/ec3104/io.c
index 2f86394b280b..a70928c44753 100644
--- a/trunk/arch/sh/boards/ec3104/io.c
+++ b/trunk/arch/sh/boards/ec3104/io.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/ec3104/io.c
+ * linux/arch/sh/kernel/io_ec3104.c
* EC3104 companion chip support
*
* Copyright (C) 2000 Philipp Rumpf
diff --git a/trunk/arch/sh/boards/hp6xx/setup.c b/trunk/arch/sh/boards/hp6xx/setup.c
index 2d3a5b4faf58..60ab17ad6054 100644
--- a/trunk/arch/sh/boards/hp6xx/setup.c
+++ b/trunk/arch/sh/boards/hp6xx/setup.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/hp6xx/setup.c
+ * linux/arch/sh/boards/hp6xx/hp680/setup.c
*
* Copyright (C) 2002 Andriy Skulysh
*
diff --git a/trunk/arch/sh/boards/mpc1211/led.c b/trunk/arch/sh/boards/mpc1211/led.c
index 8df1591823d6..1fe36927f691 100644
--- a/trunk/arch/sh/boards/mpc1211/led.c
+++ b/trunk/arch/sh/boards/mpc1211/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/mpc1211/led.c
+ * linux/arch/sh/kernel/led_mpc1211.c
*
* Copyright (C) 2001 Saito.K & Jeanne
*
diff --git a/trunk/arch/sh/boards/mpc1211/setup.c b/trunk/arch/sh/boards/mpc1211/setup.c
index 01c10fa5c058..8eb5d4303972 100644
--- a/trunk/arch/sh/boards/mpc1211/setup.c
+++ b/trunk/arch/sh/boards/mpc1211/setup.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/mpc1211/setup.c
+ * linux/arch/sh/board/mpc1211/setup.c
*
* Copyright (C) 2002 Saito.K & Jeanne, Fujii.Y
*
diff --git a/trunk/arch/sh/boards/renesas/hs7751rvoip/io.c b/trunk/arch/sh/boards/renesas/hs7751rvoip/io.c
index 51f3f6574210..9ea1136b219b 100644
--- a/trunk/arch/sh/boards/renesas/hs7751rvoip/io.c
+++ b/trunk/arch/sh/boards/renesas/hs7751rvoip/io.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/hs7751rvoip/io.c
+ * linux/arch/sh/kernel/io_hs7751rvoip.c
*
* Copyright (C) 2001 Ian da Silva, Jeremy Siegel
* Based largely on io_se.c.
diff --git a/trunk/arch/sh/boards/renesas/hs7751rvoip/pci.c b/trunk/arch/sh/boards/renesas/hs7751rvoip/pci.c
index 1c0ddee30d21..7e5786b58110 100644
--- a/trunk/arch/sh/boards/renesas/hs7751rvoip/pci.c
+++ b/trunk/arch/sh/boards/renesas/hs7751rvoip/pci.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/hs7751rvoip/pci.c
+ * linux/arch/sh/kernel/pci-hs7751rvoip.c
*
* Author: Ian DaSilva (idasilva@mvista.com)
*
diff --git a/trunk/arch/sh/boards/renesas/rts7751r2d/led.c b/trunk/arch/sh/boards/renesas/rts7751r2d/led.c
index a7ce66c1e4f0..e14a13d12d4a 100644
--- a/trunk/arch/sh/boards/renesas/rts7751r2d/led.c
+++ b/trunk/arch/sh/boards/renesas/rts7751r2d/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/rts7751r2d/led.c
+ * linux/arch/sh/kernel/led_rts7751r2d.c
*
* Copyright (C) Atom Create Engineering Co., Ltd.
*
diff --git a/trunk/arch/sh/boards/renesas/systemh/io.c b/trunk/arch/sh/boards/renesas/systemh/io.c
index 1b767e1a1428..cde6e5d192c4 100644
--- a/trunk/arch/sh/boards/renesas/systemh/io.c
+++ b/trunk/arch/sh/boards/renesas/systemh/io.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/systemh/io.c
+ * linux/arch/sh/boards/systemh/io.c
*
* Copyright (C) 2001 Ian da Silva, Jeremy Siegel
* Based largely on io_se.c.
diff --git a/trunk/arch/sh/boards/renesas/systemh/irq.c b/trunk/arch/sh/boards/renesas/systemh/irq.c
index 0ba2fe674c47..8d016dae2333 100644
--- a/trunk/arch/sh/boards/renesas/systemh/irq.c
+++ b/trunk/arch/sh/boards/renesas/systemh/irq.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/systemh/irq.c
+ * linux/arch/sh/boards/systemh/irq.c
*
* Copyright (C) 2000 Kazumoto Kojima
*
diff --git a/trunk/arch/sh/boards/renesas/systemh/setup.c b/trunk/arch/sh/boards/renesas/systemh/setup.c
index 936117659b74..bab7d3cdc87b 100644
--- a/trunk/arch/sh/boards/renesas/systemh/setup.c
+++ b/trunk/arch/sh/boards/renesas/systemh/setup.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/renesas/systemh/setup.c
+ * linux/arch/sh/boards/systemh/setup.c
*
* Copyright (C) 2000 Kazumoto Kojima
* Copyright (C) 2003 Paul Mundt
diff --git a/trunk/arch/sh/boards/se/770x/led.c b/trunk/arch/sh/boards/se/770x/led.c
index d93dd831b2ad..daf7b1ee786a 100644
--- a/trunk/arch/sh/boards/se/770x/led.c
+++ b/trunk/arch/sh/boards/se/770x/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/se/770x/led.c
+ * linux/arch/sh/kernel/led_se.c
*
* Copyright (C) 2000 Stuart Menefy
*
diff --git a/trunk/arch/sh/boards/se/7751/led.c b/trunk/arch/sh/boards/se/7751/led.c
index de4194d97c88..ff0355dea81b 100644
--- a/trunk/arch/sh/boards/se/7751/led.c
+++ b/trunk/arch/sh/boards/se/7751/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/se/7751/led.c
+ * linux/arch/sh/kernel/led_se.c
*
* Copyright (C) 2000 Stuart Menefy
*
diff --git a/trunk/arch/sh/boards/se/7751/pci.c b/trunk/arch/sh/boards/se/7751/pci.c
index 203b2923fe7f..3ee03014dea3 100644
--- a/trunk/arch/sh/boards/se/7751/pci.c
+++ b/trunk/arch/sh/boards/se/7751/pci.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/se/7751/pci.c
+ * linux/arch/sh/kernel/pci-7751se.c
*
* Author: Ian DaSilva (idasilva@mvista.com)
*
diff --git a/trunk/arch/sh/boards/superh/microdev/io.c b/trunk/arch/sh/boards/superh/microdev/io.c
index 83419bf4c834..4836b9422e27 100644
--- a/trunk/arch/sh/boards/superh/microdev/io.c
+++ b/trunk/arch/sh/boards/superh/microdev/io.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/superh/microdev/io.c
+ * linux/arch/sh/kernel/io_microdev.c
*
* Copyright (C) 2003 Sean McGoogan (Sean.McGoogan@superh.com)
* Copyright (C) 2003, 2004 SuperH, Inc.
diff --git a/trunk/arch/sh/boards/superh/microdev/led.c b/trunk/arch/sh/boards/superh/microdev/led.c
index 36e54b47a752..a38f5351bd16 100644
--- a/trunk/arch/sh/boards/superh/microdev/led.c
+++ b/trunk/arch/sh/boards/superh/microdev/led.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/boards/superh/microdev/led.c
+ * linux/arch/sh/kernel/led_microdev.c
*
* Copyright (C) 2002 Stuart Menefy
* Copyright (C) 2003 Richard Curnow (Richard.Curnow@superh.com)
diff --git a/trunk/arch/sh/drivers/dma/dma-pvr2.c b/trunk/arch/sh/drivers/dma/dma-pvr2.c
index c1b6bc23c107..3b0b0f60bb3c 100644
--- a/trunk/arch/sh/drivers/dma/dma-pvr2.c
+++ b/trunk/arch/sh/drivers/dma/dma-pvr2.c
@@ -1,5 +1,5 @@
/*
- * arch/sh/drivers/dma/dma-pvr2.c
+ * arch/sh/boards/dreamcast/dma-pvr2.c
*
* NEC PowerVR 2 (Dreamcast) DMA support
*
diff --git a/trunk/arch/sh/drivers/pci/dma-dreamcast.c b/trunk/arch/sh/drivers/pci/dma-dreamcast.c
index 230d6ec0d239..6acf02b9375b 100644
--- a/trunk/arch/sh/drivers/pci/dma-dreamcast.c
+++ b/trunk/arch/sh/drivers/pci/dma-dreamcast.c
@@ -1,5 +1,5 @@
/*
- * arch/sh/drivers/pci/dma-dreamcast.c
+ * arch/sh/pci/dma-dreamcast.c
*
* PCI DMA support for the Sega Dreamcast
*
diff --git a/trunk/arch/sh/drivers/pci/fixups-dreamcast.c b/trunk/arch/sh/drivers/pci/fixups-dreamcast.c
index 6f53f8200dc3..c0af5f7ef414 100644
--- a/trunk/arch/sh/drivers/pci/fixups-dreamcast.c
+++ b/trunk/arch/sh/drivers/pci/fixups-dreamcast.c
@@ -1,5 +1,5 @@
/*
- * arch/sh/drivers/pci/fixups-dreamcast.c
+ * arch/sh/pci/fixups-dreamcast.c
*
* PCI fixups for the Sega Dreamcast
*
diff --git a/trunk/arch/sh/drivers/pci/ops-bigsur.c b/trunk/arch/sh/drivers/pci/ops-bigsur.c
index eb31be751524..5da501bd77b5 100644
--- a/trunk/arch/sh/drivers/pci/ops-bigsur.c
+++ b/trunk/arch/sh/drivers/pci/ops-bigsur.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/drivers/pci/ops-bigsur.c
+ * linux/arch/sh/kernel/pci-bigsur.c
*
* By Dustin McIntire (dustin@sensoria.com) (c)2001
*
diff --git a/trunk/arch/sh/drivers/pci/ops-dreamcast.c b/trunk/arch/sh/drivers/pci/ops-dreamcast.c
index 381306cf5425..23d52791917e 100644
--- a/trunk/arch/sh/drivers/pci/ops-dreamcast.c
+++ b/trunk/arch/sh/drivers/pci/ops-dreamcast.c
@@ -1,5 +1,5 @@
/*
- * arch/sh/drivers/pci/ops-dreamcast.c
+ * arch/sh/pci/ops-dreamcast.c
*
* PCI operations for the Sega Dreamcast
*
diff --git a/trunk/arch/sh/drivers/pci/ops-rts7751r2d.c b/trunk/arch/sh/drivers/pci/ops-rts7751r2d.c
index b68824c8b81e..88f44e245424 100644
--- a/trunk/arch/sh/drivers/pci/ops-rts7751r2d.c
+++ b/trunk/arch/sh/drivers/pci/ops-rts7751r2d.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sh/drivers/pci/ops-rts7751r2d.c
+ * linux/arch/sh/kernel/pci-rts7751r2d.c
*
* Author: Ian DaSilva (idasilva@mvista.com)
*
diff --git a/trunk/arch/sh/kernel/cpu/ubc.S b/trunk/arch/sh/kernel/cpu/ubc.S
index 81923079fa12..0c569b20e1c1 100644
--- a/trunk/arch/sh/kernel/cpu/ubc.S
+++ b/trunk/arch/sh/kernel/cpu/ubc.S
@@ -1,5 +1,5 @@
/*
- * arch/sh/kernel/cpu/ubc.S
+ * arch/sh/kernel/ubc.S
*
* Set of management routines for the User Break Controller (UBC)
*
diff --git a/trunk/arch/sh64/boot/compressed/misc.c b/trunk/arch/sh64/boot/compressed/misc.c
index aea00c53ce29..ee7a1b6acb83 100644
--- a/trunk/arch/sh64/boot/compressed/misc.c
+++ b/trunk/arch/sh64/boot/compressed/misc.c
@@ -1,5 +1,5 @@
/*
- * arch/sh64/boot/compressed/misc.c
+ * arch/shmedia/boot/compressed/misc.c
*
* This is a collection of several routines from gzip-1.0.3
* adapted for Linux.
diff --git a/trunk/arch/sh64/kernel/alphanum.c b/trunk/arch/sh64/kernel/alphanum.c
index 91707c1acd70..9079d1e94f2b 100644
--- a/trunk/arch/sh64/kernel/alphanum.c
+++ b/trunk/arch/sh64/kernel/alphanum.c
@@ -1,5 +1,5 @@
/*
- * arch/sh64/kernel/alphanum.c
+ * arch/sh64/kernel/alpanum.c
*
* Copyright (C) 2002 Stuart Menefy
*
diff --git a/trunk/arch/sh64/lib/c-checksum.c b/trunk/arch/sh64/lib/c-checksum.c
index 0e8a742abf8c..53c1cabb3428 100644
--- a/trunk/arch/sh64/lib/c-checksum.c
+++ b/trunk/arch/sh64/lib/c-checksum.c
@@ -1,5 +1,5 @@
/*
- * arch/sh64/lib/c-checksum.c
+ * arch/sh/lib/csum_parial.c
*
* This file contains network checksum routines that are better done
* in an architecture-specific manner due to speed..
diff --git a/trunk/arch/sh64/mach-cayman/led.c b/trunk/arch/sh64/mach-cayman/led.c
index b4e122fd9502..8b3cc4c78870 100644
--- a/trunk/arch/sh64/mach-cayman/led.c
+++ b/trunk/arch/sh64/mach-cayman/led.c
@@ -1,5 +1,5 @@
/*
- * arch/sh64/mach-cayman/led.c
+ * arch/sh64/kernel/led_cayman.c
*
* Copyright (C) 2002 Stuart Menefy
*
diff --git a/trunk/arch/sh64/oprofile/op_model_null.c b/trunk/arch/sh64/oprofile/op_model_null.c
index a750ea1fee98..a845b088edb4 100644
--- a/trunk/arch/sh64/oprofile/op_model_null.c
+++ b/trunk/arch/sh64/oprofile/op_model_null.c
@@ -1,5 +1,5 @@
/*
- * arch/sh64/oprofile/op_model_null.c
+ * arch/sh/oprofile/op_model_null.c
*
* Copyright (C) 2003 Paul Mundt
*
diff --git a/trunk/arch/sparc/kernel/sys_solaris.c b/trunk/arch/sparc/kernel/sys_solaris.c
index 01b07bb440f0..c09afd96dd9c 100644
--- a/trunk/arch/sparc/kernel/sys_solaris.c
+++ b/trunk/arch/sparc/kernel/sys_solaris.c
@@ -1,5 +1,5 @@
/*
- * linux/arch/sparc/kernel/sys_solaris.c
+ * linux/arch/sparc/sys_solaris.c
*
* Copyright (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)
*/
diff --git a/trunk/arch/um/Kconfig b/trunk/arch/um/Kconfig
index d75307589d74..76e85bbaea55 100644
--- a/trunk/arch/um/Kconfig
+++ b/trunk/arch/um/Kconfig
@@ -257,7 +257,7 @@ config UML_REAL_TIME_CLOCK
UML and spend long times with UML stopped at a breakpoint. In this
case, when UML is restarted, it will call the timer enough times to make
up for the time spent at the breakpoint. This could result in a
- noticeable lag. If this is a problem, then disable this option.
+ noticable lag. If this is a problem, then disable this option.
endmenu
diff --git a/trunk/arch/um/Makefile b/trunk/arch/um/Makefile
index c8016a98483b..f6ad832faf13 100644
--- a/trunk/arch/um/Makefile
+++ b/trunk/arch/um/Makefile
@@ -102,7 +102,7 @@ linux: vmlinux
define archhelp
echo '* linux - Binary kernel image (./linux) - for backward'
echo ' compatibility only, this creates a hard link to the'
- echo ' real kernel binary, the "vmlinux" binary you'
+ echo ' real kernel binary, the the "vmlinux" binary you'
echo ' find in the kernel root.'
endef
diff --git a/trunk/arch/um/drivers/line.c b/trunk/arch/um/drivers/line.c
index cfd9f01fd464..24747a413785 100644
--- a/trunk/arch/um/drivers/line.c
+++ b/trunk/arch/um/drivers/line.c
@@ -497,7 +497,7 @@ void close_lines(struct line *lines, int nlines)
}
/* Common setup code for both startup command line and mconsole initialization.
- * @lines contains the array (of size @num) to modify;
+ * @lines contains the the array (of size @num) to modify;
* @init is the setup string;
*/
diff --git a/trunk/arch/um/include/sysdep-x86_64/ptrace_user.h b/trunk/arch/um/include/sysdep-x86_64/ptrace_user.h
index 4cd61a852fab..128faf027364 100644
--- a/trunk/arch/um/include/sysdep-x86_64/ptrace_user.h
+++ b/trunk/arch/um/include/sysdep-x86_64/ptrace_user.h
@@ -55,7 +55,7 @@
#define PTRACE_OLDSETOPTIONS 21
#endif
-/* These are before the system call, so the system call number is RAX
+/* These are before the system call, so the the system call number is RAX
* rather than ORIG_RAX, and arg4 is R10 rather than RCX
*/
#define REGS_SYSCALL_NR PT_INDEX(RAX)
diff --git a/trunk/arch/v850/kernel/entry.S b/trunk/arch/v850/kernel/entry.S
index 8bc521ca081f..d991e4547dbb 100644
--- a/trunk/arch/v850/kernel/entry.S
+++ b/trunk/arch/v850/kernel/entry.S
@@ -195,7 +195,7 @@
sst.w lp, PTO+PT_GPR(GPR_LP)[ep]; \
type ## _STATE_SAVER
/* Pop a register state pushed by PUSH_STATE, except for the stack pointer,
- from the stack. */
+ from the the stack. */
#define POP_STATE(type) \
mov sp, ep; \
type ## _STATE_RESTORER; \
diff --git a/trunk/arch/x86_64/Kconfig b/trunk/arch/x86_64/Kconfig
index 010d2265f1cf..0a5d8e659aa4 100644
--- a/trunk/arch/x86_64/Kconfig
+++ b/trunk/arch/x86_64/Kconfig
@@ -310,7 +310,7 @@ config K8_NUMA
help
Enable K8 NUMA node topology detection. You should say Y here if
you have a multi processor AMD K8 system. This uses an old
- method to read the NUMA configuration directly from the builtin
+ method to read the NUMA configurtion directly from the builtin
Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
instead, which also takes priority if both are compiled in.
diff --git a/trunk/arch/x86_64/kernel/i8259.c b/trunk/arch/x86_64/kernel/i8259.c
index 0612a33bb896..2dd51f364ea2 100644
--- a/trunk/arch/x86_64/kernel/i8259.c
+++ b/trunk/arch/x86_64/kernel/i8259.c
@@ -43,10 +43,17 @@
BI(x,8) BI(x,9) BI(x,a) BI(x,b) \
BI(x,c) BI(x,d) BI(x,e) BI(x,f)
+#define BUILD_15_IRQS(x) \
+ BI(x,0) BI(x,1) BI(x,2) BI(x,3) \
+ BI(x,4) BI(x,5) BI(x,6) BI(x,7) \
+ BI(x,8) BI(x,9) BI(x,a) BI(x,b) \
+ BI(x,c) BI(x,d) BI(x,e)
+
/*
* ISA PIC or low IO-APIC triggered (INTA-cycle or APIC) interrupts:
* (these are usually mapped to vectors 0x20-0x2f)
*/
+BUILD_16_IRQS(0x0)
/*
* The IO-APIC gives us many more interrupt sources. Most of these
@@ -58,12 +65,17 @@
*
* (these are usually mapped into the 0x30-0xff vector range)
*/
- BUILD_16_IRQS(0x2) BUILD_16_IRQS(0x3)
+ BUILD_16_IRQS(0x1) BUILD_16_IRQS(0x2) BUILD_16_IRQS(0x3)
BUILD_16_IRQS(0x4) BUILD_16_IRQS(0x5) BUILD_16_IRQS(0x6) BUILD_16_IRQS(0x7)
BUILD_16_IRQS(0x8) BUILD_16_IRQS(0x9) BUILD_16_IRQS(0xa) BUILD_16_IRQS(0xb)
-BUILD_16_IRQS(0xc) BUILD_16_IRQS(0xd) BUILD_16_IRQS(0xe) BUILD_16_IRQS(0xf)
+BUILD_16_IRQS(0xc) BUILD_16_IRQS(0xd)
+
+#ifdef CONFIG_PCI_MSI
+ BUILD_15_IRQS(0xe)
+#endif
#undef BUILD_16_IRQS
+#undef BUILD_15_IRQS
#undef BI
@@ -76,15 +88,29 @@ BUILD_16_IRQS(0xc) BUILD_16_IRQS(0xd) BUILD_16_IRQS(0xe) BUILD_16_IRQS(0xf)
IRQ(x,8), IRQ(x,9), IRQ(x,a), IRQ(x,b), \
IRQ(x,c), IRQ(x,d), IRQ(x,e), IRQ(x,f)
+#define IRQLIST_15(x) \
+ IRQ(x,0), IRQ(x,1), IRQ(x,2), IRQ(x,3), \
+ IRQ(x,4), IRQ(x,5), IRQ(x,6), IRQ(x,7), \
+ IRQ(x,8), IRQ(x,9), IRQ(x,a), IRQ(x,b), \
+ IRQ(x,c), IRQ(x,d), IRQ(x,e)
+
void (*interrupt[NR_IRQS])(void) = {
- IRQLIST_16(0x2), IRQLIST_16(0x3),
+ IRQLIST_16(0x0),
+
+ IRQLIST_16(0x1), IRQLIST_16(0x2), IRQLIST_16(0x3),
IRQLIST_16(0x4), IRQLIST_16(0x5), IRQLIST_16(0x6), IRQLIST_16(0x7),
IRQLIST_16(0x8), IRQLIST_16(0x9), IRQLIST_16(0xa), IRQLIST_16(0xb),
- IRQLIST_16(0xc), IRQLIST_16(0xd), IRQLIST_16(0xe), IRQLIST_16(0xf)
+ IRQLIST_16(0xc), IRQLIST_16(0xd)
+
+#ifdef CONFIG_PCI_MSI
+ , IRQLIST_15(0xe)
+#endif
+
};
#undef IRQ
#undef IRQLIST_16
+#undef IRQLIST_14
/*
* This is the 'legacy' 8259A Programmable Interrupt Controller,
@@ -95,15 +121,42 @@ void (*interrupt[NR_IRQS])(void) = {
* moves to arch independent land
*/
-static int i8259A_auto_eoi;
DEFINE_SPINLOCK(i8259A_lock);
+
+static int i8259A_auto_eoi;
+
+static void end_8259A_irq (unsigned int irq)
+{
+ if (irq > 256) {
+ char var;
+ printk("return %p stack %p ti %p\n", __builtin_return_address(0), &var, task_thread_info(current));
+
+ BUG();
+ }
+
+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) &&
+ irq_desc[irq].action)
+ enable_8259A_irq(irq);
+}
+
+#define shutdown_8259A_irq disable_8259A_irq
+
static void mask_and_ack_8259A(unsigned int);
-static struct irq_chip i8259A_chip = {
- .name = "XT-PIC",
- .mask = disable_8259A_irq,
- .unmask = enable_8259A_irq,
- .mask_ack = mask_and_ack_8259A,
+static unsigned int startup_8259A_irq(unsigned int irq)
+{
+ enable_8259A_irq(irq);
+ return 0; /* never anything pending */
+}
+
+static struct hw_interrupt_type i8259A_irq_type = {
+ .typename = "XT-PIC",
+ .startup = startup_8259A_irq,
+ .shutdown = shutdown_8259A_irq,
+ .enable = enable_8259A_irq,
+ .disable = disable_8259A_irq,
+ .ack = mask_and_ack_8259A,
+ .end = end_8259A_irq,
};
/*
@@ -178,7 +231,7 @@ void make_8259A_irq(unsigned int irq)
{
disable_irq_nosync(irq);
io_apic_irqs &= ~(1<= NR_IRQS)
+ break;
if (vector != IA32_SYSCALL_VECTOR)
set_intr_gate(vector, interrupt[i]);
}
@@ -520,7 +554,7 @@ void __init init_IRQ(void)
* IRQ0 must be given a fixed assignment and initialized,
* because it's used before the IO-APIC is set up.
*/
- __get_cpu_var(vector_irq)[FIRST_DEVICE_VECTOR] = 0;
+ set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]);
/*
* The reschedule interrupt is a CPU-to-CPU reschedule-helper
diff --git a/trunk/arch/x86_64/kernel/io_apic.c b/trunk/arch/x86_64/kernel/io_apic.c
index 91728d9d3472..0491019d4c8d 100644
--- a/trunk/arch/x86_64/kernel/io_apic.c
+++ b/trunk/arch/x86_64/kernel/io_apic.c
@@ -26,12 +26,9 @@
#include
#include
#include
-#include
#include
#include
#include
-#include
-#include
#ifdef CONFIG_ACPI
#include
#endif
@@ -44,10 +41,6 @@
#include
#include
#include
-#include
-#include
-
-static int assign_irq_vector(int irq, cpumask_t mask);
#define __apicdebuginit __init
@@ -88,6 +81,14 @@ static struct irq_pin_list {
short apic, pin, next;
} irq_2_pin[PIN_MAP_SIZE];
+int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
+#ifdef CONFIG_PCI_MSI
+#define vector_to_irq(vector) \
+ (platform_legacy_irq(vector) ? vector : vector_irq[vector])
+#else
+#define vector_to_irq(vector) (vector)
+#endif
+
#define __DO_ACTION(R, ACTION, FINAL) \
\
{ \
@@ -138,35 +139,11 @@ static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e)
}
#ifdef CONFIG_SMP
-static void __target_IO_APIC_irq(unsigned int irq, unsigned int dest, u8 vector)
-{
- int apic, pin;
- struct irq_pin_list *entry = irq_2_pin + irq;
-
- BUG_ON(irq >= NR_IRQS);
- for (;;) {
- unsigned int reg;
- apic = entry->apic;
- pin = entry->pin;
- if (pin == -1)
- break;
- io_apic_write(apic, 0x11 + pin*2, dest);
- reg = io_apic_read(apic, 0x10 + pin*2);
- reg &= ~0x000000ff;
- reg |= vector;
- io_apic_modify(apic, reg);
- if (!entry->next)
- break;
- entry = irq_2_pin + entry->next;
- }
-}
-
static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
{
unsigned long flags;
unsigned int dest;
cpumask_t tmp;
- int vector;
cpus_and(tmp, mask, cpu_online_map);
if (cpus_empty(tmp))
@@ -174,13 +151,7 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
cpus_and(mask, tmp, CPU_MASK_ALL);
- vector = assign_irq_vector(irq, mask);
- if (vector < 0)
- return;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
+ dest = cpu_mask_to_apicid(mask);
/*
* Only the high 8 bits are valid.
@@ -188,12 +159,14 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
dest = SET_APIC_LOGICAL_ID(dest);
spin_lock_irqsave(&ioapic_lock, flags);
- __target_IO_APIC_irq(irq, dest, vector & 0xff);
- set_native_irq_info(irq, mask);
+ __DO_ACTION(1, = dest, )
+ set_irq_info(irq, mask);
spin_unlock_irqrestore(&ioapic_lock, flags);
}
#endif
+static u8 gsi_2_irq[NR_IRQ_VECTORS] = { [0 ... NR_IRQ_VECTORS-1] = 0xFF };
+
/*
* The common case is 1:1 IRQ<->pin mappings. Sometimes there are
* shared ISA-space IRQs, so we have to support them. We are super
@@ -519,6 +492,64 @@ static inline int irq_trigger(int idx)
return MPBIOS_trigger(idx);
}
+static int next_irq = 16;
+
+/*
+ * gsi_irq_sharing -- Name overload! "irq" can be either a legacy IRQ
+ * in the range 0-15, a linux IRQ in the range 0-223, or a GSI number
+ * from ACPI, which can reach 800 in large boxen.
+ *
+ * Compact the sparse GSI space into a sequential IRQ series and reuse
+ * vectors if possible.
+ */
+int gsi_irq_sharing(int gsi)
+{
+ int i, tries, vector;
+
+ BUG_ON(gsi >= NR_IRQ_VECTORS);
+
+ if (platform_legacy_irq(gsi))
+ return gsi;
+
+ if (gsi_2_irq[gsi] != 0xFF)
+ return (int)gsi_2_irq[gsi];
+
+ tries = NR_IRQS;
+ try_again:
+ vector = assign_irq_vector(gsi);
+
+ /*
+ * Sharing vectors means sharing IRQs, so scan irq_vectors for previous
+ * use of vector and if found, return that IRQ. However, we never want
+ * to share legacy IRQs, which usually have a different trigger mode
+ * than PCI.
+ */
+ for (i = 0; i < NR_IRQS; i++)
+ if (IO_APIC_VECTOR(i) == vector)
+ break;
+ if (platform_legacy_irq(i)) {
+ if (--tries >= 0) {
+ IO_APIC_VECTOR(i) = 0;
+ goto try_again;
+ }
+ panic("gsi_irq_sharing: didn't find an IRQ using vector 0x%02X for GSI %d", vector, gsi);
+ }
+ if (i < NR_IRQS) {
+ gsi_2_irq[gsi] = i;
+ printk(KERN_INFO "GSI %d sharing vector 0x%02X and IRQ %d\n",
+ gsi, vector, i);
+ return i;
+ }
+
+ i = next_irq++;
+ BUG_ON(i >= NR_IRQS);
+ gsi_2_irq[gsi] = i;
+ IO_APIC_VECTOR(i) = vector;
+ printk(KERN_INFO "GSI %d assigned vector 0x%02X and IRQ %d\n",
+ gsi, vector, i);
+ return i;
+}
+
static int pin_2_irq(int idx, int apic, int pin)
{
int irq, i;
@@ -540,6 +571,7 @@ static int pin_2_irq(int idx, int apic, int pin)
while (i < apic)
irq += nr_ioapic_registers[i++];
irq += pin;
+ irq = gsi_irq_sharing(irq);
}
BUG_ON(irq >= NR_IRQS);
return irq;
@@ -563,83 +595,46 @@ static inline int IO_APIC_irq_trigger(int irq)
}
/* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
-unsigned int irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_EXTERNAL_VECTOR, 0 };
+u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 };
-static int __assign_irq_vector(int irq, cpumask_t mask)
+int assign_irq_vector(int irq)
{
- /*
- * NOTE! The local APIC isn't very good at handling
- * multiple interrupts at the same interrupt level.
- * As the interrupt level is determined by taking the
- * vector number and shifting that right by 4, we
- * want to spread these out a bit so that they don't
- * all fall in the same interrupt level.
- *
- * Also, we've got to be careful not to trash gate
- * 0x80, because int 0x80 is hm, kind of importantish. ;)
- */
- static struct {
- int vector;
- int offset;
- } pos[NR_CPUS] = { [ 0 ... NR_CPUS - 1] = {FIRST_DEVICE_VECTOR, 0} };
- int old_vector = -1;
- int cpu;
-
- BUG_ON((unsigned)irq >= NR_IRQ_VECTORS);
-
- if (IO_APIC_VECTOR(irq) > 0)
- old_vector = IO_APIC_VECTOR(irq);
- if ((old_vector > 0) && cpu_isset(old_vector >> 8, mask)) {
- return old_vector;
- }
+ static int current_vector = FIRST_DEVICE_VECTOR, offset = 0;
+ unsigned long flags;
+ int vector;
+
+ BUG_ON(irq != AUTO_ASSIGN && (unsigned)irq >= NR_IRQ_VECTORS);
+
+ spin_lock_irqsave(&vector_lock, flags);
- for_each_cpu_mask(cpu, mask) {
- int vector, offset;
- vector = pos[cpu].vector;
- offset = pos[cpu].offset;
+ if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0) {
+ spin_unlock_irqrestore(&vector_lock, flags);
+ return IO_APIC_VECTOR(irq);
+ }
next:
- vector += 8;
- if (vector >= FIRST_SYSTEM_VECTOR) {
- /* If we run out of vectors on large boxen, must share them. */
- offset = (offset + 1) % 8;
- vector = FIRST_DEVICE_VECTOR + offset;
- }
- if (unlikely(pos[cpu].vector == vector))
- continue;
- if (vector == IA32_SYSCALL_VECTOR)
- goto next;
- if (per_cpu(vector_irq, cpu)[vector] != -1)
- goto next;
- /* Found one! */
- pos[cpu].vector = vector;
- pos[cpu].offset = offset;
- if (old_vector >= 0) {
- int old_cpu = old_vector >> 8;
- old_vector &= 0xff;
- per_cpu(vector_irq, old_cpu)[old_vector] = -1;
- }
- per_cpu(vector_irq, cpu)[vector] = irq;
- vector |= cpu << 8;
- IO_APIC_VECTOR(irq) = vector;
- return vector;
+ current_vector += 8;
+ if (current_vector == IA32_SYSCALL_VECTOR)
+ goto next;
+
+ if (current_vector >= FIRST_SYSTEM_VECTOR) {
+ /* If we run out of vectors on large boxen, must share them. */
+ offset = (offset + 1) % 8;
+ current_vector = FIRST_DEVICE_VECTOR + offset;
}
- return -ENOSPC;
-}
-static int assign_irq_vector(int irq, cpumask_t mask)
-{
- int vector;
- unsigned long flags;
+ vector = current_vector;
+ vector_irq[vector] = irq;
+ if (irq != AUTO_ASSIGN)
+ IO_APIC_VECTOR(irq) = vector;
- spin_lock_irqsave(&vector_lock, flags);
- vector = __assign_irq_vector(irq, mask);
spin_unlock_irqrestore(&vector_lock, flags);
+
return vector;
}
extern void (*interrupt[NR_IRQS])(void);
-
-static struct irq_chip ioapic_chip;
+static struct hw_interrupt_type ioapic_level_type;
+static struct hw_interrupt_type ioapic_edge_type;
#define IOAPIC_AUTO -1
#define IOAPIC_EDGE 0
@@ -647,13 +642,16 @@ static struct irq_chip ioapic_chip;
static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
{
+ unsigned idx;
+
+ idx = use_pci_vector() && !platform_legacy_irq(irq) ? vector : irq;
+
if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
trigger == IOAPIC_LEVEL)
- set_irq_chip_and_handler(irq, &ioapic_chip,
- handle_fasteoi_irq);
+ irq_desc[idx].chip = &ioapic_level_type;
else
- set_irq_chip_and_handler(irq, &ioapic_chip,
- handle_edge_irq);
+ irq_desc[idx].chip = &ioapic_edge_type;
+ set_intr_gate(vector, interrupt[idx]);
}
static void __init setup_IO_APIC_irqs(void)
@@ -703,15 +701,8 @@ static void __init setup_IO_APIC_irqs(void)
continue;
if (IO_APIC_IRQ(irq)) {
- cpumask_t mask;
- vector = assign_irq_vector(irq, TARGET_CPUS);
- if (vector < 0)
- continue;
-
- cpus_clear(mask);
- cpu_set(vector >> 8, mask);
- entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask);
- entry.vector = vector & 0xff;
+ vector = assign_irq_vector(irq);
+ entry.vector = vector;
ioapic_register_intr(irq, vector, IOAPIC_AUTO);
if (!apic && (irq < 16))
@@ -761,7 +752,7 @@ static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, in
* The timer IRQ doesn't have to know that behind the
* scene we have a 8259A-master in AEOI mode ...
*/
- set_irq_chip_and_handler(0, &ioapic_chip, handle_edge_irq);
+ irq_desc[0].chip = &ioapic_edge_type;
/*
* Add it to the IO-APIC irq-routing table:
@@ -877,12 +868,17 @@ void __apicdebuginit print_IO_APIC(void)
);
}
}
+ if (use_pci_vector())
+ printk(KERN_INFO "Using vector-based indexing\n");
printk(KERN_DEBUG "IRQ to pin mappings:\n");
for (i = 0; i < NR_IRQS; i++) {
struct irq_pin_list *entry = irq_2_pin + i;
if (entry->pin < 0)
continue;
- printk(KERN_DEBUG "IRQ%d ", i);
+ if (use_pci_vector() && !platform_legacy_irq(i))
+ printk(KERN_DEBUG "IRQ%d ", IO_APIC_VECTOR(i));
+ else
+ printk(KERN_DEBUG "IRQ%d ", i);
for (;;) {
printk("-> %d:%d", entry->apic, entry->pin);
if (!entry->next)
@@ -1189,7 +1185,7 @@ static int __init timer_irq_works(void)
* an edge even if it isn't on the 8259A...
*/
-static unsigned int startup_ioapic_irq(unsigned int irq)
+static unsigned int startup_edge_ioapic_irq(unsigned int irq)
{
int was_pending = 0;
unsigned long flags;
@@ -1206,16 +1202,107 @@ static unsigned int startup_ioapic_irq(unsigned int irq)
return was_pending;
}
-static int ioapic_retrigger_irq(unsigned int irq)
+/*
+ * Once we have recorded IRQ_PENDING already, we can mask the
+ * interrupt for real. This prevents IRQ storms from unhandled
+ * devices.
+ */
+static void ack_edge_ioapic_irq(unsigned int irq)
+{
+ move_irq(irq);
+ if ((irq_desc[irq].status & (IRQ_PENDING | IRQ_DISABLED))
+ == (IRQ_PENDING | IRQ_DISABLED))
+ mask_IO_APIC_irq(irq);
+ ack_APIC_irq();
+}
+
+/*
+ * Level triggered interrupts can just be masked,
+ * and shutting down and starting up the interrupt
+ * is the same as enabling and disabling them -- except
+ * with a startup need to return a "was pending" value.
+ *
+ * Level triggered interrupts are special because we
+ * do not touch any IO-APIC register while handling
+ * them. We ack the APIC in the end-IRQ handler, not
+ * in the start-IRQ-handler. Protection against reentrance
+ * from the same interrupt is still provided, both by the
+ * generic IRQ layer and by the fact that an unacked local
+ * APIC does not accept IRQs.
+ */
+static unsigned int startup_level_ioapic_irq (unsigned int irq)
+{
+ unmask_IO_APIC_irq(irq);
+
+ return 0; /* don't check for pending */
+}
+
+static void end_level_ioapic_irq (unsigned int irq)
+{
+ move_irq(irq);
+ ack_APIC_irq();
+}
+
+#ifdef CONFIG_PCI_MSI
+static unsigned int startup_edge_ioapic_vector(unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ return startup_edge_ioapic_irq(irq);
+}
+
+static void ack_edge_ioapic_vector(unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ move_native_irq(vector);
+ ack_edge_ioapic_irq(irq);
+}
+
+static unsigned int startup_level_ioapic_vector (unsigned int vector)
{
- cpumask_t mask;
- unsigned vector;
+ int irq = vector_to_irq(vector);
- vector = irq_vector[irq];
- cpus_clear(mask);
- cpu_set(vector >> 8, mask);
+ return startup_level_ioapic_irq (irq);
+}
+
+static void end_level_ioapic_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ move_native_irq(vector);
+ end_level_ioapic_irq(irq);
+}
+
+static void mask_IO_APIC_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ mask_IO_APIC_irq(irq);
+}
- send_IPI_mask(mask, vector & 0xff);
+static void unmask_IO_APIC_vector (unsigned int vector)
+{
+ int irq = vector_to_irq(vector);
+
+ unmask_IO_APIC_irq(irq);
+}
+
+#ifdef CONFIG_SMP
+static void set_ioapic_affinity_vector (unsigned int vector,
+ cpumask_t cpu_mask)
+{
+ int irq = vector_to_irq(vector);
+
+ set_native_irq_info(vector, cpu_mask);
+ set_ioapic_affinity_irq(irq, cpu_mask);
+}
+#endif // CONFIG_SMP
+#endif // CONFIG_PCI_MSI
+
+static int ioapic_retrigger(unsigned int irq)
+{
+ send_IPI_self(IO_APIC_VECTOR(irq));
return 1;
}
@@ -1229,47 +1316,32 @@ static int ioapic_retrigger_irq(unsigned int irq)
* races.
*/
-static void ack_apic_edge(unsigned int irq)
-{
- move_native_irq(irq);
- ack_APIC_irq();
-}
-
-static void ack_apic_level(unsigned int irq)
-{
- int do_unmask_irq = 0;
-
-#if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
- /* If we are moving the irq we need to mask it */
- if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
- do_unmask_irq = 1;
- mask_IO_APIC_irq(irq);
- }
+static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
+ .typename = "IO-APIC-edge",
+ .startup = startup_edge_ioapic,
+ .shutdown = shutdown_edge_ioapic,
+ .enable = enable_edge_ioapic,
+ .disable = disable_edge_ioapic,
+ .ack = ack_edge_ioapic,
+ .end = end_edge_ioapic,
+#ifdef CONFIG_SMP
+ .set_affinity = set_ioapic_affinity,
#endif
+ .retrigger = ioapic_retrigger,
+};
- /*
- * We must acknowledge the irq before we move it or the acknowledge will
- * not propogate properly.
- */
- ack_APIC_irq();
-
- /* Now we can move and renable the irq */
- move_masked_irq(irq);
- if (unlikely(do_unmask_irq))
- unmask_IO_APIC_irq(irq);
-}
-
-static struct irq_chip ioapic_chip __read_mostly = {
- .name = "IO-APIC",
- .startup = startup_ioapic_irq,
- .mask = mask_IO_APIC_irq,
- .unmask = unmask_IO_APIC_irq,
- .ack = ack_apic_edge,
- .eoi = ack_apic_level,
+static struct hw_interrupt_type ioapic_level_type __read_mostly = {
+ .typename = "IO-APIC-level",
+ .startup = startup_level_ioapic,
+ .shutdown = shutdown_level_ioapic,
+ .enable = enable_level_ioapic,
+ .disable = disable_level_ioapic,
+ .ack = mask_and_ack_level_ioapic,
+ .end = end_level_ioapic,
#ifdef CONFIG_SMP
- .set_affinity = set_ioapic_affinity_irq,
+ .set_affinity = set_ioapic_affinity,
#endif
- .retrigger = ioapic_retrigger_irq,
+ .retrigger = ioapic_retrigger,
};
static inline void init_IO_APIC_traps(void)
@@ -1289,6 +1361,11 @@ static inline void init_IO_APIC_traps(void)
*/
for (irq = 0; irq < NR_IRQS ; irq++) {
int tmp = irq;
+ if (use_pci_vector()) {
+ if (!platform_legacy_irq(tmp))
+ if ((tmp = vector_to_irq(tmp)) == -1)
+ continue;
+ }
if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) {
/*
* Hmm.. We don't have an entry for this,
@@ -1299,7 +1376,7 @@ static inline void init_IO_APIC_traps(void)
make_8259A_irq(irq);
else
/* Strange. Oh, well.. */
- irq_desc[irq].chip = &no_irq_chip;
+ irq_desc[irq].chip = &no_irq_type;
}
}
}
@@ -1418,6 +1495,8 @@ static inline void unlock_ExtINT_logic(void)
spin_unlock_irqrestore(&ioapic_lock, flags);
}
+int timer_uses_ioapic_pin_0;
+
/*
* This code may look a bit paranoid, but it's supposed to cooperate with
* a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
@@ -1435,7 +1514,8 @@ static inline void check_timer(void)
* get/set the timer IRQ vector:
*/
disable_8259A_irq(0);
- vector = assign_irq_vector(0, TARGET_CPUS);
+ vector = assign_irq_vector(0);
+ set_intr_gate(vector, interrupt[0]);
/*
* Subtle, code in do_timer_interrupt() expects an AEOI
@@ -1454,6 +1534,9 @@ static inline void check_timer(void)
pin2 = ioapic_i8259.pin;
apic2 = ioapic_i8259.apic;
+ if (pin1 == 0)
+ timer_uses_ioapic_pin_0 = 1;
+
apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
vector, apic1, pin1, apic2, pin2);
@@ -1657,253 +1740,6 @@ static int __init ioapic_init_sysfs(void)
device_initcall(ioapic_init_sysfs);
-/*
- * Dynamic irq allocate and deallocation
- */
-int create_irq(void)
-{
- /* Allocate an unused irq */
- int irq;
- int new;
- int vector = 0;
- unsigned long flags;
-
- irq = -ENOSPC;
- spin_lock_irqsave(&vector_lock, flags);
- for (new = (NR_IRQS - 1); new >= 0; new--) {
- if (platform_legacy_irq(new))
- continue;
- if (irq_vector[new] != 0)
- continue;
- vector = __assign_irq_vector(new, TARGET_CPUS);
- if (likely(vector > 0))
- irq = new;
- break;
- }
- spin_unlock_irqrestore(&vector_lock, flags);
-
- if (irq >= 0) {
- dynamic_irq_init(irq);
- }
- return irq;
-}
-
-void destroy_irq(unsigned int irq)
-{
- unsigned long flags;
-
- dynamic_irq_cleanup(irq);
-
- spin_lock_irqsave(&vector_lock, flags);
- irq_vector[irq] = 0;
- spin_unlock_irqrestore(&vector_lock, flags);
-}
-
-/*
- * MSI mesage composition
- */
-#ifdef CONFIG_PCI_MSI
-static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg)
-{
- int vector;
- unsigned dest;
-
- vector = assign_irq_vector(irq, TARGET_CPUS);
- if (vector >= 0) {
- cpumask_t tmp;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
-
- msg->address_hi = MSI_ADDR_BASE_HI;
- msg->address_lo =
- MSI_ADDR_BASE_LO |
- ((INT_DEST_MODE == 0) ?
- MSI_ADDR_DEST_MODE_PHYSICAL:
- MSI_ADDR_DEST_MODE_LOGICAL) |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- MSI_ADDR_REDIRECTION_CPU:
- MSI_ADDR_REDIRECTION_LOWPRI) |
- MSI_ADDR_DEST_ID(dest);
-
- msg->data =
- MSI_DATA_TRIGGER_EDGE |
- MSI_DATA_LEVEL_ASSERT |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- MSI_DATA_DELIVERY_FIXED:
- MSI_DATA_DELIVERY_LOWPRI) |
- MSI_DATA_VECTOR(vector);
- }
- return vector;
-}
-
-#ifdef CONFIG_SMP
-static void set_msi_irq_affinity(unsigned int irq, cpumask_t mask)
-{
- struct msi_msg msg;
- unsigned int dest;
- cpumask_t tmp;
- int vector;
-
- cpus_and(tmp, mask, cpu_online_map);
- if (cpus_empty(tmp))
- tmp = TARGET_CPUS;
-
- cpus_and(mask, tmp, CPU_MASK_ALL);
-
- vector = assign_irq_vector(irq, mask);
- if (vector < 0)
- return;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
-
- read_msi_msg(irq, &msg);
-
- msg.data &= ~MSI_DATA_VECTOR_MASK;
- msg.data |= MSI_DATA_VECTOR(vector);
- msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
- msg.address_lo |= MSI_ADDR_DEST_ID(dest);
-
- write_msi_msg(irq, &msg);
- set_native_irq_info(irq, mask);
-}
-#endif /* CONFIG_SMP */
-
-/*
- * IRQ Chip for MSI PCI/PCI-X/PCI-Express Devices,
- * which implement the MSI or MSI-X Capability Structure.
- */
-static struct irq_chip msi_chip = {
- .name = "PCI-MSI",
- .unmask = unmask_msi_irq,
- .mask = mask_msi_irq,
- .ack = ack_apic_edge,
-#ifdef CONFIG_SMP
- .set_affinity = set_msi_irq_affinity,
-#endif
- .retrigger = ioapic_retrigger_irq,
-};
-
-int arch_setup_msi_irq(unsigned int irq, struct pci_dev *dev)
-{
- struct msi_msg msg;
- int ret;
- ret = msi_compose_msg(dev, irq, &msg);
- if (ret < 0)
- return ret;
-
- write_msi_msg(irq, &msg);
-
- set_irq_chip_and_handler(irq, &msi_chip, handle_edge_irq);
-
- return 0;
-}
-
-void arch_teardown_msi_irq(unsigned int irq)
-{
- return;
-}
-
-#endif /* CONFIG_PCI_MSI */
-
-/*
- * Hypertransport interrupt support
- */
-#ifdef CONFIG_HT_IRQ
-
-#ifdef CONFIG_SMP
-
-static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector)
-{
- u32 low, high;
- low = read_ht_irq_low(irq);
- high = read_ht_irq_high(irq);
-
- low &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK);
- high &= ~(HT_IRQ_HIGH_DEST_ID_MASK);
-
- low |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest);
- high |= HT_IRQ_HIGH_DEST_ID(dest);
-
- write_ht_irq_low(irq, low);
- write_ht_irq_high(irq, high);
-}
-
-static void set_ht_irq_affinity(unsigned int irq, cpumask_t mask)
-{
- unsigned int dest;
- cpumask_t tmp;
- int vector;
-
- cpus_and(tmp, mask, cpu_online_map);
- if (cpus_empty(tmp))
- tmp = TARGET_CPUS;
-
- cpus_and(mask, tmp, CPU_MASK_ALL);
-
- vector = assign_irq_vector(irq, mask);
- if (vector < 0)
- return;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
-
- target_ht_irq(irq, dest, vector & 0xff);
- set_native_irq_info(irq, mask);
-}
-#endif
-
-static struct hw_interrupt_type ht_irq_chip = {
- .name = "PCI-HT",
- .mask = mask_ht_irq,
- .unmask = unmask_ht_irq,
- .ack = ack_apic_edge,
-#ifdef CONFIG_SMP
- .set_affinity = set_ht_irq_affinity,
-#endif
- .retrigger = ioapic_retrigger_irq,
-};
-
-int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
-{
- int vector;
-
- vector = assign_irq_vector(irq, TARGET_CPUS);
- if (vector >= 0) {
- u32 low, high;
- unsigned dest;
- cpumask_t tmp;
-
- cpus_clear(tmp);
- cpu_set(vector >> 8, tmp);
- dest = cpu_mask_to_apicid(tmp);
-
- high = HT_IRQ_HIGH_DEST_ID(dest);
-
- low = HT_IRQ_LOW_BASE |
- HT_IRQ_LOW_DEST_ID(dest) |
- HT_IRQ_LOW_VECTOR(vector) |
- ((INT_DEST_MODE == 0) ?
- HT_IRQ_LOW_DM_PHYSICAL :
- HT_IRQ_LOW_DM_LOGICAL) |
- HT_IRQ_LOW_RQEOI_EDGE |
- ((INT_DELIVERY_MODE != dest_LowestPrio) ?
- HT_IRQ_LOW_MT_FIXED :
- HT_IRQ_LOW_MT_ARBITRATED);
-
- write_ht_irq_low(irq, low);
- write_ht_irq_high(irq, high);
-
- set_irq_chip_and_handler(irq, &ht_irq_chip, handle_edge_irq);
- }
- return vector;
-}
-#endif /* CONFIG_HT_IRQ */
-
/* --------------------------------------------------------------------------
ACPI-based IOAPIC Configuration
-------------------------------------------------------------------------- */
@@ -1929,8 +1765,6 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
{
struct IO_APIC_route_entry entry;
unsigned long flags;
- int vector;
- cpumask_t mask;
if (!IO_APIC_IRQ(irq)) {
apic_printk(APIC_QUIET,KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n",
@@ -1938,20 +1772,6 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
return -EINVAL;
}
- /*
- * IRQs < 16 are already in the irq_2_pin[] map
- */
- if (irq >= 16)
- add_pin_to_irq(irq, ioapic, pin);
-
-
- vector = assign_irq_vector(irq, TARGET_CPUS);
- if (vector < 0)
- return vector;
-
- cpus_clear(mask);
- cpu_set(vector >> 8, mask);
-
/*
* Generate a PCI IRQ routing entry and program the IOAPIC accordingly.
* Note that we mask (disable) IRQs now -- these get enabled when the
@@ -1962,11 +1782,19 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
entry.delivery_mode = INT_DELIVERY_MODE;
entry.dest_mode = INT_DEST_MODE;
- entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask);
+ entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
entry.trigger = triggering;
entry.polarity = polarity;
entry.mask = 1; /* Disabled (masked) */
- entry.vector = vector & 0xff;
+
+ irq = gsi_irq_sharing(irq);
+ /*
+ * IRQs < 16 are already in the irq_2_pin[] map
+ */
+ if (irq >= 16)
+ add_pin_to_irq(irq, ioapic, pin);
+
+ entry.vector = assign_irq_vector(irq);
apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> "
"IRQ %d Mode:%i Active:%i)\n", ioapic,
@@ -1981,7 +1809,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
ioapic_write_entry(ioapic, pin, entry);
spin_lock_irqsave(&ioapic_lock, flags);
- set_native_irq_info(irq, TARGET_CPUS);
+ set_native_irq_info(use_pci_vector() ? entry.vector : irq, TARGET_CPUS);
spin_unlock_irqrestore(&ioapic_lock, flags);
return 0;
diff --git a/trunk/arch/x86_64/kernel/irq.c b/trunk/arch/x86_64/kernel/irq.c
index 506f27c85ca5..b3677e6ccc6e 100644
--- a/trunk/arch/x86_64/kernel/irq.c
+++ b/trunk/arch/x86_64/kernel/irq.c
@@ -74,8 +74,7 @@ int show_interrupts(struct seq_file *p, void *v)
for_each_online_cpu(j)
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
#endif
- seq_printf(p, " %8s", irq_desc[i].chip->name);
- seq_printf(p, "-%s", handle_irq_name(irq_desc[i].handle_irq));
+ seq_printf(p, " %14s", irq_desc[i].chip->typename);
seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next)
@@ -105,12 +104,7 @@ int show_interrupts(struct seq_file *p, void *v)
asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
{
/* high bit used in ret_from_ code */
- unsigned vector = ~regs->orig_rax;
- unsigned irq;
-
- exit_idle();
- irq_enter();
- irq = __get_cpu_var(vector_irq)[vector];
+ unsigned irq = ~regs->orig_rax;
if (unlikely(irq >= NR_IRQS)) {
printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
@@ -118,10 +112,12 @@ asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
BUG();
}
+ exit_idle();
+ irq_enter();
#ifdef CONFIG_DEBUG_STACKOVERFLOW
stack_overflow_check(regs);
#endif
- generic_handle_irq(irq, regs);
+ __do_IRQ(irq, regs);
irq_exit();
return 1;
diff --git a/trunk/arch/x86_64/kernel/mpparse.c b/trunk/arch/x86_64/kernel/mpparse.c
index b147ab19fbd4..b8d53dfa9931 100644
--- a/trunk/arch/x86_64/kernel/mpparse.c
+++ b/trunk/arch/x86_64/kernel/mpparse.c
@@ -790,11 +790,20 @@ void __init mp_config_acpi_legacy_irqs(void)
}
}
+#define MAX_GSI_NUM 4096
+
int mp_register_gsi(u32 gsi, int triggering, int polarity)
{
int ioapic = -1;
int ioapic_pin = 0;
int idx, bit = 0;
+ static int pci_irq = 16;
+ /*
+ * Mapping between Global System Interrupts, which
+ * represent all possible interrupts, to the IRQs
+ * assigned to actual devices.
+ */
+ static int gsi_to_irq[MAX_GSI_NUM];
if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC)
return gsi;
@@ -827,11 +836,42 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity)
if ((1< 15), but
+ * avoid a problem where the 8254 timer (IRQ0) is setup
+ * via an override (so it's not on pin 0 of the ioapic),
+ * and at the same time, the pin 0 interrupt is a PCI
+ * type. The gsi > 15 test could cause these two pins
+ * to be shared as IRQ0, and they are not shareable.
+ * So test for this condition, and if necessary, avoid
+ * the pin collision.
+ */
+ if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
+ gsi = pci_irq++;
+ /*
+ * Don't assign IRQ used by ACPI SCI
+ */
+ if (gsi == acpi_fadt.sci_int)
+ gsi = pci_irq++;
+ gsi_to_irq[irq] = gsi;
+ } else {
+ printk(KERN_ERR "GSI %u is too high\n", gsi);
+ return gsi;
+ }
+ }
+
io_apic_set_pci_routing(ioapic, ioapic_pin, gsi,
triggering == ACPI_EDGE_SENSITIVE ? 0 : 1,
polarity == ACPI_ACTIVE_HIGH ? 0 : 1);
diff --git a/trunk/arch/xtensa/Kconfig b/trunk/arch/xtensa/Kconfig
index c1e69a1f92a4..848f173db257 100644
--- a/trunk/arch/xtensa/Kconfig
+++ b/trunk/arch/xtensa/Kconfig
@@ -206,7 +206,7 @@ source "drivers/pci/hotplug/Kconfig"
endmenu
-menu "Executable file formats"
+menu "Exectuable file formats"
# only elf supported
config KCORE_ELF
@@ -241,7 +241,7 @@ menu "Xtensa initrd options"
bool "Embed root filesystem ramdisk into the kernel"
config EMBEDDED_RAMDISK_IMAGE
- string "Filename of gzipped ramdisk image"
+ string "Filename of gziped ramdisk image"
depends on EMBEDDED_RAMDISK
default "ramdisk.gz"
help
diff --git a/trunk/arch/xtensa/kernel/module.c b/trunk/arch/xtensa/kernel/module.c
index 2ea1755a0858..d1683cfa19a2 100644
--- a/trunk/arch/xtensa/kernel/module.c
+++ b/trunk/arch/xtensa/kernel/module.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/kernel/module.c
+ * arch/xtensa/kernel/platform.c
*
* Module support.
*
diff --git a/trunk/arch/xtensa/kernel/pci-dma.c b/trunk/arch/xtensa/kernel/pci-dma.c
index 6648fa9d9192..1ff82268e8ea 100644
--- a/trunk/arch/xtensa/kernel/pci-dma.c
+++ b/trunk/arch/xtensa/kernel/pci-dma.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/kernel/pci-dma.c
+ * arch/xtensa/pci-dma.c
*
* DMA coherent memory allocation.
*
diff --git a/trunk/arch/xtensa/kernel/pci.c b/trunk/arch/xtensa/kernel/pci.c
index 45571ccb72d6..8709f8249d02 100644
--- a/trunk/arch/xtensa/kernel/pci.c
+++ b/trunk/arch/xtensa/kernel/pci.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/kernel/pci.c
+ * arch/xtensa/pcibios.c
*
* PCI bios-type initialisation for PCI machines
*
diff --git a/trunk/arch/xtensa/kernel/setup.c b/trunk/arch/xtensa/kernel/setup.c
index c99ab72b41b6..82684d05910a 100644
--- a/trunk/arch/xtensa/kernel/setup.c
+++ b/trunk/arch/xtensa/kernel/setup.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/kernel/setup.c
+ * arch/xtensa/setup.c
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
diff --git a/trunk/arch/xtensa/kernel/syscalls.c b/trunk/arch/xtensa/kernel/syscalls.c
index f49cb239e603..d9285d4d5565 100644
--- a/trunk/arch/xtensa/kernel/syscalls.c
+++ b/trunk/arch/xtensa/kernel/syscalls.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/kernel/syscalls.c
+ * arch/xtensa/kernel/syscall.c
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
diff --git a/trunk/arch/xtensa/lib/pci-auto.c b/trunk/arch/xtensa/lib/pci-auto.c
index a71733ae1193..90c790f6123b 100644
--- a/trunk/arch/xtensa/lib/pci-auto.c
+++ b/trunk/arch/xtensa/lib/pci-auto.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/lib/pci-auto.c
+ * arch/xtensa/kernel/pci-auto.c
*
* PCI autoconfiguration library
*
diff --git a/trunk/arch/xtensa/lib/usercopy.S b/trunk/arch/xtensa/lib/usercopy.S
index 4641ef510f0e..265db2693cbd 100644
--- a/trunk/arch/xtensa/lib/usercopy.S
+++ b/trunk/arch/xtensa/lib/usercopy.S
@@ -5,10 +5,10 @@
*
* DO NOT COMBINE this function with .
* It needs to remain separate and distinct. The hal files are part
- * of the Xtensa link-time HAL, and those files may differ per
+ * of the the Xtensa link-time HAL, and those files may differ per
* processor configuration. Patching the kernel for another
* processor configuration includes replacing the hal files, and we
- * could lose the special functionality for accessing user-space
+ * could loose the special functionality for accessing user-space
* memory during such a patch. We sacrifice a little code space here
* in favor to simplify code maintenance.
*
diff --git a/trunk/arch/xtensa/mm/pgtable.c b/trunk/arch/xtensa/mm/pgtable.c
index 697992738205..7d28914d11cb 100644
--- a/trunk/arch/xtensa/mm/pgtable.c
+++ b/trunk/arch/xtensa/mm/pgtable.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/mm/pgtable.c
+ * arch/xtensa/mm/fault.c
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
diff --git a/trunk/arch/xtensa/mm/tlb.c b/trunk/arch/xtensa/mm/tlb.c
index 0fefb8666874..d3bd3bfc3b3b 100644
--- a/trunk/arch/xtensa/mm/tlb.c
+++ b/trunk/arch/xtensa/mm/tlb.c
@@ -1,5 +1,5 @@
/*
- * arch/xtensa/mm/tlb.c
+ * arch/xtensa/mm/mmu.c
*
* Logic that manipulates the Xtensa MMU. Derived from MIPS.
*
diff --git a/trunk/drivers/acorn/block/mfmhd.c b/trunk/drivers/acorn/block/mfmhd.c
index 1bace29f4b6a..3dd6b7bb5d35 100644
--- a/trunk/drivers/acorn/block/mfmhd.c
+++ b/trunk/drivers/acorn/block/mfmhd.c
@@ -1,5 +1,5 @@
/*
- * linux/drivers/acorn/block/mfmhd.c
+ * linux/arch/arm/drivers/block/mfmhd.c
*
* Copyright (C) 1995, 1996 Russell King, Dave Alan Gilbert (gilbertd@cs.man.ac.uk)
*
diff --git a/trunk/drivers/acpi/Kconfig b/trunk/drivers/acpi/Kconfig
index 0f9d4be7ed75..56c5ba874623 100644
--- a/trunk/drivers/acpi/Kconfig
+++ b/trunk/drivers/acpi/Kconfig
@@ -253,7 +253,7 @@ config ACPI_CUSTOM_DSDT
depends on !STANDALONE
default n
help
- This option is to load a custom ACPI DSDT
+ Thist option is to load a custom ACPI DSDT
If you don't know what that is, say N.
config ACPI_CUSTOM_DSDT_FILE
@@ -310,7 +310,7 @@ config X86_PM_TIMER
The Power Management Timer is available on all ACPI-capable,
in most cases even if ACPI is unusable or blacklisted.
- This timing source is not affected by power management features
+ This timing source is not affected by powermanagement features
like aggressive processor idling, throttling, frequency and/or
voltage scaling, unlike the commonly used Time Stamp Counter
(TSC) timing source.
@@ -345,7 +345,7 @@ config ACPI_HOTPLUG_MEMORY
Enabling this driver assumes that your platform hardware
and firmware have support for hot-plugging physical memory. If
your system does not support physically adding or ripping out
- memory DIMMs at some platform defined granularity (individually
+ memory DIMMs at some platfrom defined granularity (individually
or as a bank) at runtime, then you need not enable this driver.
If one selects "m," this driver can be loaded using the following
diff --git a/trunk/drivers/ata/ahci.c b/trunk/drivers/ata/ahci.c
index 54e1f38ce301..1aabc81d82f1 100644
--- a/trunk/drivers/ata/ahci.c
+++ b/trunk/drivers/ata/ahci.c
@@ -299,46 +299,76 @@ static const struct ata_port_info ahci_port_info[] = {
static const struct pci_device_id ahci_pci_tbl[] = {
/* Intel */
- { PCI_VDEVICE(INTEL, 0x2652), board_ahci }, /* ICH6 */
- { PCI_VDEVICE(INTEL, 0x2653), board_ahci }, /* ICH6M */
- { PCI_VDEVICE(INTEL, 0x27c1), board_ahci }, /* ICH7 */
- { PCI_VDEVICE(INTEL, 0x27c5), board_ahci }, /* ICH7M */
- { PCI_VDEVICE(INTEL, 0x27c3), board_ahci }, /* ICH7R */
- { PCI_VDEVICE(AL, 0x5288), board_ahci }, /* ULi M5288 */
- { PCI_VDEVICE(INTEL, 0x2681), board_ahci }, /* ESB2 */
- { PCI_VDEVICE(INTEL, 0x2682), board_ahci }, /* ESB2 */
- { PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
- { PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
- { PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
- { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* ICH8 */
- { PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
- { PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
- { PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
+ { PCI_VENDOR_ID_INTEL, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH6 */
+ { PCI_VENDOR_ID_INTEL, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH6M */
+ { PCI_VENDOR_ID_INTEL, 0x27c1, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH7 */
+ { PCI_VENDOR_ID_INTEL, 0x27c5, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH7M */
+ { PCI_VENDOR_ID_INTEL, 0x27c3, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH7R */
+ { PCI_VENDOR_ID_AL, 0x5288, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ULi M5288 */
+ { PCI_VENDOR_ID_INTEL, 0x2681, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ESB2 */
+ { PCI_VENDOR_ID_INTEL, 0x2682, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ESB2 */
+ { PCI_VENDOR_ID_INTEL, 0x2683, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ESB2 */
+ { PCI_VENDOR_ID_INTEL, 0x27c6, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH7-M DH */
+ { PCI_VENDOR_ID_INTEL, 0x2821, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH8 */
+ { PCI_VENDOR_ID_INTEL, 0x2822, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH8 */
+ { PCI_VENDOR_ID_INTEL, 0x2824, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH8 */
+ { PCI_VENDOR_ID_INTEL, 0x2829, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH8M */
+ { PCI_VENDOR_ID_INTEL, 0x282a, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ICH8M */
/* JMicron */
- { PCI_VDEVICE(JMICRON, 0x2360), board_ahci }, /* JMicron JMB360 */
- { PCI_VDEVICE(JMICRON, 0x2361), board_ahci }, /* JMicron JMB361 */
- { PCI_VDEVICE(JMICRON, 0x2363), board_ahci }, /* JMicron JMB363 */
- { PCI_VDEVICE(JMICRON, 0x2365), board_ahci }, /* JMicron JMB365 */
- { PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
+ { 0x197b, 0x2360, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* JMicron JMB360 */
+ { 0x197b, 0x2361, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* JMicron JMB361 */
+ { 0x197b, 0x2363, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* JMicron JMB363 */
+ { 0x197b, 0x2365, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* JMicron JMB365 */
+ { 0x197b, 0x2366, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* JMicron JMB366 */
/* ATI */
- { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
- { PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
+ { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ATI SB600 non-raid */
+ { PCI_VENDOR_ID_ATI, 0x4381, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* ATI SB600 raid */
/* VIA */
- { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
+ { PCI_VENDOR_ID_VIA, 0x3349, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci_vt8251 }, /* VIA VT8251 */
/* NVIDIA */
- { PCI_VDEVICE(NVIDIA, 0x044c), board_ahci }, /* MCP65 */
- { PCI_VDEVICE(NVIDIA, 0x044d), board_ahci }, /* MCP65 */
- { PCI_VDEVICE(NVIDIA, 0x044e), board_ahci }, /* MCP65 */
- { PCI_VDEVICE(NVIDIA, 0x044f), board_ahci }, /* MCP65 */
+ { PCI_VENDOR_ID_NVIDIA, 0x044c, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* MCP65 */
+ { PCI_VENDOR_ID_NVIDIA, 0x044d, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* MCP65 */
+ { PCI_VENDOR_ID_NVIDIA, 0x044e, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* MCP65 */
+ { PCI_VENDOR_ID_NVIDIA, 0x044f, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* MCP65 */
/* SiS */
- { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */
- { PCI_VDEVICE(SI, 0x1185), board_ahci }, /* SiS 966 */
- { PCI_VDEVICE(SI, 0x0186), board_ahci }, /* SiS 968 */
+ { PCI_VENDOR_ID_SI, 0x1184, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* SiS 966 */
+ { PCI_VENDOR_ID_SI, 0x1185, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* SiS 966 */
+ { PCI_VENDOR_ID_SI, 0x0186, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_ahci }, /* SiS 968 */
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/libata-core.c b/trunk/drivers/ata/libata-core.c
index dce65651d858..b4abd6850367 100644
--- a/trunk/drivers/ata/libata-core.c
+++ b/trunk/drivers/ata/libata-core.c
@@ -2340,8 +2340,7 @@ unsigned int ata_busy_sleep (struct ata_port *ap,
if (status & ATA_BUSY)
ata_port_printk(ap, KERN_WARNING,
- "port is slow to respond, please be patient "
- "(Status 0x%x)\n", status);
+ "port is slow to respond, please be patient\n");
timeout = timer_start + tmout;
while ((status & ATA_BUSY) && (time_before(jiffies, timeout))) {
@@ -2351,8 +2350,7 @@ unsigned int ata_busy_sleep (struct ata_port *ap,
if (status & ATA_BUSY) {
ata_port_printk(ap, KERN_ERR, "port failed to respond "
- "(%lu secs, Status 0x%x)\n",
- tmout / HZ, status);
+ "(%lu secs)\n", tmout / HZ);
return 1;
}
@@ -5480,10 +5478,11 @@ int ata_device_add(const struct ata_probe_ent *ent)
int irq_line = ent->irq;
ap = ata_port_add(ent, host, i);
- host->ports[i] = ap;
if (!ap)
goto err_out;
+ host->ports[i] = ap;
+
/* dummy? */
if (ent->dummy_port_mask & (1 << i)) {
ata_port_printk(ap, KERN_INFO, "DUMMY\n");
@@ -5741,7 +5740,7 @@ void ata_host_remove(struct ata_host *host)
/**
* ata_scsi_release - SCSI layer callback hook for host unload
- * @shost: libata host to be unloaded
+ * @host: libata host to be unloaded
*
* Performs all duties necessary to shut down a libata port...
* Kill port kthread, disable port, and release resources.
@@ -5787,7 +5786,6 @@ ata_probe_ent_alloc(struct device *dev, const struct ata_port_info *port)
probe_ent->mwdma_mask = port->mwdma_mask;
probe_ent->udma_mask = port->udma_mask;
probe_ent->port_ops = port->port_ops;
- probe_ent->private_data = port->private_data;
return probe_ent;
}
diff --git a/trunk/drivers/ata/libata-scsi.c b/trunk/drivers/ata/libata-scsi.c
index b0d0cc41f3e8..3986ec8741b4 100644
--- a/trunk/drivers/ata/libata-scsi.c
+++ b/trunk/drivers/ata/libata-scsi.c
@@ -889,7 +889,6 @@ int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
{
struct ata_port *ap = ata_shost_to_port(sdev->host);
struct ata_device *dev;
- unsigned long flags;
int max_depth;
if (queue_depth < 1)
@@ -905,14 +904,6 @@ int ata_scsi_change_queue_depth(struct scsi_device *sdev, int queue_depth)
queue_depth = max_depth;
scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, queue_depth);
-
- spin_lock_irqsave(ap->lock, flags);
- if (queue_depth > 1)
- dev->flags &= ~ATA_DFLAG_NCQ_OFF;
- else
- dev->flags |= ATA_DFLAG_NCQ_OFF;
- spin_unlock_irqrestore(ap->lock, flags);
-
return queue_depth;
}
@@ -1302,8 +1293,7 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc, const u8 *scsicm
*/
goto nothing_to_do;
- if ((dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF |
- ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ) {
+ if ((dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ) {
/* yay, NCQ */
if (!lba_48_ok(block, n_block))
goto out_of_range;
@@ -3184,7 +3174,7 @@ void ata_scsi_dev_rescan(void *data)
/**
* ata_sas_port_alloc - Allocate port for a SAS attached SATA device
- * @host: ATA host container for all SAS ports
+ * @pdev: PCI device that the scsi device is attached to
* @port_info: Information from low-level host driver
* @shost: SCSI host that the scsi device is attached to
*
diff --git a/trunk/drivers/ata/libata-sff.c b/trunk/drivers/ata/libata-sff.c
index 06daaa3736a2..08b3a407473e 100644
--- a/trunk/drivers/ata/libata-sff.c
+++ b/trunk/drivers/ata/libata-sff.c
@@ -828,6 +828,7 @@ ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int
probe_ent->irq = pdev->irq;
probe_ent->irq_flags = IRQF_SHARED;
+ probe_ent->private_data = port[0]->private_data;
if (ports & ATA_PORT_PRIMARY) {
probe_ent->port[p].cmd_addr = pci_resource_start(pdev, 0);
@@ -877,6 +878,7 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev,
return NULL;
probe_ent->n_ports = 2;
+ probe_ent->private_data = port[0]->private_data;
if (port_mask & ATA_PORT_PRIMARY) {
probe_ent->irq = ATA_PRIMARY_IRQ;
@@ -906,8 +908,6 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev,
probe_ent->_host_flags |= ATA_HOST_SIMPLEX;
}
ata_std_ports(&probe_ent->port[1]);
-
- /* FIXME: could be pointing to stack area; must copy */
probe_ent->pinfo2 = port[1];
} else
probe_ent->dummy_port_mask |= ATA_PORT_SECONDARY;
@@ -946,21 +946,35 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
{
struct ata_probe_ent *probe_ent = NULL;
struct ata_port_info *port[2];
- u8 mask;
+ u8 tmp8, mask;
unsigned int legacy_mode = 0;
int disable_dev_on_err = 1;
int rc;
DPRINTK("ENTER\n");
- BUG_ON(n_ports < 1 || n_ports > 2);
-
port[0] = port_info[0];
if (n_ports > 1)
port[1] = port_info[1];
else
port[1] = port[0];
+ if ((port[0]->flags & ATA_FLAG_NO_LEGACY) == 0
+ && (pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ /* TODO: What if one channel is in native mode ... */
+ pci_read_config_byte(pdev, PCI_CLASS_PROG, &tmp8);
+ mask = (1 << 2) | (1 << 0);
+ if ((tmp8 & mask) != mask)
+ legacy_mode = (1 << 3);
+ }
+
+ /* FIXME... */
+ if ((!legacy_mode) && (n_ports > 2)) {
+ printk(KERN_ERR "ata: BUG: native mode, n_ports > 2\n");
+ n_ports = 2;
+ /* For now */
+ }
+
/* FIXME: Really for ATA it isn't safe because the device may be
multi-purpose and we want to leave it alone if it was already
enabled. Secondly for shared use as Arjan says we want refcounting
@@ -973,16 +987,6 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
if (rc)
return rc;
- if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
- u8 tmp8;
-
- /* TODO: What if one channel is in native mode ... */
- pci_read_config_byte(pdev, PCI_CLASS_PROG, &tmp8);
- mask = (1 << 2) | (1 << 0);
- if ((tmp8 & mask) != mask)
- legacy_mode = (1 << 3);
- }
-
rc = pci_request_regions(pdev, DRV_NAME);
if (rc) {
disable_dev_on_err = 0;
@@ -1035,7 +1039,7 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
goto err_out_regions;
}
- /* TODO: If we get no DMA mask we should fall back to PIO */
+ /* FIXME: If we get no DMA mask we should fall back to PIO */
rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
if (rc)
goto err_out_regions;
@@ -1058,17 +1062,13 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
pci_set_master(pdev);
- if (!ata_device_add(probe_ent)) {
- rc = -ENODEV;
- goto err_out_ent;
- }
+ /* FIXME: check ata_device_add return */
+ ata_device_add(probe_ent);
kfree(probe_ent);
return 0;
-err_out_ent:
- kfree(probe_ent);
err_out_regions:
if (legacy_mode & ATA_PORT_PRIMARY)
release_region(ATA_PRIMARY_CMD, 8);
diff --git a/trunk/drivers/ata/pata_ali.c b/trunk/drivers/ata/pata_ali.c
index 1d695df5860a..87af3b5861ab 100644
--- a/trunk/drivers/ata/pata_ali.c
+++ b/trunk/drivers/ata/pata_ali.c
@@ -34,7 +34,7 @@
#include
#define DRV_NAME "pata_ali"
-#define DRV_VERSION "0.6.6"
+#define DRV_VERSION "0.6.5"
/*
* Cable special cases
@@ -630,7 +630,7 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
pci_read_config_byte(pdev, 0x53, &tmp);
if (rev <= 0x20)
tmp &= ~0x02;
- if (rev >= 0xc7)
+ if (rev == 0xc7)
tmp |= 0x03;
else
tmp |= 0x01; /* CD_ROM enable for DMA */
@@ -644,11 +644,10 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
return ata_pci_init_one(pdev, port_info, 2);
}
-static const struct pci_device_id ali[] = {
- { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5228), },
- { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5229), },
-
- { },
+static struct pci_device_id ali[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5228), },
+ { PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M5229), },
+ { 0, },
};
static struct pci_driver ali_pci_driver = {
diff --git a/trunk/drivers/ata/pata_amd.c b/trunk/drivers/ata/pata_amd.c
index 29234c897118..599ee266722c 100644
--- a/trunk/drivers/ata/pata_amd.c
+++ b/trunk/drivers/ata/pata_amd.c
@@ -662,28 +662,27 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
}
static const struct pci_device_id amd[] = {
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_COBRA_7401), 0 },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7409), 1 },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_VIPER_7411), 3 },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_OPUS_7441), 4 },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_8111_IDE), 5 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE), 7 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE), 8 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE), 8 },
- { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CS5536_IDE), 9 },
-
- { },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_COBRA_7401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7409, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
+ { 0, },
};
static struct pci_driver amd_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = amd,
.probe = amd_init_one,
.remove = ata_pci_remove_one
@@ -699,6 +698,7 @@ static void __exit amd_exit(void)
pci_unregister_driver(&amd_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for AMD PATA IDE");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_artop.c b/trunk/drivers/ata/pata_artop.c
index 690828eb5226..c4ccb75a4f1d 100644
--- a/trunk/drivers/ata/pata_artop.c
+++ b/trunk/drivers/ata/pata_artop.c
@@ -426,7 +426,7 @@ static int artop_init_one (struct pci_dev *pdev, const struct pci_device_id *id)
.port_ops = &artop6260_ops,
};
struct ata_port_info *port_info[2];
- struct ata_port_info *info = NULL;
+ struct ata_port_info *info;
int ports = 2;
if (!printed_version++)
@@ -470,20 +470,16 @@ static int artop_init_one (struct pci_dev *pdev, const struct pci_device_id *id)
pci_write_config_byte(pdev, 0x4a, (reg & ~0x01) | 0x80);
}
-
- BUG_ON(info == NULL);
-
port_info[0] = port_info[1] = info;
return ata_pci_init_one(pdev, port_info, ports);
}
static const struct pci_device_id artop_pci_tbl[] = {
- { PCI_VDEVICE(ARTOP, 0x0005), 0 },
- { PCI_VDEVICE(ARTOP, 0x0006), 1 },
- { PCI_VDEVICE(ARTOP, 0x0007), 1 },
- { PCI_VDEVICE(ARTOP, 0x0008), 2 },
- { PCI_VDEVICE(ARTOP, 0x0009), 2 },
-
+ { 0x1191, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { 0x1191, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+ { 0x1191, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+ { 0x1191, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
+ { 0x1191, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
{ } /* terminate list */
};
@@ -504,6 +500,7 @@ static void __exit artop_exit(void)
pci_unregister_driver(&artop_pci_driver);
}
+
module_init(artop_init);
module_exit(artop_exit);
diff --git a/trunk/drivers/ata/pata_atiixp.c b/trunk/drivers/ata/pata_atiixp.c
index 1ce28d2125f4..6c2269b6bd3c 100644
--- a/trunk/drivers/ata/pata_atiixp.c
+++ b/trunk/drivers/ata/pata_atiixp.c
@@ -267,13 +267,12 @@ static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id atiixp[] = {
- { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP200_IDE), },
- { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP300_IDE), },
- { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), },
- { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), },
-
- { },
+static struct pci_device_id atiixp[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE), },
+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE), },
+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), },
+ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), },
+ { 0, },
};
static struct pci_driver atiixp_pci_driver = {
@@ -294,6 +293,7 @@ static void __exit atiixp_exit(void)
pci_unregister_driver(&atiixp_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for ATI IXP200/300/400");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_cmd64x.c b/trunk/drivers/ata/pata_cmd64x.c
index b9bbd1d454bf..e92b0ef43ec5 100644
--- a/trunk/drivers/ata/pata_cmd64x.c
+++ b/trunk/drivers/ata/pata_cmd64x.c
@@ -468,17 +468,16 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
return ata_pci_init_one(pdev, port_info, 2);
}
-static const struct pci_device_id cmd64x[] = {
- { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_643), 0 },
- { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_646), 1 },
- { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_648), 4 },
- { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_649), 5 },
-
- { },
+static struct pci_device_id cmd64x[] = {
+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5},
+ { 0, },
};
static struct pci_driver cmd64x_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = cmd64x,
.probe = cmd64x_init_one,
.remove = ata_pci_remove_one
@@ -489,11 +488,13 @@ static int __init cmd64x_init(void)
return pci_register_driver(&cmd64x_pci_driver);
}
+
static void __exit cmd64x_exit(void)
{
pci_unregister_driver(&cmd64x_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for CMD64x series PATA controllers");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_cs5520.c b/trunk/drivers/ata/pata_cs5520.c
index 2cd3c0ff76df..a6c6cebd0dae 100644
--- a/trunk/drivers/ata/pata_cs5520.c
+++ b/trunk/drivers/ata/pata_cs5520.c
@@ -299,11 +299,10 @@ static void __devexit cs5520_remove_one(struct pci_dev *pdev)
/* For now keep DMA off. We can set it for all but A rev CS5510 once the
core ATA code can handle it */
-static const struct pci_device_id pata_cs5520[] = {
- { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5510), },
- { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5520), },
-
- { },
+static struct pci_device_id pata_cs5520[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510), },
+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520), },
+ { 0, },
};
static struct pci_driver cs5520_pci_driver = {
@@ -313,6 +312,7 @@ static struct pci_driver cs5520_pci_driver = {
.remove = cs5520_remove_one
};
+
static int __init cs5520_init(void)
{
return pci_register_driver(&cs5520_pci_driver);
diff --git a/trunk/drivers/ata/pata_cs5530.c b/trunk/drivers/ata/pata_cs5530.c
index a07cc81ef791..7bba4d954e9c 100644
--- a/trunk/drivers/ata/pata_cs5530.c
+++ b/trunk/drivers/ata/pata_cs5530.c
@@ -353,14 +353,13 @@ static int cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return -ENODEV;
}
-static const struct pci_device_id cs5530[] = {
- { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), },
-
- { },
+static struct pci_device_id cs5530[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), },
+ { 0, },
};
static struct pci_driver cs5530_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = cs5530,
.probe = cs5530_init_one,
.remove = ata_pci_remove_one
@@ -371,11 +370,13 @@ static int __init cs5530_init(void)
return pci_register_driver(&cs5530_pci_driver);
}
+
static void __exit cs5530_exit(void)
{
pci_unregister_driver(&cs5530_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for the Cyrix/NS/AMD 5530");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_cs5535.c b/trunk/drivers/ata/pata_cs5535.c
index f8def3f9c618..d64fcdceaf01 100644
--- a/trunk/drivers/ata/pata_cs5535.c
+++ b/trunk/drivers/ata/pata_cs5535.c
@@ -257,10 +257,9 @@ static int cs5535_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, ports, 1);
}
-static const struct pci_device_id cs5535[] = {
- { PCI_VDEVICE(NS, 0x002D), },
-
- { },
+static struct pci_device_id cs5535[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_NS, 0x002D), },
+ { 0, },
};
static struct pci_driver cs5535_pci_driver = {
@@ -275,11 +274,13 @@ static int __init cs5535_init(void)
return pci_register_driver(&cs5535_pci_driver);
}
+
static void __exit cs5535_exit(void)
{
pci_unregister_driver(&cs5535_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox, Jens Altmann, Wolfgan Zuleger, Alexander Kiausch");
MODULE_DESCRIPTION("low-level driver for the NS/AMD 5530");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_cypress.c b/trunk/drivers/ata/pata_cypress.c
index 247b43608b14..dfa5ac539048 100644
--- a/trunk/drivers/ata/pata_cypress.c
+++ b/trunk/drivers/ata/pata_cypress.c
@@ -184,8 +184,8 @@ static int cy82c693_init_one(struct pci_dev *pdev, const struct pci_device_id *i
};
static struct ata_port_info *port_info[1] = { &info };
- /* Devfn 1 is the ATA primary. The secondary is magic and on devfn2.
- For the moment we don't handle the secondary. FIXME */
+ /* Devfn 1 is the ATA primary. The secondary is magic and on devfn2. For the
+ moment we don't handle the secondary. FIXME */
if (PCI_FUNC(pdev->devfn) != 1)
return -ENODEV;
@@ -193,14 +193,13 @@ static int cy82c693_init_one(struct pci_dev *pdev, const struct pci_device_id *i
return ata_pci_init_one(pdev, port_info, 1);
}
-static const struct pci_device_id cy82c693[] = {
- { PCI_VDEVICE(CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693), },
-
- { },
+static struct pci_device_id cy82c693[] = {
+ { PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { 0, },
};
static struct pci_driver cy82c693_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = cy82c693,
.probe = cy82c693_init_one,
.remove = ata_pci_remove_one
diff --git a/trunk/drivers/ata/pata_efar.c b/trunk/drivers/ata/pata_efar.c
index ef18c60fe140..95cd1ca181f5 100644
--- a/trunk/drivers/ata/pata_efar.c
+++ b/trunk/drivers/ata/pata_efar.c
@@ -305,8 +305,7 @@ static int efar_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
}
static const struct pci_device_id efar_pci_tbl[] = {
- { PCI_VDEVICE(EFAR, 0x9130), },
-
+ { 0x1055, 0x9130, PCI_ANY_ID, PCI_ANY_ID, },
{ } /* terminate list */
};
@@ -327,6 +326,7 @@ static void __exit efar_exit(void)
pci_unregister_driver(&efar_pci_driver);
}
+
module_init(efar_init);
module_exit(efar_exit);
diff --git a/trunk/drivers/ata/pata_hpt366.c b/trunk/drivers/ata/pata_hpt366.c
index 6d3e4c0f15fe..8c757438f350 100644
--- a/trunk/drivers/ata/pata_hpt366.c
+++ b/trunk/drivers/ata/pata_hpt366.c
@@ -444,14 +444,13 @@ static int hpt36x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id hpt36x[] = {
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
-
- { },
+static struct pci_device_id hpt36x[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
+ { 0, },
};
static struct pci_driver hpt36x_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = hpt36x,
.probe = hpt36x_init_one,
.remove = ata_pci_remove_one
diff --git a/trunk/drivers/ata/pata_hpt37x.c b/trunk/drivers/ata/pata_hpt37x.c
index 7350443948c1..10318c0012ef 100644
--- a/trunk/drivers/ata/pata_hpt37x.c
+++ b/trunk/drivers/ata/pata_hpt37x.c
@@ -1219,18 +1219,17 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id hpt37x[] = {
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302), },
-
- { },
+static struct pci_device_id hpt37x[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT371), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT374), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT302), },
+ { 0, },
};
static struct pci_driver hpt37x_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = hpt37x,
.probe = hpt37x_init_one,
.remove = ata_pci_remove_one
@@ -1241,11 +1240,13 @@ static int __init hpt37x_init(void)
return pci_register_driver(&hpt37x_pci_driver);
}
+
static void __exit hpt37x_exit(void)
{
pci_unregister_driver(&hpt37x_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_hpt3x2n.c b/trunk/drivers/ata/pata_hpt3x2n.c
index 58cfb2bc8098..5c5d4f6ab901 100644
--- a/trunk/drivers/ata/pata_hpt3x2n.c
+++ b/trunk/drivers/ata/pata_hpt3x2n.c
@@ -560,17 +560,16 @@ static int hpt3x2n_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id hpt3x2n[] = {
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302), },
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372N), },
-
- { },
+static struct pci_device_id hpt3x2n[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT366), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT302), },
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT372N), },
+ { 0, },
};
static struct pci_driver hpt3x2n_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = hpt3x2n,
.probe = hpt3x2n_init_one,
.remove = ata_pci_remove_one
@@ -581,11 +580,13 @@ static int __init hpt3x2n_init(void)
return pci_register_driver(&hpt3x2n_pci_driver);
}
+
static void __exit hpt3x2n_exit(void)
{
pci_unregister_driver(&hpt3x2n_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT3x2n/30x");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_hpt3x3.c b/trunk/drivers/ata/pata_hpt3x3.c
index 3334d72e251b..1f084ab1ccc6 100644
--- a/trunk/drivers/ata/pata_hpt3x3.c
+++ b/trunk/drivers/ata/pata_hpt3x3.c
@@ -192,14 +192,13 @@ static int hpt3x3_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id hpt3x3[] = {
- { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT343), },
-
- { },
+static struct pci_device_id hpt3x3[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_TTI, PCI_DEVICE_ID_TTI_HPT343), },
+ { 0, },
};
static struct pci_driver hpt3x3_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = hpt3x3,
.probe = hpt3x3_init_one,
.remove = ata_pci_remove_one
diff --git a/trunk/drivers/ata/pata_it821x.c b/trunk/drivers/ata/pata_it821x.c
index 18ff3e59a89b..82a46ff40000 100644
--- a/trunk/drivers/ata/pata_it821x.c
+++ b/trunk/drivers/ata/pata_it821x.c
@@ -808,15 +808,14 @@ static int it821x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
return ata_pci_init_one(pdev, port_info, 2);
}
-static const struct pci_device_id it821x[] = {
- { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), },
- { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), },
-
- { },
+static struct pci_device_id it821x[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8211), },
+ { PCI_DEVICE(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8212), },
+ { 0, },
};
static struct pci_driver it821x_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = it821x,
.probe = it821x_init_one,
.remove = ata_pci_remove_one
@@ -827,11 +826,13 @@ static int __init it821x_init(void)
return pci_register_driver(&it821x_pci_driver);
}
+
static void __exit it821x_exit(void)
{
pci_unregister_driver(&it821x_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for the IT8211/IT8212 IDE RAID controller");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_jmicron.c b/trunk/drivers/ata/pata_jmicron.c
index 52a2bdf3c38d..be3a866b111f 100644
--- a/trunk/drivers/ata/pata_jmicron.c
+++ b/trunk/drivers/ata/pata_jmicron.c
@@ -229,12 +229,11 @@ static int jmicron_init_one (struct pci_dev *pdev, const struct pci_device_id *i
}
static const struct pci_device_id jmicron_pci_tbl[] = {
- { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB361), 361},
- { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB363), 363},
- { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB365), 365},
- { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB366), 366},
- { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB368), 368},
-
+ { PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB361), 361},
+ { PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB363), 363},
+ { PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB365), 365},
+ { PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB366), 366},
+ { PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB368), 368},
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/pata_mpiix.c b/trunk/drivers/ata/pata_mpiix.c
index 9dfe3e9abea3..3c65393c1f01 100644
--- a/trunk/drivers/ata/pata_mpiix.c
+++ b/trunk/drivers/ata/pata_mpiix.c
@@ -274,10 +274,11 @@ static void __devexit mpiix_remove_one(struct pci_dev *pdev)
dev_set_drvdata(dev, NULL);
}
-static const struct pci_device_id mpiix[] = {
- { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_82371MX), },
- { },
+
+static const struct pci_device_id mpiix[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX), },
+ { 0, },
};
static struct pci_driver mpiix_pci_driver = {
@@ -292,11 +293,13 @@ static int __init mpiix_init(void)
return pci_register_driver(&mpiix_pci_driver);
}
+
static void __exit mpiix_exit(void)
{
pci_unregister_driver(&mpiix_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Intel MPIIX");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_netcell.c b/trunk/drivers/ata/pata_netcell.c
index f5672de99c22..76eb9c90bee1 100644
--- a/trunk/drivers/ata/pata_netcell.c
+++ b/trunk/drivers/ata/pata_netcell.c
@@ -142,8 +142,7 @@ static int netcell_init_one (struct pci_dev *pdev, const struct pci_device_id *e
}
static const struct pci_device_id netcell_pci_tbl[] = {
- { PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), },
-
+ { PCI_DEVICE(PCI_VENDOR_ID_NETCELL, PCI_DEVICE_ID_REVOLUTION), },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/pata_ns87410.c b/trunk/drivers/ata/pata_ns87410.c
index 2a3dbeed89b4..2005a95f48f6 100644
--- a/trunk/drivers/ata/pata_ns87410.c
+++ b/trunk/drivers/ata/pata_ns87410.c
@@ -200,13 +200,12 @@ static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id)
}
static const struct pci_device_id ns87410[] = {
- { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_87410), },
-
- { },
+ { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410), },
+ { 0, },
};
static struct pci_driver ns87410_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = ns87410,
.probe = ns87410_init_one,
.remove = ata_pci_remove_one
@@ -217,11 +216,13 @@ static int __init ns87410_init(void)
return pci_register_driver(&ns87410_pci_driver);
}
+
static void __exit ns87410_exit(void)
{
pci_unregister_driver(&ns87410_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Nat Semi 87410");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_oldpiix.c b/trunk/drivers/ata/pata_oldpiix.c
index fc947dfecd73..31a285ca88dc 100644
--- a/trunk/drivers/ata/pata_oldpiix.c
+++ b/trunk/drivers/ata/pata_oldpiix.c
@@ -303,8 +303,7 @@ static int oldpiix_init_one (struct pci_dev *pdev, const struct pci_device_id *e
}
static const struct pci_device_id oldpiix_pci_tbl[] = {
- { PCI_VDEVICE(INTEL, 0x1230), },
-
+ { PCI_DEVICE(0x8086, 0x1230), },
{ } /* terminate list */
};
@@ -325,6 +324,7 @@ static void __exit oldpiix_exit(void)
pci_unregister_driver(&oldpiix_pci_driver);
}
+
module_init(oldpiix_init);
module_exit(oldpiix_exit);
diff --git a/trunk/drivers/ata/pata_opti.c b/trunk/drivers/ata/pata_opti.c
index a7320ba15575..57fe21f3a975 100644
--- a/trunk/drivers/ata/pata_opti.c
+++ b/trunk/drivers/ata/pata_opti.c
@@ -256,14 +256,13 @@ static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id)
}
static const struct pci_device_id opti[] = {
- { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C621), 0 },
- { PCI_VDEVICE(OPTI, PCI_DEVICE_ID_OPTI_82C825), 1 },
-
- { },
+ { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+ { 0, },
};
static struct pci_driver opti_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = opti,
.probe = opti_init_one,
.remove = ata_pci_remove_one
@@ -274,6 +273,7 @@ static int __init opti_init(void)
return pci_register_driver(&opti_pci_driver);
}
+
static void __exit opti_exit(void)
{
pci_unregister_driver(&opti_pci_driver);
diff --git a/trunk/drivers/ata/pata_optidma.c b/trunk/drivers/ata/pata_optidma.c
index c6906b4215de..7296a20cd107 100644
--- a/trunk/drivers/ata/pata_optidma.c
+++ b/trunk/drivers/ata/pata_optidma.c
@@ -512,13 +512,12 @@ static int optidma_init_one(struct pci_dev *dev, const struct pci_device_id *id)
}
static const struct pci_device_id optidma[] = {
- { PCI_VDEVICE(OPTI, 0xD568), }, /* Opti 82C700 */
-
- { },
+ { PCI_DEVICE(0x1045, 0xD568), }, /* Opti 82C700 */
+ { 0, },
};
static struct pci_driver optidma_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = optidma,
.probe = optidma_init_one,
.remove = ata_pci_remove_one
@@ -529,11 +528,13 @@ static int __init optidma_init(void)
return pci_register_driver(&optidma_pci_driver);
}
+
static void __exit optidma_exit(void)
{
pci_unregister_driver(&optidma_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Opti Firestar/Firestar Plus");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_pcmcia.c b/trunk/drivers/ata/pata_pcmcia.c
index e93ea2702c73..cb501e145a42 100644
--- a/trunk/drivers/ata/pata_pcmcia.c
+++ b/trunk/drivers/ata/pata_pcmcia.c
@@ -42,7 +42,7 @@
#define DRV_NAME "pata_pcmcia"
-#define DRV_VERSION "0.2.11"
+#define DRV_VERSION "0.2.9"
/*
* Private data structure to glue stuff together
@@ -355,8 +355,6 @@ static struct pcmcia_device_id pcmcia_devices[] = {
PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "04/05/06", 0x43d74cb4, 0x6a22777d),
PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6),
PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
- PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443),
- PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
diff --git a/trunk/drivers/ata/pata_pdc2027x.c b/trunk/drivers/ata/pata_pdc2027x.c
index d894d9918b1d..bd4ed6734edc 100644
--- a/trunk/drivers/ata/pata_pdc2027x.c
+++ b/trunk/drivers/ata/pata_pdc2027x.c
@@ -108,14 +108,13 @@ static struct pdc2027x_udma_timing {
};
static const struct pci_device_id pdc2027x_pci_tbl[] = {
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20268), PDC_UDMA_100 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20269), PDC_UDMA_133 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20270), PDC_UDMA_100 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20271), PDC_UDMA_133 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20275), PDC_UDMA_133 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20276), PDC_UDMA_133 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20277), PDC_UDMA_133 },
-
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_100 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20269, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_100 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20271, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20275, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20276, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
+ { PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20277, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PDC_UDMA_133 },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/pata_pdc202xx_old.c b/trunk/drivers/ata/pata_pdc202xx_old.c
index 5ba9eb20a6c2..48f43432764e 100644
--- a/trunk/drivers/ata/pata_pdc202xx_old.c
+++ b/trunk/drivers/ata/pata_pdc202xx_old.c
@@ -385,18 +385,17 @@ static int pdc_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 2);
}
-static const struct pci_device_id pdc[] = {
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20263), 1 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20265), 2 },
- { PCI_VDEVICE(PROMISE, PCI_DEVICE_ID_PROMISE_20267), 2 },
-
- { },
+static struct pci_device_id pdc[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246), 0},
+ { PCI_DEVICE(PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262), 1},
+ { PCI_DEVICE(PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20263), 1},
+ { PCI_DEVICE(PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265), 2},
+ { PCI_DEVICE(PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267), 2},
+ { 0, },
};
static struct pci_driver pdc_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = pdc,
.probe = pdc_init_one,
.remove = ata_pci_remove_one
@@ -407,11 +406,13 @@ static int __init pdc_init(void)
return pci_register_driver(&pdc_pci_driver);
}
+
static void __exit pdc_exit(void)
{
pci_unregister_driver(&pdc_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Promise 2024x and 20262-20267");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_radisys.c b/trunk/drivers/ata/pata_radisys.c
index 1af83d7694d5..c20bcf43ed6d 100644
--- a/trunk/drivers/ata/pata_radisys.c
+++ b/trunk/drivers/ata/pata_radisys.c
@@ -300,8 +300,7 @@ static int radisys_init_one (struct pci_dev *pdev, const struct pci_device_id *e
}
static const struct pci_device_id radisys_pci_tbl[] = {
- { PCI_VDEVICE(RADISYS, 0x8201), },
-
+ { 0x1331, 0x8201, PCI_ANY_ID, PCI_ANY_ID, },
{ } /* terminate list */
};
@@ -322,6 +321,7 @@ static void __exit radisys_exit(void)
pci_unregister_driver(&radisys_pci_driver);
}
+
module_init(radisys_init);
module_exit(radisys_exit);
diff --git a/trunk/drivers/ata/pata_rz1000.c b/trunk/drivers/ata/pata_rz1000.c
index 4533b6357d99..eccc6fd45032 100644
--- a/trunk/drivers/ata/pata_rz1000.c
+++ b/trunk/drivers/ata/pata_rz1000.c
@@ -170,20 +170,20 @@ static int rz1000_init_one (struct pci_dev *pdev, const struct pci_device_id *en
return -ENODEV;
}
-static const struct pci_device_id pata_rz1000[] = {
- { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), },
- { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001), },
-
- { },
+static struct pci_device_id pata_rz1000[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), },
+ { PCI_DEVICE(PCI_VENDOR_ID_PCTECH, PCI_DEVICE_ID_PCTECH_RZ1001), },
+ { 0, },
};
static struct pci_driver rz1000_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = pata_rz1000,
.probe = rz1000_init_one,
.remove = ata_pci_remove_one
};
+
static int __init rz1000_init(void)
{
return pci_register_driver(&rz1000_pci_driver);
diff --git a/trunk/drivers/ata/pata_sc1200.c b/trunk/drivers/ata/pata_sc1200.c
index 067d9d223e35..107e6cd3dc0d 100644
--- a/trunk/drivers/ata/pata_sc1200.c
+++ b/trunk/drivers/ata/pata_sc1200.c
@@ -253,14 +253,13 @@ static int sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id)
return ata_pci_init_one(dev, port_info, 1);
}
-static const struct pci_device_id sc1200[] = {
- { PCI_VDEVICE(NS, PCI_DEVICE_ID_NS_SCx200_IDE), },
-
- { },
+static struct pci_device_id sc1200[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_SCx200_IDE), },
+ { 0, },
};
static struct pci_driver sc1200_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = sc1200,
.probe = sc1200_init_one,
.remove = ata_pci_remove_one
@@ -271,11 +270,13 @@ static int __init sc1200_init(void)
return pci_register_driver(&sc1200_pci_driver);
}
+
static void __exit sc1200_exit(void)
{
pci_unregister_driver(&sc1200_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox, Mark Lord");
MODULE_DESCRIPTION("low-level driver for the NS/AMD SC1200");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_serverworks.c b/trunk/drivers/ata/pata_serverworks.c
index 5bbf76ec14a4..a5c8d7e121d1 100644
--- a/trunk/drivers/ata/pata_serverworks.c
+++ b/trunk/drivers/ata/pata_serverworks.c
@@ -553,14 +553,13 @@ static int serverworks_init_one(struct pci_dev *pdev, const struct pci_device_id
return ata_pci_init_one(pdev, port_info, ports);
}
-static const struct pci_device_id serverworks[] = {
- { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0},
- { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE), 2},
- { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE), 2},
- { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2), 2},
- { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE), 2},
-
- { },
+static struct pci_device_id serverworks[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0},
+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE), 2},
+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE), 2},
+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2), 2},
+ { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE), 2},
+ { 0, },
};
static struct pci_driver serverworks_pci_driver = {
@@ -575,11 +574,13 @@ static int __init serverworks_init(void)
return pci_register_driver(&serverworks_pci_driver);
}
+
static void __exit serverworks_exit(void)
{
pci_unregister_driver(&serverworks_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Serverworks OSB4/CSB5/CSB6");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_sil680.c b/trunk/drivers/ata/pata_sil680.c
index 4a2b72b4be8a..c8b2e26db70d 100644
--- a/trunk/drivers/ata/pata_sil680.c
+++ b/trunk/drivers/ata/pata_sil680.c
@@ -348,13 +348,12 @@ static int sil680_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
}
static const struct pci_device_id sil680[] = {
- { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), },
-
- { },
+ { PCI_DEVICE(PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680), },
+ { 0, },
};
static struct pci_driver sil680_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = sil680,
.probe = sil680_init_one,
.remove = ata_pci_remove_one
@@ -365,11 +364,13 @@ static int __init sil680_init(void)
return pci_register_driver(&sil680_pci_driver);
}
+
static void __exit sil680_exit(void)
{
pci_unregister_driver(&sil680_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for SI680 PATA");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_sis.c b/trunk/drivers/ata/pata_sis.c
index b9ffafb4198c..17791e2785f9 100644
--- a/trunk/drivers/ata/pata_sis.c
+++ b/trunk/drivers/ata/pata_sis.c
@@ -988,9 +988,8 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
}
static const struct pci_device_id sis_pci_tbl[] = {
- { PCI_VDEVICE(SI, 0x5513), }, /* SiS 5513 */
- { PCI_VDEVICE(SI, 0x5518), }, /* SiS 5518 */
-
+ { PCI_DEVICE(PCI_VENDOR_ID_SI, 0x5513), }, /* SiS 5513 */
+ { PCI_DEVICE(PCI_VENDOR_ID_SI, 0x5518), }, /* SiS 5518 */
{ }
};
@@ -1011,6 +1010,7 @@ static void __exit sis_exit(void)
pci_unregister_driver(&sis_pci_driver);
}
+
module_init(sis_init);
module_exit(sis_exit);
diff --git a/trunk/drivers/ata/pata_sl82c105.c b/trunk/drivers/ata/pata_sl82c105.c
index 08a6dc88676f..5b762acc5687 100644
--- a/trunk/drivers/ata/pata_sl82c105.c
+++ b/trunk/drivers/ata/pata_sl82c105.c
@@ -351,10 +351,9 @@ static int sl82c105_init_one(struct pci_dev *dev, const struct pci_device_id *id
return ata_pci_init_one(dev, port_info, 1); /* For now */
}
-static const struct pci_device_id sl82c105[] = {
- { PCI_VDEVICE(WINBOND, PCI_DEVICE_ID_WINBOND_82C105), },
-
- { },
+static struct pci_device_id sl82c105[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105), },
+ { 0, },
};
static struct pci_driver sl82c105_pci_driver = {
@@ -369,11 +368,13 @@ static int __init sl82c105_init(void)
return pci_register_driver(&sl82c105_pci_driver);
}
+
static void __exit sl82c105_exit(void)
{
pci_unregister_driver(&sl82c105_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Sl82c105");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_triflex.c b/trunk/drivers/ata/pata_triflex.c
index 9640f80e8b0d..a954ed93a40c 100644
--- a/trunk/drivers/ata/pata_triflex.c
+++ b/trunk/drivers/ata/pata_triflex.c
@@ -248,13 +248,13 @@ static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id)
}
static const struct pci_device_id triflex[] = {
- { PCI_VDEVICE(COMPAQ, PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE), },
-
- { },
+ { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
+ { 0, },
};
static struct pci_driver triflex_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = triflex,
.probe = triflex_init_one,
.remove = ata_pci_remove_one
@@ -265,11 +265,13 @@ static int __init triflex_init(void)
return pci_register_driver(&triflex_pci_driver);
}
+
static void __exit triflex_exit(void)
{
pci_unregister_driver(&triflex_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for Compaq Triflex");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pata_via.c b/trunk/drivers/ata/pata_via.c
index 1e7be9eee9c3..7b5dd2343b9a 100644
--- a/trunk/drivers/ata/pata_via.c
+++ b/trunk/drivers/ata/pata_via.c
@@ -529,16 +529,15 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
}
static const struct pci_device_id via[] = {
- { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), },
- { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), },
- { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), },
- { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), },
-
- { },
+ { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1), },
+ { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1), },
+ { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_6410), },
+ { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), },
+ { 0, },
};
static struct pci_driver via_pci_driver = {
- .name = DRV_NAME,
+ .name = DRV_NAME,
.id_table = via,
.probe = via_init_one,
.remove = ata_pci_remove_one
@@ -549,11 +548,13 @@ static int __init via_init(void)
return pci_register_driver(&via_pci_driver);
}
+
static void __exit via_exit(void)
{
pci_unregister_driver(&via_pci_driver);
}
+
MODULE_AUTHOR("Alan Cox");
MODULE_DESCRIPTION("low-level driver for VIA PATA");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/pdc_adma.c b/trunk/drivers/ata/pdc_adma.c
index 81f3d219e70e..0e23ecb77bc2 100644
--- a/trunk/drivers/ata/pdc_adma.c
+++ b/trunk/drivers/ata/pdc_adma.c
@@ -192,7 +192,8 @@ static struct ata_port_info adma_port_info[] = {
};
static const struct pci_device_id adma_ata_pci_tbl[] = {
- { PCI_VDEVICE(PDC, 0x1841), board_1841_idx },
+ { PCI_VENDOR_ID_PDC, 0x1841, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_1841_idx },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/sata_mv.c b/trunk/drivers/ata/sata_mv.c
index e6aa1a86d5cf..c01496df4a99 100644
--- a/trunk/drivers/ata/sata_mv.c
+++ b/trunk/drivers/ata/sata_mv.c
@@ -533,20 +533,19 @@ static const struct ata_port_info mv_port_info[] = {
};
static const struct pci_device_id mv_pci_tbl[] = {
- { PCI_VDEVICE(MARVELL, 0x5040), chip_504x },
- { PCI_VDEVICE(MARVELL, 0x5041), chip_504x },
- { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 },
- { PCI_VDEVICE(MARVELL, 0x5081), chip_508x },
-
- { PCI_VDEVICE(MARVELL, 0x6040), chip_604x },
- { PCI_VDEVICE(MARVELL, 0x6041), chip_604x },
- { PCI_VDEVICE(MARVELL, 0x6042), chip_6042 },
- { PCI_VDEVICE(MARVELL, 0x6080), chip_608x },
- { PCI_VDEVICE(MARVELL, 0x6081), chip_608x },
-
- { PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x },
-
- { } /* terminate list */
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5040), 0, 0, chip_504x},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5041), 0, 0, chip_504x},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5080), 0, 0, chip_5080},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5081), 0, 0, chip_508x},
+
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6040), 0, 0, chip_604x},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6041), 0, 0, chip_604x},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6042), 0, 0, chip_6042},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6080), 0, 0, chip_608x},
+ {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6081), 0, 0, chip_608x},
+
+ {PCI_DEVICE(PCI_VENDOR_ID_ADAPTEC2, 0x0241), 0, 0, chip_604x},
+ {} /* terminate list */
};
static struct pci_driver mv_pci_driver = {
diff --git a/trunk/drivers/ata/sata_nv.c b/trunk/drivers/ata/sata_nv.c
index d09d20a17790..8cd730fe5dd3 100644
--- a/trunk/drivers/ata/sata_nv.c
+++ b/trunk/drivers/ata/sata_nv.c
@@ -106,32 +106,45 @@ enum nv_host_type
};
static const struct pci_device_id nv_pci_tbl[] = {
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), NFORCE2 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), NFORCE3 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), NFORCE3 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA), CK804 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2), CK804 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA), CK804 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2), CK804 },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2), GENERIC },
- { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3), GENERIC },
- { PCI_VDEVICE(NVIDIA, 0x045c), GENERIC },
- { PCI_VDEVICE(NVIDIA, 0x045d), GENERIC },
- { PCI_VDEVICE(NVIDIA, 0x045e), GENERIC },
- { PCI_VDEVICE(NVIDIA, 0x045f), GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE2 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, 0x045c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, 0x045d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, 0x045e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
+ { PCI_VENDOR_ID_NVIDIA, 0x045f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC },
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_STORAGE_RAID<<8, 0xffff00, GENERIC },
-
- { } /* terminate list */
+ { 0, } /* terminate list */
};
static struct pci_driver nv_pci_driver = {
diff --git a/trunk/drivers/ata/sata_promise.c b/trunk/drivers/ata/sata_promise.c
index 15c9437710fc..d627812ea73d 100644
--- a/trunk/drivers/ata/sata_promise.c
+++ b/trunk/drivers/ata/sata_promise.c
@@ -234,31 +234,48 @@ static const struct ata_port_info pdc_port_info[] = {
};
static const struct pci_device_id pdc_ata_pci_tbl[] = {
- { PCI_VDEVICE(PROMISE, 0x3371), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3570), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3571), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3373), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3375), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3376), board_2037x },
- { PCI_VDEVICE(PROMISE, 0x3574), board_2057x },
- { PCI_VDEVICE(PROMISE, 0x3d75), board_2057x },
- { PCI_VDEVICE(PROMISE, 0x3d73), board_2037x },
-
- { PCI_VDEVICE(PROMISE, 0x3318), board_20319 },
- { PCI_VDEVICE(PROMISE, 0x3319), board_20319 },
- { PCI_VDEVICE(PROMISE, 0x3515), board_20319 },
- { PCI_VDEVICE(PROMISE, 0x3519), board_20319 },
- { PCI_VDEVICE(PROMISE, 0x3d17), board_20319 },
- { PCI_VDEVICE(PROMISE, 0x3d18), board_40518 },
-
- { PCI_VDEVICE(PROMISE, 0x6629), board_20619 },
+ { PCI_VENDOR_ID_PROMISE, 0x3371, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3570, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3571, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3373, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3375, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3376, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+ { PCI_VENDOR_ID_PROMISE, 0x3574, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2057x },
+ { PCI_VENDOR_ID_PROMISE, 0x3d75, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2057x },
+ { PCI_VENDOR_ID_PROMISE, 0x3d73, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2037x },
+
+ { PCI_VENDOR_ID_PROMISE, 0x3318, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20319 },
+ { PCI_VENDOR_ID_PROMISE, 0x3319, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20319 },
+ { PCI_VENDOR_ID_PROMISE, 0x3515, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20319 },
+ { PCI_VENDOR_ID_PROMISE, 0x3519, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20319 },
+ { PCI_VENDOR_ID_PROMISE, 0x3d17, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20319 },
+ { PCI_VENDOR_ID_PROMISE, 0x3d18, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_40518 },
+
+ { PCI_VENDOR_ID_PROMISE, 0x6629, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20619 },
/* TODO: remove all associated board_20771 code, as it completely
* duplicates board_2037x code, unless reason for separation can be
* divined.
*/
#if 0
- { PCI_VDEVICE(PROMISE, 0x3570), board_20771 },
+ { PCI_VENDOR_ID_PROMISE, 0x3570, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20771 },
#endif
{ } /* terminate list */
diff --git a/trunk/drivers/ata/sata_qstor.c b/trunk/drivers/ata/sata_qstor.c
index 7f6cc3c07de5..fa29dfe2a7b5 100644
--- a/trunk/drivers/ata/sata_qstor.c
+++ b/trunk/drivers/ata/sata_qstor.c
@@ -185,7 +185,8 @@ static const struct ata_port_info qs_port_info[] = {
};
static const struct pci_device_id qs_ata_pci_tbl[] = {
- { PCI_VDEVICE(PDC, 0x2068), board_2068_idx },
+ { PCI_VENDOR_ID_PDC, 0x2068, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_2068_idx },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/sata_sil.c b/trunk/drivers/ata/sata_sil.c
index 3d9fa1cc834d..c63dbabc0cd9 100644
--- a/trunk/drivers/ata/sata_sil.c
+++ b/trunk/drivers/ata/sata_sil.c
@@ -123,14 +123,13 @@ static void sil_thaw(struct ata_port *ap);
static const struct pci_device_id sil_pci_tbl[] = {
- { PCI_VDEVICE(CMD, 0x3112), sil_3112 },
- { PCI_VDEVICE(CMD, 0x0240), sil_3112 },
- { PCI_VDEVICE(CMD, 0x3512), sil_3512 },
- { PCI_VDEVICE(CMD, 0x3114), sil_3114 },
- { PCI_VDEVICE(ATI, 0x436e), sil_3112 },
- { PCI_VDEVICE(ATI, 0x4379), sil_3112_no_sata_irq },
- { PCI_VDEVICE(ATI, 0x437a), sil_3112_no_sata_irq },
-
+ { 0x1095, 0x3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 },
+ { 0x1095, 0x0240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 },
+ { 0x1095, 0x3512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3512 },
+ { 0x1095, 0x3114, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3114 },
+ { 0x1002, 0x436e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 },
+ { 0x1002, 0x4379, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112_no_sata_irq },
+ { 0x1002, 0x437a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112_no_sata_irq },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/sata_sil24.c b/trunk/drivers/ata/sata_sil24.c
index a951f40c2f21..39cb07baebae 100644
--- a/trunk/drivers/ata/sata_sil24.c
+++ b/trunk/drivers/ata/sata_sil24.c
@@ -344,12 +344,11 @@ static int sil24_pci_device_resume(struct pci_dev *pdev);
#endif
static const struct pci_device_id sil24_pci_tbl[] = {
- { PCI_VDEVICE(CMD, 0x3124), BID_SIL3124 },
- { PCI_VDEVICE(INTEL, 0x3124), BID_SIL3124 },
- { PCI_VDEVICE(CMD, 0x3132), BID_SIL3132 },
- { PCI_VDEVICE(CMD, 0x3131), BID_SIL3131 },
- { PCI_VDEVICE(CMD, 0x3531), BID_SIL3131 },
-
+ { 0x1095, 0x3124, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3124 },
+ { 0x8086, 0x3124, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3124 },
+ { 0x1095, 0x3132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3132 },
+ { 0x1095, 0x3131, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3131 },
+ { 0x1095, 0x3531, PCI_ANY_ID, PCI_ANY_ID, 0, 0, BID_SIL3131 },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/sata_sis.c b/trunk/drivers/ata/sata_sis.c
index 0738f52463a9..18d49fff8dc4 100644
--- a/trunk/drivers/ata/sata_sis.c
+++ b/trunk/drivers/ata/sata_sis.c
@@ -67,13 +67,13 @@ static u32 sis_scr_read (struct ata_port *ap, unsigned int sc_reg);
static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
static const struct pci_device_id sis_pci_tbl[] = {
- { PCI_VDEVICE(SI, 0x180), sis_180 },
- { PCI_VDEVICE(SI, 0x181), sis_180 },
- { PCI_VDEVICE(SI, 0x182), sis_180 },
-
+ { PCI_VENDOR_ID_SI, 0x180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
+ { PCI_VENDOR_ID_SI, 0x181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
+ { PCI_VENDOR_ID_SI, 0x182, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
{ } /* terminate list */
};
+
static struct pci_driver sis_pci_driver = {
.name = DRV_NAME,
.id_table = sis_pci_tbl,
diff --git a/trunk/drivers/ata/sata_svw.c b/trunk/drivers/ata/sata_svw.c
index 84025a2fd5be..d6d6658d8328 100644
--- a/trunk/drivers/ata/sata_svw.c
+++ b/trunk/drivers/ata/sata_svw.c
@@ -469,15 +469,15 @@ static int k2_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
* controller
* */
static const struct pci_device_id k2_sata_pci_tbl[] = {
- { PCI_VDEVICE(SERVERWORKS, 0x0240), 4 },
- { PCI_VDEVICE(SERVERWORKS, 0x0241), 4 },
- { PCI_VDEVICE(SERVERWORKS, 0x0242), 8 },
- { PCI_VDEVICE(SERVERWORKS, 0x024a), 4 },
- { PCI_VDEVICE(SERVERWORKS, 0x024b), 4 },
-
+ { 0x1166, 0x0240, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+ { 0x1166, 0x0241, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+ { 0x1166, 0x0242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
+ { 0x1166, 0x024a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
+ { 0x1166, 0x024b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
{ }
};
+
static struct pci_driver k2_sata_pci_driver = {
.name = DRV_NAME,
.id_table = k2_sata_pci_tbl,
@@ -485,16 +485,19 @@ static struct pci_driver k2_sata_pci_driver = {
.remove = ata_pci_remove_one,
};
+
static int __init k2_sata_init(void)
{
return pci_register_driver(&k2_sata_pci_driver);
}
+
static void __exit k2_sata_exit(void)
{
pci_unregister_driver(&k2_sata_pci_driver);
}
+
MODULE_AUTHOR("Benjamin Herrenschmidt");
MODULE_DESCRIPTION("low-level driver for K2 SATA controller");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/ata/sata_sx4.c b/trunk/drivers/ata/sata_sx4.c
index 8c74f2ff4344..091867e10ea3 100644
--- a/trunk/drivers/ata/sata_sx4.c
+++ b/trunk/drivers/ata/sata_sx4.c
@@ -230,11 +230,12 @@ static const struct ata_port_info pdc_port_info[] = {
};
static const struct pci_device_id pdc_sata_pci_tbl[] = {
- { PCI_VDEVICE(PROMISE, 0x6622), board_20621 },
-
+ { PCI_VENDOR_ID_PROMISE, 0x6622, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ board_20621 },
{ } /* terminate list */
};
+
static struct pci_driver pdc_sata_pci_driver = {
.name = DRV_NAME,
.id_table = pdc_sata_pci_tbl,
diff --git a/trunk/drivers/ata/sata_uli.c b/trunk/drivers/ata/sata_uli.c
index 5c603ca3a50a..dd76f37be182 100644
--- a/trunk/drivers/ata/sata_uli.c
+++ b/trunk/drivers/ata/sata_uli.c
@@ -61,13 +61,13 @@ static u32 uli_scr_read (struct ata_port *ap, unsigned int sc_reg);
static void uli_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
static const struct pci_device_id uli_pci_tbl[] = {
- { PCI_VDEVICE(AL, 0x5289), uli_5289 },
- { PCI_VDEVICE(AL, 0x5287), uli_5287 },
- { PCI_VDEVICE(AL, 0x5281), uli_5281 },
-
+ { PCI_VENDOR_ID_AL, 0x5289, PCI_ANY_ID, PCI_ANY_ID, 0, 0, uli_5289 },
+ { PCI_VENDOR_ID_AL, 0x5287, PCI_ANY_ID, PCI_ANY_ID, 0, 0, uli_5287 },
+ { PCI_VENDOR_ID_AL, 0x5281, PCI_ANY_ID, PCI_ANY_ID, 0, 0, uli_5281 },
{ } /* terminate list */
};
+
static struct pci_driver uli_pci_driver = {
.name = DRV_NAME,
.id_table = uli_pci_tbl,
diff --git a/trunk/drivers/ata/sata_via.c b/trunk/drivers/ata/sata_via.c
index f4455a1efe2d..a72a2389a11c 100644
--- a/trunk/drivers/ata/sata_via.c
+++ b/trunk/drivers/ata/sata_via.c
@@ -77,9 +77,9 @@ static void svia_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
static void vt6420_error_handler(struct ata_port *ap);
static const struct pci_device_id svia_pci_tbl[] = {
- { PCI_VDEVICE(VIA, 0x0591), vt6420 },
- { PCI_VDEVICE(VIA, 0x3149), vt6420 },
- { PCI_VDEVICE(VIA, 0x3249), vt6421 },
+ { 0x1106, 0x0591, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6420 },
+ { 0x1106, 0x3149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6420 },
+ { 0x1106, 0x3249, PCI_ANY_ID, PCI_ANY_ID, 0, 0, vt6421 },
{ } /* terminate list */
};
diff --git a/trunk/drivers/ata/sata_vsc.c b/trunk/drivers/ata/sata_vsc.c
index 273d88fcf980..d0d92f33de54 100644
--- a/trunk/drivers/ata/sata_vsc.c
+++ b/trunk/drivers/ata/sata_vsc.c
@@ -442,15 +442,16 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d
return rc;
}
+
static const struct pci_device_id vsc_sata_pci_tbl[] = {
{ PCI_VENDOR_ID_VITESSE, 0x7174,
PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 },
{ PCI_VENDOR_ID_INTEL, 0x3200,
PCI_ANY_ID, PCI_ANY_ID, 0x10600, 0xFFFFFF, 0 },
-
{ } /* terminate list */
};
+
static struct pci_driver vsc_sata_pci_driver = {
.name = DRV_NAME,
.id_table = vsc_sata_pci_tbl,
@@ -458,16 +459,19 @@ static struct pci_driver vsc_sata_pci_driver = {
.remove = ata_pci_remove_one,
};
+
static int __init vsc_sata_init(void)
{
return pci_register_driver(&vsc_sata_pci_driver);
}
+
static void __exit vsc_sata_exit(void)
{
pci_unregister_driver(&vsc_sata_pci_driver);
}
+
MODULE_AUTHOR("Jeremy Higdon");
MODULE_DESCRIPTION("low-level driver for Vitesse VSC7174 SATA controller");
MODULE_LICENSE("GPL");
diff --git a/trunk/drivers/block/Kconfig b/trunk/drivers/block/Kconfig
index 17dc22282e14..422e31d5f8e5 100644
--- a/trunk/drivers/block/Kconfig
+++ b/trunk/drivers/block/Kconfig
@@ -207,7 +207,8 @@ config BLK_DEV_UMEM
module will be called umem.
The umem driver has not yet been allocated a MAJOR number, so
- one is chosen dynamically.
+ one is chosen dynamically. Use "devfs" or look in /proc/devices
+ for the device number
config BLK_DEV_UBD
bool "Virtual block device"
@@ -406,7 +407,7 @@ config BLK_DEV_RAM_BLOCKSIZE
depends on BLK_DEV_RAM
default "1024"
help
- The default value is 1024 bytes. PAGE_SIZE is a much more
+ The default value is 1024 kilobytes. PAGE_SIZE is a much more
efficient choice however. The default is kept to ensure initrd
setups function - apparently needed by the rd_load_image routine
that supposes the filesystem in the image uses a 1024 blocksize.
diff --git a/trunk/drivers/block/pktcdvd.c b/trunk/drivers/block/pktcdvd.c
index f2904f67af47..a6b2aa67c9b2 100644
--- a/trunk/drivers/block/pktcdvd.c
+++ b/trunk/drivers/block/pktcdvd.c
@@ -62,8 +62,6 @@
#include
-#define DRIVER_NAME "pktcdvd"
-
#if PACKET_DEBUG
#define DPRINTK(fmt, args...) printk(KERN_NOTICE fmt, ##args)
#else
@@ -82,7 +80,7 @@
static struct pktcdvd_device *pkt_devs[MAX_WRITERS];
static struct proc_dir_entry *pkt_proc;
-static int pktdev_major;
+static int pkt_major;
static struct mutex ctl_mutex; /* Serialize open/close/setup/teardown */
static mempool_t *psd_pool;
@@ -91,7 +89,7 @@ static void pkt_bio_finished(struct pktcdvd_device *pd)
{
BUG_ON(atomic_read(&pd->cdrw.pending_bios) <= 0);
if (atomic_dec_and_test(&pd->cdrw.pending_bios)) {
- VPRINTK(DRIVER_NAME": queue empty\n");
+ VPRINTK("pktcdvd: queue empty\n");
atomic_set(&pd->iosched.attention, 1);
wake_up(&pd->wqueue);
}
@@ -402,7 +400,7 @@ static void pkt_dump_sense(struct packet_command *cgc)
int i;
struct request_sense *sense = cgc->sense;
- printk(DRIVER_NAME":");
+ printk("pktcdvd:");
for (i = 0; i < CDROM_PACKET_SIZE; i++)
printk(" %02x", cgc->cmd[i]);
printk(" - ");
@@ -530,7 +528,7 @@ static void pkt_iosched_process_queue(struct pktcdvd_device *pd)
need_write_seek = 0;
if (need_write_seek && reads_queued) {
if (atomic_read(&pd->cdrw.pending_bios) > 0) {
- VPRINTK(DRIVER_NAME": write, waiting\n");
+ VPRINTK("pktcdvd: write, waiting\n");
break;
}
pkt_flush_cache(pd);
@@ -539,7 +537,7 @@ static void pkt_iosched_process_queue(struct pktcdvd_device *pd)
} else {
if (!reads_queued && writes_queued) {
if (atomic_read(&pd->cdrw.pending_bios) > 0) {
- VPRINTK(DRIVER_NAME": read, waiting\n");
+ VPRINTK("pktcdvd: read, waiting\n");
break;
}
pd->iosched.writing = 1;
@@ -602,7 +600,7 @@ static int pkt_set_segment_merging(struct pktcdvd_device *pd, request_queue_t *q
set_bit(PACKET_MERGE_SEGS, &pd->flags);
return 0;
} else {
- printk(DRIVER_NAME": cdrom max_phys_segments too small\n");
+ printk("pktcdvd: cdrom max_phys_segments too small\n");
return -EIO;
}
}
@@ -1051,7 +1049,7 @@ static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
for (f = 0; f < pkt->frames; f++)
if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset))
BUG();
- VPRINTK(DRIVER_NAME": vcnt=%d\n", pkt->w_bio->bi_vcnt);
+ VPRINTK("pktcdvd: vcnt=%d\n", pkt->w_bio->bi_vcnt);
atomic_set(&pkt->io_wait, 1);
pkt->w_bio->bi_rw = WRITE;
@@ -1288,7 +1286,7 @@ static int kcdrwd(void *foobar)
static void pkt_print_settings(struct pktcdvd_device *pd)
{
- printk(DRIVER_NAME": %s packets, ", pd->settings.fp ? "Fixed" : "Variable");
+ printk("pktcdvd: %s packets, ", pd->settings.fp ? "Fixed" : "Variable");
printk("%u blocks, ", pd->settings.size >> 2);
printk("Mode-%c disc\n", pd->settings.block_mode == 8 ? '1' : '2');
}
@@ -1473,7 +1471,7 @@ static int pkt_set_write_settings(struct pktcdvd_device *pd)
/*
* paranoia
*/
- printk(DRIVER_NAME": write mode wrong %d\n", wp->data_block_type);
+ printk("pktcdvd: write mode wrong %d\n", wp->data_block_type);
return 1;
}
wp->packet_size = cpu_to_be32(pd->settings.size >> 2);
@@ -1517,7 +1515,7 @@ static int pkt_writable_track(struct pktcdvd_device *pd, track_information *ti)
if (ti->rt == 1 && ti->blank == 0)
return 1;
- printk(DRIVER_NAME": bad state %d-%d-%d\n", ti->rt, ti->blank, ti->packet);
+ printk("pktcdvd: bad state %d-%d-%d\n", ti->rt, ti->blank, ti->packet);
return 0;
}
@@ -1535,7 +1533,7 @@ static int pkt_writable_disc(struct pktcdvd_device *pd, disc_information *di)
case 0x12: /* DVD-RAM */
return 1;
default:
- VPRINTK(DRIVER_NAME": Wrong disc profile (%x)\n", pd->mmc3_profile);
+ VPRINTK("pktcdvd: Wrong disc profile (%x)\n", pd->mmc3_profile);
return 0;
}
@@ -1544,22 +1542,22 @@ static int pkt_writable_disc(struct pktcdvd_device *pd, disc_information *di)
* but i'm not sure, should we leave this to user apps? probably.
*/
if (di->disc_type == 0xff) {
- printk(DRIVER_NAME": Unknown disc. No track?\n");
+ printk("pktcdvd: Unknown disc. No track?\n");
return 0;
}
if (di->disc_type != 0x20 && di->disc_type != 0) {
- printk(DRIVER_NAME": Wrong disc type (%x)\n", di->disc_type);
+ printk("pktcdvd: Wrong disc type (%x)\n", di->disc_type);
return 0;
}
if (di->erasable == 0) {
- printk(DRIVER_NAME": Disc not erasable\n");
+ printk("pktcdvd: Disc not erasable\n");
return 0;
}
if (di->border_status == PACKET_SESSION_RESERVED) {
- printk(DRIVER_NAME": Can't write to last track (reserved)\n");
+ printk("pktcdvd: Can't write to last track (reserved)\n");
return 0;
}
@@ -1595,12 +1593,12 @@ static int pkt_probe_settings(struct pktcdvd_device *pd)
track = 1; /* (di.last_track_msb << 8) | di.last_track_lsb; */
if ((ret = pkt_get_track_info(pd, track, 1, &ti))) {
- printk(DRIVER_NAME": failed get_track\n");
+ printk("pktcdvd: failed get_track\n");
return ret;
}
if (!pkt_writable_track(pd, &ti)) {
- printk(DRIVER_NAME": can't write to this track\n");
+ printk("pktcdvd: can't write to this track\n");
return -EROFS;
}
@@ -1610,11 +1608,11 @@ static int pkt_probe_settings(struct pktcdvd_device *pd)
*/
pd->settings.size = be32_to_cpu(ti.fixed_packet_size) << 2;
if (pd->settings.size == 0) {
- printk(DRIVER_NAME": detected zero packet size!\n");
+ printk("pktcdvd: detected zero packet size!\n");
return -ENXIO;
}
if (pd->settings.size > PACKET_MAX_SECTORS) {
- printk(DRIVER_NAME": packet size is too big\n");
+ printk("pktcdvd: packet size is too big\n");
return -EROFS;
}
pd->settings.fp = ti.fp;
@@ -1656,7 +1654,7 @@ static int pkt_probe_settings(struct pktcdvd_device *pd)
pd->settings.block_mode = PACKET_BLOCK_MODE2;
break;
default:
- printk(DRIVER_NAME": unknown data mode\n");
+ printk("pktcdvd: unknown data mode\n");
return -EROFS;
}
return 0;
@@ -1690,10 +1688,10 @@ static int pkt_write_caching(struct pktcdvd_device *pd, int set)
cgc.buflen = cgc.cmd[8] = 2 + ((buf[0] << 8) | (buf[1] & 0xff));
ret = pkt_mode_select(pd, &cgc);
if (ret) {
- printk(DRIVER_NAME": write caching control failed\n");
+ printk("pktcdvd: write caching control failed\n");
pkt_dump_sense(&cgc);
} else if (!ret && set)
- printk(DRIVER_NAME": enabled write caching on %s\n", pd->name);
+ printk("pktcdvd: enabled write caching on %s\n", pd->name);
return ret;
}
@@ -1807,11 +1805,11 @@ static int pkt_media_speed(struct pktcdvd_device *pd, unsigned *speed)
}
if (!buf[6] & 0x40) {
- printk(DRIVER_NAME": Disc type is not CD-RW\n");
+ printk("pktcdvd: Disc type is not CD-RW\n");
return 1;
}
if (!buf[6] & 0x4) {
- printk(DRIVER_NAME": A1 values on media are not valid, maybe not CDRW?\n");
+ printk("pktcdvd: A1 values on media are not valid, maybe not CDRW?\n");
return 1;
}
@@ -1831,14 +1829,14 @@ static int pkt_media_speed(struct pktcdvd_device *pd, unsigned *speed)
*speed = us_clv_to_speed[sp];
break;
default:
- printk(DRIVER_NAME": Unknown disc sub-type %d\n",st);
+ printk("pktcdvd: Unknown disc sub-type %d\n",st);
return 1;
}
if (*speed) {
- printk(DRIVER_NAME": Max. media speed: %d\n",*speed);
+ printk("pktcdvd: Max. media speed: %d\n",*speed);
return 0;
} else {
- printk(DRIVER_NAME": Unknown speed %d for sub-type %d\n",sp,st);
+ printk("pktcdvd: Unknown speed %d for sub-type %d\n",sp,st);
return 1;
}
}
@@ -1849,7 +1847,7 @@ static int pkt_perform_opc(struct pktcdvd_device *pd)
struct request_sense sense;
int ret;
- VPRINTK(DRIVER_NAME": Performing OPC\n");
+ VPRINTK("pktcdvd: Performing OPC\n");
init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE);
cgc.sense = &sense;
@@ -1867,12 +1865,12 @@ static int pkt_open_write(struct pktcdvd_device *pd)
unsigned int write_speed, media_write_speed, read_speed;
if ((ret = pkt_probe_settings(pd))) {
- VPRINTK(DRIVER_NAME": %s failed probe\n", pd->name);
+ VPRINTK("pktcdvd: %s failed probe\n", pd->name);
return ret;
}
if ((ret = pkt_set_write_settings(pd))) {
- DPRINTK(DRIVER_NAME": %s failed saving write settings\n", pd->name);
+ DPRINTK("pktcdvd: %s failed saving write settings\n", pd->name);
return -EIO;
}
@@ -1884,26 +1882,26 @@ static int pkt_open_write(struct pktcdvd_device *pd)
case 0x13: /* DVD-RW */
case 0x1a: /* DVD+RW */
case 0x12: /* DVD-RAM */
- DPRINTK(DRIVER_NAME": write speed %ukB/s\n", write_speed);
+ DPRINTK("pktcdvd: write speed %ukB/s\n", write_speed);
break;
default:
if ((ret = pkt_media_speed(pd, &media_write_speed)))
media_write_speed = 16;
write_speed = min(write_speed, media_write_speed * 177);
- DPRINTK(DRIVER_NAME": write speed %ux\n", write_speed / 176);
+ DPRINTK("pktcdvd: write speed %ux\n", write_speed / 176);
break;
}
read_speed = write_speed;
if ((ret = pkt_set_speed(pd, write_speed, read_speed))) {
- DPRINTK(DRIVER_NAME": %s couldn't set write speed\n", pd->name);
+ DPRINTK("pktcdvd: %s couldn't set write speed\n", pd->name);
return -EIO;
}
pd->write_speed = write_speed;
pd->read_speed = read_speed;
if ((ret = pkt_perform_opc(pd))) {
- DPRINTK(DRIVER_NAME": %s Optimum Power Calibration failed\n", pd->name);
+ DPRINTK("pktcdvd: %s Optimum Power Calibration failed\n", pd->name);
}
return 0;
@@ -1931,7 +1929,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
goto out_putdev;
if ((ret = pkt_get_last_written(pd, &lba))) {
- printk(DRIVER_NAME": pkt_get_last_written failed\n");
+ printk("pktcdvd: pkt_get_last_written failed\n");
goto out_unclaim;
}
@@ -1961,11 +1959,11 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
if (write) {
if (!pkt_grow_pktlist(pd, CONFIG_CDROM_PKTCDVD_BUFFERS)) {
- printk(DRIVER_NAME": not enough memory for buffers\n");
+ printk("pktcdvd: not enough memory for buffers\n");
ret = -ENOMEM;
goto out_unclaim;
}
- printk(DRIVER_NAME": %lukB available on disc\n", lba << 1);
+ printk("pktcdvd: %lukB available on disc\n", lba << 1);
}
return 0;
@@ -1985,7 +1983,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
static void pkt_release_dev(struct pktcdvd_device *pd, int flush)
{
if (flush && pkt_flush_cache(pd))
- DPRINTK(DRIVER_NAME": %s not flushing cache\n", pd->name);
+ DPRINTK("pktcdvd: %s not flushing cache\n", pd->name);
pkt_lock_door(pd, 0);
@@ -2008,7 +2006,7 @@ static int pkt_open(struct inode *inode, struct file *file)
struct pktcdvd_device *pd = NULL;
int ret;
- VPRINTK(DRIVER_NAME": entering open\n");
+ VPRINTK("pktcdvd: entering open\n");
mutex_lock(&ctl_mutex);
pd = pkt_find_dev_from_minor(iminor(inode));
@@ -2042,7 +2040,7 @@ static int pkt_open(struct inode *inode, struct file *file)
out_dec:
pd->refcnt--;
out:
- VPRINTK(DRIVER_NAME": failed open (%d)\n", ret);
+ VPRINTK("pktcdvd: failed open (%d)\n", ret);
mutex_unlock(&ctl_mutex);
return ret;
}
@@ -2090,7 +2088,7 @@ static int pkt_make_request(request_queue_t *q, struct bio *bio)
pd = q->queuedata;
if (!pd) {
- printk(DRIVER_NAME": %s incorrect request queue\n", bdevname(bio->bi_bdev, b));
+ printk("pktcdvd: %s incorrect request queue\n", bdevname(bio->bi_bdev, b));
goto end_io;
}
@@ -2112,13 +2110,13 @@ static int pkt_make_request(request_queue_t *q, struct bio *bio)
}
if (!test_bit(PACKET_WRITABLE, &pd->flags)) {
- printk(DRIVER_NAME": WRITE for ro device %s (%llu)\n",
+ printk("pktcdvd: WRITE for ro device %s (%llu)\n",
pd->name, (unsigned long long)bio->bi_sector);
goto end_io;
}
if (!bio->bi_size || (bio->bi_size % CD_FRAMESIZE)) {
- printk(DRIVER_NAME": wrong bio size\n");
+ printk("pktcdvd: wrong bio size\n");
goto end_io;
}
@@ -2321,7 +2319,7 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
struct block_device *bdev;
if (pd->pkt_dev == dev) {
- printk(DRIVER_NAME": Recursive setup not allowed\n");
+ printk("pktcdvd: Recursive setup not allowed\n");
return -EBUSY;
}
for (i = 0; i < MAX_WRITERS; i++) {
@@ -2329,11 +2327,11 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
if (!pd2)
continue;
if (pd2->bdev->bd_dev == dev) {
- printk(DRIVER_NAME": %s already setup\n", bdevname(pd2->bdev, b));
+ printk("pktcdvd: %s already setup\n", bdevname(pd2->bdev, b));
return -EBUSY;
}
if (pd2->pkt_dev == dev) {
- printk(DRIVER_NAME": Can't chain pktcdvd devices\n");
+ printk("pktcdvd: Can't chain pktcdvd devices\n");
return -EBUSY;
}
}
@@ -2356,7 +2354,7 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
atomic_set(&pd->cdrw.pending_bios, 0);
pd->cdrw.thread = kthread_run(kcdrwd, pd, "%s", pd->name);
if (IS_ERR(pd->cdrw.thread)) {
- printk(DRIVER_NAME": can't start kernel thread\n");
+ printk("pktcdvd: can't start kernel thread\n");
ret = -ENOMEM;
goto out_mem;
}
@@ -2366,7 +2364,7 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)
proc->data = pd;
proc->proc_fops = &pkt_proc_fops;
}
- DPRINTK(DRIVER_NAME": writer %s mapped to %s\n", pd->name, bdevname(bdev, b));
+ DPRINTK("pktcdvd: writer %s mapped to %s\n", pd->name, bdevname(bdev, b));
return 0;
out_mem:
@@ -2403,7 +2401,7 @@ static int pkt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg);
default:
- VPRINTK(DRIVER_NAME": Unknown ioctl for %s (%x)\n", pd->name, cmd);
+ VPRINTK("pktcdvd: Unknown ioctl for %s (%x)\n", pd->name, cmd);
return -ENOTTY;
}
@@ -2448,7 +2446,7 @@ static int pkt_setup_dev(struct pkt_ctrl_command *ctrl_cmd)
if (!pkt_devs[idx])
break;
if (idx == MAX_WRITERS) {
- printk(DRIVER_NAME": max %d writers supported\n", MAX_WRITERS);
+ printk("pktcdvd: max %d writers supported\n", MAX_WRITERS);
return -EBUSY;
}
@@ -2472,15 +2470,15 @@ static int pkt_setup_dev(struct pkt_ctrl_command *ctrl_cmd)
spin_lock_init(&pd->lock);
spin_lock_init(&pd->iosched.lock);
- sprintf(pd->name, DRIVER_NAME"%d", idx);
+ sprintf(pd->name, "pktcdvd%d", idx);
init_waitqueue_head(&pd->wqueue);
pd->bio_queue = RB_ROOT;
- disk->major = pktdev_major;
+ disk->major = pkt_major;
disk->first_minor = idx;
disk->fops = &pktcdvd_ops;
disk->flags = GENHD_FL_REMOVABLE;
- sprintf(disk->disk_name, DRIVER_NAME"%d", idx);
+ sprintf(disk->disk_name, "pktcdvd%d", idx);
disk->private_data = pd;
disk->queue = blk_alloc_queue(GFP_KERNEL);
if (!disk->queue)
@@ -2522,7 +2520,7 @@ static int pkt_remove_dev(struct pkt_ctrl_command *ctrl_cmd)
break;
}
if (idx == MAX_WRITERS) {
- DPRINTK(DRIVER_NAME": dev not setup\n");
+ DPRINTK("pktcdvd: dev not setup\n");
return -ENXIO;
}
@@ -2535,7 +2533,7 @@ static int pkt_remove_dev(struct pkt_ctrl_command *ctrl_cmd)
blkdev_put(pd->bdev);
remove_proc_entry(pd->name, pkt_proc);
- DPRINTK(DRIVER_NAME": writer %s unmapped\n", pd->name);
+ DPRINTK("pktcdvd: writer %s unmapped\n", pd->name);
del_gendisk(pd->disk);
blk_cleanup_queue(pd->disk->queue);
@@ -2612,7 +2610,7 @@ static struct file_operations pkt_ctl_fops = {
static struct miscdevice pkt_misc = {
.minor = MISC_DYNAMIC_MINOR,
- .name = DRIVER_NAME,
+ .name = "pktcdvd",
.fops = &pkt_ctl_fops
};
@@ -2625,28 +2623,28 @@ static int __init pkt_init(void)
if (!psd_pool)
return -ENOMEM;
- ret = register_blkdev(pktdev_major, DRIVER_NAME);
+ ret = register_blkdev(pkt_major, "pktcdvd");
if (ret < 0) {
- printk(DRIVER_NAME": Unable to register block device\n");
+ printk("pktcdvd: Unable to register block device\n");
goto out2;
}
- if (!pktdev_major)
- pktdev_major = ret;
+ if (!pkt_major)
+ pkt_major = ret;
ret = misc_register(&pkt_misc);
if (ret) {
- printk(DRIVER_NAME": Unable to register misc device\n");
+ printk("pktcdvd: Unable to register misc device\n");
goto out;
}
mutex_init(&ctl_mutex);
- pkt_proc = proc_mkdir(DRIVER_NAME, proc_root_driver);
+ pkt_proc = proc_mkdir("pktcdvd", proc_root_driver);
return 0;
out:
- unregister_blkdev(pktdev_major, DRIVER_NAME);
+ unregister_blkdev(pkt_major, "pktcdvd");
out2:
mempool_destroy(psd_pool);
return ret;
@@ -2654,9 +2652,9 @@ static int __init pkt_init(void)
static void __exit pkt_exit(void)
{
- remove_proc_entry(DRIVER_NAME, proc_root_driver);
+ remove_proc_entry("pktcdvd", proc_root_driver);
misc_deregister(&pkt_misc);
- unregister_blkdev(pktdev_major, DRIVER_NAME);
+ unregister_blkdev(pkt_major, "pktcdvd");
mempool_destroy(psd_pool);
}
diff --git a/trunk/drivers/cdrom/cdrom.c b/trunk/drivers/cdrom/cdrom.c
index 2a0c50d84fc5..b38c84a7a8e3 100644
--- a/trunk/drivers/cdrom/cdrom.c
+++ b/trunk/drivers/cdrom/cdrom.c
@@ -1,4 +1,4 @@
-/* linux/drivers/cdrom/cdrom.c
+/* linux/drivers/cdrom/cdrom.c.
Copyright (c) 1996, 1997 David A. van Leeuwen.
Copyright (c) 1997, 1998 Erik Andersen
Copyright (c) 1998, 1999 Jens Axboe
diff --git a/trunk/drivers/char/amiserial.c b/trunk/drivers/char/amiserial.c
index 486f97c3f4e5..d0e92ed0a367 100644
--- a/trunk/drivers/char/amiserial.c
+++ b/trunk/drivers/char/amiserial.c
@@ -112,6 +112,17 @@ static struct serial_state rs_table[1];
#define NR_PORTS ARRAY_SIZE(rs_table)
+/*
+ * tmp_buf is used as a temporary buffer by serial_write. We need to
+ * lock it in case the copy_from_user blocks while swapping in a page,
+ * and some other program tries to do a serial write at the same time.
+ * Since the lock will only come under contention when the system is
+ * swapping and available memory is low, it makes sense to share one
+ * buffer across all the serial ports, since it significantly saves
+ * memory if large numbers of serial ports are open.
+ */
+static unsigned char *tmp_buf;
+
#include
#define serial_isroot() (capable(CAP_SYS_ADMIN))
@@ -901,7 +912,7 @@ static int rs_write(struct tty_struct * tty, const unsigned char *buf, int count
if (serial_paranoia_check(info, tty->name, "rs_write"))
return 0;
- if (!info->xmit.buf)
+ if (!info->xmit.buf || !tmp_buf)
return 0;
local_save_flags(flags);
@@ -1767,6 +1778,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
{
struct async_struct *info;
int retval, line;
+ unsigned long page;
line = tty->index;
if ((line < 0) || (line >= NR_PORTS)) {
@@ -1786,6 +1798,17 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
#endif
info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
+ if (!tmp_buf) {
+ page = get_zeroed_page(GFP_KERNEL);
+ if (!page) {
+ return -ENOMEM;
+ }
+ if (tmp_buf)
+ free_page(page);
+ else
+ tmp_buf = (unsigned char *) page;
+ }
+
/*
* If the port is the middle of closing, bail out now
*/
@@ -2067,6 +2090,11 @@ static __exit void rs_exit(void)
kfree(info);
}
+ if (tmp_buf) {
+ free_page((unsigned long) tmp_buf);
+ tmp_buf = NULL;
+ }
+
release_mem_region(CUSTOM_PHYSADDR+0x30, 4);
}
diff --git a/trunk/drivers/char/cyclades.c b/trunk/drivers/char/cyclades.c
index 87b2fb510871..f85b4eb16618 100644
--- a/trunk/drivers/char/cyclades.c
+++ b/trunk/drivers/char/cyclades.c
@@ -747,6 +747,18 @@ static struct cyclades_port cy_port[NR_PORTS];
static int cy_next_channel; /* next minor available */
+/*
+ * tmp_buf is used as a temporary buffer by serial_write. We need to
+ * lock it in case the copy_from_user blocks while swapping in a page,
+ * and some other program tries to do a serial write at the same time.
+ * Since the lock will only come under contention when the system is
+ * swapping and available memory is low, it makes sense to share one
+ * buffer across all the serial ports, since it significantly saves
+ * memory if large numbers of serial ports are open. This buffer is
+ * allocated when the first cy_open occurs.
+ */
+static unsigned char *tmp_buf;
+
/*
* This is used to look up the divisor speeds and the timeouts
* We're normally limited to 15 distinct baud rates. The extra
@@ -2454,6 +2466,7 @@ cy_open(struct tty_struct *tty, struct file * filp)
{
struct cyclades_port *info;
int retval, line;
+ unsigned long page;
line = tty->index;
if ((line < 0) || (NR_PORTS <= line)){
@@ -2532,6 +2545,15 @@ cy_open(struct tty_struct *tty, struct file * filp)
printk("cyc:cy_open (%d): incrementing count to %d\n",
current->pid, info->count);
#endif
+ if (!tmp_buf) {
+ page = get_zeroed_page(GFP_KERNEL);
+ if (!page)
+ return -ENOMEM;
+ if (tmp_buf)
+ free_page(page);
+ else
+ tmp_buf = (unsigned char *) page;
+ }
/*
* If the port is the middle of closing, bail out now
@@ -2810,7 +2832,7 @@ cy_write(struct tty_struct * tty, const unsigned char *buf, int count)
return 0;
}
- if (!info->xmit_buf)
+ if (!info->xmit_buf || !tmp_buf)
return 0;
CY_LOCK(info, flags);
@@ -5468,6 +5490,10 @@ cy_cleanup_module(void)
#endif
}
}
+ if (tmp_buf) {
+ free_page((unsigned long) tmp_buf);
+ tmp_buf = NULL;
+ }
} /* cy_cleanup_module */
module_init(cy_init);
diff --git a/trunk/drivers/char/epca.c b/trunk/drivers/char/epca.c
index c3f95583a120..3baa2ab8cbd4 100644
--- a/trunk/drivers/char/epca.c
+++ b/trunk/drivers/char/epca.c
@@ -1113,8 +1113,11 @@ static void __exit epca_module_exit(void)
ch = card_ptr[crd];
for (count = 0; count < bd->numports; count++, ch++)
{ /* Begin for each port */
- if (ch && ch->tty)
- tty_hangup(ch->tty);
+ if (ch) {
+ if (ch->tty)
+ tty_hangup(ch->tty);
+ kfree(ch->tmp_buf);
+ }
} /* End for each port */
} /* End for each card */
pci_unregister_driver (&epca_driver);
@@ -1632,6 +1635,16 @@ static void post_fep_init(unsigned int crd)
init_waitqueue_head(&ch->close_wait);
spin_unlock_irqrestore(&epca_lock, flags);
+
+ ch->tmp_buf = kmalloc(ch->txbufsize,GFP_KERNEL);
+ if (!ch->tmp_buf) {
+ printk(KERN_ERR "POST FEP INIT : kmalloc failed for port 0x%x\n",i);
+ release_region((int)bd->port, 4);
+ while(i-- > 0)
+ kfree((ch--)->tmp_buf);
+ return;
+ } else
+ memset((void *)ch->tmp_buf,0,ch->txbufsize);
} /* End for each port */
printk(KERN_INFO
diff --git a/trunk/drivers/char/epca.h b/trunk/drivers/char/epca.h
index a297238cd3ba..456d6c8f94a8 100644
--- a/trunk/drivers/char/epca.h
+++ b/trunk/drivers/char/epca.h
@@ -130,6 +130,7 @@ struct channel
unsigned long c_oflag;
unsigned char __iomem *txptr;
unsigned char __iomem *rxptr;
+ unsigned char *tmp_buf;
struct board_info *board;
struct board_chan __iomem *brdchan;
struct digi_struct digiext;
diff --git a/trunk/drivers/char/generic_serial.c b/trunk/drivers/char/generic_serial.c
index 87127e49c0db..4711d9b3a595 100644
--- a/trunk/drivers/char/generic_serial.c
+++ b/trunk/drivers/char/generic_serial.c
@@ -33,6 +33,8 @@
#define DEBUG
+static char * tmp_buf;
+
static int gs_debug;
#ifdef DEBUG
@@ -203,7 +205,7 @@ int gs_write(struct tty_struct * tty,
if (!tty) return -EIO;
port = tty->driver_data;
- if (!port || !port->xmit_buf)
+ if (!port || !port->xmit_buf || !tmp_buf)
return -EIO;
local_save_flags(flags);
@@ -835,9 +837,24 @@ void gs_set_termios (struct tty_struct * tty,
int gs_init_port(struct gs_port *port)
{
unsigned long flags;
+ unsigned long page;
func_enter ();
+ if (!tmp_buf) {
+ page = get_zeroed_page(GFP_KERNEL);
+ spin_lock_irqsave (&port->driver_lock, flags); /* Don't expect this to make a difference. */
+ if (tmp_buf)
+ free_page(page);
+ else
+ tmp_buf = (unsigned char *) page;
+ spin_unlock_irqrestore (&port->driver_lock, flags);
+ if (!tmp_buf) {
+ func_exit ();
+ return -ENOMEM;
+ }
+ }
+
if (port->flags & ASYNC_INITIALIZED) {
func_exit ();
return 0;
diff --git a/trunk/drivers/char/hw_random/ixp4xx-rng.c b/trunk/drivers/char/hw_random/ixp4xx-rng.c
index 3cf4d641a51c..ef71022423c9 100644
--- a/trunk/drivers/char/hw_random/ixp4xx-rng.c
+++ b/trunk/drivers/char/hw_random/ixp4xx-rng.c
@@ -1,5 +1,5 @@
/*
- * drivers/char/hw_random/ixp4xx-rng.c
+ * drivers/char/rng/ixp4xx-rng.c
*
* RNG driver for Intel IXP4xx family of NPUs
*
diff --git a/trunk/drivers/char/hw_random/omap-rng.c b/trunk/drivers/char/hw_random/omap-rng.c
index e13dd1892bfd..a01d796d1eeb 100644
--- a/trunk/drivers/char/hw_random/omap-rng.c
+++ b/trunk/drivers/char/hw_random/omap-rng.c
@@ -1,5 +1,5 @@
/*
- * drivers/char/hw_random/omap-rng.c
+ * driver/char/hw_random/omap-rng.c
*
* RNG driver for TI OMAP CPU family
*
diff --git a/trunk/drivers/char/mwave/README b/trunk/drivers/char/mwave/README
index 480251fc78e2..70f8d19fb79f 100644
--- a/trunk/drivers/char/mwave/README
+++ b/trunk/drivers/char/mwave/README
@@ -41,7 +41,10 @@ Example to enable the 3780i DSP using ttyS1 resources:
Accessing the driver
--------------------
-You must also create a node for the driver:
+You must also create a node for the driver. Without devfs:
mkdir -p /dev/modems
mknod --mode=660 /dev/modems/mwave c 10 219
+With devfs:
+ mkdir -p /dev/modems
+ ln -s ../misc/mwave /dev/modems/mwave
diff --git a/trunk/drivers/char/riscom8.c b/trunk/drivers/char/riscom8.c
index b0ab3f28cc6a..214d850112fd 100644
--- a/trunk/drivers/char/riscom8.c
+++ b/trunk/drivers/char/riscom8.c
@@ -81,6 +81,7 @@
static struct riscom_board * IRQ_to_board[16];
static struct tty_driver *riscom_driver;
+static unsigned char * tmp_buf;
static unsigned long baud_table[] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
@@ -1123,7 +1124,7 @@ static int rc_write(struct tty_struct * tty,
bp = port_Board(port);
- if (!tty || !port->xmit_buf)
+ if (!tty || !port->xmit_buf || !tmp_buf)
return 0;
save_flags(flags);
@@ -1611,6 +1612,11 @@ static inline int rc_init_drivers(void)
if (!riscom_driver)
return -ENOMEM;
+ if (!(tmp_buf = (unsigned char *) get_zeroed_page(GFP_KERNEL))) {
+ printk(KERN_ERR "rc: Couldn't get free page.\n");
+ put_tty_driver(riscom_driver);
+ return 1;
+ }
memset(IRQ_to_board, 0, sizeof(IRQ_to_board));
riscom_driver->owner = THIS_MODULE;
riscom_driver->name = "ttyL";
@@ -1623,6 +1629,7 @@ static inline int rc_init_drivers(void)
riscom_driver->flags = TTY_DRIVER_REAL_RAW;
tty_set_operations(riscom_driver, &riscom_ops);
if ((error = tty_register_driver(riscom_driver))) {
+ free_page((unsigned long)tmp_buf);
put_tty_driver(riscom_driver);
printk(KERN_ERR "rc: Couldn't register RISCom/8 driver, "
"error = %d\n",
@@ -1650,6 +1657,7 @@ static void rc_release_drivers(void)
save_flags(flags);
cli();
+ free_page((unsigned long)tmp_buf);
tty_unregister_driver(riscom_driver);
put_tty_driver(riscom_driver);
restore_flags(flags);
diff --git a/trunk/drivers/char/serial167.c b/trunk/drivers/char/serial167.c
index f4809c8183cc..b4ea1266b663 100644
--- a/trunk/drivers/char/serial167.c
+++ b/trunk/drivers/char/serial167.c
@@ -118,6 +118,17 @@ struct cyclades_port cy_port[] = {
};
#define NR_PORTS ARRAY_SIZE(cy_port)
+/*
+ * tmp_buf is used as a temporary buffer by serial_write. We need to
+ * lock it in case the copy_from_user blocks while swapping in a page,
+ * and some other program tries to do a serial write at the same time.
+ * Since the lock will only come under contention when the system is
+ * swapping and available memory is low, it makes sense to share one
+ * buffer across all the serial ports, since it significantly saves
+ * memory if large numbers of serial ports are open.
+ */
+static unsigned char *tmp_buf = 0;
+
/*
* This is used to look up the divisor speeds and the timeouts
* We're normally limited to 15 distinct baud rates. The extra
@@ -1121,7 +1132,7 @@ cy_put_char(struct tty_struct *tty, unsigned char ch)
if (serial_paranoia_check(info, tty->name, "cy_put_char"))
return;
- if (!info->xmit_buf)
+ if (!tty || !info->xmit_buf)
return;
local_irq_save(flags);
@@ -1187,7 +1198,7 @@ cy_write(struct tty_struct * tty,
return 0;
}
- if (!info->xmit_buf){
+ if (!tty || !info->xmit_buf || !tmp_buf){
return 0;
}
@@ -1972,6 +1983,13 @@ cy_open(struct tty_struct *tty, struct file * filp)
tty->driver_data = info;
info->tty = tty;
+ if (!tmp_buf) {
+ tmp_buf = (unsigned char *) get_zeroed_page(GFP_KERNEL);
+ if (!tmp_buf){
+ return -ENOMEM;
+ }
+ }
+
/*
* Start up serial port
*/
diff --git a/trunk/drivers/char/watchdog/ixp2000_wdt.c b/trunk/drivers/char/watchdog/ixp2000_wdt.c
index fd955dbd588c..c91d9a660ec0 100644
--- a/trunk/drivers/char/watchdog/ixp2000_wdt.c
+++ b/trunk/drivers/char/watchdog/ixp2000_wdt.c
@@ -1,5 +1,5 @@
/*
- * drivers/char/watchdog/ixp2000_wdt.c
+ * drivers/watchdog/ixp2000_wdt.c
*
* Watchdog driver for Intel IXP2000 network processors
*
diff --git a/trunk/drivers/char/watchdog/ixp4xx_wdt.c b/trunk/drivers/char/watchdog/ixp4xx_wdt.c
index 5864bb865cfe..db477f712388 100644
--- a/trunk/drivers/char/watchdog/ixp4xx_wdt.c
+++ b/trunk/drivers/char/watchdog/ixp4xx_wdt.c
@@ -1,5 +1,5 @@
/*
- * drivers/char/watchdog/ixp4xx_wdt.c
+ * drivers/watchdog/ixp4xx_wdt.c
*
* Watchdog driver for Intel IXP4xx network processors
*
diff --git a/trunk/drivers/clocksource/scx200_hrt.c b/trunk/drivers/clocksource/scx200_hrt.c
index 22915cc46ba7..d418b8297211 100644
--- a/trunk/drivers/clocksource/scx200_hrt.c
+++ b/trunk/drivers/clocksource/scx200_hrt.c
@@ -63,7 +63,7 @@ static struct clocksource cs_hrt = {
static int __init init_hrt_clocksource(void)
{
- /* Make sure scx200 has initialized the configuration block */
+ /* Make sure scx200 has initializedd the configuration block */
if (!scx200_cb_present())
return -ENODEV;
@@ -76,7 +76,7 @@ static int __init init_hrt_clocksource(void)
}
/* write timer config */
- outb(HR_TMEN | (mhz27 ? HR_TMCLKSEL : 0),
+ outb(HR_TMEN | (mhz27) ? HR_TMCLKSEL : 0,
scx200_cb_base + SCx200_TMCNFG_OFFSET);
if (mhz27) {
diff --git a/trunk/drivers/cpufreq/cpufreq.c b/trunk/drivers/cpufreq/cpufreq.c
index 86e69b7f9122..2caaf71d80c8 100644
--- a/trunk/drivers/cpufreq/cpufreq.c
+++ b/trunk/drivers/cpufreq/cpufreq.c
@@ -52,14 +52,8 @@ static void handle_update(void *data);
* The mutex locks both lists.
*/
static BLOCKING_NOTIFIER_HEAD(cpufreq_policy_notifier_list);
-static struct srcu_notifier_head cpufreq_transition_notifier_list;
+static BLOCKING_NOTIFIER_HEAD(cpufreq_transition_notifier_list);
-static int __init init_cpufreq_transition_notifier_list(void)
-{
- srcu_init_notifier_head(&cpufreq_transition_notifier_list);
- return 0;
-}
-core_initcall(init_cpufreq_transition_notifier_list);
static LIST_HEAD(cpufreq_governor_list);
static DEFINE_MUTEX (cpufreq_governor_mutex);
@@ -268,14 +262,14 @@ void cpufreq_notify_transition(struct cpufreq_freqs *freqs, unsigned int state)
freqs->old = policy->cur;
}
}
- srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
+ blocking_notifier_call_chain(&cpufreq_transition_notifier_list,
CPUFREQ_PRECHANGE, freqs);
adjust_jiffies(CPUFREQ_PRECHANGE, freqs);
break;
case CPUFREQ_POSTCHANGE:
adjust_jiffies(CPUFREQ_POSTCHANGE, freqs);
- srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
+ blocking_notifier_call_chain(&cpufreq_transition_notifier_list,
CPUFREQ_POSTCHANGE, freqs);
if (likely(policy) && likely(policy->cpu == freqs->cpu))
policy->cur = freqs->new;
@@ -1055,7 +1049,7 @@ static int cpufreq_suspend(struct sys_device * sysdev, pm_message_t pmsg)
freqs.old = cpu_policy->cur;
freqs.new = cur_freq;
- srcu_notifier_call_chain(&cpufreq_transition_notifier_list,
+ blocking_notifier_call_chain(&cpufreq_transition_notifier_list,
CPUFREQ_SUSPENDCHANGE, &freqs);
adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs);
@@ -1136,7 +1130,7 @@ static int cpufreq_resume(struct sys_device * sysdev)
freqs.old = cpu_policy->cur;
freqs.new = cur_freq;
- srcu_notifier_call_chain(
+ blocking_notifier_call_chain(
&cpufreq_transition_notifier_list,
CPUFREQ_RESUMECHANGE, &freqs);
adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs);
@@ -1182,7 +1176,7 @@ int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)
switch (list) {
case CPUFREQ_TRANSITION_NOTIFIER:
- ret = srcu_notifier_chain_register(
+ ret = blocking_notifier_chain_register(
&cpufreq_transition_notifier_list, nb);
break;
case CPUFREQ_POLICY_NOTIFIER:
@@ -1214,7 +1208,7 @@ int cpufreq_unregister_notifier(struct notifier_block *nb, unsigned int list)
switch (list) {
case CPUFREQ_TRANSITION_NOTIFIER:
- ret = srcu_notifier_chain_unregister(
+ ret = blocking_notifier_chain_unregister(
&cpufreq_transition_notifier_list, nb);
break;
case CPUFREQ_POLICY_NOTIFIER:
diff --git a/trunk/drivers/firmware/Kconfig b/trunk/drivers/firmware/Kconfig
index 88f462122a30..731c3d5da0dc 100644
--- a/trunk/drivers/firmware/Kconfig
+++ b/trunk/drivers/firmware/Kconfig
@@ -64,7 +64,7 @@ config DELL_RBU
help
Say m if you want to have the option of updating the BIOS for your
DELL system. Note you need a Dell OpenManage or Dell Update package (DUP)
- supporting application to communicate with the BIOS regarding the new
+ supporting application to comunicate with the BIOS regarding the new
image for the image update to take effect.
See for more details on the driver.
diff --git a/trunk/drivers/firmware/edd.c b/trunk/drivers/firmware/edd.c
index 5c261e1f92b2..b4502ed65793 100644
--- a/trunk/drivers/firmware/edd.c
+++ b/trunk/drivers/firmware/edd.c
@@ -1,5 +1,5 @@
/*
- * linux/drivers/firmware/edd.c
+ * linux/arch/i386/kernel/edd.c
* Copyright (C) 2002, 2003, 2004 Dell Inc.
* by Matt Domsch
* disk signature by Matt Domsch, Andrew Wilks, and Sandeep K. Shandilya
diff --git a/trunk/drivers/i2c/busses/Kconfig b/trunk/drivers/i2c/busses/Kconfig
index 510816c16da3..0d9667921f61 100644
--- a/trunk/drivers/i2c/busses/Kconfig
+++ b/trunk/drivers/i2c/busses/Kconfig
@@ -333,10 +333,10 @@ config I2C_PARPORT_LIGHT
This driver is a light version of i2c-parport. It doesn't depend
on the parport driver, and uses direct I/O access instead. This
- might be preferred on embedded systems where wasting memory for
+ might be prefered on embedded systems where wasting memory for
the clean but heavy parport handling is not an option. The
drawback is a reduced portability and the impossibility to
- daisy-chain other parallel port devices.
+ dasiy-chain other parallel port devices.
Don't say Y here if you said Y or M to i2c-parport. Saying M to
both is possible but both modules should not be loaded at the same
diff --git a/trunk/drivers/i2c/busses/i2c-ibm_iic.c b/trunk/drivers/i2c/busses/i2c-ibm_iic.c
index 80d4ba1bdfec..5bccb5d68318 100644
--- a/trunk/drivers/i2c/busses/i2c-ibm_iic.c
+++ b/trunk/drivers/i2c/busses/i2c-ibm_iic.c
@@ -1,5 +1,5 @@
/*
- * drivers/i2c/busses/i2c-ibm_iic.c
+ * drivers/i2c/i2c-ibm_iic.c
*
* Support for the IIC peripheral on IBM PPC 4xx
*
diff --git a/trunk/drivers/i2c/busses/i2c-ibm_iic.h b/trunk/drivers/i2c/busses/i2c-ibm_iic.h
index 59d7b437f7ff..2b3219d00e92 100644
--- a/trunk/drivers/i2c/busses/i2c-ibm_iic.h
+++ b/trunk/drivers/i2c/busses/i2c-ibm_iic.h
@@ -1,5 +1,5 @@
/*
- * drivers/i2c/busses/i2c-ibm_iic.h
+ * drivers/i2c/i2c-ibm_iic.h
*
* Support for the IIC peripheral on IBM PPC 4xx
*
diff --git a/trunk/drivers/i2c/busses/i2c-ixp4xx.c b/trunk/drivers/i2c/busses/i2c-ixp4xx.c
index 1ce01fb0ac09..ab573254a8aa 100644
--- a/trunk/drivers/i2c/busses/i2c-ixp4xx.c
+++ b/trunk/drivers/i2c/busses/i2c-ixp4xx.c
@@ -1,5 +1,5 @@
/*
- * drivers/i2c/busses/i2c-ixp4xx.c
+ * drivers/i2c/i2c-adap-ixp4xx.c
*
* Intel's IXP4xx XScale NPU chipsets (IXP420, 421, 422, 425) do not have
* an on board I2C controller but provide 16 GPIO pins that are often
diff --git a/trunk/drivers/i2c/busses/scx200_i2c.c b/trunk/drivers/i2c/busses/scx200_i2c.c
index 8ddbae4fafe6..8b65a5cf8251 100644
--- a/trunk/drivers/i2c/busses/scx200_i2c.c
+++ b/trunk/drivers/i2c/busses/scx200_i2c.c
@@ -1,4 +1,4 @@
-/* linux/drivers/i2c/busses/scx200_i2c.c
+/* linux/drivers/i2c/scx200_i2c.c
Copyright (c) 2001,2002 Christer Weinigel
diff --git a/trunk/drivers/ide/h8300/ide-h8300.c b/trunk/drivers/ide/h8300/ide-h8300.c
index 608ca871744b..15955996a1f3 100644
--- a/trunk/drivers/ide/h8300/ide-h8300.c
+++ b/trunk/drivers/ide/h8300/ide-h8300.c
@@ -1,5 +1,5 @@
/*
- * drivers/ide/h8300/ide-h8300.c
+ * drivers/ide/ide-h8300.c
* H8/300 generic IDE interface
*/
diff --git a/trunk/drivers/ide/ppc/pmac.c b/trunk/drivers/ide/ppc/pmac.c
index 91c5344a945d..31ad79f52df7 100644
--- a/trunk/drivers/ide/ppc/pmac.c
+++ b/trunk/drivers/ide/ppc/pmac.c
@@ -1,5 +1,5 @@
/*
- * linux/drivers/ide/ppc/pmac.c
+ * linux/drivers/ide/ide-pmac.c
*
* Support for IDE interfaces on PowerMacs.
* These IDE interfaces are memory-mapped and have a DBDMA channel
diff --git a/trunk/drivers/ieee1394/Kconfig b/trunk/drivers/ieee1394/Kconfig
index 672b92ef9f21..2769e505f051 100644
--- a/trunk/drivers/ieee1394/Kconfig
+++ b/trunk/drivers/ieee1394/Kconfig
@@ -140,7 +140,7 @@ config IEEE1394_SBP2_PHYS_DMA
help
This builds sbp2 for use with non-OHCI host adapters which do not
support physical DMA or for when ohci1394 is run with phys_dma=0.
- Physical DMA is data movement without assistance of the drivers'
+ Physical DMA is data movement without assistence of the drivers'
interrupt handlers. This option includes the interrupt handlers
that are required in absence of this hardware feature.
diff --git a/trunk/drivers/infiniband/ulp/ipoib/Kconfig b/trunk/drivers/infiniband/ulp/ipoib/Kconfig
index c75322d820d4..d74653d7de1c 100644
--- a/trunk/drivers/infiniband/ulp/ipoib/Kconfig
+++ b/trunk/drivers/infiniband/ulp/ipoib/Kconfig
@@ -26,7 +26,7 @@ config INFINIBAND_IPOIB_DEBUG_DATA
bool "IP-over-InfiniBand data path debugging"
depends on INFINIBAND_IPOIB_DEBUG
---help---
- This option compiles debugging code into the data path
+ This option compiles debugging code into the the data path
of the IPoIB driver. The output can be turned on via the
data_debug_level module parameter; however, even with output
turned off, this debugging code will have some performance
diff --git a/trunk/drivers/input/joystick/Kconfig b/trunk/drivers/input/joystick/Kconfig
index 271263443c37..67519ef0ef95 100644
--- a/trunk/drivers/input/joystick/Kconfig
+++ b/trunk/drivers/input/joystick/Kconfig
@@ -32,7 +32,7 @@ config JOYSTICK_ANALOG
module will be called analog.
config JOYSTICK_A3D
- tristate "Assassin 3D and MadCatz Panther devices"
+ tristate "Assasin 3D and MadCatz Panther devices"
select GAMEPORT
help
Say Y here if you have an FPGaming or MadCatz controller using the
diff --git a/trunk/drivers/input/keyboard/Kconfig b/trunk/drivers/input/keyboard/Kconfig
index 679bde34d247..c62e00c79dec 100644
--- a/trunk/drivers/input/keyboard/Kconfig
+++ b/trunk/drivers/input/keyboard/Kconfig
@@ -177,7 +177,7 @@ config KEYBOARD_HIL_OLD
However, it has been thoroughly tested and is stable.
If you want full HIL support including support for multiple
- keyboards, mice, and tablets, you have to enable the
+ keyboards, mices and tablets, you have to enable the
"HP System Device Controller i8042 Support" in the input/serio
submenu.
diff --git a/trunk/drivers/input/serio/Kconfig b/trunk/drivers/input/serio/Kconfig
index 8cdbfeca5903..98acf170252c 100644
--- a/trunk/drivers/input/serio/Kconfig
+++ b/trunk/drivers/input/serio/Kconfig
@@ -115,9 +115,9 @@ config HP_SDC
depends on GSC && SERIO
default y
---help---
- This option enables support for the "System Device
+ This option enables supports for the the "System Device
Controller", an i8042 carrying microcode to manage a
- few miscellaneous devices on some Hewlett Packard systems.
+ few miscellanous devices on some Hewlett Packard systems.
The SDC itself contains a 10ms resolution timer/clock capable
of delivering interrupts on a periodic and one-shot basis.
The SDC may also be connected to a battery-backed real-time
diff --git a/trunk/drivers/isdn/hardware/eicon/Kconfig b/trunk/drivers/isdn/hardware/eicon/Kconfig
index 01d4afd9d843..51e66bc64208 100644
--- a/trunk/drivers/isdn/hardware/eicon/Kconfig
+++ b/trunk/drivers/isdn/hardware/eicon/Kconfig
@@ -47,7 +47,7 @@ config ISDN_DIVAS_MAINT
tristate "DIVA Maint driver support"
depends on ISDN_DIVAS && m
help
- Enable Divas Maintenance driver.
+ Enable Divas Maintainance driver.
endmenu
diff --git a/trunk/drivers/isdn/hisax/Kconfig b/trunk/drivers/isdn/hisax/Kconfig
index eb57a988e048..6dfc94122dd9 100644
--- a/trunk/drivers/isdn/hisax/Kconfig
+++ b/trunk/drivers/isdn/hisax/Kconfig
@@ -321,7 +321,7 @@ config HISAX_HFC_PCI
help
This enables HiSax support for the HFC-S PCI 2BDS0 based cards.
- For more information see under
+ For more informations see under
.
config HISAX_W6692
diff --git a/trunk/drivers/isdn/hisax/amd7930_fn.h b/trunk/drivers/isdn/hisax/amd7930_fn.h
index 1f4d80c5e5a6..e039c3a0f2a2 100644
--- a/trunk/drivers/isdn/hisax/amd7930_fn.h
+++ b/trunk/drivers/isdn/hisax/amd7930_fn.h
@@ -1,4 +1,4 @@
-/* drivers/isdn/hisax/amd7930_fn.h
+/* 2001/10/02
*
* gerdes_amd7930.h Header-file included by
* gerdes_amd7930.c
diff --git a/trunk/drivers/isdn/hisax/niccy.c b/trunk/drivers/isdn/hisax/niccy.c
index 0945336c28da..489022bdef7b 100644
--- a/trunk/drivers/isdn/hisax/niccy.c
+++ b/trunk/drivers/isdn/hisax/niccy.c
@@ -13,6 +13,7 @@
*
*/
+
#include
#include "hisax.h"
#include "isac.h"
@@ -44,31 +45,33 @@ static const char *niccy_revision = "$Revision: 1.21.2.4 $";
#define PCI_IRQ_DISABLE 0xff0000
#define PCI_IRQ_ASSERT 0x800000
-static inline u_char readreg(unsigned int ale, unsigned int adr, u_char off)
+static inline u_char
+readreg(unsigned int ale, unsigned int adr, u_char off)
{
register u_char ret;
byteout(ale, off);
ret = bytein(adr);
- return ret;
+ return (ret);
}
-static inline void readfifo(unsigned int ale, unsigned int adr, u_char off,
- u_char *data, int size)
+static inline void
+readfifo(unsigned int ale, unsigned int adr, u_char off, u_char * data, int size)
{
byteout(ale, off);
insb(adr, data, size);
}
-static inline void writereg(unsigned int ale, unsigned int adr, u_char off,
- u_char data)
+
+static inline void
+writereg(unsigned int ale, unsigned int adr, u_char off, u_char data)
{
byteout(ale, off);
byteout(adr, data);
}
-static inline void writefifo(unsigned int ale, unsigned int adr, u_char off,
- u_char *data, int size)
+static inline void
+writefifo(unsigned int ale, unsigned int adr, u_char off, u_char * data, int size)
{
byteout(ale, off);
outsb(adr, data, size);
@@ -76,34 +79,39 @@ static inline void writefifo(unsigned int ale, unsigned int adr, u_char off,
/* Interface functions */
-static u_char ReadISAC(struct IsdnCardState *cs, u_char offset)
+static u_char
+ReadISAC(struct IsdnCardState *cs, u_char offset)
{
- return readreg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, offset);
+ return (readreg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, offset));
}
-static void WriteISAC(struct IsdnCardState *cs, u_char offset, u_char value)
+static void
+WriteISAC(struct IsdnCardState *cs, u_char offset, u_char value)
{
writereg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, offset, value);
}
-static void ReadISACfifo(struct IsdnCardState *cs, u_char * data, int size)
+static void
+ReadISACfifo(struct IsdnCardState *cs, u_char * data, int size)
{
readfifo(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, 0, data, size);
}
-static void WriteISACfifo(struct IsdnCardState *cs, u_char * data, int size)
+static void
+WriteISACfifo(struct IsdnCardState *cs, u_char * data, int size)
{
writefifo(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, 0, data, size);
}
-static u_char ReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset)
+static u_char
+ReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset)
{
- return readreg(cs->hw.niccy.hscx_ale,
- cs->hw.niccy.hscx, offset + (hscx ? 0x40 : 0));
+ return (readreg(cs->hw.niccy.hscx_ale,
+ cs->hw.niccy.hscx, offset + (hscx ? 0x40 : 0)));
}
-static void WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset,
- u_char value)
+static void
+WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value)
{
writereg(cs->hw.niccy.hscx_ale,
cs->hw.niccy.hscx, offset + (hscx ? 0x40 : 0), value);
@@ -122,8 +130,8 @@ static void WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset,
#include "hscx_irq.c"
-static irqreturn_t niccy_interrupt(int intno, void *dev_id,
- struct pt_regs *regs)
+static irqreturn_t
+niccy_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u_char val;
@@ -133,23 +141,21 @@ static irqreturn_t niccy_interrupt(int intno, void *dev_id,
if (cs->subtyp == NICCY_PCI) {
int ival;
ival = inl(cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG);
- if (!(ival & PCI_IRQ_ASSERT)) { /* IRQ not for us (shared) */
+ if (!(ival & PCI_IRQ_ASSERT)) { /* IRQ not for us (shared) */
spin_unlock_irqrestore(&cs->lock, flags);
return IRQ_NONE;
}
outl(ival, cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG);
}
- val = readreg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx,
- HSCX_ISTA + 0x40);
-Start_HSCX:
+ val = readreg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_ISTA + 0x40);
+ Start_HSCX:
if (val)
hscx_int_main(cs, val);
val = readreg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, ISAC_ISTA);
-Start_ISAC:
+ Start_ISAC:
if (val)
isac_interrupt(cs, val);
- val = readreg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx,
- HSCX_ISTA + 0x40);
+ val = readreg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_ISTA + 0x40);
if (val) {
if (cs->debug & L1_DEB_HSCX)
debugl1(cs, "HSCX IntStat after IntRoutine");
@@ -162,21 +168,21 @@ static irqreturn_t niccy_interrupt(int intno, void *dev_id,
goto Start_ISAC;
}
writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK, 0xFF);
- writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK + 0x40,
- 0xFF);
+ writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK + 0x40, 0xFF);
writereg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, ISAC_MASK, 0xFF);
writereg(cs->hw.niccy.isac_ale, cs->hw.niccy.isac, ISAC_MASK, 0);
writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK, 0);
- writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK + 0x40,0);
+ writereg(cs->hw.niccy.hscx_ale, cs->hw.niccy.hscx, HSCX_MASK + 0x40, 0);
spin_unlock_irqrestore(&cs->lock, flags);
return IRQ_HANDLED;
}
-static void release_io_niccy(struct IsdnCardState *cs)
+static void
+release_io_niccy(struct IsdnCardState *cs)
{
if (cs->subtyp == NICCY_PCI) {
int val;
-
+
val = inl(cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG);
val &= PCI_IRQ_DISABLE;
outl(val, cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG);
@@ -188,7 +194,8 @@ static void release_io_niccy(struct IsdnCardState *cs)
}
}
-static void niccy_reset(struct IsdnCardState *cs)
+static void
+niccy_reset(struct IsdnCardState *cs)
{
if (cs->subtyp == NICCY_PCI) {
int val;
@@ -200,28 +207,29 @@ static void niccy_reset(struct IsdnCardState *cs)
inithscxisac(cs, 3);
}
-static int niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg)
+static int
+niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg)
{
u_long flags;
switch (mt) {
- case CARD_RESET:
- spin_lock_irqsave(&cs->lock, flags);
- niccy_reset(cs);
- spin_unlock_irqrestore(&cs->lock, flags);
- return 0;
- case CARD_RELEASE:
- release_io_niccy(cs);
- return 0;
- case CARD_INIT:
- spin_lock_irqsave(&cs->lock, flags);
- niccy_reset(cs);
- spin_unlock_irqrestore(&cs->lock, flags);
- return 0;
- case CARD_TEST:
- return 0;
+ case CARD_RESET:
+ spin_lock_irqsave(&cs->lock, flags);
+ niccy_reset(cs);
+ spin_unlock_irqrestore(&cs->lock, flags);
+ return(0);
+ case CARD_RELEASE:
+ release_io_niccy(cs);
+ return(0);
+ case CARD_INIT:
+ spin_lock_irqsave(&cs->lock, flags);
+ niccy_reset(cs);
+ spin_unlock_irqrestore(&cs->lock, flags);
+ return(0);
+ case CARD_TEST:
+ return(0);
}
- return 0;
+ return(0);
}
static struct pci_dev *niccy_dev __devinitdata = NULL;
@@ -229,7 +237,8 @@ static struct pci_dev *niccy_dev __devinitdata = NULL;
static struct pnp_card *pnp_c __devinitdata = NULL;
#endif
-int __devinit setup_niccy(struct IsdnCard *card)
+int __devinit
+setup_niccy(struct IsdnCard *card)
{
struct IsdnCardState *cs = card->cs;
char tmp[64];
@@ -237,44 +246,40 @@ int __devinit setup_niccy(struct IsdnCard *card)
strcpy(tmp, niccy_revision);
printk(KERN_INFO "HiSax: Niccy driver Rev. %s\n", HiSax_getrev(tmp));
if (cs->typ != ISDN_CTYPE_NICCY)
- return 0;
+ return (0);
#ifdef __ISAPNP__
if (!card->para[1] && isapnp_present()) {
struct pnp_dev *pnp_d = NULL;
int err;
- pnp_c = pnp_find_card(ISAPNP_VENDOR('S', 'D', 'A'),
- ISAPNP_FUNCTION(0x0150), pnp_c);
- if (pnp_c) {
- pnp_d = pnp_find_dev(pnp_c,
- ISAPNP_VENDOR('S', 'D', 'A'),
- ISAPNP_FUNCTION(0x0150), pnp_d);
- if (!pnp_d) {
- printk(KERN_ERR "NiccyPnP: PnP error card "
- "found, no device\n");
- return 0;
+ if ((pnp_c = pnp_find_card(
+ ISAPNP_VENDOR('S', 'D', 'A'),
+ ISAPNP_FUNCTION(0x0150), pnp_c))) {
+ if (!(pnp_d = pnp_find_dev(pnp_c,
+ ISAPNP_VENDOR('S', 'D', 'A'),
+ ISAPNP_FUNCTION(0x0150), pnp_d))) {
+ printk(KERN_ERR "NiccyPnP: PnP error card found, no device\n");
+ return (0);
}
pnp_disable_dev(pnp_d);
err = pnp_activate_dev(pnp_d);
- if (err < 0) {
- printk(KERN_WARNING "%s: pnp_activate_dev "
- "ret(%d)\n", __FUNCTION__, err);
- return 0;
+ if (err<0) {
+ printk(KERN_WARNING "%s: pnp_activate_dev ret(%d)\n",
+ __FUNCTION__, err);
+ return(0);
}
card->para[1] = pnp_port_start(pnp_d, 0);
card->para[2] = pnp_port_start(pnp_d, 1);
card->para[0] = pnp_irq(pnp_d, 0);
- if (!card->para[0] || !card->para[1] ||
- !card->para[2]) {
- printk(KERN_ERR "NiccyPnP:some resources are "
- "missing %ld/%lx/%lx\n",
- card->para[0], card->para[1],
- card->para[2]);
+ if (!card->para[0] || !card->para[1] || !card->para[2]) {
+ printk(KERN_ERR "NiccyPnP:some resources are missing %ld/%lx/%lx\n",
+ card->para[0], card->para[1], card->para[2]);
pnp_disable_dev(pnp_d);
- return 0;
+ return(0);
}
- } else
+ } else {
printk(KERN_INFO "NiccyPnP: no ISAPnP card found\n");
+ }
}
#endif
if (card->para[1]) {
@@ -286,51 +291,50 @@ int __devinit setup_niccy(struct IsdnCard *card)
cs->subtyp = NICCY_PNP;
cs->irq = card->para[0];
if (!request_region(cs->hw.niccy.isac, 2, "niccy data")) {
- printk(KERN_WARNING "HiSax: %s data port %x-%x "
- "already in use\n", CardType[card->typ],
- cs->hw.niccy.isac, cs->hw.niccy.isac + 1);
- return 0;
+ printk(KERN_WARNING
+ "HiSax: %s data port %x-%x already in use\n",
+ CardType[card->typ],
+ cs->hw.niccy.isac,
+ cs->hw.niccy.isac + 1);
+ return (0);
}
if (!request_region(cs->hw.niccy.isac_ale, 2, "niccy addr")) {
- printk(KERN_WARNING "HiSax: %s address port %x-%x "
- "already in use\n", CardType[card->typ],
+ printk(KERN_WARNING
+ "HiSax: %s address port %x-%x already in use\n",
+ CardType[card->typ],
cs->hw.niccy.isac_ale,
cs->hw.niccy.isac_ale + 1);
release_region(cs->hw.niccy.isac, 2);
- return 0;
+ return (0);
}
} else {
#ifdef CONFIG_PCI
u_int pci_ioaddr;
cs->subtyp = 0;
if ((niccy_dev = pci_find_device(PCI_VENDOR_ID_SATSAGEM,
- PCI_DEVICE_ID_SATSAGEM_NICCY,
- niccy_dev))) {
+ PCI_DEVICE_ID_SATSAGEM_NICCY, niccy_dev))) {
if (pci_enable_device(niccy_dev))
- return 0;
+ return(0);
/* get IRQ */
if (!niccy_dev->irq) {
- printk(KERN_WARNING
- "Niccy: No IRQ for PCI card found\n");
- return 0;
+ printk(KERN_WARNING "Niccy: No IRQ for PCI card found\n");
+ return(0);
}
cs->irq = niccy_dev->irq;
cs->hw.niccy.cfg_reg = pci_resource_start(niccy_dev, 0);
if (!cs->hw.niccy.cfg_reg) {
- printk(KERN_WARNING
- "Niccy: No IO-Adr for PCI cfg found\n");
- return 0;
+ printk(KERN_WARNING "Niccy: No IO-Adr for PCI cfg found\n");
+ return(0);
}
pci_ioaddr = pci_resource_start(niccy_dev, 1);
if (!pci_ioaddr) {
- printk(KERN_WARNING
- "Niccy: No IO-Adr for PCI card found\n");
- return 0;
+ printk(KERN_WARNING "Niccy: No IO-Adr for PCI card found\n");
+ return(0);
}
cs->subtyp = NICCY_PCI;
} else {
printk(KERN_WARNING "Niccy: No PCI card found\n");
- return 0;
+ return(0);
}
cs->irq_flags |= IRQF_SHARED;
cs->hw.niccy.isac = pci_ioaddr + ISAC_PCI_DATA;
@@ -339,28 +343,29 @@ int __devinit setup_niccy(struct IsdnCard *card)
cs->hw.niccy.hscx_ale = pci_ioaddr + HSCX_PCI_ADDR;
if (!request_region(cs->hw.niccy.isac, 4, "niccy")) {
printk(KERN_WARNING
- "HiSax: %s data port %x-%x already in use\n",
- CardType[card->typ],
- cs->hw.niccy.isac, cs->hw.niccy.isac + 4);
- return 0;
+ "HiSax: %s data port %x-%x already in use\n",
+ CardType[card->typ],
+ cs->hw.niccy.isac,
+ cs->hw.niccy.isac + 4);
+ return (0);
}
if (!request_region(cs->hw.niccy.cfg_reg, 0x40, "niccy pci")) {
printk(KERN_WARNING
"HiSax: %s pci port %x-%x already in use\n",
- CardType[card->typ],
- cs->hw.niccy.cfg_reg,
- cs->hw.niccy.cfg_reg + 0x40);
+ CardType[card->typ],
+ cs->hw.niccy.cfg_reg,
+ cs->hw.niccy.cfg_reg + 0x40);
release_region(cs->hw.niccy.isac, 4);
- return 0;
+ return (0);
}
#else
printk(KERN_WARNING "Niccy: io0 0 and NO_PCI_BIOS\n");
printk(KERN_WARNING "Niccy: unable to config NICCY PCI\n");
- return 0;
-#endif /* CONFIG_PCI */
+ return (0);
+#endif /* CONFIG_PCI */
}
printk(KERN_INFO "HiSax: %s %s config irq:%d data:0x%X ale:0x%X\n",
- CardType[cs->typ], (cs->subtyp == 1) ? "PnP" : "PCI",
+ CardType[cs->typ], (cs->subtyp==1) ? "PnP":"PCI",
cs->irq, cs->hw.niccy.isac, cs->hw.niccy.isac_ale);
setup_isac(cs);
cs->readisac = &ReadISAC;
@@ -374,10 +379,10 @@ int __devinit setup_niccy(struct IsdnCard *card)
cs->irq_func = &niccy_interrupt;
ISACVersion(cs, "Niccy:");
if (HscxVersion(cs, "Niccy:")) {
- printk(KERN_WARNING "Niccy: wrong HSCX versions check IO "
- "address\n");
+ printk(KERN_WARNING
+ "Niccy: wrong HSCX versions check IO address\n");
release_io_niccy(cs);
- return 0;
+ return (0);
}
- return 1;
+ return (1);
}
diff --git a/trunk/drivers/leds/led-class.c b/trunk/drivers/leds/led-class.c
index aecbbe2e89a9..d424b4452028 100644
--- a/trunk/drivers/leds/led-class.c
+++ b/trunk/drivers/leds/led-class.c
@@ -125,7 +125,7 @@ EXPORT_SYMBOL_GPL(led_classdev_register);
/**
* led_classdev_unregister - unregisters a object of led_properties class.
- * @led_cdev: the led device to unregister
+ * @led_cdev: the led device to unreigister
*
* Unregisters a previously registered via led_classdev_register object.
*/
diff --git a/trunk/drivers/leds/leds-locomo.c b/trunk/drivers/leds/leds-locomo.c
index 6f2d449ba983..3b87951aa555 100644
--- a/trunk/drivers/leds/leds-locomo.c
+++ b/trunk/drivers/leds/leds-locomo.c
@@ -1,5 +1,5 @@
/*
- * linux/drivers/leds/leds-locomo.c
+ * linux/drivers/leds/locomo.c
*
* Copyright (C) 2005 John Lenz
*
diff --git a/trunk/drivers/macintosh/Kconfig b/trunk/drivers/macintosh/Kconfig
index 7f8477d3a661..d5d649f5ccdb 100644
--- a/trunk/drivers/macintosh/Kconfig
+++ b/trunk/drivers/macintosh/Kconfig
@@ -186,7 +186,7 @@ config THERM_ADT746X
depends on I2C && I2C_POWERMAC && PPC_PMAC && !PPC_PMAC64
help
This driver provides some thermostat and fan control for the
- iBook G4, and the ATI based aluminium PowerBooks, allowing slightly
+ iBook G4, and the ATI based aluminium PowerBooks, allowing slighlty
better fan behaviour by default, and some manual control.
config THERM_PM72
diff --git a/trunk/drivers/macintosh/adbhid.c b/trunk/drivers/macintosh/adbhid.c
index b7fb367808d8..efd51e01c06e 100644
--- a/trunk/drivers/macintosh/adbhid.c
+++ b/trunk/drivers/macintosh/adbhid.c
@@ -1,5 +1,5 @@
/*
- * drivers/macintosh/adbhid.c
+ * drivers/input/adbhid.c
*
* ADB HID driver for Power Macintosh computers.
*
diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c
index cb8281605be8..38a0a5741d52 100644
--- a/trunk/drivers/md/md.c
+++ b/trunk/drivers/md/md.c
@@ -4438,7 +4438,8 @@ static int md_release(struct inode *inode, struct file * file)
{
mddev_t *mddev = inode->i_bdev->bd_disk->private_data;
- BUG_ON(!mddev);
+ if (!mddev)
+ BUG();
mddev_put(mddev);
return 0;
diff --git a/trunk/drivers/md/raid5.c b/trunk/drivers/md/raid5.c
index e14f45780720..37e4ff661b6c 100644
--- a/trunk/drivers/md/raid5.c
+++ b/trunk/drivers/md/raid5.c
@@ -1105,7 +1105,7 @@ static void compute_parity6(struct stripe_head *sh, int method)
if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags))
wake_up(&conf->wait_for_overlap);
- BUG_ON(sh->dev[i].written);
+ if (sh->dev[i].written) BUG();
sh->dev[i].written = chosen;
}
break;
diff --git a/trunk/drivers/media/dvb/cinergyT2/Kconfig b/trunk/drivers/media/dvb/cinergyT2/Kconfig
index 3d778c5aba68..b5cdd57ec6f5 100644
--- a/trunk/drivers/media/dvb/cinergyT2/Kconfig
+++ b/trunk/drivers/media/dvb/cinergyT2/Kconfig
@@ -56,7 +56,7 @@ config DVB_CINERGYT2_QUERY_INTERVAL
measurements.
Please keep in mind that these updates cause traffic on the tuner
- control bus and thus may or may not affect reception sensitivity.
+ control bus and thus may or may not affect receiption sensitivity.
The default value should be a safe choice for common applications.
diff --git a/trunk/drivers/media/radio/Kconfig b/trunk/drivers/media/radio/Kconfig
index 6d96b17a7f81..7015517e2c1b 100644
--- a/trunk/drivers/media/radio/Kconfig
+++ b/trunk/drivers/media/radio/Kconfig
@@ -195,7 +195,8 @@ config RADIO_MIROPCM20_RDS
---help---
Choose Y here if you want to see RDS/RBDS information like
RadioText, Programme Service name, Clock Time and date, Programme
- Type and Traffic Announcement/Programme identification.
+ TYpe and Traffic Announcement/Programme identification. You also
+ need to say Y to "miroSOUND PCM20 radio" and devfs!
It's not possible to read the raw RDS packets from the device, so
the driver cant provide an V4L interface for this. But the
diff --git a/trunk/drivers/media/video/Kconfig b/trunk/drivers/media/video/Kconfig
index afb734df6e05..5c53fe62d38b 100644
--- a/trunk/drivers/media/video/Kconfig
+++ b/trunk/drivers/media/video/Kconfig
@@ -353,7 +353,7 @@ config VIDEO_SAA6588
help
Support for Radio Data System (RDS) decoder. This allows seeing
radio station identification transmitted using this standard.
- Currently, it works only with bt8x8 chips.
+ Currentlly, it works only with bt8x8 chips.
To compile this driver as a module, choose M here: the
module will be called saa6588.
diff --git a/trunk/drivers/media/video/cx88/Kconfig b/trunk/drivers/media/video/cx88/Kconfig
index 0f9d96963618..51d68f32aa06 100644
--- a/trunk/drivers/media/video/cx88/Kconfig
+++ b/trunk/drivers/media/video/cx88/Kconfig
@@ -69,6 +69,6 @@ config VIDEO_CX88_VP3054
depends on VIDEO_CX88_DVB && DVB_MT352
---help---
This adds DVB-T support for cards based on the
- Conexant 2388x chip and the MT352 demodulator,
+ Connexant 2388x chip and the MT352 demodulator,
which also require support for the VP-3054
Secondary I2C bus, such at DNTV Live! DVB-T Pro.
diff --git a/trunk/drivers/media/video/pwc/philips.txt b/trunk/drivers/media/video/pwc/philips.txt
index f5e848410311..11f751a6bda5 100644
--- a/trunk/drivers/media/video/pwc/philips.txt
+++ b/trunk/drivers/media/video/pwc/philips.txt
@@ -175,8 +175,8 @@ dev_hint
- If a device node is already occupied, registration will fail and
the webcam is not available.
- You can have up to 64 video devices; be sure to make enough device
- nodes in /dev if you want to spread the numbers.
- After /dev/video9 comes /dev/video10 (not /dev/videoA).
+ nodes in /dev if you want to spread the numbers (this does not apply
+ to devfs). After /dev/video9 comes /dev/video10 (not /dev/videoA).
- If a camera does not match any dev_hint, it will simply get assigned
the first available device node, just as it used to be.
diff --git a/trunk/drivers/misc/Kconfig b/trunk/drivers/misc/Kconfig
index 3df0e7a07c46..7fc692a8f5b0 100644
--- a/trunk/drivers/misc/Kconfig
+++ b/trunk/drivers/misc/Kconfig
@@ -18,7 +18,7 @@ config IBM_ASM
service processor board as a regular serial port. To make use of
this feature serial driver support (CONFIG_SERIAL_8250) must be
enabled.
-
+
WARNING: This software may not be supported or function
correctly on your IBM server. Please consult the IBM ServerProven
website for
@@ -28,33 +28,5 @@ config IBM_ASM
If unsure, say N.
-config TIFM_CORE
- tristate "TI Flash Media interface support (EXPERIMENTAL)"
- depends on EXPERIMENTAL
- help
- If you want support for Texas Instruments(R) Flash Media adapters
- you should select this option and then also choose an appropriate
- host adapter, such as 'TI Flash Media PCI74xx/PCI76xx host adapter
- support', if you have a TI PCI74xx compatible card reader, for
- example.
- You will also have to select some flash card format drivers. MMC/SD
- cards are supported via 'MMC/SD Card support: TI Flash Media MMC/SD
- Interface support (MMC_TIFM_SD)'.
-
- To compile this driver as a module, choose M here: the module will
- be called tifm_core.
-
-config TIFM_7XX1
- tristate "TI Flash Media PCI74xx/PCI76xx host adapter support (EXPERIMENTAL)"
- depends on PCI && TIFM_CORE && EXPERIMENTAL
- default TIFM_CORE
- help
- This option enables support for Texas Instruments(R) PCI74xx and
- PCI76xx families of Flash Media adapters, found in many laptops.
- To make actual use of the device, you will have to select some
- flash card format drivers, as outlined in the TIFM_CORE Help.
-
- To compile this driver as a module, choose M here: the module will
- be called tifm_7xx1.
-
endmenu
+
diff --git a/trunk/drivers/misc/Makefile b/trunk/drivers/misc/Makefile
index d65ece76095a..c1bf1fb04c5c 100644
--- a/trunk/drivers/misc/Makefile
+++ b/trunk/drivers/misc/Makefile
@@ -6,5 +6,3 @@ obj- := misc.o # Dummy rule to force built-in.o to be made
obj-$(CONFIG_IBM_ASM) += ibmasm/
obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/
obj-$(CONFIG_LKDTM) += lkdtm.o
-obj-$(CONFIG_TIFM_CORE) += tifm_core.o
-obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o
diff --git a/trunk/drivers/misc/tifm_7xx1.c b/trunk/drivers/misc/tifm_7xx1.c
deleted file mode 100644
index a7ed30446185..000000000000
--- a/trunk/drivers/misc/tifm_7xx1.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * tifm_7xx1.c - TI FlashMedia driver
- *
- * Copyright (C) 2006 Alex Dubov
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#include
-#include
-
-#define DRIVER_NAME "tifm_7xx1"
-#define DRIVER_VERSION "0.6"
-
-static void tifm_7xx1_eject(struct tifm_adapter *fm, struct tifm_dev *sock)
-{
- int cnt;
- unsigned long flags;
-
- spin_lock_irqsave(&fm->lock, flags);
- if (!fm->inhibit_new_cards) {
- for (cnt = 0; cnt < fm->max_sockets; cnt++) {
- if (fm->sockets[cnt] == sock) {
- fm->remove_mask |= (1 << cnt);
- queue_work(fm->wq, &fm->media_remover);
- break;
- }
- }
- }
- spin_unlock_irqrestore(&fm->lock, flags);
-}
-
-static void tifm_7xx1_remove_media(void *adapter)
-{
- struct tifm_adapter *fm = adapter;
- unsigned long flags;
- int cnt;
- struct tifm_dev *sock;
-
- if (!class_device_get(&fm->cdev))
- return;
- spin_lock_irqsave(&fm->lock, flags);
- for (cnt = 0; cnt < fm->max_sockets; cnt++) {
- if (fm->sockets[cnt] && (fm->remove_mask & (1 << cnt))) {
- printk(KERN_INFO DRIVER_NAME
- ": demand removing card from socket %d\n", cnt);
- sock = fm->sockets[cnt];
- fm->sockets[cnt] = 0;
- fm->remove_mask &= ~(1 << cnt);
-
- writel(0x0e00, sock->addr + SOCK_CONTROL);
-
- writel((TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK) << cnt,
- fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- writel((TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK) << cnt,
- fm->addr + FM_SET_INTERRUPT_ENABLE);
-
- spin_unlock_irqrestore(&fm->lock, flags);
- device_unregister(&sock->dev);
- spin_lock_irqsave(&fm->lock, flags);
- }
- }
- spin_unlock_irqrestore(&fm->lock, flags);
- class_device_put(&fm->cdev);
-}
-
-static irqreturn_t tifm_7xx1_isr(int irq, void *dev_id, struct pt_regs *regs)
-{
- struct tifm_adapter *fm = dev_id;
- unsigned int irq_status;
- unsigned int sock_irq_status, cnt;
-
- spin_lock(&fm->lock);
- irq_status = readl(fm->addr + FM_INTERRUPT_STATUS);
- if (irq_status == 0 || irq_status == (~0)) {
- spin_unlock(&fm->lock);
- return IRQ_NONE;
- }
-
- if (irq_status & TIFM_IRQ_ENABLE) {
- writel(TIFM_IRQ_ENABLE, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
-
- for (cnt = 0; cnt < fm->max_sockets; cnt++) {
- sock_irq_status = (irq_status >> cnt) &
- (TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK);
-
- if (fm->sockets[cnt]) {
- if (sock_irq_status &&
- fm->sockets[cnt]->signal_irq)
- sock_irq_status = fm->sockets[cnt]->
- signal_irq(fm->sockets[cnt],
- sock_irq_status);
-
- if (irq_status & (1 << cnt))
- fm->remove_mask |= 1 << cnt;
- } else {
- if (irq_status & (1 << cnt))
- fm->insert_mask |= 1 << cnt;
- }
- }
- }
- writel(irq_status, fm->addr + FM_INTERRUPT_STATUS);
-
- if (!fm->inhibit_new_cards) {
- if (!fm->remove_mask && !fm->insert_mask) {
- writel(TIFM_IRQ_ENABLE,
- fm->addr + FM_SET_INTERRUPT_ENABLE);
- } else {
- queue_work(fm->wq, &fm->media_remover);
- queue_work(fm->wq, &fm->media_inserter);
- }
- }
-
- spin_unlock(&fm->lock);
- return IRQ_HANDLED;
-}
-
-static tifm_media_id tifm_7xx1_toggle_sock_power(char *sock_addr, int is_x2)
-{
- unsigned int s_state;
- int cnt;
-
- writel(0x0e00, sock_addr + SOCK_CONTROL);
-
- for (cnt = 0; cnt < 100; cnt++) {
- if (!(TIFM_SOCK_STATE_POWERED &
- readl(sock_addr + SOCK_PRESENT_STATE)))
- break;
- msleep(10);
- }
-
- s_state = readl(sock_addr + SOCK_PRESENT_STATE);
- if (!(TIFM_SOCK_STATE_OCCUPIED & s_state))
- return FM_NULL;
-
- if (is_x2) {
- writel((s_state & 7) | 0x0c00, sock_addr + SOCK_CONTROL);
- } else {
- // SmartMedia cards need extra 40 msec
- if (((readl(sock_addr + SOCK_PRESENT_STATE) >> 4) & 7) == 1)
- msleep(40);
- writel(readl(sock_addr + SOCK_CONTROL) | TIFM_CTRL_LED,
- sock_addr + SOCK_CONTROL);
- msleep(10);
- writel((s_state & 0x7) | 0x0c00 | TIFM_CTRL_LED,
- sock_addr + SOCK_CONTROL);
- }
-
- for (cnt = 0; cnt < 100; cnt++) {
- if ((TIFM_SOCK_STATE_POWERED &
- readl(sock_addr + SOCK_PRESENT_STATE)))
- break;
- msleep(10);
- }
-
- if (!is_x2)
- writel(readl(sock_addr + SOCK_CONTROL) & (~TIFM_CTRL_LED),
- sock_addr + SOCK_CONTROL);
-
- return (readl(sock_addr + SOCK_PRESENT_STATE) >> 4) & 7;
-}
-
-inline static char *tifm_7xx1_sock_addr(char *base_addr, unsigned int sock_num)
-{
- return base_addr + ((sock_num + 1) << 10);
-}
-
-static void tifm_7xx1_insert_media(void *adapter)
-{
- struct tifm_adapter *fm = adapter;
- unsigned long flags;
- tifm_media_id media_id;
- char *card_name = "xx";
- int cnt, ok_to_register;
- unsigned int insert_mask;
- struct tifm_dev *new_sock = 0;
-
- if (!class_device_get(&fm->cdev))
- return;
- spin_lock_irqsave(&fm->lock, flags);
- insert_mask = fm->insert_mask;
- fm->insert_mask = 0;
- if (fm->inhibit_new_cards) {
- spin_unlock_irqrestore(&fm->lock, flags);
- class_device_put(&fm->cdev);
- return;
- }
- spin_unlock_irqrestore(&fm->lock, flags);
-
- for (cnt = 0; cnt < fm->max_sockets; cnt++) {
- if (!(insert_mask & (1 << cnt)))
- continue;
-
- media_id = tifm_7xx1_toggle_sock_power(tifm_7xx1_sock_addr(fm->addr, cnt),
- fm->max_sockets == 2);
- if (media_id) {
- ok_to_register = 0;
- new_sock = tifm_alloc_device(fm, cnt);
- if (new_sock) {
- new_sock->addr = tifm_7xx1_sock_addr(fm->addr,
- cnt);
- new_sock->media_id = media_id;
- switch (media_id) {
- case 1:
- card_name = "xd";
- break;
- case 2:
- card_name = "ms";
- break;
- case 3:
- card_name = "sd";
- break;
- default:
- break;
- }
- snprintf(new_sock->dev.bus_id, BUS_ID_SIZE,
- "tifm_%s%u:%u", card_name, fm->id, cnt);
- printk(KERN_INFO DRIVER_NAME
- ": %s card detected in socket %d\n",
- card_name, cnt);
- spin_lock_irqsave(&fm->lock, flags);
- if (!fm->sockets[cnt]) {
- fm->sockets[cnt] = new_sock;
- ok_to_register = 1;
- }
- spin_unlock_irqrestore(&fm->lock, flags);
- if (!ok_to_register ||
- device_register(&new_sock->dev)) {
- spin_lock_irqsave(&fm->lock, flags);
- fm->sockets[cnt] = 0;
- spin_unlock_irqrestore(&fm->lock,
- flags);
- tifm_free_device(&new_sock->dev);
- }
- }
- }
- writel((TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK) << cnt,
- fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- writel((TIFM_IRQ_FIFOMASK | TIFM_IRQ_CARDMASK) << cnt,
- fm->addr + FM_SET_INTERRUPT_ENABLE);
- }
-
- writel(TIFM_IRQ_ENABLE, fm->addr + FM_SET_INTERRUPT_ENABLE);
- class_device_put(&fm->cdev);
-}
-
-static int tifm_7xx1_suspend(struct pci_dev *dev, pm_message_t state)
-{
- struct tifm_adapter *fm = pci_get_drvdata(dev);
- unsigned long flags;
-
- spin_lock_irqsave(&fm->lock, flags);
- fm->inhibit_new_cards = 1;
- fm->remove_mask = 0xf;
- fm->insert_mask = 0;
- writel(TIFM_IRQ_ENABLE, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- spin_unlock_irqrestore(&fm->lock, flags);
- flush_workqueue(fm->wq);
-
- tifm_7xx1_remove_media(fm);
-
- pci_set_power_state(dev, PCI_D3hot);
- pci_disable_device(dev);
- pci_save_state(dev);
- return 0;
-}
-
-static int tifm_7xx1_resume(struct pci_dev *dev)
-{
- struct tifm_adapter *fm = pci_get_drvdata(dev);
- unsigned long flags;
-
- pci_restore_state(dev);
- pci_enable_device(dev);
- pci_set_power_state(dev, PCI_D0);
- pci_set_master(dev);
-
- spin_lock_irqsave(&fm->lock, flags);
- fm->inhibit_new_cards = 0;
- writel(TIFM_IRQ_SETALL, fm->addr + FM_INTERRUPT_STATUS);
- writel(TIFM_IRQ_SETALL, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- writel(TIFM_IRQ_ENABLE | TIFM_IRQ_SETALLSOCK,
- fm->addr + FM_SET_INTERRUPT_ENABLE);
- fm->insert_mask = 0xf;
- spin_unlock_irqrestore(&fm->lock, flags);
- return 0;
-}
-
-static int tifm_7xx1_probe(struct pci_dev *dev,
- const struct pci_device_id *dev_id)
-{
- struct tifm_adapter *fm;
- int pci_dev_busy = 0;
- int rc;
-
- rc = pci_set_dma_mask(dev, DMA_32BIT_MASK);
- if (rc)
- return rc;
-
- rc = pci_enable_device(dev);
- if (rc)
- return rc;
-
- pci_set_master(dev);
-
- rc = pci_request_regions(dev, DRIVER_NAME);
- if (rc) {
- pci_dev_busy = 1;
- goto err_out;
- }
-
- pci_intx(dev, 1);
-
- fm = tifm_alloc_adapter();
- if (!fm) {
- rc = -ENOMEM;
- goto err_out_int;
- }
-
- fm->dev = &dev->dev;
- fm->max_sockets = (dev->device == 0x803B) ? 2 : 4;
- fm->sockets = kzalloc(sizeof(struct tifm_dev*) * fm->max_sockets,
- GFP_KERNEL);
- if (!fm->sockets)
- goto err_out_free;
-
- INIT_WORK(&fm->media_inserter, tifm_7xx1_insert_media, fm);
- INIT_WORK(&fm->media_remover, tifm_7xx1_remove_media, fm);
- fm->eject = tifm_7xx1_eject;
- pci_set_drvdata(dev, fm);
-
- fm->addr = ioremap(pci_resource_start(dev, 0),
- pci_resource_len(dev, 0));
- if (!fm->addr)
- goto err_out_free;
-
- rc = request_irq(dev->irq, tifm_7xx1_isr, SA_SHIRQ, DRIVER_NAME, fm);
- if (rc)
- goto err_out_unmap;
-
- rc = tifm_add_adapter(fm);
- if (rc)
- goto err_out_irq;
-
- writel(TIFM_IRQ_SETALL, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- writel(TIFM_IRQ_ENABLE | TIFM_IRQ_SETALLSOCK,
- fm->addr + FM_SET_INTERRUPT_ENABLE);
-
- fm->insert_mask = 0xf;
-
- return 0;
-
-err_out_irq:
- free_irq(dev->irq, fm);
-err_out_unmap:
- iounmap(fm->addr);
-err_out_free:
- pci_set_drvdata(dev, NULL);
- tifm_free_adapter(fm);
-err_out_int:
- pci_intx(dev, 0);
- pci_release_regions(dev);
-err_out:
- if (!pci_dev_busy)
- pci_disable_device(dev);
- return rc;
-}
-
-static void tifm_7xx1_remove(struct pci_dev *dev)
-{
- struct tifm_adapter *fm = pci_get_drvdata(dev);
- unsigned long flags;
-
- spin_lock_irqsave(&fm->lock, flags);
- fm->inhibit_new_cards = 1;
- fm->remove_mask = 0xf;
- fm->insert_mask = 0;
- writel(TIFM_IRQ_ENABLE, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- spin_unlock_irqrestore(&fm->lock, flags);
-
- flush_workqueue(fm->wq);
-
- tifm_7xx1_remove_media(fm);
-
- writel(TIFM_IRQ_SETALL, fm->addr + FM_CLEAR_INTERRUPT_ENABLE);
- free_irq(dev->irq, fm);
-
- tifm_remove_adapter(fm);
-
- pci_set_drvdata(dev, 0);
-
- iounmap(fm->addr);
- pci_intx(dev, 0);
- pci_release_regions(dev);
-
- pci_disable_device(dev);
- tifm_free_adapter(fm);
-}
-
-static struct pci_device_id tifm_7xx1_pci_tbl [] = {
- { PCI_VENDOR_ID_TI, 0x8033, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
- 0 }, /* xx21 - the one I have */
- { PCI_VENDOR_ID_TI, 0x803B, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
- 0 }, /* xx12 - should be also supported */
- { }
-};
-
-static struct pci_driver tifm_7xx1_driver = {
- .name = DRIVER_NAME,
- .id_table = tifm_7xx1_pci_tbl,
- .probe = tifm_7xx1_probe,
- .remove = tifm_7xx1_remove,
- .suspend = tifm_7xx1_suspend,
- .resume = tifm_7xx1_resume,
-};
-
-static int __init tifm_7xx1_init(void)
-{
- return pci_register_driver(&tifm_7xx1_driver);
-}
-
-static void __exit tifm_7xx1_exit(void)
-{
- pci_unregister_driver(&tifm_7xx1_driver);
-}
-
-MODULE_AUTHOR("Alex Dubov");
-MODULE_DESCRIPTION("TI FlashMedia host driver");
-MODULE_LICENSE("GPL");
-MODULE_DEVICE_TABLE(pci, tifm_7xx1_pci_tbl);
-MODULE_VERSION(DRIVER_VERSION);
-
-module_init(tifm_7xx1_init);
-module_exit(tifm_7xx1_exit);
diff --git a/trunk/drivers/misc/tifm_core.c b/trunk/drivers/misc/tifm_core.c
deleted file mode 100644
index cca5f8522469..000000000000
--- a/trunk/drivers/misc/tifm_core.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * tifm_core.c - TI FlashMedia driver
- *
- * Copyright (C) 2006 Alex Dubov
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#include
-#include
-#include
-
-#define DRIVER_NAME "tifm_core"
-#define DRIVER_VERSION "0.6"
-
-static DEFINE_IDR(tifm_adapter_idr);
-static DEFINE_SPINLOCK(tifm_adapter_lock);
-
-static tifm_media_id *tifm_device_match(tifm_media_id *ids,
- struct tifm_dev *dev)
-{
- while (*ids) {
- if (dev->media_id == *ids)
- return ids;
- ids++;
- }
- return NULL;
-}
-
-static int tifm_match(struct device *dev, struct device_driver *drv)
-{
- struct tifm_dev *fm_dev = container_of(dev, struct tifm_dev, dev);
- struct tifm_driver *fm_drv;
-
- fm_drv = container_of(drv, struct tifm_driver, driver);
- if (!fm_drv->id_table)
- return -EINVAL;
- if (tifm_device_match(fm_drv->id_table, fm_dev))
- return 1;
- return -ENODEV;
-}
-
-static int tifm_uevent(struct device *dev, char **envp, int num_envp,
- char *buffer, int buffer_size)
-{
- struct tifm_dev *fm_dev;
- int i = 0;
- int length = 0;
- const char *card_type_name[] = {"INV", "SM", "MS", "SD"};
-
- if (!dev || !(fm_dev = container_of(dev, struct tifm_dev, dev)))
- return -ENODEV;
- if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
- "TIFM_CARD_TYPE=%s", card_type_name[fm_dev->media_id]))
- return -ENOMEM;
-
- return 0;
-}
-
-static struct bus_type tifm_bus_type = {
- .name = "tifm",
- .match = tifm_match,
- .uevent = tifm_uevent,
-};
-
-static void tifm_free(struct class_device *cdev)
-{
- struct tifm_adapter *fm = container_of(cdev, struct tifm_adapter, cdev);
-
- kfree(fm->sockets);
- if (fm->wq)
- destroy_workqueue(fm->wq);
- kfree(fm);
-}
-
-static struct class tifm_adapter_class = {
- .name = "tifm_adapter",
- .release = tifm_free
-};
-
-struct tifm_adapter *tifm_alloc_adapter(void)
-{
- struct tifm_adapter *fm;
-
- fm = kzalloc(sizeof(struct tifm_adapter), GFP_KERNEL);
- if (fm) {
- fm->cdev.class = &tifm_adapter_class;
- spin_lock_init(&fm->lock);
- class_device_initialize(&fm->cdev);
- }
- return fm;
-}
-EXPORT_SYMBOL(tifm_alloc_adapter);
-
-void tifm_free_adapter(struct tifm_adapter *fm)
-{
- class_device_put(&fm->cdev);
-}
-EXPORT_SYMBOL(tifm_free_adapter);
-
-int tifm_add_adapter(struct tifm_adapter *fm)
-{
- int rc;
-
- if (!idr_pre_get(&tifm_adapter_idr, GFP_KERNEL))
- return -ENOMEM;
-
- spin_lock(&tifm_adapter_lock);
- rc = idr_get_new(&tifm_adapter_idr, fm, &fm->id);
- spin_unlock(&tifm_adapter_lock);
- if (!rc) {
- snprintf(fm->cdev.class_id, BUS_ID_SIZE, "tifm%u", fm->id);
- strncpy(fm->wq_name, fm->cdev.class_id, KOBJ_NAME_LEN);
-
- fm->wq = create_singlethread_workqueue(fm->wq_name);
- if (fm->wq)
- return class_device_add(&fm->cdev);
-
- spin_lock(&tifm_adapter_lock);
- idr_remove(&tifm_adapter_idr, fm->id);
- spin_unlock(&tifm_adapter_lock);
- rc = -ENOMEM;
- }
- return rc;
-}
-EXPORT_SYMBOL(tifm_add_adapter);
-
-void tifm_remove_adapter(struct tifm_adapter *fm)
-{
- class_device_del(&fm->cdev);
-
- spin_lock(&tifm_adapter_lock);
- idr_remove(&tifm_adapter_idr, fm->id);
- spin_unlock(&tifm_adapter_lock);
-}
-EXPORT_SYMBOL(tifm_remove_adapter);
-
-void tifm_free_device(struct device *dev)
-{
- struct tifm_dev *fm_dev = container_of(dev, struct tifm_dev, dev);
- if (fm_dev->wq)
- destroy_workqueue(fm_dev->wq);
- kfree(fm_dev);
-}
-EXPORT_SYMBOL(tifm_free_device);
-
-struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id)
-{
- struct tifm_dev *dev = kzalloc(sizeof(struct tifm_dev), GFP_KERNEL);
-
- if (dev) {
- spin_lock_init(&dev->lock);
- snprintf(dev->wq_name, KOBJ_NAME_LEN, "tifm%u:%u", fm->id, id);
- dev->wq = create_singlethread_workqueue(dev->wq_name);
- if (!dev->wq) {
- kfree(dev);
- return 0;
- }
- dev->dev.parent = fm->dev;
- dev->dev.bus = &tifm_bus_type;
- dev->dev.release = tifm_free_device;
- }
- return dev;
-}
-EXPORT_SYMBOL(tifm_alloc_device);
-
-void tifm_eject(struct tifm_dev *sock)
-{
- struct tifm_adapter *fm = dev_get_drvdata(sock->dev.parent);
- fm->eject(fm, sock);
-}
-EXPORT_SYMBOL(tifm_eject);
-
-int tifm_map_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents,
- int direction)
-{
- return pci_map_sg(to_pci_dev(sock->dev.parent), sg, nents, direction);
-}
-EXPORT_SYMBOL(tifm_map_sg);
-
-void tifm_unmap_sg(struct tifm_dev *sock, struct scatterlist *sg, int nents,
- int direction)
-{
- pci_unmap_sg(to_pci_dev(sock->dev.parent), sg, nents, direction);
-}
-EXPORT_SYMBOL(tifm_unmap_sg);
-
-static int tifm_device_probe(struct device *dev)
-{
- struct tifm_driver *drv;
- struct tifm_dev *fm_dev;
- int rc = 0;
- const tifm_media_id *id;
-
- drv = container_of(dev->driver, struct tifm_driver, driver);
- fm_dev = container_of(dev, struct tifm_dev, dev);
- get_device(dev);
- if (!fm_dev->drv && drv->probe && drv->id_table) {
- rc = -ENODEV;
- id = tifm_device_match(drv->id_table, fm_dev);
- if (id)
- rc = drv->probe(fm_dev);
- if (rc >= 0) {
- rc = 0;
- fm_dev->drv = drv;
- }
- }
- if (rc)
- put_device(dev);
- return rc;
-}
-
-static int tifm_device_remove(struct device *dev)
-{
- struct tifm_dev *fm_dev = container_of(dev, struct tifm_dev, dev);
- struct tifm_driver *drv = fm_dev->drv;
-
- if (drv) {
- if (drv->remove) drv->remove(fm_dev);
- fm_dev->drv = 0;
- }
-
- put_device(dev);
- return 0;
-}
-
-int tifm_register_driver(struct tifm_driver *drv)
-{
- drv->driver.bus = &tifm_bus_type;
- drv->driver.probe = tifm_device_probe;
- drv->driver.remove = tifm_device_remove;
-
- return driver_register(&drv->driver);
-}
-EXPORT_SYMBOL(tifm_register_driver);
-
-void tifm_unregister_driver(struct tifm_driver *drv)
-{
- driver_unregister(&drv->driver);
-}
-EXPORT_SYMBOL(tifm_unregister_driver);
-
-static int __init tifm_init(void)
-{
- int rc = bus_register(&tifm_bus_type);
-
- if (!rc) {
- rc = class_register(&tifm_adapter_class);
- if (rc)
- bus_unregister(&tifm_bus_type);
- }
-
- return rc;
-}
-
-static void __exit tifm_exit(void)
-{
- class_unregister(&tifm_adapter_class);
- bus_unregister(&tifm_bus_type);
-}
-
-subsys_initcall(tifm_init);
-module_exit(tifm_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Alex Dubov");
-MODULE_DESCRIPTION("TI FlashMedia core driver");
-MODULE_LICENSE("GPL");
-MODULE_VERSION(DRIVER_VERSION);
diff --git a/trunk/drivers/mmc/Kconfig b/trunk/drivers/mmc/Kconfig
index ea41852ec8cd..f540bd88dc5a 100644
--- a/trunk/drivers/mmc/Kconfig
+++ b/trunk/drivers/mmc/Kconfig
@@ -109,20 +109,4 @@ config MMC_IMX
If unsure, say N.
-config MMC_TIFM_SD
- tristate "TI Flash Media MMC/SD Interface support (EXPERIMENTAL)"
- depends on MMC && EXPERIMENTAL
- select TIFM_CORE
- help
- Say Y here if you want to be able to access MMC/SD cards with
- the Texas Instruments(R) Flash Media card reader, found in many
- laptops.
- This option 'selects' (turns on, enables) 'TIFM_CORE', but you
- probably also need appropriate card reader host adapter, such as
- 'Misc devices: TI Flash Media PCI74xx/PCI76xx host adapter support
- (TIFM_7XX1)'.
-
- To compile this driver as a module, choose M here: the
- module will be called tifm_sd.
-
endmenu
diff --git a/trunk/drivers/mmc/Makefile b/trunk/drivers/mmc/Makefile
index acfd4de0aba5..b1f6e03e7aa9 100644
--- a/trunk/drivers/mmc/Makefile
+++ b/trunk/drivers/mmc/Makefile
@@ -23,7 +23,6 @@ obj-$(CONFIG_MMC_WBSD) += wbsd.o
obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
obj-$(CONFIG_MMC_OMAP) += omap.o
obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.o
-obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
mmc_core-y := mmc.o mmc_sysfs.o
mmc_core-$(CONFIG_BLOCK) += mmc_queue.o
diff --git a/trunk/drivers/mmc/mmc.c b/trunk/drivers/mmc/mmc.c
index ee8863c123e3..5b9caa7978d3 100644
--- a/trunk/drivers/mmc/mmc.c
+++ b/trunk/drivers/mmc/mmc.c
@@ -1166,9 +1166,9 @@ static void mmc_setup(struct mmc_host *host)
void mmc_detect_change(struct mmc_host *host, unsigned long delay)
{
if (delay)
- mmc_schedule_delayed_work(&host->detect, delay);
+ schedule_delayed_work(&host->detect, delay);
else
- mmc_schedule_work(&host->detect);
+ schedule_work(&host->detect);
}
EXPORT_SYMBOL(mmc_detect_change);
@@ -1311,7 +1311,7 @@ EXPORT_SYMBOL(mmc_remove_host);
*/
void mmc_free_host(struct mmc_host *host)
{
- mmc_flush_scheduled_work();
+ flush_scheduled_work();
mmc_free_host_sysfs(host);
}
diff --git a/trunk/drivers/mmc/mmc.h b/trunk/drivers/mmc/mmc.h
index cd5e0ab3d84b..97bae00292fa 100644
--- a/trunk/drivers/mmc/mmc.h
+++ b/trunk/drivers/mmc/mmc.h
@@ -18,8 +18,4 @@ struct mmc_host *mmc_alloc_host_sysfs(int extra, struct device *dev);
int mmc_add_host_sysfs(struct mmc_host *host);
void mmc_remove_host_sysfs(struct mmc_host *host);
void mmc_free_host_sysfs(struct mmc_host *host);
-
-int mmc_schedule_work(struct work_struct *work);
-int mmc_schedule_delayed_work(struct work_struct *work, unsigned long delay);
-void mmc_flush_scheduled_work(void);
#endif
diff --git a/trunk/drivers/mmc/mmc_block.c b/trunk/drivers/mmc/mmc_block.c
index c1293f1bda87..db0e8ad439a5 100644
--- a/trunk/drivers/mmc/mmc_block.c
+++ b/trunk/drivers/mmc/mmc_block.c
@@ -158,13 +158,13 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
{
struct mmc_blk_data *md = mq->data;
struct mmc_card *card = md->queue.card;
- struct mmc_blk_request brq;
int ret;
if (mmc_card_claim_host(card))
goto cmd_err;
do {
+ struct mmc_blk_request brq;
struct mmc_command cmd;
u32 readcmd, writecmd;
@@ -278,27 +278,17 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
cmd_err:
mmc_card_release_host(card);
- ret = 1;
-
/*
- * For writes and where the host claims to support proper
- * error reporting, we first ok the successful blocks.
- *
- * For reads we just fail the entire chunk as that should
- * be safe in all cases.
+ * This is a little draconian, but until we get proper
+ * error handling sorted out here, its the best we can
+ * do - especially as some hosts have no idea how much
+ * data was transferred before the error occurred.
*/
- if (rq_data_dir(req) != READ &&
- (card->host->caps & MMC_CAP_MULTIWRITE)) {
- spin_lock_irq(&md->lock);
- ret = end_that_request_chunk(req, 1, brq.data.bytes_xfered);
- spin_unlock_irq(&md->lock);
- }
-
spin_lock_irq(&md->lock);
- while (ret) {
+ do {
ret = end_that_request_chunk(req, 0,
req->current_nr_sectors << 9);
- }
+ } while (ret);
add_disk_randomness(req->rq_disk);
blkdev_dequeue_request(req);
diff --git a/trunk/drivers/mmc/mmc_sysfs.c b/trunk/drivers/mmc/mmc_sysfs.c
index 10cc9734eaa0..a2a35fd946ee 100644
--- a/trunk/drivers/mmc/mmc_sysfs.c
+++ b/trunk/drivers/mmc/mmc_sysfs.c
@@ -13,7 +13,6 @@
#include
#include
#include
-#include
#include
#include
@@ -318,41 +317,10 @@ void mmc_free_host_sysfs(struct mmc_host *host)
class_device_put(&host->class_dev);
}
-static struct workqueue_struct *workqueue;
-
-/*
- * Internal function. Schedule work in the MMC work queue.
- */
-int mmc_schedule_work(struct work_struct *work)
-{
- return queue_work(workqueue, work);
-}
-
-/*
- * Internal function. Schedule delayed work in the MMC work queue.
- */
-int mmc_schedule_delayed_work(struct work_struct *work, unsigned long delay)
-{
- return queue_delayed_work(workqueue, work, delay);
-}
-
-/*
- * Internal function. Flush all scheduled work from the MMC work queue.
- */
-void mmc_flush_scheduled_work(void)
-{
- flush_workqueue(workqueue);
-}
static int __init mmc_init(void)
{
- int ret;
-
- workqueue = create_singlethread_workqueue("kmmcd");
- if (!workqueue)
- return -ENOMEM;
-
- ret = bus_register(&mmc_bus_type);
+ int ret = bus_register(&mmc_bus_type);
if (ret == 0) {
ret = class_register(&mmc_host_class);
if (ret)
@@ -365,7 +333,6 @@ static void __exit mmc_exit(void)
{
class_unregister(&mmc_host_class);
bus_unregister(&mmc_bus_type);
- destroy_workqueue(workqueue);
}
module_init(mmc_init);
diff --git a/trunk/drivers/mmc/sdhci.c b/trunk/drivers/mmc/sdhci.c
index 20711acb0120..4dab5ec392ea 100644
--- a/trunk/drivers/mmc/sdhci.c
+++ b/trunk/drivers/mmc/sdhci.c
@@ -35,8 +35,6 @@ static unsigned int debug_quirks = 0;
#define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1<<0)
#define SDHCI_QUIRK_FORCE_DMA (1<<1)
-/* Controller doesn't like some resets when there is no card inserted. */
-#define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2)
static const struct pci_device_id pci_ids[] __devinitdata = {
{
@@ -53,8 +51,7 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
.device = PCI_DEVICE_ID_RICOH_R5C822,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
- .driver_data = SDHCI_QUIRK_FORCE_DMA |
- SDHCI_QUIRK_NO_CARD_NO_RESET,
+ .driver_data = SDHCI_QUIRK_FORCE_DMA,
},
{
@@ -128,12 +125,6 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
{
unsigned long timeout;
- if (host->chip->quirks & SDHCI_QUIRK_NO_CARD_NO_RESET) {
- if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) &
- SDHCI_CARD_PRESENT))
- return;
- }
-
writeb(mask, host->ioaddr + SDHCI_SOFTWARE_RESET);
if (mask & SDHCI_RESET_ALL)
@@ -726,7 +717,6 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
} else
sdhci_send_command(host, mrq->cmd);
- mmiowb();
spin_unlock_irqrestore(&host->lock, flags);
}
@@ -763,7 +753,6 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
ctrl &= ~SDHCI_CTRL_4BITBUS;
writeb(ctrl, host->ioaddr + SDHCI_HOST_CONTROL);
- mmiowb();
spin_unlock_irqrestore(&host->lock, flags);
}
@@ -871,7 +860,6 @@ static void sdhci_tasklet_finish(unsigned long param)
sdhci_deactivate_led(host);
- mmiowb();
spin_unlock_irqrestore(&host->lock, flags);
mmc_request_done(host->mmc, mrq);
@@ -905,7 +893,6 @@ static void sdhci_timeout_timer(unsigned long data)
}
}
- mmiowb();
spin_unlock_irqrestore(&host->lock, flags);
}
@@ -1043,7 +1030,6 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id, struct pt_regs *regs)
result = IRQ_HANDLED;
- mmiowb();
out:
spin_unlock(&host->lock);
@@ -1109,7 +1095,6 @@ static int sdhci_resume (struct pci_dev *pdev)
if (chip->hosts[i]->flags & SDHCI_USE_DMA)
pci_set_master(pdev);
sdhci_init(chip->hosts[i]);
- mmiowb();
ret = mmc_resume_host(chip->hosts[i]->mmc);
if (ret)
return ret;
@@ -1183,9 +1168,6 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
host = mmc_priv(mmc);
host->mmc = mmc;
- host->chip = chip;
- chip->hosts[slot] = host;
-
host->bar = first_bar + slot;
host->addr = pci_resource_start(pdev, host->bar);
@@ -1342,7 +1324,8 @@ static int __devinit sdhci_probe_slot(struct pci_dev *pdev, int slot)
sdhci_dumpregs(host);
#endif
- mmiowb();
+ host->chip = chip;
+ chip->hosts[slot] = host;
mmc_add_host(mmc);
diff --git a/trunk/drivers/mmc/tifm_sd.c b/trunk/drivers/mmc/tifm_sd.c
deleted file mode 100644
index 6d23dc08d169..000000000000
--- a/trunk/drivers/mmc/tifm_sd.c
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * tifm_sd.c - TI FlashMedia driver
- *
- * Copyright (C) 2006 Alex Dubov
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-
-#include
-#include
-#include
-#include
-
-#define DRIVER_NAME "tifm_sd"
-#define DRIVER_VERSION "0.6"
-
-static int no_dma = 0;
-static int fixed_timeout = 0;
-module_param(no_dma, bool, 0644);
-module_param(fixed_timeout, bool, 0644);
-
-/* Constants here are mostly from OMAP5912 datasheet */
-#define TIFM_MMCSD_RESET 0x0002
-#define TIFM_MMCSD_CLKMASK 0x03ff
-#define TIFM_MMCSD_POWER 0x0800
-#define TIFM_MMCSD_4BBUS 0x8000
-#define TIFM_MMCSD_RXDE 0x8000 /* rx dma enable */
-#define TIFM_MMCSD_TXDE 0x0080 /* tx dma enable */
-#define TIFM_MMCSD_BUFINT 0x0c00 /* set bits: AE, AF */
-#define TIFM_MMCSD_DPE 0x0020 /* data timeout counted in kilocycles */
-#define TIFM_MMCSD_INAB 0x0080 /* abort / initialize command */
-#define TIFM_MMCSD_READ 0x8000
-
-#define TIFM_MMCSD_DATAMASK 0x001d /* set bits: EOFB, BRS, CB, EOC */
-#define TIFM_MMCSD_ERRMASK 0x41e0 /* set bits: CERR, CCRC, CTO, DCRC, DTO */
-#define TIFM_MMCSD_EOC 0x0001 /* end of command phase */
-#define TIFM_MMCSD_CB 0x0004 /* card enter busy state */
-#define TIFM_MMCSD_BRS 0x0008 /* block received/sent */
-#define TIFM_MMCSD_EOFB 0x0010 /* card exit busy state */
-#define TIFM_MMCSD_DTO 0x0020 /* data time-out */
-#define TIFM_MMCSD_DCRC 0x0040 /* data crc error */
-#define TIFM_MMCSD_CTO 0x0080 /* command time-out */
-#define TIFM_MMCSD_CCRC 0x0100 /* command crc error */
-#define TIFM_MMCSD_AF 0x0400 /* fifo almost full */
-#define TIFM_MMCSD_AE 0x0800 /* fifo almost empty */
-#define TIFM_MMCSD_CERR 0x4000 /* card status error */
-
-#define TIFM_MMCSD_FIFO_SIZE 0x0020
-
-#define TIFM_MMCSD_RSP_R0 0x0000
-#define TIFM_MMCSD_RSP_R1 0x0100
-#define TIFM_MMCSD_RSP_R2 0x0200
-#define TIFM_MMCSD_RSP_R3 0x0300
-#define TIFM_MMCSD_RSP_R4 0x0400
-#define TIFM_MMCSD_RSP_R5 0x0500
-#define TIFM_MMCSD_RSP_R6 0x0600
-
-#define TIFM_MMCSD_RSP_BUSY 0x0800
-
-#define TIFM_MMCSD_CMD_BC 0x0000
-#define TIFM_MMCSD_CMD_BCR 0x1000
-#define TIFM_MMCSD_CMD_AC 0x2000
-#define TIFM_MMCSD_CMD_ADTC 0x3000
-
-typedef enum {
- IDLE = 0,
- CMD, /* main command ended */
- BRS, /* block transfer finished */
- SCMD, /* stop command ended */
- CARD, /* card left busy state */
- FIFO, /* FIFO operation completed (uncertain) */
- READY
-} card_state_t;
-
-enum {
- FIFO_RDY = 0x0001, /* hardware dependent value */
- HOST_REG = 0x0002,
- EJECT = 0x0004,
- EJECT_DONE = 0x0008,
- CARD_BUSY = 0x0010,
- OPENDRAIN = 0x0040, /* hardware dependent value */
- CARD_EVENT = 0x0100, /* hardware dependent value */
- CARD_RO = 0x0200, /* hardware dependent value */
- FIFO_EVENT = 0x10000 }; /* hardware dependent value */
-
-struct tifm_sd {
- struct tifm_dev *dev;
-
- unsigned int flags;
- card_state_t state;
- unsigned int clk_freq;
- unsigned int clk_div;
- unsigned long timeout_jiffies; // software timeout - 2 sec
-
- struct mmc_request *req;
- struct work_struct cmd_handler;
- struct work_struct abort_handler;
- wait_queue_head_t can_eject;
-
- size_t written_blocks;
- char *buffer;
- size_t buffer_size;
- size_t buffer_pos;
-
-};
-
-static int tifm_sd_transfer_data(struct tifm_dev *sock, struct tifm_sd *host,
- unsigned int host_status)
-{
- struct mmc_command *cmd = host->req->cmd;
- unsigned int t_val = 0, cnt = 0;
-
- if (host_status & TIFM_MMCSD_BRS) {
- /* in non-dma rx mode BRS fires when fifo is still not empty */
- if (host->buffer && (cmd->data->flags & MMC_DATA_READ)) {
- while (host->buffer_size > host->buffer_pos) {
- t_val = readl(sock->addr + SOCK_MMCSD_DATA);
- host->buffer[host->buffer_pos++] = t_val & 0xff;
- host->buffer[host->buffer_pos++] =
- (t_val >> 8) & 0xff;
- }
- }
- return 1;
- } else if (host->buffer) {
- if ((cmd->data->flags & MMC_DATA_READ) &&
- (host_status & TIFM_MMCSD_AF)) {
- for (cnt = 0; cnt < TIFM_MMCSD_FIFO_SIZE; cnt++) {
- t_val = readl(sock->addr + SOCK_MMCSD_DATA);
- if (host->buffer_size > host->buffer_pos) {
- host->buffer[host->buffer_pos++] =
- t_val & 0xff;
- host->buffer[host->buffer_pos++] =
- (t_val >> 8) & 0xff;
- }
- }
- } else if ((cmd->data->flags & MMC_DATA_WRITE)
- && (host_status & TIFM_MMCSD_AE)) {
- for (cnt = 0; cnt < TIFM_MMCSD_FIFO_SIZE; cnt++) {
- if (host->buffer_size > host->buffer_pos) {
- t_val = host->buffer[host->buffer_pos++] & 0x00ff;
- t_val |= ((host->buffer[host->buffer_pos++]) << 8)
- & 0xff00;
- writel(t_val,
- sock->addr + SOCK_MMCSD_DATA);
- }
- }
- }
- }
- return 0;
-}
-
-static unsigned int tifm_sd_op_flags(struct mmc_command *cmd)
-{
- unsigned int rc = 0;
-
- switch (mmc_resp_type(cmd)) {
- case MMC_RSP_NONE:
- rc |= TIFM_MMCSD_RSP_R0;
- break;
- case MMC_RSP_R1B:
- rc |= TIFM_MMCSD_RSP_BUSY; // deliberate fall-through
- case MMC_RSP_R1:
- rc |= TIFM_MMCSD_RSP_R1;
- break;
- case MMC_RSP_R2:
- rc |= TIFM_MMCSD_RSP_R2;
- break;
- case MMC_RSP_R3:
- rc |= TIFM_MMCSD_RSP_R3;
- break;
- case MMC_RSP_R6:
- rc |= TIFM_MMCSD_RSP_R6;
- break;
- default:
- BUG();
- }
-
- switch (mmc_cmd_type(cmd)) {
- case MMC_CMD_BC:
- rc |= TIFM_MMCSD_CMD_BC;
- break;
- case MMC_CMD_BCR:
- rc |= TIFM_MMCSD_CMD_BCR;
- break;
- case MMC_CMD_AC:
- rc |= TIFM_MMCSD_CMD_AC;
- break;
- case MMC_CMD_ADTC:
- rc |= TIFM_MMCSD_CMD_ADTC;
- break;
- default:
- BUG();
- }
- return rc;
-}
-
-static void tifm_sd_exec(struct tifm_sd *host, struct mmc_command *cmd)
-{
- struct tifm_dev *sock = host->dev;
- unsigned int cmd_mask = tifm_sd_op_flags(cmd) |
- (host->flags & OPENDRAIN);
-
- if (cmd->data && (cmd->data->flags & MMC_DATA_READ))
- cmd_mask |= TIFM_MMCSD_READ;
-
- dev_dbg(&sock->dev, "executing opcode 0x%x, arg: 0x%x, mask: 0x%x\n",
- cmd->opcode, cmd->arg, cmd_mask);
-
- writel((cmd->arg >> 16) & 0xffff, sock->addr + SOCK_MMCSD_ARG_HIGH);
- writel(cmd->arg & 0xffff, sock->addr + SOCK_MMCSD_ARG_LOW);
- writel(cmd->opcode | cmd_mask, sock->addr + SOCK_MMCSD_COMMAND);
-}
-
-static void tifm_sd_fetch_resp(struct mmc_command *cmd, struct tifm_dev *sock)
-{
- cmd->resp[0] = (readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x1c) << 16)
- | readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x18);
- cmd->resp[1] = (readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x14) << 16)
- | readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x10);
- cmd->resp[2] = (readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x0c) << 16)
- | readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x08);
- cmd->resp[3] = (readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x04) << 16)
- | readl(sock->addr + SOCK_MMCSD_RESPONSE + 0x00);
-}
-
-static void tifm_sd_process_cmd(struct tifm_dev *sock, struct tifm_sd *host,
- unsigned int host_status)
-{
- struct mmc_command *cmd = host->req->cmd;
-
-change_state:
- switch (host->state) {
- case IDLE:
- return;
- case CMD:
- if (host_status & TIFM_MMCSD_EOC) {
- tifm_sd_fetch_resp(cmd, sock);
- if (cmd->data) {
- host->state = BRS;
- } else
- host->state = READY;
- goto change_state;
- }
- break;
- case BRS:
- if (tifm_sd_transfer_data(sock, host, host_status)) {
- if (!host->req->stop) {
- if (cmd->data->flags & MMC_DATA_WRITE) {
- host->state = CARD;
- } else {
- host->state =
- host->buffer ? READY : FIFO;
- }
- goto change_state;
- }
- tifm_sd_exec(host, host->req->stop);
- host->state = SCMD;
- }
- break;
- case SCMD:
- if (host_status & TIFM_MMCSD_EOC) {
- tifm_sd_fetch_resp(host->req->stop, sock);
- if (cmd->error) {
- host->state = READY;
- } else if (cmd->data->flags & MMC_DATA_WRITE) {
- host->state = CARD;
- } else {
- host->state = host->buffer ? READY : FIFO;
- }
- goto change_state;
- }
- break;
- case CARD:
- if (!(host->flags & CARD_BUSY)
- && (host->written_blocks == cmd->data->blocks)) {
- host->state = host->buffer ? READY : FIFO;
- goto change_state;
- }
- break;
- case FIFO:
- if (host->flags & FIFO_RDY) {
- host->state = READY;
- host->flags &= ~FIFO_RDY;
- goto change_state;
- }
- break;
- case READY:
- queue_work(sock->wq, &host->cmd_handler);
- return;
- }
-
- queue_delayed_work(sock->wq, &host->abort_handler,
- host->timeout_jiffies);
-}
-
-/* Called from interrupt handler */
-static unsigned int tifm_sd_signal_irq(struct tifm_dev *sock,
- unsigned int sock_irq_status)
-{
- struct tifm_sd *host;
- unsigned int host_status = 0, fifo_status = 0;
- int error_code = 0;
-
- spin_lock(&sock->lock);
- host = mmc_priv((struct mmc_host*)tifm_get_drvdata(sock));
- cancel_delayed_work(&host->abort_handler);
-
- if (sock_irq_status & FIFO_EVENT) {
- fifo_status = readl(sock->addr + SOCK_DMA_FIFO_STATUS);
- writel(fifo_status, sock->addr + SOCK_DMA_FIFO_STATUS);
-
- host->flags |= fifo_status & FIFO_RDY;
- }
-
- if (sock_irq_status & CARD_EVENT) {
- host_status = readl(sock->addr + SOCK_MMCSD_STATUS);
- writel(host_status, sock->addr + SOCK_MMCSD_STATUS);
-
- if (!(host->flags & HOST_REG))
- queue_work(sock->wq, &host->cmd_handler);
- if (!host->req)
- goto done;
-
- if (host_status & TIFM_MMCSD_ERRMASK) {
- if (host_status & TIFM_MMCSD_CERR)
- error_code = MMC_ERR_FAILED;
- else if (host_status &
- (TIFM_MMCSD_CTO | TIFM_MMCSD_DTO))
- error_code = MMC_ERR_TIMEOUT;
- else if (host_status &
- (TIFM_MMCSD_CCRC | TIFM_MMCSD_DCRC))
- error_code = MMC_ERR_BADCRC;
-
- writel(TIFM_FIFO_INT_SETALL,
- sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR);
- writel(TIFM_DMA_RESET, sock->addr + SOCK_DMA_CONTROL);
-
- if (host->req->stop) {
- if (host->state == SCMD) {
- host->req->stop->error = error_code;
- } else if(host->state == BRS) {
- host->req->cmd->error = error_code;
- tifm_sd_exec(host, host->req->stop);
- queue_delayed_work(sock->wq,
- &host->abort_handler,
- host->timeout_jiffies);
- host->state = SCMD;
- goto done;
- } else {
- host->req->cmd->error = error_code;
- }
- } else {
- host->req->cmd->error = error_code;
- }
- host->state = READY;
- }
-
- if (host_status & TIFM_MMCSD_CB)
- host->flags |= CARD_BUSY;
- if ((host_status & TIFM_MMCSD_EOFB) &&
- (host->flags & CARD_BUSY)) {
- host->written_blocks++;
- host->flags &= ~CARD_BUSY;
- }
- }
-
- if (host->req)
- tifm_sd_process_cmd(sock, host, host_status);
-done:
- dev_dbg(&sock->dev, "host_status %x, fifo_status %x\n",
- host_status, fifo_status);
- spin_unlock(&sock->lock);
- return sock_irq_status;
-}
-
-static void tifm_sd_prepare_data(struct tifm_sd *card, struct mmc_command *cmd)
-{
- struct tifm_dev *sock = card->dev;
- unsigned int dest_cnt;
-
- /* DMA style IO */
-
- writel(TIFM_FIFO_INT_SETALL,
- sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR);
- writel(long_log2(cmd->data->blksz) - 2,
- sock->addr + SOCK_FIFO_PAGE_SIZE);
- writel(TIFM_FIFO_ENABLE, sock->addr + SOCK_FIFO_CONTROL);
- writel(TIFM_FIFO_INTMASK, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET);
-
- dest_cnt = (cmd->data->blocks) << 8;
-
- writel(sg_dma_address(cmd->data->sg), sock->addr + SOCK_DMA_ADDRESS);
-
- writel(cmd->data->blocks - 1, sock->addr + SOCK_MMCSD_NUM_BLOCKS);
- writel(cmd->data->blksz - 1, sock->addr + SOCK_MMCSD_BLOCK_LEN);
-
- if (cmd->data->flags & MMC_DATA_WRITE) {
- writel(TIFM_MMCSD_TXDE, sock->addr + SOCK_MMCSD_BUFFER_CONFIG);
- writel(dest_cnt | TIFM_DMA_TX | TIFM_DMA_EN,
- sock->addr + SOCK_DMA_CONTROL);
- } else {
- writel(TIFM_MMCSD_RXDE, sock->addr + SOCK_MMCSD_BUFFER_CONFIG);
- writel(dest_cnt | TIFM_DMA_EN, sock->addr + SOCK_DMA_CONTROL);
- }
-}
-
-static void tifm_sd_set_data_timeout(struct tifm_sd *host,
- struct mmc_data *data)
-{
- struct tifm_dev *sock = host->dev;
- unsigned int data_timeout = data->timeout_clks;
-
- if (fixed_timeout)
- return;
-
- data_timeout += data->timeout_ns /
- ((1000000000 / host->clk_freq) * host->clk_div);
- data_timeout *= 10; // call it fudge factor for now
-
- if (data_timeout < 0xffff) {
- writel((~TIFM_MMCSD_DPE) &
- readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
- sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
- writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
- } else {
- writel(TIFM_MMCSD_DPE |
- readl(sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG),
- sock->addr + SOCK_MMCSD_SDIO_MODE_CONFIG);
- data_timeout = (data_timeout >> 10) + 1;
- if(data_timeout > 0xffff)
- data_timeout = 0; /* set to unlimited */
- writel(data_timeout, sock->addr + SOCK_MMCSD_DATA_TO);
- }
-}
-
-static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
-{
- struct tifm_sd *host = mmc_priv(mmc);
- struct tifm_dev *sock = host->dev;
- unsigned long flags;
- int sg_count = 0;
- struct mmc_data *r_data = mrq->cmd->data;
-
- spin_lock_irqsave(&sock->lock, flags);
- if (host->flags & EJECT) {
- spin_unlock_irqrestore(&sock->lock, flags);
- goto err_out;
- }
-
- if (host->req) {
- printk(KERN_ERR DRIVER_NAME ": unfinished request detected\n");
- spin_unlock_irqrestore(&sock->lock, flags);
- goto err_out;
- }
-
- if (r_data) {
- tifm_sd_set_data_timeout(host, r_data);
-
- sg_count = tifm_map_sg(sock, r_data->sg, r_data->sg_len,
- mrq->cmd->flags & MMC_DATA_WRITE
- ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
- if (sg_count != 1) {
- printk(KERN_ERR DRIVER_NAME
- ": scatterlist map failed\n");
- spin_unlock_irqrestore(&sock->lock, flags);
- goto err_out;
- }
-
- host->written_blocks = 0;
- host->flags &= ~CARD_BUSY;
- tifm_sd_prepare_data(host, mrq->cmd);
- }
-
- host->req = mrq;
- host->state = CMD;
- queue_delayed_work(sock->wq, &host->abort_handler,
- host->timeout_jiffies);
- writel(TIFM_CTRL_LED | readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
- tifm_sd_exec(host, mrq->cmd);
- spin_unlock_irqrestore(&sock->lock, flags);
- return;
-
-err_out:
- if (sg_count > 0)
- tifm_unmap_sg(sock, r_data->sg, r_data->sg_len,
- (r_data->flags & MMC_DATA_WRITE)
- ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-
- mrq->cmd->error = MMC_ERR_TIMEOUT;
- mmc_request_done(mmc, mrq);
-}
-
-static void tifm_sd_end_cmd(void *data)
-{
- struct tifm_sd *host = data;
- struct tifm_dev *sock = host->dev;
- struct mmc_host *mmc = tifm_get_drvdata(sock);
- struct mmc_request *mrq;
- struct mmc_data *r_data = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
-
- mrq = host->req;
- host->req = 0;
- host->state = IDLE;
-
- if (!mrq) {
- printk(KERN_ERR DRIVER_NAME ": no request to complete?\n");
- spin_unlock_irqrestore(&sock->lock, flags);
- return;
- }
-
- r_data = mrq->cmd->data;
- if (r_data) {
- if (r_data->flags & MMC_DATA_WRITE) {
- r_data->bytes_xfered = host->written_blocks *
- r_data->blksz;
- } else {
- r_data->bytes_xfered = r_data->blocks -
- readl(sock->addr + SOCK_MMCSD_NUM_BLOCKS) - 1;
- r_data->bytes_xfered *= r_data->blksz;
- r_data->bytes_xfered += r_data->blksz -
- readl(sock->addr + SOCK_MMCSD_BLOCK_LEN) + 1;
- }
- tifm_unmap_sg(sock, r_data->sg, r_data->sg_len,
- (r_data->flags & MMC_DATA_WRITE)
- ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
- }
-
- writel((~TIFM_CTRL_LED) & readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
-
- spin_unlock_irqrestore(&sock->lock, flags);
- mmc_request_done(mmc, mrq);
-}
-
-static void tifm_sd_request_nodma(struct mmc_host *mmc, struct mmc_request *mrq)
-{
- struct tifm_sd *host = mmc_priv(mmc);
- struct tifm_dev *sock = host->dev;
- unsigned long flags;
- struct mmc_data *r_data = mrq->cmd->data;
- char *t_buffer = 0;
-
- if (r_data) {
- t_buffer = kmap(r_data->sg->page);
- if (!t_buffer) {
- printk(KERN_ERR DRIVER_NAME ": kmap failed\n");
- goto err_out;
- }
- }
-
- spin_lock_irqsave(&sock->lock, flags);
- if (host->flags & EJECT) {
- spin_unlock_irqrestore(&sock->lock, flags);
- goto err_out;
- }
-
- if (host->req) {
- printk(KERN_ERR DRIVER_NAME ": unfinished request detected\n");
- spin_unlock_irqrestore(&sock->lock, flags);
- goto err_out;
- }
-
- if (r_data) {
- tifm_sd_set_data_timeout(host, r_data);
-
- host->buffer = t_buffer + r_data->sg->offset;
- host->buffer_size = mrq->cmd->data->blocks *
- mrq->cmd->data->blksz;
-
- writel(TIFM_MMCSD_BUFINT |
- readl(sock->addr + SOCK_MMCSD_INT_ENABLE),
- sock->addr + SOCK_MMCSD_INT_ENABLE);
- writel(((TIFM_MMCSD_FIFO_SIZE - 1) << 8) |
- (TIFM_MMCSD_FIFO_SIZE - 1),
- sock->addr + SOCK_MMCSD_BUFFER_CONFIG);
-
- host->written_blocks = 0;
- host->flags &= ~CARD_BUSY;
- host->buffer_pos = 0;
- writel(r_data->blocks - 1, sock->addr + SOCK_MMCSD_NUM_BLOCKS);
- writel(r_data->blksz - 1, sock->addr + SOCK_MMCSD_BLOCK_LEN);
- }
-
- host->req = mrq;
- host->state = CMD;
- queue_delayed_work(sock->wq, &host->abort_handler,
- host->timeout_jiffies);
- writel(TIFM_CTRL_LED | readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
- tifm_sd_exec(host, mrq->cmd);
- spin_unlock_irqrestore(&sock->lock, flags);
- return;
-
-err_out:
- if (t_buffer)
- kunmap(r_data->sg->page);
-
- mrq->cmd->error = MMC_ERR_TIMEOUT;
- mmc_request_done(mmc, mrq);
-}
-
-static void tifm_sd_end_cmd_nodma(void *data)
-{
- struct tifm_sd *host = (struct tifm_sd*)data;
- struct tifm_dev *sock = host->dev;
- struct mmc_host *mmc = tifm_get_drvdata(sock);
- struct mmc_request *mrq;
- struct mmc_data *r_data = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
-
- mrq = host->req;
- host->req = 0;
- host->state = IDLE;
-
- if (!mrq) {
- printk(KERN_ERR DRIVER_NAME ": no request to complete?\n");
- spin_unlock_irqrestore(&sock->lock, flags);
- return;
- }
-
- r_data = mrq->cmd->data;
- if (r_data) {
- writel((~TIFM_MMCSD_BUFINT) &
- readl(sock->addr + SOCK_MMCSD_INT_ENABLE),
- sock->addr + SOCK_MMCSD_INT_ENABLE);
-
- if (r_data->flags & MMC_DATA_WRITE) {
- r_data->bytes_xfered = host->written_blocks *
- r_data->blksz;
- } else {
- r_data->bytes_xfered = r_data->blocks -
- readl(sock->addr + SOCK_MMCSD_NUM_BLOCKS) - 1;
- r_data->bytes_xfered *= r_data->blksz;
- r_data->bytes_xfered += r_data->blksz -
- readl(sock->addr + SOCK_MMCSD_BLOCK_LEN) + 1;
- }
- host->buffer = 0;
- host->buffer_pos = 0;
- host->buffer_size = 0;
- }
-
- writel((~TIFM_CTRL_LED) & readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
-
- spin_unlock_irqrestore(&sock->lock, flags);
-
- if (r_data)
- kunmap(r_data->sg->page);
-
- mmc_request_done(mmc, mrq);
-}
-
-static void tifm_sd_abort(void *data)
-{
- printk(KERN_ERR DRIVER_NAME
- ": card failed to respond for a long period of time");
- tifm_eject(((struct tifm_sd*)data)->dev);
-}
-
-static void tifm_sd_ios(struct mmc_host *mmc, struct mmc_ios *ios)
-{
- struct tifm_sd *host = mmc_priv(mmc);
- struct tifm_dev *sock = host->dev;
- unsigned int clk_div1, clk_div2;
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
-
- dev_dbg(&sock->dev, "Setting bus width %d, power %d\n", ios->bus_width,
- ios->power_mode);
- if (ios->bus_width == MMC_BUS_WIDTH_4) {
- writel(TIFM_MMCSD_4BBUS | readl(sock->addr + SOCK_MMCSD_CONFIG),
- sock->addr + SOCK_MMCSD_CONFIG);
- } else {
- writel((~TIFM_MMCSD_4BBUS) &
- readl(sock->addr + SOCK_MMCSD_CONFIG),
- sock->addr + SOCK_MMCSD_CONFIG);
- }
-
- if (ios->clock) {
- clk_div1 = 20000000 / ios->clock;
- if (!clk_div1)
- clk_div1 = 1;
-
- clk_div2 = 24000000 / ios->clock;
- if (!clk_div2)
- clk_div2 = 1;
-
- if ((20000000 / clk_div1) > ios->clock)
- clk_div1++;
- if ((24000000 / clk_div2) > ios->clock)
- clk_div2++;
- if ((20000000 / clk_div1) > (24000000 / clk_div2)) {
- host->clk_freq = 20000000;
- host->clk_div = clk_div1;
- writel((~TIFM_CTRL_FAST_CLK) &
- readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
- } else {
- host->clk_freq = 24000000;
- host->clk_div = clk_div2;
- writel(TIFM_CTRL_FAST_CLK |
- readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
- }
- } else {
- host->clk_div = 0;
- }
- host->clk_div &= TIFM_MMCSD_CLKMASK;
- writel(host->clk_div | ((~TIFM_MMCSD_CLKMASK) &
- readl(sock->addr + SOCK_MMCSD_CONFIG)),
- sock->addr + SOCK_MMCSD_CONFIG);
-
- if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
- host->flags |= OPENDRAIN;
- else
- host->flags &= ~OPENDRAIN;
-
- /* chip_select : maybe later */
- //vdd
- //power is set before probe / after remove
- //I believe, power_off when already marked for eject is sufficient to
- // allow removal.
- if ((host->flags & EJECT) && ios->power_mode == MMC_POWER_OFF) {
- host->flags |= EJECT_DONE;
- wake_up_all(&host->can_eject);
- }
-
- spin_unlock_irqrestore(&sock->lock, flags);
-}
-
-static int tifm_sd_ro(struct mmc_host *mmc)
-{
- int rc;
- struct tifm_sd *host = mmc_priv(mmc);
- struct tifm_dev *sock = host->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
-
- host->flags |= (CARD_RO & readl(sock->addr + SOCK_PRESENT_STATE));
- rc = (host->flags & CARD_RO) ? 1 : 0;
-
- spin_unlock_irqrestore(&sock->lock, flags);
- return rc;
-}
-
-static struct mmc_host_ops tifm_sd_ops = {
- .request = tifm_sd_request,
- .set_ios = tifm_sd_ios,
- .get_ro = tifm_sd_ro
-};
-
-static void tifm_sd_register_host(void *data)
-{
- struct tifm_sd *host = (struct tifm_sd*)data;
- struct tifm_dev *sock = host->dev;
- struct mmc_host *mmc = tifm_get_drvdata(sock);
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
- host->flags |= HOST_REG;
- PREPARE_WORK(&host->cmd_handler,
- no_dma ? tifm_sd_end_cmd_nodma : tifm_sd_end_cmd,
- data);
- spin_unlock_irqrestore(&sock->lock, flags);
- dev_dbg(&sock->dev, "adding host\n");
- mmc_add_host(mmc);
-}
-
-static int tifm_sd_probe(struct tifm_dev *sock)
-{
- struct mmc_host *mmc;
- struct tifm_sd *host;
- int rc = -EIO;
-
- if (!(TIFM_SOCK_STATE_OCCUPIED &
- readl(sock->addr + SOCK_PRESENT_STATE))) {
- printk(KERN_WARNING DRIVER_NAME ": card gone, unexpectedly\n");
- return rc;
- }
-
- mmc = mmc_alloc_host(sizeof(struct tifm_sd), &sock->dev);
- if (!mmc)
- return -ENOMEM;
-
- host = mmc_priv(mmc);
- host->dev = sock;
- host->clk_div = 61;
- init_waitqueue_head(&host->can_eject);
- INIT_WORK(&host->cmd_handler, tifm_sd_register_host, host);
- INIT_WORK(&host->abort_handler, tifm_sd_abort, host);
-
- tifm_set_drvdata(sock, mmc);
- sock->signal_irq = tifm_sd_signal_irq;
-
- host->clk_freq = 20000000;
- host->timeout_jiffies = msecs_to_jiffies(1000);
-
- tifm_sd_ops.request = no_dma ? tifm_sd_request_nodma : tifm_sd_request;
- mmc->ops = &tifm_sd_ops;
- mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
- mmc->caps = MMC_CAP_4_BIT_DATA;
- mmc->f_min = 20000000 / 60;
- mmc->f_max = 24000000;
- mmc->max_hw_segs = 1;
- mmc->max_phys_segs = 1;
- mmc->max_sectors = 127;
- mmc->max_seg_size = mmc->max_sectors << 11; //2k maximum hw block length
-
- writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE);
- writel(TIFM_MMCSD_RESET, sock->addr + SOCK_MMCSD_SYSTEM_CONTROL);
- writel(host->clk_div | TIFM_MMCSD_POWER,
- sock->addr + SOCK_MMCSD_CONFIG);
-
- for (rc = 0; rc < 50; rc++) {
- /* Wait for reset ack */
- if (1 & readl(sock->addr + SOCK_MMCSD_SYSTEM_STATUS)) {
- rc = 0;
- break;
- }
- msleep(10);
- }
-
- if (rc) {
- printk(KERN_ERR DRIVER_NAME
- ": card not ready - probe failed\n");
- mmc_free_host(mmc);
- return -ENODEV;
- }
-
- writel(0, sock->addr + SOCK_MMCSD_NUM_BLOCKS);
- writel(host->clk_div | TIFM_MMCSD_POWER,
- sock->addr + SOCK_MMCSD_CONFIG);
- writel(TIFM_MMCSD_RXDE, sock->addr + SOCK_MMCSD_BUFFER_CONFIG);
- writel(TIFM_MMCSD_DATAMASK | TIFM_MMCSD_ERRMASK,
- sock->addr + SOCK_MMCSD_INT_ENABLE);
-
- writel(64, sock->addr + SOCK_MMCSD_COMMAND_TO); // command timeout 64 clocks for now
- writel(TIFM_MMCSD_INAB, sock->addr + SOCK_MMCSD_COMMAND);
- writel(host->clk_div | TIFM_MMCSD_POWER,
- sock->addr + SOCK_MMCSD_CONFIG);
-
- queue_delayed_work(sock->wq, &host->abort_handler,
- host->timeout_jiffies);
-
- return 0;
-}
-
-static int tifm_sd_host_is_down(struct tifm_dev *sock)
-{
- struct mmc_host *mmc = tifm_get_drvdata(sock);
- struct tifm_sd *host = mmc_priv(mmc);
- unsigned long flags;
- int rc = 0;
-
- spin_lock_irqsave(&sock->lock, flags);
- rc = (host->flags & EJECT_DONE);
- spin_unlock_irqrestore(&sock->lock, flags);
- return rc;
-}
-
-static void tifm_sd_remove(struct tifm_dev *sock)
-{
- struct mmc_host *mmc = tifm_get_drvdata(sock);
- struct tifm_sd *host = mmc_priv(mmc);
- unsigned long flags;
-
- spin_lock_irqsave(&sock->lock, flags);
- host->flags |= EJECT;
- if (host->req)
- queue_work(sock->wq, &host->cmd_handler);
- spin_unlock_irqrestore(&sock->lock, flags);
- wait_event_timeout(host->can_eject, tifm_sd_host_is_down(sock),
- host->timeout_jiffies);
-
- if (host->flags & HOST_REG)
- mmc_remove_host(mmc);
-
- /* The meaning of the bit majority in this constant is unknown. */
- writel(0xfff8 & readl(sock->addr + SOCK_CONTROL),
- sock->addr + SOCK_CONTROL);
- writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE);
- writel(TIFM_FIFO_INT_SETALL,
- sock->addr + SOCK_DMA_FIFO_INT_ENABLE_CLEAR);
- writel(0, sock->addr + SOCK_DMA_FIFO_INT_ENABLE_SET);
-
- tifm_set_drvdata(sock, 0);
- mmc_free_host(mmc);
-}
-
-static tifm_media_id tifm_sd_id_tbl[] = {
- FM_SD, 0
-};
-
-static struct tifm_driver tifm_sd_driver = {
- .driver = {
- .name = DRIVER_NAME,
- .owner = THIS_MODULE
- },
- .id_table = tifm_sd_id_tbl,
- .probe = tifm_sd_probe,
- .remove = tifm_sd_remove
-};
-
-static int __init tifm_sd_init(void)
-{
- return tifm_register_driver(&tifm_sd_driver);
-}
-
-static void __exit tifm_sd_exit(void)
-{
- tifm_unregister_driver(&tifm_sd_driver);
-}
-
-MODULE_AUTHOR("Alex Dubov");
-MODULE_DESCRIPTION("TI FlashMedia SD driver");
-MODULE_LICENSE("GPL");
-MODULE_DEVICE_TABLE(tifm, tifm_sd_id_tbl);
-MODULE_VERSION(DRIVER_VERSION);
-
-module_init(tifm_sd_init);
-module_exit(tifm_sd_exit);
diff --git a/trunk/drivers/mtd/chips/Kconfig b/trunk/drivers/mtd/chips/Kconfig
index 72e6d73beb40..6d8f30deb868 100644
--- a/trunk/drivers/mtd/chips/Kconfig
+++ b/trunk/drivers/mtd/chips/Kconfig
@@ -270,7 +270,7 @@ config MTD_JEDEC
tristate "JEDEC device support"
depends on MTD && MTD_OBSOLETE_CHIPS && BROKEN
help
- Enable older JEDEC flash interface devices for self
+ Enable older older JEDEC flash interface devices for self
programming flash. It is commonly used in older AMD chips. It is
only called JEDEC because the JEDEC association
distributes the identification codes for the
diff --git a/trunk/drivers/mtd/maps/bast-flash.c b/trunk/drivers/mtd/maps/bast-flash.c
index e074bb6787d2..51f962dd7e31 100644
--- a/trunk/drivers/mtd/maps/bast-flash.c
+++ b/trunk/drivers/mtd/maps/bast-flash.c
@@ -1,4 +1,4 @@
-/* linux/drivers/mtd/maps/bast-flash.c
+/* linux/drivers/mtd/maps/bast_flash.c
*
* Copyright (c) 2004-2005 Simtec Electronics
* Ben Dooks
diff --git a/trunk/drivers/mtd/maps/dmv182.c b/trunk/drivers/mtd/maps/dmv182.c
index e0558b0b2fe6..a43c49905cac 100644
--- a/trunk/drivers/mtd/maps/dmv182.c
+++ b/trunk/drivers/mtd/maps/dmv182.c
@@ -1,6 +1,6 @@
/*
- * drivers/mtd/maps/dmv182.c
+ * drivers/mtd/maps/svme182.c
*
* Flash map driver for the Dy4 SVME182 board
*
diff --git a/trunk/drivers/mtd/nand/Kconfig b/trunk/drivers/mtd/nand/Kconfig
index 1831340e5f51..c99302ed3823 100644
--- a/trunk/drivers/mtd/nand/Kconfig
+++ b/trunk/drivers/mtd/nand/Kconfig
@@ -21,7 +21,7 @@ config MTD_NAND_VERIFY_WRITE
NAND flash device internally checks only bits transitioning
from 1 to 0. There is a rare possibility that even though the
device thinks the write was successful, a bit could have been
- flipped accidentally due to device wear or something else.
+ flipped accidentaly due to device wear or something else.
config MTD_NAND_ECC_SMC
bool "NAND ECC Smart Media byte order"
diff --git a/trunk/drivers/mtd/onenand/Kconfig b/trunk/drivers/mtd/onenand/Kconfig
index 373bddce8f1c..465961b8bcd1 100644
--- a/trunk/drivers/mtd/onenand/Kconfig
+++ b/trunk/drivers/mtd/onenand/Kconfig
@@ -21,7 +21,7 @@ config MTD_ONENAND_VERIFY_WRITE
OneNAND flash device internally checks only bits transitioning
from 1 to 0. There is a rare possibility that even though the
device thinks the write was successful, a bit could have been
- flipped accidentally due to device wear or something else.
+ flipped accidentaly due to device wear or something else.
config MTD_ONENAND_GENERIC
tristate "OneNAND Flash device via platform device driver"
diff --git a/trunk/drivers/net/Kconfig b/trunk/drivers/net/Kconfig
index ab92cc794c64..ff8a8c0a26d5 100644
--- a/trunk/drivers/net/Kconfig
+++ b/trunk/drivers/net/Kconfig
@@ -2115,7 +2115,7 @@ config SKY2
depends on PCI && EXPERIMENTAL
select CRC32
---help---
- This driver supports Gigabit Ethernet adapters based on the
+ This driver supports Gigabit Ethernet adapters based on the the
Marvell Yukon 2 chipset:
Marvell 88E8021/88E8022/88E8035/88E8036/88E8038/88E8050/88E8052/
88E8053/88E8055/88E8061/88E8062, SysKonnect SK-9E21D/SK-9S21
diff --git a/trunk/drivers/net/arm/am79c961a.h b/trunk/drivers/net/arm/am79c961a.h
index 483009fe6ec2..6a49ac7f6d46 100644
--- a/trunk/drivers/net/arm/am79c961a.h
+++ b/trunk/drivers/net/arm/am79c961a.h
@@ -1,5 +1,5 @@
/*
- * linux/drivers/net/arm/am79c961a.h
+ * linux/drivers/net/am79c961.h
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
diff --git a/trunk/drivers/net/ibm_emac/ibm_emac_debug.h b/trunk/drivers/net/ibm_emac/ibm_emac_debug.h
index 6c7dccc84bf5..5761389495d0 100644
--- a/trunk/drivers/net/ibm_emac/ibm_emac_debug.h
+++ b/trunk/drivers/net/ibm_emac/ibm_emac_debug.h
@@ -1,5 +1,5 @@
/*
- * drivers/net/ibm_emac/ibm_emac_debug.h
+ * drivers/net/ibm_emac/ibm_ocp_debug.h
*
* Driver for PowerPC 4xx on-chip ethernet controller, debug print routines.
*
diff --git a/trunk/drivers/net/ibm_emac/ibm_emac_rgmii.h b/trunk/drivers/net/ibm_emac/ibm_emac_rgmii.h
index 117ea486c2ca..94abde55e2e9 100644
--- a/trunk/drivers/net/ibm_emac/ibm_emac_rgmii.h
+++ b/trunk/drivers/net/ibm_emac/ibm_emac_rgmii.h
@@ -1,5 +1,5 @@
/*
- * drivers/net/ibm_emac/ibm_emac_rgmii.h
+ * drivers/net/ibm_emac/ibm_emac_rgmii.c
*
* Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
*
diff --git a/trunk/drivers/net/tokenring/tmspci.c b/trunk/drivers/net/tokenring/tmspci.c
index 3b2f00b9b7bd..7d3e270c4f45 100644
--- a/trunk/drivers/net/tokenring/tmspci.c
+++ b/trunk/drivers/net/tokenring/tmspci.c
@@ -224,7 +224,8 @@ static void __devexit tms_pci_detach (struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
- BUG_ON(!dev);
+ if (!dev)
+ BUG();
unregister_netdev(dev);
release_region(dev->base_addr, TMS_PCI_IO_EXTENT);
free_irq(dev->irq, dev);
diff --git a/trunk/drivers/net/wireless/Kconfig b/trunk/drivers/net/wireless/Kconfig
index ece3d9c2dc61..bd4a68c85a47 100644
--- a/trunk/drivers/net/wireless/Kconfig
+++ b/trunk/drivers/net/wireless/Kconfig
@@ -301,7 +301,7 @@ config HERMES
tristate "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
depends on NET_RADIO && (PPC_PMAC || PCI || PCMCIA)
---help---
- A driver for 802.11b wireless cards based on the "Hermes" or
+ A driver for 802.11b wireless cards based based on the "Hermes" or
Intersil HFA384x (Prism 2) MAC controller. This includes the vast
majority of the PCMCIA 802.11b cards (which are nearly all rebadges)
- except for the Cisco/Aironet cards. Cards supported include the
diff --git a/trunk/drivers/parisc/power.c b/trunk/drivers/parisc/power.c
index 2eb3577a88c5..4a9f025a6b58 100644
--- a/trunk/drivers/parisc/power.c
+++ b/trunk/drivers/parisc/power.c
@@ -1,5 +1,5 @@
/*
- * linux/drivers/parisc/power.c
+ * linux/arch/parisc/kernel/power.c
* HP PARISC soft power switch support driver
*
* Copyright (c) 2001-2005 Helge Deller
diff --git a/trunk/drivers/parport/daisy.c b/trunk/drivers/parport/daisy.c
index 83ee095ec6e2..fd41e28101ea 100644
--- a/trunk/drivers/parport/daisy.c
+++ b/trunk/drivers/parport/daisy.c
@@ -30,7 +30,7 @@
#undef DEBUG
#ifdef DEBUG
-#define DPRINTK(stuff...) printk(stuff)
+#define DPRINTK(stuff...) printk (stuff)
#else
#define DPRINTK(stuff...)
#endif
@@ -46,16 +46,16 @@ static DEFINE_SPINLOCK(topology_lock);
static int numdevs = 0;
/* Forward-declaration of lower-level functions. */
-static int mux_present(struct parport *port);
-static int num_mux_ports(struct parport *port);
-static int select_port(struct parport *port);
-static int assign_addrs(struct parport *port);
+static int mux_present (struct parport *port);
+static int num_mux_ports (struct parport *port);
+static int select_port (struct parport *port);
+static int assign_addrs (struct parport *port);
/* Add a device to the discovered topology. */
-static void add_dev(int devnum, struct parport *port, int daisy)
+static void add_dev (int devnum, struct parport *port, int daisy)
{
struct daisydev *newdev, **p;
- newdev = kmalloc(sizeof(struct daisydev), GFP_KERNEL);
+ newdev = kmalloc (sizeof (struct daisydev), GFP_KERNEL);
if (newdev) {
newdev->port = port;
newdev->daisy = daisy;
@@ -70,9 +70,9 @@ static void add_dev(int devnum, struct parport *port, int daisy)
}
/* Clone a parport (actually, make an alias). */
-static struct parport *clone_parport(struct parport *real, int muxport)
+static struct parport *clone_parport (struct parport *real, int muxport)
{
- struct parport *extra = parport_register_port(real->base,
+ struct parport *extra = parport_register_port (real->base,
real->irq,
real->dma,
real->ops);
@@ -88,7 +88,7 @@ static struct parport *clone_parport(struct parport *real, int muxport)
/* Discover the IEEE1284.3 topology on a port -- muxes and daisy chains.
* Return value is number of devices actually detected. */
-int parport_daisy_init(struct parport *port)
+int parport_daisy_init (struct parport *port)
{
int detected = 0;
char *deviceid;
@@ -103,26 +103,26 @@ int parport_daisy_init(struct parport *port)
/* If mux present on normal port, need to create new
* parports for each extra port. */
- if (port->muxport < 0 && mux_present(port) &&
+ if (port->muxport < 0 && mux_present (port) &&
/* don't be fooled: a mux must have 2 or 4 ports. */
- ((num_ports = num_mux_ports(port)) == 2 || num_ports == 4)) {
+ ((num_ports = num_mux_ports (port)) == 2 || num_ports == 4)) {
/* Leave original as port zero. */
port->muxport = 0;
- printk(KERN_INFO
+ printk (KERN_INFO
"%s: 1st (default) port of %d-way multiplexor\n",
port->name, num_ports);
for (i = 1; i < num_ports; i++) {
/* Clone the port. */
- struct parport *extra = clone_parport(port, i);
+ struct parport *extra = clone_parport (port, i);
if (!extra) {
- if (signal_pending(current))
+ if (signal_pending (current))
break;
- schedule();
+ schedule ();
continue;
}
- printk(KERN_INFO
+ printk (KERN_INFO
"%s: %d%s port of %d-way multiplexor on %s\n",
extra->name, i + 1, th[i + 1], num_ports,
port->name);
@@ -135,34 +135,34 @@ int parport_daisy_init(struct parport *port)
}
if (port->muxport >= 0)
- select_port(port);
+ select_port (port);
- parport_daisy_deselect_all(port);
- detected += assign_addrs(port);
+ parport_daisy_deselect_all (port);
+ detected += assign_addrs (port);
/* Count the potential legacy device at the end. */
- add_dev(numdevs++, port, -1);
+ add_dev (numdevs++, port, -1);
/* Find out the legacy device's IEEE 1284 device ID. */
- deviceid = kmalloc(1024, GFP_KERNEL);
+ deviceid = kmalloc (1024, GFP_KERNEL);
if (deviceid) {
- if (parport_device_id(numdevs - 1, deviceid, 1024) > 2)
+ if (parport_device_id (numdevs - 1, deviceid, 1024) > 2)
detected++;
- kfree(deviceid);
+ kfree (deviceid);
}
if (!detected && !last_try) {
/* No devices were detected. Perhaps they are in some
funny state; let's try to reset them and see if
they wake up. */
- parport_daisy_fini(port);
- parport_write_control(port, PARPORT_CONTROL_SELECT);
- udelay(50);
- parport_write_control(port,
+ parport_daisy_fini (port);
+ parport_write_control (port, PARPORT_CONTROL_SELECT);
+ udelay (50);
+ parport_write_control (port,
PARPORT_CONTROL_SELECT |
PARPORT_CONTROL_INIT);
- udelay(50);
+ udelay (50);
last_try = 1;
goto again;
}
@@ -171,7 +171,7 @@ int parport_daisy_init(struct parport *port)
}
/* Forget about devices on a physical port. */
-void parport_daisy_fini(struct parport *port)
+void parport_daisy_fini (struct parport *port)
{
struct daisydev **p;
@@ -214,7 +214,7 @@ void parport_daisy_fini(struct parport *port)
* for parport_register_device().
**/
-struct pardevice *parport_open(int devnum, const char *name,
+struct pardevice *parport_open (int devnum, const char *name,
int (*pf) (void *), void (*kf) (void *),
void (*irqf) (int, void *, struct pt_regs *),
int flags, void *handle)
@@ -237,7 +237,7 @@ struct pardevice *parport_open(int devnum, const char *name,
port = parport_get_port(p->port);
spin_unlock(&topology_lock);
- dev = parport_register_device(port, name, pf, kf,
+ dev = parport_register_device (port, name, pf, kf,
irqf, flags, handle);
parport_put_port(port);
if (!dev)
@@ -248,13 +248,13 @@ struct pardevice *parport_open(int devnum, const char *name,
/* Check that there really is a device to select. */
if (daisy >= 0) {
int selected;
- parport_claim_or_block(dev);
+ parport_claim_or_block (dev);
selected = port->daisy;
- parport_release(dev);
+ parport_release (dev);
if (selected != daisy) {
/* No corresponding device. */
- parport_unregister_device(dev);
+ parport_unregister_device (dev);
return NULL;
}
}
@@ -270,9 +270,9 @@ struct pardevice *parport_open(int devnum, const char *name,
* parport_register_device().
**/
-void parport_close(struct pardevice *dev)
+void parport_close (struct pardevice *dev)
{
- parport_unregister_device(dev);
+ parport_unregister_device (dev);
}
/**
@@ -287,7 +287,7 @@ void parport_close(struct pardevice *dev)
* exists.
**/
-int parport_device_num(int parport, int mux, int daisy)
+int parport_device_num (int parport, int mux, int daisy)
{
int res = -ENXIO;
struct daisydev *dev;
@@ -305,16 +305,16 @@ int parport_device_num(int parport, int mux, int daisy)
}
/* Send a daisy-chain-style CPP command packet. */
-static int cpp_daisy(struct parport *port, int cmd)
+static int cpp_daisy (struct parport *port, int cmd)
{
unsigned char s;
- parport_data_forward(port);
- parport_write_data(port, 0xaa); udelay(2);
- parport_write_data(port, 0x55); udelay(2);
- parport_write_data(port, 0x00); udelay(2);
- parport_write_data(port, 0xff); udelay(2);
- s = parport_read_status(port) & (PARPORT_STATUS_BUSY
+ parport_data_forward (port);
+ parport_write_data (port, 0xaa); udelay (2);
+ parport_write_data (port, 0x55); udelay (2);
+ parport_write_data (port, 0x00); udelay (2);
+ parport_write_data (port, 0xff); udelay (2);
+ s = parport_read_status (port) & (PARPORT_STATUS_BUSY
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR);
@@ -322,54 +322,54 @@ static int cpp_daisy(struct parport *port, int cmd)
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR)) {
- DPRINTK(KERN_DEBUG "%s: cpp_daisy: aa5500ff(%02x)\n",
+ DPRINTK (KERN_DEBUG "%s: cpp_daisy: aa5500ff(%02x)\n",
port->name, s);
return -ENXIO;
}
- parport_write_data(port, 0x87); udelay(2);
- s = parport_read_status(port) & (PARPORT_STATUS_BUSY
+ parport_write_data (port, 0x87); udelay (2);
+ s = parport_read_status (port) & (PARPORT_STATUS_BUSY
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR);
if (s != (PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR)) {
- DPRINTK(KERN_DEBUG "%s: cpp_daisy: aa5500ff87(%02x)\n",
+ DPRINTK (KERN_DEBUG "%s: cpp_daisy: aa5500ff87(%02x)\n",
port->name, s);
return -ENXIO;
}
- parport_write_data(port, 0x78); udelay(2);
- parport_write_data(port, cmd); udelay(2);
- parport_frob_control(port,
+ parport_write_data (port, 0x78); udelay (2);
+ parport_write_data (port, cmd); udelay (2);
+ parport_frob_control (port,
PARPORT_CONTROL_STROBE,
PARPORT_CONTROL_STROBE);
- udelay(1);
- s = parport_read_status(port);
- parport_frob_control(port, PARPORT_CONTROL_STROBE, 0);
- udelay(1);
- parport_write_data(port, 0xff); udelay(2);
+ udelay (1);
+ s = parport_read_status (port);
+ parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
+ udelay (1);
+ parport_write_data (port, 0xff); udelay (2);
return s;
}
/* Send a mux-style CPP command packet. */
-static int cpp_mux(struct parport *port, int cmd)
+static int cpp_mux (struct parport *port, int cmd)
{
unsigned char s;
int rc;
- parport_data_forward(port);
- parport_write_data(port, 0xaa); udelay(2);
- parport_write_data(port, 0x55); udelay(2);
- parport_write_data(port, 0xf0); udelay(2);
- parport_write_data(port, 0x0f); udelay(2);
- parport_write_data(port, 0x52); udelay(2);
- parport_write_data(port, 0xad); udelay(2);
- parport_write_data(port, cmd); udelay(2);
+ parport_data_forward (port);
+ parport_write_data (port, 0xaa); udelay (2);
+ parport_write_data (port, 0x55); udelay (2);
+ parport_write_data (port, 0xf0); udelay (2);
+ parport_write_data (port, 0x0f); udelay (2);
+ parport_write_data (port, 0x52); udelay (2);
+ parport_write_data (port, 0xad); udelay (2);
+ parport_write_data (port, cmd); udelay (2);
- s = parport_read_status(port);
+ s = parport_read_status (port);
if (!(s & PARPORT_STATUS_ACK)) {
- DPRINTK(KERN_DEBUG "%s: cpp_mux: aa55f00f52ad%02x(%02x)\n",
+ DPRINTK (KERN_DEBUG "%s: cpp_mux: aa55f00f52ad%02x(%02x)\n",
port->name, cmd, s);
return -EIO;
}
@@ -382,12 +382,12 @@ static int cpp_mux(struct parport *port, int cmd)
return rc;
}
-void parport_daisy_deselect_all(struct parport *port)
+void parport_daisy_deselect_all (struct parport *port)
{
- cpp_daisy(port, 0x30);
+ cpp_daisy (port, 0x30);
}
-int parport_daisy_select(struct parport *port, int daisy, int mode)
+int parport_daisy_select (struct parport *port, int daisy, int mode)
{
switch (mode)
{
@@ -395,14 +395,14 @@ int parport_daisy_select(struct parport *port, int daisy, int mode)
case IEEE1284_MODE_EPP:
case IEEE1284_MODE_EPPSL:
case IEEE1284_MODE_EPPSWE:
- return !(cpp_daisy(port, 0x20 + daisy) &
+ return !(cpp_daisy (port, 0x20 + daisy) &
PARPORT_STATUS_ERROR);
// For these modes we should switch to ECP mode:
case IEEE1284_MODE_ECP:
case IEEE1284_MODE_ECPRLE:
case IEEE1284_MODE_ECPSWE:
- return !(cpp_daisy(port, 0xd0 + daisy) &
+ return !(cpp_daisy (port, 0xd0 + daisy) &
PARPORT_STATUS_ERROR);
// Nothing was told for BECP in Daisy chain specification.
@@ -413,28 +413,28 @@ int parport_daisy_select(struct parport *port, int daisy, int mode)
case IEEE1284_MODE_BYTE:
case IEEE1284_MODE_COMPAT:
default:
- return !(cpp_daisy(port, 0xe0 + daisy) &
+ return !(cpp_daisy (port, 0xe0 + daisy) &
PARPORT_STATUS_ERROR);
}
}
-static int mux_present(struct parport *port)
+static int mux_present (struct parport *port)
{
- return cpp_mux(port, 0x51) == 3;
+ return cpp_mux (port, 0x51) == 3;
}
-static int num_mux_ports(struct parport *port)
+static int num_mux_ports (struct parport *port)
{
- return cpp_mux(port, 0x58);
+ return cpp_mux (port, 0x58);
}
-static int select_port(struct parport *port)
+static int select_port (struct parport *port)
{
int muxport = port->muxport;
- return cpp_mux(port, 0x60 + muxport) == muxport;
+ return cpp_mux (port, 0x60 + muxport) == muxport;
}
-static int assign_addrs(struct parport *port)
+static int assign_addrs (struct parport *port)
{
unsigned char s;
unsigned char daisy;
@@ -442,12 +442,12 @@ static int assign_addrs(struct parport *port)
int detected;
char *deviceid;
- parport_data_forward(port);
- parport_write_data(port, 0xaa); udelay(2);
- parport_write_data(port, 0x55); udelay(2);
- parport_write_data(port, 0x00); udelay(2);
- parport_write_data(port, 0xff); udelay(2);
- s = parport_read_status(port) & (PARPORT_STATUS_BUSY
+ parport_data_forward (port);
+ parport_write_data (port, 0xaa); udelay (2);
+ parport_write_data (port, 0x55); udelay (2);
+ parport_write_data (port, 0x00); udelay (2);
+ parport_write_data (port, 0xff); udelay (2);
+ s = parport_read_status (port) & (PARPORT_STATUS_BUSY
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR);
@@ -455,40 +455,40 @@ static int assign_addrs(struct parport *port)
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR)) {
- DPRINTK(KERN_DEBUG "%s: assign_addrs: aa5500ff(%02x)\n",
+ DPRINTK (KERN_DEBUG "%s: assign_addrs: aa5500ff(%02x)\n",
port->name, s);
return 0;
}
- parport_write_data(port, 0x87); udelay(2);
- s = parport_read_status(port) & (PARPORT_STATUS_BUSY
+ parport_write_data (port, 0x87); udelay (2);
+ s = parport_read_status (port) & (PARPORT_STATUS_BUSY
| PARPORT_STATUS_PAPEROUT
| PARPORT_STATUS_SELECT
| PARPORT_STATUS_ERROR);
if (s != (PARPORT_STATUS_SELECT | PARPORT_STATUS_ERROR)) {
- DPRINTK(KERN_DEBUG "%s: assign_addrs: aa5500ff87(%02x)\n",
+ DPRINTK (KERN_DEBUG "%s: assign_addrs: aa5500ff87(%02x)\n",
port->name, s);
return 0;
}
- parport_write_data(port, 0x78); udelay(2);
- s = parport_read_status(port);
+ parport_write_data (port, 0x78); udelay (2);
+ s = parport_read_status (port);
for (daisy = 0;
(s & (PARPORT_STATUS_PAPEROUT|PARPORT_STATUS_SELECT))
== (PARPORT_STATUS_PAPEROUT|PARPORT_STATUS_SELECT)
&& daisy < 4;
++daisy) {
- parport_write_data(port, daisy);
- udelay(2);
- parport_frob_control(port,
+ parport_write_data (port, daisy);
+ udelay (2);
+ parport_frob_control (port,
PARPORT_CONTROL_STROBE,
PARPORT_CONTROL_STROBE);
- udelay(1);
- parport_frob_control(port, PARPORT_CONTROL_STROBE, 0);
- udelay(1);
+ udelay (1);
+ parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
+ udelay (1);
- add_dev(numdevs++, port, daisy);
+ add_dev (numdevs++, port, daisy);
/* See if this device thought it was the last in the
* chain. */
@@ -499,21 +499,21 @@ static int assign_addrs(struct parport *port)
last_dev from next device or if last_dev does not
work status lines from some non-daisy chain
device. */
- s = parport_read_status(port);
+ s = parport_read_status (port);
}
- parport_write_data(port, 0xff); udelay(2);
+ parport_write_data (port, 0xff); udelay (2);
detected = numdevs - thisdev;
- DPRINTK(KERN_DEBUG "%s: Found %d daisy-chained devices\n", port->name,
+ DPRINTK (KERN_DEBUG "%s: Found %d daisy-chained devices\n", port->name,
detected);
/* Ask the new devices to introduce themselves. */
- deviceid = kmalloc(1024, GFP_KERNEL);
+ deviceid = kmalloc (1024, GFP_KERNEL);
if (!deviceid) return 0;
for (daisy = 0; thisdev < numdevs; thisdev++, daisy++)
- parport_device_id(thisdev, deviceid, 1024);
+ parport_device_id (thisdev, deviceid, 1024);
- kfree(deviceid);
+ kfree (deviceid);
return detected;
}
diff --git a/trunk/drivers/pci/Kconfig b/trunk/drivers/pci/Kconfig
index 30294127a0aa..c27e782e6df9 100644
--- a/trunk/drivers/pci/Kconfig
+++ b/trunk/drivers/pci/Kconfig
@@ -52,11 +52,3 @@ config PCI_DEBUG
When in doubt, say N.
-config HT_IRQ
- bool "Interrupts on hypertransport devices"
- default y
- depends on X86_LOCAL_APIC && X86_IO_APIC
- help
- This allows native hypertransport devices to use interrupts.
-
- If unsure say Y.
diff --git a/trunk/drivers/pci/Makefile b/trunk/drivers/pci/Makefile
index e3beb784406f..f2d152b818f0 100644
--- a/trunk/drivers/pci/Makefile
+++ b/trunk/drivers/pci/Makefile
@@ -14,12 +14,6 @@ obj-$(CONFIG_HOTPLUG) += hotplug.o
# Build the PCI Hotplug drivers if we were asked to
obj-$(CONFIG_HOTPLUG_PCI) += hotplug/
-# Build the PCI MSI interrupt support
-obj-$(CONFIG_PCI_MSI) += msi.o
-
-# Build the Hypertransport interrupt support
-obj-$(CONFIG_HT_IRQ) += htirq.o
-
#
# Some architectures use the generic PCI setup functions
#
@@ -33,6 +27,11 @@ obj-$(CONFIG_PPC64) += setup-bus.o
obj-$(CONFIG_MIPS) += setup-bus.o setup-irq.o
obj-$(CONFIG_X86_VISWS) += setup-irq.o
+msiobj-y := msi.o msi-apic.o
+msiobj-$(CONFIG_IA64_GENERIC) += msi-altix.o
+msiobj-$(CONFIG_IA64_SGI_SN2) += msi-altix.o
+obj-$(CONFIG_PCI_MSI) += $(msiobj-y)
+
#
# ACPI Related PCI FW Functions
#
diff --git a/trunk/drivers/pci/hotplug/Kconfig b/trunk/drivers/pci/hotplug/Kconfig
index 6e780db9454d..8a60f391ffcf 100644
--- a/trunk/drivers/pci/hotplug/Kconfig
+++ b/trunk/drivers/pci/hotplug/Kconfig
@@ -157,7 +157,7 @@ config HOTPLUG_PCI_RPA
tristate "RPA PCI Hotplug driver"
depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE
help
- Say Y here if you have a RPA system that supports PCI Hotplug.
+ Say Y here if you have a a RPA system that supports PCI Hotplug.
To compile this driver as a module, choose M here: the
module will be called rpaphp.
diff --git a/trunk/drivers/pci/htirq.c b/trunk/drivers/pci/htirq.c
deleted file mode 100644
index 0e27f2404a83..000000000000
--- a/trunk/drivers/pci/htirq.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * File: htirq.c
- * Purpose: Hypertransport Interrupt Capability
- *
- * Copyright (C) 2006 Linux Networx
- * Copyright (C) Eric Biederman
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* Global ht irq lock.
- *
- * This is needed to serialize access to the data port in hypertransport
- * irq capability.
- *
- * With multiple simultaneous hypertransport irq devices it might pay
- * to make this more fine grained. But start with simple, stupid, and correct.
- */
-static DEFINE_SPINLOCK(ht_irq_lock);
-
-struct ht_irq_cfg {
- struct pci_dev *dev;
- unsigned pos;
- unsigned idx;
-};
-
-void write_ht_irq_low(unsigned int irq, u32 data)
-{
- struct ht_irq_cfg *cfg = get_irq_data(irq);
- unsigned long flags;
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx);
- pci_write_config_dword(cfg->dev, cfg->pos + 4, data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
-}
-
-void write_ht_irq_high(unsigned int irq, u32 data)
-{
- struct ht_irq_cfg *cfg = get_irq_data(irq);
- unsigned long flags;
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx + 1);
- pci_write_config_dword(cfg->dev, cfg->pos + 4, data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
-}
-
-u32 read_ht_irq_low(unsigned int irq)
-{
- struct ht_irq_cfg *cfg = get_irq_data(irq);
- unsigned long flags;
- u32 data;
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx);
- pci_read_config_dword(cfg->dev, cfg->pos + 4, &data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
- return data;
-}
-
-u32 read_ht_irq_high(unsigned int irq)
-{
- struct ht_irq_cfg *cfg = get_irq_data(irq);
- unsigned long flags;
- u32 data;
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx + 1);
- pci_read_config_dword(cfg->dev, cfg->pos + 4, &data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
- return data;
-}
-
-void mask_ht_irq(unsigned int irq)
-{
- struct ht_irq_cfg *cfg;
- unsigned long flags;
- u32 data;
-
- cfg = get_irq_data(irq);
-
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx);
- pci_read_config_dword(cfg->dev, cfg->pos + 4, &data);
- data |= 1;
- pci_write_config_dword(cfg->dev, cfg->pos + 4, data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
-}
-
-void unmask_ht_irq(unsigned int irq)
-{
- struct ht_irq_cfg *cfg;
- unsigned long flags;
- u32 data;
-
- cfg = get_irq_data(irq);
-
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(cfg->dev, cfg->pos + 2, cfg->idx);
- pci_read_config_dword(cfg->dev, cfg->pos + 4, &data);
- data &= ~1;
- pci_write_config_dword(cfg->dev, cfg->pos + 4, data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
-}
-
-/**
- * ht_create_irq - create an irq and attach it to a device.
- * @dev: The hypertransport device to find the irq capability on.
- * @idx: Which of the possible irqs to attach to.
- *
- * ht_create_irq is needs to be called for all hypertransport devices
- * that generate irqs.
- *
- * The irq number of the new irq or a negative error value is returned.
- */
-int ht_create_irq(struct pci_dev *dev, int idx)
-{
- struct ht_irq_cfg *cfg;
- unsigned long flags;
- u32 data;
- int max_irq;
- int pos;
- int irq;
-
- pos = pci_find_capability(dev, PCI_CAP_ID_HT);
- while (pos) {
- u8 subtype;
- pci_read_config_byte(dev, pos + 3, &subtype);
- if (subtype == HT_CAPTYPE_IRQ)
- break;
- pos = pci_find_next_capability(dev, pos, PCI_CAP_ID_HT);
- }
- if (!pos)
- return -EINVAL;
-
- /* Verify the idx I want to use is in range */
- spin_lock_irqsave(&ht_irq_lock, flags);
- pci_write_config_byte(dev, pos + 2, 1);
- pci_read_config_dword(dev, pos + 4, &data);
- spin_unlock_irqrestore(&ht_irq_lock, flags);
-
- max_irq = (data >> 16) & 0xff;
- if ( idx > max_irq)
- return -EINVAL;
-
- cfg = kmalloc(sizeof(*cfg), GFP_KERNEL);
- if (!cfg)
- return -ENOMEM;
-
- cfg->dev = dev;
- cfg->pos = pos;
- cfg->idx = 0x10 + (idx * 2);
-
- irq = create_irq();
- if (irq < 0) {
- kfree(cfg);
- return -EBUSY;
- }
- set_irq_data(irq, cfg);
-
- if (arch_setup_ht_irq(irq, dev) < 0) {
- ht_destroy_irq(irq);
- return -EBUSY;
- }
-
- return irq;
-}
-
-/**
- * ht_destroy_irq - destroy an irq created with ht_create_irq
- *
- * This reverses ht_create_irq removing the specified irq from
- * existence. The irq should be free before this happens.
- */
-void ht_destroy_irq(unsigned int irq)
-{
- struct ht_irq_cfg *cfg;
-
- cfg = get_irq_data(irq);
- set_irq_chip(irq, NULL);
- set_irq_data(irq, NULL);
- destroy_irq(irq);
-
- kfree(cfg);
-}
-
-EXPORT_SYMBOL(ht_create_irq);
-EXPORT_SYMBOL(ht_destroy_irq);
diff --git a/trunk/arch/ia64/sn/kernel/msi_sn.c b/trunk/drivers/pci/msi-altix.c
similarity index 65%
rename from trunk/arch/ia64/sn/kernel/msi_sn.c
rename to trunk/drivers/pci/msi-altix.c
index 6ffd1f850d41..bed4183a5e39 100644
--- a/trunk/arch/ia64/sn/kernel/msi_sn.c
+++ b/trunk/drivers/pci/msi-altix.c
@@ -7,10 +7,8 @@
*/
#include
-#include