2.6.6-rc2
--- diff/CREDITS 2004-04-05 12:57:06.000000000 +0100
+++ source/CREDITS 2004-04-21 10:45:33.202655928 +0100
@@ -289,6 +289,15 @@ S: Via Delle Palme, 9
S: Terni 05100
S: Italy
+N: Krzysztof Benedyczak
+E: golbi@mat.uni.torun.pl
+W: http://www.mat.uni.torun.pl/~golbi
+D: POSIX message queues fs (with M. Wronski)
+S: ul. Podmiejska 52
+S: Radunica
+S: 83-000 Pruszcz Gdanski
+S: Poland
+
N: Randolph Bentson
E: bentson@grieg.seaslug.org
W: http://www.aa.net/~bentson/
@@ -2258,7 +2267,7 @@ S: D-37083 Goettingen
S: Germany
N: Thomas Molina
-E: tmolina@cox.net
+E: tmolina@cablespeed.com
D: bug fixes, documentation, minor hackery
N: James Morris
@@ -3485,6 +3494,14 @@ S: 12725 SW Millikan Way, Suite 400
S: Beaverton, OR 97005
S: USA
+N: Michal Wronski
+E: wrona@mat.uni.torun.pl
+W: http://www.mat.uni.torun.pl/~wrona
+D: POSIX message queues fs (with K. Benedyczak)
+S: ul. Teczowa 23/12
+S: 80-680 Gdansk-Sobieszewo
+S: Poland
+
N: Frank Xia
E: qx@math.columbia.edu
D: Xiafs filesystem [defunct]
--- diff/Documentation/Changes 2004-03-11 10:20:19.000000000 +0000
+++ source/Documentation/Changes 2004-04-21 10:45:33.203655776 +0100
@@ -112,8 +112,8 @@ System utilities
Architectural changes
---------------------
-DevFS is now in the kernel. See Documentation/filesystems/devfs/* in
-the kernel source tree for all the gory details.
+DevFS has been obsoleted in favour of udev
+(http://www.kernel.org/pub/linux/utils/kernel/hotplug/)
32-bit UID support is now in place. Have fun!
@@ -400,8 +400,3 @@ NFS-Utils
o
-Suggestions and corrections
-===========================
-
-Please feel free to submit changes, corrections, gripes, flames,
-money, etc. to me . Happy Linuxing!
--- diff/Documentation/CodingStyle 2004-03-11 10:20:19.000000000 +0000
+++ source/Documentation/CodingStyle 2004-04-21 10:45:33.203655776 +0100
@@ -254,6 +254,8 @@ values. To do the latter, you can stick
(interactive)
(c-mode)
(c-set-style "K&R")
+ (setq tab-width 8)
+ (setq indent-tabs-mode t)
(setq c-basic-offset 8))
This will define the M-x linux-c-mode command. When hacking on a
--- diff/Documentation/DMA-mapping.txt 2004-04-05 12:57:06.000000000 +0100
+++ source/Documentation/DMA-mapping.txt 2004-04-21 10:45:33.211654560 +0100
@@ -132,7 +132,7 @@ exactly why.
The standard 32-bit addressing PCI device would do something like
this:
- if (pci_set_dma_mask(pdev, 0xffffffff)) {
+ if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
printk(KERN_WARNING
"mydev: No suitable DMA available.\n");
goto ignore_this_device;
@@ -151,9 +151,9 @@ all 64-bits when accessing streaming DMA
int using_dac;
- if (!pci_set_dma_mask(pdev, 0xffffffffffffffff)) {
+ if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
using_dac = 1;
- } else if (!pci_set_dma_mask(pdev, 0xffffffff)) {
+ } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
using_dac = 0;
} else {
printk(KERN_WARNING
@@ -166,14 +166,14 @@ the case would look like this:
int using_dac, consistent_using_dac;
- if (!pci_set_dma_mask(pdev, 0xffffffffffffffff)) {
+ if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
using_dac = 1;
consistent_using_dac = 1;
- pci_set_consistent_dma_mask(pdev, 0xffffffffffffffff)
- } else if (!pci_set_dma_mask(pdev, 0xffffffff)) {
+ pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
+ } else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
using_dac = 0;
consistent_using_dac = 0;
- pci_set_consistent_dma_mask(pdev, 0xffffffff)
+ pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
} else {
printk(KERN_WARNING
"mydev: No suitable DMA available.\n");
@@ -215,7 +215,7 @@ most specific mask.
Here is pseudo-code showing how this might be done:
- #define PLAYBACK_ADDRESS_BITS 0xffffffff
+ #define PLAYBACK_ADDRESS_BITS DMA_32BIT_MASK
#define RECORD_ADDRESS_BITS 0x00ffffff
struct my_sound_card *card;
--- diff/Documentation/DocBook/kernel-hacking.tmpl 2003-09-30 15:46:10.000000000 +0100
+++ source/Documentation/DocBook/kernel-hacking.tmpl 2004-04-21 10:45:33.222652888 +0100
@@ -204,11 +204,11 @@
- lists the
+ lists the
different BH's. No matter how many CPUs you have, no two BHs will run at
the same time. This made the transition to SMP simpler, but sucks hard for
scalable performance. A very important bottom half is the timer
- BH (): you
+ BH (): you
can register to have it call functions for you in a given length of time.
@@ -224,7 +224,7 @@
- tasklets ()
+ tasklets ()
are like softirqs, except they are dynamically-registrable (meaning you
can have as many as you want), and they also guarantee that any tasklet
will only run on one CPU at any time, although different tasklets can
@@ -241,7 +241,7 @@
You can tell you are in a softirq (or bottom half, or tasklet)
using the in_softirq() macro
- ().
+ ().
@@ -330,7 +330,7 @@ asmlinkage long sys_mycall(int arg)
You create a character device and implement an appropriate ioctl
for it. This is much more flexible than system calls, doesn't have
to be entered in every architecture's
- and
+ and
arch/kernel/entry.S file, and is much more
likely to be accepted by Linus.
@@ -343,7 +343,7 @@ asmlinkage long sys_mycall(int arg)
Inside the ioctl you're in user context to a process. When a
error occurs you return a negated errno (see
- ),
+ ),
otherwise you return 0.
@@ -429,7 +429,7 @@ cond_resched(); /* Will sleep */
printk()
-
+
@@ -447,7 +447,7 @@ printk(KERN_INFO "i = %u\n", i);
- See ;
+ See ;
for other KERN_ values; these are interpreted by syslog as the
level. Special case: for printing an IP address use
@@ -487,7 +487,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
get_user()
/
put_user()
-
+
@@ -525,7 +525,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
kmalloc()/kfree()
-
+
[MAY SLEEP: SEE BELOW]
@@ -593,10 +593,10 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
If you are allocating at least PAGE_SIZE
- () bytes,
+ () bytes,
consider using __get_free_pages()
- (). It
+ (). It
takes an order argument (0 for page sized, 1 for double page, 2
for four pages etc.) and the same memory priority flag word as
above.
@@ -619,13 +619,13 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
Before inventing your own cache of often-used objects consider
using a slab cache in
-
+
current
-
+
This global variable (really a macro) contains a pointer to
@@ -638,8 +638,8 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
udelay()/mdelay()
-
-
+
+
@@ -652,7 +652,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
cpu_to_be32()/be32_to_cpu()/cpu_to_le32()/le32_to_cpu()
-
+
@@ -675,7 +675,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
local_irq_save()/local_irq_restore()
-
+
@@ -690,7 +690,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
local_bh_disable()/local_bh_enable()
-
+
These routines disable soft interrupts on the local CPU, and
@@ -703,7 +703,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
smp_processor_id()
-
+
smp_processor_id() returns the current
@@ -715,7 +715,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
__init/__exit/__initdata
-
+
After boot, the kernel frees up a special section; functions
@@ -738,7 +738,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
__initcall()/module_init()
-
+
Many parts of the kernel are well served as a module
(dynamically-loadable parts of the kernel). Using the
@@ -768,7 +768,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
module_exit()
-
+
This macro defines the function to be called at module removal
@@ -781,7 +781,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n",
MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT
-
+
These manipulate the module usage count, to protect against
@@ -839,7 +839,7 @@ foo_open (...)
Wait Queues
-
+
[SLEEPS]
@@ -874,7 +874,7 @@ foo_open (...)
There is a macro to do this:
wait_event_interruptible()
- The
+ The
first argument is the wait queue head, and the second is an
expression which is evaluated; the macro returns
0 when this expression is true, or
@@ -900,7 +900,7 @@ foo_open (...)
Call wake_up()
- ;,
+ ;,
which will wake up every process in the queue. The exception is
if one has TASK_EXCLUSIVE set, in which case
the remainder of the queue will not be woken.
@@ -915,7 +915,7 @@ foo_open (...)
Certain operations are guaranteed atomic on all platforms. The
first class of operations work on atomic_t
- ; this
+ ; this
contains a signed integer (at least 24 bits long), and you must use
these functions to manipulate or read atomic_t variables.
atomic_read() and
@@ -943,7 +943,7 @@ foo_open (...)
The second class of atomic operations is atomic bit operations on a
long, defined in
- . These
+ . These
operations generally take a pointer to the bit pattern, and a bit
number: 0 is the least significant bit.
set_bit(), clear_bit()
@@ -982,7 +982,7 @@ foo_open (...)
EXPORT_SYMBOL()
-
+
This is the classic method of exporting a symbol, and it works
@@ -995,7 +995,7 @@ foo_open (...)
EXPORT_SYMBOL_GPL()
-
+
Similar to EXPORT_SYMBOL() except that the
@@ -1012,7 +1012,7 @@ foo_open (...)
Double-linked lists
-
+
There are three sets of linked-list routines in the kernel
@@ -1039,7 +1039,7 @@ foo_open (...)
The filesystem code uses ERR_PTR()
- ; to
+ ; to
encode a negative error number into a pointer, and
IS_ERR() and PTR_ERR()
to get it back out again: avoids a separate pointer parameter for
--- diff/Documentation/DocBook/kernel-locking.tmpl 2004-02-18 08:54:06.000000000 +0000
+++ source/Documentation/DocBook/kernel-locking.tmpl 2004-04-21 10:45:33.232651368 +0100
@@ -87,7 +87,7 @@
Expected Results
-
+
@@ -133,7 +133,7 @@
Possible Results
-
+
Instance 1
@@ -222,14 +222,14 @@
There are two main types of kernel locks. The fundamental type
is the spinlock
- (),
+ (),
which is a very simple single-holder lock: if you can't get the
spinlock, you keep trying (spinning) until you can. Spinlocks are
very small and fast, and can be used anywhere.
The second type is a semaphore
- (): it
+ (): it
can have more than one holder at any time (the number decided at
initialization time), although it is most commonly used as a
single-holder lock (a mutex). If you can't get a semaphore,
@@ -315,7 +315,7 @@
user context can be interrupted by a softirq, and secondly, the
critical region could be entered from another CPU. This is where
spin_lock_bh()
- () is
+ () is
used. It disables softirqs on that CPU, then grabs the lock.
spin_unlock_bh() does the reverse. (The
'_bh' suffix is a historical reference to "Bottom Halves", the
@@ -333,7 +333,7 @@
This works perfectly for UP
as well: the spin lock vanishes, and this macro
simply becomes local_bh_disable()
- (), which
+ (), which
protects you from the softirq being run.
@@ -463,7 +463,7 @@
This works perfectly for UP as well: the spin lock vanishes,
and this macro simply becomes local_irq_disable()
- (), which
+ (), which
protects you from the softirq/tasklet/BH being run.
@@ -545,7 +545,7 @@
Table of Locking Requirements
-
+
@@ -1026,7 +1026,7 @@ In practice, atomic_t would
refcnt. There are a number of atomic
operations defined in
-: these are
+: these are
guaranteed to be seen atomically from all CPUs in the system, so no
lock is required. In this case, it is simpler than using spinlocks,
although for anything non-trivial using spinlocks is clearer. The
@@ -1296,7 +1296,7 @@ as Alan Cox says, Lock data, not
Consequences
-
+
@@ -1437,7 +1437,7 @@ as Alan Cox says, Lock data, not
themselves (by calling add_timer() at the end
of their timer function). Because this is a fairly common case
which is prone to races, you should use del_timer_sync()
- ()
+ ()
to handle this case. It returns the number of times the timer
had to be deleted before we finally stopped it from adding itself back
in.
@@ -1749,7 +1749,7 @@ machines due to caching.
an exclusive lock. See DEFINE_PER_CPU(),
get_cpu_var() and
put_cpu_var()
- ().
+ ().
@@ -1757,7 +1757,7 @@ machines due to caching.
local_t type, and the
cpu_local_inc() and related functions,
which are more efficient than simple code on some architectures
- ().
+ ().
--- diff/Documentation/DocBook/lsm.tmpl 2002-11-28 11:30:38.000000000 +0000
+++ source/Documentation/DocBook/lsm.tmpl 2004-04-21 10:45:33.245649392 +0100
@@ -27,7 +27,7 @@
cvance@nai.com
-
Introduction
--- diff/Documentation/DocBook/mousedrivers.tmpl 2002-11-28 11:30:38.000000000 +0000
+++ source/Documentation/DocBook/mousedrivers.tmpl 2004-04-21 10:45:33.254648024 +0100
@@ -88,9 +88,9 @@
Each read from a bus mouse interface device returns a block of data.
The first three bytes of each read are defined as follows:
-
+
Mouse Data Encoding
-
+
Byte 0
--- diff/Documentation/DocBook/parportbook.tmpl 2004-04-05 12:57:06.000000000 +0100
+++ source/Documentation/DocBook/parportbook.tmpl 2004-04-21 10:45:33.264646504 +0100
@@ -969,7 +969,7 @@ port->ops->write_data (port, d);
To recap, then:
-
+
@@ -1387,7 +1387,7 @@ struct parport_operations {
/dev/parport0) allows you to:
-
+
@@ -1614,7 +1614,7 @@ struct parport_operations {
incluce/linux/parport.h and include:
-
+
IEEE1284_MODE_COMPAT
@@ -1713,7 +1713,7 @@ struct parport_operations {
affect future I/O operations. Available flags are:
-
+
PP_FASTWRITE
@@ -1759,7 +1759,7 @@ struct parport_operations {
include/linux/parport.h:
-
+
PARPORT_CONTROL_STROBE
@@ -2729,9 +2729,6 @@ to permit their use in free software.
-
--- diff/Documentation/DocBook/sis900.tmpl 2003-08-20 14:16:23.000000000 +0100
+++ source/Documentation/DocBook/sis900.tmpl 2004-04-21 10:45:33.265646352 +0100
@@ -336,7 +336,7 @@ Those packages are listed in Document/Ch
distribution. If you have to install the driver other than those bundled
in kernel release, you should have your driver file
sis900.c and sis900.h
-copied into /usr/src/linux/drivers/net/ first.
+copied into /usr/src/linux/drivers/net/ first.
There are two alternative ways to install the driver
--- diff/Documentation/DocBook/via-audio.tmpl 2002-10-16 04:29:07.000000000 +0100
+++ source/Documentation/DocBook/via-audio.tmpl 2004-04-21 10:45:33.269645744 +0100
@@ -227,7 +227,7 @@
Version 1.9.1
-
+
DSP read/write bugfixes from Thomas Sailer.
@@ -252,7 +252,7 @@ Version 1.9.1
Version 1.1.15
-
+
Support for variable fragment size and variable fragment number (Rui
@@ -325,7 +325,7 @@ Version 1.1.15
Version 1.1.14
-
+
Use VM_RESERVE when available, to eliminate unnecessary page faults.
@@ -337,7 +337,7 @@ Version 1.1.14
Version 1.1.12
-
+
mmap bug fixes from Linus.
@@ -349,7 +349,7 @@ Version 1.1.12
Version 1.1.11
-
+
Many more bug fixes. mmap enabled by default, but may still be buggy.
@@ -368,7 +368,7 @@ Version 1.1.11
Version 1.1.10
-
+
Many bug fixes. mmap enabled by default, but may still be buggy.
@@ -380,7 +380,7 @@ Version 1.1.10
Version 1.1.9
-
+
Redesign and rewrite audio playback implementation. (faster and smaller, hopefully)
@@ -478,7 +478,7 @@ Version 1.1.9
Version 1.1.8
-
+
Clean up interrupt handler output. Fixes the following kernel error message:
@@ -501,7 +501,7 @@ Version 1.1.8
Version 1.1.7
-
+
Fix module unload bug where mixer device left registered
@@ -514,7 +514,7 @@ Version 1.1.7
Version 1.1.6
-
+
Rewrite via_set_rate to mimic ALSA basic AC97 rate setting
@@ -546,7 +546,7 @@ Version 1.1.6
Version 1.1.5
-
+
Disable some overly-verbose debugging code
@@ -573,7 +573,7 @@ Version 1.1.5
Version 1.1.4
-
+
Completed rewrite of driver. Eliminated SoundBlaster compatibility
--- diff/Documentation/DocBook/videobook.tmpl 2003-02-26 16:01:06.000000000 +0000
+++ source/Documentation/DocBook/videobook.tmpl 2004-04-21 10:45:33.284643464 +0100
@@ -176,8 +176,8 @@ int __init myradio_init(struct video_ini
The types available are
- Device Types
-
+ Device Types
+
VFL_TYPE_RADIO>/dev/radio{n}>
@@ -299,8 +299,8 @@ static int radio_ioctl(struct video_devi
allows the applications to find out what sort of a card they have found and
to figure out what they want to do about it. The fields in the structure are
- struct video_capability fields
-
+ struct video_capability fields
+
name>The device text name. This is intended for the user.>
@@ -373,8 +373,8 @@ static int radio_ioctl(struct video_devi
The video_tuner structure has the following fields
- struct video_tuner fields
-
+ struct video_tuner fields
+
int tuner>The number of the tuner in question
@@ -406,8 +406,8 @@ static int radio_ioctl(struct video_devi
- struct video_tuner flags
-
+ struct video_tuner flags
+
VIDEO_TUNER_PAL>A PAL TV tuner
@@ -429,8 +429,8 @@ static int radio_ioctl(struct video_devi
- struct video_tuner modes
-
+ struct video_tuner modes
+
VIDEO_MODE_PAL>PAL Format
@@ -580,8 +580,8 @@ static int current_volume=0;
Then we fill in the video_audio structure. This has the following format
- struct video_audio fields
-
+ struct video_audio fields
+
audio>The input the user wishes to query>
@@ -615,8 +615,8 @@ static int current_volume=0;
- struct video_audio flags
-
+ struct video_audio flags
+
VIDEO_AUDIO_MUTE>The audio is currently muted. We
@@ -633,8 +633,8 @@ static int current_volume=0;
- struct video_audio modes
-
+ struct video_audio modes
+
VIDEO_SOUND_MONO>Mono sound
@@ -862,8 +862,8 @@ static struct video_device my_camera
We use the extra video capability flags that did not apply to the
radio interface. The video related flags are
- Capture Capabilities
-
+ Capture Capabilities
+
VID_TYPE_CAPTURE>We support image capture>
@@ -1204,8 +1204,8 @@ static int camera_ioctl(struct video_dev
inputs to the video card). Our example card has a single camera input. The
fields in the structure are
- struct video_channel fields
-
+ struct video_channel fields
+
@@ -1227,8 +1227,8 @@ static int camera_ioctl(struct video_dev
- struct video_channel flags
-
+ struct video_channel flags
+
VIDEO_VC_TUNER>Channel has a tuner.
@@ -1238,8 +1238,8 @@ static int camera_ioctl(struct video_dev
- struct video_channel types
-
+ struct video_channel types
+
VIDEO_TYPE_TV>Television input.
@@ -1251,8 +1251,8 @@ static int camera_ioctl(struct video_dev
- struct video_channel norms
-
+ struct video_channel norms
+
VIDEO_MODE_PAL>PAL encoded Television
@@ -1337,8 +1337,8 @@ static int camera_ioctl(struct video_dev
for every other pixel in the image. The other common formats the interface
defines are
- Framebuffer Encodings
-
+ Framebuffer Encodings
+
GREY>Linear greyscale. This is for simple cameras and the
@@ -1475,8 +1475,8 @@ static struct video_buffer capture_fb;
display. The video_window structure is used to describe the way the image
should be displayed.
- struct video_window fields
-
+ struct video_window fields
+
width>The width in pixels of the desired image. The card
@@ -1512,8 +1512,8 @@ static struct video_buffer capture_fb;
Each clip is a struct video_clip which has the following fields
- video_clip fields
-
+ video_clip fields
+
x, y>Co-ordinates relative to the display>
--- diff/Documentation/IPMI.txt 2003-05-21 11:49:59.000000000 +0100
+++ source/Documentation/IPMI.txt 2004-04-21 10:45:33.295641792 +0100
@@ -22,6 +22,58 @@ are not familiar with IPMI itself, see t
http://www.intel.com/design/servers/ipmi/index.htm. IPMI is a big
subject and I can't cover it all here!
+Configuration
+-------------
+
+The LinuxIPMI driver is modular, which means you have to pick several
+things to have it work right depending on your hardware. Most of
+these are available in the 'Character Devices' menu.
+
+No matter what, you must pick 'IPMI top-level message handler' to use
+IPMI. What you do beyond that depends on your needs and hardware.
+
+The message handler does not provide any user-level interfaces.
+Kernel code (like the watchdog) can still use it. If you need access
+from userland, you need to select 'Device interface for IPMI' if you
+want access through a device driver. Another interface is also
+available, you may select 'IPMI sockets' in the 'Networking Support'
+main menu. This provides a socket interface to IPMI. You may select
+both of these at the same time, they will both work together.
+
+The driver interface depends on your hardware. If you have a board
+with a standard interface (These will generally be either "KCS",
+"SMIC", or "BT", consult your hardware manual), choose the 'IPMI SI
+handler' option. A driver also exists for direct I2C access to the
+IPMI management controller. Some boards support this, but it is
+unknown if it will work on every board. For this, choose 'IPMI SMBus
+handler', but be ready to try to do some figuring to see if it will
+work.
+
+There is also a KCS-only driver interface supplied, but it is
+depracated in favor of the SI interface.
+
+You should generally enable ACPI on your system, as systems with IPMI
+should have ACPI tables describing them.
+
+If you have a standard interface and the board manufacturer has done
+their job correctly, the IPMI controller should be automatically
+detect (via ACPI or SMBIOS tables) and should just work. Sadly, many
+boards do not have this information. The driver attempts standard
+defaults, but they may not work. If you fall into this situation, you
+need to read the section below named 'The SI Driver' on how to
+hand-configure your system.
+
+IPMI defines a standard watchdog timer. You can enable this with the
+'IPMI Watchdog Timer' config option. If you compile the driver into
+the kernel, then via a kernel command-line option you can have the
+watchdog timer start as soon as it intitializes. It also have a lot
+of other options, see the 'Watchdog' section below for more details.
+Note that you can also have the watchdog continue to run if it is
+closed (by default it is disabled on close). Go into the 'Watchdog
+Cards' menu, enable 'Watchdog Timer Support', and enable the option
+'Disable watchdog shutdown on close'.
+
+
Basic Design
------------
@@ -41,18 +93,30 @@ ipmi_devintf - This provides a userland
driver, each open file for this device ties in to the message handler
as an IPMI user.
-ipmi_kcs_drv - A driver for the KCS SMI. Most system have a KCS
-interface for IPMI.
+ipmi_si - A driver for various system interfaces. This supports
+KCS, SMIC, and may support BT in the future. Unless you have your own
+custom interface, you probably need to use this.
+
+ipmi_smb - A driver for accessing BMCs on the SMBus. It uses the
+I2C kernel driver's SMBus interfaces to send and receive IPMI messages
+over the SMBus.
+af_ipmi - A network socket interface to IPMI. This doesn't take up
+a character device in your system.
+
+Note that the KCS-only interface ahs been removed.
Much documentation for the interface is in the include files. The
IPMI include files are:
-ipmi.h - Contains the user interface and IOCTL interface for IPMI.
+net/af_ipmi.h - Contains the socket interface.
+
+linux/ipmi.h - Contains the user interface and IOCTL interface for IPMI.
-ipmi_smi.h - Contains the interface for SMI drivers to use.
+linux/ipmi_smi.h - Contains the interface for system management interfaces
+(things that interface to IPMI controllers) to use.
-ipmi_msgdefs.h - General definitions for base IPMI messaging.
+linux/ipmi_msgdefs.h - General definitions for base IPMI messaging.
Addressing
@@ -260,70 +324,131 @@ they register with the message handler.
in the order they register, although if an SMI unregisters and then
another one registers, all bets are off.
-The ipmi_smi.h defines the interface for SMIs, see that for more
-details.
+The ipmi_smi.h defines the interface for management interfaces, see
+that for more details.
-The KCS Driver
---------------
+The SI Driver
+-------------
-The KCS driver allows up to 4 KCS interfaces to be configured in the
-system. By default, the driver will register one KCS interface at the
-spec-specified I/O port 0xca2 without interrupts. You can change this
-at module load time (for a module) with:
+The SI driver allows up to 4 KCS or SMIC interfaces to be configured
+in the system. By default, scan the ACPI tables for interfaces, and
+if it doesn't find any the driver will attempt to register one KCS
+interface at the spec-specified I/O port 0xca2 without interrupts.
+You can change this at module load time (for a module) with:
- insmod ipmi_kcs_drv.o kcs_ports=,... kcs_addrs=,
- kcs_irqs=,... kcs_trydefaults=[0|1]
+ modprobe ipmi_si.o type=,....
+ ports=,... addrs=,...
+ irqs=,... trydefaults=[0|1]
-The KCS driver supports two types of interfaces, ports (for I/O port
-based KCS interfaces) and memory addresses (for KCS interfaces in
-memory). The driver will support both of them simultaneously, setting
-the port to zero (or just not specifying it) will allow the memory
-address to be used. The port will override the memory address if it
-is specified and non-zero. kcs_trydefaults sets whether the standard
-IPMI interface at 0xca2 and any interfaces specified by ACPE are
-tried. By default, the driver tries it, set this value to zero to
-turn this off.
+Each of these except si_trydefaults is a list, the first item for the
+first interface, second item for the second interface, etc.
+
+The si_type may be either "kcs", "smic", or "bt". If you leave it blank, it
+defaults to "kcs".
+
+If you specify si_addrs as non-zero for an interface, the driver will
+use the memory address given as the address of the device. This
+overrides si_ports.
+
+If you specify si_ports as non-zero for an interface, the driver will
+use the I/O port given as the device address.
+
+If you specify si_irqs as non-zero for an interface, the driver will
+attempt to use the given interrupt for the device.
+
+si_trydefaults sets whether the standard IPMI interface at 0xca2 and
+any interfaces specified by ACPE are tried. By default, the driver
+tries it, set this value to zero to turn this off.
When compiled into the kernel, the addresses can be specified on the
kernel command line as:
- ipmi_kcs=:,:....,[nodefault]
-
-The values is either "p" or "m" for port or memory
-addresses. So for instance, a KCS interface at port 0xca2 using
-interrupt 9 and a memory interface at address 0xf9827341 with no
-interrupt would be specified "ipmi_kcs=p0xca2:9,m0xf9827341".
-If you specify zero for in irq or don't specify it, the driver will
-run polled unless the software can detect the interrupt to use in the
-ACPI tables.
-
-By default, the driver will attempt to detect a KCS device at the
-spec-specified 0xca2 address and any address specified by ACPI. If
-you want to turn this off, use the "nodefault" option.
+ ipmi_si.type=,...
+ ipmi_si.ports=,... ipmi_si.addrs=,...
+ ipmi_si.irqs=,... ipmi_si.trydefaults=[0|1]
+
+It works the same as the module parameters of the same names.
+
+By default, the driver will attempt to detect any device specified by
+ACPI, and if none of those then a KCS device at the spec-specified
+0xca2. If you want to turn this off, set the "trydefaults" option to
+false.
If you have high-res timers compiled into the kernel, the driver will
use them to provide much better performance. Note that if you do not
have high-res timers enabled in the kernel and you don't have
interrupts enabled, the driver will run VERY slowly. Don't blame me,
-the KCS interface sucks.
+these interfaces suck.
+
+
+The SMBus Driver
+----------------
+
+The SMBus driver allows up to 4 SMBus devices to be configured in the
+system. By default, the driver will register any SMBus interfaces it finds
+in the I2C address range of 0x20 to 0x4f on any adapter. You can change this
+at module load time (for a module) with:
+
+ modprobe ipmi_smb.o
+ addr=