Linux Audio

Check our new training course

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