iwlwifi: introduce host commands callbacks
[linux/fpc-iii.git] / drivers / ieee1394 / ohci1394.c
blob969de2a2d633450bc8aad554c53f7bd740672ccc
1 /*
2 * ohci1394.c - driver for OHCI 1394 boards
3 * Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
4 * Gord Peters <GordPeters@smarttech.com>
5 * 2001 Ben Collins <bcollins@debian.org>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software Foundation,
19 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 * Things known to be working:
24 * . Async Request Transmit
25 * . Async Response Receive
26 * . Async Request Receive
27 * . Async Response Transmit
28 * . Iso Receive
29 * . DMA mmap for iso receive
30 * . Config ROM generation
32 * Things implemented, but still in test phase:
33 * . Iso Transmit
34 * . Async Stream Packets Transmit (Receive done via Iso interface)
36 * Things not implemented:
37 * . DMA error recovery
39 * Known bugs:
40 * . devctl BUS_RESET arg confusion (reset type or root holdoff?)
41 * added LONG_RESET_ROOT and SHORT_RESET_ROOT for root holdoff --kk
45 * Acknowledgments:
47 * Adam J Richter <adam@yggdrasil.com>
48 * . Use of pci_class to find device
50 * Emilie Chung <emilie.chung@axis.com>
51 * . Tip on Async Request Filter
53 * Pascal Drolet <pascal.drolet@informission.ca>
54 * . Various tips for optimization and functionnalities
56 * Robert Ficklin <rficklin@westengineering.com>
57 * . Loop in irq_handler
59 * James Goodwin <jamesg@Filanet.com>
60 * . Various tips on initialization, self-id reception, etc.
62 * Albrecht Dress <ad@mpifr-bonn.mpg.de>
63 * . Apple PowerBook detection
65 * Daniel Kobras <daniel.kobras@student.uni-tuebingen.de>
66 * . Reset the board properly before leaving + misc cleanups
68 * Leon van Stuivenberg <leonvs@iae.nl>
69 * . Bug fixes
71 * Ben Collins <bcollins@debian.org>
72 * . Working big-endian support
73 * . Updated to 2.4.x module scheme (PCI aswell)
74 * . Config ROM generation
76 * Manfred Weihs <weihs@ict.tuwien.ac.at>
77 * . Reworked code for initiating bus resets
78 * (long, short, with or without hold-off)
80 * Nandu Santhi <contactnandu@users.sourceforge.net>
81 * . Added support for nVidia nForce2 onboard Firewire chipset
85 #include <linux/kernel.h>
86 #include <linux/list.h>
87 #include <linux/slab.h>
88 #include <linux/interrupt.h>
89 #include <linux/wait.h>
90 #include <linux/errno.h>
91 #include <linux/module.h>
92 #include <linux/moduleparam.h>
93 #include <linux/pci.h>
94 #include <linux/fs.h>
95 #include <linux/poll.h>
96 #include <asm/byteorder.h>
97 #include <asm/atomic.h>
98 #include <asm/uaccess.h>
99 #include <linux/delay.h>
100 #include <linux/spinlock.h>
102 #include <asm/pgtable.h>
103 #include <asm/page.h>
104 #include <asm/irq.h>
105 #include <linux/types.h>
106 #include <linux/vmalloc.h>
107 #include <linux/init.h>
109 #ifdef CONFIG_PPC_PMAC
110 #include <asm/machdep.h>
111 #include <asm/pmac_feature.h>
112 #include <asm/prom.h>
113 #include <asm/pci-bridge.h>
114 #endif
116 #include "csr1212.h"
117 #include "ieee1394.h"
118 #include "ieee1394_types.h"
119 #include "hosts.h"
120 #include "dma.h"
121 #include "iso.h"
122 #include "ieee1394_core.h"
123 #include "highlevel.h"
124 #include "ohci1394.h"
126 #ifdef CONFIG_IEEE1394_VERBOSEDEBUG
127 #define OHCI1394_DEBUG
128 #endif
130 #ifdef DBGMSG
131 #undef DBGMSG
132 #endif
134 #ifdef OHCI1394_DEBUG
135 #define DBGMSG(fmt, args...) \
136 printk(KERN_INFO "%s: fw-host%d: " fmt "\n" , OHCI1394_DRIVER_NAME, ohci->host->id , ## args)
137 #else
138 #define DBGMSG(fmt, args...) do {} while (0)
139 #endif
141 /* print general (card independent) information */
142 #define PRINT_G(level, fmt, args...) \
143 printk(level "%s: " fmt "\n" , OHCI1394_DRIVER_NAME , ## args)
145 /* print card specific information */
146 #define PRINT(level, fmt, args...) \
147 printk(level "%s: fw-host%d: " fmt "\n" , OHCI1394_DRIVER_NAME, ohci->host->id , ## args)
149 /* Module Parameters */
150 static int phys_dma = 1;
151 module_param(phys_dma, int, 0444);
152 MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1).");
154 static void dma_trm_tasklet(unsigned long data);
155 static void dma_trm_reset(struct dma_trm_ctx *d);
157 static int alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d,
158 enum context_type type, int ctx, int num_desc,
159 int buf_size, int split_buf_size, int context_base);
160 static void free_dma_rcv_ctx(struct dma_rcv_ctx *d);
162 static int alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d,
163 enum context_type type, int ctx, int num_desc,
164 int context_base);
166 static void ohci1394_pci_remove(struct pci_dev *pdev);
168 #ifndef __LITTLE_ENDIAN
169 static const size_t hdr_sizes[] = {
170 3, /* TCODE_WRITEQ */
171 4, /* TCODE_WRITEB */
172 3, /* TCODE_WRITE_RESPONSE */
173 0, /* reserved */
174 3, /* TCODE_READQ */
175 4, /* TCODE_READB */
176 3, /* TCODE_READQ_RESPONSE */
177 4, /* TCODE_READB_RESPONSE */
178 1, /* TCODE_CYCLE_START */
179 4, /* TCODE_LOCK_REQUEST */
180 2, /* TCODE_ISO_DATA */
181 4, /* TCODE_LOCK_RESPONSE */
182 /* rest is reserved or link-internal */
185 static inline void header_le32_to_cpu(quadlet_t *data, unsigned char tcode)
187 size_t size;
189 if (unlikely(tcode >= ARRAY_SIZE(hdr_sizes)))
190 return;
192 size = hdr_sizes[tcode];
193 while (size--)
194 data[size] = le32_to_cpu(data[size]);
196 #else
197 #define header_le32_to_cpu(w,x) do {} while (0)
198 #endif /* !LITTLE_ENDIAN */
200 /***********************************
201 * IEEE-1394 functionality section *
202 ***********************************/
204 static u8 get_phy_reg(struct ti_ohci *ohci, u8 addr)
206 int i;
207 unsigned long flags;
208 quadlet_t r;
210 spin_lock_irqsave (&ohci->phy_reg_lock, flags);
212 reg_write(ohci, OHCI1394_PhyControl, (addr << 8) | 0x00008000);
214 for (i = 0; i < OHCI_LOOP_COUNT; i++) {
215 if (reg_read(ohci, OHCI1394_PhyControl) & 0x80000000)
216 break;
218 mdelay(1);
221 r = reg_read(ohci, OHCI1394_PhyControl);
223 if (i >= OHCI_LOOP_COUNT)
224 PRINT (KERN_ERR, "Get PHY Reg timeout [0x%08x/0x%08x/%d]",
225 r, r & 0x80000000, i);
227 spin_unlock_irqrestore (&ohci->phy_reg_lock, flags);
229 return (r & 0x00ff0000) >> 16;
232 static void set_phy_reg(struct ti_ohci *ohci, u8 addr, u8 data)
234 int i;
235 unsigned long flags;
236 u32 r = 0;
238 spin_lock_irqsave (&ohci->phy_reg_lock, flags);
240 reg_write(ohci, OHCI1394_PhyControl, (addr << 8) | data | 0x00004000);
242 for (i = 0; i < OHCI_LOOP_COUNT; i++) {
243 r = reg_read(ohci, OHCI1394_PhyControl);
244 if (!(r & 0x00004000))
245 break;
247 mdelay(1);
250 if (i == OHCI_LOOP_COUNT)
251 PRINT (KERN_ERR, "Set PHY Reg timeout [0x%08x/0x%08x/%d]",
252 r, r & 0x00004000, i);
254 spin_unlock_irqrestore (&ohci->phy_reg_lock, flags);
256 return;
259 /* Or's our value into the current value */
260 static void set_phy_reg_mask(struct ti_ohci *ohci, u8 addr, u8 data)
262 u8 old;
264 old = get_phy_reg (ohci, addr);
265 old |= data;
266 set_phy_reg (ohci, addr, old);
268 return;
271 static void handle_selfid(struct ti_ohci *ohci, struct hpsb_host *host,
272 int phyid, int isroot)
274 quadlet_t *q = ohci->selfid_buf_cpu;
275 quadlet_t self_id_count=reg_read(ohci, OHCI1394_SelfIDCount);
276 size_t size;
277 quadlet_t q0, q1;
279 /* Check status of self-id reception */
281 if (ohci->selfid_swap)
282 q0 = le32_to_cpu(q[0]);
283 else
284 q0 = q[0];
286 if ((self_id_count & 0x80000000) ||
287 ((self_id_count & 0x00FF0000) != (q0 & 0x00FF0000))) {
288 PRINT(KERN_ERR,
289 "Error in reception of SelfID packets [0x%08x/0x%08x] (count: %d)",
290 self_id_count, q0, ohci->self_id_errors);
292 /* Tip by James Goodwin <jamesg@Filanet.com>:
293 * We had an error, generate another bus reset in response. */
294 if (ohci->self_id_errors<OHCI1394_MAX_SELF_ID_ERRORS) {
295 set_phy_reg_mask (ohci, 1, 0x40);
296 ohci->self_id_errors++;
297 } else {
298 PRINT(KERN_ERR,
299 "Too many errors on SelfID error reception, giving up!");
301 return;
304 /* SelfID Ok, reset error counter. */
305 ohci->self_id_errors = 0;
307 size = ((self_id_count & 0x00001FFC) >> 2) - 1;
308 q++;
310 while (size > 0) {
311 if (ohci->selfid_swap) {
312 q0 = le32_to_cpu(q[0]);
313 q1 = le32_to_cpu(q[1]);
314 } else {
315 q0 = q[0];
316 q1 = q[1];
319 if (q0 == ~q1) {
320 DBGMSG ("SelfID packet 0x%x received", q0);
321 hpsb_selfid_received(host, cpu_to_be32(q0));
322 if (((q0 & 0x3f000000) >> 24) == phyid)
323 DBGMSG ("SelfID for this node is 0x%08x", q0);
324 } else {
325 PRINT(KERN_ERR,
326 "SelfID is inconsistent [0x%08x/0x%08x]", q0, q1);
328 q += 2;
329 size -= 2;
332 DBGMSG("SelfID complete");
334 return;
337 static void ohci_soft_reset(struct ti_ohci *ohci) {
338 int i;
340 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_softReset);
342 for (i = 0; i < OHCI_LOOP_COUNT; i++) {
343 if (!(reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_softReset))
344 break;
345 mdelay(1);
347 DBGMSG ("Soft reset finished");
351 /* Generate the dma receive prgs and start the context */
352 static void initialize_dma_rcv_ctx(struct dma_rcv_ctx *d, int generate_irq)
354 struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
355 int i;
357 ohci1394_stop_context(ohci, d->ctrlClear, NULL);
359 for (i=0; i<d->num_desc; i++) {
360 u32 c;
362 c = DMA_CTL_INPUT_MORE | DMA_CTL_UPDATE | DMA_CTL_BRANCH;
363 if (generate_irq)
364 c |= DMA_CTL_IRQ;
366 d->prg_cpu[i]->control = cpu_to_le32(c | d->buf_size);
368 /* End of descriptor list? */
369 if (i + 1 < d->num_desc) {
370 d->prg_cpu[i]->branchAddress =
371 cpu_to_le32((d->prg_bus[i+1] & 0xfffffff0) | 0x1);
372 } else {
373 d->prg_cpu[i]->branchAddress =
374 cpu_to_le32((d->prg_bus[0] & 0xfffffff0));
377 d->prg_cpu[i]->address = cpu_to_le32(d->buf_bus[i]);
378 d->prg_cpu[i]->status = cpu_to_le32(d->buf_size);
381 d->buf_ind = 0;
382 d->buf_offset = 0;
384 if (d->type == DMA_CTX_ISO) {
385 /* Clear contextControl */
386 reg_write(ohci, d->ctrlClear, 0xffffffff);
388 /* Set bufferFill, isochHeader, multichannel for IR context */
389 reg_write(ohci, d->ctrlSet, 0xd0000000);
391 /* Set the context match register to match on all tags */
392 reg_write(ohci, d->ctxtMatch, 0xf0000000);
394 /* Clear the multi channel mask high and low registers */
395 reg_write(ohci, OHCI1394_IRMultiChanMaskHiClear, 0xffffffff);
396 reg_write(ohci, OHCI1394_IRMultiChanMaskLoClear, 0xffffffff);
398 /* Set up isoRecvIntMask to generate interrupts */
399 reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, 1 << d->ctx);
402 /* Tell the controller where the first AR program is */
403 reg_write(ohci, d->cmdPtr, d->prg_bus[0] | 0x1);
405 /* Run context */
406 reg_write(ohci, d->ctrlSet, 0x00008000);
408 DBGMSG("Receive DMA ctx=%d initialized", d->ctx);
411 /* Initialize the dma transmit context */
412 static void initialize_dma_trm_ctx(struct dma_trm_ctx *d)
414 struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
416 /* Stop the context */
417 ohci1394_stop_context(ohci, d->ctrlClear, NULL);
419 d->prg_ind = 0;
420 d->sent_ind = 0;
421 d->free_prgs = d->num_desc;
422 d->branchAddrPtr = NULL;
423 INIT_LIST_HEAD(&d->fifo_list);
424 INIT_LIST_HEAD(&d->pending_list);
426 if (d->type == DMA_CTX_ISO) {
427 /* enable interrupts */
428 reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << d->ctx);
431 DBGMSG("Transmit DMA ctx=%d initialized", d->ctx);
434 /* Count the number of available iso contexts */
435 static int get_nb_iso_ctx(struct ti_ohci *ohci, int reg)
437 int i,ctx=0;
438 u32 tmp;
440 reg_write(ohci, reg, 0xffffffff);
441 tmp = reg_read(ohci, reg);
443 DBGMSG("Iso contexts reg: %08x implemented: %08x", reg, tmp);
445 /* Count the number of contexts */
446 for (i=0; i<32; i++) {
447 if (tmp & 1) ctx++;
448 tmp >>= 1;
450 return ctx;
453 /* Global initialization */
454 static void ohci_initialize(struct ti_ohci *ohci)
456 quadlet_t buf;
457 int num_ports, i;
459 spin_lock_init(&ohci->phy_reg_lock);
461 /* Put some defaults to these undefined bus options */
462 buf = reg_read(ohci, OHCI1394_BusOptions);
463 buf |= 0x60000000; /* Enable CMC and ISC */
464 if (hpsb_disable_irm)
465 buf &= ~0x80000000;
466 else
467 buf |= 0x80000000; /* Enable IRMC */
468 buf &= ~0x00ff0000; /* XXX: Set cyc_clk_acc to zero for now */
469 buf &= ~0x18000000; /* Disable PMC and BMC */
470 reg_write(ohci, OHCI1394_BusOptions, buf);
472 /* Set the bus number */
473 reg_write(ohci, OHCI1394_NodeID, 0x0000ffc0);
475 /* Enable posted writes */
476 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_postedWriteEnable);
478 /* Clear link control register */
479 reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff);
481 /* Enable cycle timer and cycle master and set the IRM
482 * contender bit in our self ID packets if appropriate. */
483 reg_write(ohci, OHCI1394_LinkControlSet,
484 OHCI1394_LinkControl_CycleTimerEnable |
485 OHCI1394_LinkControl_CycleMaster);
486 i = get_phy_reg(ohci, 4) | PHY_04_LCTRL;
487 if (hpsb_disable_irm)
488 i &= ~PHY_04_CONTENDER;
489 else
490 i |= PHY_04_CONTENDER;
491 set_phy_reg(ohci, 4, i);
493 /* Set up self-id dma buffer */
494 reg_write(ohci, OHCI1394_SelfIDBuffer, ohci->selfid_buf_bus);
496 /* enable self-id */
497 reg_write(ohci, OHCI1394_LinkControlSet, OHCI1394_LinkControl_RcvSelfID);
499 /* Set the Config ROM mapping register */
500 reg_write(ohci, OHCI1394_ConfigROMmap, ohci->csr_config_rom_bus);
502 /* Now get our max packet size */
503 ohci->max_packet_size =
504 1<<(((reg_read(ohci, OHCI1394_BusOptions)>>12)&0xf)+1);
506 /* Clear the interrupt mask */
507 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, 0xffffffff);
508 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, 0xffffffff);
510 /* Clear the interrupt mask */
511 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 0xffffffff);
512 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 0xffffffff);
514 /* Initialize AR dma */
515 initialize_dma_rcv_ctx(&ohci->ar_req_context, 0);
516 initialize_dma_rcv_ctx(&ohci->ar_resp_context, 0);
518 /* Initialize AT dma */
519 initialize_dma_trm_ctx(&ohci->at_req_context);
520 initialize_dma_trm_ctx(&ohci->at_resp_context);
522 /* Accept AR requests from all nodes */
523 reg_write(ohci, OHCI1394_AsReqFilterHiSet, 0x80000000);
525 /* Set the address range of the physical response unit.
526 * Most controllers do not implement it as a writable register though.
527 * They will keep a hardwired offset of 0x00010000 and show 0x0 as
528 * register content.
529 * To actually enable physical responses is the job of our interrupt
530 * handler which programs the physical request filter. */
531 reg_write(ohci, OHCI1394_PhyUpperBound,
532 OHCI1394_PHYS_UPPER_BOUND_PROGRAMMED >> 16);
534 DBGMSG("physUpperBoundOffset=%08x",
535 reg_read(ohci, OHCI1394_PhyUpperBound));
537 /* Specify AT retries */
538 reg_write(ohci, OHCI1394_ATRetries,
539 OHCI1394_MAX_AT_REQ_RETRIES |
540 (OHCI1394_MAX_AT_RESP_RETRIES<<4) |
541 (OHCI1394_MAX_PHYS_RESP_RETRIES<<8));
543 /* We don't want hardware swapping */
544 reg_write(ohci, OHCI1394_HCControlClear, OHCI1394_HCControl_noByteSwap);
546 /* Enable interrupts */
547 reg_write(ohci, OHCI1394_IntMaskSet,
548 OHCI1394_unrecoverableError |
549 OHCI1394_masterIntEnable |
550 OHCI1394_busReset |
551 OHCI1394_selfIDComplete |
552 OHCI1394_RSPkt |
553 OHCI1394_RQPkt |
554 OHCI1394_respTxComplete |
555 OHCI1394_reqTxComplete |
556 OHCI1394_isochRx |
557 OHCI1394_isochTx |
558 OHCI1394_postedWriteErr |
559 OHCI1394_cycleTooLong |
560 OHCI1394_cycleInconsistent);
562 /* Enable link */
563 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_linkEnable);
565 buf = reg_read(ohci, OHCI1394_Version);
566 PRINT(KERN_INFO, "OHCI-1394 %d.%d (PCI): IRQ=[%d] "
567 "MMIO=[%llx-%llx] Max Packet=[%d] IR/IT contexts=[%d/%d]",
568 ((((buf) >> 16) & 0xf) + (((buf) >> 20) & 0xf) * 10),
569 ((((buf) >> 4) & 0xf) + ((buf) & 0xf) * 10), ohci->dev->irq,
570 (unsigned long long)pci_resource_start(ohci->dev, 0),
571 (unsigned long long)pci_resource_start(ohci->dev, 0) + OHCI1394_REGISTER_SIZE - 1,
572 ohci->max_packet_size,
573 ohci->nb_iso_rcv_ctx, ohci->nb_iso_xmit_ctx);
575 /* Check all of our ports to make sure that if anything is
576 * connected, we enable that port. */
577 num_ports = get_phy_reg(ohci, 2) & 0xf;
578 for (i = 0; i < num_ports; i++) {
579 unsigned int status;
581 set_phy_reg(ohci, 7, i);
582 status = get_phy_reg(ohci, 8);
584 if (status & 0x20)
585 set_phy_reg(ohci, 8, status & ~1);
588 /* Serial EEPROM Sanity check. */
589 if ((ohci->max_packet_size < 512) ||
590 (ohci->max_packet_size > 4096)) {
591 /* Serial EEPROM contents are suspect, set a sane max packet
592 * size and print the raw contents for bug reports if verbose
593 * debug is enabled. */
594 #ifdef CONFIG_IEEE1394_VERBOSEDEBUG
595 int i;
596 #endif
598 PRINT(KERN_DEBUG, "Serial EEPROM has suspicious values, "
599 "attempting to set max_packet_size to 512 bytes");
600 reg_write(ohci, OHCI1394_BusOptions,
601 (reg_read(ohci, OHCI1394_BusOptions) & 0xf007) | 0x8002);
602 ohci->max_packet_size = 512;
603 #ifdef CONFIG_IEEE1394_VERBOSEDEBUG
604 PRINT(KERN_DEBUG, " EEPROM Present: %d",
605 (reg_read(ohci, OHCI1394_Version) >> 24) & 0x1);
606 reg_write(ohci, OHCI1394_GUID_ROM, 0x80000000);
608 for (i = 0;
609 ((i < 1000) &&
610 (reg_read(ohci, OHCI1394_GUID_ROM) & 0x80000000)); i++)
611 udelay(10);
613 for (i = 0; i < 0x20; i++) {
614 reg_write(ohci, OHCI1394_GUID_ROM, 0x02000000);
615 PRINT(KERN_DEBUG, " EEPROM %02x: %02x", i,
616 (reg_read(ohci, OHCI1394_GUID_ROM) >> 16) & 0xff);
618 #endif
623 * Insert a packet in the DMA fifo and generate the DMA prg
624 * FIXME: rewrite the program in order to accept packets crossing
625 * page boundaries.
626 * check also that a single dma descriptor doesn't cross a
627 * page boundary.
629 static void insert_packet(struct ti_ohci *ohci,
630 struct dma_trm_ctx *d, struct hpsb_packet *packet)
632 u32 cycleTimer;
633 int idx = d->prg_ind;
635 DBGMSG("Inserting packet for node " NODE_BUS_FMT
636 ", tlabel=%d, tcode=0x%x, speed=%d",
637 NODE_BUS_ARGS(ohci->host, packet->node_id), packet->tlabel,
638 packet->tcode, packet->speed_code);
640 d->prg_cpu[idx]->begin.address = 0;
641 d->prg_cpu[idx]->begin.branchAddress = 0;
643 if (d->type == DMA_CTX_ASYNC_RESP) {
645 * For response packets, we need to put a timeout value in
646 * the 16 lower bits of the status... let's try 1 sec timeout
648 cycleTimer = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
649 d->prg_cpu[idx]->begin.status = cpu_to_le32(
650 (((((cycleTimer>>25)&0x7)+1)&0x7)<<13) |
651 ((cycleTimer&0x01fff000)>>12));
653 DBGMSG("cycleTimer: %08x timeStamp: %08x",
654 cycleTimer, d->prg_cpu[idx]->begin.status);
655 } else
656 d->prg_cpu[idx]->begin.status = 0;
658 if ( (packet->type == hpsb_async) || (packet->type == hpsb_raw) ) {
660 if (packet->type == hpsb_raw) {
661 d->prg_cpu[idx]->data[0] = cpu_to_le32(OHCI1394_TCODE_PHY<<4);
662 d->prg_cpu[idx]->data[1] = cpu_to_le32(packet->header[0]);
663 d->prg_cpu[idx]->data[2] = cpu_to_le32(packet->header[1]);
664 } else {
665 d->prg_cpu[idx]->data[0] = packet->speed_code<<16 |
666 (packet->header[0] & 0xFFFF);
668 if (packet->tcode == TCODE_ISO_DATA) {
669 /* Sending an async stream packet */
670 d->prg_cpu[idx]->data[1] = packet->header[0] & 0xFFFF0000;
671 } else {
672 /* Sending a normal async request or response */
673 d->prg_cpu[idx]->data[1] =
674 (packet->header[1] & 0xFFFF) |
675 (packet->header[0] & 0xFFFF0000);
676 d->prg_cpu[idx]->data[2] = packet->header[2];
677 d->prg_cpu[idx]->data[3] = packet->header[3];
679 header_le32_to_cpu(d->prg_cpu[idx]->data, packet->tcode);
682 if (packet->data_size) { /* block transmit */
683 if (packet->tcode == TCODE_STREAM_DATA){
684 d->prg_cpu[idx]->begin.control =
685 cpu_to_le32(DMA_CTL_OUTPUT_MORE |
686 DMA_CTL_IMMEDIATE | 0x8);
687 } else {
688 d->prg_cpu[idx]->begin.control =
689 cpu_to_le32(DMA_CTL_OUTPUT_MORE |
690 DMA_CTL_IMMEDIATE | 0x10);
692 d->prg_cpu[idx]->end.control =
693 cpu_to_le32(DMA_CTL_OUTPUT_LAST |
694 DMA_CTL_IRQ |
695 DMA_CTL_BRANCH |
696 packet->data_size);
698 * Check that the packet data buffer
699 * does not cross a page boundary.
701 * XXX Fix this some day. eth1394 seems to trigger
702 * it, but ignoring it doesn't seem to cause a
703 * problem.
705 #if 0
706 if (cross_bound((unsigned long)packet->data,
707 packet->data_size)>0) {
708 /* FIXME: do something about it */
709 PRINT(KERN_ERR,
710 "%s: packet data addr: %p size %Zd bytes "
711 "cross page boundary", __FUNCTION__,
712 packet->data, packet->data_size);
714 #endif
715 d->prg_cpu[idx]->end.address = cpu_to_le32(
716 pci_map_single(ohci->dev, packet->data,
717 packet->data_size,
718 PCI_DMA_TODEVICE));
720 d->prg_cpu[idx]->end.branchAddress = 0;
721 d->prg_cpu[idx]->end.status = 0;
722 if (d->branchAddrPtr)
723 *(d->branchAddrPtr) =
724 cpu_to_le32(d->prg_bus[idx] | 0x3);
725 d->branchAddrPtr =
726 &(d->prg_cpu[idx]->end.branchAddress);
727 } else { /* quadlet transmit */
728 if (packet->type == hpsb_raw)
729 d->prg_cpu[idx]->begin.control =
730 cpu_to_le32(DMA_CTL_OUTPUT_LAST |
731 DMA_CTL_IMMEDIATE |
732 DMA_CTL_IRQ |
733 DMA_CTL_BRANCH |
734 (packet->header_size + 4));
735 else
736 d->prg_cpu[idx]->begin.control =
737 cpu_to_le32(DMA_CTL_OUTPUT_LAST |
738 DMA_CTL_IMMEDIATE |
739 DMA_CTL_IRQ |
740 DMA_CTL_BRANCH |
741 packet->header_size);
743 if (d->branchAddrPtr)
744 *(d->branchAddrPtr) =
745 cpu_to_le32(d->prg_bus[idx] | 0x2);
746 d->branchAddrPtr =
747 &(d->prg_cpu[idx]->begin.branchAddress);
750 } else { /* iso packet */
751 d->prg_cpu[idx]->data[0] = packet->speed_code<<16 |
752 (packet->header[0] & 0xFFFF);
753 d->prg_cpu[idx]->data[1] = packet->header[0] & 0xFFFF0000;
754 header_le32_to_cpu(d->prg_cpu[idx]->data, packet->tcode);
756 d->prg_cpu[idx]->begin.control =
757 cpu_to_le32(DMA_CTL_OUTPUT_MORE |
758 DMA_CTL_IMMEDIATE | 0x8);
759 d->prg_cpu[idx]->end.control =
760 cpu_to_le32(DMA_CTL_OUTPUT_LAST |
761 DMA_CTL_UPDATE |
762 DMA_CTL_IRQ |
763 DMA_CTL_BRANCH |
764 packet->data_size);
765 d->prg_cpu[idx]->end.address = cpu_to_le32(
766 pci_map_single(ohci->dev, packet->data,
767 packet->data_size, PCI_DMA_TODEVICE));
769 d->prg_cpu[idx]->end.branchAddress = 0;
770 d->prg_cpu[idx]->end.status = 0;
771 DBGMSG("Iso xmit context info: header[%08x %08x]\n"
772 " begin=%08x %08x %08x %08x\n"
773 " %08x %08x %08x %08x\n"
774 " end =%08x %08x %08x %08x",
775 d->prg_cpu[idx]->data[0], d->prg_cpu[idx]->data[1],
776 d->prg_cpu[idx]->begin.control,
777 d->prg_cpu[idx]->begin.address,
778 d->prg_cpu[idx]->begin.branchAddress,
779 d->prg_cpu[idx]->begin.status,
780 d->prg_cpu[idx]->data[0],
781 d->prg_cpu[idx]->data[1],
782 d->prg_cpu[idx]->data[2],
783 d->prg_cpu[idx]->data[3],
784 d->prg_cpu[idx]->end.control,
785 d->prg_cpu[idx]->end.address,
786 d->prg_cpu[idx]->end.branchAddress,
787 d->prg_cpu[idx]->end.status);
788 if (d->branchAddrPtr)
789 *(d->branchAddrPtr) = cpu_to_le32(d->prg_bus[idx] | 0x3);
790 d->branchAddrPtr = &(d->prg_cpu[idx]->end.branchAddress);
792 d->free_prgs--;
794 /* queue the packet in the appropriate context queue */
795 list_add_tail(&packet->driver_list, &d->fifo_list);
796 d->prg_ind = (d->prg_ind + 1) % d->num_desc;
800 * This function fills the FIFO with the (eventual) pending packets
801 * and runs or wakes up the DMA prg if necessary.
803 * The function MUST be called with the d->lock held.
805 static void dma_trm_flush(struct ti_ohci *ohci, struct dma_trm_ctx *d)
807 struct hpsb_packet *packet, *ptmp;
808 int idx = d->prg_ind;
809 int z = 0;
811 /* insert the packets into the dma fifo */
812 list_for_each_entry_safe(packet, ptmp, &d->pending_list, driver_list) {
813 if (!d->free_prgs)
814 break;
816 /* For the first packet only */
817 if (!z)
818 z = (packet->data_size) ? 3 : 2;
820 /* Insert the packet */
821 list_del_init(&packet->driver_list);
822 insert_packet(ohci, d, packet);
825 /* Nothing must have been done, either no free_prgs or no packets */
826 if (z == 0)
827 return;
829 /* Is the context running ? (should be unless it is
830 the first packet to be sent in this context) */
831 if (!(reg_read(ohci, d->ctrlSet) & 0x8000)) {
832 u32 nodeId = reg_read(ohci, OHCI1394_NodeID);
834 DBGMSG("Starting transmit DMA ctx=%d",d->ctx);
835 reg_write(ohci, d->cmdPtr, d->prg_bus[idx] | z);
837 /* Check that the node id is valid, and not 63 */
838 if (!(nodeId & 0x80000000) || (nodeId & 0x3f) == 63)
839 PRINT(KERN_ERR, "Running dma failed because Node ID is not valid");
840 else
841 reg_write(ohci, d->ctrlSet, 0x8000);
842 } else {
843 /* Wake up the dma context if necessary */
844 if (!(reg_read(ohci, d->ctrlSet) & 0x400))
845 DBGMSG("Waking transmit DMA ctx=%d",d->ctx);
847 /* do this always, to avoid race condition */
848 reg_write(ohci, d->ctrlSet, 0x1000);
851 return;
854 /* Transmission of an async or iso packet */
855 static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
857 struct ti_ohci *ohci = host->hostdata;
858 struct dma_trm_ctx *d;
859 unsigned long flags;
861 if (packet->data_size > ohci->max_packet_size) {
862 PRINT(KERN_ERR,
863 "Transmit packet size %Zd is too big",
864 packet->data_size);
865 return -EOVERFLOW;
868 if (packet->type == hpsb_raw)
869 d = &ohci->at_req_context;
870 else if ((packet->tcode & 0x02) && (packet->tcode != TCODE_ISO_DATA))
871 d = &ohci->at_resp_context;
872 else
873 d = &ohci->at_req_context;
875 spin_lock_irqsave(&d->lock,flags);
877 list_add_tail(&packet->driver_list, &d->pending_list);
879 dma_trm_flush(ohci, d);
881 spin_unlock_irqrestore(&d->lock,flags);
883 return 0;
886 static int ohci_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
888 struct ti_ohci *ohci = host->hostdata;
889 int retval = 0, phy_reg;
891 switch (cmd) {
892 case RESET_BUS:
893 switch (arg) {
894 case SHORT_RESET:
895 phy_reg = get_phy_reg(ohci, 5);
896 phy_reg |= 0x40;
897 set_phy_reg(ohci, 5, phy_reg); /* set ISBR */
898 break;
899 case LONG_RESET:
900 phy_reg = get_phy_reg(ohci, 1);
901 phy_reg |= 0x40;
902 set_phy_reg(ohci, 1, phy_reg); /* set IBR */
903 break;
904 case SHORT_RESET_NO_FORCE_ROOT:
905 phy_reg = get_phy_reg(ohci, 1);
906 if (phy_reg & 0x80) {
907 phy_reg &= ~0x80;
908 set_phy_reg(ohci, 1, phy_reg); /* clear RHB */
911 phy_reg = get_phy_reg(ohci, 5);
912 phy_reg |= 0x40;
913 set_phy_reg(ohci, 5, phy_reg); /* set ISBR */
914 break;
915 case LONG_RESET_NO_FORCE_ROOT:
916 phy_reg = get_phy_reg(ohci, 1);
917 phy_reg &= ~0x80;
918 phy_reg |= 0x40;
919 set_phy_reg(ohci, 1, phy_reg); /* clear RHB, set IBR */
920 break;
921 case SHORT_RESET_FORCE_ROOT:
922 phy_reg = get_phy_reg(ohci, 1);
923 if (!(phy_reg & 0x80)) {
924 phy_reg |= 0x80;
925 set_phy_reg(ohci, 1, phy_reg); /* set RHB */
928 phy_reg = get_phy_reg(ohci, 5);
929 phy_reg |= 0x40;
930 set_phy_reg(ohci, 5, phy_reg); /* set ISBR */
931 break;
932 case LONG_RESET_FORCE_ROOT:
933 phy_reg = get_phy_reg(ohci, 1);
934 phy_reg |= 0xc0;
935 set_phy_reg(ohci, 1, phy_reg); /* set RHB and IBR */
936 break;
937 default:
938 retval = -1;
940 break;
942 case GET_CYCLE_COUNTER:
943 retval = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
944 break;
946 case SET_CYCLE_COUNTER:
947 reg_write(ohci, OHCI1394_IsochronousCycleTimer, arg);
948 break;
950 case SET_BUS_ID:
951 PRINT(KERN_ERR, "devctl command SET_BUS_ID err");
952 break;
954 case ACT_CYCLE_MASTER:
955 if (arg) {
956 /* check if we are root and other nodes are present */
957 u32 nodeId = reg_read(ohci, OHCI1394_NodeID);
958 if ((nodeId & (1<<30)) && (nodeId & 0x3f)) {
960 * enable cycleTimer, cycleMaster
962 DBGMSG("Cycle master enabled");
963 reg_write(ohci, OHCI1394_LinkControlSet,
964 OHCI1394_LinkControl_CycleTimerEnable |
965 OHCI1394_LinkControl_CycleMaster);
967 } else {
968 /* disable cycleTimer, cycleMaster, cycleSource */
969 reg_write(ohci, OHCI1394_LinkControlClear,
970 OHCI1394_LinkControl_CycleTimerEnable |
971 OHCI1394_LinkControl_CycleMaster |
972 OHCI1394_LinkControl_CycleSource);
974 break;
976 case CANCEL_REQUESTS:
977 DBGMSG("Cancel request received");
978 dma_trm_reset(&ohci->at_req_context);
979 dma_trm_reset(&ohci->at_resp_context);
980 break;
982 default:
983 PRINT_G(KERN_ERR, "ohci_devctl cmd %d not implemented yet",
984 cmd);
985 break;
987 return retval;
990 /***********************************
991 * rawiso ISO reception *
992 ***********************************/
995 We use either buffer-fill or packet-per-buffer DMA mode. The DMA
996 buffer is split into "blocks" (regions described by one DMA
997 descriptor). Each block must be one page or less in size, and
998 must not cross a page boundary.
1000 There is one little wrinkle with buffer-fill mode: a packet that
1001 starts in the final block may wrap around into the first block. But
1002 the user API expects all packets to be contiguous. Our solution is
1003 to keep the very last page of the DMA buffer in reserve - if a
1004 packet spans the gap, we copy its tail into this page.
1007 struct ohci_iso_recv {
1008 struct ti_ohci *ohci;
1010 struct ohci1394_iso_tasklet task;
1011 int task_active;
1013 enum { BUFFER_FILL_MODE = 0,
1014 PACKET_PER_BUFFER_MODE = 1 } dma_mode;
1016 /* memory and PCI mapping for the DMA descriptors */
1017 struct dma_prog_region prog;
1018 struct dma_cmd *block; /* = (struct dma_cmd*) prog.virt */
1020 /* how many DMA blocks fit in the buffer */
1021 unsigned int nblocks;
1023 /* stride of DMA blocks */
1024 unsigned int buf_stride;
1026 /* number of blocks to batch between interrupts */
1027 int block_irq_interval;
1029 /* block that DMA will finish next */
1030 int block_dma;
1032 /* (buffer-fill only) block that the reader will release next */
1033 int block_reader;
1035 /* (buffer-fill only) bytes of buffer the reader has released,
1036 less than one block */
1037 int released_bytes;
1039 /* (buffer-fill only) buffer offset at which the next packet will appear */
1040 int dma_offset;
1042 /* OHCI DMA context control registers */
1043 u32 ContextControlSet;
1044 u32 ContextControlClear;
1045 u32 CommandPtr;
1046 u32 ContextMatch;
1049 static void ohci_iso_recv_task(unsigned long data);
1050 static void ohci_iso_recv_stop(struct hpsb_iso *iso);
1051 static void ohci_iso_recv_shutdown(struct hpsb_iso *iso);
1052 static int ohci_iso_recv_start(struct hpsb_iso *iso, int cycle, int tag_mask, int sync);
1053 static void ohci_iso_recv_program(struct hpsb_iso *iso);
1055 static int ohci_iso_recv_init(struct hpsb_iso *iso)
1057 struct ti_ohci *ohci = iso->host->hostdata;
1058 struct ohci_iso_recv *recv;
1059 int ctx;
1060 int ret = -ENOMEM;
1062 recv = kmalloc(sizeof(*recv), GFP_KERNEL);
1063 if (!recv)
1064 return -ENOMEM;
1066 iso->hostdata = recv;
1067 recv->ohci = ohci;
1068 recv->task_active = 0;
1069 dma_prog_region_init(&recv->prog);
1070 recv->block = NULL;
1072 /* use buffer-fill mode, unless irq_interval is 1
1073 (note: multichannel requires buffer-fill) */
1075 if (((iso->irq_interval == 1 && iso->dma_mode == HPSB_ISO_DMA_OLD_ABI) ||
1076 iso->dma_mode == HPSB_ISO_DMA_PACKET_PER_BUFFER) && iso->channel != -1) {
1077 recv->dma_mode = PACKET_PER_BUFFER_MODE;
1078 } else {
1079 recv->dma_mode = BUFFER_FILL_MODE;
1082 /* set nblocks, buf_stride, block_irq_interval */
1084 if (recv->dma_mode == BUFFER_FILL_MODE) {
1085 recv->buf_stride = PAGE_SIZE;
1087 /* one block per page of data in the DMA buffer, minus the final guard page */
1088 recv->nblocks = iso->buf_size/PAGE_SIZE - 1;
1089 if (recv->nblocks < 3) {
1090 DBGMSG("ohci_iso_recv_init: DMA buffer too small");
1091 goto err;
1094 /* iso->irq_interval is in packets - translate that to blocks */
1095 if (iso->irq_interval == 1)
1096 recv->block_irq_interval = 1;
1097 else
1098 recv->block_irq_interval = iso->irq_interval *
1099 ((recv->nblocks+1)/iso->buf_packets);
1100 if (recv->block_irq_interval*4 > recv->nblocks)
1101 recv->block_irq_interval = recv->nblocks/4;
1102 if (recv->block_irq_interval < 1)
1103 recv->block_irq_interval = 1;
1105 } else {
1106 int max_packet_size;
1108 recv->nblocks = iso->buf_packets;
1109 recv->block_irq_interval = iso->irq_interval;
1110 if (recv->block_irq_interval * 4 > iso->buf_packets)
1111 recv->block_irq_interval = iso->buf_packets / 4;
1112 if (recv->block_irq_interval < 1)
1113 recv->block_irq_interval = 1;
1115 /* choose a buffer stride */
1116 /* must be a power of 2, and <= PAGE_SIZE */
1118 max_packet_size = iso->buf_size / iso->buf_packets;
1120 for (recv->buf_stride = 8; recv->buf_stride < max_packet_size;
1121 recv->buf_stride *= 2);
1123 if (recv->buf_stride*iso->buf_packets > iso->buf_size ||
1124 recv->buf_stride > PAGE_SIZE) {
1125 /* this shouldn't happen, but anyway... */
1126 DBGMSG("ohci_iso_recv_init: problem choosing a buffer stride");
1127 goto err;
1131 recv->block_reader = 0;
1132 recv->released_bytes = 0;
1133 recv->block_dma = 0;
1134 recv->dma_offset = 0;
1136 /* size of DMA program = one descriptor per block */
1137 if (dma_prog_region_alloc(&recv->prog,
1138 sizeof(struct dma_cmd) * recv->nblocks,
1139 recv->ohci->dev))
1140 goto err;
1142 recv->block = (struct dma_cmd*) recv->prog.kvirt;
1144 ohci1394_init_iso_tasklet(&recv->task,
1145 iso->channel == -1 ? OHCI_ISO_MULTICHANNEL_RECEIVE :
1146 OHCI_ISO_RECEIVE,
1147 ohci_iso_recv_task, (unsigned long) iso);
1149 if (ohci1394_register_iso_tasklet(recv->ohci, &recv->task) < 0) {
1150 ret = -EBUSY;
1151 goto err;
1154 recv->task_active = 1;
1156 /* recv context registers are spaced 32 bytes apart */
1157 ctx = recv->task.context;
1158 recv->ContextControlSet = OHCI1394_IsoRcvContextControlSet + 32 * ctx;
1159 recv->ContextControlClear = OHCI1394_IsoRcvContextControlClear + 32 * ctx;
1160 recv->CommandPtr = OHCI1394_IsoRcvCommandPtr + 32 * ctx;
1161 recv->ContextMatch = OHCI1394_IsoRcvContextMatch + 32 * ctx;
1163 if (iso->channel == -1) {
1164 /* clear multi-channel selection mask */
1165 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskHiClear, 0xFFFFFFFF);
1166 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskLoClear, 0xFFFFFFFF);
1169 /* write the DMA program */
1170 ohci_iso_recv_program(iso);
1172 DBGMSG("ohci_iso_recv_init: %s mode, DMA buffer is %lu pages"
1173 " (%u bytes), using %u blocks, buf_stride %u, block_irq_interval %d",
1174 recv->dma_mode == BUFFER_FILL_MODE ?
1175 "buffer-fill" : "packet-per-buffer",
1176 iso->buf_size/PAGE_SIZE, iso->buf_size,
1177 recv->nblocks, recv->buf_stride, recv->block_irq_interval);
1179 return 0;
1181 err:
1182 ohci_iso_recv_shutdown(iso);
1183 return ret;
1186 static void ohci_iso_recv_stop(struct hpsb_iso *iso)
1188 struct ohci_iso_recv *recv = iso->hostdata;
1190 /* disable interrupts */
1191 reg_write(recv->ohci, OHCI1394_IsoRecvIntMaskClear, 1 << recv->task.context);
1193 /* halt DMA */
1194 ohci1394_stop_context(recv->ohci, recv->ContextControlClear, NULL);
1197 static void ohci_iso_recv_shutdown(struct hpsb_iso *iso)
1199 struct ohci_iso_recv *recv = iso->hostdata;
1201 if (recv->task_active) {
1202 ohci_iso_recv_stop(iso);
1203 ohci1394_unregister_iso_tasklet(recv->ohci, &recv->task);
1204 recv->task_active = 0;
1207 dma_prog_region_free(&recv->prog);
1208 kfree(recv);
1209 iso->hostdata = NULL;
1212 /* set up a "gapped" ring buffer DMA program */
1213 static void ohci_iso_recv_program(struct hpsb_iso *iso)
1215 struct ohci_iso_recv *recv = iso->hostdata;
1216 int blk;
1218 /* address of 'branch' field in previous DMA descriptor */
1219 u32 *prev_branch = NULL;
1221 for (blk = 0; blk < recv->nblocks; blk++) {
1222 u32 control;
1224 /* the DMA descriptor */
1225 struct dma_cmd *cmd = &recv->block[blk];
1227 /* offset of the DMA descriptor relative to the DMA prog buffer */
1228 unsigned long prog_offset = blk * sizeof(struct dma_cmd);
1230 /* offset of this packet's data within the DMA buffer */
1231 unsigned long buf_offset = blk * recv->buf_stride;
1233 if (recv->dma_mode == BUFFER_FILL_MODE) {
1234 control = 2 << 28; /* INPUT_MORE */
1235 } else {
1236 control = 3 << 28; /* INPUT_LAST */
1239 control |= 8 << 24; /* s = 1, update xferStatus and resCount */
1241 /* interrupt on last block, and at intervals */
1242 if (blk == recv->nblocks-1 || (blk % recv->block_irq_interval) == 0) {
1243 control |= 3 << 20; /* want interrupt */
1246 control |= 3 << 18; /* enable branch to address */
1247 control |= recv->buf_stride;
1249 cmd->control = cpu_to_le32(control);
1250 cmd->address = cpu_to_le32(dma_region_offset_to_bus(&iso->data_buf, buf_offset));
1251 cmd->branchAddress = 0; /* filled in on next loop */
1252 cmd->status = cpu_to_le32(recv->buf_stride);
1254 /* link the previous descriptor to this one */
1255 if (prev_branch) {
1256 *prev_branch = cpu_to_le32(dma_prog_region_offset_to_bus(&recv->prog, prog_offset) | 1);
1259 prev_branch = &cmd->branchAddress;
1262 /* the final descriptor's branch address and Z should be left at 0 */
1265 /* listen or unlisten to a specific channel (multi-channel mode only) */
1266 static void ohci_iso_recv_change_channel(struct hpsb_iso *iso, unsigned char channel, int listen)
1268 struct ohci_iso_recv *recv = iso->hostdata;
1269 int reg, i;
1271 if (channel < 32) {
1272 reg = listen ? OHCI1394_IRMultiChanMaskLoSet : OHCI1394_IRMultiChanMaskLoClear;
1273 i = channel;
1274 } else {
1275 reg = listen ? OHCI1394_IRMultiChanMaskHiSet : OHCI1394_IRMultiChanMaskHiClear;
1276 i = channel - 32;
1279 reg_write(recv->ohci, reg, (1 << i));
1281 /* issue a dummy read to force all PCI writes to be posted immediately */
1282 mb();
1283 reg_read(recv->ohci, OHCI1394_IsochronousCycleTimer);
1286 static void ohci_iso_recv_set_channel_mask(struct hpsb_iso *iso, u64 mask)
1288 struct ohci_iso_recv *recv = iso->hostdata;
1289 int i;
1291 for (i = 0; i < 64; i++) {
1292 if (mask & (1ULL << i)) {
1293 if (i < 32)
1294 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskLoSet, (1 << i));
1295 else
1296 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskHiSet, (1 << (i-32)));
1297 } else {
1298 if (i < 32)
1299 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskLoClear, (1 << i));
1300 else
1301 reg_write(recv->ohci, OHCI1394_IRMultiChanMaskHiClear, (1 << (i-32)));
1305 /* issue a dummy read to force all PCI writes to be posted immediately */
1306 mb();
1307 reg_read(recv->ohci, OHCI1394_IsochronousCycleTimer);
1310 static int ohci_iso_recv_start(struct hpsb_iso *iso, int cycle, int tag_mask, int sync)
1312 struct ohci_iso_recv *recv = iso->hostdata;
1313 struct ti_ohci *ohci = recv->ohci;
1314 u32 command, contextMatch;
1316 reg_write(recv->ohci, recv->ContextControlClear, 0xFFFFFFFF);
1317 wmb();
1319 /* always keep ISO headers */
1320 command = (1 << 30);
1322 if (recv->dma_mode == BUFFER_FILL_MODE)
1323 command |= (1 << 31);
1325 reg_write(recv->ohci, recv->ContextControlSet, command);
1327 /* match on specified tags */
1328 contextMatch = tag_mask << 28;
1330 if (iso->channel == -1) {
1331 /* enable multichannel reception */
1332 reg_write(recv->ohci, recv->ContextControlSet, (1 << 28));
1333 } else {
1334 /* listen on channel */
1335 contextMatch |= iso->channel;
1338 if (cycle != -1) {
1339 u32 seconds;
1341 /* enable cycleMatch */
1342 reg_write(recv->ohci, recv->ContextControlSet, (1 << 29));
1344 /* set starting cycle */
1345 cycle &= 0x1FFF;
1347 /* 'cycle' is only mod 8000, but we also need two 'seconds' bits -
1348 just snarf them from the current time */
1349 seconds = reg_read(recv->ohci, OHCI1394_IsochronousCycleTimer) >> 25;
1351 /* advance one second to give some extra time for DMA to start */
1352 seconds += 1;
1354 cycle |= (seconds & 3) << 13;
1356 contextMatch |= cycle << 12;
1359 if (sync != -1) {
1360 /* set sync flag on first DMA descriptor */
1361 struct dma_cmd *cmd = &recv->block[recv->block_dma];
1362 cmd->control |= cpu_to_le32(DMA_CTL_WAIT);
1364 /* match sync field */
1365 contextMatch |= (sync&0xf)<<8;
1368 reg_write(recv->ohci, recv->ContextMatch, contextMatch);
1370 /* address of first descriptor block */
1371 command = dma_prog_region_offset_to_bus(&recv->prog,
1372 recv->block_dma * sizeof(struct dma_cmd));
1373 command |= 1; /* Z=1 */
1375 reg_write(recv->ohci, recv->CommandPtr, command);
1377 /* enable interrupts */
1378 reg_write(recv->ohci, OHCI1394_IsoRecvIntMaskSet, 1 << recv->task.context);
1380 wmb();
1382 /* run */
1383 reg_write(recv->ohci, recv->ContextControlSet, 0x8000);
1385 /* issue a dummy read of the cycle timer register to force
1386 all PCI writes to be posted immediately */
1387 mb();
1388 reg_read(recv->ohci, OHCI1394_IsochronousCycleTimer);
1390 /* check RUN */
1391 if (!(reg_read(recv->ohci, recv->ContextControlSet) & 0x8000)) {
1392 PRINT(KERN_ERR,
1393 "Error starting IR DMA (ContextControl 0x%08x)\n",
1394 reg_read(recv->ohci, recv->ContextControlSet));
1395 return -1;
1398 return 0;
1401 static void ohci_iso_recv_release_block(struct ohci_iso_recv *recv, int block)
1403 /* re-use the DMA descriptor for the block */
1404 /* by linking the previous descriptor to it */
1406 int next_i = block;
1407 int prev_i = (next_i == 0) ? (recv->nblocks - 1) : (next_i - 1);
1409 struct dma_cmd *next = &recv->block[next_i];
1410 struct dma_cmd *prev = &recv->block[prev_i];
1412 /* ignore out-of-range requests */
1413 if ((block < 0) || (block > recv->nblocks))
1414 return;
1416 /* 'next' becomes the new end of the DMA chain,
1417 so disable branch and enable interrupt */
1418 next->branchAddress = 0;
1419 next->control |= cpu_to_le32(3 << 20);
1420 next->status = cpu_to_le32(recv->buf_stride);
1422 /* link prev to next */
1423 prev->branchAddress = cpu_to_le32(dma_prog_region_offset_to_bus(&recv->prog,
1424 sizeof(struct dma_cmd) * next_i)
1425 | 1); /* Z=1 */
1427 /* disable interrupt on previous DMA descriptor, except at intervals */
1428 if ((prev_i % recv->block_irq_interval) == 0) {
1429 prev->control |= cpu_to_le32(3 << 20); /* enable interrupt */
1430 } else {
1431 prev->control &= cpu_to_le32(~(3<<20)); /* disable interrupt */
1433 wmb();
1435 /* wake up DMA in case it fell asleep */
1436 reg_write(recv->ohci, recv->ContextControlSet, (1 << 12));
1439 static void ohci_iso_recv_bufferfill_release(struct ohci_iso_recv *recv,
1440 struct hpsb_iso_packet_info *info)
1442 /* release the memory where the packet was */
1443 recv->released_bytes += info->total_len;
1445 /* have we released enough memory for one block? */
1446 while (recv->released_bytes > recv->buf_stride) {
1447 ohci_iso_recv_release_block(recv, recv->block_reader);
1448 recv->block_reader = (recv->block_reader + 1) % recv->nblocks;
1449 recv->released_bytes -= recv->buf_stride;
1453 static inline void ohci_iso_recv_release(struct hpsb_iso *iso, struct hpsb_iso_packet_info *info)
1455 struct ohci_iso_recv *recv = iso->hostdata;
1456 if (recv->dma_mode == BUFFER_FILL_MODE) {
1457 ohci_iso_recv_bufferfill_release(recv, info);
1458 } else {
1459 ohci_iso_recv_release_block(recv, info - iso->infos);
1463 /* parse all packets from blocks that have been fully received */
1464 static void ohci_iso_recv_bufferfill_parse(struct hpsb_iso *iso, struct ohci_iso_recv *recv)
1466 int wake = 0;
1467 int runaway = 0;
1468 struct ti_ohci *ohci = recv->ohci;
1470 while (1) {
1471 /* we expect the next parsable packet to begin at recv->dma_offset */
1472 /* note: packet layout is as shown in section 10.6.1.1 of the OHCI spec */
1474 unsigned int offset;
1475 unsigned short len, cycle, total_len;
1476 unsigned char channel, tag, sy;
1478 unsigned char *p = iso->data_buf.kvirt;
1480 unsigned int this_block = recv->dma_offset/recv->buf_stride;
1482 /* don't loop indefinitely */
1483 if (runaway++ > 100000) {
1484 atomic_inc(&iso->overflows);
1485 PRINT(KERN_ERR,
1486 "IR DMA error - Runaway during buffer parsing!\n");
1487 break;
1490 /* stop parsing once we arrive at block_dma (i.e. don't get ahead of DMA) */
1491 if (this_block == recv->block_dma)
1492 break;
1494 wake = 1;
1496 /* parse data length, tag, channel, and sy */
1498 /* note: we keep our own local copies of 'len' and 'offset'
1499 so the user can't mess with them by poking in the mmap area */
1501 len = p[recv->dma_offset+2] | (p[recv->dma_offset+3] << 8);
1503 if (len > 4096) {
1504 PRINT(KERN_ERR,
1505 "IR DMA error - bogus 'len' value %u\n", len);
1508 channel = p[recv->dma_offset+1] & 0x3F;
1509 tag = p[recv->dma_offset+1] >> 6;
1510 sy = p[recv->dma_offset+0] & 0xF;
1512 /* advance to data payload */
1513 recv->dma_offset += 4;
1515 /* check for wrap-around */
1516 if (recv->dma_offset >= recv->buf_stride*recv->nblocks) {
1517 recv->dma_offset -= recv->buf_stride*recv->nblocks;
1520 /* dma_offset now points to the first byte of the data payload */
1521 offset = recv->dma_offset;
1523 /* advance to xferStatus/timeStamp */
1524 recv->dma_offset += len;
1526 total_len = len + 8; /* 8 bytes header+trailer in OHCI packet */
1527 /* payload is padded to 4 bytes */
1528 if (len % 4) {
1529 recv->dma_offset += 4 - (len%4);
1530 total_len += 4 - (len%4);
1533 /* check for wrap-around */
1534 if (recv->dma_offset >= recv->buf_stride*recv->nblocks) {
1535 /* uh oh, the packet data wraps from the last
1536 to the first DMA block - make the packet
1537 contiguous by copying its "tail" into the
1538 guard page */
1540 int guard_off = recv->buf_stride*recv->nblocks;
1541 int tail_len = len - (guard_off - offset);
1543 if (tail_len > 0 && tail_len < recv->buf_stride) {
1544 memcpy(iso->data_buf.kvirt + guard_off,
1545 iso->data_buf.kvirt,
1546 tail_len);
1549 recv->dma_offset -= recv->buf_stride*recv->nblocks;
1552 /* parse timestamp */
1553 cycle = p[recv->dma_offset+0] | (p[recv->dma_offset+1]<<8);
1554 cycle &= 0x1FFF;
1556 /* advance to next packet */
1557 recv->dma_offset += 4;
1559 /* check for wrap-around */
1560 if (recv->dma_offset >= recv->buf_stride*recv->nblocks) {
1561 recv->dma_offset -= recv->buf_stride*recv->nblocks;
1564 hpsb_iso_packet_received(iso, offset, len, total_len, cycle, channel, tag, sy);
1567 if (wake)
1568 hpsb_iso_wake(iso);
1571 static void ohci_iso_recv_bufferfill_task(struct hpsb_iso *iso, struct ohci_iso_recv *recv)
1573 int loop;
1574 struct ti_ohci *ohci = recv->ohci;
1576 /* loop over all blocks */
1577 for (loop = 0; loop < recv->nblocks; loop++) {
1579 /* check block_dma to see if it's done */
1580 struct dma_cmd *im = &recv->block[recv->block_dma];
1582 /* check the DMA descriptor for new writes to xferStatus */
1583 u16 xferstatus = le32_to_cpu(im->status) >> 16;
1585 /* rescount is the number of bytes *remaining to be written* in the block */
1586 u16 rescount = le32_to_cpu(im->status) & 0xFFFF;
1588 unsigned char event = xferstatus & 0x1F;
1590 if (!event) {
1591 /* nothing has happened to this block yet */
1592 break;
1595 if (event != 0x11) {
1596 atomic_inc(&iso->overflows);
1597 PRINT(KERN_ERR,
1598 "IR DMA error - OHCI error code 0x%02x\n", event);
1601 if (rescount != 0) {
1602 /* the card is still writing to this block;
1603 we can't touch it until it's done */
1604 break;
1607 /* OK, the block is finished... */
1609 /* sync our view of the block */
1610 dma_region_sync_for_cpu(&iso->data_buf, recv->block_dma*recv->buf_stride, recv->buf_stride);
1612 /* reset the DMA descriptor */
1613 im->status = recv->buf_stride;
1615 /* advance block_dma */
1616 recv->block_dma = (recv->block_dma + 1) % recv->nblocks;
1618 if ((recv->block_dma+1) % recv->nblocks == recv->block_reader) {
1619 atomic_inc(&iso->overflows);
1620 DBGMSG("ISO reception overflow - "
1621 "ran out of DMA blocks");
1625 /* parse any packets that have arrived */
1626 ohci_iso_recv_bufferfill_parse(iso, recv);
1629 static void ohci_iso_recv_packetperbuf_task(struct hpsb_iso *iso, struct ohci_iso_recv *recv)
1631 int count;
1632 int wake = 0;
1633 struct ti_ohci *ohci = recv->ohci;
1635 /* loop over the entire buffer */
1636 for (count = 0; count < recv->nblocks; count++) {
1637 u32 packet_len = 0;
1639 /* pointer to the DMA descriptor */
1640 struct dma_cmd *il = ((struct dma_cmd*) recv->prog.kvirt) + iso->pkt_dma;
1642 /* check the DMA descriptor for new writes to xferStatus */
1643 u16 xferstatus = le32_to_cpu(il->status) >> 16;
1644 u16 rescount = le32_to_cpu(il->status) & 0xFFFF;
1646 unsigned char event = xferstatus & 0x1F;
1648 if (!event) {
1649 /* this packet hasn't come in yet; we are done for now */
1650 goto out;
1653 if (event == 0x11) {
1654 /* packet received successfully! */
1656 /* rescount is the number of bytes *remaining* in the packet buffer,
1657 after the packet was written */
1658 packet_len = recv->buf_stride - rescount;
1660 } else if (event == 0x02) {
1661 PRINT(KERN_ERR, "IR DMA error - packet too long for buffer\n");
1662 } else if (event) {
1663 PRINT(KERN_ERR, "IR DMA error - OHCI error code 0x%02x\n", event);
1666 /* sync our view of the buffer */
1667 dma_region_sync_for_cpu(&iso->data_buf, iso->pkt_dma * recv->buf_stride, recv->buf_stride);
1669 /* record the per-packet info */
1671 /* iso header is 8 bytes ahead of the data payload */
1672 unsigned char *hdr;
1674 unsigned int offset;
1675 unsigned short cycle;
1676 unsigned char channel, tag, sy;
1678 offset = iso->pkt_dma * recv->buf_stride;
1679 hdr = iso->data_buf.kvirt + offset;
1681 /* skip iso header */
1682 offset += 8;
1683 packet_len -= 8;
1685 cycle = (hdr[0] | (hdr[1] << 8)) & 0x1FFF;
1686 channel = hdr[5] & 0x3F;
1687 tag = hdr[5] >> 6;
1688 sy = hdr[4] & 0xF;
1690 hpsb_iso_packet_received(iso, offset, packet_len,
1691 recv->buf_stride, cycle, channel, tag, sy);
1694 /* reset the DMA descriptor */
1695 il->status = recv->buf_stride;
1697 wake = 1;
1698 recv->block_dma = iso->pkt_dma;
1701 out:
1702 if (wake)
1703 hpsb_iso_wake(iso);
1706 static void ohci_iso_recv_task(unsigned long data)
1708 struct hpsb_iso *iso = (struct hpsb_iso*) data;
1709 struct ohci_iso_recv *recv = iso->hostdata;
1711 if (recv->dma_mode == BUFFER_FILL_MODE)
1712 ohci_iso_recv_bufferfill_task(iso, recv);
1713 else
1714 ohci_iso_recv_packetperbuf_task(iso, recv);
1717 /***********************************
1718 * rawiso ISO transmission *
1719 ***********************************/
1721 struct ohci_iso_xmit {
1722 struct ti_ohci *ohci;
1723 struct dma_prog_region prog;
1724 struct ohci1394_iso_tasklet task;
1725 int task_active;
1727 u32 ContextControlSet;
1728 u32 ContextControlClear;
1729 u32 CommandPtr;
1732 /* transmission DMA program:
1733 one OUTPUT_MORE_IMMEDIATE for the IT header
1734 one OUTPUT_LAST for the buffer data */
1736 struct iso_xmit_cmd {
1737 struct dma_cmd output_more_immediate;
1738 u8 iso_hdr[8];
1739 u32 unused[2];
1740 struct dma_cmd output_last;
1743 static int ohci_iso_xmit_init(struct hpsb_iso *iso);
1744 static int ohci_iso_xmit_start(struct hpsb_iso *iso, int cycle);
1745 static void ohci_iso_xmit_shutdown(struct hpsb_iso *iso);
1746 static void ohci_iso_xmit_task(unsigned long data);
1748 static int ohci_iso_xmit_init(struct hpsb_iso *iso)
1750 struct ohci_iso_xmit *xmit;
1751 unsigned int prog_size;
1752 int ctx;
1753 int ret = -ENOMEM;
1755 xmit = kmalloc(sizeof(*xmit), GFP_KERNEL);
1756 if (!xmit)
1757 return -ENOMEM;
1759 iso->hostdata = xmit;
1760 xmit->ohci = iso->host->hostdata;
1761 xmit->task_active = 0;
1763 dma_prog_region_init(&xmit->prog);
1765 prog_size = sizeof(struct iso_xmit_cmd) * iso->buf_packets;
1767 if (dma_prog_region_alloc(&xmit->prog, prog_size, xmit->ohci->dev))
1768 goto err;
1770 ohci1394_init_iso_tasklet(&xmit->task, OHCI_ISO_TRANSMIT,
1771 ohci_iso_xmit_task, (unsigned long) iso);
1773 if (ohci1394_register_iso_tasklet(xmit->ohci, &xmit->task) < 0) {
1774 ret = -EBUSY;
1775 goto err;
1778 xmit->task_active = 1;
1780 /* xmit context registers are spaced 16 bytes apart */
1781 ctx = xmit->task.context;
1782 xmit->ContextControlSet = OHCI1394_IsoXmitContextControlSet + 16 * ctx;
1783 xmit->ContextControlClear = OHCI1394_IsoXmitContextControlClear + 16 * ctx;
1784 xmit->CommandPtr = OHCI1394_IsoXmitCommandPtr + 16 * ctx;
1786 return 0;
1788 err:
1789 ohci_iso_xmit_shutdown(iso);
1790 return ret;
1793 static void ohci_iso_xmit_stop(struct hpsb_iso *iso)
1795 struct ohci_iso_xmit *xmit = iso->hostdata;
1796 struct ti_ohci *ohci = xmit->ohci;
1798 /* disable interrupts */
1799 reg_write(xmit->ohci, OHCI1394_IsoXmitIntMaskClear, 1 << xmit->task.context);
1801 /* halt DMA */
1802 if (ohci1394_stop_context(xmit->ohci, xmit->ContextControlClear, NULL)) {
1803 /* XXX the DMA context will lock up if you try to send too much data! */
1804 PRINT(KERN_ERR,
1805 "you probably exceeded the OHCI card's bandwidth limit - "
1806 "reload the module and reduce xmit bandwidth");
1810 static void ohci_iso_xmit_shutdown(struct hpsb_iso *iso)
1812 struct ohci_iso_xmit *xmit = iso->hostdata;
1814 if (xmit->task_active) {
1815 ohci_iso_xmit_stop(iso);
1816 ohci1394_unregister_iso_tasklet(xmit->ohci, &xmit->task);
1817 xmit->task_active = 0;
1820 dma_prog_region_free(&xmit->prog);
1821 kfree(xmit);
1822 iso->hostdata = NULL;
1825 static void ohci_iso_xmit_task(unsigned long data)
1827 struct hpsb_iso *iso = (struct hpsb_iso*) data;
1828 struct ohci_iso_xmit *xmit = iso->hostdata;
1829 struct ti_ohci *ohci = xmit->ohci;
1830 int wake = 0;
1831 int count;
1833 /* check the whole buffer if necessary, starting at pkt_dma */
1834 for (count = 0; count < iso->buf_packets; count++) {
1835 int cycle;
1837 /* DMA descriptor */
1838 struct iso_xmit_cmd *cmd = dma_region_i(&xmit->prog, struct iso_xmit_cmd, iso->pkt_dma);
1840 /* check for new writes to xferStatus */
1841 u16 xferstatus = le32_to_cpu(cmd->output_last.status) >> 16;
1842 u8 event = xferstatus & 0x1F;
1844 if (!event) {
1845 /* packet hasn't been sent yet; we are done for now */
1846 break;
1849 if (event != 0x11)
1850 PRINT(KERN_ERR,
1851 "IT DMA error - OHCI error code 0x%02x\n", event);
1853 /* at least one packet went out, so wake up the writer */
1854 wake = 1;
1856 /* parse cycle */
1857 cycle = le32_to_cpu(cmd->output_last.status) & 0x1FFF;
1859 /* tell the subsystem the packet has gone out */
1860 hpsb_iso_packet_sent(iso, cycle, event != 0x11);
1862 /* reset the DMA descriptor for next time */
1863 cmd->output_last.status = 0;
1866 if (wake)
1867 hpsb_iso_wake(iso);
1870 static int ohci_iso_xmit_queue(struct hpsb_iso *iso, struct hpsb_iso_packet_info *info)
1872 struct ohci_iso_xmit *xmit = iso->hostdata;
1873 struct ti_ohci *ohci = xmit->ohci;
1875 int next_i, prev_i;
1876 struct iso_xmit_cmd *next, *prev;
1878 unsigned int offset;
1879 unsigned short len;
1880 unsigned char tag, sy;
1882 /* check that the packet doesn't cross a page boundary
1883 (we could allow this if we added OUTPUT_MORE descriptor support) */
1884 if (cross_bound(info->offset, info->len)) {
1885 PRINT(KERN_ERR,
1886 "rawiso xmit: packet %u crosses a page boundary",
1887 iso->first_packet);
1888 return -EINVAL;
1891 offset = info->offset;
1892 len = info->len;
1893 tag = info->tag;
1894 sy = info->sy;
1896 /* sync up the card's view of the buffer */
1897 dma_region_sync_for_device(&iso->data_buf, offset, len);
1899 /* append first_packet to the DMA chain */
1900 /* by linking the previous descriptor to it */
1901 /* (next will become the new end of the DMA chain) */
1903 next_i = iso->first_packet;
1904 prev_i = (next_i == 0) ? (iso->buf_packets - 1) : (next_i - 1);
1906 next = dma_region_i(&xmit->prog, struct iso_xmit_cmd, next_i);
1907 prev = dma_region_i(&xmit->prog, struct iso_xmit_cmd, prev_i);
1909 /* set up the OUTPUT_MORE_IMMEDIATE descriptor */
1910 memset(next, 0, sizeof(struct iso_xmit_cmd));
1911 next->output_more_immediate.control = cpu_to_le32(0x02000008);
1913 /* ISO packet header is embedded in the OUTPUT_MORE_IMMEDIATE */
1915 /* tcode = 0xA, and sy */
1916 next->iso_hdr[0] = 0xA0 | (sy & 0xF);
1918 /* tag and channel number */
1919 next->iso_hdr[1] = (tag << 6) | (iso->channel & 0x3F);
1921 /* transmission speed */
1922 next->iso_hdr[2] = iso->speed & 0x7;
1924 /* payload size */
1925 next->iso_hdr[6] = len & 0xFF;
1926 next->iso_hdr[7] = len >> 8;
1928 /* set up the OUTPUT_LAST */
1929 next->output_last.control = cpu_to_le32(1 << 28);
1930 next->output_last.control |= cpu_to_le32(1 << 27); /* update timeStamp */
1931 next->output_last.control |= cpu_to_le32(3 << 20); /* want interrupt */
1932 next->output_last.control |= cpu_to_le32(3 << 18); /* enable branch */
1933 next->output_last.control |= cpu_to_le32(len);
1935 /* payload bus address */
1936 next->output_last.address = cpu_to_le32(dma_region_offset_to_bus(&iso->data_buf, offset));
1938 /* leave branchAddress at zero for now */
1940 /* re-write the previous DMA descriptor to chain to this one */
1942 /* set prev branch address to point to next (Z=3) */
1943 prev->output_last.branchAddress = cpu_to_le32(
1944 dma_prog_region_offset_to_bus(&xmit->prog, sizeof(struct iso_xmit_cmd) * next_i) | 3);
1946 /* disable interrupt, unless required by the IRQ interval */
1947 if (prev_i % iso->irq_interval) {
1948 prev->output_last.control &= cpu_to_le32(~(3 << 20)); /* no interrupt */
1949 } else {
1950 prev->output_last.control |= cpu_to_le32(3 << 20); /* enable interrupt */
1953 wmb();
1955 /* wake DMA in case it is sleeping */
1956 reg_write(xmit->ohci, xmit->ContextControlSet, 1 << 12);
1958 /* issue a dummy read of the cycle timer to force all PCI
1959 writes to be posted immediately */
1960 mb();
1961 reg_read(xmit->ohci, OHCI1394_IsochronousCycleTimer);
1963 return 0;
1966 static int ohci_iso_xmit_start(struct hpsb_iso *iso, int cycle)
1968 struct ohci_iso_xmit *xmit = iso->hostdata;
1969 struct ti_ohci *ohci = xmit->ohci;
1971 /* clear out the control register */
1972 reg_write(xmit->ohci, xmit->ContextControlClear, 0xFFFFFFFF);
1973 wmb();
1975 /* address and length of first descriptor block (Z=3) */
1976 reg_write(xmit->ohci, xmit->CommandPtr,
1977 dma_prog_region_offset_to_bus(&xmit->prog, iso->pkt_dma * sizeof(struct iso_xmit_cmd)) | 3);
1979 /* cycle match */
1980 if (cycle != -1) {
1981 u32 start = cycle & 0x1FFF;
1983 /* 'cycle' is only mod 8000, but we also need two 'seconds' bits -
1984 just snarf them from the current time */
1985 u32 seconds = reg_read(xmit->ohci, OHCI1394_IsochronousCycleTimer) >> 25;
1987 /* advance one second to give some extra time for DMA to start */
1988 seconds += 1;
1990 start |= (seconds & 3) << 13;
1992 reg_write(xmit->ohci, xmit->ContextControlSet, 0x80000000 | (start << 16));
1995 /* enable interrupts */
1996 reg_write(xmit->ohci, OHCI1394_IsoXmitIntMaskSet, 1 << xmit->task.context);
1998 /* run */
1999 reg_write(xmit->ohci, xmit->ContextControlSet, 0x8000);
2000 mb();
2002 /* wait 100 usec to give the card time to go active */
2003 udelay(100);
2005 /* check the RUN bit */
2006 if (!(reg_read(xmit->ohci, xmit->ContextControlSet) & 0x8000)) {
2007 PRINT(KERN_ERR, "Error starting IT DMA (ContextControl 0x%08x)\n",
2008 reg_read(xmit->ohci, xmit->ContextControlSet));
2009 return -1;
2012 return 0;
2015 static int ohci_isoctl(struct hpsb_iso *iso, enum isoctl_cmd cmd, unsigned long arg)
2018 switch(cmd) {
2019 case XMIT_INIT:
2020 return ohci_iso_xmit_init(iso);
2021 case XMIT_START:
2022 return ohci_iso_xmit_start(iso, arg);
2023 case XMIT_STOP:
2024 ohci_iso_xmit_stop(iso);
2025 return 0;
2026 case XMIT_QUEUE:
2027 return ohci_iso_xmit_queue(iso, (struct hpsb_iso_packet_info*) arg);
2028 case XMIT_SHUTDOWN:
2029 ohci_iso_xmit_shutdown(iso);
2030 return 0;
2032 case RECV_INIT:
2033 return ohci_iso_recv_init(iso);
2034 case RECV_START: {
2035 int *args = (int*) arg;
2036 return ohci_iso_recv_start(iso, args[0], args[1], args[2]);
2038 case RECV_STOP:
2039 ohci_iso_recv_stop(iso);
2040 return 0;
2041 case RECV_RELEASE:
2042 ohci_iso_recv_release(iso, (struct hpsb_iso_packet_info*) arg);
2043 return 0;
2044 case RECV_FLUSH:
2045 ohci_iso_recv_task((unsigned long) iso);
2046 return 0;
2047 case RECV_SHUTDOWN:
2048 ohci_iso_recv_shutdown(iso);
2049 return 0;
2050 case RECV_LISTEN_CHANNEL:
2051 ohci_iso_recv_change_channel(iso, arg, 1);
2052 return 0;
2053 case RECV_UNLISTEN_CHANNEL:
2054 ohci_iso_recv_change_channel(iso, arg, 0);
2055 return 0;
2056 case RECV_SET_CHANNEL_MASK:
2057 ohci_iso_recv_set_channel_mask(iso, *((u64*) arg));
2058 return 0;
2060 default:
2061 PRINT_G(KERN_ERR, "ohci_isoctl cmd %d not implemented yet",
2062 cmd);
2063 break;
2065 return -EINVAL;
2068 /***************************************
2069 * IEEE-1394 functionality section END *
2070 ***************************************/
2073 /********************************************************
2074 * Global stuff (interrupt handler, init/shutdown code) *
2075 ********************************************************/
2077 static void dma_trm_reset(struct dma_trm_ctx *d)
2079 unsigned long flags;
2080 LIST_HEAD(packet_list);
2081 struct ti_ohci *ohci = d->ohci;
2082 struct hpsb_packet *packet, *ptmp;
2084 ohci1394_stop_context(ohci, d->ctrlClear, NULL);
2086 /* Lock the context, reset it and release it. Move the packets
2087 * that were pending in the context to packet_list and free
2088 * them after releasing the lock. */
2090 spin_lock_irqsave(&d->lock, flags);
2092 list_splice(&d->fifo_list, &packet_list);
2093 list_splice(&d->pending_list, &packet_list);
2094 INIT_LIST_HEAD(&d->fifo_list);
2095 INIT_LIST_HEAD(&d->pending_list);
2097 d->branchAddrPtr = NULL;
2098 d->sent_ind = d->prg_ind;
2099 d->free_prgs = d->num_desc;
2101 spin_unlock_irqrestore(&d->lock, flags);
2103 if (list_empty(&packet_list))
2104 return;
2106 PRINT(KERN_INFO, "AT dma reset ctx=%d, aborting transmission", d->ctx);
2108 /* Now process subsystem callbacks for the packets from this
2109 * context. */
2110 list_for_each_entry_safe(packet, ptmp, &packet_list, driver_list) {
2111 list_del_init(&packet->driver_list);
2112 hpsb_packet_sent(ohci->host, packet, ACKX_ABORTED);
2116 static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci,
2117 quadlet_t rx_event,
2118 quadlet_t tx_event)
2120 struct ohci1394_iso_tasklet *t;
2121 unsigned long mask;
2122 unsigned long flags;
2124 spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
2126 list_for_each_entry(t, &ohci->iso_tasklet_list, link) {
2127 mask = 1 << t->context;
2129 if (t->type == OHCI_ISO_TRANSMIT) {
2130 if (tx_event & mask)
2131 tasklet_schedule(&t->tasklet);
2132 } else {
2133 /* OHCI_ISO_RECEIVE or OHCI_ISO_MULTICHANNEL_RECEIVE */
2134 if (rx_event & mask)
2135 tasklet_schedule(&t->tasklet);
2139 spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
2142 static irqreturn_t ohci_irq_handler(int irq, void *dev_id)
2144 quadlet_t event, node_id;
2145 struct ti_ohci *ohci = (struct ti_ohci *)dev_id;
2146 struct hpsb_host *host = ohci->host;
2147 int phyid = -1, isroot = 0;
2148 unsigned long flags;
2150 /* Read and clear the interrupt event register. Don't clear
2151 * the busReset event, though. This is done when we get the
2152 * selfIDComplete interrupt. */
2153 spin_lock_irqsave(&ohci->event_lock, flags);
2154 event = reg_read(ohci, OHCI1394_IntEventClear);
2155 reg_write(ohci, OHCI1394_IntEventClear, event & ~OHCI1394_busReset);
2156 spin_unlock_irqrestore(&ohci->event_lock, flags);
2158 if (!event)
2159 return IRQ_NONE;
2161 /* If event is ~(u32)0 cardbus card was ejected. In this case
2162 * we just return, and clean up in the ohci1394_pci_remove
2163 * function. */
2164 if (event == ~(u32) 0) {
2165 DBGMSG("Device removed.");
2166 return IRQ_NONE;
2169 DBGMSG("IntEvent: %08x", event);
2171 if (event & OHCI1394_unrecoverableError) {
2172 int ctx;
2173 PRINT(KERN_ERR, "Unrecoverable error!");
2175 if (reg_read(ohci, OHCI1394_AsReqTrContextControlSet) & 0x800)
2176 PRINT(KERN_ERR, "Async Req Tx Context died: "
2177 "ctrl[%08x] cmdptr[%08x]",
2178 reg_read(ohci, OHCI1394_AsReqTrContextControlSet),
2179 reg_read(ohci, OHCI1394_AsReqTrCommandPtr));
2181 if (reg_read(ohci, OHCI1394_AsRspTrContextControlSet) & 0x800)
2182 PRINT(KERN_ERR, "Async Rsp Tx Context died: "
2183 "ctrl[%08x] cmdptr[%08x]",
2184 reg_read(ohci, OHCI1394_AsRspTrContextControlSet),
2185 reg_read(ohci, OHCI1394_AsRspTrCommandPtr));
2187 if (reg_read(ohci, OHCI1394_AsReqRcvContextControlSet) & 0x800)
2188 PRINT(KERN_ERR, "Async Req Rcv Context died: "
2189 "ctrl[%08x] cmdptr[%08x]",
2190 reg_read(ohci, OHCI1394_AsReqRcvContextControlSet),
2191 reg_read(ohci, OHCI1394_AsReqRcvCommandPtr));
2193 if (reg_read(ohci, OHCI1394_AsRspRcvContextControlSet) & 0x800)
2194 PRINT(KERN_ERR, "Async Rsp Rcv Context died: "
2195 "ctrl[%08x] cmdptr[%08x]",
2196 reg_read(ohci, OHCI1394_AsRspRcvContextControlSet),
2197 reg_read(ohci, OHCI1394_AsRspRcvCommandPtr));
2199 for (ctx = 0; ctx < ohci->nb_iso_xmit_ctx; ctx++) {
2200 if (reg_read(ohci, OHCI1394_IsoXmitContextControlSet + (16 * ctx)) & 0x800)
2201 PRINT(KERN_ERR, "Iso Xmit %d Context died: "
2202 "ctrl[%08x] cmdptr[%08x]", ctx,
2203 reg_read(ohci, OHCI1394_IsoXmitContextControlSet + (16 * ctx)),
2204 reg_read(ohci, OHCI1394_IsoXmitCommandPtr + (16 * ctx)));
2207 for (ctx = 0; ctx < ohci->nb_iso_rcv_ctx; ctx++) {
2208 if (reg_read(ohci, OHCI1394_IsoRcvContextControlSet + (32 * ctx)) & 0x800)
2209 PRINT(KERN_ERR, "Iso Recv %d Context died: "
2210 "ctrl[%08x] cmdptr[%08x] match[%08x]", ctx,
2211 reg_read(ohci, OHCI1394_IsoRcvContextControlSet + (32 * ctx)),
2212 reg_read(ohci, OHCI1394_IsoRcvCommandPtr + (32 * ctx)),
2213 reg_read(ohci, OHCI1394_IsoRcvContextMatch + (32 * ctx)));
2216 event &= ~OHCI1394_unrecoverableError;
2218 if (event & OHCI1394_postedWriteErr) {
2219 PRINT(KERN_ERR, "physical posted write error");
2220 /* no recovery strategy yet, had to involve protocol drivers */
2221 event &= ~OHCI1394_postedWriteErr;
2223 if (event & OHCI1394_cycleTooLong) {
2224 if(printk_ratelimit())
2225 PRINT(KERN_WARNING, "isochronous cycle too long");
2226 else
2227 DBGMSG("OHCI1394_cycleTooLong");
2228 reg_write(ohci, OHCI1394_LinkControlSet,
2229 OHCI1394_LinkControl_CycleMaster);
2230 event &= ~OHCI1394_cycleTooLong;
2232 if (event & OHCI1394_cycleInconsistent) {
2233 /* We subscribe to the cycleInconsistent event only to
2234 * clear the corresponding event bit... otherwise,
2235 * isochronous cycleMatch DMA won't work. */
2236 DBGMSG("OHCI1394_cycleInconsistent");
2237 event &= ~OHCI1394_cycleInconsistent;
2239 if (event & OHCI1394_busReset) {
2240 /* The busReset event bit can't be cleared during the
2241 * selfID phase, so we disable busReset interrupts, to
2242 * avoid burying the cpu in interrupt requests. */
2243 spin_lock_irqsave(&ohci->event_lock, flags);
2244 reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset);
2246 if (ohci->check_busreset) {
2247 int loop_count = 0;
2249 udelay(10);
2251 while (reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) {
2252 reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
2254 spin_unlock_irqrestore(&ohci->event_lock, flags);
2255 udelay(10);
2256 spin_lock_irqsave(&ohci->event_lock, flags);
2258 /* The loop counter check is to prevent the driver
2259 * from remaining in this state forever. For the
2260 * initial bus reset, the loop continues for ever
2261 * and the system hangs, until some device is plugged-in
2262 * or out manually into a port! The forced reset seems
2263 * to solve this problem. This mainly effects nForce2. */
2264 if (loop_count > 10000) {
2265 ohci_devctl(host, RESET_BUS, LONG_RESET);
2266 DBGMSG("Detected bus-reset loop. Forced a bus reset!");
2267 loop_count = 0;
2270 loop_count++;
2273 spin_unlock_irqrestore(&ohci->event_lock, flags);
2274 if (!host->in_bus_reset) {
2275 DBGMSG("irq_handler: Bus reset requested");
2277 /* Subsystem call */
2278 hpsb_bus_reset(ohci->host);
2280 event &= ~OHCI1394_busReset;
2282 if (event & OHCI1394_reqTxComplete) {
2283 struct dma_trm_ctx *d = &ohci->at_req_context;
2284 DBGMSG("Got reqTxComplete interrupt "
2285 "status=0x%08X", reg_read(ohci, d->ctrlSet));
2286 if (reg_read(ohci, d->ctrlSet) & 0x800)
2287 ohci1394_stop_context(ohci, d->ctrlClear,
2288 "reqTxComplete");
2289 else
2290 dma_trm_tasklet((unsigned long)d);
2291 //tasklet_schedule(&d->task);
2292 event &= ~OHCI1394_reqTxComplete;
2294 if (event & OHCI1394_respTxComplete) {
2295 struct dma_trm_ctx *d = &ohci->at_resp_context;
2296 DBGMSG("Got respTxComplete interrupt "
2297 "status=0x%08X", reg_read(ohci, d->ctrlSet));
2298 if (reg_read(ohci, d->ctrlSet) & 0x800)
2299 ohci1394_stop_context(ohci, d->ctrlClear,
2300 "respTxComplete");
2301 else
2302 tasklet_schedule(&d->task);
2303 event &= ~OHCI1394_respTxComplete;
2305 if (event & OHCI1394_RQPkt) {
2306 struct dma_rcv_ctx *d = &ohci->ar_req_context;
2307 DBGMSG("Got RQPkt interrupt status=0x%08X",
2308 reg_read(ohci, d->ctrlSet));
2309 if (reg_read(ohci, d->ctrlSet) & 0x800)
2310 ohci1394_stop_context(ohci, d->ctrlClear, "RQPkt");
2311 else
2312 tasklet_schedule(&d->task);
2313 event &= ~OHCI1394_RQPkt;
2315 if (event & OHCI1394_RSPkt) {
2316 struct dma_rcv_ctx *d = &ohci->ar_resp_context;
2317 DBGMSG("Got RSPkt interrupt status=0x%08X",
2318 reg_read(ohci, d->ctrlSet));
2319 if (reg_read(ohci, d->ctrlSet) & 0x800)
2320 ohci1394_stop_context(ohci, d->ctrlClear, "RSPkt");
2321 else
2322 tasklet_schedule(&d->task);
2323 event &= ~OHCI1394_RSPkt;
2325 if (event & OHCI1394_isochRx) {
2326 quadlet_t rx_event;
2328 rx_event = reg_read(ohci, OHCI1394_IsoRecvIntEventSet);
2329 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, rx_event);
2330 ohci_schedule_iso_tasklets(ohci, rx_event, 0);
2331 event &= ~OHCI1394_isochRx;
2333 if (event & OHCI1394_isochTx) {
2334 quadlet_t tx_event;
2336 tx_event = reg_read(ohci, OHCI1394_IsoXmitIntEventSet);
2337 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, tx_event);
2338 ohci_schedule_iso_tasklets(ohci, 0, tx_event);
2339 event &= ~OHCI1394_isochTx;
2341 if (event & OHCI1394_selfIDComplete) {
2342 if (host->in_bus_reset) {
2343 node_id = reg_read(ohci, OHCI1394_NodeID);
2345 if (!(node_id & 0x80000000)) {
2346 PRINT(KERN_ERR,
2347 "SelfID received, but NodeID invalid "
2348 "(probably new bus reset occurred): %08X",
2349 node_id);
2350 goto selfid_not_valid;
2353 phyid = node_id & 0x0000003f;
2354 isroot = (node_id & 0x40000000) != 0;
2356 DBGMSG("SelfID interrupt received "
2357 "(phyid %d, %s)", phyid,
2358 (isroot ? "root" : "not root"));
2360 handle_selfid(ohci, host, phyid, isroot);
2362 /* Clear the bus reset event and re-enable the
2363 * busReset interrupt. */
2364 spin_lock_irqsave(&ohci->event_lock, flags);
2365 reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
2366 reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_busReset);
2367 spin_unlock_irqrestore(&ohci->event_lock, flags);
2369 /* Turn on phys dma reception.
2371 * TODO: Enable some sort of filtering management.
2373 if (phys_dma) {
2374 reg_write(ohci, OHCI1394_PhyReqFilterHiSet,
2375 0xffffffff);
2376 reg_write(ohci, OHCI1394_PhyReqFilterLoSet,
2377 0xffffffff);
2380 DBGMSG("PhyReqFilter=%08x%08x",
2381 reg_read(ohci, OHCI1394_PhyReqFilterHiSet),
2382 reg_read(ohci, OHCI1394_PhyReqFilterLoSet));
2384 hpsb_selfid_complete(host, phyid, isroot);
2385 } else
2386 PRINT(KERN_ERR,
2387 "SelfID received outside of bus reset sequence");
2389 selfid_not_valid:
2390 event &= ~OHCI1394_selfIDComplete;
2393 /* Make sure we handle everything, just in case we accidentally
2394 * enabled an interrupt that we didn't write a handler for. */
2395 if (event)
2396 PRINT(KERN_ERR, "Unhandled interrupt(s) 0x%08x",
2397 event);
2399 return IRQ_HANDLED;
2402 /* Put the buffer back into the dma context */
2403 static void insert_dma_buffer(struct dma_rcv_ctx *d, int idx)
2405 struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
2406 DBGMSG("Inserting dma buf ctx=%d idx=%d", d->ctx, idx);
2408 d->prg_cpu[idx]->status = cpu_to_le32(d->buf_size);
2409 d->prg_cpu[idx]->branchAddress &= le32_to_cpu(0xfffffff0);
2410 idx = (idx + d->num_desc - 1 ) % d->num_desc;
2411 d->prg_cpu[idx]->branchAddress |= le32_to_cpu(0x00000001);
2413 /* To avoid a race, ensure 1394 interface hardware sees the inserted
2414 * context program descriptors before it sees the wakeup bit set. */
2415 wmb();
2417 /* wake up the dma context if necessary */
2418 if (!(reg_read(ohci, d->ctrlSet) & 0x400)) {
2419 PRINT(KERN_INFO,
2420 "Waking dma ctx=%d ... processing is probably too slow",
2421 d->ctx);
2424 /* do this always, to avoid race condition */
2425 reg_write(ohci, d->ctrlSet, 0x1000);
2428 #define cond_le32_to_cpu(data, noswap) \
2429 (noswap ? data : le32_to_cpu(data))
2431 static const int TCODE_SIZE[16] = {20, 0, 16, -1, 16, 20, 20, 0,
2432 -1, 0, -1, 0, -1, -1, 16, -1};
2435 * Determine the length of a packet in the buffer
2436 * Optimization suggested by Pascal Drolet <pascal.drolet@informission.ca>
2438 static inline int packet_length(struct dma_rcv_ctx *d, int idx,
2439 quadlet_t *buf_ptr, int offset,
2440 unsigned char tcode, int noswap)
2442 int length = -1;
2444 if (d->type == DMA_CTX_ASYNC_REQ || d->type == DMA_CTX_ASYNC_RESP) {
2445 length = TCODE_SIZE[tcode];
2446 if (length == 0) {
2447 if (offset + 12 >= d->buf_size) {
2448 length = (cond_le32_to_cpu(d->buf_cpu[(idx + 1) % d->num_desc]
2449 [3 - ((d->buf_size - offset) >> 2)], noswap) >> 16);
2450 } else {
2451 length = (cond_le32_to_cpu(buf_ptr[3], noswap) >> 16);
2453 length += 20;
2455 } else if (d->type == DMA_CTX_ISO) {
2456 /* Assumption: buffer fill mode with header/trailer */
2457 length = (cond_le32_to_cpu(buf_ptr[0], noswap) >> 16) + 8;
2460 if (length > 0 && length % 4)
2461 length += 4 - (length % 4);
2463 return length;
2466 /* Tasklet that processes dma receive buffers */
2467 static void dma_rcv_tasklet (unsigned long data)
2469 struct dma_rcv_ctx *d = (struct dma_rcv_ctx*)data;
2470 struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
2471 unsigned int split_left, idx, offset, rescount;
2472 unsigned char tcode;
2473 int length, bytes_left, ack;
2474 unsigned long flags;
2475 quadlet_t *buf_ptr;
2476 char *split_ptr;
2477 char msg[256];
2479 spin_lock_irqsave(&d->lock, flags);
2481 idx = d->buf_ind;
2482 offset = d->buf_offset;
2483 buf_ptr = d->buf_cpu[idx] + offset/4;
2485 rescount = le32_to_cpu(d->prg_cpu[idx]->status) & 0xffff;
2486 bytes_left = d->buf_size - rescount - offset;
2488 while (bytes_left > 0) {
2489 tcode = (cond_le32_to_cpu(buf_ptr[0], ohci->no_swap_incoming) >> 4) & 0xf;
2491 /* packet_length() will return < 4 for an error */
2492 length = packet_length(d, idx, buf_ptr, offset, tcode, ohci->no_swap_incoming);
2494 if (length < 4) { /* something is wrong */
2495 sprintf(msg,"Unexpected tcode 0x%x(0x%08x) in AR ctx=%d, length=%d",
2496 tcode, cond_le32_to_cpu(buf_ptr[0], ohci->no_swap_incoming),
2497 d->ctx, length);
2498 ohci1394_stop_context(ohci, d->ctrlClear, msg);
2499 spin_unlock_irqrestore(&d->lock, flags);
2500 return;
2503 /* The first case is where we have a packet that crosses
2504 * over more than one descriptor. The next case is where
2505 * it's all in the first descriptor. */
2506 if ((offset + length) > d->buf_size) {
2507 DBGMSG("Split packet rcv'd");
2508 if (length > d->split_buf_size) {
2509 ohci1394_stop_context(ohci, d->ctrlClear,
2510 "Split packet size exceeded");
2511 d->buf_ind = idx;
2512 d->buf_offset = offset;
2513 spin_unlock_irqrestore(&d->lock, flags);
2514 return;
2517 if (le32_to_cpu(d->prg_cpu[(idx+1)%d->num_desc]->status)
2518 == d->buf_size) {
2519 /* Other part of packet not written yet.
2520 * this should never happen I think
2521 * anyway we'll get it on the next call. */
2522 PRINT(KERN_INFO,
2523 "Got only half a packet!");
2524 d->buf_ind = idx;
2525 d->buf_offset = offset;
2526 spin_unlock_irqrestore(&d->lock, flags);
2527 return;
2530 split_left = length;
2531 split_ptr = (char *)d->spb;
2532 memcpy(split_ptr,buf_ptr,d->buf_size-offset);
2533 split_left -= d->buf_size-offset;
2534 split_ptr += d->buf_size-offset;
2535 insert_dma_buffer(d, idx);
2536 idx = (idx+1) % d->num_desc;
2537 buf_ptr = d->buf_cpu[idx];
2538 offset=0;
2540 while (split_left >= d->buf_size) {
2541 memcpy(split_ptr,buf_ptr,d->buf_size);
2542 split_ptr += d->buf_size;
2543 split_left -= d->buf_size;
2544 insert_dma_buffer(d, idx);
2545 idx = (idx+1) % d->num_desc;
2546 buf_ptr = d->buf_cpu[idx];
2549 if (split_left > 0) {
2550 memcpy(split_ptr, buf_ptr, split_left);
2551 offset = split_left;
2552 buf_ptr += offset/4;
2554 } else {
2555 DBGMSG("Single packet rcv'd");
2556 memcpy(d->spb, buf_ptr, length);
2557 offset += length;
2558 buf_ptr += length/4;
2559 if (offset==d->buf_size) {
2560 insert_dma_buffer(d, idx);
2561 idx = (idx+1) % d->num_desc;
2562 buf_ptr = d->buf_cpu[idx];
2563 offset=0;
2567 /* We get one phy packet to the async descriptor for each
2568 * bus reset. We always ignore it. */
2569 if (tcode != OHCI1394_TCODE_PHY) {
2570 if (!ohci->no_swap_incoming)
2571 header_le32_to_cpu(d->spb, tcode);
2572 DBGMSG("Packet received from node"
2573 " %d ack=0x%02X spd=%d tcode=0x%X"
2574 " length=%d ctx=%d tlabel=%d",
2575 (d->spb[1]>>16)&0x3f,
2576 (cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>16)&0x1f,
2577 (cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>21)&0x3,
2578 tcode, length, d->ctx,
2579 (d->spb[0]>>10)&0x3f);
2581 ack = (((cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>16)&0x1f)
2582 == 0x11) ? 1 : 0;
2584 hpsb_packet_received(ohci->host, d->spb,
2585 length-4, ack);
2587 #ifdef OHCI1394_DEBUG
2588 else
2589 PRINT (KERN_DEBUG, "Got phy packet ctx=%d ... discarded",
2590 d->ctx);
2591 #endif
2593 rescount = le32_to_cpu(d->prg_cpu[idx]->status) & 0xffff;
2595 bytes_left = d->buf_size - rescount - offset;
2599 d->buf_ind = idx;
2600 d->buf_offset = offset;
2602 spin_unlock_irqrestore(&d->lock, flags);
2605 /* Bottom half that processes sent packets */
2606 static void dma_trm_tasklet (unsigned long data)
2608 struct dma_trm_ctx *d = (struct dma_trm_ctx*)data;
2609 struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
2610 struct hpsb_packet *packet, *ptmp;
2611 unsigned long flags;
2612 u32 status, ack;
2613 size_t datasize;
2615 spin_lock_irqsave(&d->lock, flags);
2617 list_for_each_entry_safe(packet, ptmp, &d->fifo_list, driver_list) {
2618 datasize = packet->data_size;
2619 if (datasize && packet->type != hpsb_raw)
2620 status = le32_to_cpu(
2621 d->prg_cpu[d->sent_ind]->end.status) >> 16;
2622 else
2623 status = le32_to_cpu(
2624 d->prg_cpu[d->sent_ind]->begin.status) >> 16;
2626 if (status == 0)
2627 /* this packet hasn't been sent yet*/
2628 break;
2630 #ifdef OHCI1394_DEBUG
2631 if (datasize)
2632 if (((le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])>>4)&0xf) == 0xa)
2633 DBGMSG("Stream packet sent to channel %d tcode=0x%X "
2634 "ack=0x%X spd=%d dataLength=%d ctx=%d",
2635 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])>>8)&0x3f,
2636 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])>>4)&0xf,
2637 status&0x1f, (status>>5)&0x3,
2638 le32_to_cpu(d->prg_cpu[d->sent_ind]->data[1])>>16,
2639 d->ctx);
2640 else
2641 DBGMSG("Packet sent to node %d tcode=0x%X tLabel="
2642 "%d ack=0x%X spd=%d dataLength=%d ctx=%d",
2643 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[1])>>16)&0x3f,
2644 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])>>4)&0xf,
2645 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])>>10)&0x3f,
2646 status&0x1f, (status>>5)&0x3,
2647 le32_to_cpu(d->prg_cpu[d->sent_ind]->data[3])>>16,
2648 d->ctx);
2649 else
2650 DBGMSG("Packet sent to node %d tcode=0x%X tLabel="
2651 "%d ack=0x%X spd=%d data=0x%08X ctx=%d",
2652 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[1])
2653 >>16)&0x3f,
2654 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
2655 >>4)&0xf,
2656 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
2657 >>10)&0x3f,
2658 status&0x1f, (status>>5)&0x3,
2659 le32_to_cpu(d->prg_cpu[d->sent_ind]->data[3]),
2660 d->ctx);
2661 #endif
2663 if (status & 0x10) {
2664 ack = status & 0xf;
2665 } else {
2666 switch (status & 0x1f) {
2667 case EVT_NO_STATUS: /* that should never happen */
2668 case EVT_RESERVED_A: /* that should never happen */
2669 case EVT_LONG_PACKET: /* that should never happen */
2670 PRINT(KERN_WARNING, "Received OHCI evt_* error 0x%x", status & 0x1f);
2671 ack = ACKX_SEND_ERROR;
2672 break;
2673 case EVT_MISSING_ACK:
2674 ack = ACKX_TIMEOUT;
2675 break;
2676 case EVT_UNDERRUN:
2677 ack = ACKX_SEND_ERROR;
2678 break;
2679 case EVT_OVERRUN: /* that should never happen */
2680 PRINT(KERN_WARNING, "Received OHCI evt_* error 0x%x", status & 0x1f);
2681 ack = ACKX_SEND_ERROR;
2682 break;
2683 case EVT_DESCRIPTOR_READ:
2684 case EVT_DATA_READ:
2685 case EVT_DATA_WRITE:
2686 ack = ACKX_SEND_ERROR;
2687 break;
2688 case EVT_BUS_RESET: /* that should never happen */
2689 PRINT(KERN_WARNING, "Received OHCI evt_* error 0x%x", status & 0x1f);
2690 ack = ACKX_SEND_ERROR;
2691 break;
2692 case EVT_TIMEOUT:
2693 ack = ACKX_TIMEOUT;
2694 break;
2695 case EVT_TCODE_ERR:
2696 ack = ACKX_SEND_ERROR;
2697 break;
2698 case EVT_RESERVED_B: /* that should never happen */
2699 case EVT_RESERVED_C: /* that should never happen */
2700 PRINT(KERN_WARNING, "Received OHCI evt_* error 0x%x", status & 0x1f);
2701 ack = ACKX_SEND_ERROR;
2702 break;
2703 case EVT_UNKNOWN:
2704 case EVT_FLUSHED:
2705 ack = ACKX_SEND_ERROR;
2706 break;
2707 default:
2708 PRINT(KERN_ERR, "Unhandled OHCI evt_* error 0x%x", status & 0x1f);
2709 ack = ACKX_SEND_ERROR;
2710 BUG();
2714 list_del_init(&packet->driver_list);
2715 hpsb_packet_sent(ohci->host, packet, ack);
2717 if (datasize)
2718 pci_unmap_single(ohci->dev,
2719 cpu_to_le32(d->prg_cpu[d->sent_ind]->end.address),
2720 datasize, PCI_DMA_TODEVICE);
2722 d->sent_ind = (d->sent_ind+1)%d->num_desc;
2723 d->free_prgs++;
2726 dma_trm_flush(ohci, d);
2728 spin_unlock_irqrestore(&d->lock, flags);
2731 static void free_dma_rcv_ctx(struct dma_rcv_ctx *d)
2733 int i;
2734 struct ti_ohci *ohci = d->ohci;
2736 if (ohci == NULL)
2737 return;
2739 DBGMSG("Freeing dma_rcv_ctx %d", d->ctx);
2741 if (d->buf_cpu) {
2742 for (i=0; i<d->num_desc; i++)
2743 if (d->buf_cpu[i] && d->buf_bus[i])
2744 pci_free_consistent(
2745 ohci->dev, d->buf_size,
2746 d->buf_cpu[i], d->buf_bus[i]);
2747 kfree(d->buf_cpu);
2748 kfree(d->buf_bus);
2750 if (d->prg_cpu) {
2751 for (i=0; i<d->num_desc; i++)
2752 if (d->prg_cpu[i] && d->prg_bus[i])
2753 pci_pool_free(d->prg_pool, d->prg_cpu[i],
2754 d->prg_bus[i]);
2755 pci_pool_destroy(d->prg_pool);
2756 kfree(d->prg_cpu);
2757 kfree(d->prg_bus);
2759 kfree(d->spb);
2761 /* Mark this context as freed. */
2762 d->ohci = NULL;
2765 static int
2766 alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d,
2767 enum context_type type, int ctx, int num_desc,
2768 int buf_size, int split_buf_size, int context_base)
2770 int i, len;
2771 static int num_allocs;
2772 static char pool_name[20];
2774 d->ohci = ohci;
2775 d->type = type;
2776 d->ctx = ctx;
2778 d->num_desc = num_desc;
2779 d->buf_size = buf_size;
2780 d->split_buf_size = split_buf_size;
2782 d->ctrlSet = 0;
2783 d->ctrlClear = 0;
2784 d->cmdPtr = 0;
2786 d->buf_cpu = kzalloc(d->num_desc * sizeof(*d->buf_cpu), GFP_ATOMIC);
2787 d->buf_bus = kzalloc(d->num_desc * sizeof(*d->buf_bus), GFP_ATOMIC);
2789 if (d->buf_cpu == NULL || d->buf_bus == NULL) {
2790 PRINT(KERN_ERR, "Failed to allocate dma buffer");
2791 free_dma_rcv_ctx(d);
2792 return -ENOMEM;
2795 d->prg_cpu = kzalloc(d->num_desc * sizeof(*d->prg_cpu), GFP_ATOMIC);
2796 d->prg_bus = kzalloc(d->num_desc * sizeof(*d->prg_bus), GFP_ATOMIC);
2798 if (d->prg_cpu == NULL || d->prg_bus == NULL) {
2799 PRINT(KERN_ERR, "Failed to allocate dma prg");
2800 free_dma_rcv_ctx(d);
2801 return -ENOMEM;
2804 d->spb = kmalloc(d->split_buf_size, GFP_ATOMIC);
2806 if (d->spb == NULL) {
2807 PRINT(KERN_ERR, "Failed to allocate split buffer");
2808 free_dma_rcv_ctx(d);
2809 return -ENOMEM;
2812 len = sprintf(pool_name, "ohci1394_rcv_prg");
2813 sprintf(pool_name+len, "%d", num_allocs);
2814 d->prg_pool = pci_pool_create(pool_name, ohci->dev,
2815 sizeof(struct dma_cmd), 4, 0);
2816 if(d->prg_pool == NULL)
2818 PRINT(KERN_ERR, "pci_pool_create failed for %s", pool_name);
2819 free_dma_rcv_ctx(d);
2820 return -ENOMEM;
2822 num_allocs++;
2824 for (i=0; i<d->num_desc; i++) {
2825 d->buf_cpu[i] = pci_alloc_consistent(ohci->dev,
2826 d->buf_size,
2827 d->buf_bus+i);
2829 if (d->buf_cpu[i] != NULL) {
2830 memset(d->buf_cpu[i], 0, d->buf_size);
2831 } else {
2832 PRINT(KERN_ERR,
2833 "Failed to allocate dma buffer");
2834 free_dma_rcv_ctx(d);
2835 return -ENOMEM;
2838 d->prg_cpu[i] = pci_pool_alloc(d->prg_pool, GFP_KERNEL, d->prg_bus+i);
2840 if (d->prg_cpu[i] != NULL) {
2841 memset(d->prg_cpu[i], 0, sizeof(struct dma_cmd));
2842 } else {
2843 PRINT(KERN_ERR,
2844 "Failed to allocate dma prg");
2845 free_dma_rcv_ctx(d);
2846 return -ENOMEM;
2850 spin_lock_init(&d->lock);
2852 d->ctrlSet = context_base + OHCI1394_ContextControlSet;
2853 d->ctrlClear = context_base + OHCI1394_ContextControlClear;
2854 d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
2856 tasklet_init(&d->task, dma_rcv_tasklet, (unsigned long) d);
2857 return 0;
2860 static void free_dma_trm_ctx(struct dma_trm_ctx *d)
2862 int i;
2863 struct ti_ohci *ohci = d->ohci;
2865 if (ohci == NULL)
2866 return;
2868 DBGMSG("Freeing dma_trm_ctx %d", d->ctx);
2870 if (d->prg_cpu) {
2871 for (i=0; i<d->num_desc; i++)
2872 if (d->prg_cpu[i] && d->prg_bus[i])
2873 pci_pool_free(d->prg_pool, d->prg_cpu[i],
2874 d->prg_bus[i]);
2875 pci_pool_destroy(d->prg_pool);
2876 kfree(d->prg_cpu);
2877 kfree(d->prg_bus);
2880 /* Mark this context as freed. */
2881 d->ohci = NULL;
2884 static int
2885 alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d,
2886 enum context_type type, int ctx, int num_desc,
2887 int context_base)
2889 int i, len;
2890 static char pool_name[20];
2891 static int num_allocs=0;
2893 d->ohci = ohci;
2894 d->type = type;
2895 d->ctx = ctx;
2896 d->num_desc = num_desc;
2897 d->ctrlSet = 0;
2898 d->ctrlClear = 0;
2899 d->cmdPtr = 0;
2901 d->prg_cpu = kzalloc(d->num_desc * sizeof(*d->prg_cpu), GFP_KERNEL);
2902 d->prg_bus = kzalloc(d->num_desc * sizeof(*d->prg_bus), GFP_KERNEL);
2904 if (d->prg_cpu == NULL || d->prg_bus == NULL) {
2905 PRINT(KERN_ERR, "Failed to allocate at dma prg");
2906 free_dma_trm_ctx(d);
2907 return -ENOMEM;
2910 len = sprintf(pool_name, "ohci1394_trm_prg");
2911 sprintf(pool_name+len, "%d", num_allocs);
2912 d->prg_pool = pci_pool_create(pool_name, ohci->dev,
2913 sizeof(struct at_dma_prg), 4, 0);
2914 if (d->prg_pool == NULL) {
2915 PRINT(KERN_ERR, "pci_pool_create failed for %s", pool_name);
2916 free_dma_trm_ctx(d);
2917 return -ENOMEM;
2919 num_allocs++;
2921 for (i = 0; i < d->num_desc; i++) {
2922 d->prg_cpu[i] = pci_pool_alloc(d->prg_pool, GFP_KERNEL, d->prg_bus+i);
2924 if (d->prg_cpu[i] != NULL) {
2925 memset(d->prg_cpu[i], 0, sizeof(struct at_dma_prg));
2926 } else {
2927 PRINT(KERN_ERR,
2928 "Failed to allocate at dma prg");
2929 free_dma_trm_ctx(d);
2930 return -ENOMEM;
2934 spin_lock_init(&d->lock);
2936 /* initialize tasklet */
2937 d->ctrlSet = context_base + OHCI1394_ContextControlSet;
2938 d->ctrlClear = context_base + OHCI1394_ContextControlClear;
2939 d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
2940 tasklet_init(&d->task, dma_trm_tasklet, (unsigned long)d);
2941 return 0;
2944 static void ohci_set_hw_config_rom(struct hpsb_host *host, quadlet_t *config_rom)
2946 struct ti_ohci *ohci = host->hostdata;
2948 reg_write(ohci, OHCI1394_ConfigROMhdr, be32_to_cpu(config_rom[0]));
2949 reg_write(ohci, OHCI1394_BusOptions, be32_to_cpu(config_rom[2]));
2951 memcpy(ohci->csr_config_rom_cpu, config_rom, OHCI_CONFIG_ROM_LEN);
2955 static quadlet_t ohci_hw_csr_reg(struct hpsb_host *host, int reg,
2956 quadlet_t data, quadlet_t compare)
2958 struct ti_ohci *ohci = host->hostdata;
2959 int i;
2961 reg_write(ohci, OHCI1394_CSRData, data);
2962 reg_write(ohci, OHCI1394_CSRCompareData, compare);
2963 reg_write(ohci, OHCI1394_CSRControl, reg & 0x3);
2965 for (i = 0; i < OHCI_LOOP_COUNT; i++) {
2966 if (reg_read(ohci, OHCI1394_CSRControl) & 0x80000000)
2967 break;
2969 mdelay(1);
2972 return reg_read(ohci, OHCI1394_CSRData);
2975 static struct hpsb_host_driver ohci1394_driver = {
2976 .owner = THIS_MODULE,
2977 .name = OHCI1394_DRIVER_NAME,
2978 .set_hw_config_rom = ohci_set_hw_config_rom,
2979 .transmit_packet = ohci_transmit,
2980 .devctl = ohci_devctl,
2981 .isoctl = ohci_isoctl,
2982 .hw_csr_reg = ohci_hw_csr_reg,
2985 /***********************************
2986 * PCI Driver Interface functions *
2987 ***********************************/
2989 #define FAIL(err, fmt, args...) \
2990 do { \
2991 PRINT_G(KERN_ERR, fmt , ## args); \
2992 ohci1394_pci_remove(dev); \
2993 return err; \
2994 } while (0)
2996 static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
2997 const struct pci_device_id *ent)
2999 struct hpsb_host *host;
3000 struct ti_ohci *ohci; /* shortcut to currently handled device */
3001 resource_size_t ohci_base;
3003 #ifdef CONFIG_PPC_PMAC
3004 /* Necessary on some machines if ohci1394 was loaded/ unloaded before */
3005 if (machine_is(powermac)) {
3006 struct device_node *ofn = pci_device_to_OF_node(dev);
3008 if (ofn) {
3009 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 1);
3010 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1);
3013 #endif /* CONFIG_PPC_PMAC */
3015 if (pci_enable_device(dev))
3016 FAIL(-ENXIO, "Failed to enable OHCI hardware");
3017 pci_set_master(dev);
3019 host = hpsb_alloc_host(&ohci1394_driver, sizeof(struct ti_ohci), &dev->dev);
3020 if (!host) FAIL(-ENOMEM, "Failed to allocate host structure");
3022 ohci = host->hostdata;
3023 ohci->dev = dev;
3024 ohci->host = host;
3025 ohci->init_state = OHCI_INIT_ALLOC_HOST;
3026 host->pdev = dev;
3027 pci_set_drvdata(dev, ohci);
3029 /* We don't want hardware swapping */
3030 pci_write_config_dword(dev, OHCI1394_PCI_HCI_Control, 0);
3032 /* Some oddball Apple controllers do not order the selfid
3033 * properly, so we make up for it here. */
3034 #ifndef __LITTLE_ENDIAN
3035 /* XXX: Need a better way to check this. I'm wondering if we can
3036 * read the values of the OHCI1394_PCI_HCI_Control and the
3037 * noByteSwapData registers to see if they were not cleared to
3038 * zero. Should this work? Obviously it's not defined what these
3039 * registers will read when they aren't supported. Bleh! */
3040 if (dev->vendor == PCI_VENDOR_ID_APPLE &&
3041 dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) {
3042 ohci->no_swap_incoming = 1;
3043 ohci->selfid_swap = 0;
3044 } else
3045 ohci->selfid_swap = 1;
3046 #endif
3049 #ifndef PCI_DEVICE_ID_NVIDIA_NFORCE2_FW
3050 #define PCI_DEVICE_ID_NVIDIA_NFORCE2_FW 0x006e
3051 #endif
3053 /* These chipsets require a bit of extra care when checking after
3054 * a busreset. */
3055 if ((dev->vendor == PCI_VENDOR_ID_APPLE &&
3056 dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) ||
3057 (dev->vendor == PCI_VENDOR_ID_NVIDIA &&
3058 dev->device == PCI_DEVICE_ID_NVIDIA_NFORCE2_FW))
3059 ohci->check_busreset = 1;
3061 /* We hardwire the MMIO length, since some CardBus adaptors
3062 * fail to report the right length. Anyway, the ohci spec
3063 * clearly says it's 2kb, so this shouldn't be a problem. */
3064 ohci_base = pci_resource_start(dev, 0);
3065 if (pci_resource_len(dev, 0) < OHCI1394_REGISTER_SIZE)
3066 PRINT(KERN_WARNING, "PCI resource length of 0x%llx too small!",
3067 (unsigned long long)pci_resource_len(dev, 0));
3069 if (!request_mem_region(ohci_base, OHCI1394_REGISTER_SIZE,
3070 OHCI1394_DRIVER_NAME))
3071 FAIL(-ENOMEM, "MMIO resource (0x%llx - 0x%llx) unavailable",
3072 (unsigned long long)ohci_base,
3073 (unsigned long long)ohci_base + OHCI1394_REGISTER_SIZE);
3074 ohci->init_state = OHCI_INIT_HAVE_MEM_REGION;
3076 ohci->registers = ioremap(ohci_base, OHCI1394_REGISTER_SIZE);
3077 if (ohci->registers == NULL)
3078 FAIL(-ENXIO, "Failed to remap registers - card not accessible");
3079 ohci->init_state = OHCI_INIT_HAVE_IOMAPPING;
3080 DBGMSG("Remapped memory spaces reg 0x%p", ohci->registers);
3082 /* csr_config rom allocation */
3083 ohci->csr_config_rom_cpu =
3084 pci_alloc_consistent(ohci->dev, OHCI_CONFIG_ROM_LEN,
3085 &ohci->csr_config_rom_bus);
3086 if (ohci->csr_config_rom_cpu == NULL)
3087 FAIL(-ENOMEM, "Failed to allocate buffer config rom");
3088 ohci->init_state = OHCI_INIT_HAVE_CONFIG_ROM_BUFFER;
3090 /* self-id dma buffer allocation */
3091 ohci->selfid_buf_cpu =
3092 pci_alloc_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE,
3093 &ohci->selfid_buf_bus);
3094 if (ohci->selfid_buf_cpu == NULL)
3095 FAIL(-ENOMEM, "Failed to allocate DMA buffer for self-id packets");
3096 ohci->init_state = OHCI_INIT_HAVE_SELFID_BUFFER;
3098 if ((unsigned long)ohci->selfid_buf_cpu & 0x1fff)
3099 PRINT(KERN_INFO, "SelfID buffer %p is not aligned on "
3100 "8Kb boundary... may cause problems on some CXD3222 chip",
3101 ohci->selfid_buf_cpu);
3103 /* No self-id errors at startup */
3104 ohci->self_id_errors = 0;
3106 ohci->init_state = OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE;
3107 /* AR DMA request context allocation */
3108 if (alloc_dma_rcv_ctx(ohci, &ohci->ar_req_context,
3109 DMA_CTX_ASYNC_REQ, 0, AR_REQ_NUM_DESC,
3110 AR_REQ_BUF_SIZE, AR_REQ_SPLIT_BUF_SIZE,
3111 OHCI1394_AsReqRcvContextBase) < 0)
3112 FAIL(-ENOMEM, "Failed to allocate AR Req context");
3114 /* AR DMA response context allocation */
3115 if (alloc_dma_rcv_ctx(ohci, &ohci->ar_resp_context,
3116 DMA_CTX_ASYNC_RESP, 0, AR_RESP_NUM_DESC,
3117 AR_RESP_BUF_SIZE, AR_RESP_SPLIT_BUF_SIZE,
3118 OHCI1394_AsRspRcvContextBase) < 0)
3119 FAIL(-ENOMEM, "Failed to allocate AR Resp context");
3121 /* AT DMA request context */
3122 if (alloc_dma_trm_ctx(ohci, &ohci->at_req_context,
3123 DMA_CTX_ASYNC_REQ, 0, AT_REQ_NUM_DESC,
3124 OHCI1394_AsReqTrContextBase) < 0)
3125 FAIL(-ENOMEM, "Failed to allocate AT Req context");
3127 /* AT DMA response context */
3128 if (alloc_dma_trm_ctx(ohci, &ohci->at_resp_context,
3129 DMA_CTX_ASYNC_RESP, 1, AT_RESP_NUM_DESC,
3130 OHCI1394_AsRspTrContextBase) < 0)
3131 FAIL(-ENOMEM, "Failed to allocate AT Resp context");
3133 /* Start off with a soft reset, to clear everything to a sane
3134 * state. */
3135 ohci_soft_reset(ohci);
3137 /* Now enable LPS, which we need in order to start accessing
3138 * most of the registers. In fact, on some cards (ALI M5251),
3139 * accessing registers in the SClk domain without LPS enabled
3140 * will lock up the machine. Wait 50msec to make sure we have
3141 * full link enabled. */
3142 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_LPS);
3144 /* Disable and clear interrupts */
3145 reg_write(ohci, OHCI1394_IntEventClear, 0xffffffff);
3146 reg_write(ohci, OHCI1394_IntMaskClear, 0xffffffff);
3148 mdelay(50);
3150 /* Determine the number of available IR and IT contexts. */
3151 ohci->nb_iso_rcv_ctx =
3152 get_nb_iso_ctx(ohci, OHCI1394_IsoRecvIntMaskSet);
3153 ohci->nb_iso_xmit_ctx =
3154 get_nb_iso_ctx(ohci, OHCI1394_IsoXmitIntMaskSet);
3156 /* Set the usage bits for non-existent contexts so they can't
3157 * be allocated */
3158 ohci->ir_ctx_usage = ~0 << ohci->nb_iso_rcv_ctx;
3159 ohci->it_ctx_usage = ~0 << ohci->nb_iso_xmit_ctx;
3161 INIT_LIST_HEAD(&ohci->iso_tasklet_list);
3162 spin_lock_init(&ohci->iso_tasklet_list_lock);
3163 ohci->ISO_channel_usage = 0;
3164 spin_lock_init(&ohci->IR_channel_lock);
3166 spin_lock_init(&ohci->event_lock);
3169 * interrupts are disabled, all right, but... due to IRQF_SHARED we
3170 * might get called anyway. We'll see no event, of course, but
3171 * we need to get to that "no event", so enough should be initialized
3172 * by that point.
3174 if (request_irq(dev->irq, ohci_irq_handler, IRQF_SHARED,
3175 OHCI1394_DRIVER_NAME, ohci))
3176 FAIL(-ENOMEM, "Failed to allocate shared interrupt %d", dev->irq);
3178 ohci->init_state = OHCI_INIT_HAVE_IRQ;
3179 ohci_initialize(ohci);
3181 /* Set certain csr values */
3182 host->csr.guid_hi = reg_read(ohci, OHCI1394_GUIDHi);
3183 host->csr.guid_lo = reg_read(ohci, OHCI1394_GUIDLo);
3184 host->csr.cyc_clk_acc = 100; /* how do we determine clk accuracy? */
3185 host->csr.max_rec = (reg_read(ohci, OHCI1394_BusOptions) >> 12) & 0xf;
3186 host->csr.lnk_spd = reg_read(ohci, OHCI1394_BusOptions) & 0x7;
3188 if (phys_dma) {
3189 host->low_addr_space =
3190 (u64) reg_read(ohci, OHCI1394_PhyUpperBound) << 16;
3191 if (!host->low_addr_space)
3192 host->low_addr_space = OHCI1394_PHYS_UPPER_BOUND_FIXED;
3194 host->middle_addr_space = OHCI1394_MIDDLE_ADDRESS_SPACE;
3196 /* Tell the highlevel this host is ready */
3197 if (hpsb_add_host(host))
3198 FAIL(-ENOMEM, "Failed to register host with highlevel");
3200 ohci->init_state = OHCI_INIT_DONE;
3202 return 0;
3203 #undef FAIL
3206 static void ohci1394_pci_remove(struct pci_dev *pdev)
3208 struct ti_ohci *ohci;
3209 struct device *dev;
3211 ohci = pci_get_drvdata(pdev);
3212 if (!ohci)
3213 return;
3215 dev = get_device(&ohci->host->device);
3217 switch (ohci->init_state) {
3218 case OHCI_INIT_DONE:
3219 hpsb_remove_host(ohci->host);
3221 /* Clear out BUS Options */
3222 reg_write(ohci, OHCI1394_ConfigROMhdr, 0);
3223 reg_write(ohci, OHCI1394_BusOptions,
3224 (reg_read(ohci, OHCI1394_BusOptions) & 0x0000f007) |
3225 0x00ff0000);
3226 memset(ohci->csr_config_rom_cpu, 0, OHCI_CONFIG_ROM_LEN);
3228 case OHCI_INIT_HAVE_IRQ:
3229 /* Clear interrupt registers */
3230 reg_write(ohci, OHCI1394_IntMaskClear, 0xffffffff);
3231 reg_write(ohci, OHCI1394_IntEventClear, 0xffffffff);
3232 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 0xffffffff);
3233 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 0xffffffff);
3234 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, 0xffffffff);
3235 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, 0xffffffff);
3237 /* Disable IRM Contender */
3238 set_phy_reg(ohci, 4, ~0xc0 & get_phy_reg(ohci, 4));
3240 /* Clear link control register */
3241 reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff);
3243 /* Let all other nodes know to ignore us */
3244 ohci_devctl(ohci->host, RESET_BUS, LONG_RESET_NO_FORCE_ROOT);
3246 /* Soft reset before we start - this disables
3247 * interrupts and clears linkEnable and LPS. */
3248 ohci_soft_reset(ohci);
3249 free_irq(ohci->dev->irq, ohci);
3251 case OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE:
3252 /* The ohci_soft_reset() stops all DMA contexts, so we
3253 * dont need to do this. */
3254 free_dma_rcv_ctx(&ohci->ar_req_context);
3255 free_dma_rcv_ctx(&ohci->ar_resp_context);
3256 free_dma_trm_ctx(&ohci->at_req_context);
3257 free_dma_trm_ctx(&ohci->at_resp_context);
3259 case OHCI_INIT_HAVE_SELFID_BUFFER:
3260 pci_free_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE,
3261 ohci->selfid_buf_cpu,
3262 ohci->selfid_buf_bus);
3264 case OHCI_INIT_HAVE_CONFIG_ROM_BUFFER:
3265 pci_free_consistent(ohci->dev, OHCI_CONFIG_ROM_LEN,
3266 ohci->csr_config_rom_cpu,
3267 ohci->csr_config_rom_bus);
3269 case OHCI_INIT_HAVE_IOMAPPING:
3270 iounmap(ohci->registers);
3272 case OHCI_INIT_HAVE_MEM_REGION:
3273 release_mem_region(pci_resource_start(ohci->dev, 0),
3274 OHCI1394_REGISTER_SIZE);
3276 #ifdef CONFIG_PPC_PMAC
3277 /* On UniNorth, power down the cable and turn off the chip clock
3278 * to save power on laptops */
3279 if (machine_is(powermac)) {
3280 struct device_node* ofn = pci_device_to_OF_node(ohci->dev);
3282 if (ofn) {
3283 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);
3284 pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, ofn, 0, 0);
3287 #endif /* CONFIG_PPC_PMAC */
3289 case OHCI_INIT_ALLOC_HOST:
3290 pci_set_drvdata(ohci->dev, NULL);
3293 if (dev)
3294 put_device(dev);
3297 #ifdef CONFIG_PM
3298 static int ohci1394_pci_suspend(struct pci_dev *pdev, pm_message_t state)
3300 int err;
3301 struct ti_ohci *ohci = pci_get_drvdata(pdev);
3303 if (!ohci) {
3304 printk(KERN_ERR "%s: tried to suspend nonexisting host\n",
3305 OHCI1394_DRIVER_NAME);
3306 return -ENXIO;
3308 DBGMSG("suspend called");
3310 /* Clear the async DMA contexts and stop using the controller */
3311 hpsb_bus_reset(ohci->host);
3313 /* See ohci1394_pci_remove() for comments on this sequence */
3314 reg_write(ohci, OHCI1394_ConfigROMhdr, 0);
3315 reg_write(ohci, OHCI1394_BusOptions,
3316 (reg_read(ohci, OHCI1394_BusOptions) & 0x0000f007) |
3317 0x00ff0000);
3318 reg_write(ohci, OHCI1394_IntMaskClear, 0xffffffff);
3319 reg_write(ohci, OHCI1394_IntEventClear, 0xffffffff);
3320 reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 0xffffffff);
3321 reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 0xffffffff);
3322 reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, 0xffffffff);
3323 reg_write(ohci, OHCI1394_IsoRecvIntEventClear, 0xffffffff);
3324 set_phy_reg(ohci, 4, ~0xc0 & get_phy_reg(ohci, 4));
3325 reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff);
3326 ohci_devctl(ohci->host, RESET_BUS, LONG_RESET_NO_FORCE_ROOT);
3327 ohci_soft_reset(ohci);
3329 err = pci_save_state(pdev);
3330 if (err) {
3331 PRINT(KERN_ERR, "pci_save_state failed with %d", err);
3332 return err;
3334 err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
3335 if (err)
3336 DBGMSG("pci_set_power_state failed with %d", err);
3338 /* PowerMac suspend code comes last */
3339 #ifdef CONFIG_PPC_PMAC
3340 if (machine_is(powermac)) {
3341 struct device_node *ofn = pci_device_to_OF_node(pdev);
3343 if (ofn)
3344 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 0);
3346 #endif /* CONFIG_PPC_PMAC */
3348 return 0;
3351 static int ohci1394_pci_resume(struct pci_dev *pdev)
3353 int err;
3354 struct ti_ohci *ohci = pci_get_drvdata(pdev);
3356 if (!ohci) {
3357 printk(KERN_ERR "%s: tried to resume nonexisting host\n",
3358 OHCI1394_DRIVER_NAME);
3359 return -ENXIO;
3361 DBGMSG("resume called");
3363 /* PowerMac resume code comes first */
3364 #ifdef CONFIG_PPC_PMAC
3365 if (machine_is(powermac)) {
3366 struct device_node *ofn = pci_device_to_OF_node(pdev);
3368 if (ofn)
3369 pmac_call_feature(PMAC_FTR_1394_ENABLE, ofn, 0, 1);
3371 #endif /* CONFIG_PPC_PMAC */
3373 pci_set_power_state(pdev, PCI_D0);
3374 pci_restore_state(pdev);
3375 err = pci_enable_device(pdev);
3376 if (err) {
3377 PRINT(KERN_ERR, "pci_enable_device failed with %d", err);
3378 return err;
3381 /* See ohci1394_pci_probe() for comments on this sequence */
3382 ohci_soft_reset(ohci);
3383 reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_LPS);
3384 reg_write(ohci, OHCI1394_IntEventClear, 0xffffffff);
3385 reg_write(ohci, OHCI1394_IntMaskClear, 0xffffffff);
3386 mdelay(50);
3387 ohci_initialize(ohci);
3389 hpsb_resume_host(ohci->host);
3390 return 0;
3392 #endif /* CONFIG_PM */
3394 static struct pci_device_id ohci1394_pci_tbl[] = {
3396 .class = PCI_CLASS_SERIAL_FIREWIRE_OHCI,
3397 .class_mask = PCI_ANY_ID,
3398 .vendor = PCI_ANY_ID,
3399 .device = PCI_ANY_ID,
3400 .subvendor = PCI_ANY_ID,
3401 .subdevice = PCI_ANY_ID,
3403 { 0, },
3406 MODULE_DEVICE_TABLE(pci, ohci1394_pci_tbl);
3408 static struct pci_driver ohci1394_pci_driver = {
3409 .name = OHCI1394_DRIVER_NAME,
3410 .id_table = ohci1394_pci_tbl,
3411 .probe = ohci1394_pci_probe,
3412 .remove = ohci1394_pci_remove,
3413 #ifdef CONFIG_PM
3414 .resume = ohci1394_pci_resume,
3415 .suspend = ohci1394_pci_suspend,
3416 #endif
3419 /***********************************
3420 * OHCI1394 Video Interface *
3421 ***********************************/
3423 /* essentially the only purpose of this code is to allow another
3424 module to hook into ohci's interrupt handler */
3426 /* returns zero if successful, one if DMA context is locked up */
3427 int ohci1394_stop_context(struct ti_ohci *ohci, int reg, char *msg)
3429 int i=0;
3431 /* stop the channel program if it's still running */
3432 reg_write(ohci, reg, 0x8000);
3434 /* Wait until it effectively stops */
3435 while (reg_read(ohci, reg) & 0x400) {
3436 i++;
3437 if (i>5000) {
3438 PRINT(KERN_ERR,
3439 "Runaway loop while stopping context: %s...", msg ? msg : "");
3440 return 1;
3443 mb();
3444 udelay(10);
3446 if (msg) PRINT(KERN_ERR, "%s: dma prg stopped", msg);
3447 return 0;
3450 void ohci1394_init_iso_tasklet(struct ohci1394_iso_tasklet *tasklet, int type,
3451 void (*func)(unsigned long), unsigned long data)
3453 tasklet_init(&tasklet->tasklet, func, data);
3454 tasklet->type = type;
3455 /* We init the tasklet->link field, so we can list_del() it
3456 * without worrying whether it was added to the list or not. */
3457 INIT_LIST_HEAD(&tasklet->link);
3460 int ohci1394_register_iso_tasklet(struct ti_ohci *ohci,
3461 struct ohci1394_iso_tasklet *tasklet)
3463 unsigned long flags, *usage;
3464 int n, i, r = -EBUSY;
3466 if (tasklet->type == OHCI_ISO_TRANSMIT) {
3467 n = ohci->nb_iso_xmit_ctx;
3468 usage = &ohci->it_ctx_usage;
3470 else {
3471 n = ohci->nb_iso_rcv_ctx;
3472 usage = &ohci->ir_ctx_usage;
3474 /* only one receive context can be multichannel (OHCI sec 10.4.1) */
3475 if (tasklet->type == OHCI_ISO_MULTICHANNEL_RECEIVE) {
3476 if (test_and_set_bit(0, &ohci->ir_multichannel_used)) {
3477 return r;
3482 spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
3484 for (i = 0; i < n; i++)
3485 if (!test_and_set_bit(i, usage)) {
3486 tasklet->context = i;
3487 list_add_tail(&tasklet->link, &ohci->iso_tasklet_list);
3488 r = 0;
3489 break;
3492 spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
3494 return r;
3497 void ohci1394_unregister_iso_tasklet(struct ti_ohci *ohci,
3498 struct ohci1394_iso_tasklet *tasklet)
3500 unsigned long flags;
3502 tasklet_kill(&tasklet->tasklet);
3504 spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
3506 if (tasklet->type == OHCI_ISO_TRANSMIT)
3507 clear_bit(tasklet->context, &ohci->it_ctx_usage);
3508 else {
3509 clear_bit(tasklet->context, &ohci->ir_ctx_usage);
3511 if (tasklet->type == OHCI_ISO_MULTICHANNEL_RECEIVE) {
3512 clear_bit(0, &ohci->ir_multichannel_used);
3516 list_del(&tasklet->link);
3518 spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
3521 EXPORT_SYMBOL(ohci1394_stop_context);
3522 EXPORT_SYMBOL(ohci1394_init_iso_tasklet);
3523 EXPORT_SYMBOL(ohci1394_register_iso_tasklet);
3524 EXPORT_SYMBOL(ohci1394_unregister_iso_tasklet);
3526 /***********************************
3527 * General module initialization *
3528 ***********************************/
3530 MODULE_AUTHOR("Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>");
3531 MODULE_DESCRIPTION("Driver for PCI OHCI IEEE-1394 controllers");
3532 MODULE_LICENSE("GPL");
3534 static void __exit ohci1394_cleanup (void)
3536 pci_unregister_driver(&ohci1394_pci_driver);
3539 static int __init ohci1394_init(void)
3541 return pci_register_driver(&ohci1394_pci_driver);
3544 module_init(ohci1394_init);
3545 module_exit(ohci1394_cleanup);