z85230.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:40k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * This program is free software; you can redistribute it and/or
  3.  * modify it under the terms of the GNU General Public License
  4.  * as published by the Free Software Foundation; either version
  5.  * 2 of the License, or (at your option) any later version.
  6.  *
  7.  * (c) Copyright 1998 Alan Cox <alan@lxorguk.ukuu.org.uk>
  8.  * (c) Copyright 2000, 2001 Red Hat Inc
  9.  *
  10.  * Development of this driver was funded by Equiinet Ltd
  11.  * http://www.equiinet.com
  12.  *
  13.  * ChangeLog:
  14.  *
  15.  * Asynchronous mode dropped for 2.2. For 2.5 we will attempt the
  16.  * unification of all the Z85x30 asynchronous drivers for real.
  17.  *
  18.  * DMA now uses get_free_page as kmalloc buffers may span a 64K 
  19.  * boundary.
  20.  *
  21.  * Modified for SMP safety and SMP locking by Alan Cox <alan@redhat.com>
  22.  *
  23.  * Performance
  24.  *
  25.  * Z85230:
  26.  * Non DMA you want a 486DX50 or better to do 64Kbits. 9600 baud
  27.  * X.25 is not unrealistic on all machines. DMA mode can in theory
  28.  * handle T1/E1 quite nicely. In practice the limit seems to be about
  29.  * 512Kbit->1Mbit depending on motherboard.
  30.  *
  31.  * Z85C30:
  32.  * 64K will take DMA, 9600 baud X.25 should be ok.
  33.  *
  34.  * Z8530:
  35.  * Synchronous mode without DMA is unlikely to pass about 2400 baud.
  36.  */
  37. #include <linux/module.h>
  38. #include <linux/kernel.h>
  39. #include <linux/mm.h>
  40. #include <linux/net.h>
  41. #include <linux/skbuff.h>
  42. #include <linux/netdevice.h>
  43. #include <linux/if_arp.h>
  44. #include <linux/delay.h>
  45. #include <linux/ioport.h>
  46. #include <linux/init.h>
  47. #include <asm/dma.h>
  48. #include <asm/io.h>
  49. #define RT_LOCK
  50. #define RT_UNLOCK
  51. #include <linux/spinlock.h>
  52. #include <net/syncppp.h>
  53. #include "z85230.h"
  54. /**
  55.  * z8530_read_port - Architecture specific interface function
  56.  * @p: port to read
  57.  *
  58.  * Provided port access methods. The Comtrol SV11 requires no delays
  59.  * between accesses and uses PC I/O. Some drivers may need a 5uS delay
  60.  *
  61.  * In the longer term this should become an architecture specific
  62.  * section so that this can become a generic driver interface for all
  63.  * platforms. For now we only handle PC I/O ports with or without the
  64.  * dread 5uS sanity delay.
  65.  *
  66.  * The caller must hold sufficient locks to avoid violating the horrible
  67.  * 5uS delay rule.
  68.  */
  69. static inline int z8530_read_port(unsigned long p)
  70. {
  71. u8 r=inb(Z8530_PORT_OF(p));
  72. if(p&Z8530_PORT_SLEEP) /* gcc should figure this out efficiently ! */
  73. udelay(5);
  74. return r;
  75. }
  76. /**
  77.  * z8530_write_port - Architecture specific interface function
  78.  * @p: port to write
  79.  * @d: value to write
  80.  *
  81.  * Write a value to a port with delays if need be. Note that the
  82.  * caller must hold locks to avoid read/writes from other contexts
  83.  * violating the 5uS rule
  84.  *
  85.  * In the longer term this should become an architecture specific
  86.  * section so that this can become a generic driver interface for all
  87.  * platforms. For now we only handle PC I/O ports with or without the
  88.  * dread 5uS sanity delay.
  89.  */
  90. static inline void z8530_write_port(unsigned long p, u8 d)
  91. {
  92. outb(d,Z8530_PORT_OF(p));
  93. if(p&Z8530_PORT_SLEEP)
  94. udelay(5);
  95. }
  96. static void z8530_rx_done(struct z8530_channel *c);
  97. static void z8530_tx_done(struct z8530_channel *c);
  98. /**
  99.  * read_zsreg - Read a register from a Z85230 
  100.  * @c: Z8530 channel to read from (2 per chip)
  101.  * @reg: Register to read
  102.  * FIXME: Use a spinlock.
  103.  *
  104.  * Most of the Z8530 registers are indexed off the control registers.
  105.  * A read is done by writing to the control register and reading the
  106.  * register back.  The caller must hold the lock
  107.  */
  108.  
  109. static inline u8 read_zsreg(struct z8530_channel *c, u8 reg)
  110. {
  111. if(reg)
  112. z8530_write_port(c->ctrlio, reg);
  113. return z8530_read_port(c->ctrlio);
  114. }
  115. /**
  116.  * read_zsdata - Read the data port of a Z8530 channel
  117.  * @c: The Z8530 channel to read the data port from
  118.  *
  119.  * The data port provides fast access to some things. We still
  120.  * have all the 5uS delays to worry about.
  121.  */
  122. static inline u8 read_zsdata(struct z8530_channel *c)
  123. {
  124. u8 r;
  125. r=z8530_read_port(c->dataio);
  126. return r;
  127. }
  128. /**
  129.  * write_zsreg - Write to a Z8530 channel register
  130.  * @c: The Z8530 channel
  131.  * @reg: Register number
  132.  * @val: Value to write
  133.  *
  134.  * Write a value to an indexed register. The caller must hold the lock
  135.  * to honour the irritating delay rules. We know about register 0
  136.  * being fast to access.
  137.  */
  138.  
  139. static inline void write_zsreg(struct z8530_channel *c, u8 reg, u8 val)
  140. {
  141. unsigned long flags;
  142. spin_lock_irqsave(c->lock, flags);
  143. if(reg)
  144. z8530_write_port(c->ctrlio, reg);
  145. z8530_write_port(c->ctrlio, val);
  146. spin_unlock_irqrestore(c->lock, flags);
  147. }
  148. /**
  149.  * write_zsctrl - Write to a Z8530 control register
  150.  * @c: The Z8530 channel
  151.  * @val: Value to write
  152.  *
  153.  * Write directly to the control register on the Z8530
  154.  */
  155. static inline void write_zsctrl(struct z8530_channel *c, u8 val)
  156. {
  157. z8530_write_port(c->ctrlio, val);
  158. }
  159. /**
  160.  * write_zsdata - Write to a Z8530 control register
  161.  * @c: The Z8530 channel
  162.  * @val: Value to write
  163.  *
  164.  * Write directly to the data register on the Z8530
  165.  */
  166. static inline void write_zsdata(struct z8530_channel *c, u8 val)
  167. {
  168. z8530_write_port(c->dataio, val);
  169. }
  170. /*
  171.  * Register loading parameters for a dead port
  172.  */
  173.  
  174. u8 z8530_dead_port[]=
  175. {
  176. 255
  177. };
  178. EXPORT_SYMBOL(z8530_dead_port);
  179. /*
  180.  * Register loading parameters for currently supported circuit types
  181.  */
  182. /*
  183.  * Data clocked by telco end. This is the correct data for the UK
  184.  * "kilostream" service, and most other similar services.
  185.  */
  186.  
  187. u8 z8530_hdlc_kilostream[]=
  188. {
  189. 4, SYNC_ENAB|SDLC|X1CLK,
  190. 2, 0, /* No vector */
  191. 1, 0,
  192. 3, ENT_HM|RxCRC_ENAB|Rx8,
  193. 5, TxCRC_ENAB|RTS|TxENAB|Tx8|DTR,
  194. 9, 0, /* Disable interrupts */
  195. 6, 0xFF,
  196. 7, FLAG,
  197. 10, ABUNDER|NRZ|CRCPS,/*MARKIDLE ??*/
  198. 11, TCTRxCP,
  199. 14, DISDPLL,
  200. 15, DCDIE|SYNCIE|CTSIE|TxUIE|BRKIE,
  201. 1, EXT_INT_ENAB|TxINT_ENAB|INT_ALL_Rx,
  202. 9, NV|MIE|NORESET,
  203. 255
  204. };
  205. EXPORT_SYMBOL(z8530_hdlc_kilostream);
  206. /*
  207.  * As above but for enhanced chips.
  208.  */
  209.  
  210. u8 z8530_hdlc_kilostream_85230[]=
  211. {
  212. 4, SYNC_ENAB|SDLC|X1CLK,
  213. 2, 0, /* No vector */
  214. 1, 0,
  215. 3, ENT_HM|RxCRC_ENAB|Rx8,
  216. 5, TxCRC_ENAB|RTS|TxENAB|Tx8|DTR,
  217. 9, 0, /* Disable interrupts */
  218. 6, 0xFF,
  219. 7, FLAG,
  220. 10, ABUNDER|NRZ|CRCPS, /* MARKIDLE?? */
  221. 11, TCTRxCP,
  222. 14, DISDPLL,
  223. 15, DCDIE|SYNCIE|CTSIE|TxUIE|BRKIE,
  224. 1, EXT_INT_ENAB|TxINT_ENAB|INT_ALL_Rx,
  225. 9, NV|MIE|NORESET,
  226. 23, 3, /* Extended mode AUTO TX and EOM*/
  227. 255
  228. };
  229. EXPORT_SYMBOL(z8530_hdlc_kilostream_85230);
  230. /**
  231.  * z8530_flush_fifo - Flush on chip RX FIFO
  232.  * @c: Channel to flush
  233.  *
  234.  * Flush the receive FIFO. There is no specific option for this, we 
  235.  * blindly read bytes and discard them. Reading when there is no data
  236.  * is harmless. The 8530 has a 4 byte FIFO, the 85230 has 8 bytes.
  237.  *
  238.  * All locking is handled for the caller. On return data may still be
  239.  * present if it arrived during the flush.
  240.  */
  241.  
  242. static void z8530_flush_fifo(struct z8530_channel *c)
  243. {
  244. read_zsreg(c, R1);
  245. read_zsreg(c, R1);
  246. read_zsreg(c, R1);
  247. read_zsreg(c, R1);
  248. if(c->dev->type==Z85230)
  249. {
  250. read_zsreg(c, R1);
  251. read_zsreg(c, R1);
  252. read_zsreg(c, R1);
  253. read_zsreg(c, R1);
  254. }
  255. }
  256. /**
  257.  * z8530_rtsdtr - Control the outgoing DTS/RTS line
  258.  * @c: The Z8530 channel to control;
  259.  * @set: 1 to set, 0 to clear
  260.  *
  261.  * Sets or clears DTR/RTS on the requested line. All locking is handled
  262.  * by the caller. For now we assume all boards use the actual RTS/DTR
  263.  * on the chip. Apparently one or two don't. We'll scream about them
  264.  * later.
  265.  */
  266. static void z8530_rtsdtr(struct z8530_channel *c, int set)
  267. {
  268. if (set)
  269. c->regs[5] |= (RTS | DTR);
  270. else
  271. c->regs[5] &= ~(RTS | DTR);
  272. write_zsreg(c, R5, c->regs[5]);
  273. }
  274. /**
  275.  * z8530_rx - Handle a PIO receive event
  276.  * @c: Z8530 channel to process
  277.  *
  278.  * Receive handler for receiving in PIO mode. This is much like the 
  279.  * async one but not quite the same or as complex
  280.  *
  281.  * Note: Its intended that this handler can easily be separated from
  282.  * the main code to run realtime. That'll be needed for some machines
  283.  * (eg to ever clock 64kbits on a sparc ;)).
  284.  *
  285.  * The RT_LOCK macros don't do anything now. Keep the code covered
  286.  * by them as short as possible in all circumstances - clocks cost
  287.  * baud. The interrupt handler is assumed to be atomic w.r.t. to
  288.  * other code - this is true in the RT case too.
  289.  *
  290.  * We only cover the sync cases for this. If you want 2Mbit async
  291.  * do it yourself but consider medical assistance first. This non DMA 
  292.  * synchronous mode is portable code. The DMA mode assumes PCI like 
  293.  * ISA DMA
  294.  *
  295.  * Called with the device lock held
  296.  */
  297.  
  298. static void z8530_rx(struct z8530_channel *c)
  299. {
  300. u8 ch,stat;
  301.  
  302. while(1)
  303. {
  304. /* FIFO empty ? */
  305. if(!(read_zsreg(c, R0)&1))
  306. break;
  307. ch=read_zsdata(c);
  308. stat=read_zsreg(c, R1);
  309. /*
  310.  * Overrun ?
  311.  */
  312. if(c->count < c->max)
  313. {
  314. *c->dptr++=ch;
  315. c->count++;
  316. }
  317. if(stat&END_FR)
  318. {
  319. /*
  320.  * Error ?
  321.  */
  322. if(stat&(Rx_OVR|CRC_ERR))
  323. {
  324. /* Rewind the buffer and return */
  325. if(c->skb)
  326. c->dptr=c->skb->data;
  327. c->count=0;
  328. if(stat&Rx_OVR)
  329. {
  330. printk(KERN_WARNING "%s: overrunn", c->dev->name);
  331. c->rx_overrun++;
  332. }
  333. if(stat&CRC_ERR)
  334. {
  335. c->rx_crc_err++;
  336. /* printk("crc errorn"); */
  337. }
  338. /* Shove the frame upstream */
  339. }
  340. else
  341. {
  342. /*
  343.  * Drop the lock for RX processing, or
  344.    * there are deadlocks
  345.    */
  346. z8530_rx_done(c);
  347. write_zsctrl(c, RES_Rx_CRC);
  348. }
  349. }
  350. }
  351. /*
  352.  * Clear irq
  353.  */
  354. write_zsctrl(c, ERR_RES);
  355. write_zsctrl(c, RES_H_IUS);
  356. }
  357. /**
  358.  * z8530_tx - Handle a PIO transmit event
  359.  * @c: Z8530 channel to process
  360.  *
  361.  * Z8530 transmit interrupt handler for the PIO mode. The basic
  362.  * idea is to attempt to keep the FIFO fed. We fill as many bytes
  363.  * in as possible, its quite possible that we won't keep up with the
  364.  * data rate otherwise.
  365.  */
  366.  
  367. static void z8530_tx(struct z8530_channel *c)
  368. {
  369. while(c->txcount) {
  370. /* FIFO full ? */
  371. if(!(read_zsreg(c, R0)&4))
  372. break;
  373. c->txcount--;
  374. /*
  375.  * Shovel out the byte
  376.  */
  377. write_zsreg(c, R8, *c->tx_ptr++);
  378. write_zsctrl(c, RES_H_IUS);
  379. /* We are about to underflow */
  380. if(c->txcount==0)
  381. {
  382. write_zsctrl(c, RES_EOM_L);
  383. write_zsreg(c, R10, c->regs[10]&~ABUNDER);
  384. }
  385. }
  386. /*
  387.  * End of frame TX - fire another one
  388.  */
  389.  
  390. write_zsctrl(c, RES_Tx_P);
  391. z8530_tx_done(c);  
  392. write_zsctrl(c, RES_H_IUS);
  393. }
  394. /**
  395.  * z8530_status - Handle a PIO status exception
  396.  * @chan: Z8530 channel to process
  397.  *
  398.  * A status event occurred in PIO synchronous mode. There are several
  399.  * reasons the chip will bother us here. A transmit underrun means we
  400.  * failed to feed the chip fast enough and just broke a packet. A DCD
  401.  * change is a line up or down. We communicate that back to the protocol
  402.  * layer for synchronous PPP to renegotiate.
  403.  */
  404. static void z8530_status(struct z8530_channel *chan)
  405. {
  406. u8 status, altered;
  407. status=read_zsreg(chan, R0);
  408. altered=chan->status^status;
  409. chan->status=status;
  410. if(status&TxEOM)
  411. {
  412. /* printk("%s: Tx underrun.n", chan->dev->name); */
  413. chan->stats.tx_fifo_errors++;
  414. write_zsctrl(chan, ERR_RES);
  415. z8530_tx_done(chan);
  416. }
  417. if(altered&chan->dcdcheck)
  418. {
  419. if(status&chan->dcdcheck)
  420. {
  421. printk(KERN_INFO "%s: DCD raisedn", chan->dev->name);
  422. write_zsreg(chan, R3, chan->regs[3]|RxENABLE);
  423. if(chan->netdevice &&
  424.     ((chan->netdevice->type == ARPHRD_HDLC) ||
  425.     (chan->netdevice->type == ARPHRD_PPP)))
  426. sppp_reopen(chan->netdevice);
  427. }
  428. else
  429. {
  430. printk(KERN_INFO "%s: DCD lostn", chan->dev->name);
  431. write_zsreg(chan, R3, chan->regs[3]&~RxENABLE);
  432. z8530_flush_fifo(chan);
  433. }
  434. }
  435. write_zsctrl(chan, RES_EXT_INT);
  436. write_zsctrl(chan, RES_H_IUS);
  437. }
  438. struct z8530_irqhandler z8530_sync=
  439. {
  440. z8530_rx,
  441. z8530_tx,
  442. z8530_status
  443. };
  444. EXPORT_SYMBOL(z8530_sync);
  445. /**
  446.  * z8530_dma_rx - Handle a DMA RX event
  447.  * @chan: Channel to handle
  448.  *
  449.  * Non bus mastering DMA interfaces for the Z8x30 devices. This
  450.  * is really pretty PC specific. The DMA mode means that most receive
  451.  * events are handled by the DMA hardware. We get a kick here only if
  452.  * a frame ended.
  453.  */
  454.  
  455. static void z8530_dma_rx(struct z8530_channel *chan)
  456. {
  457. if(chan->rxdma_on)
  458. {
  459. /* Special condition check only */
  460. u8 status;
  461. read_zsreg(chan, R7);
  462. read_zsreg(chan, R6);
  463. status=read_zsreg(chan, R1);
  464. if(status&END_FR)
  465. {
  466. z8530_rx_done(chan); /* Fire up the next one */
  467. }
  468. write_zsctrl(chan, ERR_RES);
  469. write_zsctrl(chan, RES_H_IUS);
  470. }
  471. else
  472. {
  473. /* DMA is off right now, drain the slow way */
  474. z8530_rx(chan);
  475. }
  476. }
  477. /**
  478.  * z8530_dma_tx - Handle a DMA TX event
  479.  * @chan: The Z8530 channel to handle
  480.  *
  481.  * We have received an interrupt while doing DMA transmissions. It
  482.  * shouldn't happen. Scream loudly if it does.
  483.  */
  484.  
  485. static void z8530_dma_tx(struct z8530_channel *chan)
  486. {
  487. if(!chan->dma_tx)
  488. {
  489. printk(KERN_WARNING "Hey who turned the DMA off?n");
  490. z8530_tx(chan);
  491. return;
  492. }
  493. /* This shouldnt occur in DMA mode */
  494. printk(KERN_ERR "DMA tx - bogus event!n");
  495. z8530_tx(chan);
  496. }
  497. /**
  498.  * z8530_dma_status - Handle a DMA status exception
  499.  * @chan: Z8530 channel to process
  500.  *
  501.  * A status event occurred on the Z8530. We receive these for two reasons
  502.  * when in DMA mode. Firstly if we finished a packet transfer we get one
  503.  * and kick the next packet out. Secondly we may see a DCD change and
  504.  * have to poke the protocol layer.
  505.  *
  506.  */
  507.  
  508. static void z8530_dma_status(struct z8530_channel *chan)
  509. {
  510. u8 status, altered;
  511. status=read_zsreg(chan, R0);
  512. altered=chan->status^status;
  513. chan->status=status;
  514. if(chan->dma_tx)
  515. {
  516. if(status&TxEOM)
  517. {
  518. unsigned long flags;
  519. flags=claim_dma_lock();
  520. disable_dma(chan->txdma);
  521. clear_dma_ff(chan->txdma);
  522. chan->txdma_on=0;
  523. release_dma_lock(flags);
  524. z8530_tx_done(chan);
  525. }
  526. }
  527. if(altered&chan->dcdcheck)
  528. {
  529. if(status&chan->dcdcheck)
  530. {
  531. printk(KERN_INFO "%s: DCD raisedn", chan->dev->name);
  532. write_zsreg(chan, R3, chan->regs[3]|RxENABLE);
  533. if(chan->netdevice &&
  534.     ((chan->netdevice->type == ARPHRD_HDLC) ||
  535.     (chan->netdevice->type == ARPHRD_PPP)))
  536. sppp_reopen(chan->netdevice);
  537. }
  538. else
  539. {
  540. printk(KERN_INFO "%s:DCD lostn", chan->dev->name);
  541. write_zsreg(chan, R3, chan->regs[3]&~RxENABLE);
  542. z8530_flush_fifo(chan);
  543. }
  544. }
  545. write_zsctrl(chan, RES_EXT_INT);
  546. write_zsctrl(chan, RES_H_IUS);
  547. }
  548. struct z8530_irqhandler z8530_dma_sync=
  549. {
  550. z8530_dma_rx,
  551. z8530_dma_tx,
  552. z8530_dma_status
  553. };
  554. EXPORT_SYMBOL(z8530_dma_sync);
  555. struct z8530_irqhandler z8530_txdma_sync=
  556. {
  557. z8530_rx,
  558. z8530_dma_tx,
  559. z8530_dma_status
  560. };
  561. EXPORT_SYMBOL(z8530_txdma_sync);
  562. /**
  563.  * z8530_rx_clear - Handle RX events from a stopped chip
  564.  * @c: Z8530 channel to shut up
  565.  *
  566.  * Receive interrupt vectors for a Z8530 that is in 'parked' mode.
  567.  * For machines with PCI Z85x30 cards, or level triggered interrupts
  568.  * (eg the MacII) we must clear the interrupt cause or die.
  569.  */
  570. static void z8530_rx_clear(struct z8530_channel *c)
  571. {
  572. /*
  573.  * Data and status bytes
  574.  */
  575. u8 stat;
  576. read_zsdata(c);
  577. stat=read_zsreg(c, R1);
  578. if(stat&END_FR)
  579. write_zsctrl(c, RES_Rx_CRC);
  580. /*
  581.  * Clear irq
  582.  */
  583. write_zsctrl(c, ERR_RES);
  584. write_zsctrl(c, RES_H_IUS);
  585. }
  586. /**
  587.  * z8530_tx_clear - Handle TX events from a stopped chip
  588.  * @c: Z8530 channel to shut up
  589.  *
  590.  * Transmit interrupt vectors for a Z8530 that is in 'parked' mode.
  591.  * For machines with PCI Z85x30 cards, or level triggered interrupts
  592.  * (eg the MacII) we must clear the interrupt cause or die.
  593.  */
  594. static void z8530_tx_clear(struct z8530_channel *c)
  595. {
  596. write_zsctrl(c, RES_Tx_P);
  597. write_zsctrl(c, RES_H_IUS);
  598. }
  599. /**
  600.  * z8530_status_clear - Handle status events from a stopped chip
  601.  * @chan: Z8530 channel to shut up
  602.  *
  603.  * Status interrupt vectors for a Z8530 that is in 'parked' mode.
  604.  * For machines with PCI Z85x30 cards, or level triggered interrupts
  605.  * (eg the MacII) we must clear the interrupt cause or die.
  606.  */
  607. static void z8530_status_clear(struct z8530_channel *chan)
  608. {
  609. u8 status=read_zsreg(chan, R0);
  610. if(status&TxEOM)
  611. write_zsctrl(chan, ERR_RES);
  612. write_zsctrl(chan, RES_EXT_INT);
  613. write_zsctrl(chan, RES_H_IUS);
  614. }
  615. struct z8530_irqhandler z8530_nop=
  616. {
  617. z8530_rx_clear,
  618. z8530_tx_clear,
  619. z8530_status_clear
  620. };
  621. EXPORT_SYMBOL(z8530_nop);
  622. /**
  623.  * z8530_interrupt - Handle an interrupt from a Z8530
  624.  * @irq:  Interrupt number
  625.  * @dev_id: The Z8530 device that is interrupting.
  626.  * @regs: unused
  627.  *
  628.  * A Z85[2]30 device has stuck its hand in the air for attention.
  629.  * We scan both the channels on the chip for events and then call
  630.  * the channel specific call backs for each channel that has events.
  631.  * We have to use callback functions because the two channels can be
  632.  * in different modes.
  633.  *
  634.  * Locking is done for the handlers. Note that locking is done
  635.  * at the chip level (the 5uS delay issue is per chip not per
  636.  * channel). c->lock for both channels points to dev->lock
  637.  */
  638. void z8530_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  639. {
  640. struct z8530_dev *dev=dev_id;
  641. u8 intr;
  642. static volatile int locker=0;
  643. int work=0;
  644. struct z8530_irqhandler *irqs=dev->chanA.irqs;
  645. if(locker)
  646. {
  647. printk(KERN_ERR "IRQ re-entern");
  648. return;
  649. }
  650. locker=1;
  651. spin_lock(&dev->lock);
  652. while(++work<5000)
  653. {
  654. intr = read_zsreg(&dev->chanA, R3);
  655. if(!(intr & (CHARxIP|CHATxIP|CHAEXT|CHBRxIP|CHBTxIP|CHBEXT)))
  656. break;
  657. /* This holds the IRQ status. On the 8530 you must read it from chan 
  658.    A even though it applies to the whole chip */
  659. /* Now walk the chip and see what it is wanting - it may be
  660.    an IRQ for someone else remember */
  661.    
  662. if(intr & (CHARxIP|CHATxIP|CHAEXT))
  663. {
  664. if(intr&CHARxIP)
  665. irqs->rx(&dev->chanA);
  666. if(intr&CHATxIP)
  667. irqs->tx(&dev->chanA);
  668. if(intr&CHAEXT)
  669. irqs->status(&dev->chanA);
  670. }
  671. irqs=dev->chanB.irqs;
  672. if(intr & (CHBRxIP|CHBTxIP|CHBEXT))
  673. {
  674. if(intr&CHBRxIP)
  675. irqs->rx(&dev->chanB);
  676. if(intr&CHBTxIP)
  677. irqs->tx(&dev->chanB);
  678. if(intr&CHBEXT)
  679. irqs->status(&dev->chanB);
  680. }
  681. }
  682. spin_unlock(&dev->lock);
  683. if(work==5000)
  684. printk(KERN_ERR "%s: interrupt jammed - abort(0x%X)!n", dev->name, intr);
  685. /* Ok all done */
  686. locker=0;
  687. }
  688. EXPORT_SYMBOL(z8530_interrupt);
  689. static char reg_init[16]=
  690. {
  691. 0,0,0,0,
  692. 0,0,0,0,
  693. 0,0,0,0,
  694. 0x55,0,0,0
  695. };
  696. /**
  697.  * z8530_sync_open - Open a Z8530 channel for PIO
  698.  * @dev: The network interface we are using
  699.  * @c: The Z8530 channel to open in synchronous PIO mode
  700.  *
  701.  * Switch a Z8530 into synchronous mode without DMA assist. We
  702.  * raise the RTS/DTR and commence network operation.
  703.  */
  704.  
  705. int z8530_sync_open(struct net_device *dev, struct z8530_channel *c)
  706. {
  707. unsigned long flags;
  708. spin_lock_irqsave(c->lock, flags);
  709. c->sync = 1;
  710. c->mtu = dev->mtu+64;
  711. c->count = 0;
  712. c->skb = NULL;
  713. c->skb2 = NULL;
  714. c->irqs = &z8530_sync;
  715. /* This loads the double buffer up */
  716. z8530_rx_done(c); /* Load the frame ring */
  717. z8530_rx_done(c); /* Load the backup frame */
  718. z8530_rtsdtr(c,1);
  719. c->dma_tx = 0;
  720. c->regs[R1]|=TxINT_ENAB;
  721. write_zsreg(c, R1, c->regs[R1]);
  722. write_zsreg(c, R3, c->regs[R3]|RxENABLE);
  723. spin_unlock_irqrestore(c->lock, flags);
  724. return 0;
  725. }
  726. EXPORT_SYMBOL(z8530_sync_open);
  727. /**
  728.  * z8530_sync_close - Close a PIO Z8530 channel
  729.  * @dev: Network device to close
  730.  * @c: Z8530 channel to disassociate and move to idle
  731.  *
  732.  * Close down a Z8530 interface and switch its interrupt handlers
  733.  * to discard future events.
  734.  */
  735.  
  736. int z8530_sync_close(struct net_device *dev, struct z8530_channel *c)
  737. {
  738. u8 chk;
  739. unsigned long flags;
  740. spin_lock_irqsave(c->lock, flags);
  741. c->irqs = &z8530_nop;
  742. c->max = 0;
  743. c->sync = 0;
  744. chk=read_zsreg(c,R0);
  745. write_zsreg(c, R3, c->regs[R3]);
  746. z8530_rtsdtr(c,0);
  747. spin_unlock_irqrestore(c->lock, flags);
  748. return 0;
  749. }
  750. EXPORT_SYMBOL(z8530_sync_close);
  751. /**
  752.  * z8530_sync_dma_open - Open a Z8530 for DMA I/O
  753.  * @dev: The network device to attach
  754.  * @c: The Z8530 channel to configure in sync DMA mode.
  755.  *
  756.  * Set up a Z85x30 device for synchronous DMA in both directions. Two
  757.  * ISA DMA channels must be available for this to work. We assume ISA
  758.  * DMA driven I/O and PC limits on access.
  759.  */
  760.  
  761. int z8530_sync_dma_open(struct net_device *dev, struct z8530_channel *c)
  762. {
  763. unsigned long flags;
  764. c->sync = 1;
  765. c->mtu = dev->mtu+64;
  766. c->count = 0;
  767. c->skb = NULL;
  768. c->skb2 = NULL;
  769. /*
  770.  * Load the DMA interfaces up
  771.  */
  772. c->rxdma_on = 0;
  773. c->txdma_on = 0;
  774. /*
  775.  * Allocate the DMA flip buffers. Limit by page size.
  776.  * Everyone runs 1500 mtu or less on wan links so this
  777.  * should be fine.
  778.  */
  779.  
  780. if(c->mtu  > PAGE_SIZE/2)
  781. return -EMSGSIZE;
  782.  
  783. c->rx_buf[0]=(void *)get_free_page(GFP_KERNEL|GFP_DMA);
  784. if(c->rx_buf[0]==NULL)
  785. return -ENOBUFS;
  786. c->rx_buf[1]=c->rx_buf[0]+PAGE_SIZE/2;
  787. c->tx_dma_buf[0]=(void *)get_free_page(GFP_KERNEL|GFP_DMA);
  788. if(c->tx_dma_buf[0]==NULL)
  789. {
  790. free_page((unsigned long)c->rx_buf[0]);
  791. c->rx_buf[0]=NULL;
  792. return -ENOBUFS;
  793. }
  794. c->tx_dma_buf[1]=c->tx_dma_buf[0]+PAGE_SIZE/2;
  795. c->tx_dma_used=0;
  796. c->dma_tx = 1;
  797. c->dma_num=0;
  798. c->dma_ready=1;
  799. /*
  800.  * Enable DMA control mode
  801.  */
  802. spin_lock_irqsave(c->lock, flags);
  803.  
  804. /*
  805.  * TX DMA via DIR/REQ
  806.  */
  807.  
  808. c->regs[R14]|= DTRREQ;
  809. write_zsreg(c, R14, c->regs[R14]);     
  810. c->regs[R1]&= ~TxINT_ENAB;
  811. write_zsreg(c, R1, c->regs[R1]);
  812. /*
  813.  * RX DMA via W/Req
  814.  */  
  815. c->regs[R1]|= WT_FN_RDYFN;
  816. c->regs[R1]|= WT_RDY_RT;
  817. c->regs[R1]|= INT_ERR_Rx;
  818. c->regs[R1]&= ~TxINT_ENAB;
  819. write_zsreg(c, R1, c->regs[R1]);
  820. c->regs[R1]|= WT_RDY_ENAB;
  821. write_zsreg(c, R1, c->regs[R1]);            
  822. /*
  823.  * DMA interrupts
  824.  */
  825.  
  826. /*
  827.  * Set up the DMA configuration
  828.  */
  829.  
  830. flags=claim_dma_lock();
  831.  
  832. disable_dma(c->rxdma);
  833. clear_dma_ff(c->rxdma);
  834. set_dma_mode(c->rxdma, DMA_MODE_READ|0x10);
  835. set_dma_addr(c->rxdma, virt_to_bus(c->rx_buf[0]));
  836. set_dma_count(c->rxdma, c->mtu);
  837. enable_dma(c->rxdma);
  838. disable_dma(c->txdma);
  839. clear_dma_ff(c->txdma);
  840. set_dma_mode(c->txdma, DMA_MODE_WRITE);
  841. disable_dma(c->txdma);
  842. release_dma_lock(flags);
  843. /*
  844.  * Select the DMA interrupt handlers
  845.  */
  846. c->rxdma_on = 1;
  847. c->txdma_on = 1;
  848. c->tx_dma_used = 1;
  849.  
  850. c->irqs = &z8530_dma_sync;
  851. z8530_rtsdtr(c,1);
  852. write_zsreg(c, R3, c->regs[R3]|RxENABLE);
  853. spin_unlock_irqrestore(c->lock, flags);
  854. return 0;
  855. }
  856. EXPORT_SYMBOL(z8530_sync_dma_open);
  857. /**
  858.  * z8530_sync_dma_close - Close down DMA I/O
  859.  * @dev: Network device to detach
  860.  * @c: Z8530 channel to move into discard mode
  861.  *
  862.  * Shut down a DMA mode synchronous interface. Halt the DMA, and
  863.  * free the buffers.
  864.  */
  865.  
  866. int z8530_sync_dma_close(struct net_device *dev, struct z8530_channel *c)
  867. {
  868. u8 chk;
  869. unsigned long flags;
  870. c->irqs = &z8530_nop;
  871. c->max = 0;
  872. c->sync = 0;
  873. /*
  874.  * Disable the PC DMA channels
  875.  */
  876. flags=claim_dma_lock(); 
  877. disable_dma(c->rxdma);
  878. clear_dma_ff(c->rxdma);
  879. c->rxdma_on = 0;
  880. disable_dma(c->txdma);
  881. clear_dma_ff(c->txdma);
  882. release_dma_lock(flags);
  883. c->txdma_on = 0;
  884. c->tx_dma_used = 0;
  885. spin_lock_irqsave(c->lock, flags);
  886. /*
  887.  * Disable DMA control mode
  888.  */
  889.  
  890. c->regs[R1]&= ~WT_RDY_ENAB;
  891. write_zsreg(c, R1, c->regs[R1]);            
  892. c->regs[R1]&= ~(WT_RDY_RT|WT_FN_RDYFN|INT_ERR_Rx);
  893. c->regs[R1]|= INT_ALL_Rx;
  894. write_zsreg(c, R1, c->regs[R1]);
  895. c->regs[R14]&= ~DTRREQ;
  896. write_zsreg(c, R14, c->regs[R14]);   
  897. if(c->rx_buf[0])
  898. {
  899. free_page((unsigned long)c->rx_buf[0]);
  900. c->rx_buf[0]=NULL;
  901. }
  902. if(c->tx_dma_buf[0])
  903. {
  904. free_page((unsigned  long)c->tx_dma_buf[0]);
  905. c->tx_dma_buf[0]=NULL;
  906. }
  907. chk=read_zsreg(c,R0);
  908. write_zsreg(c, R3, c->regs[R3]);
  909. z8530_rtsdtr(c,0);
  910. spin_unlock_irqrestore(c->lock, flags);
  911. return 0;
  912. }
  913. EXPORT_SYMBOL(z8530_sync_dma_close);
  914. /**
  915.  * z8530_sync_txdma_open - Open a Z8530 for TX driven DMA
  916.  * @dev: The network device to attach
  917.  * @c: The Z8530 channel to configure in sync DMA mode.
  918.  *
  919.  * Set up a Z85x30 device for synchronous DMA tranmission. One
  920.  * ISA DMA channel must be available for this to work. The receive
  921.  * side is run in PIO mode, but then it has the bigger FIFO.
  922.  */
  923. int z8530_sync_txdma_open(struct net_device *dev, struct z8530_channel *c)
  924. {
  925. unsigned long flags;
  926. printk("Opening sync interface for TX-DMAn");
  927. c->sync = 1;
  928. c->mtu = dev->mtu+64;
  929. c->count = 0;
  930. c->skb = NULL;
  931. c->skb2 = NULL;
  932. /*
  933.  * Allocate the DMA flip buffers. Limit by page size.
  934.  * Everyone runs 1500 mtu or less on wan links so this
  935.  * should be fine.
  936.  */
  937.  
  938. if(c->mtu  > PAGE_SIZE/2)
  939. return -EMSGSIZE;
  940.  
  941. c->tx_dma_buf[0]=(void *)get_free_page(GFP_KERNEL|GFP_DMA);
  942. if(c->tx_dma_buf[0]==NULL)
  943. return -ENOBUFS;
  944. c->tx_dma_buf[1] = c->tx_dma_buf[0] + PAGE_SIZE/2;
  945. spin_lock_irqsave(c->lock, flags);
  946. /*
  947.  * Load the PIO receive ring
  948.  */
  949. z8530_rx_done(c);
  950. z8530_rx_done(c);
  951.   /*
  952.  * Load the DMA interfaces up
  953.  */
  954. c->rxdma_on = 0;
  955. c->txdma_on = 0;
  956. c->tx_dma_used=0;
  957. c->dma_num=0;
  958. c->dma_ready=1;
  959. c->dma_tx = 1;
  960.   /*
  961.  * Enable DMA control mode
  962.  */
  963.   /*
  964.  * TX DMA via DIR/REQ
  965.    */
  966. c->regs[R14]|= DTRREQ;
  967. write_zsreg(c, R14, c->regs[R14]);     
  968. c->regs[R1]&= ~TxINT_ENAB;
  969. write_zsreg(c, R1, c->regs[R1]);
  970. /*
  971.  * Set up the DMA configuration
  972.  */
  973.  
  974. flags = claim_dma_lock();
  975. disable_dma(c->txdma);
  976. clear_dma_ff(c->txdma);
  977. set_dma_mode(c->txdma, DMA_MODE_WRITE);
  978. disable_dma(c->txdma);
  979. release_dma_lock(flags);
  980. /*
  981.  * Select the DMA interrupt handlers
  982.  */
  983. c->rxdma_on = 0;
  984. c->txdma_on = 1;
  985. c->tx_dma_used = 1;
  986.  
  987. c->irqs = &z8530_txdma_sync;
  988. z8530_rtsdtr(c,1);
  989. write_zsreg(c, R3, c->regs[R3]|RxENABLE);
  990. spin_unlock_irqrestore(c->lock, flags);
  991. return 0;
  992. }
  993. EXPORT_SYMBOL(z8530_sync_txdma_open);
  994. /**
  995.  * z8530_sync_txdma_close - Close down a TX driven DMA channel
  996.  * @dev: Network device to detach
  997.  * @c: Z8530 channel to move into discard mode
  998.  *
  999.  * Shut down a DMA/PIO split mode synchronous interface. Halt the DMA, 
  1000.  * and  free the buffers.
  1001.  */
  1002. int z8530_sync_txdma_close(struct net_device *dev, struct z8530_channel *c)
  1003. {
  1004. unsigned long flags;
  1005. u8 chk;
  1006. spin_lock_irqsave(c->lock, flags);
  1007. c->irqs = &z8530_nop;
  1008. c->max = 0;
  1009. c->sync = 0;
  1010. /*
  1011.  * Disable the PC DMA channels
  1012.  */
  1013.  
  1014. flags = claim_dma_lock();
  1015. disable_dma(c->txdma);
  1016. clear_dma_ff(c->txdma);
  1017. c->txdma_on = 0;
  1018. c->tx_dma_used = 0;
  1019. release_dma_lock(flags);
  1020. /*
  1021.  * Disable DMA control mode
  1022.  */
  1023.  
  1024. c->regs[R1]&= ~WT_RDY_ENAB;
  1025. write_zsreg(c, R1, c->regs[R1]);            
  1026. c->regs[R1]&= ~(WT_RDY_RT|WT_FN_RDYFN|INT_ERR_Rx);
  1027. c->regs[R1]|= INT_ALL_Rx;
  1028. write_zsreg(c, R1, c->regs[R1]);
  1029. c->regs[R14]&= ~DTRREQ;
  1030. write_zsreg(c, R14, c->regs[R14]);   
  1031. if(c->tx_dma_buf[0])
  1032. {
  1033. free_page((unsigned long)c->tx_dma_buf[0]);
  1034. c->tx_dma_buf[0]=NULL;
  1035. }
  1036. chk=read_zsreg(c,R0);
  1037. write_zsreg(c, R3, c->regs[R3]);
  1038. z8530_rtsdtr(c,0);
  1039. return 0;
  1040. }
  1041. EXPORT_SYMBOL(z8530_sync_txdma_close);
  1042. /*
  1043.  * Name strings for Z8530 chips. SGI claim to have a 130, Zilog deny
  1044.  * it exists...
  1045.  */
  1046.  
  1047. static char *z8530_type_name[]={
  1048. "Z8530",
  1049. "Z85C30",
  1050. "Z85230"
  1051. };
  1052. /**
  1053.  * z8530_describe - Uniformly describe a Z8530 port
  1054.  * @dev: Z8530 device to describe
  1055.  * @mapping: string holding mapping type (eg "I/O" or "Mem")
  1056.  * @io: the port value in question
  1057.  *
  1058.  * Describe a Z8530 in a standard format. We must pass the I/O as
  1059.  * the port offset isnt predictable. The main reason for this function
  1060.  * is to try and get a common format of report.
  1061.  */
  1062. void z8530_describe(struct z8530_dev *dev, char *mapping, unsigned long io)
  1063. {
  1064. printk(KERN_INFO "%s: %s found at %s 0x%lX, IRQ %d.n",
  1065. dev->name, 
  1066. z8530_type_name[dev->type],
  1067. mapping,
  1068. Z8530_PORT_OF(io),
  1069. dev->irq);
  1070. }
  1071. EXPORT_SYMBOL(z8530_describe);
  1072. /*
  1073.  * Locked operation part of the z8530 init code
  1074.  */
  1075.  
  1076. static int do_z8530_init(struct z8530_dev *dev)
  1077. {
  1078. /* NOP the interrupt handlers first - we might get a
  1079.    floating IRQ transition when we reset the chip */
  1080. dev->chanA.irqs=&z8530_nop;
  1081. dev->chanB.irqs=&z8530_nop;
  1082. dev->chanA.dcdcheck=DCD;
  1083. dev->chanB.dcdcheck=DCD;
  1084. /* Set up the chip level lock */
  1085. spin_lock_init(&dev->lock);
  1086. dev->chanA.lock = &dev->lock;
  1087. dev->chanB.lock = &dev->lock;
  1088. /* Reset the chip */
  1089. write_zsreg(&dev->chanA, R9, 0xC0);
  1090. udelay(200);
  1091. /* Now check its valid */
  1092. write_zsreg(&dev->chanA, R12, 0xAA);
  1093. if(read_zsreg(&dev->chanA, R12)!=0xAA)
  1094. return -ENODEV;
  1095. write_zsreg(&dev->chanA, R12, 0x55);
  1096. if(read_zsreg(&dev->chanA, R12)!=0x55)
  1097. return -ENODEV;
  1098. dev->type=Z8530;
  1099. /*
  1100.  * See the application note.
  1101.  */
  1102.  
  1103. write_zsreg(&dev->chanA, R15, 0x01);
  1104. /*
  1105.  * If we can set the low bit of R15 then
  1106.  * the chip is enhanced.
  1107.  */
  1108.  
  1109. if(read_zsreg(&dev->chanA, R15)==0x01)
  1110. {
  1111. /* This C30 versus 230 detect is from Klaus Kudielka's dmascc */
  1112. /* Put a char in the fifo */
  1113. write_zsreg(&dev->chanA, R8, 0);
  1114. if(read_zsreg(&dev->chanA, R0)&Tx_BUF_EMP)
  1115. dev->type = Z85230; /* Has a FIFO */
  1116. else
  1117. dev->type = Z85C30; /* Z85C30, 1 byte FIFO */
  1118. }
  1119. /*
  1120.  * The code assumes R7' and friends are
  1121.  * off. Use write_zsext() for these and keep
  1122.  * this bit clear.
  1123.  */
  1124.  
  1125. write_zsreg(&dev->chanA, R15, 0);
  1126. /*
  1127.  * At this point it looks like the chip is behaving
  1128.  */
  1129.  
  1130. memcpy(dev->chanA.regs, reg_init, 16);
  1131. memcpy(dev->chanB.regs, reg_init ,16);
  1132. return 0;
  1133. }
  1134. /**
  1135.  * z8530_init - Initialise a Z8530 device
  1136.  * @dev: Z8530 device to initialise.
  1137.  *
  1138.  * Configure up a Z8530/Z85C30 or Z85230 chip. We check the device
  1139.  * is present, identify the type and then program it to hopefully
  1140.  * keep quite and behave. This matters a lot, a Z8530 in the wrong
  1141.  * state will sometimes get into stupid modes generating 10Khz
  1142.  * interrupt streams and the like.
  1143.  *
  1144.  * We set the interrupt handler up to discard any events, in case
  1145.  * we get them during reset or setp.
  1146.  *
  1147.  * Return 0 for success, or a negative value indicating the problem
  1148.  * in errno form.
  1149.  */
  1150. int z8530_init(struct z8530_dev *dev)
  1151. {
  1152. unsigned long flags;
  1153. int ret;
  1154. /* Set up the chip level lock */
  1155. spin_lock_init(&dev->lock);
  1156. dev->chanA.lock = &dev->lock;
  1157. dev->chanB.lock = &dev->lock;
  1158. spin_lock_irqsave(&dev->lock, flags);
  1159. ret = do_z8530_init(dev);
  1160. spin_unlock_irqrestore(&dev->lock, flags);
  1161. return ret;
  1162. }
  1163. EXPORT_SYMBOL(z8530_init);
  1164. /**
  1165.  * z8530_shutdown - Shutdown a Z8530 device
  1166.  * @dev: The Z8530 chip to shutdown
  1167.  *
  1168.  * We set the interrupt handlers to silence any interrupts. We then 
  1169.  * reset the chip and wait 100uS to be sure the reset completed. Just
  1170.  * in case the caller then tries to do stuff.
  1171.  *
  1172.  * This is called without the lock held
  1173.  */
  1174.  
  1175. int z8530_shutdown(struct z8530_dev *dev)
  1176. {
  1177. unsigned long flags;
  1178. /* Reset the chip */
  1179. spin_lock_irqsave(&dev->lock, flags);
  1180. dev->chanA.irqs=&z8530_nop;
  1181. dev->chanB.irqs=&z8530_nop;
  1182. write_zsreg(&dev->chanA, R9, 0xC0);
  1183. /* We must lock the udelay, the chip is offlimits here */
  1184. udelay(100);
  1185. spin_unlock_irqrestore(&dev->lock, flags);
  1186. return 0;
  1187. }
  1188. EXPORT_SYMBOL(z8530_shutdown);
  1189. /**
  1190.  * z8530_channel_load - Load channel data
  1191.  * @c: Z8530 channel to configure
  1192.  * @rtable: table of register, value pairs
  1193.  * FIXME: ioctl to allow user uploaded tables
  1194.  *
  1195.  * Load a Z8530 channel up from the system data. We use +16 to 
  1196.  * indicate the "prime" registers. The value 255 terminates the
  1197.  * table.
  1198.  */
  1199. int z8530_channel_load(struct z8530_channel *c, u8 *rtable)
  1200. {
  1201. unsigned long flags;
  1202. spin_lock_irqsave(c->lock, flags);
  1203. while(*rtable!=255)
  1204. {
  1205. int reg=*rtable++;
  1206. if(reg>0x0F)
  1207. write_zsreg(c, R15, c->regs[15]|1);
  1208. write_zsreg(c, reg&0x0F, *rtable);
  1209. if(reg>0x0F)
  1210. write_zsreg(c, R15, c->regs[15]&~1);
  1211. c->regs[reg]=*rtable++;
  1212. }
  1213. c->rx_function=z8530_null_rx;
  1214. c->skb=NULL;
  1215. c->tx_skb=NULL;
  1216. c->tx_next_skb=NULL;
  1217. c->mtu=1500;
  1218. c->max=0;
  1219. c->count=0;
  1220. c->status=read_zsreg(c, R0);
  1221. c->sync=1;
  1222. write_zsreg(c, R3, c->regs[R3]|RxENABLE);
  1223. spin_unlock_irqrestore(c->lock, flags);
  1224. return 0;
  1225. }
  1226. EXPORT_SYMBOL(z8530_channel_load);
  1227. /**
  1228.  * z8530_tx_begin - Begin packet transmission
  1229.  * @c: The Z8530 channel to kick
  1230.  *
  1231.  * This is the speed sensitive side of transmission. If we are called
  1232.  * and no buffer is being transmitted we commence the next buffer. If
  1233.  * nothing is queued we idle the sync. 
  1234.  *
  1235.  * Note: We are handling this code path in the interrupt path, keep it
  1236.  * fast or bad things will happen.
  1237.  *
  1238.  * Called with the lock held.
  1239.  */
  1240. static void z8530_tx_begin(struct z8530_channel *c)
  1241. {
  1242. unsigned long flags;
  1243. if(c->tx_skb)
  1244. return;
  1245. c->tx_skb=c->tx_next_skb;
  1246. c->tx_next_skb=NULL;
  1247. c->tx_ptr=c->tx_next_ptr;
  1248. netif_wake_queue(c->netdevice);
  1249. if(c->tx_skb==NULL)
  1250. {
  1251. /* Idle on */
  1252. if(c->dma_tx)
  1253. {
  1254. flags=claim_dma_lock();
  1255. disable_dma(c->txdma);
  1256. /*
  1257.  * Check if we crapped out.
  1258.  */
  1259. if(get_dma_residue(c->txdma))
  1260. {
  1261. c->stats.tx_dropped++;
  1262. c->stats.tx_fifo_errors++;
  1263. }
  1264. release_dma_lock(flags);
  1265. }
  1266. c->txcount=0;
  1267. }
  1268. else
  1269. {
  1270. c->txcount=c->tx_skb->len;
  1271. if(c->dma_tx)
  1272. {
  1273. /*
  1274.  * FIXME. DMA is broken for the original 8530,
  1275.  * on the older parts we need to set a flag and
  1276.  * wait for a further TX interrupt to fire this
  1277.  * stage off
  1278.  */
  1279.  
  1280. flags=claim_dma_lock();
  1281. disable_dma(c->txdma);
  1282. /*
  1283.  * These two are needed by the 8530/85C30
  1284.  * and must be issued when idling.
  1285.  */
  1286.  
  1287. if(c->dev->type!=Z85230)
  1288. {
  1289. write_zsctrl(c, RES_Tx_CRC);
  1290. write_zsctrl(c, RES_EOM_L);
  1291. }
  1292. write_zsreg(c, R10, c->regs[10]&~ABUNDER);
  1293. clear_dma_ff(c->txdma);
  1294. set_dma_addr(c->txdma, virt_to_bus(c->tx_ptr));
  1295. set_dma_count(c->txdma, c->txcount);
  1296. enable_dma(c->txdma);
  1297. release_dma_lock(flags);
  1298. write_zsctrl(c, RES_EOM_L);
  1299. write_zsreg(c, R5, c->regs[R5]|TxENAB);
  1300. }
  1301. else
  1302. {
  1303. /* ABUNDER off */
  1304. write_zsreg(c, R10, c->regs[10]);
  1305. write_zsctrl(c, RES_Tx_CRC);
  1306. //??? write_zsctrl(c, RES_EOM_L);
  1307. while(c->txcount && (read_zsreg(c,R0)&Tx_BUF_EMP))
  1308. {
  1309. write_zsreg(c, R8, *c->tx_ptr++);
  1310. c->txcount--;
  1311. }
  1312. }
  1313. }
  1314. }
  1315. /**
  1316.  * z8530_tx_done - TX complete callback
  1317.  * @c: The channel that completed a transmit.
  1318.  *
  1319.  * This is called when we complete a packet send. We wake the queue,
  1320.  * start the next packet going and then free the buffer of the existing
  1321.  * packet. This code is fairly timing sensitive.
  1322.  *
  1323.  * Called with the register lock held.
  1324.  */ 
  1325.  
  1326. static void z8530_tx_done(struct z8530_channel *c)
  1327. {
  1328. struct sk_buff *skb;
  1329. netif_wake_queue(c->netdevice);
  1330. /* Actually this can happen.*/
  1331. if(c->tx_skb==NULL)
  1332. return;
  1333. skb=c->tx_skb;
  1334. c->tx_skb=NULL;
  1335. z8530_tx_begin(c);
  1336. c->stats.tx_packets++;
  1337. c->stats.tx_bytes+=skb->len;
  1338. dev_kfree_skb_irq(skb);
  1339. }
  1340. /**
  1341.  * z8530_null_rx - Discard a packet
  1342.  * @c: The channel the packet arrived on
  1343.  * @skb: The buffer
  1344.  *
  1345.  * We point the receive handler at this function when idle. Instead
  1346.  * of syncppp processing the frames we get to throw them away.
  1347.  */
  1348.  
  1349. void z8530_null_rx(struct z8530_channel *c, struct sk_buff *skb)
  1350. {
  1351. dev_kfree_skb_any(skb);
  1352. }
  1353. EXPORT_SYMBOL(z8530_null_rx);
  1354. /**
  1355.  * z8530_rx_done - Receive completion callback
  1356.  * @c: The channel that completed a receive
  1357.  *
  1358.  * A new packet is complete. Our goal here is to get back into receive
  1359.  * mode as fast as possible. On the Z85230 we could change to using
  1360.  * ESCC mode, but on the older chips we have no choice. We flip to the
  1361.  * new buffer immediately in DMA mode so that the DMA of the next
  1362.  * frame can occur while we are copying the previous buffer to an sk_buff
  1363.  *
  1364.  * Called with the lock held
  1365.  */
  1366.  
  1367. static void z8530_rx_done(struct z8530_channel *c)
  1368. {
  1369. struct sk_buff *skb;
  1370. int ct;
  1371. /*
  1372.  * Is our receive engine in DMA mode
  1373.  */
  1374.  
  1375. if(c->rxdma_on)
  1376. {
  1377. /*
  1378.  * Save the ready state and the buffer currently
  1379.  * being used as the DMA target
  1380.  */
  1381.  
  1382. int ready=c->dma_ready;
  1383. unsigned char *rxb=c->rx_buf[c->dma_num];
  1384. unsigned long flags;
  1385. /*
  1386.  * Complete this DMA. Neccessary to find the length
  1387.  */
  1388.  
  1389. flags=claim_dma_lock();
  1390. disable_dma(c->rxdma);
  1391. clear_dma_ff(c->rxdma);
  1392. c->rxdma_on=0;
  1393. ct=c->mtu-get_dma_residue(c->rxdma);
  1394. if(ct<0)
  1395. ct=2; /* Shit happens.. */
  1396. c->dma_ready=0;
  1397. /*
  1398.  * Normal case: the other slot is free, start the next DMA
  1399.  * into it immediately.
  1400.  */
  1401.  
  1402. if(ready)
  1403. {
  1404. c->dma_num^=1;
  1405. set_dma_mode(c->rxdma, DMA_MODE_READ|0x10);
  1406. set_dma_addr(c->rxdma, virt_to_bus(c->rx_buf[c->dma_num]));
  1407. set_dma_count(c->rxdma, c->mtu);
  1408. c->rxdma_on = 1;
  1409. enable_dma(c->rxdma);
  1410. /* Stop any frames that we missed the head of 
  1411.    from passing */
  1412. write_zsreg(c, R0, RES_Rx_CRC);
  1413. }
  1414. else
  1415. /* Can't occur as we dont reenable the DMA irq until
  1416.    after the flip is done */
  1417. printk(KERN_WARNING "%s: DMA flip overrun!n", c->netdevice->name);
  1418. release_dma_lock(flags);
  1419. /*
  1420.  * Shove the old buffer into an sk_buff. We can't DMA
  1421.  * directly into one on a PC - it might be above the 16Mb
  1422.  * boundary. Optimisation - we could check to see if we
  1423.  * can avoid the copy. Optimisation 2 - make the memcpy
  1424.  * a copychecksum.
  1425.  */
  1426.  
  1427. skb=dev_alloc_skb(ct);
  1428. if(skb==NULL)
  1429. {
  1430. c->stats.rx_dropped++;
  1431. printk(KERN_WARNING "%s: Memory squeeze.n", c->netdevice->name);
  1432. }
  1433. else
  1434. {
  1435. skb_put(skb, ct);
  1436. memcpy(skb->data, rxb, ct);
  1437. c->stats.rx_packets++;
  1438. c->stats.rx_bytes+=ct;
  1439. }
  1440. c->dma_ready=1;
  1441. }
  1442. else
  1443. {
  1444. RT_LOCK;
  1445. skb=c->skb;
  1446. /*
  1447.  * The game we play for non DMA is similar. We want to
  1448.  * get the controller set up for the next packet as fast
  1449.  * as possible. We potentially only have one byte + the
  1450.  * fifo length for this. Thus we want to flip to the new
  1451.  * buffer and then mess around copying and allocating
  1452.  * things. For the current case it doesn't matter but
  1453.  * if you build a system where the sync irq isnt blocked
  1454.  * by the kernel IRQ disable then you need only block the
  1455.  * sync IRQ for the RT_LOCK area.
  1456.  *
  1457.  */
  1458. ct=c->count;
  1459. c->skb = c->skb2;
  1460. c->count = 0;
  1461. c->max = c->mtu;
  1462. if(c->skb)
  1463. {
  1464. c->dptr = c->skb->data;
  1465. c->max = c->mtu;
  1466. }
  1467. else
  1468. {
  1469. c->count= 0;
  1470. c->max = 0;
  1471. }
  1472. RT_UNLOCK;
  1473. c->skb2 = dev_alloc_skb(c->mtu);
  1474. if(c->skb2==NULL)
  1475. printk(KERN_WARNING "%s: memory squeeze.n",
  1476. c->netdevice->name);
  1477. else
  1478. {
  1479. skb_put(c->skb2,c->mtu);
  1480. }
  1481. c->stats.rx_packets++;
  1482. c->stats.rx_bytes+=ct;
  1483. }
  1484. /*
  1485.  * If we received a frame we must now process it.
  1486.  */
  1487. if(skb)
  1488. {
  1489. skb_trim(skb, ct);
  1490. c->rx_function(c,skb);
  1491. }
  1492. else
  1493. {
  1494. c->stats.rx_dropped++;
  1495. printk(KERN_ERR "%s: Lost a framen", c->netdevice->name);
  1496. }
  1497. }
  1498. /**
  1499.  * spans_boundary - Check a packet can be ISA DMA'd
  1500.  * @skb: The buffer to check
  1501.  *
  1502.  * Returns true if the buffer cross a DMA boundary on a PC. The poor
  1503.  * thing can only DMA within a 64K block not across the edges of it.
  1504.  */
  1505.  
  1506. static inline int spans_boundary(struct sk_buff *skb)
  1507. {
  1508. unsigned long a=(unsigned long)skb->data;
  1509. a^=(a+skb->len);
  1510. if(a&0x00010000) /* If the 64K bit is different.. */
  1511. return 1;
  1512. return 0;
  1513. }
  1514. /**
  1515.  * z8530_queue_xmit - Queue a packet
  1516.  * @c: The channel to use
  1517.  * @skb: The packet to kick down the channel
  1518.  *
  1519.  * Queue a packet for transmission. Because we have rather
  1520.  * hard to hit interrupt latencies for the Z85230 per packet 
  1521.  * even in DMA mode we do the flip to DMA buffer if needed here
  1522.  * not in the IRQ.
  1523.  *
  1524.  * Called from the network code. The lock is not held at this 
  1525.  * point.
  1526.  */
  1527. int z8530_queue_xmit(struct z8530_channel *c, struct sk_buff *skb)
  1528. {
  1529. unsigned long flags;
  1530. netif_stop_queue(c->netdevice);
  1531. if(c->tx_next_skb)
  1532. {
  1533. return 1;
  1534. }
  1535. /* PC SPECIFIC - DMA limits */
  1536. /*
  1537.  * If we will DMA the transmit and its gone over the ISA bus
  1538.  * limit, then copy to the flip buffer
  1539.  */
  1540.  
  1541. if(c->dma_tx && ((unsigned long)(virt_to_bus(skb->data+skb->len))>=16*1024*1024 || spans_boundary(skb)))
  1542. {
  1543. /* 
  1544.  * Send the flip buffer, and flip the flippy bit.
  1545.  * We don't care which is used when just so long as
  1546.  * we never use the same buffer twice in a row. Since
  1547.  * only one buffer can be going out at a time the other
  1548.  * has to be safe.
  1549.  */
  1550. c->tx_next_ptr=c->tx_dma_buf[c->tx_dma_used];
  1551. c->tx_dma_used^=1; /* Flip temp buffer */
  1552. memcpy(c->tx_next_ptr, skb->data, skb->len);
  1553. }
  1554. else
  1555. c->tx_next_ptr=skb->data;
  1556. RT_LOCK;
  1557. c->tx_next_skb=skb;
  1558. RT_UNLOCK;
  1559. spin_lock_irqsave(c->lock, flags);
  1560. z8530_tx_begin(c);
  1561. spin_unlock_irqrestore(c->lock, flags);
  1562. netif_wake_queue(c->netdevice);
  1563. return 0;
  1564. }
  1565. EXPORT_SYMBOL(z8530_queue_xmit);
  1566. /**
  1567.  * z8530_get_stats - Get network statistics
  1568.  * @c: The channel to use
  1569.  *
  1570.  * Get the statistics block. We keep the statistics in software as
  1571.  * the chip doesn't do it for us.
  1572.  *
  1573.  * Locking is ignored here - we could lock for a copy but its
  1574.  * not likely to be that big an issue
  1575.  */
  1576.  
  1577. struct net_device_stats *z8530_get_stats(struct z8530_channel *c)
  1578. {
  1579. return &c->stats;
  1580. }
  1581. EXPORT_SYMBOL(z8530_get_stats);
  1582. /*
  1583.  * Module support
  1584.  */
  1585. static char banner[] __initdata = KERN_INFO "Generic Z85C30/Z85230 interface driver v0.02n";
  1586. static int __init z85230_init_driver(void)
  1587. {
  1588. printk(banner);
  1589. return 0;
  1590. }
  1591. module_init(z85230_init_driver);
  1592. static void __exit z85230_cleanup_driver(void)
  1593. {
  1594. }
  1595. module_exit(z85230_cleanup_driver);
  1596. MODULE_AUTHOR("Red Hat Inc.");
  1597. MODULE_DESCRIPTION("Z85x30 synchronous driver core");
  1598. MODULE_LICENSE("GPL");