DM9000 Network driver
=====================

Copyright 2008 Simtec Electronics,
	  Ben Dooks <ben@simtec.co.uk> <ben-linux@fluff.org>


Introduction
------------

This file describes how to use the DM9000 platform-device based network driver
that is contained in the files drivers/net/dm9000.c and drivers/net/dm9000.h.

The driver supports three DM9000 variants, the DM9000E which is the first chip
supported as well as the newer DM9000A and DM9000B devices. It is currently
maintained and tested by Ben Dooks, who should be CC: to any patches for this
driver.


Defining the platform device
----------------------------

The minimum set of resources attached to the platform device are as follows:

    1) The physical address of the address register
    2) The physical address of the data register
    3) The IRQ line the device's interrupt pin is connected to.

These resources should be specified in that order, as the ordering of the
two address regions is important (the driver expects these to be address
and then data).

An example from arch/arm/mach-s3c2410/mach-bast.c is:

static struct resource bast_dm9k_resource[] = {
	[0] = {
		.start = S3C2410_CS5 + BAST_PA_DM9000,
		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 3,
		.flags = IORESOURCE_MEM,
	},
	[1] = {
		.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
		.end   = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
		.flags = IORESOURCE_MEM,
	},
	[2] = {
		.start = IRQ_DM9000,
		.end   = IRQ_DM9000,
		.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
	}
};

static struct platform_device bast_device_dm9k = {
	.name		= "dm9000",
	.id		= 0,
	.num_resources	= ARRAY_SIZE(bast_dm9k_resource),
	.resource	= bast_dm9k_resource,
};

Note the setting of the IRQ trigger flag in bast_dm9k_resource[2].flags,
as this will generate a warning if it is not present. The trigger from
the flags field will be passed to request_irq() when registering the IRQ
handler to ensure that the IRQ is setup correctly.

This shows a typical platform device, without the optional configuration
platform data supplied. The next example uses the same resources, but adds
the optional platform data to pass extra configuration data:

static struct dm9000_plat_data bast_dm9k_platdata = {
	.flags		= DM9000_PLATF_16BITONLY,
};

static struct platform_device bast_device_dm9k = {
	.name		= "dm9000",
	.id		= 0,
	.num_resources	= ARRAY_SIZE(bast_dm9k_resource),
	.resource	= bast_dm9k_resource,
	.dev		= {
		.platform_data = &bast_dm9k_platdata,
	}
};

The platform data is defined in include/linux/dm9000.h and described below.


Platform data
-------------

Extra platform data for the DM9000 can describe the IO bus width to the
device, whether or not an external PHY is attached to the device and
the availability of an external configuration EEPROM.

The flags for the platform data .flags field are as follows:

DM9000_PLATF_8BITONLY

	The IO should be done with 8bit operations.

DM9000_PLATF_16BITONLY

	The IO should be done with 16bit operations.

DM9000_PLATF_32BITONLY

	The IO should be done with 32bit operations.

DM9000_PLATF_EXT_PHY

	The chip is connected to an external PHY.

DM9000_PLATF_NO_EEPROM

	This can be used to signify that the board does not have an
	EEPROM, or that the EEPROM should be hidden from the user.

DM9000_PLATF_SIMPLE_PHY

	Switch to using the simpler PHY polling method which does not
	try and read the MII PHY state regularly. This is only available
	when using the internal PHY. See the section on link state polling
	for more information.

	The config symbol DM9000_FORCE_SIMPLE_PHY_POLL, Kconfig entry
	"Force simple NSR based PHY polling" allows this flag to be
	forced on at build time.


PHY Link state polling
----------------------

The driver keeps track of the link state and informs the network core
about link (carrier) availability. This is managed by several methods
depending on the version of the chip and on which PHY is being used.

For the internal PHY, the original (and currently default) method is
to read the MII state, either when the status changes if we have the
necessary interrupt support in the chip or every two seconds via a
periodic timer.

To reduce the overhead for the internal PHY, there is now the option
of using the DM9000_FORCE_SIMPLE_PHY_POLL config, or DM9000_PLATF_SIMPLE_PHY
platform data option to read the summary information without the
expensive MII accesses. This method is faster, but does not print
as much information.

When using an external PHY, the driver currently has to poll the MII
link status as there is no method for getting an interrupt on link change.


DM9000A / DM9000B
-----------------

These chips are functionally similar to the DM9000E and are supported easily
by the same driver. The features are:

   1) Interrupt on internal PHY state change. This means that the periodic
      polling of the PHY status may be disabled on these devices when using
      the internal PHY.

   2) TCP/UDP checksum offloading, which the driver does not currently support.


ethtool
-------

The driver supports the ethtool interface for access to the driver
state information, the PHY state and the EEPROM.
