|  | /* SPDX-License-Identifier: GPL-2.0-only */ | 
|  | /* | 
|  | * Copyright (c) 1999-2013 Petko Manolov ([email protected]) | 
|  | */ | 
|  |  | 
|  |  | 
|  | #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, | 
|  | PhyData = 0x26,		/* 0x26 low, 0x27 high byte */ | 
|  | 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; | 
|  | struct delayed_work	carrier_check; | 
|  | struct urb		*rx_urb, *tx_urb, *intr_urb; | 
|  | 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 | 
|  | #define	VENDOR_ELECOM		0x056e | 
|  | #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 | 
|  | #define	VENDOR_LINKSYS2		0x077b | 
|  | #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 */ | 
|  |  | 
|  | 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", | 
|  | VENDOR_ADMTEK, 0x8511, | 
|  | DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA) | 
|  | PEGASUS_DEV("ADMtek ADM8513 \"Pegasus II\" USB Ethernet", | 
|  | VENDOR_ADMTEK, 0x8513, | 
|  | DEFAULT_GPIO_RESET | PEGASUS_II) | 
|  | PEGASUS_DEV("ADMtek ADM8515 \"Pegasus II\" USB-2.0 Ethernet", | 
|  | VENDOR_ADMTEK, 0x8515, | 
|  | DEFAULT_GPIO_RESET | PEGASUS_II) | 
|  | PEGASUS_DEV("ADMtek AN986 \"Pegasus\" USB Ethernet (evaluation board)", | 
|  | VENDOR_ADMTEK, 0x0986, | 
|  | 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) | 
|  | /* | 
|  | * Distinguish between this Belkin adaptor and the Belkin bluetooth adaptors | 
|  | * with the same product IDs by checking the device class too. | 
|  | */ | 
|  | 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, | 
|  | DEFAULT_GPIO_RESET) | 
|  | 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) | 
|  |  | 
|  |  | 
|  | #endif	/* PEGASUS_DEV */ |