Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Driver for high-speed SCC boards (those with DMA support)
   4 * Copyright (C) 1997-2000 Klaus Kudielka
   5 *
   6 * S5SCC/DMA support by Janko Koleznik S52HI
   7 */
   8
   9
  10#include <linux/module.h>
  11#include <linux/bitops.h>
  12#include <linux/delay.h>
  13#include <linux/errno.h>
  14#include <linux/if_arp.h>
  15#include <linux/in.h>
  16#include <linux/init.h>
  17#include <linux/interrupt.h>
  18#include <linux/ioport.h>
  19#include <linux/kernel.h>
  20#include <linux/mm.h>
  21#include <linux/netdevice.h>
  22#include <linux/slab.h>
  23#include <linux/rtnetlink.h>
  24#include <linux/sockios.h>
  25#include <linux/workqueue.h>
  26#include <linux/atomic.h>
  27#include <asm/dma.h>
  28#include <asm/io.h>
  29#include <asm/irq.h>
  30#include <linux/uaccess.h>
  31#include <net/ax25.h>
  32#include "z8530.h"
  33
  34
  35/* Number of buffers per channel */
  36
  37#define NUM_TX_BUF      2	/* NUM_TX_BUF >= 1 (min. 2 recommended) */
  38#define NUM_RX_BUF      6	/* NUM_RX_BUF >= 1 (min. 2 recommended) */
  39#define BUF_SIZE        1576	/* BUF_SIZE >= mtu + hard_header_len */
  40
  41
  42/* Cards supported */
  43
  44#define HW_PI           { "Ottawa PI", 0x300, 0x20, 0x10, 8, \
  45                            0, 8, 1843200, 3686400 }
  46#define HW_PI2          { "Ottawa PI2", 0x300, 0x20, 0x10, 8, \
  47			    0, 8, 3686400, 7372800 }
  48#define HW_TWIN         { "Gracilis PackeTwin", 0x200, 0x10, 0x10, 32, \
  49			    0, 4, 6144000, 6144000 }
  50#define HW_S5           { "S5SCC/DMA", 0x200, 0x10, 0x10, 32, \
  51                          0, 8, 4915200, 9830400 }
  52
  53#define HARDWARE        { HW_PI, HW_PI2, HW_TWIN, HW_S5 }
  54
  55#define TMR_0_HZ        25600	/* Frequency of timer 0 */
  56
  57#define TYPE_PI         0
  58#define TYPE_PI2        1
  59#define TYPE_TWIN       2
  60#define TYPE_S5         3
  61#define NUM_TYPES       4
  62
  63#define MAX_NUM_DEVS    32
  64
  65
  66/* SCC chips supported */
  67
  68#define Z8530           0
  69#define Z85C30          1
  70#define Z85230          2
  71
  72#define CHIPNAMES       { "Z8530", "Z85C30", "Z85230" }
  73
  74
  75/* I/O registers */
  76
  77/* 8530 registers relative to card base */
  78#define SCCB_CMD        0x00
  79#define SCCB_DATA       0x01
  80#define SCCA_CMD        0x02
  81#define SCCA_DATA       0x03
  82
  83/* 8253/8254 registers relative to card base */
  84#define TMR_CNT0        0x00
  85#define TMR_CNT1        0x01
  86#define TMR_CNT2        0x02
  87#define TMR_CTRL        0x03
  88
  89/* Additional PI/PI2 registers relative to card base */
  90#define PI_DREQ_MASK    0x04
  91
  92/* Additional PackeTwin registers relative to card base */
  93#define TWIN_INT_REG    0x08
  94#define TWIN_CLR_TMR1   0x09
  95#define TWIN_CLR_TMR2   0x0a
  96#define TWIN_SPARE_1    0x0b
  97#define TWIN_DMA_CFG    0x08
  98#define TWIN_SERIAL_CFG 0x09
  99#define TWIN_DMA_CLR_FF 0x0a
 100#define TWIN_SPARE_2    0x0b
 101
 102
 103/* PackeTwin I/O register values */
 104
 105/* INT_REG */
 106#define TWIN_SCC_MSK       0x01
 107#define TWIN_TMR1_MSK      0x02
 108#define TWIN_TMR2_MSK      0x04
 109#define TWIN_INT_MSK       0x07
 110
 111/* SERIAL_CFG */
 112#define TWIN_DTRA_ON       0x01
 113#define TWIN_DTRB_ON       0x02
 114#define TWIN_EXTCLKA       0x04
 115#define TWIN_EXTCLKB       0x08
 116#define TWIN_LOOPA_ON      0x10
 117#define TWIN_LOOPB_ON      0x20
 118#define TWIN_EI            0x80
 119
 120/* DMA_CFG */
 121#define TWIN_DMA_HDX_T1    0x08
 122#define TWIN_DMA_HDX_R1    0x0a
 123#define TWIN_DMA_HDX_T3    0x14
 124#define TWIN_DMA_HDX_R3    0x16
 125#define TWIN_DMA_FDX_T3R1  0x1b
 126#define TWIN_DMA_FDX_T1R3  0x1d
 127
 128
 129/* Status values */
 130
 131#define IDLE      0
 132#define TX_HEAD   1
 133#define TX_DATA   2
 134#define TX_PAUSE  3
 135#define TX_TAIL   4
 136#define RTS_OFF   5
 137#define WAIT      6
 138#define DCD_ON    7
 139#define RX_ON     8
 140#define DCD_OFF   9
 141
 142
 143/* Ioctls */
 144
 145#define SIOCGSCCPARAM SIOCDEVPRIVATE
 146#define SIOCSSCCPARAM (SIOCDEVPRIVATE+1)
 147
 148
 149/* Data types */
 150
 151struct scc_param {
 152	int pclk_hz;		/* frequency of BRG input (don't change) */
 153	int brg_tc;		/* BRG terminal count; BRG disabled if < 0 */
 154	int nrzi;		/* 0 (nrz), 1 (nrzi) */
 155	int clocks;		/* see dmascc_cfg documentation */
 156	int txdelay;		/* [1/TMR_0_HZ] */
 157	int txtimeout;		/* [1/HZ] */
 158	int txtail;		/* [1/TMR_0_HZ] */
 159	int waittime;		/* [1/TMR_0_HZ] */
 160	int slottime;		/* [1/TMR_0_HZ] */
 161	int persist;		/* 1 ... 256 */
 162	int dma;		/* -1 (disable), 0, 1, 3 */
 163	int txpause;		/* [1/TMR_0_HZ] */
 164	int rtsoff;		/* [1/TMR_0_HZ] */
 165	int dcdon;		/* [1/TMR_0_HZ] */
 166	int dcdoff;		/* [1/TMR_0_HZ] */
 167};
 168
 169struct scc_hardware {
 170	char *name;
 171	int io_region;
 172	int io_delta;
 173	int io_size;
 174	int num_devs;
 175	int scc_offset;
 176	int tmr_offset;
 177	int tmr_hz;
 178	int pclk_hz;
 179};
 180
 181struct scc_priv {
 182	int type;
 183	int chip;
 184	struct net_device *dev;
 185	struct scc_info *info;
 186
 187	int channel;
 188	int card_base, scc_cmd, scc_data;
 189	int tmr_cnt, tmr_ctrl, tmr_mode;
 190	struct scc_param param;
 191	char rx_buf[NUM_RX_BUF][BUF_SIZE];
 192	int rx_len[NUM_RX_BUF];
 193	int rx_ptr;
 194	struct work_struct rx_work;
 195	int rx_head, rx_tail, rx_count;
 196	int rx_over;
 197	char tx_buf[NUM_TX_BUF][BUF_SIZE];
 198	int tx_len[NUM_TX_BUF];
 199	int tx_ptr;
 200	int tx_head, tx_tail, tx_count;
 201	int state;
 202	unsigned long tx_start;
 203	int rr0;
 204	spinlock_t *register_lock;	/* Per scc_info */
 205	spinlock_t ring_lock;
 206};
 207
 208struct scc_info {
 209	int irq_used;
 210	int twin_serial_cfg;
 211	struct net_device *dev[2];
 212	struct scc_priv priv[2];
 213	struct scc_info *next;
 214	spinlock_t register_lock;	/* Per device register lock */
 215};
 216
 217
 218/* Function declarations */
 219static int setup_adapter(int card_base, int type, int n) __init;
 220
 221static void write_scc(struct scc_priv *priv, int reg, int val);
 222static void write_scc_data(struct scc_priv *priv, int val, int fast);
 223static int read_scc(struct scc_priv *priv, int reg);
 224static int read_scc_data(struct scc_priv *priv);
 225
 226static int scc_open(struct net_device *dev);
 227static int scc_close(struct net_device *dev);
 228static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
 229static int scc_send_packet(struct sk_buff *skb, struct net_device *dev);
 230static int scc_set_mac_address(struct net_device *dev, void *sa);
 231
 232static inline void tx_on(struct scc_priv *priv);
 233static inline void rx_on(struct scc_priv *priv);
 234static inline void rx_off(struct scc_priv *priv);
 235static void start_timer(struct scc_priv *priv, int t, int r15);
 236static inline unsigned char random(void);
 237
 238static inline void z8530_isr(struct scc_info *info);
 239static irqreturn_t scc_isr(int irq, void *dev_id);
 240static void rx_isr(struct scc_priv *priv);
 241static void special_condition(struct scc_priv *priv, int rc);
 242static void rx_bh(struct work_struct *);
 243static void tx_isr(struct scc_priv *priv);
 244static void es_isr(struct scc_priv *priv);
 245static void tm_isr(struct scc_priv *priv);
 246
 247
 248/* Initialization variables */
 249
 250static int io[MAX_NUM_DEVS] __initdata = { 0, };
 251
 252/* Beware! hw[] is also used in dmascc_exit(). */
 253static struct scc_hardware hw[NUM_TYPES] = HARDWARE;
 254
 255
 256/* Global variables */
 257
 258static struct scc_info *first;
 259static unsigned long rand;
 260
 261
 262MODULE_AUTHOR("Klaus Kudielka");
 263MODULE_DESCRIPTION("Driver for high-speed SCC boards");
 264module_param_hw_array(io, int, ioport, NULL, 0);
 265MODULE_LICENSE("GPL");
 266
 267static void __exit dmascc_exit(void)
 268{
 269	int i;
 270	struct scc_info *info;
 271
 272	while (first) {
 273		info = first;
 274
 275		/* Unregister devices */
 276		for (i = 0; i < 2; i++)
 277			unregister_netdev(info->dev[i]);
 278
 279		/* Reset board */
 280		if (info->priv[0].type == TYPE_TWIN)
 281			outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
 282		write_scc(&info->priv[0], R9, FHWRES);
 283		release_region(info->dev[0]->base_addr,
 284			       hw[info->priv[0].type].io_size);
 285
 286		for (i = 0; i < 2; i++)
 287			free_netdev(info->dev[i]);
 288
 289		/* Free memory */
 290		first = info->next;
 291		kfree(info);
 292	}
 293}
 294
 295static int __init dmascc_init(void)
 296{
 297	int h, i, j, n;
 298	int base[MAX_NUM_DEVS], tcmd[MAX_NUM_DEVS], t0[MAX_NUM_DEVS],
 299	    t1[MAX_NUM_DEVS];
 300	unsigned t_val;
 301	unsigned long time, start[MAX_NUM_DEVS], delay[MAX_NUM_DEVS],
 302	    counting[MAX_NUM_DEVS];
 303
 304	/* Initialize random number generator */
 305	rand = jiffies;
 306	/* Cards found = 0 */
 307	n = 0;
 308	/* Warning message */
 309	if (!io[0])
 310		printk(KERN_INFO "dmascc: autoprobing (dangerous)\n");
 311
 312	/* Run autodetection for each card type */
 313	for (h = 0; h < NUM_TYPES; h++) {
 314
 315		if (io[0]) {
 316			/* User-specified I/O address regions */
 317			for (i = 0; i < hw[h].num_devs; i++)
 318				base[i] = 0;
 319			for (i = 0; i < MAX_NUM_DEVS && io[i]; i++) {
 320				j = (io[i] -
 321				     hw[h].io_region) / hw[h].io_delta;
 322				if (j >= 0 && j < hw[h].num_devs &&
 323				    hw[h].io_region +
 324				    j * hw[h].io_delta == io[i]) {
 325					base[j] = io[i];
 326				}
 327			}
 328		} else {
 329			/* Default I/O address regions */
 330			for (i = 0; i < hw[h].num_devs; i++) {
 331				base[i] =
 332				    hw[h].io_region + i * hw[h].io_delta;
 333			}
 334		}
 335
 336		/* Check valid I/O address regions */
 337		for (i = 0; i < hw[h].num_devs; i++)
 338			if (base[i]) {
 339				if (!request_region
 340				    (base[i], hw[h].io_size, "dmascc"))
 341					base[i] = 0;
 342				else {
 343					tcmd[i] =
 344					    base[i] + hw[h].tmr_offset +
 345					    TMR_CTRL;
 346					t0[i] =
 347					    base[i] + hw[h].tmr_offset +
 348					    TMR_CNT0;
 349					t1[i] =
 350					    base[i] + hw[h].tmr_offset +
 351					    TMR_CNT1;
 352				}
 353			}
 354
 355		/* Start timers */
 356		for (i = 0; i < hw[h].num_devs; i++)
 357			if (base[i]) {
 358				/* Timer 0: LSB+MSB, Mode 3, TMR_0_HZ */
 359				outb(0x36, tcmd[i]);
 360				outb((hw[h].tmr_hz / TMR_0_HZ) & 0xFF,
 361				     t0[i]);
 362				outb((hw[h].tmr_hz / TMR_0_HZ) >> 8,
 363				     t0[i]);
 364				/* Timer 1: LSB+MSB, Mode 0, HZ/10 */
 365				outb(0x70, tcmd[i]);
 366				outb((TMR_0_HZ / HZ * 10) & 0xFF, t1[i]);
 367				outb((TMR_0_HZ / HZ * 10) >> 8, t1[i]);
 368				start[i] = jiffies;
 369				delay[i] = 0;
 370				counting[i] = 1;
 371				/* Timer 2: LSB+MSB, Mode 0 */
 372				outb(0xb0, tcmd[i]);
 373			}
 374		time = jiffies;
 375		/* Wait until counter registers are loaded */
 376		udelay(2000000 / TMR_0_HZ);
 377
 378		/* Timing loop */
 379		while (jiffies - time < 13) {
 380			for (i = 0; i < hw[h].num_devs; i++)
 381				if (base[i] && counting[i]) {
 382					/* Read back Timer 1: latch; read LSB; read MSB */
 383					outb(0x40, tcmd[i]);
 384					t_val =
 385					    inb(t1[i]) + (inb(t1[i]) << 8);
 386					/* Also check whether counter did wrap */
 387					if (t_val == 0 ||
 388					    t_val > TMR_0_HZ / HZ * 10)
 389						counting[i] = 0;
 390					delay[i] = jiffies - start[i];
 391				}
 392		}
 393
 394		/* Evaluate measurements */
 395		for (i = 0; i < hw[h].num_devs; i++)
 396			if (base[i]) {
 397				if ((delay[i] >= 9 && delay[i] <= 11) &&
 398				    /* Ok, we have found an adapter */
 399				    (setup_adapter(base[i], h, n) == 0))
 400					n++;
 401				else
 402					release_region(base[i],
 403						       hw[h].io_size);
 404			}
 405
 406	}			/* NUM_TYPES */
 407
 408	/* If any adapter was successfully initialized, return ok */
 409	if (n)
 410		return 0;
 411
 412	/* If no adapter found, return error */
 413	printk(KERN_INFO "dmascc: no adapters found\n");
 414	return -EIO;
 415}
 416
 417module_init(dmascc_init);
 418module_exit(dmascc_exit);
 419
 420static void __init dev_setup(struct net_device *dev)
 421{
 422	dev->type = ARPHRD_AX25;
 423	dev->hard_header_len = AX25_MAX_HEADER_LEN;
 424	dev->mtu = 1500;
 425	dev->addr_len = AX25_ADDR_LEN;
 426	dev->tx_queue_len = 64;
 427	memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
 428	memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN);
 429}
 430
 431static const struct net_device_ops scc_netdev_ops = {
 432	.ndo_open = scc_open,
 433	.ndo_stop = scc_close,
 434	.ndo_start_xmit = scc_send_packet,
 435	.ndo_do_ioctl = scc_ioctl,
 436	.ndo_set_mac_address = scc_set_mac_address,
 437};
 438
 439static int __init setup_adapter(int card_base, int type, int n)
 440{
 441	int i, irq, chip, err;
 442	struct scc_info *info;
 443	struct net_device *dev;
 444	struct scc_priv *priv;
 445	unsigned long time;
 446	unsigned int irqs;
 447	int tmr_base = card_base + hw[type].tmr_offset;
 448	int scc_base = card_base + hw[type].scc_offset;
 449	char *chipnames[] = CHIPNAMES;
 450
 451	/* Initialize what is necessary for write_scc and write_scc_data */
 452	info = kzalloc(sizeof(struct scc_info), GFP_KERNEL | GFP_DMA);
 453	if (!info) {
 454		err = -ENOMEM;
 455		goto out;
 456	}
 457
 458	info->dev[0] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
 459	if (!info->dev[0]) {
 460		printk(KERN_ERR "dmascc: "
 461		       "could not allocate memory for %s at %#3x\n",
 462		       hw[type].name, card_base);
 463		err = -ENOMEM;
 464		goto out1;
 465	}
 466
 467	info->dev[1] = alloc_netdev(0, "", NET_NAME_UNKNOWN, dev_setup);
 468	if (!info->dev[1]) {
 469		printk(KERN_ERR "dmascc: "
 470		       "could not allocate memory for %s at %#3x\n",
 471		       hw[type].name, card_base);
 472		err = -ENOMEM;
 473		goto out2;
 474	}
 475	spin_lock_init(&info->register_lock);
 476
 477	priv = &info->priv[0];
 478	priv->type = type;
 479	priv->card_base = card_base;
 480	priv->scc_cmd = scc_base + SCCA_CMD;
 481	priv->scc_data = scc_base + SCCA_DATA;
 482	priv->register_lock = &info->register_lock;
 483
 484	/* Reset SCC */
 485	write_scc(priv, R9, FHWRES | MIE | NV);
 486
 487	/* Determine type of chip by enabling SDLC/HDLC enhancements */
 488	write_scc(priv, R15, SHDLCE);
 489	if (!read_scc(priv, R15)) {
 490		/* WR7' not present. This is an ordinary Z8530 SCC. */
 491		chip = Z8530;
 492	} else {
 493		/* Put one character in TX FIFO */
 494		write_scc_data(priv, 0, 0);
 495		if (read_scc(priv, R0) & Tx_BUF_EMP) {
 496			/* TX FIFO not full. This is a Z85230 ESCC with a 4-byte FIFO. */
 497			chip = Z85230;
 498		} else {
 499			/* TX FIFO full. This is a Z85C30 SCC with a 1-byte FIFO. */
 500			chip = Z85C30;
 501		}
 502	}
 503	write_scc(priv, R15, 0);
 504
 505	/* Start IRQ auto-detection */
 506	irqs = probe_irq_on();
 507
 508	/* Enable interrupts */
 509	if (type == TYPE_TWIN) {
 510		outb(0, card_base + TWIN_DMA_CFG);
 511		inb(card_base + TWIN_CLR_TMR1);
 512		inb(card_base + TWIN_CLR_TMR2);
 513		info->twin_serial_cfg = TWIN_EI;
 514		outb(info->twin_serial_cfg, card_base + TWIN_SERIAL_CFG);
 515	} else {
 516		write_scc(priv, R15, CTSIE);
 517		write_scc(priv, R0, RES_EXT_INT);
 518		write_scc(priv, R1, EXT_INT_ENAB);
 519	}
 520
 521	/* Start timer */
 522	outb(1, tmr_base + TMR_CNT1);
 523	outb(0, tmr_base + TMR_CNT1);
 524
 525	/* Wait and detect IRQ */
 526	time = jiffies;
 527	while (jiffies - time < 2 + HZ / TMR_0_HZ);
 528	irq = probe_irq_off(irqs);
 529
 530	/* Clear pending interrupt, disable interrupts */
 531	if (type == TYPE_TWIN) {
 532		inb(card_base + TWIN_CLR_TMR1);
 533	} else {
 534		write_scc(priv, R1, 0);
 535		write_scc(priv, R15, 0);
 536		write_scc(priv, R0, RES_EXT_INT);
 537	}
 538
 539	if (irq <= 0) {
 540		printk(KERN_ERR
 541		       "dmascc: could not find irq of %s at %#3x (irq=%d)\n",
 542		       hw[type].name, card_base, irq);
 543		err = -ENODEV;
 544		goto out3;
 545	}
 546
 547	/* Set up data structures */
 548	for (i = 0; i < 2; i++) {
 549		dev = info->dev[i];
 550		priv = &info->priv[i];
 551		priv->type = type;
 552		priv->chip = chip;
 553		priv->dev = dev;
 554		priv->info = info;
 555		priv->channel = i;
 556		spin_lock_init(&priv->ring_lock);
 557		priv->register_lock = &info->register_lock;
 558		priv->card_base = card_base;
 559		priv->scc_cmd = scc_base + (i ? SCCB_CMD : SCCA_CMD);
 560		priv->scc_data = scc_base + (i ? SCCB_DATA : SCCA_DATA);
 561		priv->tmr_cnt = tmr_base + (i ? TMR_CNT2 : TMR_CNT1);
 562		priv->tmr_ctrl = tmr_base + TMR_CTRL;
 563		priv->tmr_mode = i ? 0xb0 : 0x70;
 564		priv->param.pclk_hz = hw[type].pclk_hz;
 565		priv->param.brg_tc = -1;
 566		priv->param.clocks = TCTRxCP | RCRTxCP;
 567		priv->param.persist = 256;
 568		priv->param.dma = -1;
 569		INIT_WORK(&priv->rx_work, rx_bh);
 570		dev->ml_priv = priv;
 571		snprintf(dev->name, sizeof(dev->name), "dmascc%i", 2 * n + i);
 572		dev->base_addr = card_base;
 573		dev->irq = irq;
 574		dev->netdev_ops = &scc_netdev_ops;
 575		dev->header_ops = &ax25_header_ops;
 576	}
 577	if (register_netdev(info->dev[0])) {
 578		printk(KERN_ERR "dmascc: could not register %s\n",
 579		       info->dev[0]->name);
 580		err = -ENODEV;
 581		goto out3;
 582	}
 583	if (register_netdev(info->dev[1])) {
 584		printk(KERN_ERR "dmascc: could not register %s\n",
 585		       info->dev[1]->name);
 586		err = -ENODEV;
 587		goto out4;
 588	}
 589
 590
 591	info->next = first;
 592	first = info;
 593	printk(KERN_INFO "dmascc: found %s (%s) at %#3x, irq %d\n",
 594	       hw[type].name, chipnames[chip], card_base, irq);
 595	return 0;
 596
 597      out4:
 598	unregister_netdev(info->dev[0]);
 599      out3:
 600	if (info->priv[0].type == TYPE_TWIN)
 601		outb(0, info->dev[0]->base_addr + TWIN_SERIAL_CFG);
 602	write_scc(&info->priv[0], R9, FHWRES);
 603	free_netdev(info->dev[1]);
 604      out2:
 605	free_netdev(info->dev[0]);
 606      out1:
 607	kfree(info);
 608      out:
 609	return err;
 610}
 611
 612
 613/* Driver functions */
 614
 615static void write_scc(struct scc_priv *priv, int reg, int val)
 616{
 617	unsigned long flags;
 618	switch (priv->type) {
 619	case TYPE_S5:
 620		if (reg)
 621			outb(reg, priv->scc_cmd);
 622		outb(val, priv->scc_cmd);
 623		return;
 624	case TYPE_TWIN:
 625		if (reg)
 626			outb_p(reg, priv->scc_cmd);
 627		outb_p(val, priv->scc_cmd);
 628		return;
 629	default:
 630		spin_lock_irqsave(priv->register_lock, flags);
 631		outb_p(0, priv->card_base + PI_DREQ_MASK);
 632		if (reg)
 633			outb_p(reg, priv->scc_cmd);
 634		outb_p(val, priv->scc_cmd);
 635		outb(1, priv->card_base + PI_DREQ_MASK);
 636		spin_unlock_irqrestore(priv->register_lock, flags);
 637		return;
 638	}
 639}
 640
 641
 642static void write_scc_data(struct scc_priv *priv, int val, int fast)
 643{
 644	unsigned long flags;
 645	switch (priv->type) {
 646	case TYPE_S5:
 647		outb(val, priv->scc_data);
 648		return;
 649	case TYPE_TWIN:
 650		outb_p(val, priv->scc_data);
 651		return;
 652	default:
 653		if (fast)
 654			outb_p(val, priv->scc_data);
 655		else {
 656			spin_lock_irqsave(priv->register_lock, flags);
 657			outb_p(0, priv->card_base + PI_DREQ_MASK);
 658			outb_p(val, priv->scc_data);
 659			outb(1, priv->card_base + PI_DREQ_MASK);
 660			spin_unlock_irqrestore(priv->register_lock, flags);
 661		}
 662		return;
 663	}
 664}
 665
 666
 667static int read_scc(struct scc_priv *priv, int reg)
 668{
 669	int rc;
 670	unsigned long flags;
 671	switch (priv->type) {
 672	case TYPE_S5:
 673		if (reg)
 674			outb(reg, priv->scc_cmd);
 675		return inb(priv->scc_cmd);
 676	case TYPE_TWIN:
 677		if (reg)
 678			outb_p(reg, priv->scc_cmd);
 679		return inb_p(priv->scc_cmd);
 680	default:
 681		spin_lock_irqsave(priv->register_lock, flags);
 682		outb_p(0, priv->card_base + PI_DREQ_MASK);
 683		if (reg)
 684			outb_p(reg, priv->scc_cmd);
 685		rc = inb_p(priv->scc_cmd);
 686		outb(1, priv->card_base + PI_DREQ_MASK);
 687		spin_unlock_irqrestore(priv->register_lock, flags);
 688		return rc;
 689	}
 690}
 691
 692
 693static int read_scc_data(struct scc_priv *priv)
 694{
 695	int rc;
 696	unsigned long flags;
 697	switch (priv->type) {
 698	case TYPE_S5:
 699		return inb(priv->scc_data);
 700	case TYPE_TWIN:
 701		return inb_p(priv->scc_data);
 702	default:
 703		spin_lock_irqsave(priv->register_lock, flags);
 704		outb_p(0, priv->card_base + PI_DREQ_MASK);
 705		rc = inb_p(priv->scc_data);
 706		outb(1, priv->card_base + PI_DREQ_MASK);
 707		spin_unlock_irqrestore(priv->register_lock, flags);
 708		return rc;
 709	}
 710}
 711
 712
 713static int scc_open(struct net_device *dev)
 714{
 715	struct scc_priv *priv = dev->ml_priv;
 716	struct scc_info *info = priv->info;
 717	int card_base = priv->card_base;
 718
 719	/* Request IRQ if not already used by other channel */
 720	if (!info->irq_used) {
 721		if (request_irq(dev->irq, scc_isr, 0, "dmascc", info)) {
 722			return -EAGAIN;
 723		}
 724	}
 725	info->irq_used++;
 726
 727	/* Request DMA if required */
 728	if (priv->param.dma >= 0) {
 729		if (request_dma(priv->param.dma, "dmascc")) {
 730			if (--info->irq_used == 0)
 731				free_irq(dev->irq, info);
 732			return -EAGAIN;
 733		} else {
 734			unsigned long flags = claim_dma_lock();
 735			clear_dma_ff(priv->param.dma);
 736			release_dma_lock(flags);
 737		}
 738	}
 739
 740	/* Initialize local variables */
 741	priv->rx_ptr = 0;
 742	priv->rx_over = 0;
 743	priv->rx_head = priv->rx_tail = priv->rx_count = 0;
 744	priv->state = IDLE;
 745	priv->tx_head = priv->tx_tail = priv->tx_count = 0;
 746	priv->tx_ptr = 0;
 747
 748	/* Reset channel */
 749	write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
 750	/* X1 clock, SDLC mode */
 751	write_scc(priv, R4, SDLC | X1CLK);
 752	/* DMA */
 753	write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
 754	/* 8 bit RX char, RX disable */
 755	write_scc(priv, R3, Rx8);
 756	/* 8 bit TX char, TX disable */
 757	write_scc(priv, R5, Tx8);
 758	/* SDLC address field */
 759	write_scc(priv, R6, 0);
 760	/* SDLC flag */
 761	write_scc(priv, R7, FLAG);
 762	switch (priv->chip) {
 763	case Z85C30:
 764		/* Select WR7' */
 765		write_scc(priv, R15, SHDLCE);
 766		/* Auto EOM reset */
 767		write_scc(priv, R7, AUTOEOM);
 768		write_scc(priv, R15, 0);
 769		break;
 770	case Z85230:
 771		/* Select WR7' */
 772		write_scc(priv, R15, SHDLCE);
 773		/* The following bits are set (see 2.5.2.1):
 774		   - Automatic EOM reset
 775		   - Interrupt request if RX FIFO is half full
 776		   This bit should be ignored in DMA mode (according to the
 777		   documentation), but actually isn't. The receiver doesn't work if
 778		   it is set. Thus, we have to clear it in DMA mode.
 779		   - Interrupt/DMA request if TX FIFO is completely empty
 780		   a) If set, the ESCC behaves as if it had no TX FIFO (Z85C30
 781		   compatibility).
 782		   b) If cleared, DMA requests may follow each other very quickly,
 783		   filling up the TX FIFO.
 784		   Advantage: TX works even in case of high bus latency.
 785		   Disadvantage: Edge-triggered DMA request circuitry may miss
 786		   a request. No more data is delivered, resulting
 787		   in a TX FIFO underrun.
 788		   Both PI2 and S5SCC/DMA seem to work fine with TXFIFOE cleared.
 789		   The PackeTwin doesn't. I don't know about the PI, but let's
 790		   assume it behaves like the PI2.
 791		 */
 792		if (priv->param.dma >= 0) {
 793			if (priv->type == TYPE_TWIN)
 794				write_scc(priv, R7, AUTOEOM | TXFIFOE);
 795			else
 796				write_scc(priv, R7, AUTOEOM);
 797		} else {
 798			write_scc(priv, R7, AUTOEOM | RXFIFOH);
 799		}
 800		write_scc(priv, R15, 0);
 801		break;
 802	}
 803	/* Preset CRC, NRZ(I) encoding */
 804	write_scc(priv, R10, CRCPS | (priv->param.nrzi ? NRZI : NRZ));
 805
 806	/* Configure baud rate generator */
 807	if (priv->param.brg_tc >= 0) {
 808		/* Program BR generator */
 809		write_scc(priv, R12, priv->param.brg_tc & 0xFF);
 810		write_scc(priv, R13, (priv->param.brg_tc >> 8) & 0xFF);
 811		/* BRG source = SYS CLK; enable BRG; DTR REQ function (required by
 812		   PackeTwin, not connected on the PI2); set DPLL source to BRG */
 813		write_scc(priv, R14, SSBR | DTRREQ | BRSRC | BRENABL);
 814		/* Enable DPLL */
 815		write_scc(priv, R14, SEARCH | DTRREQ | BRSRC | BRENABL);
 816	} else {
 817		/* Disable BR generator */
 818		write_scc(priv, R14, DTRREQ | BRSRC);
 819	}
 820
 821	/* Configure clocks */
 822	if (priv->type == TYPE_TWIN) {
 823		/* Disable external TX clock receiver */
 824		outb((info->twin_serial_cfg &=
 825		      ~(priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
 826		     card_base + TWIN_SERIAL_CFG);
 827	}
 828	write_scc(priv, R11, priv->param.clocks);
 829	if ((priv->type == TYPE_TWIN) && !(priv->param.clocks & TRxCOI)) {
 830		/* Enable external TX clock receiver */
 831		outb((info->twin_serial_cfg |=
 832		      (priv->channel ? TWIN_EXTCLKB : TWIN_EXTCLKA)),
 833		     card_base + TWIN_SERIAL_CFG);
 834	}
 835
 836	/* Configure PackeTwin */
 837	if (priv->type == TYPE_TWIN) {
 838		/* Assert DTR, enable interrupts */
 839		outb((info->twin_serial_cfg |= TWIN_EI |
 840		      (priv->channel ? TWIN_DTRB_ON : TWIN_DTRA_ON)),
 841		     card_base + TWIN_SERIAL_CFG);
 842	}
 843
 844	/* Read current status */
 845	priv->rr0 = read_scc(priv, R0);
 846	/* Enable DCD interrupt */
 847	write_scc(priv, R15, DCDIE);
 848
 849	netif_start_queue(dev);
 850
 851	return 0;
 852}
 853
 854
 855static int scc_close(struct net_device *dev)
 856{
 857	struct scc_priv *priv = dev->ml_priv;
 858	struct scc_info *info = priv->info;
 859	int card_base = priv->card_base;
 860
 861	netif_stop_queue(dev);
 862
 863	if (priv->type == TYPE_TWIN) {
 864		/* Drop DTR */
 865		outb((info->twin_serial_cfg &=
 866		      (priv->channel ? ~TWIN_DTRB_ON : ~TWIN_DTRA_ON)),
 867		     card_base + TWIN_SERIAL_CFG);
 868	}
 869
 870	/* Reset channel, free DMA and IRQ */
 871	write_scc(priv, R9, (priv->channel ? CHRB : CHRA) | MIE | NV);
 872	if (priv->param.dma >= 0) {
 873		if (priv->type == TYPE_TWIN)
 874			outb(0, card_base + TWIN_DMA_CFG);
 875		free_dma(priv->param.dma);
 876	}
 877	if (--info->irq_used == 0)
 878		free_irq(dev->irq, info);
 879
 880	return 0;
 881}
 882
 883
 884static int scc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 885{
 886	struct scc_priv *priv = dev->ml_priv;
 887
 888	switch (cmd) {
 889	case SIOCGSCCPARAM:
 890		if (copy_to_user
 891		    (ifr->ifr_data, &priv->param,
 892		     sizeof(struct scc_param)))
 893			return -EFAULT;
 894		return 0;
 895	case SIOCSSCCPARAM:
 896		if (!capable(CAP_NET_ADMIN))
 897			return -EPERM;
 898		if (netif_running(dev))
 899			return -EAGAIN;
 900		if (copy_from_user
 901		    (&priv->param, ifr->ifr_data,
 902		     sizeof(struct scc_param)))
 903			return -EFAULT;
 904		return 0;
 905	default:
 906		return -EINVAL;
 907	}
 908}
 909
 910
 911static int scc_send_packet(struct sk_buff *skb, struct net_device *dev)
 912{
 913	struct scc_priv *priv = dev->ml_priv;
 914	unsigned long flags;
 915	int i;
 916
 917	if (skb->protocol == htons(ETH_P_IP))
 918		return ax25_ip_xmit(skb);
 919
 920	/* Temporarily stop the scheduler feeding us packets */
 921	netif_stop_queue(dev);
 922
 923	/* Transfer data to DMA buffer */
 924	i = priv->tx_head;
 925	skb_copy_from_linear_data_offset(skb, 1, priv->tx_buf[i], skb->len - 1);
 926	priv->tx_len[i] = skb->len - 1;
 927
 928	/* Clear interrupts while we touch our circular buffers */
 929
 930	spin_lock_irqsave(&priv->ring_lock, flags);
 931	/* Move the ring buffer's head */
 932	priv->tx_head = (i + 1) % NUM_TX_BUF;
 933	priv->tx_count++;
 934
 935	/* If we just filled up the last buffer, leave queue stopped.
 936	   The higher layers must wait until we have a DMA buffer
 937	   to accept the data. */
 938	if (priv->tx_count < NUM_TX_BUF)
 939		netif_wake_queue(dev);
 940
 941	/* Set new TX state */
 942	if (priv->state == IDLE) {
 943		/* Assert RTS, start timer */
 944		priv->state = TX_HEAD;
 945		priv->tx_start = jiffies;
 946		write_scc(priv, R5, TxCRC_ENAB | RTS | TxENAB | Tx8);
 947		write_scc(priv, R15, 0);
 948		start_timer(priv, priv->param.txdelay, 0);
 949	}
 950
 951	/* Turn interrupts back on and free buffer */
 952	spin_unlock_irqrestore(&priv->ring_lock, flags);
 953	dev_kfree_skb(skb);
 954
 955	return NETDEV_TX_OK;
 956}
 957
 958
 959static int scc_set_mac_address(struct net_device *dev, void *sa)
 960{
 961	memcpy(dev->dev_addr, ((struct sockaddr *) sa)->sa_data,
 962	       dev->addr_len);
 963	return 0;
 964}
 965
 966
 967static inline void tx_on(struct scc_priv *priv)
 968{
 969	int i, n;
 970	unsigned long flags;
 971
 972	if (priv->param.dma >= 0) {
 973		n = (priv->chip == Z85230) ? 3 : 1;
 974		/* Program DMA controller */
 975		flags = claim_dma_lock();
 976		set_dma_mode(priv->param.dma, DMA_MODE_WRITE);
 977		set_dma_addr(priv->param.dma,
 978			     (int) priv->tx_buf[priv->tx_tail] + n);
 979		set_dma_count(priv->param.dma,
 980			      priv->tx_len[priv->tx_tail] - n);
 981		release_dma_lock(flags);
 982		/* Enable TX underrun interrupt */
 983		write_scc(priv, R15, TxUIE);
 984		/* Configure DREQ */
 985		if (priv->type == TYPE_TWIN)
 986			outb((priv->param.dma ==
 987			      1) ? TWIN_DMA_HDX_T1 : TWIN_DMA_HDX_T3,
 988			     priv->card_base + TWIN_DMA_CFG);
 989		else
 990			write_scc(priv, R1,
 991				  EXT_INT_ENAB | WT_FN_RDYFN |
 992				  WT_RDY_ENAB);
 993		/* Write first byte(s) */
 994		spin_lock_irqsave(priv->register_lock, flags);
 995		for (i = 0; i < n; i++)
 996			write_scc_data(priv,
 997				       priv->tx_buf[priv->tx_tail][i], 1);
 998		enable_dma(priv->param.dma);
 999		spin_unlock_irqrestore(priv->register_lock, flags);
1000	} else {
1001		write_scc(priv, R15, TxUIE);
1002		write_scc(priv, R1,
1003			  EXT_INT_ENAB | WT_FN_RDYFN | TxINT_ENAB);
1004		tx_isr(priv);
1005	}
1006	/* Reset EOM latch if we do not have the AUTOEOM feature */
1007	if (priv->chip == Z8530)
1008		write_scc(priv, R0, RES_EOM_L);
1009}
1010
1011
1012static inline void rx_on(struct scc_priv *priv)
1013{
1014	unsigned long flags;
1015
1016	/* Clear RX FIFO */
1017	while (read_scc(priv, R0) & Rx_CH_AV)
1018		read_scc_data(priv);
1019	priv->rx_over = 0;
1020	if (priv->param.dma >= 0) {
1021		/* Program DMA controller */
1022		flags = claim_dma_lock();
1023		set_dma_mode(priv->param.dma, DMA_MODE_READ);
1024		set_dma_addr(priv->param.dma,
1025			     (int) priv->rx_buf[priv->rx_head]);
1026		set_dma_count(priv->param.dma, BUF_SIZE);
1027		release_dma_lock(flags);
1028		enable_dma(priv->param.dma);
1029		/* Configure PackeTwin DMA */
1030		if (priv->type == TYPE_TWIN) {
1031			outb((priv->param.dma ==
1032			      1) ? TWIN_DMA_HDX_R1 : TWIN_DMA_HDX_R3,
1033			     priv->card_base + TWIN_DMA_CFG);
1034		}
1035		/* Sp. cond. intr. only, ext int enable, RX DMA enable */
1036		write_scc(priv, R1, EXT_INT_ENAB | INT_ERR_Rx |
1037			  WT_RDY_RT | WT_FN_RDYFN | WT_RDY_ENAB);
1038	} else {
1039		/* Reset current frame */
1040		priv->rx_ptr = 0;
1041		/* Intr. on all Rx characters and Sp. cond., ext int enable */
1042		write_scc(priv, R1, EXT_INT_ENAB | INT_ALL_Rx | WT_RDY_RT |
1043			  WT_FN_RDYFN);
1044	}
1045	write_scc(priv, R0, ERR_RES);
1046	write_scc(priv, R3, RxENABLE | Rx8 | RxCRC_ENAB);
1047}
1048
1049
1050static inline void rx_off(struct scc_priv *priv)
1051{
1052	/* Disable receiver */
1053	write_scc(priv, R3, Rx8);
1054	/* Disable DREQ / RX interrupt */
1055	if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1056		outb(0, priv->card_base + TWIN_DMA_CFG);
1057	else
1058		write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1059	/* Disable DMA */
1060	if (priv->param.dma >= 0)
1061		disable_dma(priv->param.dma);
1062}
1063
1064
1065static void start_timer(struct scc_priv *priv, int t, int r15)
1066{
1067	outb(priv->tmr_mode, priv->tmr_ctrl);
1068	if (t == 0) {
1069		tm_isr(priv);
1070	} else if (t > 0) {
1071		outb(t & 0xFF, priv->tmr_cnt);
1072		outb((t >> 8) & 0xFF, priv->tmr_cnt);
1073		if (priv->type != TYPE_TWIN) {
1074			write_scc(priv, R15, r15 | CTSIE);
1075			priv->rr0 |= CTS;
1076		}
1077	}
1078}
1079
1080
1081static inline unsigned char random(void)
1082{
1083	/* See "Numerical Recipes in C", second edition, p. 284 */
1084	rand = rand * 1664525L + 1013904223L;
1085	return (unsigned char) (rand >> 24);
1086}
1087
1088static inline void z8530_isr(struct scc_info *info)
1089{
1090	int is, i = 100;
1091
1092	while ((is = read_scc(&info->priv[0], R3)) && i--) {
1093		if (is & CHARxIP) {
1094			rx_isr(&info->priv[0]);
1095		} else if (is & CHATxIP) {
1096			tx_isr(&info->priv[0]);
1097		} else if (is & CHAEXT) {
1098			es_isr(&info->priv[0]);
1099		} else if (is & CHBRxIP) {
1100			rx_isr(&info->priv[1]);
1101		} else if (is & CHBTxIP) {
1102			tx_isr(&info->priv[1]);
1103		} else {
1104			es_isr(&info->priv[1]);
1105		}
1106		write_scc(&info->priv[0], R0, RES_H_IUS);
1107		i++;
1108	}
1109	if (i < 0) {
1110		printk(KERN_ERR "dmascc: stuck in ISR with RR3=0x%02x.\n",
1111		       is);
1112	}
1113	/* Ok, no interrupts pending from this 8530. The INT line should
1114	   be inactive now. */
1115}
1116
1117
1118static irqreturn_t scc_isr(int irq, void *dev_id)
1119{
1120	struct scc_info *info = dev_id;
1121
1122	spin_lock(info->priv[0].register_lock);
1123	/* At this point interrupts are enabled, and the interrupt under service
1124	   is already acknowledged, but masked off.
1125
1126	   Interrupt processing: We loop until we know that the IRQ line is
1127	   low. If another positive edge occurs afterwards during the ISR,
1128	   another interrupt will be triggered by the interrupt controller
1129	   as soon as the IRQ level is enabled again (see asm/irq.h).
1130
1131	   Bottom-half handlers will be processed after scc_isr(). This is
1132	   important, since we only have small ringbuffers and want new data
1133	   to be fetched/delivered immediately. */
1134
1135	if (info->priv[0].type == TYPE_TWIN) {
1136		int is, card_base = info->priv[0].card_base;
1137		while ((is = ~inb(card_base + TWIN_INT_REG)) &
1138		       TWIN_INT_MSK) {
1139			if (is & TWIN_SCC_MSK) {
1140				z8530_isr(info);
1141			} else if (is & TWIN_TMR1_MSK) {
1142				inb(card_base + TWIN_CLR_TMR1);
1143				tm_isr(&info->priv[0]);
1144			} else {
1145				inb(card_base + TWIN_CLR_TMR2);
1146				tm_isr(&info->priv[1]);
1147			}
1148		}
1149	} else
1150		z8530_isr(info);
1151	spin_unlock(info->priv[0].register_lock);
1152	return IRQ_HANDLED;
1153}
1154
1155
1156static void rx_isr(struct scc_priv *priv)
1157{
1158	if (priv->param.dma >= 0) {
1159		/* Check special condition and perform error reset. See 2.4.7.5. */
1160		special_condition(priv, read_scc(priv, R1));
1161		write_scc(priv, R0, ERR_RES);
1162	} else {
1163		/* Check special condition for each character. Error reset not necessary.
1164		   Same algorithm for SCC and ESCC. See 2.4.7.1 and 2.4.7.4. */
1165		int rc;
1166		while (read_scc(priv, R0) & Rx_CH_AV) {
1167			rc = read_scc(priv, R1);
1168			if (priv->rx_ptr < BUF_SIZE)
1169				priv->rx_buf[priv->rx_head][priv->
1170							    rx_ptr++] =
1171				    read_scc_data(priv);
1172			else {
1173				priv->rx_over = 2;
1174				read_scc_data(priv);
1175			}
1176			special_condition(priv, rc);
1177		}
1178	}
1179}
1180
1181
1182static void special_condition(struct scc_priv *priv, int rc)
1183{
1184	int cb;
1185	unsigned long flags;
1186
1187	/* See Figure 2-15. Only overrun and EOF need to be checked. */
1188
1189	if (rc & Rx_OVR) {
1190		/* Receiver overrun */
1191		priv->rx_over = 1;
1192		if (priv->param.dma < 0)
1193			write_scc(priv, R0, ERR_RES);
1194	} else if (rc & END_FR) {
1195		/* End of frame. Get byte count */
1196		if (priv->param.dma >= 0) {
1197			flags = claim_dma_lock();
1198			cb = BUF_SIZE - get_dma_residue(priv->param.dma) -
1199			    2;
1200			release_dma_lock(flags);
1201		} else {
1202			cb = priv->rx_ptr - 2;
1203		}
1204		if (priv->rx_over) {
1205			/* We had an overrun */
1206			priv->dev->stats.rx_errors++;
1207			if (priv->rx_over == 2)
1208				priv->dev->stats.rx_length_errors++;
1209			else
1210				priv->dev->stats.rx_fifo_errors++;
1211			priv->rx_over = 0;
1212		} else if (rc & CRC_ERR) {
1213			/* Count invalid CRC only if packet length >= minimum */
1214			if (cb >= 15) {
1215				priv->dev->stats.rx_errors++;
1216				priv->dev->stats.rx_crc_errors++;
1217			}
1218		} else {
1219			if (cb >= 15) {
1220				if (priv->rx_count < NUM_RX_BUF - 1) {
1221					/* Put good frame in FIFO */
1222					priv->rx_len[priv->rx_head] = cb;
1223					priv->rx_head =
1224					    (priv->rx_head +
1225					     1) % NUM_RX_BUF;
1226					priv->rx_count++;
1227					schedule_work(&priv->rx_work);
1228				} else {
1229					priv->dev->stats.rx_errors++;
1230					priv->dev->stats.rx_over_errors++;
1231				}
1232			}
1233		}
1234		/* Get ready for new frame */
1235		if (priv->param.dma >= 0) {
1236			flags = claim_dma_lock();
1237			set_dma_addr(priv->param.dma,
1238				     (int) priv->rx_buf[priv->rx_head]);
1239			set_dma_count(priv->param.dma, BUF_SIZE);
1240			release_dma_lock(flags);
1241		} else {
1242			priv->rx_ptr = 0;
1243		}
1244	}
1245}
1246
1247
1248static void rx_bh(struct work_struct *ugli_api)
1249{
1250	struct scc_priv *priv = container_of(ugli_api, struct scc_priv, rx_work);
1251	int i = priv->rx_tail;
1252	int cb;
1253	unsigned long flags;
1254	struct sk_buff *skb;
1255	unsigned char *data;
1256
1257	spin_lock_irqsave(&priv->ring_lock, flags);
1258	while (priv->rx_count) {
1259		spin_unlock_irqrestore(&priv->ring_lock, flags);
1260		cb = priv->rx_len[i];
1261		/* Allocate buffer */
1262		skb = dev_alloc_skb(cb + 1);
1263		if (skb == NULL) {
1264			/* Drop packet */
1265			priv->dev->stats.rx_dropped++;
1266		} else {
1267			/* Fill buffer */
1268			data = skb_put(skb, cb + 1);
1269			data[0] = 0;
1270			memcpy(&data[1], priv->rx_buf[i], cb);
1271			skb->protocol = ax25_type_trans(skb, priv->dev);
1272			netif_rx(skb);
1273			priv->dev->stats.rx_packets++;
1274			priv->dev->stats.rx_bytes += cb;
1275		}
1276		spin_lock_irqsave(&priv->ring_lock, flags);
1277		/* Move tail */
1278		priv->rx_tail = i = (i + 1) % NUM_RX_BUF;
1279		priv->rx_count--;
1280	}
1281	spin_unlock_irqrestore(&priv->ring_lock, flags);
1282}
1283
1284
1285static void tx_isr(struct scc_priv *priv)
1286{
1287	int i = priv->tx_tail, p = priv->tx_ptr;
1288
1289	/* Suspend TX interrupts if we don't want to send anything.
1290	   See Figure 2-22. */
1291	if (p == priv->tx_len[i]) {
1292		write_scc(priv, R0, RES_Tx_P);
1293		return;
1294	}
1295
1296	/* Write characters */
1297	while ((read_scc(priv, R0) & Tx_BUF_EMP) && p < priv->tx_len[i]) {
1298		write_scc_data(priv, priv->tx_buf[i][p++], 0);
1299	}
1300
1301	/* Reset EOM latch of Z8530 */
1302	if (!priv->tx_ptr && p && priv->chip == Z8530)
1303		write_scc(priv, R0, RES_EOM_L);
1304
1305	priv->tx_ptr = p;
1306}
1307
1308
1309static void es_isr(struct scc_priv *priv)
1310{
1311	int i, rr0, drr0, res;
1312	unsigned long flags;
1313
1314	/* Read status, reset interrupt bit (open latches) */
1315	rr0 = read_scc(priv, R0);
1316	write_scc(priv, R0, RES_EXT_INT);
1317	drr0 = priv->rr0 ^ rr0;
1318	priv->rr0 = rr0;
1319
1320	/* Transmit underrun (2.4.9.6). We can't check the TxEOM flag, since
1321	   it might have already been cleared again by AUTOEOM. */
1322	if (priv->state == TX_DATA) {
1323		/* Get remaining bytes */
1324		i = priv->tx_tail;
1325		if (priv->param.dma >= 0) {
1326			disable_dma(priv->param.dma);
1327			flags = claim_dma_lock();
1328			res = get_dma_residue(priv->param.dma);
1329			release_dma_lock(flags);
1330		} else {
1331			res = priv->tx_len[i] - priv->tx_ptr;
1332			priv->tx_ptr = 0;
1333		}
1334		/* Disable DREQ / TX interrupt */
1335		if (priv->param.dma >= 0 && priv->type == TYPE_TWIN)
1336			outb(0, priv->card_base + TWIN_DMA_CFG);
1337		else
1338			write_scc(priv, R1, EXT_INT_ENAB | WT_FN_RDYFN);
1339		if (res) {
1340			/* Update packet statistics */
1341			priv->dev->stats.tx_errors++;
1342			priv->dev->stats.tx_fifo_errors++;
1343			/* Other underrun interrupts may already be waiting */
1344			write_scc(priv, R0, RES_EXT_INT);
1345			write_scc(priv, R0, RES_EXT_INT);
1346		} else {
1347			/* Update packet statistics */
1348			priv->dev->stats.tx_packets++;
1349			priv->dev->stats.tx_bytes += priv->tx_len[i];
1350			/* Remove frame from FIFO */
1351			priv->tx_tail = (i + 1) % NUM_TX_BUF;
1352			priv->tx_count--;
1353			/* Inform upper layers */
1354			netif_wake_queue(priv->dev);
1355		}
1356		/* Switch state */
1357		write_scc(priv, R15, 0);
1358		if (priv->tx_count &&
1359		    (jiffies - priv->tx_start) < priv->param.txtimeout) {
1360			priv->state = TX_PAUSE;
1361			start_timer(priv, priv->param.txpause, 0);
1362		} else {
1363			priv->state = TX_TAIL;
1364			start_timer(priv, priv->param.txtail, 0);
1365		}
1366	}
1367
1368	/* DCD transition */
1369	if (drr0 & DCD) {
1370		if (rr0 & DCD) {
1371			switch (priv->state) {
1372			case IDLE:
1373			case WAIT:
1374				priv->state = DCD_ON;
1375				write_scc(priv, R15, 0);
1376				start_timer(priv, priv->param.dcdon, 0);
1377			}
1378		} else {
1379			switch (priv->state) {
1380			case RX_ON:
1381				rx_off(priv);
1382				priv->state = DCD_OFF;
1383				write_scc(priv, R15, 0);
1384				start_timer(priv, priv->param.dcdoff, 0);
1385			}
1386		}
1387	}
1388
1389	/* CTS transition */
1390	if ((drr0 & CTS) && (~rr0 & CTS) && priv->type != TYPE_TWIN)
1391		tm_isr(priv);
1392
1393}
1394
1395
1396static void tm_isr(struct scc_priv *priv)
1397{
1398	switch (priv->state) {
1399	case TX_HEAD:
1400	case TX_PAUSE:
1401		tx_on(priv);
1402		priv->state = TX_DATA;
1403		break;
1404	case TX_TAIL:
1405		write_scc(priv, R5, TxCRC_ENAB | Tx8);
1406		priv->state = RTS_OFF;
1407		if (priv->type != TYPE_TWIN)
1408			write_scc(priv, R15, 0);
1409		start_timer(priv, priv->param.rtsoff, 0);
1410		break;
1411	case RTS_OFF:
1412		write_scc(priv, R15, DCDIE);
1413		priv->rr0 = read_scc(priv, R0);
1414		if (priv->rr0 & DCD) {
1415			priv->dev->stats.collisions++;
1416			rx_on(priv);
1417			priv->state = RX_ON;
1418		} else {
1419			priv->state = WAIT;
1420			start_timer(priv, priv->param.waittime, DCDIE);
1421		}
1422		break;
1423	case WAIT:
1424		if (priv->tx_count) {
1425			priv->state = TX_HEAD;
1426			priv->tx_start = jiffies;
1427			write_scc(priv, R5,
1428				  TxCRC_ENAB | RTS | TxENAB | Tx8);
1429			write_scc(priv, R15, 0);
1430			start_timer(priv, priv->param.txdelay, 0);
1431		} else {
1432			priv->state = IDLE;
1433			if (priv->type != TYPE_TWIN)
1434				write_scc(priv, R15, DCDIE);
1435		}
1436		break;
1437	case DCD_ON:
1438	case DCD_OFF:
1439		write_scc(priv, R15, DCDIE);
1440		priv->rr0 = read_scc(priv, R0);
1441		if (priv->rr0 & DCD) {
1442			rx_on(priv);
1443			priv->state = RX_ON;
1444		} else {
1445			priv->state = WAIT;
1446			start_timer(priv,
1447				    random() / priv->param.persist *
1448				    priv->param.slottime, DCDIE);
1449		}
1450		break;
1451	}
1452}