hc
2024-08-16 62c46c9150c4afde7e5b25436263fddf79d66f0b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 1999-2013 Petko Manolov (petkan@nucleusys.com)
 */
 
 
#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 */