Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (c) 1999-2013 Petko Manolov (petkan@nucleusys.com)
0004  */
0005 
0006 
0007 #ifndef PEGASUS_DEV
0008 
0009 #define PEGASUS_II      0x80000000
0010 #define HAS_HOME_PNA        0x40000000
0011 
0012 #define PEGASUS_MTU     1536
0013 
0014 #define EPROM_WRITE     0x01
0015 #define EPROM_READ      0x02
0016 #define EPROM_DONE      0x04
0017 #define EPROM_WR_ENABLE     0x10
0018 #define EPROM_LOAD      0x20
0019 
0020 #define PHY_DONE        0x80
0021 #define PHY_READ        0x40
0022 #define PHY_WRITE       0x20
0023 #define DEFAULT_GPIO_RESET  0x24
0024 #define DEFAULT_GPIO_SET    0x26
0025 
0026 #define PEGASUS_PRESENT     0x00000001
0027 #define PEGASUS_TX_BUSY     0x00000004
0028 #define PEGASUS_RX_BUSY     0x00000008
0029 #define CTRL_URB_RUNNING    0x00000010
0030 #define CTRL_URB_SLEEP      0x00000020
0031 #define PEGASUS_UNPLUG      0x00000040
0032 #define PEGASUS_RX_URB_FAIL 0x00000080
0033 
0034 #define RX_MULTICAST        2
0035 #define RX_PROMISCUOUS      4
0036 
0037 #define REG_TIMEOUT     (HZ)
0038 #define PEGASUS_TX_TIMEOUT  (HZ*10)
0039 
0040 #define TX_UNDERRUN     0x80
0041 #define EXCESSIVE_COL       0x40
0042 #define LATE_COL        0x20
0043 #define NO_CARRIER      0x10
0044 #define LOSS_CARRIER        0x08
0045 #define JABBER_TIMEOUT      0x04
0046 
0047 #define LINK_STATUS     0x01
0048 
0049 #define PEGASUS_REQT_READ   0xc0
0050 #define PEGASUS_REQT_WRITE  0x40
0051 #define PEGASUS_REQ_GET_REGS    0xf0
0052 #define PEGASUS_REQ_SET_REGS    0xf1
0053 #define PEGASUS_REQ_SET_REG PEGASUS_REQ_SET_REGS
0054 
0055 enum pegasus_registers {
0056     EthCtrl0 = 0,
0057     EthCtrl1 = 1,
0058     EthCtrl2 = 2,
0059     EthID = 0x10,
0060     Reg1d = 0x1d,
0061     EpromOffset = 0x20,
0062     EpromData = 0x21,   /* 0x21 low, 0x22 high byte */
0063     EpromCtrl = 0x23,
0064     PhyAddr = 0x25,
0065     PhyData = 0x26,     /* 0x26 low, 0x27 high byte */
0066     PhyCtrl = 0x28,
0067     UsbStst = 0x2a,
0068     EthTxStat0 = 0x2b,
0069     EthTxStat1 = 0x2c,
0070     EthRxStat = 0x2d,
0071     WakeupControl = 0x78,
0072     Reg7b = 0x7b,
0073     Gpio0 = 0x7e,
0074     Gpio1 = 0x7f,
0075     Reg81 = 0x81,
0076 };
0077 
0078 
0079 typedef struct pegasus {
0080     struct usb_device   *usb;
0081     struct usb_interface    *intf;
0082     struct net_device   *net;
0083     struct mii_if_info  mii;
0084     unsigned        flags;
0085     unsigned        features;
0086     u32         msg_enable;
0087     u32         wolopts;
0088     int         dev_index;
0089     int         intr_interval;
0090     struct tasklet_struct   rx_tl;
0091     struct delayed_work carrier_check;
0092     struct urb      *rx_urb, *tx_urb, *intr_urb;
0093     struct sk_buff      *rx_skb;
0094     int         chip;
0095     unsigned char       intr_buff[8];
0096     __u8            tx_buff[PEGASUS_MTU];
0097     __u8            eth_regs[4];
0098     __u8            phy;
0099     __u8            gpio_res;
0100 } pegasus_t;
0101 
0102 
0103 struct usb_eth_dev {
0104     char    *name;
0105     __u16   vendor;
0106     __u16   device;
0107     __u32   private; /* LSB is gpio reset value */
0108 };
0109 
0110 #define VENDOR_3COM     0x0506
0111 #define VENDOR_ABOCOM       0x07b8
0112 #define VENDOR_ACCTON       0x083a
0113 #define VENDOR_ADMTEK       0x07a6
0114 #define VENDOR_AEILAB       0x3334
0115 #define VENDOR_ALLIEDTEL    0x07c9
0116 #define VENDOR_ATEN     0x0557
0117 #define VENDOR_BELKIN       0x050d
0118 #define VENDOR_BILLIONTON   0x08dd
0119 #define VENDOR_COMPAQ       0x049f
0120 #define VENDOR_COREGA       0x07aa
0121 #define VENDOR_DLINK        0x2001
0122 #define VENDOR_ELCON        0x0db7
0123 #define VENDOR_ELECOM       0x056e
0124 #define VENDOR_ELSA     0x05cc
0125 #define VENDOR_GIGABYTE     0x1044
0126 #define VENDOR_HAWKING      0x0e66
0127 #define VENDOR_HP       0x03f0
0128 #define VENDOR_IODATA       0x04bb
0129 #define VENDOR_KINGSTON     0x0951
0130 #define VENDOR_LANEED       0x056e
0131 #define VENDOR_LINKSYS      0x066b
0132 #define VENDOR_LINKSYS2     0x077b
0133 #define VENDOR_MELCO        0x0411
0134 #define VENDOR_MICROSOFT    0x045e
0135 #define VENDOR_MOBILITY     0x1342
0136 #define VENDOR_NETGEAR      0x0846
0137 #define VENDOR_OCT      0x0b39
0138 #define VENDOR_SMARTBRIDGES 0x08d1
0139 #define VENDOR_SMC      0x0707
0140 #define VENDOR_SOHOWARE     0x15e8
0141 #define VENDOR_SIEMENS      0x067c
0142 
0143 
0144 #else   /* PEGASUS_DEV */
0145 
0146 PEGASUS_DEV("3Com USB Ethernet 3C460B", VENDOR_3COM, 0x4601,
0147         DEFAULT_GPIO_RESET | PEGASUS_II)
0148 PEGASUS_DEV("ATEN USB Ethernet UC-110T", VENDOR_ATEN, 0x2007,
0149         DEFAULT_GPIO_RESET | PEGASUS_II)
0150 PEGASUS_DEV("USB HPNA/Ethernet", VENDOR_ABOCOM, 0x110c,
0151         DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA)
0152 PEGASUS_DEV("USB HPNA/Ethernet", VENDOR_ABOCOM, 0x4104,
0153         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0154 PEGASUS_DEV("USB HPNA/Ethernet", VENDOR_ABOCOM, 0x4004,
0155         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0156 PEGASUS_DEV("USB HPNA/Ethernet", VENDOR_ABOCOM, 0x4007,
0157         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0158 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0x4102,
0159         DEFAULT_GPIO_RESET | PEGASUS_II)
0160 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0x4002,
0161         DEFAULT_GPIO_RESET)
0162 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0x400b,
0163         DEFAULT_GPIO_RESET | PEGASUS_II)
0164 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0x400c,
0165         DEFAULT_GPIO_RESET | PEGASUS_II)
0166 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0xabc1,
0167         DEFAULT_GPIO_RESET)
0168 PEGASUS_DEV("USB 10/100 Fast Ethernet", VENDOR_ABOCOM, 0x200c,
0169         DEFAULT_GPIO_RESET | PEGASUS_II)
0170 PEGASUS_DEV("Accton USB 10/100 Ethernet Adapter", VENDOR_ACCTON, 0x1046,
0171         DEFAULT_GPIO_RESET)
0172 PEGASUS_DEV("SpeedStream USB 10/100 Ethernet", VENDOR_ACCTON, 0x5046,
0173         DEFAULT_GPIO_RESET | PEGASUS_II)
0174 PEGASUS_DEV("Philips USB 10/100 Ethernet", VENDOR_ACCTON, 0xb004,
0175         DEFAULT_GPIO_RESET | PEGASUS_II)
0176 PEGASUS_DEV("ADMtek ADM8511 \"Pegasus II\" USB Ethernet",
0177         VENDOR_ADMTEK, 0x8511,
0178         DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA)
0179 PEGASUS_DEV("ADMtek ADM8513 \"Pegasus II\" USB Ethernet",
0180         VENDOR_ADMTEK, 0x8513,
0181         DEFAULT_GPIO_RESET | PEGASUS_II)
0182 PEGASUS_DEV("ADMtek ADM8515 \"Pegasus II\" USB-2.0 Ethernet",
0183         VENDOR_ADMTEK, 0x8515,
0184         DEFAULT_GPIO_RESET | PEGASUS_II)
0185 PEGASUS_DEV("ADMtek AN986 \"Pegasus\" USB Ethernet (evaluation board)",
0186         VENDOR_ADMTEK, 0x0986,
0187         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0188 PEGASUS_DEV("AN986A USB MAC", VENDOR_ADMTEK, 1986,
0189         DEFAULT_GPIO_RESET | PEGASUS_II)
0190 PEGASUS_DEV("AEI USB Fast Ethernet Adapter", VENDOR_AEILAB, 0x1701,
0191         DEFAULT_GPIO_RESET | PEGASUS_II)
0192 PEGASUS_DEV("Allied Telesyn Int. AT-USB100", VENDOR_ALLIEDTEL, 0xb100,
0193         DEFAULT_GPIO_RESET | PEGASUS_II)
0194 /*
0195  * Distinguish between this Belkin adaptor and the Belkin bluetooth adaptors
0196  * with the same product IDs by checking the device class too.
0197  */
0198 PEGASUS_DEV_CLASS("Belkin F5D5050 USB Ethernet", VENDOR_BELKIN, 0x0121, 0x00,
0199         DEFAULT_GPIO_RESET | PEGASUS_II)
0200 PEGASUS_DEV("Belkin F5U122 10/100 USB Ethernet", VENDOR_BELKIN, 0x0122,
0201         DEFAULT_GPIO_RESET | PEGASUS_II)
0202 PEGASUS_DEV("Billionton USB-100", VENDOR_BILLIONTON, 0x0986,
0203         DEFAULT_GPIO_RESET)
0204 PEGASUS_DEV("Billionton USBLP-100", VENDOR_BILLIONTON, 0x0987,
0205         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0206 PEGASUS_DEV("iPAQ Networking 10/100 USB", VENDOR_COMPAQ, 0x8511,
0207         DEFAULT_GPIO_RESET | PEGASUS_II)
0208 PEGASUS_DEV("Billionton USBEL-100", VENDOR_BILLIONTON, 0x0988,
0209         DEFAULT_GPIO_RESET)
0210 PEGASUS_DEV("Billionton USBE-100", VENDOR_BILLIONTON, 0x8511,
0211         DEFAULT_GPIO_RESET | PEGASUS_II)
0212 PEGASUS_DEV("Corega FEther USB-TX", VENDOR_COREGA, 0x0004,
0213         DEFAULT_GPIO_RESET)
0214 PEGASUS_DEV("Corega FEther USB-TXS", VENDOR_COREGA, 0x000d,
0215         DEFAULT_GPIO_RESET | PEGASUS_II)
0216 PEGASUS_DEV("D-Link DSB-650TX", VENDOR_DLINK, 0x4001,
0217         DEFAULT_GPIO_RESET)
0218 PEGASUS_DEV("D-Link DSB-650TX", VENDOR_DLINK, 0x4002,
0219         DEFAULT_GPIO_RESET)
0220 PEGASUS_DEV("D-Link DSB-650TX", VENDOR_DLINK, 0x4102,
0221         DEFAULT_GPIO_RESET | PEGASUS_II)
0222 PEGASUS_DEV("D-Link DSB-650TX", VENDOR_DLINK, 0x400b,
0223         DEFAULT_GPIO_RESET | PEGASUS_II)
0224 PEGASUS_DEV("D-Link DSB-650TX", VENDOR_DLINK, 0x200c,
0225         DEFAULT_GPIO_RESET | PEGASUS_II)
0226 PEGASUS_DEV("D-Link DSB-650TX(PNA)", VENDOR_DLINK, 0x4003,
0227         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0228 PEGASUS_DEV("D-Link DSB-650", VENDOR_DLINK, 0xabc1,
0229         DEFAULT_GPIO_RESET)
0230 PEGASUS_DEV("GOLDPFEIL USB Adapter", VENDOR_ELCON, 0x0002,
0231         DEFAULT_GPIO_RESET | PEGASUS_II | HAS_HOME_PNA)
0232 PEGASUS_DEV("ELECOM USB Ethernet LD-USB20", VENDOR_ELECOM,  0x4010,
0233         DEFAULT_GPIO_RESET  | PEGASUS_II)
0234 PEGASUS_DEV("EasiDock Ethernet", VENDOR_MOBILITY, 0x0304,
0235         DEFAULT_GPIO_RESET)
0236 PEGASUS_DEV("Elsa Micolink USB2Ethernet", VENDOR_ELSA, 0x3000,
0237         DEFAULT_GPIO_RESET)
0238 PEGASUS_DEV("GIGABYTE GN-BR402W Wireless Router", VENDOR_GIGABYTE, 0x8002,
0239         DEFAULT_GPIO_RESET)
0240 PEGASUS_DEV("Hawking UF100 10/100 Ethernet", VENDOR_HAWKING, 0x400c,
0241         DEFAULT_GPIO_RESET | PEGASUS_II)
0242 PEGASUS_DEV("HP hn210c Ethernet USB", VENDOR_HP, 0x811c,
0243         DEFAULT_GPIO_RESET | PEGASUS_II)
0244 PEGASUS_DEV("IO DATA USB ET/TX", VENDOR_IODATA, 0x0904,
0245         DEFAULT_GPIO_RESET)
0246 PEGASUS_DEV("IO DATA USB ET/TX-S", VENDOR_IODATA, 0x0913,
0247         DEFAULT_GPIO_RESET | PEGASUS_II)
0248 PEGASUS_DEV("IO DATA USB ETX-US2", VENDOR_IODATA, 0x093a,
0249         DEFAULT_GPIO_RESET | PEGASUS_II)
0250 PEGASUS_DEV("Kingston KNU101TX Ethernet", VENDOR_KINGSTON, 0x000a,
0251         DEFAULT_GPIO_RESET)
0252 PEGASUS_DEV("LANEED USB Ethernet LD-USB/TX", VENDOR_LANEED, 0x4002,
0253         DEFAULT_GPIO_RESET)
0254 PEGASUS_DEV("LANEED USB Ethernet LD-USBL/TX", VENDOR_LANEED, 0x4005,
0255         DEFAULT_GPIO_RESET | PEGASUS_II)
0256 PEGASUS_DEV("LANEED USB Ethernet LD-USB/TX", VENDOR_LANEED, 0x400b,
0257         DEFAULT_GPIO_RESET | PEGASUS_II)
0258 PEGASUS_DEV("LANEED USB Ethernet LD-USB/T", VENDOR_LANEED, 0xabc1,
0259         DEFAULT_GPIO_RESET)
0260 PEGASUS_DEV("LANEED USB Ethernet LD-USB/TX", VENDOR_LANEED, 0x200c,
0261         DEFAULT_GPIO_RESET | PEGASUS_II)
0262 PEGASUS_DEV("Linksys USB10TX", VENDOR_LINKSYS, 0x2202,
0263         DEFAULT_GPIO_RESET)
0264 PEGASUS_DEV("Linksys USB100TX", VENDOR_LINKSYS, 0x2203,
0265         DEFAULT_GPIO_RESET)
0266 PEGASUS_DEV("Linksys USB100TX", VENDOR_LINKSYS, 0x2204,
0267         DEFAULT_GPIO_RESET | HAS_HOME_PNA)
0268 PEGASUS_DEV("Linksys USB10T Ethernet Adapter", VENDOR_LINKSYS, 0x2206,
0269         DEFAULT_GPIO_RESET | PEGASUS_II)
0270 PEGASUS_DEV("Linksys USBVPN1", VENDOR_LINKSYS2, 0x08b4,
0271         DEFAULT_GPIO_RESET)
0272 PEGASUS_DEV("Linksys USB USB100TX", VENDOR_LINKSYS, 0x400b,
0273         DEFAULT_GPIO_RESET | PEGASUS_II)
0274 PEGASUS_DEV("Linksys USB10TX", VENDOR_LINKSYS, 0x200c,
0275         DEFAULT_GPIO_RESET | PEGASUS_II)
0276 PEGASUS_DEV("MELCO/BUFFALO LUA-TX", VENDOR_MELCO, 0x0001,
0277         DEFAULT_GPIO_RESET)
0278 PEGASUS_DEV("MELCO/BUFFALO LUA-TX", VENDOR_MELCO, 0x0005,
0279         DEFAULT_GPIO_RESET)
0280 PEGASUS_DEV("MELCO/BUFFALO LUA2-TX", VENDOR_MELCO, 0x0009,
0281         DEFAULT_GPIO_RESET | PEGASUS_II)
0282 PEGASUS_DEV("Microsoft MN-110", VENDOR_MICROSOFT, 0x007a,
0283         DEFAULT_GPIO_RESET | PEGASUS_II)
0284 PEGASUS_DEV("NETGEAR FA101", VENDOR_NETGEAR, 0x1020,
0285         DEFAULT_GPIO_RESET | PEGASUS_II)
0286 PEGASUS_DEV("OCT Inc.", VENDOR_OCT, 0x0109,
0287         DEFAULT_GPIO_RESET | PEGASUS_II)
0288 PEGASUS_DEV("OCT USB TO Ethernet", VENDOR_OCT, 0x0901,
0289         DEFAULT_GPIO_RESET | PEGASUS_II)
0290 PEGASUS_DEV("smartNIC 2 PnP Adapter", VENDOR_SMARTBRIDGES, 0x0003,
0291         DEFAULT_GPIO_RESET | PEGASUS_II)
0292 PEGASUS_DEV("SMC 202 USB Ethernet", VENDOR_SMC, 0x0200,
0293         DEFAULT_GPIO_RESET)
0294 PEGASUS_DEV("SMC 2206 USB Ethernet", VENDOR_SMC, 0x0201,
0295         DEFAULT_GPIO_RESET | PEGASUS_II)
0296 PEGASUS_DEV("SOHOware NUB100 Ethernet", VENDOR_SOHOWARE, 0x9100,
0297         DEFAULT_GPIO_RESET)
0298 PEGASUS_DEV("SOHOware NUB110 Ethernet", VENDOR_SOHOWARE, 0x9110,
0299         DEFAULT_GPIO_RESET | PEGASUS_II)
0300 PEGASUS_DEV("SpeedStream USB 10/100 Ethernet", VENDOR_SIEMENS, 0x1001,
0301         DEFAULT_GPIO_RESET | PEGASUS_II)
0302 
0303 
0304 #endif  /* PEGASUS_DEV */