2019-06-04 11:11:33 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2005-04-17 02:20:36 +04:00
/*
2013-04-26 02:41:50 +04:00
* Copyright ( c ) 1999 - 2013 Petko Manolov ( petkan @ nucleusys . com )
2005-04-17 02:20:36 +04:00
*/
# ifndef PEGASUS_DEV
# define PEGASUS_II 0x80000000
# define HAS_HOME_PNA 0x40000000
# define PEGASUS_MTU 1536
# define EPROM_WRITE 0x01
# define EPROM_READ 0x02
# define EPROM_DONE 0x04
# define EPROM_WR_ENABLE 0x10
# define EPROM_LOAD 0x20
# define PHY_DONE 0x80
# define PHY_READ 0x40
# define PHY_WRITE 0x20
# define DEFAULT_GPIO_RESET 0x24
# define DEFAULT_GPIO_SET 0x26
# define PEGASUS_PRESENT 0x00000001
# define PEGASUS_TX_BUSY 0x00000004
# define PEGASUS_RX_BUSY 0x00000008
# define CTRL_URB_RUNNING 0x00000010
# define CTRL_URB_SLEEP 0x00000020
# define PEGASUS_UNPLUG 0x00000040
# define PEGASUS_RX_URB_FAIL 0x00000080
# define RX_MULTICAST 2
# define RX_PROMISCUOUS 4
# define REG_TIMEOUT (HZ)
# define PEGASUS_TX_TIMEOUT (HZ*10)
# define TX_UNDERRUN 0x80
# define EXCESSIVE_COL 0x40
# define LATE_COL 0x20
# define NO_CARRIER 0x10
# define LOSS_CARRIER 0x08
# define JABBER_TIMEOUT 0x04
# define LINK_STATUS 0x01
# define PEGASUS_REQT_READ 0xc0
# define PEGASUS_REQT_WRITE 0x40
# define PEGASUS_REQ_GET_REGS 0xf0
# define PEGASUS_REQ_SET_REGS 0xf1
# define PEGASUS_REQ_SET_REG PEGASUS_REQ_SET_REGS
enum pegasus_registers {
EthCtrl0 = 0 ,
EthCtrl1 = 1 ,
EthCtrl2 = 2 ,
EthID = 0x10 ,
Reg1d = 0x1d ,
EpromOffset = 0x20 ,
EpromData = 0x21 , /* 0x21 low, 0x22 high byte */
EpromCtrl = 0x23 ,
PhyAddr = 0x25 ,
2010-06-26 10:58:54 +04:00
PhyData = 0x26 , /* 0x26 low, 0x27 high byte */
2005-04-17 02:20:36 +04:00
PhyCtrl = 0x28 ,
UsbStst = 0x2a ,
EthTxStat0 = 0x2b ,
EthTxStat1 = 0x2c ,
EthRxStat = 0x2d ,
WakeupControl = 0x78 ,
Reg7b = 0x7b ,
Gpio0 = 0x7e ,
Gpio1 = 0x7f ,
Reg81 = 0x81 ,
} ;
typedef struct pegasus {
struct usb_device * usb ;
struct usb_interface * intf ;
struct net_device * net ;
struct mii_if_info mii ;
unsigned flags ;
unsigned features ;
u32 msg_enable ;
u32 wolopts ;
int dev_index ;
int intr_interval ;
struct tasklet_struct rx_tl ;
2006-11-22 17:57:56 +03:00
struct delayed_work carrier_check ;
2013-04-26 02:41:50 +04:00
struct urb * rx_urb , * tx_urb , * intr_urb ;
2005-04-17 02:20:36 +04:00
struct sk_buff * rx_skb ;
int chip ;
unsigned char intr_buff [ 8 ] ;
__u8 tx_buff [ PEGASUS_MTU ] ;
__u8 eth_regs [ 4 ] ;
__u8 phy ;
__u8 gpio_res ;
} pegasus_t ;
struct usb_eth_dev {
char * name ;
__u16 vendor ;
__u16 device ;
__u32 private ; /* LSB is gpio reset value */
} ;
# define VENDOR_3COM 0x0506
# define VENDOR_ABOCOM 0x07b8
# define VENDOR_ACCTON 0x083a
# define VENDOR_ADMTEK 0x07a6
# define VENDOR_AEILAB 0x3334
# define VENDOR_ALLIEDTEL 0x07c9
# define VENDOR_ATEN 0x0557
# define VENDOR_BELKIN 0x050d
# define VENDOR_BILLIONTON 0x08dd
# define VENDOR_COMPAQ 0x049f
# define VENDOR_COREGA 0x07aa
# define VENDOR_DLINK 0x2001
# define VENDOR_ELCON 0x0db7
2006-08-29 11:47:41 +04:00
# define VENDOR_ELECOM 0x056e
2005-04-17 02:20:36 +04:00
# define VENDOR_ELSA 0x05cc
# define VENDOR_GIGABYTE 0x1044
# define VENDOR_HAWKING 0x0e66
# define VENDOR_HP 0x03f0
# define VENDOR_IODATA 0x04bb
# define VENDOR_KINGSTON 0x0951
# define VENDOR_LANEED 0x056e
# define VENDOR_LINKSYS 0x066b
2006-01-28 19:48:33 +03:00
# define VENDOR_LINKSYS2 0x077b
2005-04-17 02:20:36 +04:00
# define VENDOR_MELCO 0x0411
# define VENDOR_MICROSOFT 0x045e
# define VENDOR_MOBILITY 0x1342
# define VENDOR_NETGEAR 0x0846
# define VENDOR_OCT 0x0b39
# define VENDOR_SMARTBRIDGES 0x08d1
# define VENDOR_SMC 0x0707
# define VENDOR_SOHOWARE 0x15e8
# define VENDOR_SIEMENS 0x067c
# else /* PEGASUS_DEV */
2010-06-26 10:58:54 +04:00
PEGASUS_DEV ( " 3Com USB Ethernet 3C460B " , VENDOR_3COM , 0x4601 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " ATEN USB Ethernet UC-110T " , VENDOR_ATEN , 0x2007 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " USB HPNA/Ethernet " , VENDOR_ABOCOM , 0x110c ,
DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA )
PEGASUS_DEV ( " USB HPNA/Ethernet " , VENDOR_ABOCOM , 0x4104 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " USB HPNA/Ethernet " , VENDOR_ABOCOM , 0x4004 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " USB HPNA/Ethernet " , VENDOR_ABOCOM , 0x4007 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0x4102 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0x4002 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0x400b ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0x400c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0xabc1 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " USB 10/100 Fast Ethernet " , VENDOR_ABOCOM , 0x200c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Accton USB 10/100 Ethernet Adapter " , VENDOR_ACCTON , 0x1046 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " SpeedStream USB 10/100 Ethernet " , VENDOR_ACCTON , 0x5046 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Philips USB 10/100 Ethernet " , VENDOR_ACCTON , 0xb004 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " ADMtek ADM8511 \" Pegasus II \" USB Ethernet " ,
2005-04-17 02:20:36 +04:00
VENDOR_ADMTEK , 0x8511 ,
2010-06-26 10:58:54 +04:00
DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA )
PEGASUS_DEV ( " ADMtek ADM8513 \" Pegasus II \" USB Ethernet " ,
2005-04-17 02:20:36 +04:00
VENDOR_ADMTEK , 0x8513 ,
2010-06-26 10:58:54 +04:00
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " ADMtek ADM8515 \" Pegasus II \" USB-2.0 Ethernet " ,
2005-04-17 02:20:36 +04:00
VENDOR_ADMTEK , 0x8515 ,
2010-06-26 10:58:54 +04:00
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " ADMtek AN986 \" Pegasus \" USB Ethernet (evaluation board) " ,
2005-04-17 02:20:36 +04:00
VENDOR_ADMTEK , 0x0986 ,
2010-06-26 10:58:54 +04:00
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " AN986A USB MAC " , VENDOR_ADMTEK , 1986 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " AEI USB Fast Ethernet Adapter " , VENDOR_AEILAB , 0x1701 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Allied Telesyn Int. AT-USB100 " , VENDOR_ALLIEDTEL , 0xb100 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
2009-10-13 11:32:02 +04:00
/*
* Distinguish between this Belkin adaptor and the Belkin bluetooth adaptors
* with the same product IDs by checking the device class too .
*/
2010-06-26 10:58:54 +04:00
PEGASUS_DEV_CLASS ( " Belkin F5D5050 USB Ethernet " , VENDOR_BELKIN , 0x0121 , 0x00 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Belkin F5U122 10/100 USB Ethernet " , VENDOR_BELKIN , 0x0122 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Billionton USB-100 " , VENDOR_BILLIONTON , 0x0986 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Billionton USBLP-100 " , VENDOR_BILLIONTON , 0x0987 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " iPAQ Networking 10/100 USB " , VENDOR_COMPAQ , 0x8511 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Billionton USBEL-100 " , VENDOR_BILLIONTON , 0x0988 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Billionton USBE-100 " , VENDOR_BILLIONTON , 0x8511 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Corega FEther USB-TX " , VENDOR_COREGA , 0x0004 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Corega FEther USB-TXS " , VENDOR_COREGA , 0x000d ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " D-Link DSB-650TX " , VENDOR_DLINK , 0x4001 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " D-Link DSB-650TX " , VENDOR_DLINK , 0x4002 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " D-Link DSB-650TX " , VENDOR_DLINK , 0x4102 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " D-Link DSB-650TX " , VENDOR_DLINK , 0x400b ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " D-Link DSB-650TX " , VENDOR_DLINK , 0x200c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " D-Link DSB-650TX(PNA) " , VENDOR_DLINK , 0x4003 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " D-Link DSB-650 " , VENDOR_DLINK , 0xabc1 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " GOLDPFEIL USB Adapter " , VENDOR_ELCON , 0x0002 ,
DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA )
PEGASUS_DEV ( " ELECOM USB Ethernet LD-USB20 " , VENDOR_ELECOM , 0x4010 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " EasiDock Ethernet " , VENDOR_MOBILITY , 0x0304 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Elsa Micolink USB2Ethernet " , VENDOR_ELSA , 0x3000 ,
2005-04-17 02:20:36 +04:00
DEFAULT_GPIO_RESET )
2010-06-26 10:58:54 +04:00
PEGASUS_DEV ( " GIGABYTE GN-BR402W Wireless Router " , VENDOR_GIGABYTE , 0x8002 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Hawking UF100 10/100 Ethernet " , VENDOR_HAWKING , 0x400c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " HP hn210c Ethernet USB " , VENDOR_HP , 0x811c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " IO DATA USB ET/TX " , VENDOR_IODATA , 0x0904 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " IO DATA USB ET/TX-S " , VENDOR_IODATA , 0x0913 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " IO DATA USB ETX-US2 " , VENDOR_IODATA , 0x093a ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Kingston KNU101TX Ethernet " , VENDOR_KINGSTON , 0x000a ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " LANEED USB Ethernet LD-USB/TX " , VENDOR_LANEED , 0x4002 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " LANEED USB Ethernet LD-USBL/TX " , VENDOR_LANEED , 0x4005 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " LANEED USB Ethernet LD-USB/TX " , VENDOR_LANEED , 0x400b ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " LANEED USB Ethernet LD-USB/T " , VENDOR_LANEED , 0xabc1 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " LANEED USB Ethernet LD-USB/TX " , VENDOR_LANEED , 0x200c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Linksys USB10TX " , VENDOR_LINKSYS , 0x2202 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Linksys USB100TX " , VENDOR_LINKSYS , 0x2203 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Linksys USB100TX " , VENDOR_LINKSYS , 0x2204 ,
DEFAULT_GPIO_RESET | HAS_HOME_PNA )
PEGASUS_DEV ( " Linksys USB10T Ethernet Adapter " , VENDOR_LINKSYS , 0x2206 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Linksys USBVPN1 " , VENDOR_LINKSYS2 , 0x08b4 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " Linksys USB USB100TX " , VENDOR_LINKSYS , 0x400b ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Linksys USB10TX " , VENDOR_LINKSYS , 0x200c ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " MELCO/BUFFALO LUA-TX " , VENDOR_MELCO , 0x0001 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " MELCO/BUFFALO LUA-TX " , VENDOR_MELCO , 0x0005 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " MELCO/BUFFALO LUA2-TX " , VENDOR_MELCO , 0x0009 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " Microsoft MN-110 " , VENDOR_MICROSOFT , 0x007a ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " NETGEAR FA101 " , VENDOR_NETGEAR , 0x1020 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " OCT Inc. " , VENDOR_OCT , 0x0109 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " OCT USB TO Ethernet " , VENDOR_OCT , 0x0901 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " smartNIC 2 PnP Adapter " , VENDOR_SMARTBRIDGES , 0x0003 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " SMC 202 USB Ethernet " , VENDOR_SMC , 0x0200 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " SMC 2206 USB Ethernet " , VENDOR_SMC , 0x0201 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " SOHOware NUB100 Ethernet " , VENDOR_SOHOWARE , 0x9100 ,
DEFAULT_GPIO_RESET )
PEGASUS_DEV ( " SOHOware NUB110 Ethernet " , VENDOR_SOHOWARE , 0x9110 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
PEGASUS_DEV ( " SpeedStream USB 10/100 Ethernet " , VENDOR_SIEMENS , 0x1001 ,
DEFAULT_GPIO_RESET | PEGASUS_II )
2005-04-17 02:20:36 +04:00
# endif /* PEGASUS_DEV */