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