smsc9118_xscale_v1.25r5-SRC-118-LINUX-XSCALE
所属分类:驱动编程
开发工具:C/C++
文件大小:156KB
下载次数:31
上传日期:2007-08-07 22:26:44
上 传 者:
snoopy-thf
说明: 基于pxa270的linux下smsc9118的网卡驱动源码,支持10/100M的AutoMdix功能,经测试性能稳定
(PXA270-based smsc9118 of the network card under linux driver source code, support 10/100M the AutoMdix function, have been tested stable performance)
文件列表:
smsc9118 (0, 2006-05-02)
smsc9118\bin (0, 2006-05-02)
smsc9118\bin\cmd9118 (44177, 2006-03-23)
smsc9118\bin\smsc9118.o (51424, 2006-03-23)
smsc9118\bin\smsc9118d.o (87420, 2006-03-23)
smsc9118\cmd9118.c (61921, 2005-12-06)
smsc9118\COPYING (18332, 2005-01-03)
smsc9118\ioctl_118.h (5067, 2006-03-23)
smsc9118\lint.h (13391, 2005-12-06)
smsc9118\Makefile (770, 2006-03-22)
smsc9118\smsc9118.c (172303, 2006-03-23)
smsc9118\testing.txt (312, 2005-12-01)
smsc9118\xscale_linux_2.4.c (21718, 2006-03-23)
smsc9118\xscale_release_note.txt (1477, 2005-12-06)
/***************************************************************************
*
* Copyright (c) 2004-2005, SMSC
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
***************************************************************************
* File: Readme.txt
*/
This is the users/programmers guide for the LAN9118 Linux Driver
The following sections can be found below
* Revision History
* Files
* Features
* Driver Parameters
* Rx Performance Tuning
* Tested Platforms
* Rx Code Path
* Tx Code Path
* Platform Interface Descriptions
#######################################################
############### REVISION HISTORY ######################
#######################################################
06/04/2004 Bryan Whitehead. Version 0.50:
This is the first beta version
06/21/2004 Bryan Whitehead, Version 0.51:
added multicast
added private ioctls to set mac address and write eeprom (not tested)
removed timeout function, which served no purpose anyway.
07/09/2004 Bryan Whitehead, Version 0.52
Improved Flow Control
More Control on Link Management
the driver parameter link_mode is now a bit wise field that
specifies any combination of 4 or fewer link speeds
1=10HD,2=10FD,4=100HD,8=100FD
Still Autonegotiation is always used.
07/13/2004 Bryan Whitehead, Version 0.53
EEPROM has been fixed and tested.
If there is an EEPROM connected and loaded correctly, its
mac address will be loaded into the 118
Improved Flow Control again. Measured >10X improvement
in UDP_STREAM test with small packets.
07/30/2004 Bryan Whitehead, Version 0.54
Added many IOCTL codes for use with the command app, cmd9118.
Added functions to the Platform interface
Platform_RequestDmaChannel
Platform_ReleaseDmaChannel
Added Macros to Platform interface
PLATFORM_DEFAULT_RX_DMA
PLATFORM_DEFAULT_TX_DMA
08/12/2004 Bryan Whitehead, Version 0.55
Updated driver documentation
Consolidated most driver source files into smsc9118.c
Minor changes to the platform interface
08/13/2004 Bryan Whitehead, Version 0.56
Added Ioctl COMMAND_GET_CONFIGURATION
this command used with "cmd9118 -cGET_CONFIG"
will display driver information, which is especially
useful if trace points have been disabled.
08/24/2004 Bryan Whitehead, Version 0.57
Implemented software patch to resynchronize Rx fifos after an
overrun is detected.
08/24/2004 Bryan Whitehead, Version 0.58
Turned on LEDs which were accidentally turned off in version 0.57
08/25/2004 Bryan Whitehead, Version 0.59
Added extra driver context variables useful for debugging
They can be accessed with the following command
# cmd9118 -cGET_CONFIG
08/30/2004 Bryan Whitehead, Version 0.60
Fixed bug in software patch (0.57) that caused the receiver to be turned
off and not turned back on.
Added symple packet filter to detect bad packets. If a bad packet
is detected the driver will handle it like an overrun. That is, turn off
receiver, empty fifos, clear fifo pointers(RX_DUMP), and turn on receiver.
This method allows the driver to recover after a fifo synchronization fault.
09/01/2004 Bryan Whitehead, Version 0.61
This version was used for testing the patch. It was for internal purposes only
09/03/2004 Bryan Whitehead, Version 0.62
This version fixes some bugs in 0.60 and includes extra work around code
to improve patch reliability.
09/07/2004 Bryan Whitehead, Version 0.63
Added IOCTLs for reading and writing to general memory
09/13/2004 Bryan Whitehead, Version 0.***
As the hardware issue is now fully understood, this patch includes
a few changes to make the work around reliable in all situations.
This version also has a the beginnings of new flow control feature,
however this feature is disable for this version because it is
still in progress.
The build process has also changed. Now instead of building one
debug driver, you can build a release and debug driver by choosing
to include or not include the define USE_DEBUG. The release version
enables activity LEDs, and removes all trace, warning, and assertion
messages. The debug version enables GPIO signals, and enables trace,
warning, and assertion messages.
09/15/2004 Bryan Whitehead, Version 0.65
Removed packet filter from 0.***
Added non-Auto-Negotiate link modes. See description of the
link_mode driver parameter below
09/28/2004 Bryan Whitehead, Version 0.66/0.67
Added Rx flow control which is only turned on when the driver
detects a lack of flow control in the higher layers.
10/07/2004 Bryan Whitehead, Version 0.68
Added support for Peakslite, and Polaris.
Implemented support for Phy management tools
such as mii-diag and mii-tool.
10/13/2004 Bryan Whitehead, Version 0.69
Fixed some issues with Linux 2.6.
10/18/2004 Bryan Whitehead, Version 0.70
Added support for new chips 115, 116, 117.
NOTE: 115, and 116 may still require bus timing
adjustment.
Disabled workaround when rev b is detected.
10/20/2004 Bryan Whitehead, Version 0.71/0.72
Added support for tasklets, which allow the bulk of the
Rx processing to be done with out blocking interrupts for
the rest of the system.
10/27/2004 Bryan Whitehead, Version 1.00
Tuned the PLATFORM_INT_DEAS for sh3 platforms to get better
TCP performance. Bumped up version number to 1.00 because this
will be the first official release.
10/27/2004 Bryan Whitehead, Version 1.01
Changed sh3 POLARIS platform to use cycle steal DMA
11/11/2004 Bryan Whitehead, Version 1.02/1.03
Changed tasklets to default to off, (tasklets=0)
Testing has shown that tasklets are not stable yet. So changing the
default allows us to release this version. The user may still turn
tasklets on but does so at there own risk.
11/11/2004 Bryan Whitehead, Version 1.04
Fixed Tasklet Issue.
Changed tasklets to be ON by default, (tasklets=1)
11/18/2004 Bryan Whitehead, Version 1.05
Improved software flow control.
Updated platform code to handle all chips 118/117/116/115
11/19/2004 Bryan Whitehead, Version 1.06
Added support to provide separate flow control parameters
for 118/117 and 116/115. And the driver will use which
ever is appropriate.
11/23/2004 Bryan Whitehead, Version 1.07
Changed the driver so that PAUSE frames will be enable or disabled
based on state of the local and remote pause bits, as specified in
IEEE Standard 802.3, 2000 Edition, page 1360, Table 28B-3-Pause Resolution
12/01/2004 Bryan Whitehead, Version 1.08
Added support for external phy.
To enable use of external phy use the follow driver parameter setting
ext_phy=1
other wise the driver will use the internal phy as it always has before.
12/01/2004 Bryan Whitehead, Version 1.09
replace the ext_phy parameter with phy_addr which works as follows
if(phy_addr==0xFFFFFFFF) {
//use internal phy
} else if (phy_addr<32) {
//use external phy at address specified by phy_addr
// if external phy can not be found use internal phy
} else {
//attempt to auto detect external phy
// if external phy can not be found use internal phy
}
02/14/2005 Bryan Whitehead, Version 1.11
Automated the tuning procedure. See RX PERFORMANCE TUNING.
Changed all register access to use a Macro instead of
a memory mapped structure. This should simplify porting,
if register access is ever done through IO space.
Tuned all current platforms.
Increased time out of Rx_FastForward to 500.
Fixed faulty define TX_CMD_A_BUF_SIZE_
Fixed faulty define TX_CMD_B_PKT_BYTE_LENGTH_
Changed Phy reset to use PHY_BCR_RESET
Cleaned driver with Lint tool
Updated Rx_CountErrors
Only count length error if length/type field is set
If there is a CRC error don't count length error or
multicast
Changed access to Mac and Phy registers. Now requires only
one lock, MacPhyLock. This replaces the MacAccessLock,
PhyAccessLock, and RxSwitchLock.
02/28/2005 Bryan Whitehead, Version 1.12
Added date_code static constant
02/28/2005 Bryan Whitehead, Version 1.13
Added support for LAN9112
03/21/2005 Bryan Whitehead, Version 1.13
Updated Platforms ".h" file to include a version number in
the PLATFORM_NAME macro. This version number is platform
specific and independent of the common code version
number.
Merged in STMICRO platform code to release tree
03/22/2005 Bryan Whitehead, Version 1.13
Updated platform code see st40.c for changes
03/23/2005 Bryan Whitehead, Version 1.13
Changed the format of the platform version to rN,
where N is the number of the platform revision.
This is visible in the PLATFORM_NAME macro.
04/11/2005 Bryan Whitehead, Version 1.14
Added Platform_CleanUp function, to be used in the event
that a particular platform should release resources
when the driver is unloaded from memory
Moved register access and data port access from common
code to platform code. This is to support the
possibility that a big endian system may need to do
byte swapping.
Changed Lan_SetRegDW to use Platform_SetRegDW
Changed Lan_GetRegDW to use Platform_GetRegDW
Changed Lan_ClrBitsDW to use Platform_S/GetRegDW
Changed Lan_SetBitsDW to use Platform_S/GetRegDW
Changed Tx_WriteFifo to Platform_WriteFifo
Changed Rx_ReadFifo to Platform_ReadFifo
Changed the way platform files are included.
Now the Macros PLATFORM_HEADER and PLATFORM_SOURCE
will define a string that is the path to those
header and source files.
04/15/2005 Bryan Whitehead, Version 1.15
Migrated source control to perforce.
Merged platform ".h" and ".c" file to a single
platform ".c" file
05/26/2005 M David Gelbman, Version 1.16
Integrated Beacon PHY work-around into both Concord and
Beacon versions.
LED1 - 10/100 LED activity corrected to go OFF when link
state goes DOWN.
07/12/2005 Bryan Whitehead, Version 1.17
Fixed issue where driver parameter phy_addr was not used.
07/20/2005 Bryan Whitehead, Version 1.18
Preserve Platform Data from close to reopen.
07/26/2005 Phong Le
Version 1.19 Make delay time for EEPROM longer.
Fix bugs
Bug#1 external/internal problem. These are bugs introduced
when making LED work around and PHY work around.
Bug#2 Fix bug when bring down a driver, then bring up, driver crashed.
08/29/2005 - Phong Le
Version 1.20 Integrate fixes for false statistic error count report.
10/31/2005 - Phong Le
Version 1.21 Integrate fixes for Rx Multicast work around.
11/02/2005 - Phong Le
Still version 1.21 Fix bugs for version 1.21.
11/07/2005 - Phong Le
Still version 1.21 Fix bugs for version 1.21.
12/06/2005 Bryan Whitehead, Version 1.22
Added support for LAN9218, LAN9217, LAN9216, LAN9215
03/03/2006 Bryan Whitehead, Version 1.23
Fixed External Phy Support for LAN9217, LAN9215 (Bug 102)
Fixed Interrupt handler to only process enabled interrupts (Bug 96)
Fixed Multicast workaround to not rely on link status
which may have been out dated (Bug 95)
03/22/2006 Bryan Whitehead, Version 1.24
Made driver future proof. Such that if the revision of a
chip increases it should still work.
03/23/2006 Bryan Whitehead, Version 1.25
Added print message to display date code on start up
Updated chip names to LAN9218, LAN9217, LAN9216, LAN9215
#######################################################
#################### FILES ############################
#######################################################
readme.txt: this file
smsc9118.c: Main driver source code file.
This file contains all platform independent code
It also includes platform dependent code based
on the following defines
USE_SH3
USE_PEAKS
USE_XSCALE
One of these should be defined in the build batch file
or makefile
peaks.h
xscale.h
sh3.h
These files are platform dependent files. They define
the platform dependent structure, PLATFORM_DATA.
They also define some platform dependent constants for
use by smsc9118.c. see PLATFORM INTERFACE DESCRIPTIONS
below for more information
peaks.c
xscale.c
sh3.c
These files implement the platform dependent functions
used by smsc9118.c. see PLATFORM INTERFACE DESCRIPTIONS
below for more information
ioctl_118.h
defines ioctl codes common between the driver(smsc9118.c)
and the helper application (cmd9118.c)
cmd9118.c
This is the source code for the helper application.
It provides the means by which one can send any ioctl code
to the driver (smsc9118.c).
buildp: This batch file is used for building the driver for the
peaks platform, and the helper application
usage: bash buildp
builds: This batch file is used for building the driver for the
sh3 platform, and the helper application
usage: bash builds
buildx: This batch file is used for building the driver for the
xscale platform, and the helper application
usage: bash buildx
smsc9118.o: this is the driver binary obtained after building
smsc9118.c
cmd9118: this is the helper application binary obtained after
building cmd9118.c
lint.h:
This is a header file for use only with the lint tool.
It provides structure definitions and function declarations
used by the driver so the lint tool does not need to
scan the real header files. This is done because the real
header files generate too many error messages.
cmd9118.Lnt:
smsc9118-*.Lnt:
These are lint configuration files used with the lint tool
cmd9118-Lnt.txt
smsc9118-*-Lnt.txt:
These are lint output files created by the lint tool.
COPYING:
This is a copy of the GNU GENERAL PUBLIC LICENSE
############################################################
################### FEATURES ###############################
############################################################
transmit and receive for pio and dma
Automatic Flow control for Tx, and Rx
Multicast capable
Mac Address Management
External Phy support
############################################################
################## DRIVER PARAMETERS #######################
############################################################
The following are load time modifiable driver parameters.
They can be set when using insmod
Example:
# insmod smsc9118.o rx_dma=0 tx_dma=1 irq=5
lan_base
specifies the physical base location in memory where the
LAN9118 can be accessed. By default the location will be
choosen by Platform_Initialize.
bus_width
specifies the bus_width to be configured by
Platform_Initialize. Must be set to either 16, or 32.
Any other value or by default Platform_Initialize will
attempt to autodetect the bus width
link_mode
specifies the link mode used. Each bit has different meanings
bit 0, 0x01, 10Mbps Half Duplex,
bit 1, 0x02, 10Mbps Full Duplex,
bit 2, 0x04, 100Mbps Half Duplex,
bit 3, 0x08, 100Mbps Full Duplex,
bit 4, 0x10, Symmetrical Pause,
bit 5, 0x20, Asymmetrical Pause,
bit 6, 0x40, Auto Negotiate,
if bit 6 is set, then Auto Negotiation is used, and bits 0 through 5
define what modes are advertised.
if bit 6 is clear, then Auto Negotiation is not used, and bits 0
through 3 select which speed and duplex setting to use. In this case,
only the most significant set bit is used to set the speed and duplex.
Example, the following are bits 6 to 0, and the resulting setting
bits 6 5 4 3 2 1 0
0 x x 0 0 0 x, 10Mbps Half Duplex
0 x x 0 0 1 x, 10Mbps Full Duplex
0 x x 0 1 x x, 100Mbps Half Duplex
0 x x 1 x x x, 100Mbps Full Duplex
by default link_mode=0x7F which uses Auto Negotiation and advertises
all modes.
irq
specifies the irq number to use. The default value is decided
by the platform layer with the macro PLATFORM_IRQ
int_deas
specifies the interrupt deassertion period to be written to
INT_DEAS of INT_CFG register. The default value is decided by
the platform layer with the macro PLATFORM_INT_DEAS
irq_pol
specifies the value to be written to IRQ_POL of INT_CFG register.
The default value is decided by the platform layer with the
macro PLATFORM_INT_POL.
irq_type
specifies the value to be written to IRQ_TYPE of INT_CFG register.
The default value is decided by the platform layer with the
macro PLATFORM_IRQ_TYPE
rx_dma
specifies the dma channel to use for receiving packets. It may
also be set to the following values
256 = TRANSFER_PIO
the driver will not use dma, it will use PIO.
255 = TRANSFER_REQUEST_DMA
the driver will call the Platform_RequestDmaChannel
to get an available dma channel
the default value is decided by the platform layer with the
macro PLATFORM_RX_DMA
tx_dma
specifies the dma channel to use for transmitting packets. It may
also be set to the following values
256 = TRANSFER_PIO
the driver will not use dma, it will use PIO.
255 = TRANSFER_REQUEST_DMA
the driver will call the Platform_RequestDmaChannel
to get an available dma channel
the default value is decided by the platform layer with the
macro PLATFORM_TX_DMA
dma_threshold
specifies the minimum size a packet must be for using DMA.
Otherwise the driver will use PIO. For small packets PIO may
be faster than DMA because DMA requires a certain amount of set
up time where as PIO can start almost immediately. Setting this
value to 0 means dma will always be used where dma has been enabled.
The default value is decided by the platform layer with the
macro PLATFORM_DMA_THRESHOLD
mac_addr_hi16
Specifies the high word of the mac address. If it was not
specified then the driver will try to read the mac address
from the eeprom. If that failes then ... ...
近期下载者:
相关文件:
收藏者: