Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1/*******************************************************************************
   2 *
   3 *  Linux ThunderLAN Driver
   4 *
   5 *  tlan.c
   6 *  by James Banks
   7 *
   8 *  (C) 1997-1998 Caldera, Inc.
   9 *  (C) 1998 James Banks
  10 *  (C) 1999-2001 Torben Mathiasen
  11 *  (C) 2002 Samuel Chessman
  12 *
  13 *  This software may be used and distributed according to the terms
  14 *  of the GNU General Public License, incorporated herein by reference.
  15 *
  16 ** Useful (if not required) reading:
  17 *
  18 *		Texas Instruments, ThunderLAN Programmer's Guide,
  19 *			TI Literature Number SPWU013A
  20 *			available in PDF format from www.ti.com
  21 *		Level One, LXT901 and LXT970 Data Sheets
  22 *			available in PDF format from www.level1.com
  23 *		National Semiconductor, DP83840A Data Sheet
  24 *			available in PDF format from www.national.com
  25 *		Microchip Technology, 24C01A/02A/04A Data Sheet
  26 *			available in PDF format from www.microchip.com
  27 *
  28 ******************************************************************************/
  29
  30#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  31
  32#include <linux/hardirq.h>
  33#include <linux/module.h>
  34#include <linux/init.h>
  35#include <linux/interrupt.h>
  36#include <linux/ioport.h>
  37#include <linux/eisa.h>
  38#include <linux/pci.h>
  39#include <linux/dma-mapping.h>
  40#include <linux/netdevice.h>
  41#include <linux/etherdevice.h>
  42#include <linux/delay.h>
  43#include <linux/spinlock.h>
  44#include <linux/workqueue.h>
  45#include <linux/mii.h>
  46
  47#include "tlan.h"
  48
  49
  50/* For removing EISA devices */
  51static	struct net_device	*tlan_eisa_devices;
  52
  53static	int		tlan_devices_installed;
  54
  55/* Set speed, duplex and aui settings */
  56static  int aui[MAX_TLAN_BOARDS];
  57static  int duplex[MAX_TLAN_BOARDS];
  58static  int speed[MAX_TLAN_BOARDS];
  59static  int boards_found;
  60module_param_array(aui, int, NULL, 0);
  61module_param_array(duplex, int, NULL, 0);
  62module_param_array(speed, int, NULL, 0);
  63MODULE_PARM_DESC(aui, "ThunderLAN use AUI port(s) (0-1)");
  64MODULE_PARM_DESC(duplex,
  65		 "ThunderLAN duplex setting(s) (0-default, 1-half, 2-full)");
  66MODULE_PARM_DESC(speed, "ThunderLAN port speed setting(s) (0,10,100)");
  67
  68MODULE_AUTHOR("Maintainer: Samuel Chessman <chessman@tux.org>");
  69MODULE_DESCRIPTION("Driver for TI ThunderLAN based ethernet PCI adapters");
  70MODULE_LICENSE("GPL");
  71
  72/* Turn on debugging.
  73 * See Documentation/networking/device_drivers/ethernet/ti/tlan.rst for details
  74 */
  75static  int		debug;
  76module_param(debug, int, 0);
  77MODULE_PARM_DESC(debug, "ThunderLAN debug mask");
  78
  79static	const char tlan_signature[] = "TLAN";
  80static  const char tlan_banner[] = "ThunderLAN driver v1.17\n";
  81static  int tlan_have_pci;
  82static  int tlan_have_eisa;
  83
  84static const char * const media[] = {
  85	"10BaseT-HD", "10BaseT-FD", "100baseTx-HD",
  86	"100BaseTx-FD", "100BaseT4", NULL
  87};
  88
  89static struct board {
  90	const char	*device_label;
  91	u32		flags;
  92	u16		addr_ofs;
  93} board_info[] = {
  94	{ "Compaq Netelligent 10 T PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
  95	{ "Compaq Netelligent 10/100 TX PCI UTP",
  96	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
  97	{ "Compaq Integrated NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
  98	{ "Compaq NetFlex-3/P",
  99	  TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
 100	{ "Compaq NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 },
 101	{ "Compaq Netelligent Integrated 10/100 TX UTP",
 102	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
 103	{ "Compaq Netelligent Dual 10/100 TX PCI UTP",
 104	  TLAN_ADAPTER_NONE, 0x83 },
 105	{ "Compaq Netelligent 10/100 TX Embedded UTP",
 106	  TLAN_ADAPTER_NONE, 0x83 },
 107	{ "Olicom OC-2183/2185", TLAN_ADAPTER_USE_INTERN_10, 0x83 },
 108	{ "Olicom OC-2325", TLAN_ADAPTER_ACTIVITY_LED |
 109	  TLAN_ADAPTER_UNMANAGED_PHY, 0xf8 },
 110	{ "Olicom OC-2326", TLAN_ADAPTER_ACTIVITY_LED |
 111	  TLAN_ADAPTER_USE_INTERN_10, 0xf8 },
 112	{ "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 },
 113	{ "Compaq Netelligent 10 T/2 PCI UTP/coax", TLAN_ADAPTER_NONE, 0x83 },
 114	{ "Compaq NetFlex-3/E",
 115	  TLAN_ADAPTER_ACTIVITY_LED |	/* EISA card */
 116	  TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 },
 117	{ "Compaq NetFlex-3/E",
 118	  TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */
 119};
 120
 121static const struct pci_device_id tlan_pci_tbl[] = {
 122	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL10,
 123	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
 124	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100,
 125	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
 126	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3I,
 127	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
 128	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_THUNDER,
 129	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
 130	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3B,
 131	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 },
 132	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100PI,
 133	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 },
 134	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100D,
 135	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 },
 136	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100I,
 137	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 },
 138	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2183,
 139	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 },
 140	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2325,
 141	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 },
 142	{ PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326,
 143	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
 144	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100,
 145	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
 146	{ PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_T2,
 147	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
 148	{ 0,}
 149};
 150MODULE_DEVICE_TABLE(pci, tlan_pci_tbl);
 151
 152static void	tlan_eisa_probe(void);
 153static void	tlan_eisa_cleanup(void);
 154static int      tlan_init(struct net_device *);
 155static int	tlan_open(struct net_device *dev);
 156static netdev_tx_t tlan_start_tx(struct sk_buff *, struct net_device *);
 157static irqreturn_t tlan_handle_interrupt(int, void *);
 158static int	tlan_close(struct net_device *);
 159static struct	net_device_stats *tlan_get_stats(struct net_device *);
 160static void	tlan_set_multicast_list(struct net_device *);
 161static int	tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 162static int      tlan_probe1(struct pci_dev *pdev, long ioaddr,
 163			    int irq, int rev, const struct pci_device_id *ent);
 164static void	tlan_tx_timeout(struct net_device *dev, unsigned int txqueue);
 165static void	tlan_tx_timeout_work(struct work_struct *work);
 166static int	tlan_init_one(struct pci_dev *pdev,
 167			      const struct pci_device_id *ent);
 168
 169static u32	tlan_handle_tx_eof(struct net_device *, u16);
 170static u32	tlan_handle_stat_overflow(struct net_device *, u16);
 171static u32	tlan_handle_rx_eof(struct net_device *, u16);
 172static u32	tlan_handle_dummy(struct net_device *, u16);
 173static u32	tlan_handle_tx_eoc(struct net_device *, u16);
 174static u32	tlan_handle_status_check(struct net_device *, u16);
 175static u32	tlan_handle_rx_eoc(struct net_device *, u16);
 176
 177static void	tlan_timer(struct timer_list *t);
 178static void	tlan_phy_monitor(struct timer_list *t);
 179
 180static void	tlan_reset_lists(struct net_device *);
 181static void	tlan_free_lists(struct net_device *);
 182static void	tlan_print_dio(u16);
 183static void	tlan_print_list(struct tlan_list *, char *, int);
 184static void	tlan_read_and_clear_stats(struct net_device *, int);
 185static void	tlan_reset_adapter(struct net_device *);
 186static void	tlan_finish_reset(struct net_device *);
 187static void	tlan_set_mac(struct net_device *, int areg, char *mac);
 188
 189static void	tlan_phy_print(struct net_device *);
 190static void	tlan_phy_detect(struct net_device *);
 191static void	tlan_phy_power_down(struct net_device *);
 192static void	tlan_phy_power_up(struct net_device *);
 193static void	tlan_phy_reset(struct net_device *);
 194static void	tlan_phy_start_link(struct net_device *);
 195static void	tlan_phy_finish_auto_neg(struct net_device *);
 196
 197/*
 198  static int	tlan_phy_nop(struct net_device *);
 199  static int	tlan_phy_internal_check(struct net_device *);
 200  static int	tlan_phy_internal_service(struct net_device *);
 201  static int	tlan_phy_dp83840a_check(struct net_device *);
 202*/
 203
 204static bool	tlan_mii_read_reg(struct net_device *, u16, u16, u16 *);
 205static void	tlan_mii_send_data(u16, u32, unsigned);
 206static void	tlan_mii_sync(u16);
 207static void	tlan_mii_write_reg(struct net_device *, u16, u16, u16);
 208
 209static void	tlan_ee_send_start(u16);
 210static int	tlan_ee_send_byte(u16, u8, int);
 211static void	tlan_ee_receive_byte(u16, u8 *, int);
 212static int	tlan_ee_read_byte(struct net_device *, u8, u8 *);
 213
 214
 215static inline void
 216tlan_store_skb(struct tlan_list *tag, struct sk_buff *skb)
 217{
 218	unsigned long addr = (unsigned long)skb;
 219	tag->buffer[9].address = addr;
 220	tag->buffer[8].address = upper_32_bits(addr);
 221}
 222
 223static inline struct sk_buff *
 224tlan_get_skb(const struct tlan_list *tag)
 225{
 226	unsigned long addr;
 227
 228	addr = tag->buffer[9].address;
 229	addr |= ((unsigned long) tag->buffer[8].address << 16) << 16;
 230	return (struct sk_buff *) addr;
 231}
 232
 233static u32
 234(*tlan_int_vector[TLAN_INT_NUMBER_OF_INTS])(struct net_device *, u16) = {
 235	NULL,
 236	tlan_handle_tx_eof,
 237	tlan_handle_stat_overflow,
 238	tlan_handle_rx_eof,
 239	tlan_handle_dummy,
 240	tlan_handle_tx_eoc,
 241	tlan_handle_status_check,
 242	tlan_handle_rx_eoc
 243};
 244
 245static inline void
 246tlan_set_timer(struct net_device *dev, u32 ticks, u32 type)
 247{
 248	struct tlan_priv *priv = netdev_priv(dev);
 249	unsigned long flags = 0;
 250
 251	if (!in_irq())
 252		spin_lock_irqsave(&priv->lock, flags);
 253	if (priv->timer.function != NULL &&
 254	    priv->timer_type != TLAN_TIMER_ACTIVITY) {
 255		if (!in_irq())
 256			spin_unlock_irqrestore(&priv->lock, flags);
 257		return;
 258	}
 259	priv->timer.function = tlan_timer;
 260	if (!in_irq())
 261		spin_unlock_irqrestore(&priv->lock, flags);
 262
 263	priv->timer_set_at = jiffies;
 264	priv->timer_type = type;
 265	mod_timer(&priv->timer, jiffies + ticks);
 266
 267}
 268
 269
 270/*****************************************************************************
 271******************************************************************************
 272
 273ThunderLAN driver primary functions
 274
 275these functions are more or less common to all linux network drivers.
 276
 277******************************************************************************
 278*****************************************************************************/
 279
 280
 281
 282
 283
 284/***************************************************************
 285 *	tlan_remove_one
 286 *
 287 *	Returns:
 288 *		Nothing
 289 *	Parms:
 290 *		None
 291 *
 292 *	Goes through the TLanDevices list and frees the device
 293 *	structs and memory associated with each device (lists
 294 *	and buffers).  It also ureserves the IO port regions
 295 *	associated with this device.
 296 *
 297 **************************************************************/
 298
 299
 300static void tlan_remove_one(struct pci_dev *pdev)
 301{
 302	struct net_device *dev = pci_get_drvdata(pdev);
 303	struct tlan_priv	*priv = netdev_priv(dev);
 304
 305	unregister_netdev(dev);
 306
 307	if (priv->dma_storage) {
 308		pci_free_consistent(priv->pci_dev,
 309				    priv->dma_size, priv->dma_storage,
 310				    priv->dma_storage_dma);
 311	}
 312
 313#ifdef CONFIG_PCI
 314	pci_release_regions(pdev);
 315#endif
 316
 317	free_netdev(dev);
 318
 319	cancel_work_sync(&priv->tlan_tqueue);
 320}
 321
 322static void tlan_start(struct net_device *dev)
 323{
 324	tlan_reset_lists(dev);
 325	/* NOTE: It might not be necessary to read the stats before a
 326	   reset if you don't care what the values are.
 327	*/
 328	tlan_read_and_clear_stats(dev, TLAN_IGNORE);
 329	tlan_reset_adapter(dev);
 330	netif_wake_queue(dev);
 331}
 332
 333static void tlan_stop(struct net_device *dev)
 334{
 335	struct tlan_priv *priv = netdev_priv(dev);
 336
 337	del_timer_sync(&priv->media_timer);
 338	tlan_read_and_clear_stats(dev, TLAN_RECORD);
 339	outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD);
 340	/* Reset and power down phy */
 341	tlan_reset_adapter(dev);
 342	if (priv->timer.function != NULL) {
 343		del_timer_sync(&priv->timer);
 344		priv->timer.function = NULL;
 345	}
 346}
 347
 348static int __maybe_unused tlan_suspend(struct device *dev_d)
 349{
 350	struct net_device *dev = dev_get_drvdata(dev_d);
 351
 352	if (netif_running(dev))
 353		tlan_stop(dev);
 354
 355	netif_device_detach(dev);
 356
 357	return 0;
 358}
 359
 360static int __maybe_unused tlan_resume(struct device *dev_d)
 361{
 362	struct net_device *dev = dev_get_drvdata(dev_d);
 363	netif_device_attach(dev);
 364
 365	if (netif_running(dev))
 366		tlan_start(dev);
 367
 368	return 0;
 369}
 370
 371static SIMPLE_DEV_PM_OPS(tlan_pm_ops, tlan_suspend, tlan_resume);
 372
 373static struct pci_driver tlan_driver = {
 374	.name		= "tlan",
 375	.id_table	= tlan_pci_tbl,
 376	.probe		= tlan_init_one,
 377	.remove		= tlan_remove_one,
 378	.driver.pm	= &tlan_pm_ops,
 379};
 380
 381static int __init tlan_probe(void)
 382{
 383	int rc = -ENODEV;
 384
 385	pr_info("%s", tlan_banner);
 386
 387	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n");
 388
 389	/* Use new style PCI probing. Now the kernel will
 390	   do most of this for us */
 391	rc = pci_register_driver(&tlan_driver);
 392
 393	if (rc != 0) {
 394		pr_err("Could not register pci driver\n");
 395		goto err_out_pci_free;
 396	}
 397
 398	TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n");
 399	tlan_eisa_probe();
 400
 401	pr_info("%d device%s installed, PCI: %d  EISA: %d\n",
 402		tlan_devices_installed, tlan_devices_installed == 1 ? "" : "s",
 403		tlan_have_pci, tlan_have_eisa);
 404
 405	if (tlan_devices_installed == 0) {
 406		rc = -ENODEV;
 407		goto  err_out_pci_unreg;
 408	}
 409	return 0;
 410
 411err_out_pci_unreg:
 412	pci_unregister_driver(&tlan_driver);
 413err_out_pci_free:
 414	return rc;
 415}
 416
 417
 418static int tlan_init_one(struct pci_dev *pdev,
 419				   const struct pci_device_id *ent)
 420{
 421	return tlan_probe1(pdev, -1, -1, 0, ent);
 422}
 423
 424
 425/*
 426***************************************************************
 427*	tlan_probe1
 428*
 429*	Returns:
 430*		0 on success, error code on error
 431*	Parms:
 432*		none
 433*
 434*	The name is lower case to fit in with all the rest of
 435*	the netcard_probe names.  This function looks for
 436*	another TLan based adapter, setting it up with the
 437*	allocated device struct if one is found.
 438*	tlan_probe has been ported to the new net API and
 439*	now allocates its own device structure. This function
 440*	is also used by modules.
 441*
 442**************************************************************/
 443
 444static int tlan_probe1(struct pci_dev *pdev, long ioaddr, int irq, int rev,
 445		       const struct pci_device_id *ent)
 446{
 447
 448	struct net_device  *dev;
 449	struct tlan_priv  *priv;
 450	u16		   device_id;
 451	int		   reg, rc = -ENODEV;
 452
 453#ifdef CONFIG_PCI
 454	if (pdev) {
 455		rc = pci_enable_device(pdev);
 456		if (rc)
 457			return rc;
 458
 459		rc = pci_request_regions(pdev, tlan_signature);
 460		if (rc) {
 461			pr_err("Could not reserve IO regions\n");
 462			goto err_out;
 463		}
 464	}
 465#endif  /*  CONFIG_PCI  */
 466
 467	dev = alloc_etherdev(sizeof(struct tlan_priv));
 468	if (dev == NULL) {
 469		rc = -ENOMEM;
 470		goto err_out_regions;
 471	}
 472	SET_NETDEV_DEV(dev, &pdev->dev);
 473
 474	priv = netdev_priv(dev);
 475
 476	priv->pci_dev = pdev;
 477	priv->dev = dev;
 478
 479	/* Is this a PCI device? */
 480	if (pdev) {
 481		u32		   pci_io_base = 0;
 482
 483		priv->adapter = &board_info[ent->driver_data];
 484
 485		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
 486		if (rc) {
 487			pr_err("No suitable PCI mapping available\n");
 488			goto err_out_free_dev;
 489		}
 490
 491		for (reg = 0; reg <= 5; reg++) {
 492			if (pci_resource_flags(pdev, reg) & IORESOURCE_IO) {
 493				pci_io_base = pci_resource_start(pdev, reg);
 494				TLAN_DBG(TLAN_DEBUG_GNRL,
 495					 "IO mapping is available at %x.\n",
 496					 pci_io_base);
 497				break;
 498			}
 499		}
 500		if (!pci_io_base) {
 501			pr_err("No IO mappings available\n");
 502			rc = -EIO;
 503			goto err_out_free_dev;
 504		}
 505
 506		dev->base_addr = pci_io_base;
 507		dev->irq = pdev->irq;
 508		priv->adapter_rev = pdev->revision;
 509		pci_set_master(pdev);
 510		pci_set_drvdata(pdev, dev);
 511
 512	} else	{     /* EISA card */
 513		/* This is a hack. We need to know which board structure
 514		 * is suited for this adapter */
 515		device_id = inw(ioaddr + EISA_ID2);
 516		if (device_id == 0x20F1) {
 517			priv->adapter = &board_info[13]; /* NetFlex-3/E */
 518			priv->adapter_rev = 23;		/* TLAN 2.3 */
 519		} else {
 520			priv->adapter = &board_info[14];
 521			priv->adapter_rev = 10;		/* TLAN 1.0 */
 522		}
 523		dev->base_addr = ioaddr;
 524		dev->irq = irq;
 525	}
 526
 527	/* Kernel parameters */
 528	if (dev->mem_start) {
 529		priv->aui    = dev->mem_start & 0x01;
 530		priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0
 531			: (dev->mem_start & 0x06) >> 1;
 532		priv->speed  = ((dev->mem_start & 0x18) == 0x18) ? 0
 533			: (dev->mem_start & 0x18) >> 3;
 534
 535		if (priv->speed == 0x1)
 536			priv->speed = TLAN_SPEED_10;
 537		else if (priv->speed == 0x2)
 538			priv->speed = TLAN_SPEED_100;
 539
 540		debug = priv->debug = dev->mem_end;
 541	} else {
 542		priv->aui    = aui[boards_found];
 543		priv->speed  = speed[boards_found];
 544		priv->duplex = duplex[boards_found];
 545		priv->debug = debug;
 546	}
 547
 548	/* This will be used when we get an adapter error from
 549	 * within our irq handler */
 550	INIT_WORK(&priv->tlan_tqueue, tlan_tx_timeout_work);
 551
 552	spin_lock_init(&priv->lock);
 553
 554	rc = tlan_init(dev);
 555	if (rc) {
 556		pr_err("Could not set up device\n");
 557		goto err_out_free_dev;
 558	}
 559
 560	rc = register_netdev(dev);
 561	if (rc) {
 562		pr_err("Could not register device\n");
 563		goto err_out_uninit;
 564	}
 565
 566
 567	tlan_devices_installed++;
 568	boards_found++;
 569
 570	/* pdev is NULL if this is an EISA device */
 571	if (pdev)
 572		tlan_have_pci++;
 573	else {
 574		priv->next_device = tlan_eisa_devices;
 575		tlan_eisa_devices = dev;
 576		tlan_have_eisa++;
 577	}
 578
 579	netdev_info(dev, "irq=%2d, io=%04x, %s, Rev. %d\n",
 580		    (int)dev->irq,
 581		    (int)dev->base_addr,
 582		    priv->adapter->device_label,
 583		    priv->adapter_rev);
 584	return 0;
 585
 586err_out_uninit:
 587	pci_free_consistent(priv->pci_dev, priv->dma_size, priv->dma_storage,
 588			    priv->dma_storage_dma);
 589err_out_free_dev:
 590	free_netdev(dev);
 591err_out_regions:
 592#ifdef CONFIG_PCI
 593	if (pdev)
 594		pci_release_regions(pdev);
 595err_out:
 596#endif
 597	if (pdev)
 598		pci_disable_device(pdev);
 599	return rc;
 600}
 601
 602
 603static void tlan_eisa_cleanup(void)
 604{
 605	struct net_device *dev;
 606	struct tlan_priv *priv;
 607
 608	while (tlan_have_eisa) {
 609		dev = tlan_eisa_devices;
 610		priv = netdev_priv(dev);
 611		if (priv->dma_storage) {
 612			pci_free_consistent(priv->pci_dev, priv->dma_size,
 613					    priv->dma_storage,
 614					    priv->dma_storage_dma);
 615		}
 616		release_region(dev->base_addr, 0x10);
 617		unregister_netdev(dev);
 618		tlan_eisa_devices = priv->next_device;
 619		free_netdev(dev);
 620		tlan_have_eisa--;
 621	}
 622}
 623
 624
 625static void __exit tlan_exit(void)
 626{
 627	pci_unregister_driver(&tlan_driver);
 628
 629	if (tlan_have_eisa)
 630		tlan_eisa_cleanup();
 631
 632}
 633
 634
 635/* Module loading/unloading */
 636module_init(tlan_probe);
 637module_exit(tlan_exit);
 638
 639
 640
 641/**************************************************************
 642 *	tlan_eisa_probe
 643 *
 644 *	Returns: 0 on success, 1 otherwise
 645 *
 646 *	Parms:	 None
 647 *
 648 *
 649 *	This functions probes for EISA devices and calls
 650 *	TLan_probe1 when one is found.
 651 *
 652 *************************************************************/
 653
 654static void  __init tlan_eisa_probe(void)
 655{
 656	long	ioaddr;
 657	int	rc = -ENODEV;
 658	int	irq;
 659	u16	device_id;
 660
 661	if (!EISA_bus) {
 662		TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n");
 663		return;
 664	}
 665
 666	/* Loop through all slots of the EISA bus */
 667	for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {
 668
 669		TLAN_DBG(TLAN_DEBUG_PROBE, "EISA_ID 0x%4x: 0x%4x\n",
 670			 (int) ioaddr + 0xc80, inw(ioaddr + EISA_ID));
 671		TLAN_DBG(TLAN_DEBUG_PROBE, "EISA_ID 0x%4x: 0x%4x\n",
 672			 (int) ioaddr + 0xc82, inw(ioaddr + EISA_ID2));
 673
 674
 675		TLAN_DBG(TLAN_DEBUG_PROBE,
 676			 "Probing for EISA adapter at IO: 0x%4x : ",
 677			 (int) ioaddr);
 678		if (request_region(ioaddr, 0x10, tlan_signature) == NULL)
 679			goto out;
 680
 681		if (inw(ioaddr + EISA_ID) != 0x110E) {
 682			release_region(ioaddr, 0x10);
 683			goto out;
 684		}
 685
 686		device_id = inw(ioaddr + EISA_ID2);
 687		if (device_id !=  0x20F1 && device_id != 0x40F1) {
 688			release_region(ioaddr, 0x10);
 689			goto out;
 690		}
 691
 692		/* check if adapter is enabled */
 693		if (inb(ioaddr + EISA_CR) != 0x1) {
 694			release_region(ioaddr, 0x10);
 695			goto out2;
 696		}
 697
 698		if (debug == 0x10)
 699			pr_info("Found one\n");
 700
 701
 702		/* Get irq from board */
 703		switch (inb(ioaddr + 0xcc0)) {
 704		case(0x10):
 705			irq = 5;
 706			break;
 707		case(0x20):
 708			irq = 9;
 709			break;
 710		case(0x40):
 711			irq = 10;
 712			break;
 713		case(0x80):
 714			irq = 11;
 715			break;
 716		default:
 717			goto out;
 718		}
 719
 720
 721		/* Setup the newly found eisa adapter */
 722		rc = tlan_probe1(NULL, ioaddr, irq,
 723				 12, NULL);
 724		continue;
 725
 726out:
 727		if (debug == 0x10)
 728			pr_info("None found\n");
 729		continue;
 730
 731out2:
 732		if (debug == 0x10)
 733			pr_info("Card found but it is not enabled, skipping\n");
 734		continue;
 735
 736	}
 737
 738}
 739
 740#ifdef CONFIG_NET_POLL_CONTROLLER
 741static void tlan_poll(struct net_device *dev)
 742{
 743	disable_irq(dev->irq);
 744	tlan_handle_interrupt(dev->irq, dev);
 745	enable_irq(dev->irq);
 746}
 747#endif
 748
 749static const struct net_device_ops tlan_netdev_ops = {
 750	.ndo_open		= tlan_open,
 751	.ndo_stop		= tlan_close,
 752	.ndo_start_xmit		= tlan_start_tx,
 753	.ndo_tx_timeout		= tlan_tx_timeout,
 754	.ndo_get_stats		= tlan_get_stats,
 755	.ndo_set_rx_mode	= tlan_set_multicast_list,
 756	.ndo_do_ioctl		= tlan_ioctl,
 757	.ndo_set_mac_address	= eth_mac_addr,
 758	.ndo_validate_addr	= eth_validate_addr,
 759#ifdef CONFIG_NET_POLL_CONTROLLER
 760	.ndo_poll_controller	 = tlan_poll,
 761#endif
 762};
 763
 764static void tlan_get_drvinfo(struct net_device *dev,
 765			     struct ethtool_drvinfo *info)
 766{
 767	struct tlan_priv *priv = netdev_priv(dev);
 768
 769	strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
 770	if (priv->pci_dev)
 771		strlcpy(info->bus_info, pci_name(priv->pci_dev),
 772			sizeof(info->bus_info));
 773	else
 774		strlcpy(info->bus_info, "EISA",	sizeof(info->bus_info));
 775}
 776
 777static int tlan_get_eeprom_len(struct net_device *dev)
 778{
 779	return TLAN_EEPROM_SIZE;
 780}
 781
 782static int tlan_get_eeprom(struct net_device *dev,
 783			   struct ethtool_eeprom *eeprom, u8 *data)
 784{
 785	int i;
 786
 787	for (i = 0; i < TLAN_EEPROM_SIZE; i++)
 788		if (tlan_ee_read_byte(dev, i, &data[i]))
 789			return -EIO;
 790
 791	return 0;
 792}
 793
 794static const struct ethtool_ops tlan_ethtool_ops = {
 795	.get_drvinfo	= tlan_get_drvinfo,
 796	.get_link	= ethtool_op_get_link,
 797	.get_eeprom_len	= tlan_get_eeprom_len,
 798	.get_eeprom	= tlan_get_eeprom,
 799};
 800
 801/***************************************************************
 802 *	tlan_init
 803 *
 804 *	Returns:
 805 *		0 on success, error code otherwise.
 806 *	Parms:
 807 *		dev	The structure of the device to be
 808 *			init'ed.
 809 *
 810 *	This function completes the initialization of the
 811 *	device structure and driver.  It reserves the IO
 812 *	addresses, allocates memory for the lists and bounce
 813 *	buffers, retrieves the MAC address from the eeprom
 814 *	and assignes the device's methods.
 815 *
 816 **************************************************************/
 817
 818static int tlan_init(struct net_device *dev)
 819{
 820	int		dma_size;
 821	int		err;
 822	int		i;
 823	struct tlan_priv	*priv;
 824
 825	priv = netdev_priv(dev);
 826
 827	dma_size = (TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS)
 828		* (sizeof(struct tlan_list));
 829	priv->dma_storage = pci_alloc_consistent(priv->pci_dev,
 830						 dma_size,
 831						 &priv->dma_storage_dma);
 832	priv->dma_size = dma_size;
 833
 834	if (priv->dma_storage == NULL) {
 835		pr_err("Could not allocate lists and buffers for %s\n",
 836		       dev->name);
 837		return -ENOMEM;
 838	}
 839	priv->rx_list = (struct tlan_list *)
 840		ALIGN((unsigned long)priv->dma_storage, 8);
 841	priv->rx_list_dma = ALIGN(priv->dma_storage_dma, 8);
 842	priv->tx_list = priv->rx_list + TLAN_NUM_RX_LISTS;
 843	priv->tx_list_dma =
 844		priv->rx_list_dma + sizeof(struct tlan_list)*TLAN_NUM_RX_LISTS;
 845
 846	err = 0;
 847	for (i = 0; i < ETH_ALEN; i++)
 848		err |= tlan_ee_read_byte(dev,
 849					 (u8) priv->adapter->addr_ofs + i,
 850					 (u8 *) &dev->dev_addr[i]);
 851	if (err) {
 852		pr_err("%s: Error reading MAC from eeprom: %d\n",
 853		       dev->name, err);
 854	}
 855	/* Olicom OC-2325/OC-2326 have the address byte-swapped */
 856	if (priv->adapter->addr_ofs == 0xf8) {
 857		for (i = 0; i < ETH_ALEN; i += 2) {
 858			char tmp = dev->dev_addr[i];
 859			dev->dev_addr[i] = dev->dev_addr[i + 1];
 860			dev->dev_addr[i + 1] = tmp;
 861		}
 862	}
 863
 864	netif_carrier_off(dev);
 865
 866	/* Device methods */
 867	dev->netdev_ops = &tlan_netdev_ops;
 868	dev->ethtool_ops = &tlan_ethtool_ops;
 869	dev->watchdog_timeo = TX_TIMEOUT;
 870
 871	return 0;
 872
 873}
 874
 875
 876
 877
 878/***************************************************************
 879 *	tlan_open
 880 *
 881 *	Returns:
 882 *		0 on success, error code otherwise.
 883 *	Parms:
 884 *		dev	Structure of device to be opened.
 885 *
 886 *	This routine puts the driver and TLAN adapter in a
 887 *	state where it is ready to send and receive packets.
 888 *	It allocates the IRQ, resets and brings the adapter
 889 *	out of reset, and allows interrupts.  It also delays
 890 *	the startup for autonegotiation or sends a Rx GO
 891 *	command to the adapter, as appropriate.
 892 *
 893 **************************************************************/
 894
 895static int tlan_open(struct net_device *dev)
 896{
 897	struct tlan_priv	*priv = netdev_priv(dev);
 898	int		err;
 899
 900	priv->tlan_rev = tlan_dio_read8(dev->base_addr, TLAN_DEF_REVISION);
 901	err = request_irq(dev->irq, tlan_handle_interrupt, IRQF_SHARED,
 902			  dev->name, dev);
 903
 904	if (err) {
 905		netdev_err(dev, "Cannot open because IRQ %d is already in use\n",
 906			   dev->irq);
 907		return err;
 908	}
 909
 910	timer_setup(&priv->timer, NULL, 0);
 911	timer_setup(&priv->media_timer, tlan_phy_monitor, 0);
 912
 913	tlan_start(dev);
 914
 915	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Opened.  TLAN Chip Rev: %x\n",
 916		 dev->name, priv->tlan_rev);
 917
 918	return 0;
 919
 920}
 921
 922
 923
 924/**************************************************************
 925 *	tlan_ioctl
 926 *
 927 *	Returns:
 928 *		0 on success, error code otherwise
 929 *	Params:
 930 *		dev	structure of device to receive ioctl.
 931 *
 932 *		rq	ifreq structure to hold userspace data.
 933 *
 934 *		cmd	ioctl command.
 935 *
 936 *
 937 *************************************************************/
 938
 939static int tlan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 940{
 941	struct tlan_priv *priv = netdev_priv(dev);
 942	struct mii_ioctl_data *data = if_mii(rq);
 943	u32 phy   = priv->phy[priv->phy_num];
 944
 945	if (!priv->phy_online)
 946		return -EAGAIN;
 947
 948	switch (cmd) {
 949	case SIOCGMIIPHY:		/* get address of MII PHY in use. */
 950		data->phy_id = phy;
 951		fallthrough;
 952
 953
 954	case SIOCGMIIREG:		/* read MII PHY register. */
 955		tlan_mii_read_reg(dev, data->phy_id & 0x1f,
 956				  data->reg_num & 0x1f, &data->val_out);
 957		return 0;
 958
 959
 960	case SIOCSMIIREG:		/* write MII PHY register. */
 961		tlan_mii_write_reg(dev, data->phy_id & 0x1f,
 962				   data->reg_num & 0x1f, data->val_in);
 963		return 0;
 964	default:
 965		return -EOPNOTSUPP;
 966	}
 967}
 968
 969
 970/***************************************************************
 971 *	tlan_tx_timeout
 972 *
 973 *	Returns: nothing
 974 *
 975 *	Params:
 976 *		dev	structure of device which timed out
 977 *			during transmit.
 978 *
 979 **************************************************************/
 980
 981static void tlan_tx_timeout(struct net_device *dev, unsigned int txqueue)
 982{
 983
 984	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name);
 985
 986	/* Ok so we timed out, lets see what we can do about it...*/
 987	tlan_free_lists(dev);
 988	tlan_reset_lists(dev);
 989	tlan_read_and_clear_stats(dev, TLAN_IGNORE);
 990	tlan_reset_adapter(dev);
 991	netif_trans_update(dev); /* prevent tx timeout */
 992	netif_wake_queue(dev);
 993
 994}
 995
 996
 997/***************************************************************
 998 *	tlan_tx_timeout_work
 999 *
1000 *	Returns: nothing
1001 *
1002 *	Params:
1003 *		work	work item of device which timed out
1004 *
1005 **************************************************************/
1006
1007static void tlan_tx_timeout_work(struct work_struct *work)
1008{
1009	struct tlan_priv	*priv =
1010		container_of(work, struct tlan_priv, tlan_tqueue);
1011
1012	tlan_tx_timeout(priv->dev, UINT_MAX);
1013}
1014
1015
1016
1017/***************************************************************
1018 *	tlan_start_tx
1019 *
1020 *	Returns:
1021 *		0 on success, non-zero on failure.
1022 *	Parms:
1023 *		skb	A pointer to the sk_buff containing the
1024 *			frame to be sent.
1025 *		dev	The device to send the data on.
1026 *
1027 *	This function adds a frame to the Tx list to be sent
1028 *	ASAP.  First it	verifies that the adapter is ready and
1029 *	there is room in the queue.  Then it sets up the next
1030 *	available list, copies the frame to the	corresponding
1031 *	buffer.  If the adapter Tx channel is idle, it gives
1032 *	the adapter a Tx Go command on the list, otherwise it
1033 *	sets the forward address of the previous list to point
1034 *	to this one.  Then it frees the sk_buff.
1035 *
1036 **************************************************************/
1037
1038static netdev_tx_t tlan_start_tx(struct sk_buff *skb, struct net_device *dev)
1039{
1040	struct tlan_priv *priv = netdev_priv(dev);
1041	dma_addr_t	tail_list_phys;
1042	struct tlan_list	*tail_list;
1043	unsigned long	flags;
1044	unsigned int    txlen;
1045
1046	if (!priv->phy_online) {
1047		TLAN_DBG(TLAN_DEBUG_TX, "TRANSMIT:  %s PHY is not ready\n",
1048			 dev->name);
1049		dev_kfree_skb_any(skb);
1050		return NETDEV_TX_OK;
1051	}
1052
1053	if (skb_padto(skb, TLAN_MIN_FRAME_SIZE))
1054		return NETDEV_TX_OK;
1055	txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE);
1056
1057	tail_list = priv->tx_list + priv->tx_tail;
1058	tail_list_phys =
1059		priv->tx_list_dma + sizeof(struct tlan_list)*priv->tx_tail;
1060
1061	if (tail_list->c_stat != TLAN_CSTAT_UNUSED) {
1062		TLAN_DBG(TLAN_DEBUG_TX,
1063			 "TRANSMIT:  %s is busy (Head=%d Tail=%d)\n",
1064			 dev->name, priv->tx_head, priv->tx_tail);
1065		netif_stop_queue(dev);
1066		priv->tx_busy_count++;
1067		return NETDEV_TX_BUSY;
1068	}
1069
1070	tail_list->forward = 0;
1071
1072	tail_list->buffer[0].address = pci_map_single(priv->pci_dev,
1073						      skb->data, txlen,
1074						      PCI_DMA_TODEVICE);
1075	tlan_store_skb(tail_list, skb);
1076
1077	tail_list->frame_size = (u16) txlen;
1078	tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen;
1079	tail_list->buffer[1].count = 0;
1080	tail_list->buffer[1].address = 0;
1081
1082	spin_lock_irqsave(&priv->lock, flags);
1083	tail_list->c_stat = TLAN_CSTAT_READY;
1084	if (!priv->tx_in_progress) {
1085		priv->tx_in_progress = 1;
1086		TLAN_DBG(TLAN_DEBUG_TX,
1087			 "TRANSMIT:  Starting TX on buffer %d\n",
1088			 priv->tx_tail);
1089		outl(tail_list_phys, dev->base_addr + TLAN_CH_PARM);
1090		outl(TLAN_HC_GO, dev->base_addr + TLAN_HOST_CMD);
1091	} else {
1092		TLAN_DBG(TLAN_DEBUG_TX,
1093			 "TRANSMIT:  Adding buffer %d to TX channel\n",
1094			 priv->tx_tail);
1095		if (priv->tx_tail == 0) {
1096			(priv->tx_list + (TLAN_NUM_TX_LISTS - 1))->forward
1097				= tail_list_phys;
1098		} else {
1099			(priv->tx_list + (priv->tx_tail - 1))->forward
1100				= tail_list_phys;
1101		}
1102	}
1103	spin_unlock_irqrestore(&priv->lock, flags);
1104
1105	CIRC_INC(priv->tx_tail, TLAN_NUM_TX_LISTS);
1106
1107	return NETDEV_TX_OK;
1108
1109}
1110
1111
1112
1113
1114/***************************************************************
1115 *	tlan_handle_interrupt
1116 *
1117 *	Returns:
1118 *		Nothing
1119 *	Parms:
1120 *		irq	The line on which the interrupt
1121 *			occurred.
1122 *		dev_id	A pointer to the device assigned to
1123 *			this irq line.
1124 *
1125 *	This function handles an interrupt generated by its
1126 *	assigned TLAN adapter.  The function deactivates
1127 *	interrupts on its adapter, records the type of
1128 *	interrupt, executes the appropriate subhandler, and
1129 *	acknowdges the interrupt to the adapter (thus
1130 *	re-enabling adapter interrupts.
1131 *
1132 **************************************************************/
1133
1134static irqreturn_t tlan_handle_interrupt(int irq, void *dev_id)
1135{
1136	struct net_device	*dev = dev_id;
1137	struct tlan_priv *priv = netdev_priv(dev);
1138	u16		host_int;
1139	u16		type;
1140
1141	spin_lock(&priv->lock);
1142
1143	host_int = inw(dev->base_addr + TLAN_HOST_INT);
1144	type = (host_int & TLAN_HI_IT_MASK) >> 2;
1145	if (type) {
1146		u32	ack;
1147		u32	host_cmd;
1148
1149		outw(host_int, dev->base_addr + TLAN_HOST_INT);
1150		ack = tlan_int_vector[type](dev, host_int);
1151
1152		if (ack) {
1153			host_cmd = TLAN_HC_ACK | ack | (type << 18);
1154			outl(host_cmd, dev->base_addr + TLAN_HOST_CMD);
1155		}
1156	}
1157
1158	spin_unlock(&priv->lock);
1159
1160	return IRQ_RETVAL(type);
1161}
1162
1163
1164
1165
1166/***************************************************************
1167 *	tlan_close
1168 *
1169 *	Returns:
1170 *		An error code.
1171 *	Parms:
1172 *		dev	The device structure of the device to
1173 *			close.
1174 *
1175 *	This function shuts down the adapter.  It records any
1176 *	stats, puts the adapter into reset state, deactivates
1177 *	its time as needed, and	frees the irq it is using.
1178 *
1179 **************************************************************/
1180
1181static int tlan_close(struct net_device *dev)
1182{
1183	tlan_stop(dev);
1184
1185	free_irq(dev->irq, dev);
1186	tlan_free_lists(dev);
1187	TLAN_DBG(TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name);
1188
1189	return 0;
1190
1191}
1192
1193
1194
1195
1196/***************************************************************
1197 *	tlan_get_stats
1198 *
1199 *	Returns:
1200 *		A pointer to the device's statistics structure.
1201 *	Parms:
1202 *		dev	The device structure to return the
1203 *			stats for.
1204 *
1205 *	This function updates the devices statistics by reading
1206 *	the TLAN chip's onboard registers.  Then it returns the
1207 *	address of the statistics structure.
1208 *
1209 **************************************************************/
1210
1211static struct net_device_stats *tlan_get_stats(struct net_device *dev)
1212{
1213	struct tlan_priv	*priv = netdev_priv(dev);
1214	int i;
1215
1216	/* Should only read stats if open ? */
1217	tlan_read_and_clear_stats(dev, TLAN_RECORD);
1218
1219	TLAN_DBG(TLAN_DEBUG_RX, "RECEIVE:  %s EOC count = %d\n", dev->name,
1220		 priv->rx_eoc_count);
1221	TLAN_DBG(TLAN_DEBUG_TX, "TRANSMIT:  %s Busy count = %d\n", dev->name,
1222		 priv->tx_busy_count);
1223	if (debug & TLAN_DEBUG_GNRL) {
1224		tlan_print_dio(dev->base_addr);
1225		tlan_phy_print(dev);
1226	}
1227	if (debug & TLAN_DEBUG_LIST) {
1228		for (i = 0; i < TLAN_NUM_RX_LISTS; i++)
1229			tlan_print_list(priv->rx_list + i, "RX", i);
1230		for (i = 0; i < TLAN_NUM_TX_LISTS; i++)
1231			tlan_print_list(priv->tx_list + i, "TX", i);
1232	}
1233
1234	return &dev->stats;
1235
1236}
1237
1238
1239
1240
1241/***************************************************************
1242 *	tlan_set_multicast_list
1243 *
1244 *	Returns:
1245 *		Nothing
1246 *	Parms:
1247 *		dev	The device structure to set the
1248 *			multicast list for.
1249 *
1250 *	This function sets the TLAN adaptor to various receive
1251 *	modes.  If the IFF_PROMISC flag is set, promiscuous
1252 *	mode is acitviated.  Otherwise,	promiscuous mode is
1253 *	turned off.  If the IFF_ALLMULTI flag is set, then
1254 *	the hash table is set to receive all group addresses.
1255 *	Otherwise, the first three multicast addresses are
1256 *	stored in AREG_1-3, and the rest are selected via the
1257 *	hash table, as necessary.
1258 *
1259 **************************************************************/
1260
1261static void tlan_set_multicast_list(struct net_device *dev)
1262{
1263	struct netdev_hw_addr *ha;
1264	u32			hash1 = 0;
1265	u32			hash2 = 0;
1266	int			i;
1267	u32			offset;
1268	u8			tmp;
1269
1270	if (dev->flags & IFF_PROMISC) {
1271		tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD);
1272		tlan_dio_write8(dev->base_addr,
1273				TLAN_NET_CMD, tmp | TLAN_NET_CMD_CAF);
1274	} else {
1275		tmp = tlan_dio_read8(dev->base_addr, TLAN_NET_CMD);
1276		tlan_dio_write8(dev->base_addr,
1277				TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF);
1278		if (dev->flags & IFF_ALLMULTI) {
1279			for (i = 0; i < 3; i++)
1280				tlan_set_mac(dev, i + 1, NULL);
1281			tlan_dio_write32(dev->base_addr, TLAN_HASH_1,
1282					 0xffffffff);
1283			tlan_dio_write32(dev->base_addr, TLAN_HASH_2,
1284					 0xffffffff);
1285		} else {
1286			i = 0;
1287			netdev_for_each_mc_addr(ha, dev) {
1288				if (i < 3) {
1289					tlan_set_mac(dev, i + 1,
1290						     (char *) &ha->addr);
1291				} else {
1292					offset =
1293						tlan_hash_func((u8 *)&ha->addr);
1294					if (offset < 32)
1295						hash1 |= (1 << offset);
1296					else
1297						hash2 |= (1 << (offset - 32));
1298				}
1299				i++;
1300			}
1301			for ( ; i < 3; i++)
1302				tlan_set_mac(dev, i + 1, NULL);
1303			tlan_dio_write32(dev->base_addr, TLAN_HASH_1, hash1);
1304			tlan_dio_write32(dev->base_addr, TLAN_HASH_2, hash2);
1305		}
1306	}
1307
1308}
1309
1310
1311
1312/*****************************************************************************
1313******************************************************************************
1314
1315ThunderLAN driver interrupt vectors and table
1316
1317please see chap. 4, "Interrupt Handling" of the "ThunderLAN
1318Programmer's Guide" for more informations on handling interrupts
1319generated by TLAN based adapters.
1320
1321******************************************************************************
1322*****************************************************************************/
1323
1324
1325
1326
1327/***************************************************************
1328 *	tlan_handle_tx_eof
1329 *
1330 *	Returns:
1331 *		1
1332 *	Parms:
1333 *		dev		Device assigned the IRQ that was
1334 *				raised.
1335 *		host_int	The contents of the HOST_INT
1336 *				port.
1337 *
1338 *	This function handles Tx EOF interrupts which are raised
1339 *	by the adapter when it has completed sending the
1340 *	contents of a buffer.  If detemines which list/buffer
1341 *	was completed and resets it.  If the buffer was the last
1342 *	in the channel (EOC), then the function checks to see if
1343 *	another buffer is ready to send, and if so, sends a Tx
1344 *	Go command.  Finally, the driver activates/continues the
1345 *	activity LED.
1346 *
1347 **************************************************************/
1348
1349static u32 tlan_handle_tx_eof(struct net_device *dev, u16 host_int)
1350{
1351	struct tlan_priv	*priv = netdev_priv(dev);
1352	int		eoc = 0;
1353	struct tlan_list	*head_list;
1354	dma_addr_t	head_list_phys;
1355	u32		ack = 0;
1356	u16		tmp_c_stat;
1357
1358	TLAN_DBG(TLAN_DEBUG_TX,
1359		 "TRANSMIT:  Handling TX EOF (Head=%d Tail=%d)\n",
1360		 priv->tx_head, priv->tx_tail);
1361	head_list = priv->tx_list + priv->tx_head;
1362
1363	while (((tmp_c_stat = head_list->c_stat) & TLAN_CSTAT_FRM_CMP)
1364	       && (ack < 255)) {
1365		struct sk_buff *skb = tlan_get_skb(head_list);
1366
1367		ack++;
1368		pci_unmap_single(priv->pci_dev, head_list->buffer[0].address,
1369				 max(skb->len,
1370				     (unsigned int)TLAN_MIN_FRAME_SIZE),
1371				 PCI_DMA_TODEVICE);
1372		dev_kfree_skb_any(skb);
1373		head_list->buffer[8].address = 0;
1374		head_list->buffer[9].address = 0;
1375
1376		if (tmp_c_stat & TLAN_CSTAT_EOC)
1377			eoc = 1;
1378
1379		dev->stats.tx_bytes += head_list->frame_size;
1380
1381		head_list->c_stat = TLAN_CSTAT_UNUSED;
1382		netif_start_queue(dev);
1383		CIRC_INC(priv->tx_head, TLAN_NUM_TX_LISTS);
1384		head_list = priv->tx_list + priv->tx_head;
1385	}
1386
1387	if (!ack)
1388		netdev_info(dev,
1389			    "Received interrupt for uncompleted TX frame\n");
1390
1391	if (eoc) {
1392		TLAN_DBG(TLAN_DEBUG_TX,
1393			 "TRANSMIT:  handling TX EOC (Head=%d Tail=%d)\n",
1394			 priv->tx_head, priv->tx_tail);
1395		head_list = priv->tx_list + priv->tx_head;
1396		head_list_phys = priv->tx_list_dma
1397			+ sizeof(struct tlan_list)*priv->tx_head;
1398		if ((head_list->c_stat & TLAN_CSTAT_READY)
1399		    == TLAN_CSTAT_READY) {
1400			outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1401			ack |= TLAN_HC_GO;
1402		} else {
1403			priv->tx_in_progress = 0;
1404		}
1405	}
1406
1407	if (priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED) {
1408		tlan_dio_write8(dev->base_addr,
1409				TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT);
1410		if (priv->timer.function == NULL) {
1411			priv->timer.function = tlan_timer;
1412			priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
1413			priv->timer_set_at = jiffies;
1414			priv->timer_type = TLAN_TIMER_ACTIVITY;
1415			add_timer(&priv->timer);
1416		} else if (priv->timer_type == TLAN_TIMER_ACTIVITY) {
1417			priv->timer_set_at = jiffies;
1418		}
1419	}
1420
1421	return ack;
1422
1423}
1424
1425
1426
1427
1428/***************************************************************
1429 *	TLan_HandleStatOverflow
1430 *
1431 *	Returns:
1432 *		1
1433 *	Parms:
1434 *		dev		Device assigned the IRQ that was
1435 *				raised.
1436 *		host_int	The contents of the HOST_INT
1437 *				port.
1438 *
1439 *	This function handles the Statistics Overflow interrupt
1440 *	which means that one or more of the TLAN statistics
1441 *	registers has reached 1/2 capacity and needs to be read.
1442 *
1443 **************************************************************/
1444
1445static u32 tlan_handle_stat_overflow(struct net_device *dev, u16 host_int)
1446{
1447	tlan_read_and_clear_stats(dev, TLAN_RECORD);
1448
1449	return 1;
1450
1451}
1452
1453
1454
1455
1456/***************************************************************
1457 *	TLan_HandleRxEOF
1458 *
1459 *	Returns:
1460 *		1
1461 *	Parms:
1462 *		dev		Device assigned the IRQ that was
1463 *				raised.
1464 *		host_int	The contents of the HOST_INT
1465 *				port.
1466 *
1467 *	This function handles the Rx EOF interrupt which
1468 *	indicates a frame has been received by the adapter from
1469 *	the net and the frame has been transferred to memory.
1470 *	The function determines the bounce buffer the frame has
1471 *	been loaded into, creates a new sk_buff big enough to
1472 *	hold the frame, and sends it to protocol stack.  It
1473 *	then resets the used buffer and appends it to the end
1474 *	of the list.  If the frame was the last in the Rx
1475 *	channel (EOC), the function restarts the receive channel
1476 *	by sending an Rx Go command to the adapter.  Then it
1477 *	activates/continues the activity LED.
1478 *
1479 **************************************************************/
1480
1481static u32 tlan_handle_rx_eof(struct net_device *dev, u16 host_int)
1482{
1483	struct tlan_priv	*priv = netdev_priv(dev);
1484	u32		ack = 0;
1485	int		eoc = 0;
1486	struct tlan_list	*head_list;
1487	struct sk_buff	*skb;
1488	struct tlan_list	*tail_list;
1489	u16		tmp_c_stat;
1490	dma_addr_t	head_list_phys;
1491
1492	TLAN_DBG(TLAN_DEBUG_RX, "RECEIVE:  handling RX EOF (Head=%d Tail=%d)\n",
1493		 priv->rx_head, priv->rx_tail);
1494	head_list = priv->rx_list + priv->rx_head;
1495	head_list_phys =
1496		priv->rx_list_dma + sizeof(struct tlan_list)*priv->rx_head;
1497
1498	while (((tmp_c_stat = head_list->c_stat) & TLAN_CSTAT_FRM_CMP)
1499	       && (ack < 255)) {
1500		dma_addr_t frame_dma = head_list->buffer[0].address;
1501		u32 frame_size = head_list->frame_size;
1502		struct sk_buff *new_skb;
1503
1504		ack++;
1505		if (tmp_c_stat & TLAN_CSTAT_EOC)
1506			eoc = 1;
1507
1508		new_skb = netdev_alloc_skb_ip_align(dev,
1509						    TLAN_MAX_FRAME_SIZE + 5);
1510		if (!new_skb)
1511			goto drop_and_reuse;
1512
1513		skb = tlan_get_skb(head_list);
1514		pci_unmap_single(priv->pci_dev, frame_dma,
1515				 TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
1516		skb_put(skb, frame_size);
1517
1518		dev->stats.rx_bytes += frame_size;
1519
1520		skb->protocol = eth_type_trans(skb, dev);
1521		netif_rx(skb);
1522
1523		head_list->buffer[0].address =
1524			pci_map_single(priv->pci_dev, new_skb->data,
1525				       TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
1526
1527		tlan_store_skb(head_list, new_skb);
1528drop_and_reuse:
1529		head_list->forward = 0;
1530		head_list->c_stat = 0;
1531		tail_list = priv->rx_list + priv->rx_tail;
1532		tail_list->forward = head_list_phys;
1533
1534		CIRC_INC(priv->rx_head, TLAN_NUM_RX_LISTS);
1535		CIRC_INC(priv->rx_tail, TLAN_NUM_RX_LISTS);
1536		head_list = priv->rx_list + priv->rx_head;
1537		head_list_phys = priv->rx_list_dma
1538			+ sizeof(struct tlan_list)*priv->rx_head;
1539	}
1540
1541	if (!ack)
1542		netdev_info(dev,
1543			    "Received interrupt for uncompleted RX frame\n");
1544
1545
1546	if (eoc) {
1547		TLAN_DBG(TLAN_DEBUG_RX,
1548			 "RECEIVE:  handling RX EOC (Head=%d Tail=%d)\n",
1549			 priv->rx_head, priv->rx_tail);
1550		head_list = priv->rx_list + priv->rx_head;
1551		head_list_phys = priv->rx_list_dma
1552			+ sizeof(struct tlan_list)*priv->rx_head;
1553		outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1554		ack |= TLAN_HC_GO | TLAN_HC_RT;
1555		priv->rx_eoc_count++;
1556	}
1557
1558	if (priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED) {
1559		tlan_dio_write8(dev->base_addr,
1560				TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT);
1561		if (priv->timer.function == NULL)  {
1562			priv->timer.function = tlan_timer;
1563			priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY;
1564			priv->timer_set_at = jiffies;
1565			priv->timer_type = TLAN_TIMER_ACTIVITY;
1566			add_timer(&priv->timer);
1567		} else if (priv->timer_type == TLAN_TIMER_ACTIVITY) {
1568			priv->timer_set_at = jiffies;
1569		}
1570	}
1571
1572	return ack;
1573
1574}
1575
1576
1577
1578
1579/***************************************************************
1580 *	tlan_handle_dummy
1581 *
1582 *	Returns:
1583 *		1
1584 *	Parms:
1585 *		dev		Device assigned the IRQ that was
1586 *				raised.
1587 *		host_int	The contents of the HOST_INT
1588 *				port.
1589 *
1590 *	This function handles the Dummy interrupt, which is
1591 *	raised whenever a test interrupt is generated by setting
1592 *	the Req_Int bit of HOST_CMD to 1.
1593 *
1594 **************************************************************/
1595
1596static u32 tlan_handle_dummy(struct net_device *dev, u16 host_int)
1597{
1598	netdev_info(dev, "Test interrupt\n");
1599	return 1;
1600
1601}
1602
1603
1604
1605
1606/***************************************************************
1607 *	tlan_handle_tx_eoc
1608 *
1609 *	Returns:
1610 *		1
1611 *	Parms:
1612 *		dev		Device assigned the IRQ that was
1613 *				raised.
1614 *		host_int	The contents of the HOST_INT
1615 *				port.
1616 *
1617 *	This driver is structured to determine EOC occurrences by
1618 *	reading the CSTAT member of the list structure.  Tx EOC
1619 *	interrupts are disabled via the DIO INTDIS register.
1620 *	However, TLAN chips before revision 3.0 didn't have this
1621 *	functionality, so process EOC events if this is the
1622 *	case.
1623 *
1624 **************************************************************/
1625
1626static u32 tlan_handle_tx_eoc(struct net_device *dev, u16 host_int)
1627{
1628	struct tlan_priv	*priv = netdev_priv(dev);
1629	struct tlan_list		*head_list;
1630	dma_addr_t		head_list_phys;
1631	u32			ack = 1;
1632
1633	if (priv->tlan_rev < 0x30) {
1634		TLAN_DBG(TLAN_DEBUG_TX,
1635			 "TRANSMIT:  handling TX EOC (Head=%d Tail=%d) -- IRQ\n",
1636			 priv->tx_head, priv->tx_tail);
1637		head_list = priv->tx_list + priv->tx_head;
1638		head_list_phys = priv->tx_list_dma
1639			+ sizeof(struct tlan_list)*priv->tx_head;
1640		if ((head_list->c_stat & TLAN_CSTAT_READY)
1641		    == TLAN_CSTAT_READY) {
1642			netif_stop_queue(dev);
1643			outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1644			ack |= TLAN_HC_GO;
1645		} else {
1646			priv->tx_in_progress = 0;
1647		}
1648	}
1649
1650	return ack;
1651
1652}
1653
1654
1655
1656
1657/***************************************************************
1658 *	tlan_handle_status_check
1659 *
1660 *	Returns:
1661 *		0 if Adapter check, 1 if Network Status check.
1662 *	Parms:
1663 *		dev		Device assigned the IRQ that was
1664 *				raised.
1665 *		host_int	The contents of the HOST_INT
1666 *				port.
1667 *
1668 *	This function handles Adapter Check/Network Status
1669 *	interrupts generated by the adapter.  It checks the
1670 *	vector in the HOST_INT register to determine if it is
1671 *	an Adapter Check interrupt.  If so, it resets the
1672 *	adapter.  Otherwise it clears the status registers
1673 *	and services the PHY.
1674 *
1675 **************************************************************/
1676
1677static u32 tlan_handle_status_check(struct net_device *dev, u16 host_int)
1678{
1679	struct tlan_priv	*priv = netdev_priv(dev);
1680	u32		ack;
1681	u32		error;
1682	u8		net_sts;
1683	u32		phy;
1684	u16		tlphy_ctl;
1685	u16		tlphy_sts;
1686
1687	ack = 1;
1688	if (host_int & TLAN_HI_IV_MASK) {
1689		netif_stop_queue(dev);
1690		error = inl(dev->base_addr + TLAN_CH_PARM);
1691		netdev_info(dev, "Adaptor Error = 0x%x\n", error);
1692		tlan_read_and_clear_stats(dev, TLAN_RECORD);
1693		outl(TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD);
1694
1695		schedule_work(&priv->tlan_tqueue);
1696
1697		netif_wake_queue(dev);
1698		ack = 0;
1699	} else {
1700		TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name);
1701		phy = priv->phy[priv->phy_num];
1702
1703		net_sts = tlan_dio_read8(dev->base_addr, TLAN_NET_STS);
1704		if (net_sts) {
1705			tlan_dio_write8(dev->base_addr, TLAN_NET_STS, net_sts);
1706			TLAN_DBG(TLAN_DEBUG_GNRL, "%s:    Net_Sts = %x\n",
1707				 dev->name, (unsigned) net_sts);
1708		}
1709		if ((net_sts & TLAN_NET_STS_MIRQ) &&  (priv->phy_num == 0)) {
1710			tlan_mii_read_reg(dev, phy, TLAN_TLPHY_STS, &tlphy_sts);
1711			tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl);
1712			if (!(tlphy_sts & TLAN_TS_POLOK) &&
1713			    !(tlphy_ctl & TLAN_TC_SWAPOL)) {
1714				tlphy_ctl |= TLAN_TC_SWAPOL;
1715				tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL,
1716						   tlphy_ctl);
1717			} else if ((tlphy_sts & TLAN_TS_POLOK) &&
1718				   (tlphy_ctl & TLAN_TC_SWAPOL)) {
1719				tlphy_ctl &= ~TLAN_TC_SWAPOL;
1720				tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL,
1721						   tlphy_ctl);
1722			}
1723
1724			if (debug)
1725				tlan_phy_print(dev);
1726		}
1727	}
1728
1729	return ack;
1730
1731}
1732
1733
1734
1735
1736/***************************************************************
1737 *	tlan_handle_rx_eoc
1738 *
1739 *	Returns:
1740 *		1
1741 *	Parms:
1742 *		dev		Device assigned the IRQ that was
1743 *				raised.
1744 *		host_int	The contents of the HOST_INT
1745 *				port.
1746 *
1747 *	This driver is structured to determine EOC occurrences by
1748 *	reading the CSTAT member of the list structure.  Rx EOC
1749 *	interrupts are disabled via the DIO INTDIS register.
1750 *	However, TLAN chips before revision 3.0 didn't have this
1751 *	CSTAT member or a INTDIS register, so if this chip is
1752 *	pre-3.0, process EOC interrupts normally.
1753 *
1754 **************************************************************/
1755
1756static u32 tlan_handle_rx_eoc(struct net_device *dev, u16 host_int)
1757{
1758	struct tlan_priv	*priv = netdev_priv(dev);
1759	dma_addr_t	head_list_phys;
1760	u32		ack = 1;
1761
1762	if (priv->tlan_rev < 0x30) {
1763		TLAN_DBG(TLAN_DEBUG_RX,
1764			 "RECEIVE:  Handling RX EOC (head=%d tail=%d) -- IRQ\n",
1765			 priv->rx_head, priv->rx_tail);
1766		head_list_phys = priv->rx_list_dma
1767			+ sizeof(struct tlan_list)*priv->rx_head;
1768		outl(head_list_phys, dev->base_addr + TLAN_CH_PARM);
1769		ack |= TLAN_HC_GO | TLAN_HC_RT;
1770		priv->rx_eoc_count++;
1771	}
1772
1773	return ack;
1774
1775}
1776
1777
1778
1779
1780/*****************************************************************************
1781******************************************************************************
1782
1783ThunderLAN driver timer function
1784
1785******************************************************************************
1786*****************************************************************************/
1787
1788
1789/***************************************************************
1790 *	tlan_timer
1791 *
1792 *	Returns:
1793 *		Nothing
1794 *	Parms:
1795 *		data	A value given to add timer when
1796 *			add_timer was called.
1797 *
1798 *	This function handles timed functionality for the
1799 *	TLAN driver.  The two current timer uses are for
1800 *	delaying for autonegotionation and driving the ACT LED.
1801 *	-	Autonegotiation requires being allowed about
1802 *		2 1/2 seconds before attempting to transmit a
1803 *		packet.  It would be a very bad thing to hang
1804 *		the kernel this long, so the driver doesn't
1805 *		allow transmission 'til after this time, for
1806 *		certain PHYs.  It would be much nicer if all
1807 *		PHYs were interrupt-capable like the internal
1808 *		PHY.
1809 *	-	The ACT LED, which shows adapter activity, is
1810 *		driven by the driver, and so must be left on
1811 *		for a short period to power up the LED so it
1812 *		can be seen.  This delay can be changed by
1813 *		changing the TLAN_TIMER_ACT_DELAY in tlan.h,
1814 *		if desired.  100 ms  produces a slightly
1815 *		sluggish response.
1816 *
1817 **************************************************************/
1818
1819static void tlan_timer(struct timer_list *t)
1820{
1821	struct tlan_priv	*priv = from_timer(priv, t, timer);
1822	struct net_device	*dev = priv->dev;
1823	u32		elapsed;
1824	unsigned long	flags = 0;
1825
1826	priv->timer.function = NULL;
1827
1828	switch (priv->timer_type) {
1829	case TLAN_TIMER_PHY_PDOWN:
1830		tlan_phy_power_down(dev);
1831		break;
1832	case TLAN_TIMER_PHY_PUP:
1833		tlan_phy_power_up(dev);
1834		break;
1835	case TLAN_TIMER_PHY_RESET:
1836		tlan_phy_reset(dev);
1837		break;
1838	case TLAN_TIMER_PHY_START_LINK:
1839		tlan_phy_start_link(dev);
1840		break;
1841	case TLAN_TIMER_PHY_FINISH_AN:
1842		tlan_phy_finish_auto_neg(dev);
1843		break;
1844	case TLAN_TIMER_FINISH_RESET:
1845		tlan_finish_reset(dev);
1846		break;
1847	case TLAN_TIMER_ACTIVITY:
1848		spin_lock_irqsave(&priv->lock, flags);
1849		if (priv->timer.function == NULL) {
1850			elapsed = jiffies - priv->timer_set_at;
1851			if (elapsed >= TLAN_TIMER_ACT_DELAY) {
1852				tlan_dio_write8(dev->base_addr,
1853						TLAN_LED_REG, TLAN_LED_LINK);
1854			} else  {
1855				priv->timer.expires = priv->timer_set_at
1856					+ TLAN_TIMER_ACT_DELAY;
1857				spin_unlock_irqrestore(&priv->lock, flags);
1858				add_timer(&priv->timer);
1859				break;
1860			}
1861		}
1862		spin_unlock_irqrestore(&priv->lock, flags);
1863		break;
1864	default:
1865		break;
1866	}
1867
1868}
1869
1870
1871/*****************************************************************************
1872******************************************************************************
1873
1874ThunderLAN driver adapter related routines
1875
1876******************************************************************************
1877*****************************************************************************/
1878
1879
1880/***************************************************************
1881 *	tlan_reset_lists
1882 *
1883 *	Returns:
1884 *		Nothing
1885 *	Parms:
1886 *		dev	The device structure with the list
1887 *			structures to be reset.
1888 *
1889 *	This routine sets the variables associated with managing
1890 *	the TLAN lists to their initial values.
1891 *
1892 **************************************************************/
1893
1894static void tlan_reset_lists(struct net_device *dev)
1895{
1896	struct tlan_priv *priv = netdev_priv(dev);
1897	int		i;
1898	struct tlan_list	*list;
1899	dma_addr_t	list_phys;
1900	struct sk_buff	*skb;
1901
1902	priv->tx_head = 0;
1903	priv->tx_tail = 0;
1904	for (i = 0; i < TLAN_NUM_TX_LISTS; i++) {
1905		list = priv->tx_list + i;
1906		list->c_stat = TLAN_CSTAT_UNUSED;
1907		list->buffer[0].address = 0;
1908		list->buffer[2].count = 0;
1909		list->buffer[2].address = 0;
1910		list->buffer[8].address = 0;
1911		list->buffer[9].address = 0;
1912	}
1913
1914	priv->rx_head = 0;
1915	priv->rx_tail = TLAN_NUM_RX_LISTS - 1;
1916	for (i = 0; i < TLAN_NUM_RX_LISTS; i++) {
1917		list = priv->rx_list + i;
1918		list_phys = priv->rx_list_dma + sizeof(struct tlan_list)*i;
1919		list->c_stat = TLAN_CSTAT_READY;
1920		list->frame_size = TLAN_MAX_FRAME_SIZE;
1921		list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER;
1922		skb = netdev_alloc_skb_ip_align(dev, TLAN_MAX_FRAME_SIZE + 5);
1923		if (!skb)
1924			break;
1925
1926		list->buffer[0].address = pci_map_single(priv->pci_dev,
1927							 skb->data,
1928							 TLAN_MAX_FRAME_SIZE,
1929							 PCI_DMA_FROMDEVICE);
1930		tlan_store_skb(list, skb);
1931		list->buffer[1].count = 0;
1932		list->buffer[1].address = 0;
1933		list->forward = list_phys + sizeof(struct tlan_list);
1934	}
1935
1936	/* in case ran out of memory early, clear bits */
1937	while (i < TLAN_NUM_RX_LISTS) {
1938		tlan_store_skb(priv->rx_list + i, NULL);
1939		++i;
1940	}
1941	list->forward = 0;
1942
1943}
1944
1945
1946static void tlan_free_lists(struct net_device *dev)
1947{
1948	struct tlan_priv *priv = netdev_priv(dev);
1949	int		i;
1950	struct tlan_list	*list;
1951	struct sk_buff	*skb;
1952
1953	for (i = 0; i < TLAN_NUM_TX_LISTS; i++) {
1954		list = priv->tx_list + i;
1955		skb = tlan_get_skb(list);
1956		if (skb) {
1957			pci_unmap_single(
1958				priv->pci_dev,
1959				list->buffer[0].address,
1960				max(skb->len,
1961				    (unsigned int)TLAN_MIN_FRAME_SIZE),
1962				PCI_DMA_TODEVICE);
1963			dev_kfree_skb_any(skb);
1964			list->buffer[8].address = 0;
1965			list->buffer[9].address = 0;
1966		}
1967	}
1968
1969	for (i = 0; i < TLAN_NUM_RX_LISTS; i++) {
1970		list = priv->rx_list + i;
1971		skb = tlan_get_skb(list);
1972		if (skb) {
1973			pci_unmap_single(priv->pci_dev,
1974					 list->buffer[0].address,
1975					 TLAN_MAX_FRAME_SIZE,
1976					 PCI_DMA_FROMDEVICE);
1977			dev_kfree_skb_any(skb);
1978			list->buffer[8].address = 0;
1979			list->buffer[9].address = 0;
1980		}
1981	}
1982}
1983
1984
1985
1986
1987/***************************************************************
1988 *	tlan_print_dio
1989 *
1990 *	Returns:
1991 *		Nothing
1992 *	Parms:
1993 *		io_base		Base IO port of the device of
1994 *				which to print DIO registers.
1995 *
1996 *	This function prints out all the internal (DIO)
1997 *	registers of a TLAN chip.
1998 *
1999 **************************************************************/
2000
2001static void tlan_print_dio(u16 io_base)
2002{
2003	u32 data0, data1;
2004	int	i;
2005
2006	pr_info("Contents of internal registers for io base 0x%04hx\n",
2007		io_base);
2008	pr_info("Off.  +0        +4\n");
2009	for (i = 0; i < 0x4C; i += 8) {
2010		data0 = tlan_dio_read32(io_base, i);
2011		data1 = tlan_dio_read32(io_base, i + 0x4);
2012		pr_info("0x%02x  0x%08x 0x%08x\n", i, data0, data1);
2013	}
2014
2015}
2016
2017
2018
2019
2020/***************************************************************
2021 *	TLan_PrintList
2022 *
2023 *	Returns:
2024 *		Nothing
2025 *	Parms:
2026 *		list	A pointer to the struct tlan_list structure to
2027 *			be printed.
2028 *		type	A string to designate type of list,
2029 *			"Rx" or "Tx".
2030 *		num	The index of the list.
2031 *
2032 *	This function prints out the contents of the list
2033 *	pointed to by the list parameter.
2034 *
2035 **************************************************************/
2036
2037static void tlan_print_list(struct tlan_list *list, char *type, int num)
2038{
2039	int i;
2040
2041	pr_info("%s List %d at %p\n", type, num, list);
2042	pr_info("   Forward    = 0x%08x\n",  list->forward);
2043	pr_info("   CSTAT      = 0x%04hx\n", list->c_stat);
2044	pr_info("   Frame Size = 0x%04hx\n", list->frame_size);
2045	/* for (i = 0; i < 10; i++) { */
2046	for (i = 0; i < 2; i++) {
2047		pr_info("   Buffer[%d].count, addr = 0x%08x, 0x%08x\n",
2048			i, list->buffer[i].count, list->buffer[i].address);
2049	}
2050
2051}
2052
2053
2054
2055
2056/***************************************************************
2057 *	tlan_read_and_clear_stats
2058 *
2059 *	Returns:
2060 *		Nothing
2061 *	Parms:
2062 *		dev	Pointer to device structure of adapter
2063 *			to which to read stats.
2064 *		record	Flag indicating whether to add
2065 *
2066 *	This functions reads all the internal status registers
2067 *	of the TLAN chip, which clears them as a side effect.
2068 *	It then either adds the values to the device's status
2069 *	struct, or discards them, depending on whether record
2070 *	is TLAN_RECORD (!=0)  or TLAN_IGNORE (==0).
2071 *
2072 **************************************************************/
2073
2074static void tlan_read_and_clear_stats(struct net_device *dev, int record)
2075{
2076	u32		tx_good, tx_under;
2077	u32		rx_good, rx_over;
2078	u32		def_tx, crc, code;
2079	u32		multi_col, single_col;
2080	u32		excess_col, late_col, loss;
2081
2082	outw(TLAN_GOOD_TX_FRMS, dev->base_addr + TLAN_DIO_ADR);
2083	tx_good  = inb(dev->base_addr + TLAN_DIO_DATA);
2084	tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2085	tx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16;
2086	tx_under = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2087
2088	outw(TLAN_GOOD_RX_FRMS, dev->base_addr + TLAN_DIO_ADR);
2089	rx_good  = inb(dev->base_addr + TLAN_DIO_DATA);
2090	rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2091	rx_good += inb(dev->base_addr + TLAN_DIO_DATA + 2) << 16;
2092	rx_over  = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2093
2094	outw(TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR);
2095	def_tx  = inb(dev->base_addr + TLAN_DIO_DATA);
2096	def_tx += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2097	crc     = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2098	code    = inb(dev->base_addr + TLAN_DIO_DATA + 3);
2099
2100	outw(TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR);
2101	multi_col   = inb(dev->base_addr + TLAN_DIO_DATA);
2102	multi_col  += inb(dev->base_addr + TLAN_DIO_DATA + 1) << 8;
2103	single_col  = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2104	single_col += inb(dev->base_addr + TLAN_DIO_DATA + 3) << 8;
2105
2106	outw(TLAN_EXCESSCOL_FRMS, dev->base_addr + TLAN_DIO_ADR);
2107	excess_col = inb(dev->base_addr + TLAN_DIO_DATA);
2108	late_col   = inb(dev->base_addr + TLAN_DIO_DATA + 1);
2109	loss       = inb(dev->base_addr + TLAN_DIO_DATA + 2);
2110
2111	if (record) {
2112		dev->stats.rx_packets += rx_good;
2113		dev->stats.rx_errors  += rx_over + crc + code;
2114		dev->stats.tx_packets += tx_good;
2115		dev->stats.tx_errors  += tx_under + loss;
2116		dev->stats.collisions += multi_col
2117			+ single_col + excess_col + late_col;
2118
2119		dev->stats.rx_over_errors    += rx_over;
2120		dev->stats.rx_crc_errors     += crc;
2121		dev->stats.rx_frame_errors   += code;
2122
2123		dev->stats.tx_aborted_errors += tx_under;
2124		dev->stats.tx_carrier_errors += loss;
2125	}
2126
2127}
2128
2129
2130
2131
2132/***************************************************************
2133 *	TLan_Reset
2134 *
2135 *	Returns:
2136 *		0
2137 *	Parms:
2138 *		dev	Pointer to device structure of adapter
2139 *			to be reset.
2140 *
2141 *	This function resets the adapter and it's physical
2142 *	device.  See Chap. 3, pp. 9-10 of the "ThunderLAN
2143 *	Programmer's Guide" for details.  The routine tries to
2144 *	implement what is detailed there, though adjustments
2145 *	have been made.
2146 *
2147 **************************************************************/
2148
2149static void
2150tlan_reset_adapter(struct net_device *dev)
2151{
2152	struct tlan_priv	*priv = netdev_priv(dev);
2153	int		i;
2154	u32		addr;
2155	u32		data;
2156	u8		data8;
2157
2158	priv->tlan_full_duplex = false;
2159	priv->phy_online = 0;
2160	netif_carrier_off(dev);
2161
2162/*  1.	Assert reset bit. */
2163
2164	data = inl(dev->base_addr + TLAN_HOST_CMD);
2165	data |= TLAN_HC_AD_RST;
2166	outl(data, dev->base_addr + TLAN_HOST_CMD);
2167
2168	udelay(1000);
2169
2170/*  2.	Turn off interrupts. (Probably isn't necessary) */
2171
2172	data = inl(dev->base_addr + TLAN_HOST_CMD);
2173	data |= TLAN_HC_INT_OFF;
2174	outl(data, dev->base_addr + TLAN_HOST_CMD);
2175
2176/*  3.	Clear AREGs and HASHs. */
2177
2178	for (i = TLAN_AREG_0; i <= TLAN_HASH_2; i += 4)
2179		tlan_dio_write32(dev->base_addr, (u16) i, 0);
2180
2181/*  4.	Setup NetConfig register. */
2182
2183	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN;
2184	tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data);
2185
2186/*  5.	Load Ld_Tmr and Ld_Thr in HOST_CMD. */
2187
2188	outl(TLAN_HC_LD_TMR | 0x3f, dev->base_addr + TLAN_HOST_CMD);
2189	outl(TLAN_HC_LD_THR | 0x9, dev->base_addr + TLAN_HOST_CMD);
2190
2191/*  6.	Unreset the MII by setting NMRST (in NetSio) to 1. */
2192
2193	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
2194	addr = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
2195	tlan_set_bit(TLAN_NET_SIO_NMRST, addr);
2196
2197/*  7.	Setup the remaining registers. */
2198
2199	if (priv->tlan_rev >= 0x30) {
2200		data8 = TLAN_ID_TX_EOC | TLAN_ID_RX_EOC;
2201		tlan_dio_write8(dev->base_addr, TLAN_INT_DIS, data8);
2202	}
2203	tlan_phy_detect(dev);
2204	data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN;
2205
2206	if (priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY) {
2207		data |= TLAN_NET_CFG_BIT;
2208		if (priv->aui == 1) {
2209			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x0a);
2210		} else if (priv->duplex == TLAN_DUPLEX_FULL) {
2211			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x00);
2212			priv->tlan_full_duplex = true;
2213		} else {
2214			tlan_dio_write8(dev->base_addr, TLAN_ACOMMIT, 0x08);
2215		}
2216	}
2217
2218	/* don't power down internal PHY if we're going to use it */
2219	if (priv->phy_num == 0 ||
2220	   (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10))
2221		data |= TLAN_NET_CFG_PHY_EN;
2222	tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, (u16) data);
2223
2224	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY)
2225		tlan_finish_reset(dev);
2226	else
2227		tlan_phy_power_down(dev);
2228
2229}
2230
2231
2232
2233
2234static void
2235tlan_finish_reset(struct net_device *dev)
2236{
2237	struct tlan_priv	*priv = netdev_priv(dev);
2238	u8		data;
2239	u32		phy;
2240	u8		sio;
2241	u16		status;
2242	u16		partner;
2243	u16		tlphy_ctl;
2244	u16		tlphy_par;
2245	u16		tlphy_id1, tlphy_id2;
2246	int		i;
2247
2248	phy = priv->phy[priv->phy_num];
2249
2250	data = TLAN_NET_CMD_NRESET | TLAN_NET_CMD_NWRAP;
2251	if (priv->tlan_full_duplex)
2252		data |= TLAN_NET_CMD_DUPLEX;
2253	tlan_dio_write8(dev->base_addr, TLAN_NET_CMD, data);
2254	data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5;
2255	if (priv->phy_num == 0)
2256		data |= TLAN_NET_MASK_MASK7;
2257	tlan_dio_write8(dev->base_addr, TLAN_NET_MASK, data);
2258	tlan_dio_write16(dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7);
2259	tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &tlphy_id1);
2260	tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &tlphy_id2);
2261
2262	if ((priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) ||
2263	    (priv->aui)) {
2264		status = MII_GS_LINK;
2265		netdev_info(dev, "Link forced\n");
2266	} else {
2267		tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2268		udelay(1000);
2269		tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2270		if (status & MII_GS_LINK) {
2271			/* We only support link info on Nat.Sem. PHY's */
2272			if ((tlphy_id1 == NAT_SEM_ID1) &&
2273			    (tlphy_id2 == NAT_SEM_ID2)) {
2274				tlan_mii_read_reg(dev, phy, MII_AN_LPA,
2275					&partner);
2276				tlan_mii_read_reg(dev, phy, TLAN_TLPHY_PAR,
2277					&tlphy_par);
2278
2279				netdev_info(dev,
2280					"Link active, %s %uMbps %s-Duplex\n",
2281					!(tlphy_par & TLAN_PHY_AN_EN_STAT)
2282					? "forced" : "Autonegotiation enabled,",
2283					tlphy_par & TLAN_PHY_SPEED_100
2284					? 100 : 10,
2285					tlphy_par & TLAN_PHY_DUPLEX_FULL
2286					? "Full" : "Half");
2287
2288				if (tlphy_par & TLAN_PHY_AN_EN_STAT) {
2289					netdev_info(dev, "Partner capability:");
2290					for (i = 5; i < 10; i++)
2291						if (partner & (1 << i))
2292							pr_cont(" %s",
2293								media[i-5]);
2294					pr_cont("\n");
2295				}
2296			} else
2297				netdev_info(dev, "Link active\n");
2298			/* Enabling link beat monitoring */
2299			priv->media_timer.expires = jiffies + HZ;
2300			add_timer(&priv->media_timer);
2301		}
2302	}
2303
2304	if (priv->phy_num == 0) {
2305		tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl);
2306		tlphy_ctl |= TLAN_TC_INTEN;
2307		tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tlphy_ctl);
2308		sio = tlan_dio_read8(dev->base_addr, TLAN_NET_SIO);
2309		sio |= TLAN_NET_SIO_MINTEN;
2310		tlan_dio_write8(dev->base_addr, TLAN_NET_SIO, sio);
2311	}
2312
2313	if (status & MII_GS_LINK) {
2314		tlan_set_mac(dev, 0, dev->dev_addr);
2315		priv->phy_online = 1;
2316		outb((TLAN_HC_INT_ON >> 8), dev->base_addr + TLAN_HOST_CMD + 1);
2317		if (debug >= 1 && debug != TLAN_DEBUG_PROBE)
2318			outb((TLAN_HC_REQ_INT >> 8),
2319			     dev->base_addr + TLAN_HOST_CMD + 1);
2320		outl(priv->rx_list_dma, dev->base_addr + TLAN_CH_PARM);
2321		outl(TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD);
2322		tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK);
2323		netif_carrier_on(dev);
2324	} else {
2325		netdev_info(dev, "Link inactive, will retry in 10 secs...\n");
2326		tlan_set_timer(dev, (10*HZ), TLAN_TIMER_FINISH_RESET);
2327		return;
2328	}
2329	tlan_set_multicast_list(dev);
2330
2331}
2332
2333
2334
2335
2336/***************************************************************
2337 *	tlan_set_mac
2338 *
2339 *	Returns:
2340 *		Nothing
2341 *	Parms:
2342 *		dev	Pointer to device structure of adapter
2343 *			on which to change the AREG.
2344 *		areg	The AREG to set the address in (0 - 3).
2345 *		mac	A pointer to an array of chars.  Each
2346 *			element stores one byte of the address.
2347 *			IE, it isn't in ascii.
2348 *
2349 *	This function transfers a MAC address to one of the
2350 *	TLAN AREGs (address registers).  The TLAN chip locks
2351 *	the register on writing to offset 0 and unlocks the
2352 *	register after writing to offset 5.  If NULL is passed
2353 *	in mac, then the AREG is filled with 0's.
2354 *
2355 **************************************************************/
2356
2357static void tlan_set_mac(struct net_device *dev, int areg, char *mac)
2358{
2359	int i;
2360
2361	areg *= 6;
2362
2363	if (mac != NULL) {
2364		for (i = 0; i < 6; i++)
2365			tlan_dio_write8(dev->base_addr,
2366					TLAN_AREG_0 + areg + i, mac[i]);
2367	} else {
2368		for (i = 0; i < 6; i++)
2369			tlan_dio_write8(dev->base_addr,
2370					TLAN_AREG_0 + areg + i, 0);
2371	}
2372
2373}
2374
2375
2376
2377
2378/*****************************************************************************
2379******************************************************************************
2380
2381ThunderLAN driver PHY layer routines
2382
2383******************************************************************************
2384*****************************************************************************/
2385
2386
2387
2388/*********************************************************************
2389 *	tlan_phy_print
2390 *
2391 *	Returns:
2392 *		Nothing
2393 *	Parms:
2394 *		dev	A pointer to the device structure of the
2395 *			TLAN device having the PHYs to be detailed.
2396 *
2397 *	This function prints the registers a PHY (aka transceiver).
2398 *
2399 ********************************************************************/
2400
2401static void tlan_phy_print(struct net_device *dev)
2402{
2403	struct tlan_priv *priv = netdev_priv(dev);
2404	u16 i, data0, data1, data2, data3, phy;
2405
2406	phy = priv->phy[priv->phy_num];
2407
2408	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) {
2409		netdev_info(dev, "Unmanaged PHY\n");
2410	} else if (phy <= TLAN_PHY_MAX_ADDR) {
2411		netdev_info(dev, "PHY 0x%02x\n", phy);
2412		pr_info("   Off.  +0     +1     +2     +3\n");
2413		for (i = 0; i < 0x20; i += 4) {
2414			tlan_mii_read_reg(dev, phy, i, &data0);
2415			tlan_mii_read_reg(dev, phy, i + 1, &data1);
2416			tlan_mii_read_reg(dev, phy, i + 2, &data2);
2417			tlan_mii_read_reg(dev, phy, i + 3, &data3);
2418			pr_info("   0x%02x 0x%04hx 0x%04hx 0x%04hx 0x%04hx\n",
2419				i, data0, data1, data2, data3);
2420		}
2421	} else {
2422		netdev_info(dev, "Invalid PHY\n");
2423	}
2424
2425}
2426
2427
2428
2429
2430/*********************************************************************
2431 *	tlan_phy_detect
2432 *
2433 *	Returns:
2434 *		Nothing
2435 *	Parms:
2436 *		dev	A pointer to the device structure of the adapter
2437 *			for which the PHY needs determined.
2438 *
2439 *	So far I've found that adapters which have external PHYs
2440 *	may also use the internal PHY for part of the functionality.
2441 *	(eg, AUI/Thinnet).  This function finds out if this TLAN
2442 *	chip has an internal PHY, and then finds the first external
2443 *	PHY (starting from address 0) if it exists).
2444 *
2445 ********************************************************************/
2446
2447static void tlan_phy_detect(struct net_device *dev)
2448{
2449	struct tlan_priv *priv = netdev_priv(dev);
2450	u16		control;
2451	u16		hi;
2452	u16		lo;
2453	u32		phy;
2454
2455	if (priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY) {
2456		priv->phy_num = 0xffff;
2457		return;
2458	}
2459
2460	tlan_mii_read_reg(dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi);
2461
2462	if (hi != 0xffff)
2463		priv->phy[0] = TLAN_PHY_MAX_ADDR;
2464	else
2465		priv->phy[0] = TLAN_PHY_NONE;
2466
2467	priv->phy[1] = TLAN_PHY_NONE;
2468	for (phy = 0; phy <= TLAN_PHY_MAX_ADDR; phy++) {
2469		tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &control);
2470		tlan_mii_read_reg(dev, phy, MII_GEN_ID_HI, &hi);
2471		tlan_mii_read_reg(dev, phy, MII_GEN_ID_LO, &lo);
2472		if ((control != 0xffff) ||
2473		    (hi != 0xffff) || (lo != 0xffff)) {
2474			TLAN_DBG(TLAN_DEBUG_GNRL,
2475				 "PHY found at %02x %04x %04x %04x\n",
2476				 phy, control, hi, lo);
2477			if ((priv->phy[1] == TLAN_PHY_NONE) &&
2478			    (phy != TLAN_PHY_MAX_ADDR)) {
2479				priv->phy[1] = phy;
2480			}
2481		}
2482	}
2483
2484	if (priv->phy[1] != TLAN_PHY_NONE)
2485		priv->phy_num = 1;
2486	else if (priv->phy[0] != TLAN_PHY_NONE)
2487		priv->phy_num = 0;
2488	else
2489		netdev_info(dev, "Cannot initialize device, no PHY was found!\n");
2490
2491}
2492
2493
2494
2495
2496static void tlan_phy_power_down(struct net_device *dev)
2497{
2498	struct tlan_priv	*priv = netdev_priv(dev);
2499	u16		value;
2500
2501	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering down PHY(s).\n", dev->name);
2502	value = MII_GC_PDOWN | MII_GC_LOOPBK | MII_GC_ISOLATE;
2503	tlan_mii_sync(dev->base_addr);
2504	tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value);
2505	if ((priv->phy_num == 0) && (priv->phy[1] != TLAN_PHY_NONE)) {
2506		/* if using internal PHY, the external PHY must be powered on */
2507		if (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10)
2508			value = MII_GC_ISOLATE; /* just isolate it from MII */
2509		tlan_mii_sync(dev->base_addr);
2510		tlan_mii_write_reg(dev, priv->phy[1], MII_GEN_CTL, value);
2511	}
2512
2513	/* Wait for 50 ms and powerup
2514	 * This is abitrary.  It is intended to make sure the
2515	 * transceiver settles.
2516	 */
2517	tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_PUP);
2518
2519}
2520
2521
2522
2523
2524static void tlan_phy_power_up(struct net_device *dev)
2525{
2526	struct tlan_priv	*priv = netdev_priv(dev);
2527	u16		value;
2528
2529	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Powering up PHY.\n", dev->name);
2530	tlan_mii_sync(dev->base_addr);
2531	value = MII_GC_LOOPBK;
2532	tlan_mii_write_reg(dev, priv->phy[priv->phy_num], MII_GEN_CTL, value);
2533	tlan_mii_sync(dev->base_addr);
2534	/* Wait for 500 ms and reset the
2535	 * transceiver.  The TLAN docs say both 50 ms and
2536	 * 500 ms, so do the longer, just in case.
2537	 */
2538	tlan_set_timer(dev, msecs_to_jiffies(500), TLAN_TIMER_PHY_RESET);
2539
2540}
2541
2542
2543
2544
2545static void tlan_phy_reset(struct net_device *dev)
2546{
2547	struct tlan_priv	*priv = netdev_priv(dev);
2548	u16		phy;
2549	u16		value;
2550	unsigned long timeout = jiffies + HZ;
2551
2552	phy = priv->phy[priv->phy_num];
2553
2554	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Resetting PHY.\n", dev->name);
2555	tlan_mii_sync(dev->base_addr);
2556	value = MII_GC_LOOPBK | MII_GC_RESET;
2557	tlan_mii_write_reg(dev, phy, MII_GEN_CTL, value);
2558	do {
2559		tlan_mii_read_reg(dev, phy, MII_GEN_CTL, &value);
2560		if (time_after(jiffies, timeout)) {
2561			netdev_err(dev, "PHY reset timeout\n");
2562			return;
2563		}
2564	} while (value & MII_GC_RESET);
2565
2566	/* Wait for 500 ms and initialize.
2567	 * I don't remember why I wait this long.
2568	 * I've changed this to 50ms, as it seems long enough.
2569	 */
2570	tlan_set_timer(dev, msecs_to_jiffies(50), TLAN_TIMER_PHY_START_LINK);
2571
2572}
2573
2574
2575
2576
2577static void tlan_phy_start_link(struct net_device *dev)
2578{
2579	struct tlan_priv	*priv = netdev_priv(dev);
2580	u16		ability;
2581	u16		control;
2582	u16		data;
2583	u16		phy;
2584	u16		status;
2585	u16		tctl;
2586
2587	phy = priv->phy[priv->phy_num];
2588	TLAN_DBG(TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name);
2589	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2590	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &ability);
2591
2592	if ((status & MII_GS_AUTONEG) &&
2593	    (!priv->aui)) {
2594		ability = status >> 11;
2595		if (priv->speed  == TLAN_SPEED_10 &&
2596		    priv->duplex == TLAN_DUPLEX_HALF) {
2597			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0000);
2598		} else if (priv->speed == TLAN_SPEED_10 &&
2599			   priv->duplex == TLAN_DUPLEX_FULL) {
2600			priv->tlan_full_duplex = true;
2601			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x0100);
2602		} else if (priv->speed == TLAN_SPEED_100 &&
2603			   priv->duplex == TLAN_DUPLEX_HALF) {
2604			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2000);
2605		} else if (priv->speed == TLAN_SPEED_100 &&
2606			   priv->duplex == TLAN_DUPLEX_FULL) {
2607			priv->tlan_full_duplex = true;
2608			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x2100);
2609		} else {
2610
2611			/* Set Auto-Neg advertisement */
2612			tlan_mii_write_reg(dev, phy, MII_AN_ADV,
2613					   (ability << 5) | 1);
2614			/* Enablee Auto-Neg */
2615			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1000);
2616			/* Restart Auto-Neg */
2617			tlan_mii_write_reg(dev, phy, MII_GEN_CTL, 0x1200);
2618			/* Wait for 4 sec for autonegotiation
2619			 * to complete.  The max spec time is less than this
2620			 * but the card need additional time to start AN.
2621			 * .5 sec should be plenty extra.
2622			 */
2623			netdev_info(dev, "Starting autonegotiation\n");
2624			tlan_set_timer(dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN);
2625			return;
2626		}
2627
2628	}
2629
2630	if ((priv->aui) && (priv->phy_num != 0)) {
2631		priv->phy_num = 0;
2632		data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN
2633			| TLAN_NET_CFG_PHY_EN;
2634		tlan_dio_write16(dev->base_addr, TLAN_NET_CONFIG, data);
2635		tlan_set_timer(dev, msecs_to_jiffies(40), TLAN_TIMER_PHY_PDOWN);
2636		return;
2637	} else if (priv->phy_num == 0) {
2638		control = 0;
2639		tlan_mii_read_reg(dev, phy, TLAN_TLPHY_CTL, &tctl);
2640		if (priv->aui) {
2641			tctl |= TLAN_TC_AUISEL;
2642		} else {
2643			tctl &= ~TLAN_TC_AUISEL;
2644			if (priv->duplex == TLAN_DUPLEX_FULL) {
2645				control |= MII_GC_DUPLEX;
2646				priv->tlan_full_duplex = true;
2647			}
2648			if (priv->speed == TLAN_SPEED_100)
2649				control |= MII_GC_SPEEDSEL;
2650		}
2651		tlan_mii_write_reg(dev, phy, MII_GEN_CTL, control);
2652		tlan_mii_write_reg(dev, phy, TLAN_TLPHY_CTL, tctl);
2653	}
2654
2655	/* Wait for 2 sec to give the transceiver time
2656	 * to establish link.
2657	 */
2658	tlan_set_timer(dev, (4*HZ), TLAN_TIMER_FINISH_RESET);
2659
2660}
2661
2662
2663
2664
2665static void tlan_phy_finish_auto_neg(struct net_device *dev)
2666{
2667	struct tlan_priv	*priv = netdev_priv(dev);
2668	u16		an_adv;
2669	u16		an_lpa;
2670	u16		mode;
2671	u16		phy;
2672	u16		status;
2673
2674	phy = priv->phy[priv->phy_num];
2675
2676	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2677	udelay(1000);
2678	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &status);
2679
2680	if (!(status & MII_GS_AUTOCMPLT)) {
2681		/* Wait for 8 sec to give the process
2682		 * more time.  Perhaps we should fail after a while.
2683		 */
2684		tlan_set_timer(dev, 2 * HZ, TLAN_TIMER_PHY_FINISH_AN);
2685		return;
2686	}
2687
2688	netdev_info(dev, "Autonegotiation complete\n");
2689	tlan_mii_read_reg(dev, phy, MII_AN_ADV, &an_adv);
2690	tlan_mii_read_reg(dev, phy, MII_AN_LPA, &an_lpa);
2691	mode = an_adv & an_lpa & 0x03E0;
2692	if (mode & 0x0100)
2693		priv->tlan_full_duplex = true;
2694	else if (!(mode & 0x0080) && (mode & 0x0040))
2695		priv->tlan_full_duplex = true;
2696
2697	/* switch to internal PHY for 10 Mbps */
2698	if ((!(mode & 0x0180)) &&
2699	    (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10) &&
2700	    (priv->phy_num != 0)) {
2701		priv->phy_num = 0;
2702		tlan_set_timer(dev, msecs_to_jiffies(400), TLAN_TIMER_PHY_PDOWN);
2703		return;
2704	}
2705
2706	if (priv->phy_num == 0) {
2707		if ((priv->duplex == TLAN_DUPLEX_FULL) ||
2708		    (an_adv & an_lpa & 0x0040)) {
2709			tlan_mii_write_reg(dev, phy, MII_GEN_CTL,
2710					   MII_GC_AUTOENB | MII_GC_DUPLEX);
2711			netdev_info(dev, "Starting internal PHY with FULL-DUPLEX\n");
2712		} else {
2713			tlan_mii_write_reg(dev, phy, MII_GEN_CTL,
2714					   MII_GC_AUTOENB);
2715			netdev_info(dev, "Starting internal PHY with HALF-DUPLEX\n");
2716		}
2717	}
2718
2719	/* Wait for 100 ms.  No reason in partiticular.
2720	 */
2721	tlan_set_timer(dev, msecs_to_jiffies(100), TLAN_TIMER_FINISH_RESET);
2722
2723}
2724
2725
2726/*********************************************************************
2727 *
2728 *     tlan_phy_monitor
2729 *
2730 *     Returns:
2731 *	      None
2732 *
2733 *     Params:
2734 *	      data	     The device structure of this device.
2735 *
2736 *
2737 *     This function monitors PHY condition by reading the status
2738 *     register via the MII bus, controls LINK LED and notifies the
2739 *     kernel about link state.
2740 *
2741 *******************************************************************/
2742
2743static void tlan_phy_monitor(struct timer_list *t)
2744{
2745	struct tlan_priv *priv = from_timer(priv, t, media_timer);
2746	struct net_device *dev = priv->dev;
2747	u16     phy;
2748	u16     phy_status;
2749
2750	phy = priv->phy[priv->phy_num];
2751
2752	/* Get PHY status register */
2753	tlan_mii_read_reg(dev, phy, MII_GEN_STS, &phy_status);
2754
2755	/* Check if link has been lost */
2756	if (!(phy_status & MII_GS_LINK)) {
2757		if (netif_carrier_ok(dev)) {
2758			printk(KERN_DEBUG "TLAN: %s has lost link\n",
2759			       dev->name);
2760			tlan_dio_write8(dev->base_addr, TLAN_LED_REG, 0);
2761			netif_carrier_off(dev);
2762			if (priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10) {
2763				/* power down internal PHY */
2764				u16 data = MII_GC_PDOWN | MII_GC_LOOPBK |
2765					   MII_GC_ISOLATE;
2766
2767				tlan_mii_sync(dev->base_addr);
2768				tlan_mii_write_reg(dev, priv->phy[0],
2769						   MII_GEN_CTL, data);
2770				/* set to external PHY */
2771				priv->phy_num = 1;
2772				/* restart autonegotiation */
2773				tlan_set_timer(dev, msecs_to_jiffies(400),
2774					       TLAN_TIMER_PHY_PDOWN);
2775				return;
2776			}
2777		}
2778	}
2779
2780	/* Link restablished? */
2781	if ((phy_status & MII_GS_LINK) && !netif_carrier_ok(dev)) {
2782		tlan_dio_write8(dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK);
2783		printk(KERN_DEBUG "TLAN: %s has reestablished link\n",
2784		       dev->name);
2785		netif_carrier_on(dev);
2786	}
2787	priv->media_timer.expires = jiffies + HZ;
2788	add_timer(&priv->media_timer);
2789}
2790
2791
2792/*****************************************************************************
2793******************************************************************************
2794
2795ThunderLAN driver MII routines
2796
2797these routines are based on the information in chap. 2 of the
2798"ThunderLAN Programmer's Guide", pp. 15-24.
2799
2800******************************************************************************
2801*****************************************************************************/
2802
2803
2804/***************************************************************
2805 *	tlan_mii_read_reg
2806 *
2807 *	Returns:
2808 *		false	if ack received ok
2809 *		true	if no ack received or other error
2810 *
2811 *	Parms:
2812 *		dev		The device structure containing
2813 *				The io address and interrupt count
2814 *				for this device.
2815 *		phy		The address of the PHY to be queried.
2816 *		reg		The register whose contents are to be
2817 *				retrieved.
2818 *		val		A pointer to a variable to store the
2819 *				retrieved value.
2820 *
2821 *	This function uses the TLAN's MII bus to retrieve the contents
2822 *	of a given register on a PHY.  It sends the appropriate info
2823 *	and then reads the 16-bit register value from the MII bus via
2824 *	the TLAN SIO register.
2825 *
2826 **************************************************************/
2827
2828static bool
2829tlan_mii_read_reg(struct net_device *dev, u16 phy, u16 reg, u16 *val)
2830{
2831	u8	nack;
2832	u16	sio, tmp;
2833	u32	i;
2834	bool	err;
2835	int	minten;
2836	struct tlan_priv *priv = netdev_priv(dev);
2837	unsigned long flags = 0;
2838
2839	err = false;
2840	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
2841	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
2842
2843	if (!in_irq())
2844		spin_lock_irqsave(&priv->lock, flags);
2845
2846	tlan_mii_sync(dev->base_addr);
2847
2848	minten = tlan_get_bit(TLAN_NET_SIO_MINTEN, sio);
2849	if (minten)
2850		tlan_clear_bit(TLAN_NET_SIO_MINTEN, sio);
2851
2852	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* start (01b) */
2853	tlan_mii_send_data(dev->base_addr, 0x2, 2);	/* read  (10b) */
2854	tlan_mii_send_data(dev->base_addr, phy, 5);	/* device #      */
2855	tlan_mii_send_data(dev->base_addr, reg, 5);	/* register #    */
2856
2857
2858	tlan_clear_bit(TLAN_NET_SIO_MTXEN, sio);	/* change direction */
2859
2860	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* clock idle bit */
2861	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2862	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* wait 300ns */
2863
2864	nack = tlan_get_bit(TLAN_NET_SIO_MDATA, sio);	/* check for ACK */
2865	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);		/* finish ACK */
2866	if (nack) {					/* no ACK, so fake it */
2867		for (i = 0; i < 16; i++) {
2868			tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2869			tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2870		}
2871		tmp = 0xffff;
2872		err = true;
2873	} else {					/* ACK, so read data */
2874		for (tmp = 0, i = 0x8000; i; i >>= 1) {
2875			tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2876			if (tlan_get_bit(TLAN_NET_SIO_MDATA, sio))
2877				tmp |= i;
2878			tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2879		}
2880	}
2881
2882
2883	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);		/* idle cycle */
2884	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2885
2886	if (minten)
2887		tlan_set_bit(TLAN_NET_SIO_MINTEN, sio);
2888
2889	*val = tmp;
2890
2891	if (!in_irq())
2892		spin_unlock_irqrestore(&priv->lock, flags);
2893
2894	return err;
2895
2896}
2897
2898
2899
2900
2901/***************************************************************
2902 *	tlan_mii_send_data
2903 *
2904 *	Returns:
2905 *		Nothing
2906 *	Parms:
2907 *		base_port	The base IO port of the adapter	in
2908 *				question.
2909 *		dev		The address of the PHY to be queried.
2910 *		data		The value to be placed on the MII bus.
2911 *		num_bits	The number of bits in data that are to
2912 *				be placed on the MII bus.
2913 *
2914 *	This function sends on sequence of bits on the MII
2915 *	configuration bus.
2916 *
2917 **************************************************************/
2918
2919static void tlan_mii_send_data(u16 base_port, u32 data, unsigned num_bits)
2920{
2921	u16 sio;
2922	u32 i;
2923
2924	if (num_bits == 0)
2925		return;
2926
2927	outw(TLAN_NET_SIO, base_port + TLAN_DIO_ADR);
2928	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
2929	tlan_set_bit(TLAN_NET_SIO_MTXEN, sio);
2930
2931	for (i = (0x1 << (num_bits - 1)); i; i >>= 1) {
2932		tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2933		(void) tlan_get_bit(TLAN_NET_SIO_MCLK, sio);
2934		if (data & i)
2935			tlan_set_bit(TLAN_NET_SIO_MDATA, sio);
2936		else
2937			tlan_clear_bit(TLAN_NET_SIO_MDATA, sio);
2938		tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2939		(void) tlan_get_bit(TLAN_NET_SIO_MCLK, sio);
2940	}
2941
2942}
2943
2944
2945
2946
2947/***************************************************************
2948 *	TLan_MiiSync
2949 *
2950 *	Returns:
2951 *		Nothing
2952 *	Parms:
2953 *		base_port	The base IO port of the adapter in
2954 *				question.
2955 *
2956 *	This functions syncs all PHYs in terms of the MII configuration
2957 *	bus.
2958 *
2959 **************************************************************/
2960
2961static void tlan_mii_sync(u16 base_port)
2962{
2963	int i;
2964	u16 sio;
2965
2966	outw(TLAN_NET_SIO, base_port + TLAN_DIO_ADR);
2967	sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO;
2968
2969	tlan_clear_bit(TLAN_NET_SIO_MTXEN, sio);
2970	for (i = 0; i < 32; i++) {
2971		tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);
2972		tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
2973	}
2974
2975}
2976
2977
2978
2979
2980/***************************************************************
2981 *	tlan_mii_write_reg
2982 *
2983 *	Returns:
2984 *		Nothing
2985 *	Parms:
2986 *		dev		The device structure for the device
2987 *				to write to.
2988 *		phy		The address of the PHY to be written to.
2989 *		reg		The register whose contents are to be
2990 *				written.
2991 *		val		The value to be written to the register.
2992 *
2993 *	This function uses the TLAN's MII bus to write the contents of a
2994 *	given register on a PHY.  It sends the appropriate info and then
2995 *	writes the 16-bit register value from the MII configuration bus
2996 *	via the TLAN SIO register.
2997 *
2998 **************************************************************/
2999
3000static void
3001tlan_mii_write_reg(struct net_device *dev, u16 phy, u16 reg, u16 val)
3002{
3003	u16	sio;
3004	int	minten;
3005	unsigned long flags = 0;
3006	struct tlan_priv *priv = netdev_priv(dev);
3007
3008	outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR);
3009	sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO;
3010
3011	if (!in_irq())
3012		spin_lock_irqsave(&priv->lock, flags);
3013
3014	tlan_mii_sync(dev->base_addr);
3015
3016	minten = tlan_get_bit(TLAN_NET_SIO_MINTEN, sio);
3017	if (minten)
3018		tlan_clear_bit(TLAN_NET_SIO_MINTEN, sio);
3019
3020	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* start (01b) */
3021	tlan_mii_send_data(dev->base_addr, 0x1, 2);	/* write (01b) */
3022	tlan_mii_send_data(dev->base_addr, phy, 5);	/* device #      */
3023	tlan_mii_send_data(dev->base_addr, reg, 5);	/* register #    */
3024
3025	tlan_mii_send_data(dev->base_addr, 0x2, 2);	/* send ACK */
3026	tlan_mii_send_data(dev->base_addr, val, 16);	/* send data */
3027
3028	tlan_clear_bit(TLAN_NET_SIO_MCLK, sio);	/* idle cycle */
3029	tlan_set_bit(TLAN_NET_SIO_MCLK, sio);
3030
3031	if (minten)
3032		tlan_set_bit(TLAN_NET_SIO_MINTEN, sio);
3033
3034	if (!in_irq())
3035		spin_unlock_irqrestore(&priv->lock, flags);
3036
3037}
3038
3039
3040
3041
3042/*****************************************************************************
3043******************************************************************************
3044
3045ThunderLAN driver eeprom routines
3046
3047the Compaq netelligent 10 and 10/100 cards use a microchip 24C02A
3048EEPROM.  these functions are based on information in microchip's
3049data sheet.  I don't know how well this functions will work with
3050other Eeproms.
3051
3052******************************************************************************
3053*****************************************************************************/
3054
3055
3056/***************************************************************
3057 *	tlan_ee_send_start
3058 *
3059 *	Returns:
3060 *		Nothing
3061 *	Parms:
3062 *		io_base		The IO port base address for the
3063 *				TLAN device with the EEPROM to
3064 *				use.
3065 *
3066 *	This function sends a start cycle to an EEPROM attached
3067 *	to a TLAN chip.
3068 *
3069 **************************************************************/
3070
3071static void tlan_ee_send_start(u16 io_base)
3072{
3073	u16	sio;
3074
3075	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3076	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3077
3078	tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3079	tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3080	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3081	tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3082	tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3083
3084}
3085
3086
3087
3088
3089/***************************************************************
3090 *	tlan_ee_send_byte
3091 *
3092 *	Returns:
3093 *		If the correct ack was received, 0, otherwise 1
3094 *	Parms:	io_base		The IO port base address for the
3095 *				TLAN device with the EEPROM to
3096 *				use.
3097 *		data		The 8 bits of information to
3098 *				send to the EEPROM.
3099 *		stop		If TLAN_EEPROM_STOP is passed, a
3100 *				stop cycle is sent after the
3101 *				byte is sent after the ack is
3102 *				read.
3103 *
3104 *	This function sends a byte on the serial EEPROM line,
3105 *	driving the clock to send each bit. The function then
3106 *	reverses transmission direction and reads an acknowledge
3107 *	bit.
3108 *
3109 **************************************************************/
3110
3111static int tlan_ee_send_byte(u16 io_base, u8 data, int stop)
3112{
3113	int	err;
3114	u8	place;
3115	u16	sio;
3116
3117	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3118	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3119
3120	/* Assume clock is low, tx is enabled; */
3121	for (place = 0x80; place != 0; place >>= 1) {
3122		if (place & data)
3123			tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3124		else
3125			tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3126		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3127		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3128	}
3129	tlan_clear_bit(TLAN_NET_SIO_ETXEN, sio);
3130	tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3131	err = tlan_get_bit(TLAN_NET_SIO_EDATA, sio);
3132	tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3133	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3134
3135	if ((!err) && stop) {
3136		/* STOP, raise data while clock is high */
3137		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3138		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3139		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3140	}
3141
3142	return err;
3143
3144}
3145
3146
3147
3148
3149/***************************************************************
3150 *	tlan_ee_receive_byte
3151 *
3152 *	Returns:
3153 *		Nothing
3154 *	Parms:
3155 *		io_base		The IO port base address for the
3156 *				TLAN device with the EEPROM to
3157 *				use.
3158 *		data		An address to a char to hold the
3159 *				data sent from the EEPROM.
3160 *		stop		If TLAN_EEPROM_STOP is passed, a
3161 *				stop cycle is sent after the
3162 *				byte is received, and no ack is
3163 *				sent.
3164 *
3165 *	This function receives 8 bits of data from the EEPROM
3166 *	over the serial link.  It then sends and ack bit, or no
3167 *	ack and a stop bit.  This function is used to retrieve
3168 *	data after the address of a byte in the EEPROM has been
3169 *	sent.
3170 *
3171 **************************************************************/
3172
3173static void tlan_ee_receive_byte(u16 io_base, u8 *data, int stop)
3174{
3175	u8  place;
3176	u16 sio;
3177
3178	outw(TLAN_NET_SIO, io_base + TLAN_DIO_ADR);
3179	sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO;
3180	*data = 0;
3181
3182	/* Assume clock is low, tx is enabled; */
3183	tlan_clear_bit(TLAN_NET_SIO_ETXEN, sio);
3184	for (place = 0x80; place; place >>= 1) {
3185		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3186		if (tlan_get_bit(TLAN_NET_SIO_EDATA, sio))
3187			*data |= place;
3188		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3189	}
3190
3191	tlan_set_bit(TLAN_NET_SIO_ETXEN, sio);
3192	if (!stop) {
3193		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio); /* ack = 0 */
3194		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3195		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3196	} else {
3197		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);	/* no ack = 1 (?) */
3198		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3199		tlan_clear_bit(TLAN_NET_SIO_ECLOK, sio);
3200		/* STOP, raise data while clock is high */
3201		tlan_clear_bit(TLAN_NET_SIO_EDATA, sio);
3202		tlan_set_bit(TLAN_NET_SIO_ECLOK, sio);
3203		tlan_set_bit(TLAN_NET_SIO_EDATA, sio);
3204	}
3205
3206}
3207
3208
3209
3210
3211/***************************************************************
3212 *	tlan_ee_read_byte
3213 *
3214 *	Returns:
3215 *		No error = 0, else, the stage at which the error
3216 *		occurred.
3217 *	Parms:
3218 *		io_base		The IO port base address for the
3219 *				TLAN device with the EEPROM to
3220 *				use.
3221 *		ee_addr		The address of the byte in the
3222 *				EEPROM whose contents are to be
3223 *				retrieved.
3224 *		data		An address to a char to hold the
3225 *				data obtained from the EEPROM.
3226 *
3227 *	This function reads a byte of information from an byte
3228 *	cell in the EEPROM.
3229 *
3230 **************************************************************/
3231
3232static int tlan_ee_read_byte(struct net_device *dev, u8 ee_addr, u8 *data)
3233{
3234	int err;
3235	struct tlan_priv *priv = netdev_priv(dev);
3236	unsigned long flags = 0;
3237	int ret = 0;
3238
3239	spin_lock_irqsave(&priv->lock, flags);
3240
3241	tlan_ee_send_start(dev->base_addr);
3242	err = tlan_ee_send_byte(dev->base_addr, 0xa0, TLAN_EEPROM_ACK);
3243	if (err) {
3244		ret = 1;
3245		goto fail;
3246	}
3247	err = tlan_ee_send_byte(dev->base_addr, ee_addr, TLAN_EEPROM_ACK);
3248	if (err) {
3249		ret = 2;
3250		goto fail;
3251	}
3252	tlan_ee_send_start(dev->base_addr);
3253	err = tlan_ee_send_byte(dev->base_addr, 0xa1, TLAN_EEPROM_ACK);
3254	if (err) {
3255		ret = 3;
3256		goto fail;
3257	}
3258	tlan_ee_receive_byte(dev->base_addr, data, TLAN_EEPROM_STOP);
3259fail:
3260	spin_unlock_irqrestore(&priv->lock, flags);
3261
3262	return ret;
3263
3264}
3265
3266
3267