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 ... ...

近期下载者

相关文件


收藏者