(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 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
'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***
