diff options
Diffstat (limited to 'drivers/net/sis190.c')
-rw-r--r-- | drivers/net/sis190.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/net/sis190.c b/drivers/net/sis190.c index e67a5753882e..d915507e90eb 100644 --- a/drivers/net/sis190.c +++ b/drivers/net/sis190.c | |||
@@ -5,7 +5,8 @@ | |||
5 | Copyright (c) 2003, 2004 Jeff Garzik <jgarzik@pobox.com> | 5 | Copyright (c) 2003, 2004 Jeff Garzik <jgarzik@pobox.com> |
6 | Copyright (c) 2003, 2004, 2005 Francois Romieu <romieu@fr.zoreil.com> | 6 | Copyright (c) 2003, 2004, 2005 Francois Romieu <romieu@fr.zoreil.com> |
7 | 7 | ||
8 | Based on r8169.c, tg3.c, 8139cp.c, skge.c and probably even epic100.c. | 8 | Based on r8169.c, tg3.c, 8139cp.c, skge.c, epic100.c and SiS 190/191 |
9 | genuine driver. | ||
9 | 10 | ||
10 | This software may be used and distributed according to the terms of | 11 | This software may be used and distributed according to the terms of |
11 | the GNU General Public License (GPL), incorporated herein by reference. | 12 | the GNU General Public License (GPL), incorporated herein by reference. |
@@ -221,6 +222,16 @@ enum _DescStatusBit { | |||
221 | RxSizeMask = 0x0000ffff | 222 | RxSizeMask = 0x0000ffff |
222 | }; | 223 | }; |
223 | 224 | ||
225 | enum sis190_eeprom_access_register_bits { | ||
226 | EECS = 0x00000001, // unused | ||
227 | EECLK = 0x00000002, // unused | ||
228 | EEDO = 0x00000008, // unused | ||
229 | EEDI = 0x00000004, // unused | ||
230 | EEREQ = 0x00000080, | ||
231 | EEROP = 0x00000200, | ||
232 | EEWOP = 0x00000100 // unused | ||
233 | }; | ||
234 | |||
224 | struct sis190_private { | 235 | struct sis190_private { |
225 | void __iomem *mmio_addr; | 236 | void __iomem *mmio_addr; |
226 | struct pci_dev *pci_dev; | 237 | struct pci_dev *pci_dev; |
@@ -333,27 +344,24 @@ static int __mdio_read(struct net_device *dev, int phy_id, int reg) | |||
333 | return mdio_read(tp->mmio_addr, reg); | 344 | return mdio_read(tp->mmio_addr, reg); |
334 | } | 345 | } |
335 | 346 | ||
336 | static int sis190_read_eeprom(void __iomem *ioaddr, u32 reg) | 347 | static u16 __devinit sis190_read_eeprom(void __iomem *ioaddr, u32 reg) |
337 | { | 348 | { |
349 | u16 data = 0xffff; | ||
338 | unsigned int i; | 350 | unsigned int i; |
339 | u16 data; | ||
340 | u32 val; | ||
341 | 351 | ||
342 | if (!(SIS_R32(ROMControl) & 0x0002)) | 352 | if (!(SIS_R32(ROMControl) & 0x0002)) |
343 | return 0; | 353 | return 0; |
344 | 354 | ||
345 | val = (0x0080 | (0x2 << 8) | (reg << 10)); | 355 | SIS_W32(ROMInterface, EEREQ | EEROP | (reg << 10)); |
346 | |||
347 | SIS_W32(ROMInterface, val); | ||
348 | 356 | ||
349 | for (i = 0; i < 200; i++) { | 357 | for (i = 0; i < 200; i++) { |
350 | if (!(SIS_R32(ROMInterface) & 0x0080)) | 358 | if (!(SIS_R32(ROMInterface) & EEREQ)) { |
359 | data = (SIS_R32(ROMInterface) & 0xffff0000) >> 16; | ||
351 | break; | 360 | break; |
361 | } | ||
352 | msleep(1); | 362 | msleep(1); |
353 | } | 363 | } |
354 | 364 | ||
355 | data = (u16) ((SIS_R32(ROMInterface) & 0xffff0000) >> 16); | ||
356 | |||
357 | return data; | 365 | return data; |
358 | } | 366 | } |
359 | 367 | ||