2004-05-28 00:23:00 +00:00
|
|
|
/*$FreeBSD$*/
|
|
|
|
FreeBSD Driver for Intel(R) PRO/10GbE Server Adapters
|
|
|
|
=====================================================
|
|
|
|
|
|
|
|
March 10, 2004
|
|
|
|
|
|
|
|
|
|
|
|
Contents
|
|
|
|
========
|
|
|
|
|
|
|
|
- Overview
|
|
|
|
- Supported Adapters
|
|
|
|
- Building and Installation
|
|
|
|
- Additional Configurations
|
|
|
|
|
|
|
|
|
|
|
|
Overview
|
|
|
|
========
|
|
|
|
|
|
|
|
This file describes the FreeBSD* driver, version 1.0.x, for the Intel(R)
|
|
|
|
PRO/10GbE Family of Adapters. This driver has been developed for use with
|
|
|
|
FreeBSD, version 4.8 and later.
|
|
|
|
|
|
|
|
For questions related to hardware requirements, refer to the documentation
|
|
|
|
supplied with your Intel PRO/10GbE adapter. All hardware requirements listed
|
|
|
|
apply to use with FreeBSD.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Supported Adapters
|
|
|
|
==================
|
|
|
|
|
|
|
|
The following Intel network adapters are compatible with the drivers in this
|
|
|
|
release:
|
|
|
|
|
|
|
|
Controller Adapter Name Physical Layer
|
|
|
|
---------- ------------ --------------
|
|
|
|
|
|
|
|
82597EX PRO/10GbE LR/SR Server Adapter 10G Base -LR and -SR
|
|
|
|
850 and 1310 nm optical fiber
|
|
|
|
|
|
|
|
|
|
|
|
Building and Installation
|
|
|
|
=========================
|
|
|
|
|
|
|
|
NOTE: You must have kernel sources installed in order to compile the driver
|
|
|
|
module.
|
|
|
|
|
|
|
|
In the instructions below, x.x.x is the driver version as indicated in
|
|
|
|
the name of the driver tar.
|
|
|
|
|
|
|
|
|
|
|
|
1. Move the base driver tar file to the directory of your choice. For
|
|
|
|
example, use /home/username/ixgb or /usr/local/src/ixgb.
|
|
|
|
|
|
|
|
2. Untar/unzip the archive:
|
|
|
|
tar xfz ixgb-x.x.x.tar.gz
|
|
|
|
|
|
|
|
3. To install man page:
|
|
|
|
cd ixgb-x.x.x
|
|
|
|
gzip -c ixgb.4 > /usr/share/man/man4/ixgb.4.gz
|
|
|
|
|
|
|
|
4. To load the driver onto a running system:
|
|
|
|
cd ixgb-x.x.x/src
|
|
|
|
make load
|
|
|
|
|
|
|
|
5. To assign an IP address to the interface, enter the following:
|
|
|
|
ifconfig ixgb<interface_num> <IP_address>
|
|
|
|
|
|
|
|
6. Verify that the interface works. Enter the following, where <IP_address>
|
|
|
|
is the IP address for another machine on the same subnet as the interface
|
|
|
|
that is being tested:
|
|
|
|
ping <IP_address>
|
|
|
|
|
|
|
|
7. If you want the driver to load automatically when the system is booted:
|
|
|
|
|
|
|
|
cd ixgb-x.x.x/src
|
|
|
|
make load
|
|
|
|
cp if_ixgb.ko /modules
|
|
|
|
|
|
|
|
Edit /boot/loader.conf, and add the following line:
|
|
|
|
if_ixgb_load="YES"
|
|
|
|
|
|
|
|
OR
|
|
|
|
|
|
|
|
compile the driver into the kernel (see item 7).
|
|
|
|
|
|
|
|
|
|
|
|
Edit /etc/rc.conf, and create the appropriate ifconfig_ixgb<interface_num>
|
|
|
|
entry:
|
|
|
|
|
|
|
|
ifconfig_ixgb<interface_num>="<ifconfig_settings>"
|
|
|
|
|
|
|
|
Example usage:
|
|
|
|
|
|
|
|
ifconfig_ixgb0="inet 192.168.10.1 netmask 255.255.255.0"
|
|
|
|
|
|
|
|
NOTE: For assistance, see the ifconfig man page.
|
|
|
|
|
|
|
|
8. If you want to compile the driver into the kernel, enter:
|
|
|
|
|
|
|
|
cd ixgb-x.x.x/src
|
|
|
|
|
|
|
|
mkdir /usr/src/sys/dev/ixgb
|
|
|
|
|
|
|
|
cp if_ixgb* /usr/src/sys/dev/ixgb
|
|
|
|
|
|
|
|
cp ixgb* /usr/src/sys/dev/ixgb
|
|
|
|
|
|
|
|
cp Makefile.kernel /usr/src/sys/modules/ixgb/Makefile
|
|
|
|
|
|
|
|
If you have an i386 platform, you will need to edit the files.i386 file.
|
|
|
|
This is usually in /usr/src/sys/conf/; actual locations wil vary depending
|
|
|
|
on platform. Add the following lines:
|
|
|
|
|
|
|
|
dev/ixgb/ixgb_hw.c optional ixgb
|
|
|
|
dev/ixgb/ixgb_ee.c optional ixgb
|
|
|
|
dev/ixgb/if_ixgb.c optional ixgb
|
|
|
|
|
|
|
|
|
|
|
|
Remove the following lines from the files.i386 file, if they exist:
|
|
|
|
|
|
|
|
/dev/ixgb/if_ixgb_fx_hw.c optional ixgb
|
|
|
|
/dev/ixgb/if_ixgb_phy.c optional ixgb
|
|
|
|
|
|
|
|
Edit the kernel configuration file (i.e., GENERIC or MYKERNEL) in
|
|
|
|
/usr/src/sys/i386/conf, and ensure the following line is present:
|
|
|
|
|
|
|
|
device ixgb
|
|
|
|
|
|
|
|
Compile and install the kernel. The system must be reboot for the kernel
|
|
|
|
updates to take affect. For additional information on compiling the kernel,
|
|
|
|
consult the FreeBSD operating system documentation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Additional Configurations
|
|
|
|
=========================
|
|
|
|
|
|
|
|
The driver supports Transmit/Receive Checksum Offload and Jumbo Frames on
|
|
|
|
all PRO/10GbE adapters.
|
|
|
|
|
|
|
|
Jumbo Frames
|
|
|
|
------------
|
|
|
|
To enable Jumbo Frames, use the ifconfig utility to increase the MTU
|
|
|
|
beyond 1500 bytes.
|
|
|
|
|
|
|
|
NOTES:
|
|
|
|
- Only enable Jumbo Frames if your network infrastructure supports
|
|
|
|
them.
|
|
|
|
|
|
|
|
- The Jumbo Frames setting on the switch must be set to at least
|
|
|
|
22 bytes larger than that of the adapter.
|
|
|
|
|
|
|
|
- There are known performance issues with this driver when running
|
|
|
|
UDP traffic with Jumbo Frames.
|
|
|
|
|
|
|
|
The Jumbo Frames MTU range for Intel Adapters is 1500 to 16114. The default
|
|
|
|
MTU range is 1500. To modify the setting, enter the following:
|
|
|
|
|
|
|
|
ifconfig ixgb<interface_num> <hostname or IP address> mtu 9000
|
|
|
|
|
|
|
|
To confirm an interface's MTU value, use the ifconfig command. To confirm
|
|
|
|
the MTU used between two specific devices, use:
|
|
|
|
|
|
|
|
route get <destination_IP_address>
|
|
|
|
|
|
|
|
VLANs
|
|
|
|
-----
|
|
|
|
To create a new VLAN pseudo-interface:
|
|
|
|
|
|
|
|
ifconfig <vlan_name> create
|
|
|
|
|
|
|
|
To associate the VLAN pseudo-interface with a physical interface and
|
|
|
|
assign a VLAN ID, IP address, and netmask:
|
|
|
|
|
|
|
|
ifconfig <vlan_name> <ip_address> netmask <subnet_mask> vlan
|
|
|
|
<vlan_id> vlandev <physical_interface>
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
ifconfig vlan10 10.0.0.1 netmask 255.255.255.0 vlan10 vlandev ixgb0
|
|
|
|
|
|
|
|
In this example, all packets will be marked on egress with 802.1Q VLAN
|
|
|
|
tags, specifying a VLAN ID of 10.
|
|
|
|
|
|
|
|
To remove a VLAN pseudo-interface:
|
|
|
|
|
|
|
|
ifconfig <vlan_name> destroy
|
|
|
|
|
|
|
|
Polling
|
|
|
|
-------
|
|
|
|
To enable polling in the driver, add the following options to the kernel
|
|
|
|
configuration, and then recompile the kernel:
|
|
|
|
|
|
|
|
options DEVICE_POLLING
|
|
|
|
options HZ=1000
|
|
|
|
|
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
2005-10-01 18:56:19 +00:00
|
|
|
At runtime, use the following command to turn on polling mode.
|
2004-05-28 00:23:00 +00:00
|
|
|
|
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
2005-10-01 18:56:19 +00:00
|
|
|
ifconfig ixgb0 polling
|
2004-05-28 00:23:00 +00:00
|
|
|
|
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
2005-10-01 18:56:19 +00:00
|
|
|
Similarly, turn off polling mode by removing IFCAP_POLLING flag from
|
|
|
|
interface:
|
2004-05-28 00:23:00 +00:00
|
|
|
|
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
2005-10-01 18:56:19 +00:00
|
|
|
ifconfig ixgb0 -polling
|
2004-05-28 00:23:00 +00:00
|
|
|
|
Big polling(4) cleanup.
o Axe poll in trap.
o Axe IFF_POLLING flag from if_flags.
o Rework revision 1.21 (Giant removal), in such a way that
poll_mtx is not dropped during call to polling handler.
This fixes problem with idle polling.
o Make registration and deregistration from polling in a
functional way, insted of next tick/interrupt.
o Obsolete kern.polling.enable. Polling is turned on/off
with ifconfig.
Detailed kern_poll.c changes:
- Remove polling handler flags, introduced in 1.21. The are not
needed now.
- Forget and do not check if_flags, if_capenable and if_drv_flags.
- Call all registered polling handlers unconditionally.
- Do not drop poll_mtx, when entering polling handlers.
- In ether_poll() NET_LOCK_GIANT prior to locking poll_mtx.
- In netisr_poll() axe the block, where polling code asks drivers
to unregister.
- In netisr_poll() and ether_poll() do polling always, if any
handlers are present.
- In ether_poll_[de]register() remove a lot of error hiding code. Assert
that arguments are correct, instead.
- In ether_poll_[de]register() use standard return values in case of
error or success.
- Introduce poll_switch() that is a sysctl handler for kern.polling.enable.
poll_switch() goes through interface list and enabled/disables polling.
A message that kern.polling.enable is deprecated is printed.
Detailed driver changes:
- On attach driver announces IFCAP_POLLING in if_capabilities, but
not in if_capenable.
- On detach driver calls ether_poll_deregister() if polling is enabled.
- In polling handler driver obtains its lock and checks IFF_DRV_RUNNING
flag. If there is no, then unlocks and returns.
- In ioctl handler driver checks for IFCAP_POLLING flag requested to
be set or cleared. Driver first calls ether_poll_[de]register(), then
obtains driver lock and [dis/en]ables interrupts.
- In interrupt handler driver checks IFCAP_POLLING flag in if_capenable.
If present, then returns.This is important to protect from spurious
interrupts.
Reviewed by: ru, sam, jhb
2005-10-01 18:56:19 +00:00
|
|
|
The driver has to be built into the kernel for DEVICE POLLING to be
|
|
|
|
enabled in the driver.
|
2004-05-28 00:23:00 +00:00
|
|
|
|
|
|
|
Support
|
|
|
|
=======
|
|
|
|
|
|
|
|
For general information and support, 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 freebsdnic@mailbox.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.
|
|
|
|
|
|
|
|
|