net: Add support AX88796L ethernet deivice
PATCH 1/1 net: Add support AX88796L ethernet deivice
AX88796L is device of NE2000 compatible.
This patch support AX88796L ethernet device.
--- drivers/net/ax88796.h | 217 +++++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/ne2000.c | 6 ++ 2 files changed, 223 insertions(+), 0 deletions(-) create mode 100644 drivers/net/ax88796.h
drivers/net/ax88796.h new file +217 -0
@@ -0,0 +1,217 @@ +/* +* AX88796L(NE2000) support +* +* (c) 2007 Nobuhiro Iwamatsu <[email protected]> +* +* 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 +* +*/ + +#ifndef __DRIVERS_AX88796L_H__ +#define __DRIVERS_AX88796L_H__ + +#define DP_DATA (0x10 << 1) +#define START_PG 0x40/* First page of TX buffer */ +#define START_PG2 0x48 +#define STOP_PG 0x80/* Last page +1 of RX ring */ +#define TX_PAGES 12 +#define RX_START (START_PG+TX_PAGES) +#define RX_END STOP_PG + +#define AX88796L_BASE_ADDRESS CONFIG_DRIVER_NE2000_BASE +#define AX88796L_BYTE_ACCESS 0x00001000 +#define AX88796L_OFFSET 0x00000400 +#define AX88796L_ADDRESS_BYTE AX88796L_BASE_ADDRESS + \ + AX88796L_BYTE_ACCESS + AX88796L_OFFSET +#define AX88796L_REG_MEMR AX88796L_ADDRESS_BYTE + (0x14<<1) +#define AX88796L_REG_CR AX88796L_ADDRESS_BYTE + (0x00<<1) + +#define AX88796L_CR (*(vu_short *)(AX88796L_REG_CR)) +#define AX88796L_MEMR (*(vu_short *)(AX88796L_REG_MEMR)) + +#define EECS_HIGH (AX88796L_MEMR |= 0x10) +#define EECS_LOW (AX88796L_MEMR &= 0xef) +#define EECLK_HIGH (AX88796L_MEMR |= 0x80) +#define EECLK_LOW (AX88796L_MEMR &= 0x7f) +#define EEDI_HIGH (AX88796L_MEMR |= 0x20) +#define EEDI_LOW (AX88796L_MEMR &= 0xdf) +#define EEDO ((AX88796L_MEMR & 0x40)>>6) + +#define PAGE0_SET (AX88796L_CR &= 0x3f) +#define PAGE1_SET (AX88796L_CR = (AX88796L_CR & 0x3f) | 0x40) + +#define BIT_DUMMY 0 +#define MAC_EEP_READ 1 +#define MAC_EEP_WRITE 2 +#define MAC_EEP_ERACE 3 +#define MAC_EEP_EWEN 4 +#define MAC_EEP_EWDS 5 + +/* R7780MP Specific code */ +#if defined(CONFIG_R7780MP ) +#define ISA_OFFSET 0x1400 +#define DP_IN (_b_, _o_, _d_) (_d_) = \ + *( (vu_short *) ((_b_) + ((_o_) * 2) + ISA_OFFSET)) +#define DP_OUT (_b_, _o_, _d_) \ + *((vu_short *)((_b_) + ((_o_) * 2) + ISA_OFFSET)) = (_d_) +#define DP_IN_DATA (_b_, _d_) (_d_) = *( (vu_short *) ((_b_) + ISA_OFFSET)) +#define DP_OUT_DATA (_b_, _d_) *( (vu_short *) ((_b_)+ISA_OFFSET)) = (_d_) +#else +/* Please change for your target boards */ +#define ISA_OFFSET 0x0000 +#define DP_IN (_b_, _o_, _d_) (_d_) = *( (vu_short *)((_b_)+(_o_ )+ISA_OFFSET)) +#define DP_OUT (_b_, _o_, _d_) *((vu_short *)((_b_)+(_o_)+ISA_OFFSET)) = (_d_) +#define DP_IN_DATA (_b_, _d_) (_d_) = *( (vu_short *) ((_b_)+ISA_OFFSET)) +#define DP_OUT_DATA (_b_, _d_) *( (vu_short *) ((_b_)+ISA_OFFSET)) = (_d_) +#endif + + +/* +* Set 1 bit data +*/ +static void ax88796_bitset (u32 bit) +{ +/* DATA1 */ +if ( bit ) +EEDI_HIGH ; +else +EEDI_LOW ; + +EECLK_LOW ; +udelay (1000 ); +EECLK_HIGH ; +udelay (1000 ); +EEDI_LOW ; +} + +/* +* Get 1 bit data +*/ +static u8 ax88796_bitget (void ) +{ +u8 bit; + +EECLK_LOW ; +udelay (1000 ); +/* DATA */ + bit =EEDO ; +EECLK_HIGH ; +udelay (1000 ); + +return bit; +} + +/* +* Send COMMAND to EEPROM +*/ +static void ax88796_eep_cmd (u8 cmd) +{ +ax88796_bitset (BIT_DUMMY ); +switch (cmd){ +case MAC_EEP_READ : +ax88796_bitset (1 ); +ax88796_bitset (1 ); +ax88796_bitset (0 ); +break ; + +case MAC_EEP_WRITE : +ax88796_bitset (1 ); +ax88796_bitset (0 ); +ax88796_bitset (1 ); +break ; + +case MAC_EEP_ERACE : +ax88796_bitset (1 ); +ax88796_bitset (1 ); +ax88796_bitset (1 ); +break ; + +case MAC_EEP_EWEN : +ax88796_bitset (1 ); +ax88796_bitset (0 ); +ax88796_bitset (0 ); +break ; + +case MAC_EEP_EWDS : +ax88796_bitset (1 ); +ax88796_bitset (0 ); +ax88796_bitset (0 ); +break ; +default : +break ; + } +} + +static void ax88796_eep_setaddr (u16 addr) +{ +int i ; +for ( i =7 ; i >=0 ; i-- ) +ax88796_bitset (addr & (1 << i)); +} + +/* +* Get data from EEPROM +*/ +static u16 ax88796_eep_getdata (void ) +{ +ushort data =0 ; +int i; + +ax88796_bitget ();/* DUMMY */ +for ( i =0 ; i <16 ; i++ ){ + data <<=1 ; + data |=ax88796_bitget (); + } +return data; +} + +static void ax88796_mac_read (u8 *buff) +{ +int i ; +u16 data, addr =0 ; + +for ( i =0 ; i <3 ; i++ ) + { +EECS_HIGH ; +EEDI_LOW ; +udelay (1000 ); +/* READ COMMAND */ +ax88796_eep_cmd (MAC_EEP_READ ); +/* ADDRESS */ +ax88796_eep_setaddr (addr++); +/* GET DATA */ + data =ax88796_eep_getdata (); + *buff++ = (uchar)(data &0xff ); + *buff++ = (uchar)((data >>8 ) &0xff ); +EECLK_LOW ; +EEDI_LOW ; +EECS_LOW ; + } +} + +int get_prom (u8 * mac_addr) +{ +u8 prom[32 ]; +int i; + +ax88796_mac_read (prom); +for (i =0 ; i <6 ; i++){ + mac_addr[i] = prom[i]; + } +return 1 ; +} + +#endif /* __DRIVERS_AX88796L_H__ */
drivers/net/ne2000.c +6 -0
@@ -114,8 +114,13 @@ void uboot_push_tx_done(int key, int val);/* NE2000 base header file */ #include "ne2000_base.h" +#if defined(CONFIG_DRIVER_AX88796L ) +/* AX88796L support */ +#include "ax88796.h" +#else /* Basic NE2000 chip support */ #include "ne2000.h" +#endif static dp83902a_priv_data_t nic;/* just one instance of the card supported */
@@ -133,6 +138,7 @@ dp83902a_init(void)DEBUG_LINE ();#if defined(NE2000_BASIC_INIT ) +/* AX88796L doesn't need */ /* Prepare ESA */ DP_OUT (base,DP_CR ,DP_CR_NODMA |DP_CR_PAGE1 );/* Select page 1 */ /* Use the address from the serial EEPROM */
PATCH 1/1 net: Add support AX88796L ethernet deivice
Quoted 5 lines · On Wed, 05 Mar 2008 17:08:33 +0900 "goda.yusuke" <[email protected]>…
AX88796L is device of NE2000 compatible.
This patch support AX88796L ethernet device.Signed-off-by Yusuke Goda <[email protected]>---
I checked this patch and [PATCH] net: Divided code of NE2000 ethernet driver patch. Work fine AX88796L ethernet device.
regards,
Nobuhiro
Signature · 5 lines
Nobuhiro Iwamatsu hemamu at t-base.ne.jp iwamatsu at debian.or.jp GPG ID : 3170EBE9
Wolfgang Denk
AppliedPATCH 1/1 net: Add support AX88796L ethernet deivice
In reply to goda.yusukeQuoted 4 lines · In message <[email protected]> you wrote:
AX88796L is device of NE2000 compatible.
This patch support AX88796L ethernet device.Signed-off-by Yusuke Goda <[email protected]>
Applied, thanks.
Ben, I haven't seen you picking up these NE2000 patches, so I went ahead. Hope you don't mind...
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de "Now here's something you're really going to like!" - Rocket J. Squirrel
PATCH 1/1 net: Add support AX88796L ethernet deivice
Quoted 5 lines · Wolfgang Denk
Quoted 3 lines · In message <[email protected]> you wrote:
AX88796L is device of NE2000 compatible.
This patch support AX88796L ethernet device.
Quoted 9 lines
Quoted 2 lines
Signed-off-by Yusuke Goda <[email protected]>Applied, thanks.
Ben, I haven't seen you picking up these NE2000 patches, so I went ahead. Hope you don't mind...
No problem. I scanned through them all as they arrived and moved them into a 'get to later' folder since there wasn't anything blatantly bad, but clearly didn't get to them yet. My workflow needs improvement...
regards,
Ben
PATCH 1/1 net: Add support AX88796L ethernet deivice
Dear Ben,
Quoted 7 lines · in message <[email protected]> you wrote:
Quoted 4 lines
Ben, I haven't seen you picking up these NE2000 patches, so I went ahead. Hope you don't mind...
No problem. I scanned through them all as they arrived and moved them into a 'get to later' folder since there wasn't anything blatantly bad, but clearly didn't get to them yet. My workflow needs improvement...
thanks. I hope we can soon do something to help this.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de While money can't buy happiness, it certainly lets you choose your own form of misery.