(C)Copyright 1999-2004 Marvell(R).
All rights reserved
===========================================================================

sk98lin.txt created 13-Feb-2004

Readme File for sk98lin v6.23
Marvell Yukon/SysKonnect SK-98xx Gigabit Ethernet Adapter family driver for LINUX

This file contains
 1  Overview
 2  Required Files
 3  Installation
    3.1  Driver Installation
    3.2  Inclusion of adapter at system start
 4  Driver Parameters
    4.1  Per-Port Parameters
    4.2  Adapter Parameters
 5  Large Frame Support
 6  VLAN and Link Aggregation Support (IEEE 802.1, 802.1q, 802.3ad)
 7  Troubleshooting

===========================================================================


1  Overview
===========

The sk98lin driver supports the Marvell Yukon and SysKonnect 
SK-98xx/SK-95xx compliant Gigabit Ethernet Adapter on Linux. It has 
been tested with Linux on Intel/x86 machines.
***


2  Required Files
=================

The linux kernel source.
No additional files required.
***


3  Installation
===============

It is recommended to download the latest version of the driver from the 
SysKonnect web site www.syskonnect.com. If you have downloaded the latest
driver, the Linux kernel has to be patched before the driver can be 
installed. For details on how to patch a Linux kernel, refer to the 
patch.txt file.

3.1  Driver Installation
------------------------

The following steps describe the actions that are required to install
the driver and to start it manually. These steps should be carried
out for the initial driver setup. Once confirmed to be ok, they can
be included in the system start.

NOTE 1: To perform the following tasks you need 'root' access.

NOTE 2: In case of problems, please read the section "Troubleshooting" 
        below.

The driver can either be integrated into the kernel or it can be compiled 
as a module. Select the appropriate option during the kernel 
configuration.

Compile/use the driver as a module
----------------------------------
To compile the driver, go to the directory /usr/src/linux and
execute the command "make menuconfig" or "make xconfig" and proceed as 
follows:

To integrate the driver permanently into the kernel, proceed as follows:

1. Select the menu "Network device support" and then "Ethernet(1000Mbit)"
2. Mark "Marvell Yukon Chipset / SysKonnect SK-98xx family support" 
   with (*) 
3. Build a new kernel when the configuration of the above options is 
   finished.
4. Install the new kernel.
5. Reboot your system.

To use the driver as a module, proceed as follows:

1. Enable 'loadable module support' in the kernel.
2. For automatic driver start, enable the 'Kernel module loader'.
3. Select the menu "Network device support" and then "Ethernet(1000Mbit)"
4. Mark "Marvell Yukon Chipset / SysKonnect SK-98xx family support" 
   with (M)
5. Execute the command "make modules".
6. Execute the command "make modules_install".
   The appropriate modules will be installed.
7. Reboot your system.


Load the module manually
------------------------
To load the module manually, proceed as follows:

1. Enter "modprobe sk98lin".
2. If a Marvell Yukon or SysKonnect SK-98xx adapter is installed in 
   your computer and you have a /proc file system, execute the command:
   "ls /proc/net/sk98lin/" 
   This should produce an output containing a line with the following 
   format:
   eth0   eth1  ...
   which indicates that your adapter has been found and initialized.
   
   NOTE 1: If you have more than one Marvell Yukon or SysKonnect SK-98xx 
           adapter installed, the adapters will be listed as 'eth0', 
                   'eth1', 'eth2', etc.
                   For each adapter, repeat steps 3 and 4 below.

   NOTE 2: If you have other Ethernet adapters installed, your Marvell
           Yukon or SysKonnect SK-98xx adapter will be mapped to the 
                   next available number, e.g. 'eth1'. The mapping is executed 
                   automatically.
           The module installation message (displayed either in a system
           log file or on the console) prints a line for each adapter 
           found containing the corresponding 'ethX'.

3. Select an IP address and assign it to the respective adapter by 
   entering:
   ifconfig eth0 <ip-address>
   With this command, the adapter is connected to the Ethernet. 
   
   SK-98xx Gigabit Ethernet Server Adapters: The yellow LED on the adapter 
   is now active, the link status LED of the primary port is active and 
   the link status LED of the secondary port (on dual port adapters) is 
   blinking (if the ports are connected to a switch or hub).
   SK-98xx V2.0 Gigabit Ethernet Adapters: The link status LED is active.
   In addition, you will receive a status message on the console stating
   "ethX: network connection up using port Y" and showing the selected 
   connection parameters (x stands for the ethernet device number 
   (0,1,2, etc), y stands for the port name (A or B)).

   NOTE: If you are in doubt about IP addresses, ask your network
         administrator for assistance.
  
4. Your adapter should now be fully operational.
   Use 'ping <otherstation>' to verify the connection to other computers 
   on your network.
5. To check the adapter configuration view /proc/net/sk98lin/[devicename].
   For example by executing:    
   "cat /proc/net/sk98lin/eth0" 

Unload the module
-----------------
To stop and unload the driver modules, proceed as follows:

1. Execute the command "ifconfig eth0 down".
2. Execute the command "rmmod sk98lin".

3.2  Inclusion of adapter at system start
-----------------------------------------

Since a large number of different Linux distributions are 
available, we are unable to describe a general installation procedure
for the driver module.
Because the driver is now integrated in the kernel, installation should
be easy, using the standard mechanism of your distribution.
Refer to the distribution's manual for installation of ethernet adapters.

***

4  Driver Parameters
====================

Parameters can be set at the command line after the module has been 
loaded with the command 'modprobe'.
In some distributions, the configuration tools are able to pass parameters
to the driver module.

If you use the kernel module loader, you can set driver parameters
in the file /etc/modprobe.conf (or /etc/modules.conf in 2.4 or earlier).
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 paramaters of modprobe below.
2. To activate the new parameters, either reboot your computer
   or 
   unload and reload the driver.
   The syntax of the driver parameters is:

        modprobe sk98lin parameter=value1[,value2[,value3...]]

   where value1 refers to the first adapter, value2 to the second etc.

NOTE: All parameters are case sensitive. Write them exactly as shown 
      below.

Example:
Suppose you have two adapters. You want to set auto-negotiation
on the first adapter to ON and on the second adapter to OFF.
You also want to set DuplexCapabilities on the first adapter
to FULL, and on the second adapter to HALF.
Then, you must enter:

        modprobe sk98lin AutoNeg_A=On,Off DupCap_A=Full,Half

NOTE: The number of adapters that can be configured this way is
      limited in the driver (file skge.c, constant SK_MAX_CARD_PARAM).
      The current limit is 16. If you happen to install
      more adapters, adjust this and recompile.


4.1  Per-Port Parameters
------------------------

These settings are available for each port on the adapter.
In the following description, '?' stands for the port for
which you set the parameter (A or B).

Speed
-----
Parameter:    Speed_?
Values:       10, 100, 1000, Auto
Default:      Auto

This parameter is used to set the speed capabilities. It is only valid 
for the SK-98xx V2.0 copper adapters.
Usually, the speed is negotiated between the two ports during link 
establishment. If this fails, a port can be forced to a specific setting
with this parameter.

Auto-Negotiation
----------------
Parameter:    AutoNeg_?
Values:       On, Off, Sense
Default:      On
  
The "Sense"-mode automatically detects whether the link partner supports
auto-negotiation or not.

Duplex Capabilities
-------------------
Parameter:    DupCap_?
Values:       Half, Full, Both
Default:      Both

This parameters is only relevant if auto-negotiation for this port is 
not set to "Sense". If auto-negotiation is set to "On", all three values
are possible. If it is set to "Off", only "Full" and "Half" are allowed.
This parameter is useful if your link partner does not support all
possible combinations.

Flow Control
------------
Parameter:    FlowCtrl_?
Values:       Sym, SymOrRem, LocSend, None
Default:      SymOrRem

This parameter can be used to set the flow control capabilities the 
port reports during auto-negotiation. It can be set for each port 
individually.
Possible modes:
   -- Sym      = Symmetric: both link partners are allowed to send 
                  PAUSE frames
   -- SymOrRem = SymmetricOrRemote: both or only remote partner 
                  are allowed to send PAUSE frames
   -- LocSend  = LocalSend: only local link partner is allowed 
                  to send PAUSE frames
   -- None     = no link partner is allowed to send PAUSE frames
  
NOTE: This parameter is ignored if auto-negotiation is set to "Off".

Role in Master-Slave-Negotiation (1000Base-T only)
--------------------------------------------------
Parameter:    Role_?
Values:       Auto, Master, Slave
Default:      Auto

This parameter is only valid for the SK-9821 and SK-9822 adapters.
For two 1000Base-T ports to communicate, one must take the role of the
master (providing timing information), while the other must be the 
slave. Usually, this is negotiated between the two ports during link 
establishment. If this fails, a port can be forced to a specific setting
with this parameter.


4.2  Adapter Parameters
-----------------------

Connection Type (SK-98xx V2.0 copper adapters only)
---------------
Parameter:    ConType
Values:       Auto, 100FD, 100HD, 10FD, 10HD
Default:      Auto

The parameter 'ConType' is a combination of all five per-port parameters
within one single parameter. This simplifies the configuration of both ports
of an adapter card! The different values of this variable reflect the most 
meaningful combinations of port parameters.

The following table shows the values of 'ConType' and the corresponding
combinations of the per-port parameters:

    ConType   |  DupCap   AutoNeg   FlowCtrl   Role             Speed
    ----------+------------------------------------------------------
    Auto      |  Both     On        SymOrRem   Auto             Auto
    100FD     |  Full     Off       None       Auto (ignored)   100
    100HD     |  Half     Off       None       Auto (ignored)   100
    10FD      |  Full     Off       None       Auto (ignored)   10
    10HD      |  Half     Off       None       Auto (ignored)   10

Stating any other port parameter together with this 'ConType' variable
will result in a merged configuration of those settings. This due to 
the fact, that the per-port parameters (e.g. Speed_? ) have a higher
priority than the combined variable 'ConType'.

NOTE: This parameter is always used on both ports of the adapter card.

Interrupt Moderation
--------------------
Parameter:    Moderation
Values:       None, Static, Dynamic
Default:      None

Interrupt moderation is employed to limit the maximum 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
'IntsPerSec' parameter, which is explained later below.

Possible modes:

   -- None - No interrupt moderation is applied on the adapter card. 
      Therefore, each transmit or receive interrupt is served immediately
      as soon as it appears on the interrupt line of the adapter card.

   -- Static - Interrupt moderation is applied on the adapter card. 
      All transmit and receive interrupts are queued until a complete
      moderation interval ends. If such a moderation interval ends, all
      queued interrupts are processed in one big bunch without any delay.
      The term 'static' reflects the fact, that interrupt moderation is
      always enabled, regardless how much network load is currently 
      passing via a particular interface. In addition, the duration of
      the moderation interval has a fixed length that never changes while
      the driver is operational.

   -- Dynamic - Interrupt moderation might be applied on the adapter card,
      depending on the load of the system. If the driver detects that the
      system load is too high, the driver tries to shield the system against 
      too much network load by enabling interrupt moderation. If - at a later
      time - the CPU utilizaton decreases again (or if the network load is 
      negligible) the interrupt moderation will automatically be disabled.

Interrupt moderation should be used when the driver has to handle one or more
interfaces with a high network load, which - as a consequence - leads also to a
high CPU utilization. When moderation is applied in such high network load 
situations, CPU load might be reduced by 20-30%.

NOTE: The drawback of using interrupt moderation is an increase of the round-
trip-time (RTT), due to the queueing and serving of interrupts at dedicated
moderation times.

Interrupts per second
---------------------
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 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' 
parameter value of 2000 will lead to an interrupt moderation interval of
500 microseconds. 

NOTE: The duration of the moderation interval is to be chosen with care.
At first glance, selecting a very long duration (e.g. only 100 interrupts per 
second) seems to be meaningful, but the increase of packet-processing delay 
is tremendous. On the other hand, selecting a very short moderation time might
compensate the use of any moderation being applied.


Preferred Port
--------------
Parameter:    PrefPort
Values:       A, B
Default:      A

This is used to force the preferred port to A or B (on dual-port network 
adapters). The preferred port is the one that is used if both are detected
as fully functional.

RLMT Mode (Redundant Link Management Technology)
------------------------------------------------
Parameter:    RlmtMode
Values:       CheckLinkState,CheckLocalPort, CheckSeg, DualNet
Default:      CheckLinkState

RLMT monitors the status of the port. If the link of the active port 
fails, RLMT switches immediately to the standby link. The virtual link is 
maintained as long as at least one 'physical' link is up. 

Possible modes:

   -- CheckLinkState - Check link state only: RLMT uses the link state
      reported by the adapter hardware for each individual port to 
      determine whether a port can be used for all network traffic or 
      not.

   -- CheckLocalPort - In this mode, RLMT monitors the network path 
      between the two ports of an adapter by regularly exchanging packets
      between them. This mode requires a network configuration in which 
      the two ports are able to "see" each other (i.e. there must not be 
      any router between the ports).

   -- CheckSeg - Check local port and segmentation: This mode supports the
      same functions as the CheckLocalPort mode and additionally checks 
      network segmentation between the ports. Therefore, this mode is only
      to be used if Gigabit Ethernet switches are installed on the network
      that have been configured to use the Spanning Tree protocol. 

   -- DualNet - In this mode, ports A and B are used as separate devices. 
      If you have a dual port adapter, port A will be configured as eth0 
      and port B as eth1. Both ports can be used independently with 
      distinct IP addresses. The preferred port setting is not used. 
      RLMT is turned off.
   
NOTE: RLMT modes CLP and CLPSS are designed to operate in configurations 
      where a network path between the ports on one adapter exists. 
      Moreover, they are not designed to work where adapters are connected
      back-to-back.
***


5  Large Frame Support
======================

The driver supports large frames (also called jumbo frames). Using large 
frames can result in an improved throughput if transferring large amounts 
of data.
To enable large frames, set the MTU (maximum transfer unit) of the 
interface to the desired value (up to 9000), execute the following 
command:
      ifconfig eth0 mtu 9000
This will only work if you have two adapters connected back-to-back
or if you use a switch that supports large frames. When using a switch, 
it should be configured to allow large frames and auto-negotiation should  
be set to OFF. The setting must be configured on all adapters that can be 
reached by the large frames. If one adapter is not set to receive large 
frames, it will simply drop them.

You can switch back to the standard ethernet frame size by executing the 
following command:
      ifconfig eth0 mtu 1500

To permanently configure this setting, add a script with the 'ifconfig' 
line to the system startup sequence (named something like "S99sk98lin" 
in /etc/rc.d/rc2.d).
***


6  VLAN and Link Aggregation Support (IEEE 802.1, 802.1q, 802.3ad)
==================================================================

The Marvell Yukon/SysKonnect Linux drivers are able to support VLAN and 
Link Aggregation according to IEEE standards 802.1, 802.1q, and 802.3ad. 
These features are only available after installation of open source 
modules available on the Internet:
For VLAN go to: http://www.candelatech.com/~greear/vlan.html
For Link Aggregation go to: http://www.st.rim.or.jp/~yumo

NOTE: SysKonnect GmbH does not offer any support for these open source 
      modules and does not take the responsibility for any kind of 
      failures or problems arising in connection with these modules.

NOTE: Configuring Link Aggregation on a SysKonnect dual link adapter may 
      cause problems when unloading the driver.


7  Troubleshooting
==================

If any problems occur during the installation process, check the 
following list:


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 
          been found by the system and should be operational.
          If this entry does not exist or if the file '/proc/pci' is not 
          found, there may be a hardware problem or the PCI support may 
          not be enabled in your kernel.
          The adapter can be checked using the diagnostics program which 
          is available on the SysKonnect web site:
          www.syskonnect.com
          
          Some COMPAQ machines have problems dealing with PCI under Linux.
          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' 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'.


Problem:  Upon use of the command 'ping <address>' the message
          "ping: sendto: Network is unreachable" is displayed.
Reason:   Your route is not set correctly.
Solution: If you are using RedHat, you probably forgot to set up the 
          route in the 'network configuration'.
          Check the existing routes with the 'route' command and check 
          if an entry for 'eth0' exists, and if so, if it is set correctly.


Problem:  The driver can be started, the adapter is connected to the 
          network, but you cannot receive or transmit any packets; 
          e.g. 'ping' does not work.
Reason:   There is an incorrect route in your routing table.
Solution: Check the routing table with the command 'route' and read the 
          manual help pages dealing with routes (enter 'man route').

NOTE: Although the 2.2.x kernel versions generate the routing entry 
      automatically, problems of this kind may occur here as well. We've 
      come across a situation in which the driver started correctly at 
      system start, but after the driver has been removed and reloaded,
      the route of the adapter's network pointed to the 'dummy0'device 
      and had to be corrected manually.


Problem:  Your computer should act as a router between multiple 
          IP subnetworks (using multiple adapters), but computers in 
          other subnetworks cannot be reached.
Reason:   Either the router's kernel is not configured for IP forwarding 
          or the routing table and gateway configuration of at least one 
          computer is not working.

Problem:  Upon driver start, the following error message is displayed:
          "eth0: -- ERROR --
          Class: internal Software error
          Nr:    0xcc
          Msg:   SkGeInitPort() cannot init running ports"
Reason:   You are using a driver compiled for single processor machines 
          on a multiprocessor machine with SMP (Symmetric MultiProcessor) 
          kernel.
Solution: Configure your kernel appropriately and recompile the kernel or
          the modules.



If your problem is not listed here, please contact SysKonnect's technical
support for help (linux@syskonnect.de).
When contacting our technical support, please ensure that the following 
information is available:
- System Manufacturer and HW Informations (CPU, Memory... )
- PCI-Boards in your system
- Distribution
- Kernel version
- Driver version
***



***End of Readme File***
