Intel(R) I/O Acceleration Technology Software Guide for Linux* 
=============================================================

March 27, 2006


Contents
========
- Overview
- Integration and Configuration
- Enabling and Disabling Intel I/OAT
- Intel I/OAT sysfs Interface
- Support
- License


Overview
========

This document contains instructions on how to integrate and configure 
the ioatdma engine for Linux.  For additional information on Intel(R) 
I/O Acceleration Technology (Intel(R) I/OAT), see the following web 
page: http://www.intel.com/technology/ioacceleration/index.htm. 

These instructions are intended for the following platform configuration:

- Mainboard chipset: Intel(R) 5000 Series Chipsets Integrated Device - 
  1A38

- Linux OS: the supported kernel version number is embedded in the patch 
  file name (e.g., cb-2.6.xx.diff, where "2.6.xx" is the supported kernel 
  version). 

- Drivers: 
  - e1000 LAN driver, version 7.0.xx
  - ioatdma driver (in this tarball)


Integration and Configuration
=============================

1) Start with an unaltered kernel source tree.  
   - Make sure it compiles and boots.  
   - Verify that lspci shows the Intel I/OAT compatible adapter.  
       (bus 0, device 8, unknown device 1a38).  
     If the Intel I/OAT capable adapter does not appear, make sure it is 
     enabled in the BIOS menu: 
     -> Device Manager -> Blackford Configuration -> Crystal Beach/DMA 
     Configuration

2) Extract all files from this ioatdma tarball to a new directory in the 
   kernel tree, named drivers/dma.  

3) Move drivers/dma/dmaengine.h to include/linux.  

4) Apply drivers/dma/cb-{kernel version}.diff using patch.  Example:
     patch -p1 < drivers/dma/cb-2.6.xx.diff

5) Verify that the kernel has CONFIG_PCI_MSI enabled.  

6) Enable the DMA Subsystem.  Do this from the menuconfig menu.  Select:
      Device Driver > DMA Engine Support
   In the DMA Engine screen, select/enable all of the following:
     - Support for DMA Engines
     - Network: TCP receive copy offload
     - Test DMA Client
     - Intel I/OAT DMA support

7) Compile the kernel and reboot.  If compiled as a module, the DMA 
   engine driver will be named ioatdma.ko.


Enabling and Disabling Intel I/OAT
==================================

The Intel I/OAT network accelerations are enabled by loading the Intel 
I/OAT DMA engine driver at runtime.  The driver module filename is 
ioatdma.ko.  

To enable Intel I/OAT, load the ioatdma driver module:

    modprobe ioatdma

Removing the ioatdma module once it has been loaded is not recommended.  
However, if the "Forced module unloading" option is enabled in the kernel, 
the module may be unloaded with:

    rmmod -f ioatdma

WARNING: This command above may hang the system.


Intel I/OAT sysfs Interface
===========================

When the Intel I/OAT driver is properly loaded, there will be directories 
created in sysfs, under /sys/class/dma, named dma0chanX, where X is 0-3.  

Channel Entries:

in_use
------
1 if the DMA channel is allocated to a client, such as the network stack.  

bytes_transferred
-----------------
The total number of bytes transferred by either the DMA engine or CPU 
copy.  

memcpy_count
------------
The total number of copy operations initiated.  



Support
=======

For general information, go to the Intel support website at:

    http://support.intel.com

If an issue is identified with the released source code on the supported
kernel with a supported adapter, email the specific information related 
to the issue to linux.nics@intel.com.  


License
=======

This software program is released under the terms of a license agreement 
between you ('Licensee') and Intel.  Do not use or load this software or 
any associated materials (collectively, the 'Software') until you have 
carefully read the full terms and conditions of the LICENSE located in 
this software package.  By loading or using the Software, you agree to 
the terms of this Agreement.  If you do not agree with the terms of this 
Agreement, do not install or use the Software.  

* Other names and brands may be claimed as the property of others.  