ohci1394.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:68k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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>
  6.  *
  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.
  11.  *
  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.
  16.  *
  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.
  20.  */
  21. /*
  22.  * Things known to be working:
  23.  * . Async Request Transmit
  24.  * . Async Response Receive
  25.  * . Async Request Receive
  26.  * . Async Response Transmit
  27.  * . Iso Receive
  28.  * . DMA mmap for iso receive
  29.  * . Config ROM generation
  30.  *
  31.  * Things implemented, but still in test phase:
  32.  * . Iso Transmit
  33.  * 
  34.  * Things not implemented:
  35.  * . Async Stream Packets
  36.  * . DMA error recovery
  37.  *
  38.  * Known bugs:
  39.  * . devctl BUS_RESET arg confusion (reset type or root holdoff?)
  40.  */
  41. /* 
  42.  * Acknowledgments:
  43.  *
  44.  * Adam J Richter <adam@yggdrasil.com>
  45.  *  . Use of pci_class to find device
  46.  *
  47.  * Andreas Tobler <toa@pop.agri.ch>
  48.  *  . Updated proc_fs calls
  49.  *
  50.  * Emilie Chung <emilie.chung@axis.com>
  51.  *  . Tip on Async Request Filter
  52.  *
  53.  * Pascal Drolet <pascal.drolet@informission.ca>
  54.  *  . Various tips for optimization and functionnalities
  55.  *
  56.  * Robert Ficklin <rficklin@westengineering.com>
  57.  *  . Loop in irq_handler
  58.  *
  59.  * James Goodwin <jamesg@Filanet.com>
  60.  *  . Various tips on initialization, self-id reception, etc.
  61.  *
  62.  * Albrecht Dress <ad@mpifr-bonn.mpg.de>
  63.  *  . Apple PowerBook detection
  64.  *
  65.  * Daniel Kobras <daniel.kobras@student.uni-tuebingen.de>
  66.  *  . Reset the board properly before leaving + misc cleanups
  67.  *
  68.  * Leon van Stuivenberg <leonvs@iae.nl>
  69.  *  . Bug fixes
  70.  *
  71.  * Ben Collins <bcollins@debian.org>
  72.  *  . Working big-endian support
  73.  *  . Updated to 2.4.x module scheme (PCI aswell)
  74.  *  . Removed procfs support since it trashes random mem
  75.  *  . Config ROM generation
  76.  */
  77. #include <linux/config.h>
  78. #include <linux/kernel.h>
  79. #include <linux/list.h>
  80. #include <linux/slab.h>
  81. #include <linux/interrupt.h>
  82. #include <linux/wait.h>
  83. #include <linux/errno.h>
  84. #include <linux/module.h>
  85. #include <linux/pci.h>
  86. #include <linux/fs.h>
  87. #include <linux/poll.h>
  88. #include <asm/byteorder.h>
  89. #include <asm/atomic.h>
  90. #include <asm/uaccess.h>
  91. #include <linux/tqueue.h>
  92. #include <linux/delay.h>
  93. #include <linux/spinlock.h>
  94. #include <asm/pgtable.h>
  95. #include <asm/page.h>
  96. #include <linux/sched.h>
  97. #include <linux/types.h>
  98. #include <linux/wrapper.h>
  99. #include <linux/vmalloc.h>
  100. #include <linux/init.h>
  101. #ifdef CONFIG_ALL_PPC
  102. #include <asm/machdep.h>
  103. #include <asm/pmac_feature.h>
  104. #include <asm/prom.h>
  105. #include <asm/pci-bridge.h>
  106. #endif
  107. #include "ieee1394.h"
  108. #include "ieee1394_types.h"
  109. #include "hosts.h"
  110. #include "ieee1394_core.h"
  111. #include "highlevel.h"
  112. #include "ohci1394.h"
  113. #ifdef CONFIG_IEEE1394_VERBOSEDEBUG
  114. #define OHCI1394_DEBUG
  115. #endif
  116. #ifdef DBGMSG
  117. #undef DBGMSG
  118. #endif
  119. #ifdef OHCI1394_DEBUG
  120. #define DBGMSG(card, fmt, args...) 
  121. printk(KERN_INFO "%s_%d: " fmt "n" , OHCI1394_DRIVER_NAME, card , ## args)
  122. #else
  123. #define DBGMSG(card, fmt, args...)
  124. #endif
  125. #ifdef CONFIG_IEEE1394_OHCI_DMA_DEBUG
  126. #define OHCI_DMA_ALLOC(fmt, args...) 
  127. HPSB_ERR("%s(%s)alloc(%d): "fmt, OHCI1394_DRIVER_NAME, __FUNCTION__, 
  128. ++global_outstanding_dmas, ## args)
  129. #define OHCI_DMA_FREE(fmt, args...) 
  130. HPSB_ERR("%s(%s)free(%d): "fmt, OHCI1394_DRIVER_NAME, __FUNCTION__, 
  131. --global_outstanding_dmas, ## args)
  132. u32 global_outstanding_dmas = 0;
  133. #else
  134. #define OHCI_DMA_ALLOC(fmt, args...)
  135. #define OHCI_DMA_FREE(fmt, args...)
  136. #endif
  137. /* print general (card independent) information */
  138. #define PRINT_G(level, fmt, args...) 
  139. printk(level "%s: " fmt "n" , OHCI1394_DRIVER_NAME , ## args)
  140. /* print card specific information */
  141. #define PRINT(level, card, fmt, args...) 
  142. printk(level "%s_%d: " fmt "n" , OHCI1394_DRIVER_NAME, card , ## args)
  143. static char version[] __devinitdata =
  144. "$Rev: 578 $ Ben Collins <bcollins@debian.org>";
  145. /* Module Parameters */
  146. MODULE_PARM(attempt_root,"i");
  147. MODULE_PARM_DESC(attempt_root, "Attempt to make the host root (default = 0).");
  148. static int attempt_root = 0;
  149. MODULE_PARM(phys_dma,"i");
  150. MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1).");
  151. static int phys_dma = 1;
  152. static void dma_trm_tasklet(unsigned long data);
  153. static void dma_trm_reset(struct dma_trm_ctx *d);
  154. static void ohci1394_pci_remove(struct pci_dev *pdev);
  155. #ifndef __LITTLE_ENDIAN
  156. /* Swap a series of quads inplace. */
  157. static __inline__ void block_swab32(quadlet_t *data, size_t size) {
  158. while (size--)
  159. data[size] = swab32(data[size]);
  160. }
  161. static unsigned hdr_sizes[] = 
  162. {
  163. 3, /* TCODE_WRITEQ */
  164. 4, /* TCODE_WRITEB */
  165. 3, /* TCODE_WRITE_RESPONSE */
  166. 0, /* ??? */
  167. 3, /* TCODE_READQ */
  168. 4, /* TCODE_READB */
  169. 3, /* TCODE_READQ_RESPONSE */
  170. 4, /* TCODE_READB_RESPONSE */
  171. 1, /* TCODE_CYCLE_START (???) */
  172. 4, /* TCODE_LOCK_REQUEST */
  173. 2, /* TCODE_ISO_DATA */
  174. 4, /* TCODE_LOCK_RESPONSE */
  175. };
  176. /* Swap headers */
  177. static inline void packet_swab(quadlet_t *data, int tcode, int len)
  178. {
  179. if (tcode > TCODE_LOCK_RESPONSE || hdr_sizes[tcode] == 0)
  180. return;
  181. block_swab32(data, hdr_sizes[tcode]);
  182. }
  183. #else
  184. /* Don't waste cycles on same sex byte swaps */
  185. #define packet_swab(w,x,y)
  186. #define block_swab32(x,y)
  187. #endif /* !LITTLE_ENDIAN */
  188. /***********************************
  189.  * IEEE-1394 functionality section *
  190.  ***********************************/
  191. static u8 get_phy_reg(struct ti_ohci *ohci, u8 addr) 
  192. {
  193. int i;
  194. unsigned long flags;
  195. quadlet_t r;
  196. spin_lock_irqsave (&ohci->phy_reg_lock, flags);
  197. reg_write(ohci, OHCI1394_PhyControl, (addr << 8) | 0x00008000);
  198. for (i = 0; i < OHCI_LOOP_COUNT; i++) {
  199. if (reg_read(ohci, OHCI1394_PhyControl) & 0x80000000)
  200. break;
  201. mdelay(1);
  202. }
  203. r = reg_read(ohci, OHCI1394_PhyControl);
  204. if (i >= OHCI_LOOP_COUNT)
  205. PRINT (KERN_ERR, ohci->id, "Get PHY Reg timeout [0x%08x/0x%08x/%d]",
  206.        r, r & 0x80000000, i);
  207.   
  208. spin_unlock_irqrestore (&ohci->phy_reg_lock, flags);
  209.      
  210. return (r & 0x00ff0000) >> 16;
  211. }
  212. static void set_phy_reg(struct ti_ohci *ohci, u8 addr, u8 data)
  213. {
  214. int i;
  215. unsigned long flags;
  216. u32 r = 0;
  217. spin_lock_irqsave (&ohci->phy_reg_lock, flags);
  218. reg_write(ohci, OHCI1394_PhyControl, (addr << 8) | data | 0x00004000);
  219. for (i = 0; i < OHCI_LOOP_COUNT; i++) {
  220. r = reg_read(ohci, OHCI1394_PhyControl);
  221. if (!(r & 0x00004000))
  222. break;
  223. mdelay(1);
  224. }
  225. if (i == OHCI_LOOP_COUNT)
  226. PRINT (KERN_ERR, ohci->id, "Set PHY Reg timeout [0x%08x/0x%08x/%d]",
  227.        r, r & 0x00004000, i);
  228. spin_unlock_irqrestore (&ohci->phy_reg_lock, flags);
  229. return;
  230. }
  231. /* Or's our value into the current value */
  232. static void set_phy_reg_mask(struct ti_ohci *ohci, u8 addr, u8 data)
  233. {
  234. u8 old;
  235. old = get_phy_reg (ohci, addr);
  236. old |= data;
  237. set_phy_reg (ohci, addr, old);
  238. return;
  239. }
  240. static void handle_selfid(struct ti_ohci *ohci, struct hpsb_host *host,
  241. int phyid, int isroot)
  242. {
  243. quadlet_t *q = ohci->selfid_buf_cpu;
  244. quadlet_t self_id_count=reg_read(ohci, OHCI1394_SelfIDCount);
  245. size_t size;
  246. quadlet_t q0, q1;
  247. /* Check status of self-id reception */
  248. if (ohci->selfid_swap)
  249. q0 = le32_to_cpu(q[0]);
  250. else
  251. q0 = q[0];
  252. if ((self_id_count & 0x80000000) || 
  253.     ((self_id_count & 0x00FF0000) != (q0 & 0x00FF0000))) {
  254. PRINT(KERN_ERR, ohci->id, 
  255.       "Error in reception of SelfID packets [0x%08x/0x%08x] (count: %d)",
  256.       self_id_count, q0, ohci->self_id_errors);
  257. /* Tip by James Goodwin <jamesg@Filanet.com>:
  258.  * We had an error, generate another bus reset in response.  */
  259. if (ohci->self_id_errors<OHCI1394_MAX_SELF_ID_ERRORS) {
  260. set_phy_reg_mask (ohci, 1, 0x40);
  261. ohci->self_id_errors++;
  262. } else {
  263. PRINT(KERN_ERR, ohci->id, 
  264.       "Too many errors on SelfID error reception, giving up!");
  265. }
  266. return;
  267. }
  268. /* SelfID Ok, reset error counter. */
  269. ohci->self_id_errors = 0;
  270. size = ((self_id_count & 0x00001FFC) >> 2) - 1;
  271. q++;
  272. while (size > 0) {
  273. if (ohci->selfid_swap) {
  274. q0 = le32_to_cpu(q[0]);
  275. q1 = le32_to_cpu(q[1]);
  276. } else {
  277. q0 = q[0];
  278. q1 = q[1];
  279. }
  280. if (q0 == ~q1) {
  281. DBGMSG (ohci->id, "SelfID packet 0x%x received", q0);
  282. hpsb_selfid_received(host, cpu_to_be32(q0));
  283. if (((q0 & 0x3f000000) >> 24) == phyid)
  284. DBGMSG (ohci->id, "SelfID for this node is 0x%08x", q0);
  285. } else {
  286. PRINT(KERN_ERR, ohci->id,
  287.       "SelfID is inconsistent [0x%08x/0x%08x]", q0, q1);
  288. }
  289. q += 2;
  290. size -= 2;
  291. }
  292. DBGMSG(ohci->id, "SelfID complete");
  293. hpsb_selfid_complete(host, phyid, isroot);
  294. return;
  295. }
  296. static void ohci_soft_reset(struct ti_ohci *ohci) {
  297. int i;
  298. reg_write(ohci, OHCI1394_HCControlSet, 0x00010000);
  299.   
  300. for (i = 0; i < OHCI_LOOP_COUNT; i++) {
  301. if (reg_read(ohci, OHCI1394_HCControlSet) & 0x00010000)
  302. break;
  303. mdelay(1);
  304. }
  305. DBGMSG (ohci->id, "Soft reset finished");
  306. }
  307. static int run_context(struct ti_ohci *ohci, int reg, char *msg)
  308. {
  309. u32 nodeId;
  310. /* check that the node id is valid */
  311. nodeId = reg_read(ohci, OHCI1394_NodeID);
  312. if (!(nodeId&0x80000000)) {
  313. PRINT(KERN_ERR, ohci->id, 
  314.       "Running dma failed because Node ID is not valid");
  315. return -1;
  316. }
  317. /* check that the node number != 63 */
  318. if ((nodeId&0x3f)==63) {
  319. PRINT(KERN_ERR, ohci->id, 
  320.       "Running dma failed because Node ID == 63");
  321. return -1;
  322. }
  323. /* Run the dma context */
  324. reg_write(ohci, reg, 0x8000);
  325. if (msg) PRINT(KERN_DEBUG, ohci->id, "%s", msg);
  326. return 0;
  327. }
  328. /* Generate the dma receive prgs and start the context */
  329. static void initialize_dma_rcv_ctx(struct dma_rcv_ctx *d, int generate_irq)
  330. {
  331. struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
  332. int i;
  333. ohci1394_stop_context(ohci, d->ctrlClear, NULL);
  334. for (i=0; i<d->num_desc; i++) {
  335. u32 c;
  336. c = DMA_CTL_INPUT_MORE | DMA_CTL_UPDATE | DMA_CTL_BRANCH;
  337. if (generate_irq)
  338. c |= DMA_CTL_IRQ;
  339. d->prg_cpu[i]->control = cpu_to_le32(c | d->buf_size);
  340. /* End of descriptor list? */
  341. if (i + 1 < d->num_desc) {
  342. d->prg_cpu[i]->branchAddress =
  343. cpu_to_le32((d->prg_bus[i+1] & 0xfffffff0) | 0x1);
  344. } else {
  345. d->prg_cpu[i]->branchAddress =
  346. cpu_to_le32((d->prg_bus[0] & 0xfffffff0));
  347. }
  348. d->prg_cpu[i]->address = cpu_to_le32(d->buf_bus[i]);
  349. d->prg_cpu[i]->status = cpu_to_le32(d->buf_size);
  350. }
  351.         d->buf_ind = 0;
  352.         d->buf_offset = 0;
  353. /* Tell the controller where the first AR program is */
  354. reg_write(ohci, d->cmdPtr, d->prg_bus[0] | 0x1);
  355. /* Run AR context */
  356. reg_write(ohci, d->ctrlSet, 0x00008000);
  357. DBGMSG(ohci->id, "Receive DMA ctx=%d initialized", d->ctx);
  358. }
  359. /* Initialize the dma transmit context */
  360. static void initialize_dma_trm_ctx(struct dma_trm_ctx *d)
  361. {
  362. struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
  363. /* Stop the context */
  364. ohci1394_stop_context(ohci, d->ctrlClear, NULL);
  365.         d->prg_ind = 0;
  366. d->sent_ind = 0;
  367. d->free_prgs = d->num_desc;
  368.         d->branchAddrPtr = NULL;
  369. INIT_LIST_HEAD(&d->fifo_list);
  370. INIT_LIST_HEAD(&d->pending_list);
  371. DBGMSG(ohci->id, "Transmit DMA ctx=%d initialized", d->ctx);
  372. }
  373. /* Count the number of available iso contexts */
  374. static int get_nb_iso_ctx(struct ti_ohci *ohci, int reg)
  375. {
  376. int i,ctx=0;
  377. u32 tmp;
  378. reg_write(ohci, reg, 0xffffffff);
  379. tmp = reg_read(ohci, reg);
  380. DBGMSG(ohci->id,"Iso contexts reg: %08x implemented: %08x", reg, tmp);
  381. /* Count the number of contexts */
  382. for(i=0; i<32; i++) {
  383.      if(tmp & 1) ctx++;
  384. tmp >>= 1;
  385. }
  386. return ctx;
  387. }
  388. static void ohci_init_config_rom(struct ti_ohci *ohci);
  389. /* Global initialization */
  390. static void ohci_initialize(struct ti_ohci *ohci)
  391. {
  392. quadlet_t buf;
  393. spin_lock_init(&ohci->phy_reg_lock);
  394. spin_lock_init(&ohci->event_lock);
  395.   
  396. /* Put some defaults to these undefined bus options */
  397. buf = reg_read(ohci, OHCI1394_BusOptions);
  398. buf |=  0xE0000000; /* Enable IRMC, CMC and ISC */
  399. buf &= ~0x00ff0000; /* XXX: Set cyc_clk_acc to zero for now */
  400. buf &= ~0x18000000; /* Disable PMC and BMC */
  401. reg_write(ohci, OHCI1394_BusOptions, buf);
  402. /* Set the bus number */
  403. reg_write(ohci, OHCI1394_NodeID, 0x0000ffc0);
  404. /* Enable posted writes */
  405. reg_write(ohci, OHCI1394_HCControlSet, 0x00040000);
  406. /* Clear link control register */
  407. reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff);
  408.   
  409. /* Enable cycle timer and cycle master and set the IRM
  410.  * contender bit in our self ID packets. */
  411. reg_write(ohci, OHCI1394_LinkControlSet, 0x00300000);
  412. set_phy_reg_mask(ohci, 4, 0xc0);
  413. /* Clear interrupt registers */
  414. reg_write(ohci, OHCI1394_IntMaskClear, 0xffffffff);
  415. reg_write(ohci, OHCI1394_IntEventClear, 0xffffffff);
  416. /* Set up self-id dma buffer */
  417. reg_write(ohci, OHCI1394_SelfIDBuffer, ohci->selfid_buf_bus);
  418. /* enable self-id dma */
  419. reg_write(ohci, OHCI1394_LinkControlSet, 0x00000200);
  420. /* Set the Config ROM mapping register */
  421. reg_write(ohci, OHCI1394_ConfigROMmap, ohci->csr_config_rom_bus);
  422. /* Initialize the Config ROM */
  423. ohci_init_config_rom(ohci);
  424. /* Now get our max packet size */
  425. ohci->max_packet_size = 
  426. 1<<(((reg_read(ohci, OHCI1394_BusOptions)>>12)&0xf)+1);
  427. /* Don't accept phy packets into AR request context */ 
  428. reg_write(ohci, OHCI1394_LinkControlClear, 0x00000400);
  429. /* Set bufferFill, isochHeader, multichannel for IR context */
  430. reg_write(ohci, OHCI1394_IsoRcvContextControlSet, 0xd0000000);
  431. /* Set the context match register to match on all tags */
  432. reg_write(ohci, OHCI1394_IsoRcvContextMatch, 0xf0000000);
  433. /* Clear the interrupt mask */
  434. reg_write(ohci, OHCI1394_IsoRecvIntMaskClear, 0xffffffff);
  435. reg_write(ohci, OHCI1394_IsoRecvIntEventClear, 0xffffffff);
  436. /* Clear the interrupt mask */
  437. reg_write(ohci, OHCI1394_IsoXmitIntMaskClear, 0xffffffff);
  438. reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 0xffffffff);
  439. /* Clear the multi channel mask high and low registers */
  440. reg_write(ohci, OHCI1394_IRMultiChanMaskHiClear, 0xffffffff);
  441. reg_write(ohci, OHCI1394_IRMultiChanMaskLoClear, 0xffffffff);
  442. /* Initialize AR dma */
  443. initialize_dma_rcv_ctx(&ohci->ar_req_context, 0);
  444. initialize_dma_rcv_ctx(&ohci->ar_resp_context, 0);
  445. /* Initialize AT dma */
  446. initialize_dma_trm_ctx(&ohci->at_req_context);
  447. initialize_dma_trm_ctx(&ohci->at_resp_context);
  448. /* Initialize IR dma */
  449. initialize_dma_rcv_ctx(&ohci->ir_context, 1);
  450.         /* Initialize IT dma */
  451.         initialize_dma_trm_ctx(&ohci->it_context);
  452. /* Set up isoRecvIntMask to generate interrupts for context 0
  453.    (thanks to Michael Greger for seeing that I forgot this) */
  454. reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, 0x00000001);
  455. /* Set up isoXmitIntMask to generate interrupts for context 0 */
  456. reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 0x00000001);
  457. /* 
  458.  * Accept AT requests from all nodes. This probably 
  459.  * will have to be controlled from the subsystem
  460.  * on a per node basis.
  461.  */
  462. reg_write(ohci,OHCI1394_AsReqFilterHiSet, 0x80000000);
  463. /* Specify AT retries */
  464. reg_write(ohci, OHCI1394_ATRetries, 
  465.   OHCI1394_MAX_AT_REQ_RETRIES |
  466.   (OHCI1394_MAX_AT_RESP_RETRIES<<4) |
  467.   (OHCI1394_MAX_PHYS_RESP_RETRIES<<8));
  468. /* We don't want hardware swapping */
  469. reg_write(ohci, OHCI1394_HCControlClear, 0x40000000);
  470. /* Enable interrupts */
  471. reg_write(ohci, OHCI1394_IntMaskSet, 
  472.   OHCI1394_masterIntEnable | 
  473.   OHCI1394_busReset | 
  474.   OHCI1394_selfIDComplete |
  475.   OHCI1394_RSPkt |
  476.   OHCI1394_RQPkt |
  477.   OHCI1394_respTxComplete |
  478.   OHCI1394_reqTxComplete |
  479.   OHCI1394_isochRx |
  480.   OHCI1394_isochTx |
  481.   OHCI1394_cycleInconsistent);
  482. /* Enable link */
  483. reg_write(ohci, OHCI1394_HCControlSet, 0x00020000);
  484. buf = reg_read(ohci, OHCI1394_Version);
  485. PRINT(KERN_INFO, ohci->id, "OHCI-1394 %d.%d (PCI): IRQ=[%d]  "
  486.       "MMIO=[%lx-%lx]  Max Packet=[%d]",
  487.       ((((buf) >> 16) & 0xf) + (((buf) >> 20) & 0xf) * 10),
  488.       ((((buf) >> 4) & 0xf) + ((buf) & 0xf) * 10), ohci->dev->irq,
  489.       pci_resource_start(ohci->dev, 0),
  490.       pci_resource_start(ohci->dev, 0) + OHCI1394_REGISTER_SIZE - 1,
  491.       ohci->max_packet_size);
  492. }
  493. /* 
  494.  * Insert a packet in the AT DMA fifo and generate the DMA prg
  495.  * FIXME: rewrite the program in order to accept packets crossing
  496.  *        page boundaries.
  497.  *        check also that a single dma descriptor doesn't cross a 
  498.  *        page boundary.
  499.  */
  500. static void insert_packet(struct ti_ohci *ohci,
  501.   struct dma_trm_ctx *d, struct hpsb_packet *packet)
  502. {
  503. u32 cycleTimer;
  504. int idx = d->prg_ind;
  505. DBGMSG(ohci->id, "Inserting packet for node %d, tlabel=%d, tcode=0x%x, speed=%d",
  506. packet->node_id, packet->tlabel, packet->tcode, packet->speed_code);
  507. d->prg_cpu[idx]->begin.address = 0;
  508. d->prg_cpu[idx]->begin.branchAddress = 0;
  509. if (d->type == DMA_CTX_ASYNC_RESP) {
  510. /* 
  511.  * For response packets, we need to put a timeout value in
  512.  * the 16 lower bits of the status... let's try 1 sec timeout 
  513.  */ 
  514. cycleTimer = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
  515. d->prg_cpu[idx]->begin.status = cpu_to_le32(
  516. (((((cycleTimer>>25)&0x7)+1)&0x7)<<13) | 
  517. ((cycleTimer&0x01fff000)>>12));
  518. DBGMSG(ohci->id, "cycleTimer: %08x timeStamp: %08x",
  519.        cycleTimer, d->prg_cpu[idx]->begin.status);
  520. } else 
  521. d->prg_cpu[idx]->begin.status = 0;
  522.         if ( (packet->type == hpsb_async) || (packet->type == hpsb_raw) ) {
  523.                 if (packet->type == hpsb_raw) {
  524. d->prg_cpu[idx]->data[0] = cpu_to_le32(OHCI1394_TCODE_PHY<<4);
  525.                         d->prg_cpu[idx]->data[1] = packet->header[0];
  526.                         d->prg_cpu[idx]->data[2] = packet->header[1];
  527.                 } else {
  528.                         d->prg_cpu[idx]->data[0] = packet->speed_code<<16 |
  529.                                 (packet->header[0] & 0xFFFF);
  530.                         d->prg_cpu[idx]->data[1] =
  531.                                 (packet->header[1] & 0xFFFF) | 
  532.                                 (packet->header[0] & 0xFFFF0000);
  533.                         d->prg_cpu[idx]->data[2] = packet->header[2];
  534.                         d->prg_cpu[idx]->data[3] = packet->header[3];
  535. packet_swab(d->prg_cpu[idx]->data, packet->tcode,
  536. packet->header_size>>2);
  537.                 }
  538.                 if (packet->data_size) { /* block transmit */
  539.                         d->prg_cpu[idx]->begin.control =
  540.                                 cpu_to_le32(DMA_CTL_OUTPUT_MORE |
  541.     DMA_CTL_IMMEDIATE | 0x10);
  542.                         d->prg_cpu[idx]->end.control =
  543.                                 cpu_to_le32(DMA_CTL_OUTPUT_LAST |
  544.     DMA_CTL_IRQ | 
  545.     DMA_CTL_BRANCH |
  546.     packet->data_size);
  547.                         /* 
  548.                          * Check that the packet data buffer
  549.                          * does not cross a page boundary.
  550.                          */
  551.                         if (cross_bound((unsigned long)packet->data, 
  552.                                         packet->data_size)>0) {
  553.                                 /* FIXME: do something about it */
  554.                                 PRINT(KERN_ERR, ohci->id,
  555.                                       "%s: packet data addr: %p size %Zd bytes "
  556.                                       "cross page boundary", __FUNCTION__,
  557.                                       packet->data, packet->data_size);
  558.                         }
  559.                         d->prg_cpu[idx]->end.address = cpu_to_le32(
  560.                                 pci_map_single(ohci->dev, packet->data,
  561.                                                packet->data_size,
  562.                                                PCI_DMA_TODEVICE));
  563. OHCI_DMA_ALLOC("single, block transmit packet");
  564.                         d->prg_cpu[idx]->end.branchAddress = 0;
  565.                         d->prg_cpu[idx]->end.status = 0;
  566.                         if (d->branchAddrPtr) 
  567.                                 *(d->branchAddrPtr) =
  568. cpu_to_le32(d->prg_bus[idx] | 0x3);
  569.                         d->branchAddrPtr =
  570.                                 &(d->prg_cpu[idx]->end.branchAddress);
  571.                 } else { /* quadlet transmit */
  572.                         if (packet->type == hpsb_raw)
  573.                                 d->prg_cpu[idx]->begin.control = 
  574. cpu_to_le32(DMA_CTL_OUTPUT_LAST |
  575.     DMA_CTL_IMMEDIATE |
  576.     DMA_CTL_IRQ | 
  577.     DMA_CTL_BRANCH |
  578.     (packet->header_size + 4));
  579.                         else
  580.                                 d->prg_cpu[idx]->begin.control =
  581. cpu_to_le32(DMA_CTL_OUTPUT_LAST |
  582.     DMA_CTL_IMMEDIATE |
  583.     DMA_CTL_IRQ | 
  584.     DMA_CTL_BRANCH |
  585.     packet->header_size);
  586.                         if (d->branchAddrPtr) 
  587.                                 *(d->branchAddrPtr) =
  588. cpu_to_le32(d->prg_bus[idx] | 0x2);
  589.                         d->branchAddrPtr =
  590.                                 &(d->prg_cpu[idx]->begin.branchAddress);
  591.                 }
  592.         } else { /* iso packet */
  593.                 d->prg_cpu[idx]->data[0] = packet->speed_code<<16 |
  594.                         (packet->header[0] & 0xFFFF);
  595.                 d->prg_cpu[idx]->data[1] = packet->header[0] & 0xFFFF0000;
  596. packet_swab(d->prg_cpu[idx]->data, packet->tcode, packet->header_size>>2);
  597.   
  598.                 d->prg_cpu[idx]->begin.control = 
  599. cpu_to_le32(DMA_CTL_OUTPUT_MORE | 
  600.     DMA_CTL_IMMEDIATE | 0x8);
  601.                 d->prg_cpu[idx]->end.control = 
  602. cpu_to_le32(DMA_CTL_OUTPUT_LAST |
  603.     DMA_CTL_UPDATE |
  604.     DMA_CTL_IRQ |
  605.     DMA_CTL_BRANCH |
  606.     packet->data_size);
  607.                 d->prg_cpu[idx]->end.address = cpu_to_le32(
  608. pci_map_single(ohci->dev, packet->data,
  609. packet->data_size, PCI_DMA_TODEVICE));
  610. OHCI_DMA_ALLOC("single, iso transmit packet");
  611.                 d->prg_cpu[idx]->end.branchAddress = 0;
  612.                 d->prg_cpu[idx]->end.status = 0;
  613.                 DBGMSG(ohci->id, "Iso xmit context info: header[%08x %08x]n"
  614.                        "                       begin=%08x %08x %08x %08xn"
  615.                        "                             %08x %08x %08x %08xn"
  616.                        "                       end  =%08x %08x %08x %08x",
  617.                        d->prg_cpu[idx]->data[0], d->prg_cpu[idx]->data[1],
  618.                        d->prg_cpu[idx]->begin.control,
  619.                        d->prg_cpu[idx]->begin.address,
  620.                        d->prg_cpu[idx]->begin.branchAddress,
  621.                        d->prg_cpu[idx]->begin.status,
  622.                        d->prg_cpu[idx]->data[0],
  623.                        d->prg_cpu[idx]->data[1],
  624.                        d->prg_cpu[idx]->data[2],
  625.                        d->prg_cpu[idx]->data[3],
  626.                        d->prg_cpu[idx]->end.control,
  627.                        d->prg_cpu[idx]->end.address,
  628.                        d->prg_cpu[idx]->end.branchAddress,
  629.                        d->prg_cpu[idx]->end.status);
  630.                 if (d->branchAddrPtr) 
  631.            *(d->branchAddrPtr) = cpu_to_le32(d->prg_bus[idx] | 0x3);
  632.                 d->branchAddrPtr = &(d->prg_cpu[idx]->end.branchAddress);
  633.         }
  634. d->free_prgs--;
  635. /* queue the packet in the appropriate context queue */
  636. list_add_tail(&packet->driver_list, &d->fifo_list);
  637. d->prg_ind = (d->prg_ind+1)%d->num_desc;
  638. }
  639. /*
  640.  * This function fills the AT FIFO with the (eventual) pending packets
  641.  * and runs or wakes up the AT DMA prg if necessary.
  642.  *
  643.  * The function MUST be called with the d->lock held.
  644.  */ 
  645. static int dma_trm_flush(struct ti_ohci *ohci, struct dma_trm_ctx *d)
  646. {
  647. struct hpsb_packet *p;
  648. int idx,z;
  649. if (list_empty(&d->pending_list) || d->free_prgs == 0)
  650. return 0;
  651. p = driver_packet(d->pending_list.next);
  652. idx = d->prg_ind;
  653. z = (p->data_size) ? 3 : 2;
  654. /* insert the packets into the at dma fifo */
  655. while (d->free_prgs > 0 && !list_empty(&d->pending_list)) {
  656. struct hpsb_packet *p = driver_packet(d->pending_list.next);
  657. list_del(&p->driver_list);
  658. insert_packet(ohci, d, p);
  659. }
  660. if (d->free_prgs == 0)
  661. PRINT(KERN_INFO, ohci->id, 
  662.       "Transmit DMA FIFO ctx=%d is full... waiting",d->ctx);
  663. /* Is the context running ? (should be unless it is 
  664.    the first packet to be sent in this context) */
  665. if (!(reg_read(ohci, d->ctrlSet) & 0x8000)) {
  666. DBGMSG(ohci->id,"Starting transmit DMA ctx=%d",d->ctx);
  667. reg_write(ohci, d->cmdPtr, d->prg_bus[idx]|z);
  668. run_context(ohci, d->ctrlSet, NULL);
  669. }
  670. else {
  671. /* Wake up the dma context if necessary */
  672. if (!(reg_read(ohci, d->ctrlSet) & 0x400)) {
  673. DBGMSG(ohci->id,"Waking transmit DMA ctx=%d",d->ctx);
  674. reg_write(ohci, d->ctrlSet, 0x1000);
  675. }
  676. }
  677. return 1;
  678. }
  679. /* Transmission of an async packet */
  680. static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
  681. {
  682. struct ti_ohci *ohci = host->hostdata;
  683. struct dma_trm_ctx *d;
  684. unsigned long flags;
  685. if (packet->data_size > ohci->max_packet_size) {
  686. PRINT(KERN_ERR, ohci->id, 
  687.       "Transmit packet size %Zd is too big",
  688.       packet->data_size);
  689. return 0;
  690. }
  691. /* Decide wether we have an iso, a request, or a response packet */
  692. if (packet->type == hpsb_raw)
  693. d = &ohci->at_req_context;
  694. else if (packet->tcode == TCODE_ISO_DATA)
  695. d = &ohci->it_context;
  696. else if (packet->tcode & 0x02)
  697. d = &ohci->at_resp_context;
  698. else 
  699. d = &ohci->at_req_context;
  700. spin_lock_irqsave(&d->lock,flags);
  701. list_add_tail(&packet->driver_list, &d->pending_list);
  702. dma_trm_flush(ohci, d);
  703. spin_unlock_irqrestore(&d->lock,flags);
  704. return 1;
  705. }
  706. static int ohci_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
  707. {
  708. struct ti_ohci *ohci = host->hostdata;
  709. int retval = 0;
  710. unsigned long flags;
  711. switch (cmd) {
  712. case RESET_BUS:
  713. DBGMSG(ohci->id, "devctl: Bus reset requested%s",
  714.        attempt_root ? " and attempting to become root" : "");
  715. set_phy_reg_mask (ohci, 1, 0x40 | (attempt_root ? 0x80 : 0));
  716. break;
  717. case GET_CYCLE_COUNTER:
  718. retval = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
  719. break;
  720. case SET_CYCLE_COUNTER:
  721. reg_write(ohci, OHCI1394_IsochronousCycleTimer, arg);
  722. break;
  723. case SET_BUS_ID:
  724. PRINT(KERN_ERR, ohci->id, "devctl command SET_BUS_ID err");
  725. break;
  726. case ACT_CYCLE_MASTER:
  727. if (arg) {
  728. /* check if we are root and other nodes are present */
  729. u32 nodeId = reg_read(ohci, OHCI1394_NodeID);
  730. if ((nodeId & (1<<30)) && (nodeId & 0x3f)) {
  731. /*
  732.  * enable cycleTimer, cycleMaster
  733.  */
  734. DBGMSG(ohci->id, "Cycle master enabled");
  735. reg_write(ohci, OHCI1394_LinkControlSet, 
  736.   0x00300000);
  737. }
  738. } else {
  739. /* disable cycleTimer, cycleMaster, cycleSource */
  740. reg_write(ohci, OHCI1394_LinkControlClear, 0x00700000);
  741. }
  742. break;
  743. case CANCEL_REQUESTS:
  744. DBGMSG(ohci->id, "Cancel request received");
  745. dma_trm_reset(&ohci->at_req_context);
  746. dma_trm_reset(&ohci->at_resp_context);
  747. break;
  748. case MODIFY_USAGE:
  749.                 if (arg) {
  750.                         MOD_INC_USE_COUNT;
  751.                 } else {
  752.                         MOD_DEC_USE_COUNT;
  753.                 }
  754. retval = 1;
  755.                 break;
  756. case ISO_LISTEN_CHANNEL:
  757.         {
  758. u64 mask;
  759. if (arg<0 || arg>63) {
  760. PRINT(KERN_ERR, ohci->id,
  761.       "%s: IS0 listen channel %d is out of range", 
  762.       __FUNCTION__, arg);
  763. return -EFAULT;
  764. }
  765. mask = (u64)0x1<<arg;
  766.                 spin_lock_irqsave(&ohci->IR_channel_lock, flags);
  767. if (ohci->ISO_channel_usage & mask) {
  768. PRINT(KERN_ERR, ohci->id,
  769.       "%s: IS0 listen channel %d is already used", 
  770.       __FUNCTION__, arg);
  771. spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
  772. return -EFAULT;
  773. }
  774. ohci->ISO_channel_usage |= mask;
  775. if (arg>31) 
  776. reg_write(ohci, OHCI1394_IRMultiChanMaskHiSet, 
  777.   1<<(arg-32));
  778. else
  779. reg_write(ohci, OHCI1394_IRMultiChanMaskLoSet, 
  780.   1<<arg);
  781.                 spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
  782.                 DBGMSG(ohci->id, "Listening enabled on channel %d", arg);
  783.                 break;
  784.         }
  785. case ISO_UNLISTEN_CHANNEL:
  786.         {
  787. u64 mask;
  788. if (arg<0 || arg>63) {
  789. PRINT(KERN_ERR, ohci->id,
  790.       "%s: IS0 unlisten channel %d is out of range", 
  791.       __FUNCTION__, arg);
  792. return -EFAULT;
  793. }
  794. mask = (u64)0x1<<arg;
  795.                 spin_lock_irqsave(&ohci->IR_channel_lock, flags);
  796. if (!(ohci->ISO_channel_usage & mask)) {
  797. PRINT(KERN_ERR, ohci->id,
  798.       "%s: IS0 unlisten channel %d is not used", 
  799.       __FUNCTION__, arg);
  800. spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
  801. return -EFAULT;
  802. }
  803. ohci->ISO_channel_usage &= ~mask;
  804. if (arg>31) 
  805. reg_write(ohci, OHCI1394_IRMultiChanMaskHiClear, 
  806.   1<<(arg-32));
  807. else
  808. reg_write(ohci, OHCI1394_IRMultiChanMaskLoClear, 
  809.   1<<arg);
  810.                 spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
  811.                 DBGMSG(ohci->id, "Listening disabled on channel %d", arg);
  812.                 break;
  813.         }
  814. default:
  815. PRINT_G(KERN_ERR, "ohci_devctl cmd %d not implemented yet",
  816. cmd);
  817. break;
  818. }
  819. return retval;
  820. }
  821. /***************************************
  822.  * IEEE-1394 functionality section END *
  823.  ***************************************/
  824. /********************************************************
  825.  * Global stuff (interrupt handler, init/shutdown code) *
  826.  ********************************************************/
  827. static void dma_trm_reset(struct dma_trm_ctx *d)
  828. {
  829. unsigned long flags;
  830. LIST_HEAD(packet_list);
  831. ohci1394_stop_context(d->ohci, d->ctrlClear, NULL);
  832. /* Lock the context, reset it and release it. Move the packets
  833.  * that were pending in the context to packet_list and free
  834.  * them after releasing the lock. */
  835. spin_lock_irqsave(&d->lock, flags);
  836. list_splice(&d->fifo_list, &packet_list);
  837. list_splice(&d->pending_list, &packet_list);
  838. INIT_LIST_HEAD(&d->fifo_list);
  839. INIT_LIST_HEAD(&d->pending_list);
  840. d->branchAddrPtr = NULL;
  841. d->sent_ind = d->prg_ind;
  842. d->free_prgs = d->num_desc;
  843. spin_unlock_irqrestore(&d->lock, flags);
  844. /* Now process subsystem callbacks for the packets from the
  845.  * context. */
  846. while (!list_empty(&packet_list)) {
  847. struct hpsb_packet *p = driver_packet(packet_list.next);
  848. PRINT(KERN_INFO, d->ohci->id, 
  849.       "AT dma reset ctx=%d, aborting transmission", d->ctx);
  850. list_del(&p->driver_list);
  851. hpsb_packet_sent(d->ohci->host, p, ACKX_ABORTED);
  852. }
  853. }
  854. static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci, 
  855.        quadlet_t rx_event,
  856.        quadlet_t tx_event)
  857. {
  858. struct list_head *lh;
  859. struct ohci1394_iso_tasklet *t;
  860. unsigned long mask;
  861. spin_lock(&ohci->iso_tasklet_list_lock);
  862. list_for_each(lh, &ohci->iso_tasklet_list) {
  863. t = list_entry(lh, struct ohci1394_iso_tasklet, link);
  864. mask = 1 << t->context;
  865. if (t->type == OHCI_ISO_TRANSMIT && tx_event & mask)
  866. tasklet_schedule(&t->tasklet);
  867. if (t->type == OHCI_ISO_RECEIVE && rx_event & mask)
  868. tasklet_schedule(&t->tasklet);
  869. }
  870. spin_unlock(&ohci->iso_tasklet_list_lock);
  871. }
  872. static void ohci_irq_handler(int irq, void *dev_id,
  873.                              struct pt_regs *regs_are_unused)
  874. {
  875. quadlet_t event, node_id;
  876. struct ti_ohci *ohci = (struct ti_ohci *)dev_id;
  877. struct hpsb_host *host = ohci->host;
  878. int phyid = -1, isroot = 0;
  879. unsigned long flags;
  880. /* Read and clear the interrupt event register.  Don't clear
  881.  * the busReset event, though, this is done when we get the
  882.  * selfIDComplete interrupt. */
  883. spin_lock_irqsave(&ohci->event_lock, flags);
  884. event = reg_read(ohci, OHCI1394_IntEventClear);
  885. reg_write(ohci, OHCI1394_IntEventClear, event & ~OHCI1394_busReset);
  886. spin_unlock_irqrestore(&ohci->event_lock, flags);
  887. if (!event) return;
  888. DBGMSG(ohci->id, "IntEvent: %08x", event);
  889. /* Die right here an now */
  890. if (event & OHCI1394_unrecoverableError) {
  891. PRINT(KERN_ERR, ohci->id, "Unrecoverable error, shutting down card!");
  892. return;
  893. }
  894. if (event & OHCI1394_cycleInconsistent) {
  895. /* We subscribe to the cycleInconsistent event only to
  896.  * clear the corresponding event bit... otherwise,
  897.  * isochronous cycleMatch DMA wont work. */
  898. DBGMSG(ohci->id, "OHCI1394_cycleInconsistent");
  899. event &= ~OHCI1394_cycleInconsistent;
  900. }
  901. if (event & OHCI1394_busReset) {
  902. /* The busReset event bit can't be cleared during the
  903.  * selfID phase, so we disable busReset interrupts, to
  904.  * avoid burying the cpu in interrupt requests. */
  905. spin_lock_irqsave(&ohci->event_lock, flags);
  906.    reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset);
  907. if (ohci->dev->vendor == PCI_VENDOR_ID_APPLE && 
  908.     ohci->dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) {
  909.    udelay(10);
  910.    while(reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) {
  911.    reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
  912. spin_unlock_irqrestore(&ohci->event_lock, flags);
  913.    udelay(10);
  914. spin_lock_irqsave(&ohci->event_lock, flags);
  915.    }
  916.    }
  917. spin_unlock_irqrestore(&ohci->event_lock, flags);
  918. if (!host->in_bus_reset) {
  919. DBGMSG(ohci->id, "irq_handler: Bus reset requested%s",
  920.       (attempt_root) ? " and attempting to become root"
  921.        : "");
  922. /* Subsystem call */
  923. hpsb_bus_reset(ohci->host);
  924. }
  925. event &= ~OHCI1394_busReset;
  926. }
  927. /* XXX: We need a way to also queue the OHCI1394_reqTxComplete,
  928.  * but for right now we simply run it upon reception, to make sure
  929.  * we get sent acks before response packets. This sucks mainly
  930.  * because it halts the interrupt handler.  */
  931. if (event & OHCI1394_reqTxComplete) {
  932. struct dma_trm_ctx *d = &ohci->at_req_context;
  933. DBGMSG(ohci->id, "Got reqTxComplete interrupt "
  934.        "status=0x%08X", reg_read(ohci, d->ctrlSet));
  935. if (reg_read(ohci, d->ctrlSet) & 0x800)
  936. ohci1394_stop_context(ohci, d->ctrlClear,
  937.       "reqTxComplete");
  938. else
  939. dma_trm_tasklet ((unsigned long)d);
  940. event &= ~OHCI1394_reqTxComplete;
  941. }
  942. if (event & OHCI1394_respTxComplete) {
  943. struct dma_trm_ctx *d = &ohci->at_resp_context;
  944. DBGMSG(ohci->id, "Got respTxComplete interrupt "
  945.        "status=0x%08X", reg_read(ohci, d->ctrlSet));
  946. if (reg_read(ohci, d->ctrlSet) & 0x800)
  947. ohci1394_stop_context(ohci, d->ctrlClear,
  948.       "respTxComplete");
  949. else
  950. tasklet_schedule(&d->task);
  951. event &= ~OHCI1394_respTxComplete;
  952. }
  953. if (event & OHCI1394_RQPkt) {
  954. struct dma_rcv_ctx *d = &ohci->ar_req_context;
  955. DBGMSG(ohci->id, "Got RQPkt interrupt status=0x%08X",
  956.        reg_read(ohci, d->ctrlSet));
  957. if (reg_read(ohci, d->ctrlSet) & 0x800)
  958. ohci1394_stop_context(ohci, d->ctrlClear, "RQPkt");
  959. else
  960. tasklet_schedule(&d->task);
  961. event &= ~OHCI1394_RQPkt;
  962. }
  963. if (event & OHCI1394_RSPkt) {
  964. struct dma_rcv_ctx *d = &ohci->ar_resp_context;
  965. DBGMSG(ohci->id, "Got RSPkt interrupt status=0x%08X",
  966.        reg_read(ohci, d->ctrlSet));
  967. if (reg_read(ohci, d->ctrlSet) & 0x800)
  968. ohci1394_stop_context(ohci, d->ctrlClear, "RSPkt");
  969. else
  970. tasklet_schedule(&d->task);
  971. event &= ~OHCI1394_RSPkt;
  972. }
  973. if (event & OHCI1394_isochRx) {
  974. quadlet_t rx_event;
  975. rx_event = reg_read(ohci, OHCI1394_IsoRecvIntEventSet);
  976. reg_write(ohci, OHCI1394_IsoRecvIntEventClear, rx_event);
  977. ohci_schedule_iso_tasklets(ohci, rx_event, 0);
  978. event &= ~OHCI1394_isochRx;
  979. }
  980. if (event & OHCI1394_isochTx) {
  981. quadlet_t tx_event;
  982. tx_event = reg_read(ohci, OHCI1394_IsoXmitIntEventSet);
  983. reg_write(ohci, OHCI1394_IsoXmitIntEventClear, tx_event);
  984. ohci_schedule_iso_tasklets(ohci, 0, tx_event);
  985. event &= ~OHCI1394_isochTx;
  986. }
  987. if (event & OHCI1394_selfIDComplete) {
  988. if (host->in_bus_reset) {
  989. node_id = reg_read(ohci, OHCI1394_NodeID); 
  990. /* If our nodeid is not valid, give a msec delay
  991.  * to let it settle in and try again.  */
  992. if (!(node_id & 0x80000000)) {
  993. mdelay(1);
  994. node_id = reg_read(ohci, OHCI1394_NodeID);
  995. }
  996. if (node_id & 0x80000000) { /* NodeID valid */
  997. phyid =  node_id & 0x0000003f;
  998. isroot = (node_id & 0x40000000) != 0;
  999. DBGMSG(ohci->id,
  1000.       "SelfID interrupt received "
  1001.       "(phyid %d, %s)", phyid, 
  1002.       (isroot ? "root" : "not root"));
  1003. handle_selfid(ohci, host, 
  1004.       phyid, isroot);
  1005. } else {
  1006. PRINT(KERN_ERR, ohci->id, 
  1007.       "SelfID interrupt received, but "
  1008.       "NodeID is not valid: %08X",
  1009.       node_id);
  1010. }
  1011. /* Accept Physical requests from all nodes. */
  1012. reg_write(ohci,OHCI1394_AsReqFilterHiSet, 
  1013.   0xffffffff);
  1014. reg_write(ohci,OHCI1394_AsReqFilterLoSet, 
  1015.   0xffffffff);
  1016. } else
  1017. PRINT(KERN_ERR, ohci->id, 
  1018.       "SelfID received outside of bus reset sequence");
  1019. /* Finally, we clear the busReset event and reenable
  1020.  * the busReset interrupt. */
  1021. spin_lock_irqsave(&ohci->event_lock, flags);
  1022. reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset);
  1023. reg_write(ohci, OHCI1394_IntMaskSet, OHCI1394_busReset); 
  1024. spin_unlock_irqrestore(&ohci->event_lock, flags);
  1025. event &= ~OHCI1394_selfIDComplete;
  1026. /* Turn on phys dma reception. We should
  1027.  * probably manage the filtering somehow, 
  1028.  * instead of blindly turning it on.  */
  1029. /*
  1030.  * CAUTION!
  1031.  * Some chips (TI TSB43AB22) won't take a value in
  1032.  * the PhyReqFilter register until after the IntEvent
  1033.  * is cleared for bus reset, and even then a short
  1034.  * delay is required.
  1035.  */
  1036. if (phys_dma) {
  1037. mdelay(1);
  1038. reg_write(ohci,OHCI1394_PhyReqFilterHiSet,
  1039.   0xffffffff);
  1040. reg_write(ohci,OHCI1394_PhyReqFilterLoSet,
  1041.   0xffffffff);
  1042. reg_write(ohci,OHCI1394_PhyUpperBound,
  1043.   0xffff0000);
  1044. }
  1045. DBGMSG(ohci->id, "PhyReqFilter=%08x%08xn",
  1046.        reg_read(ohci,OHCI1394_PhyReqFilterHiSet),
  1047.        reg_read(ohci,OHCI1394_PhyReqFilterLoSet));
  1048. }
  1049. /* Make sure we handle everything, just in case we accidentally
  1050.  * enabled an interrupt that we didn't write a handler for.  */
  1051. if (event)
  1052. PRINT(KERN_ERR, ohci->id, "Unhandled interrupt(s) 0x%08x",
  1053.       event);
  1054. }
  1055. /* Put the buffer back into the dma context */
  1056. static void insert_dma_buffer(struct dma_rcv_ctx *d, int idx)
  1057. {
  1058. struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
  1059. DBGMSG(ohci->id, "Inserting dma buf ctx=%d idx=%d", d->ctx, idx);
  1060. d->prg_cpu[idx]->status = cpu_to_le32(d->buf_size);
  1061. d->prg_cpu[idx]->branchAddress &= le32_to_cpu(0xfffffff0);
  1062. idx = (idx + d->num_desc - 1 ) % d->num_desc;
  1063. d->prg_cpu[idx]->branchAddress |= le32_to_cpu(0x00000001);
  1064. /* wake up the dma context if necessary */
  1065. if (!(reg_read(ohci, d->ctrlSet) & 0x400)) {
  1066. PRINT(KERN_INFO, ohci->id, 
  1067.       "Waking dma ctx=%d ... processing is probably too slow",
  1068.       d->ctx);
  1069. reg_write(ohci, d->ctrlSet, 0x1000);
  1070. }
  1071. }
  1072. #define cond_le32_to_cpu(data, noswap) 
  1073. (noswap ? data : le32_to_cpu(data))
  1074. static const int TCODE_SIZE[16] = {20, 0, 16, -1, 16, 20, 20, 0, 
  1075.     -1, 0, -1, 0, -1, -1, 16, -1};
  1076. /* 
  1077.  * Determine the length of a packet in the buffer
  1078.  * Optimization suggested by Pascal Drolet <pascal.drolet@informission.ca>
  1079.  */
  1080. static __inline__ int packet_length(struct dma_rcv_ctx *d, int idx, quadlet_t *buf_ptr,
  1081.  int offset, unsigned char tcode, int noswap)
  1082. {
  1083. int length = -1;
  1084. if (d->type == DMA_CTX_ASYNC_REQ || d->type == DMA_CTX_ASYNC_RESP) {
  1085. length = TCODE_SIZE[tcode];
  1086. if (length == 0) {
  1087. if (offset + 12 >= d->buf_size) {
  1088. length = (cond_le32_to_cpu(d->buf_cpu[(idx + 1) % d->num_desc]
  1089. [3 - ((d->buf_size - offset) >> 2)], noswap) >> 16);
  1090. } else {
  1091. length = (cond_le32_to_cpu(buf_ptr[3], noswap) >> 16);
  1092. }
  1093. length += 20;
  1094. }
  1095. } else if (d->type == DMA_CTX_ISO) {
  1096. /* Assumption: buffer fill mode with header/trailer */
  1097. length = (cond_le32_to_cpu(buf_ptr[0], noswap) >> 16) + 8;
  1098. }
  1099. if (length > 0 && length % 4)
  1100. length += 4 - (length % 4);
  1101. return length;
  1102. }
  1103. /* Tasklet that processes dma receive buffers */
  1104. static void dma_rcv_tasklet (unsigned long data)
  1105. {
  1106. struct dma_rcv_ctx *d = (struct dma_rcv_ctx*)data;
  1107. struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
  1108. unsigned int split_left, idx, offset, rescount;
  1109. unsigned char tcode;
  1110. int length, bytes_left, ack;
  1111. unsigned long flags;
  1112. quadlet_t *buf_ptr;
  1113. char *split_ptr;
  1114. char msg[256];
  1115. spin_lock_irqsave(&d->lock, flags);
  1116. idx = d->buf_ind;
  1117. offset = d->buf_offset;
  1118. buf_ptr = d->buf_cpu[idx] + offset/4;
  1119. rescount = le32_to_cpu(d->prg_cpu[idx]->status) & 0xffff;
  1120. bytes_left = d->buf_size - rescount - offset;
  1121. while (bytes_left > 0) {
  1122. tcode = (cond_le32_to_cpu(buf_ptr[0], ohci->no_swap_incoming) >> 4) & 0xf;
  1123. /* packet_length() will return < 4 for an error */
  1124. length = packet_length(d, idx, buf_ptr, offset, tcode, ohci->no_swap_incoming);
  1125. if (length < 4) { /* something is wrong */
  1126. sprintf(msg,"Unexpected tcode 0x%x(0x%08x) in AR ctx=%d, length=%d",
  1127. tcode, cond_le32_to_cpu(buf_ptr[0], ohci->no_swap_incoming),
  1128. d->ctx, length);
  1129. ohci1394_stop_context(ohci, d->ctrlClear, msg);
  1130. spin_unlock_irqrestore(&d->lock, flags);
  1131. return;
  1132. }
  1133. /* The first case is where we have a packet that crosses
  1134.  * over more than one descriptor. The next case is where
  1135.  * it's all in the first descriptor.  */
  1136. if ((offset + length) > d->buf_size) {
  1137. DBGMSG(ohci->id,"Split packet rcv'd");
  1138. if (length > d->split_buf_size) {
  1139. ohci1394_stop_context(ohci, d->ctrlClear,
  1140.      "Split packet size exceeded");
  1141. d->buf_ind = idx;
  1142. d->buf_offset = offset;
  1143. spin_unlock_irqrestore(&d->lock, flags);
  1144. return;
  1145. }
  1146. if (le32_to_cpu(d->prg_cpu[(idx+1)%d->num_desc]->status)
  1147.     == d->buf_size) {
  1148. /* Other part of packet not written yet.
  1149.  * this should never happen I think
  1150.  * anyway we'll get it on the next call.  */
  1151. PRINT(KERN_INFO, ohci->id,
  1152.       "Got only half a packet!");
  1153. d->buf_ind = idx;
  1154. d->buf_offset = offset;
  1155. spin_unlock_irqrestore(&d->lock, flags);
  1156. return;
  1157. }
  1158. split_left = length;
  1159. split_ptr = (char *)d->spb;
  1160. memcpy(split_ptr,buf_ptr,d->buf_size-offset);
  1161. split_left -= d->buf_size-offset;
  1162. split_ptr += d->buf_size-offset;
  1163. insert_dma_buffer(d, idx);
  1164. idx = (idx+1) % d->num_desc;
  1165. buf_ptr = d->buf_cpu[idx];
  1166. offset=0;
  1167. while (split_left >= d->buf_size) {
  1168. memcpy(split_ptr,buf_ptr,d->buf_size);
  1169. split_ptr += d->buf_size;
  1170. split_left -= d->buf_size;
  1171. insert_dma_buffer(d, idx);
  1172. idx = (idx+1) % d->num_desc;
  1173. buf_ptr = d->buf_cpu[idx];
  1174. }
  1175. if (split_left > 0) {
  1176. memcpy(split_ptr, buf_ptr, split_left);
  1177. offset = split_left;
  1178. buf_ptr += offset/4;
  1179. }
  1180. } else {
  1181. DBGMSG(ohci->id,"Single packet rcv'd");
  1182. memcpy(d->spb, buf_ptr, length);
  1183. offset += length;
  1184. buf_ptr += length/4;
  1185. if (offset==d->buf_size) {
  1186. insert_dma_buffer(d, idx);
  1187. idx = (idx+1) % d->num_desc;
  1188. buf_ptr = d->buf_cpu[idx];
  1189. offset=0;
  1190. }
  1191. }
  1192. /* We get one phy packet to the async descriptor for each
  1193.  * bus reset. We always ignore it.  */
  1194. if (tcode != OHCI1394_TCODE_PHY) {
  1195. if (!ohci->no_swap_incoming)
  1196. packet_swab(d->spb, tcode, (length - 4) >> 2);
  1197. DBGMSG(ohci->id, "Packet received from node"
  1198. " %d ack=0x%02X spd=%d tcode=0x%X"
  1199. " length=%d ctx=%d tlabel=%d",
  1200. (d->spb[1]>>16)&0x3f,
  1201. (cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>16)&0x1f,
  1202. (cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>21)&0x3,
  1203. tcode, length, d->ctx,
  1204. (cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>10)&0x3f);
  1205. ack = (((cond_le32_to_cpu(d->spb[length/4-1], ohci->no_swap_incoming)>>16)&0x1f)
  1206. == 0x11) ? 1 : 0;
  1207. hpsb_packet_received(ohci->host, d->spb, 
  1208.      length-4, ack);
  1209. }
  1210. #ifdef OHCI1394_DEBUG
  1211. else
  1212. PRINT (KERN_DEBUG, ohci->id, "Got phy packet ctx=%d ... discarded",
  1213.        d->ctx);
  1214. #endif
  1215.         rescount = le32_to_cpu(d->prg_cpu[idx]->status) & 0xffff;
  1216. bytes_left = d->buf_size - rescount - offset;
  1217. }
  1218. d->buf_ind = idx;
  1219. d->buf_offset = offset;
  1220. spin_unlock_irqrestore(&d->lock, flags);
  1221. }
  1222. /* Bottom half that processes sent packets */
  1223. static void dma_trm_tasklet (unsigned long data)
  1224. {
  1225. struct dma_trm_ctx *d = (struct dma_trm_ctx*)data;
  1226. struct ti_ohci *ohci = (struct ti_ohci*)(d->ohci);
  1227. struct hpsb_packet *packet;
  1228. unsigned long flags;
  1229. u32 ack;
  1230.         size_t datasize;
  1231. spin_lock_irqsave(&d->lock, flags);
  1232. while (!list_empty(&d->fifo_list)) {
  1233. packet = driver_packet(d->fifo_list.next);
  1234.                 datasize = packet->data_size;
  1235. if (datasize && packet->type != hpsb_raw)
  1236. ack = le32_to_cpu(
  1237. d->prg_cpu[d->sent_ind]->end.status) >> 16;
  1238. else 
  1239. ack = le32_to_cpu(
  1240. d->prg_cpu[d->sent_ind]->begin.status) >> 16;
  1241. if (ack == 0) 
  1242. /* this packet hasn't been sent yet*/
  1243. break;
  1244. if (!(ack & 0x10)) {
  1245. /* XXX: This is an OHCI evt_* code. We need to handle
  1246.  * this specially! For right now, we just fake an
  1247.  * ackx_send_error. */
  1248. PRINT(KERN_DEBUG, ohci->id, "Received OHCI evt_* error 0x%x",
  1249.        ack & 0xf);
  1250. ack = (ack & 0xffe0) | ACK_BUSY_A;
  1251. }
  1252. #ifdef OHCI1394_DEBUG
  1253. if (datasize)
  1254. DBGMSG(ohci->id,
  1255.        "Packet sent to node %d tcode=0x%X tLabel="
  1256.        "0x%02X ack=0x%X spd=%d dataLength=%d ctx=%d", 
  1257.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[1])
  1258.                                         >>16)&0x3f,
  1259.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
  1260.                                         >>4)&0xf,
  1261.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
  1262.                                         >>10)&0x3f,
  1263.                                 ack&0x1f, (ack>>5)&0x3, 
  1264.                                 le32_to_cpu(d->prg_cpu[d->sent_ind]->data[3])
  1265.                                         >>16,
  1266.                                 d->ctx);
  1267. else 
  1268. DBGMSG(ohci->id,
  1269.        "Packet sent to node %d tcode=0x%X tLabel="
  1270.        "0x%02X ack=0x%X spd=%d data=0x%08X ctx=%d", 
  1271.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[1])
  1272.                                         >>16)&0x3f,
  1273.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
  1274.                                         >>4)&0xf,
  1275.                                 (le32_to_cpu(d->prg_cpu[d->sent_ind]->data[0])
  1276.                                         >>10)&0x3f,
  1277.                                 ack&0x1f, (ack>>5)&0x3, 
  1278.                                 le32_to_cpu(d->prg_cpu[d->sent_ind]->data[3]),
  1279.                                 d->ctx);
  1280. #endif
  1281.                 list_del(&packet->driver_list);
  1282. hpsb_packet_sent(ohci->host, packet, ack & 0xf);
  1283. if (datasize) {
  1284. pci_unmap_single(ohci->dev, 
  1285.  cpu_to_le32(d->prg_cpu[d->sent_ind]->end.address),
  1286.  datasize, PCI_DMA_TODEVICE);
  1287. OHCI_DMA_FREE("single Xmit data packet");
  1288. }
  1289. d->sent_ind = (d->sent_ind+1)%d->num_desc;
  1290. d->free_prgs++;
  1291. }
  1292. dma_trm_flush(ohci, d);
  1293. spin_unlock_irqrestore(&d->lock, flags);
  1294. }
  1295. static void free_dma_rcv_ctx(struct dma_rcv_ctx *d)
  1296. {
  1297. int i;
  1298. if (d->ohci == NULL)
  1299. return;
  1300. DBGMSG(d->ohci->id, "Freeing dma_rcv_ctx %d", d->ctx);
  1301. ohci1394_stop_context(d->ohci, d->ctrlClear, NULL);
  1302. if (d->type == DMA_CTX_ISO)
  1303. ohci1394_unregister_iso_tasklet(d->ohci, &d->ohci->ir_tasklet);
  1304. else
  1305. tasklet_kill(&d->task);
  1306. if (d->buf_cpu) {
  1307. for (i=0; i<d->num_desc; i++)
  1308. if (d->buf_cpu[i] && d->buf_bus[i]) {
  1309. pci_free_consistent(
  1310. d->ohci->dev, d->buf_size, 
  1311. d->buf_cpu[i], d->buf_bus[i]);
  1312. OHCI_DMA_FREE("consistent dma_rcv buf[%d]", i);
  1313. }
  1314. kfree(d->buf_cpu);
  1315. kfree(d->buf_bus);
  1316. }
  1317. if (d->prg_cpu) {
  1318. for (i=0; i<d->num_desc; i++) 
  1319. if (d->prg_cpu[i] && d->prg_bus[i]) {
  1320. pci_free_consistent(
  1321. d->ohci->dev, sizeof(struct dma_cmd), 
  1322. d->prg_cpu[i], d->prg_bus[i]);
  1323. OHCI_DMA_FREE("consistent dma_rcv prg[%d]", i);
  1324. }
  1325. kfree(d->prg_cpu);
  1326. kfree(d->prg_bus);
  1327. }
  1328. if (d->spb) kfree(d->spb);
  1329. /* Mark this context as freed. */
  1330. d->ohci = NULL;
  1331. }
  1332. static int
  1333. alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d,
  1334.   enum context_type type, int ctx, int num_desc,
  1335.   int buf_size, int split_buf_size, int context_base)
  1336. {
  1337. int i;
  1338. d->ohci = ohci;
  1339. d->type = type;
  1340. d->ctx = ctx;
  1341. d->num_desc = num_desc;
  1342. d->buf_size = buf_size;
  1343. d->split_buf_size = split_buf_size;
  1344. d->ctrlSet = context_base + OHCI1394_ContextControlSet;
  1345. d->ctrlClear = context_base + OHCI1394_ContextControlClear;
  1346. d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
  1347. d->buf_cpu = kmalloc(d->num_desc * sizeof(quadlet_t*), GFP_KERNEL);
  1348. d->buf_bus = kmalloc(d->num_desc * sizeof(dma_addr_t), GFP_KERNEL);
  1349. if (d->buf_cpu == NULL || d->buf_bus == NULL) {
  1350. PRINT(KERN_ERR, ohci->id, "Failed to allocate dma buffer");
  1351. free_dma_rcv_ctx(d);
  1352. return -ENOMEM;
  1353. }
  1354. memset(d->buf_cpu, 0, d->num_desc * sizeof(quadlet_t*));
  1355. memset(d->buf_bus, 0, d->num_desc * sizeof(dma_addr_t));
  1356. d->prg_cpu = kmalloc(d->num_desc * sizeof(struct dma_cmd*), 
  1357.      GFP_KERNEL);
  1358. d->prg_bus = kmalloc(d->num_desc * sizeof(dma_addr_t), GFP_KERNEL);
  1359. if (d->prg_cpu == NULL || d->prg_bus == NULL) {
  1360. PRINT(KERN_ERR, ohci->id, "Failed to allocate dma prg");
  1361. free_dma_rcv_ctx(d);
  1362. return -ENOMEM;
  1363. }
  1364. memset(d->prg_cpu, 0, d->num_desc * sizeof(struct dma_cmd*));
  1365. memset(d->prg_bus, 0, d->num_desc * sizeof(dma_addr_t));
  1366. d->spb = kmalloc(d->split_buf_size, GFP_KERNEL);
  1367. if (d->spb == NULL) {
  1368. PRINT(KERN_ERR, ohci->id, "Failed to allocate split buffer");
  1369. free_dma_rcv_ctx(d);
  1370. return -ENOMEM;
  1371. }
  1372. for (i=0; i<d->num_desc; i++) {
  1373. d->buf_cpu[i] = pci_alloc_consistent(ohci->dev, 
  1374.      d->buf_size,
  1375.      d->buf_bus+i);
  1376. OHCI_DMA_ALLOC("consistent dma_rcv buf[%d]", i);
  1377. if (d->buf_cpu[i] != NULL) {
  1378. memset(d->buf_cpu[i], 0, d->buf_size);
  1379. } else {
  1380. PRINT(KERN_ERR, ohci->id, 
  1381.       "Failed to allocate dma buffer");
  1382. free_dma_rcv_ctx(d);
  1383. return -ENOMEM;
  1384. }
  1385.                 d->prg_cpu[i] = pci_alloc_consistent(ohci->dev, 
  1386.      sizeof(struct dma_cmd),
  1387.      d->prg_bus+i);
  1388. OHCI_DMA_ALLOC("consistent dma_rcv prg[%d]", i);
  1389.                 if (d->prg_cpu[i] != NULL) {
  1390.                         memset(d->prg_cpu[i], 0, sizeof(struct dma_cmd));
  1391. } else {
  1392. PRINT(KERN_ERR, ohci->id, 
  1393.       "Failed to allocate dma prg");
  1394. free_dma_rcv_ctx(d);
  1395. return -ENOMEM;
  1396. }
  1397. }
  1398.         spin_lock_init(&d->lock);
  1399. if (type == DMA_CTX_ISO) {
  1400. ohci1394_init_iso_tasklet(&ohci->ir_tasklet, OHCI_ISO_RECEIVE,
  1401.   dma_rcv_tasklet, (unsigned long) d);
  1402. if (ohci1394_register_iso_tasklet(ohci,
  1403.   &ohci->ir_tasklet) < 0) {
  1404. PRINT(KERN_ERR, ohci->id, "No IR DMA context available");
  1405. free_dma_rcv_ctx(d);
  1406. return -EBUSY;
  1407. }
  1408. }
  1409. else
  1410. tasklet_init (&d->task, dma_rcv_tasklet, (unsigned long) d);
  1411. return 0;
  1412. }
  1413. static void free_dma_trm_ctx(struct dma_trm_ctx *d)
  1414. {
  1415. int i;
  1416. if (d->ohci == NULL)
  1417. return;
  1418. DBGMSG(d->ohci->id, "Freeing dma_trm_ctx %d", d->ctx);
  1419. ohci1394_stop_context(d->ohci, d->ctrlClear, NULL);
  1420. if (d->type == DMA_CTX_ISO)
  1421. ohci1394_unregister_iso_tasklet(d->ohci, &d->ohci->it_tasklet);
  1422. else
  1423. tasklet_kill(&d->task);
  1424. if (d->prg_cpu) {
  1425. for (i=0; i<d->num_desc; i++) 
  1426. if (d->prg_cpu[i] && d->prg_bus[i]) {
  1427. pci_free_consistent(
  1428. d->ohci->dev, sizeof(struct at_dma_prg), 
  1429. d->prg_cpu[i], d->prg_bus[i]);
  1430. OHCI_DMA_FREE("consistent dma_trm prg[%d]", i);
  1431. }
  1432. kfree(d->prg_cpu);
  1433. kfree(d->prg_bus);
  1434. }
  1435. /* Mark this context as freed. */
  1436. d->ohci = NULL;
  1437. }
  1438. static int
  1439. alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d,
  1440.   enum context_type type, int ctx, int num_desc,
  1441.   int context_base)
  1442. {
  1443. int i;
  1444. d->ohci = ohci;
  1445. d->type = type;
  1446. d->ctx = ctx;
  1447. d->num_desc = num_desc;
  1448. d->ctrlSet = context_base + OHCI1394_ContextControlSet;
  1449. d->ctrlClear = context_base + OHCI1394_ContextControlClear;
  1450. d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
  1451. d->prg_cpu = kmalloc(d->num_desc * sizeof(struct at_dma_prg*), 
  1452.      GFP_KERNEL);
  1453. d->prg_bus = kmalloc(d->num_desc * sizeof(dma_addr_t), GFP_KERNEL);
  1454. if (d->prg_cpu == NULL || d->prg_bus == NULL) {
  1455. PRINT(KERN_ERR, ohci->id, "Failed to allocate at dma prg");
  1456. free_dma_trm_ctx(d);
  1457. return -ENOMEM;
  1458. }
  1459. memset(d->prg_cpu, 0, d->num_desc * sizeof(struct at_dma_prg*));
  1460. memset(d->prg_bus, 0, d->num_desc * sizeof(dma_addr_t));
  1461. for (i = 0; i < d->num_desc; i++) {
  1462.                 d->prg_cpu[i] = pci_alloc_consistent(ohci->dev, 
  1463.      sizeof(struct at_dma_prg),
  1464.      d->prg_bus+i);
  1465. OHCI_DMA_ALLOC("consistent dma_trm prg[%d]", i);
  1466.                 if (d->prg_cpu[i] != NULL) {
  1467.                         memset(d->prg_cpu[i], 0, sizeof(struct at_dma_prg));
  1468. } else {
  1469. PRINT(KERN_ERR, ohci->id, 
  1470.       "Failed to allocate at dma prg");
  1471. free_dma_trm_ctx(d);
  1472. return -ENOMEM;
  1473. }
  1474. }
  1475.         spin_lock_init(&d->lock);
  1476. /* initialize tasklet */
  1477. if (type == DMA_CTX_ISO) {
  1478. ohci1394_init_iso_tasklet(&ohci->it_tasklet, OHCI_ISO_TRANSMIT,
  1479.   dma_rcv_tasklet, (unsigned long) d);
  1480. if (ohci1394_register_iso_tasklet(ohci,
  1481.   &ohci->it_tasklet) < 0) {
  1482. PRINT(KERN_ERR, ohci->id, "No IT DMA context available");
  1483. free_dma_trm_ctx(d);
  1484. return -EBUSY;
  1485. }
  1486. }
  1487. else
  1488. tasklet_init (&d->task, dma_trm_tasklet, (unsigned long)d);
  1489. return 0;
  1490. }
  1491. static u16 ohci_crc16 (u32 *ptr, int length)
  1492. {
  1493. int shift;
  1494. u32 crc, sum, data;
  1495. crc = 0;
  1496. for (; length > 0; length--) {
  1497. data = be32_to_cpu(*ptr++);
  1498. for (shift = 28; shift >= 0; shift -= 4) {
  1499. sum = ((crc >> 12) ^ (data >> shift)) & 0x000f;
  1500. crc = (crc << 4) ^ (sum << 12) ^ (sum << 5) ^ sum;
  1501. }
  1502. crc &= 0xffff;
  1503. }
  1504. return crc;
  1505. }
  1506. /* Config ROM macro implementation influenced by NetBSD OHCI driver */
  1507. struct config_rom_unit {
  1508. u32 *start;
  1509. u32 *refer;
  1510. int length;
  1511. int refunit;
  1512. };
  1513. struct config_rom_ptr {
  1514. u32 *data;
  1515. int unitnum;
  1516. struct config_rom_unit unitdir[10];
  1517. };
  1518. #define cf_put_1quad(cr, q) (((cr)->data++)[0] = cpu_to_be32(q))
  1519. #define cf_put_4bytes(cr, b1, b2, b3, b4) 
  1520. (((cr)->data++)[0] = cpu_to_be32(((b1) << 24) | ((b2) << 16) | ((b3) << 8) | (b4)))
  1521. #define cf_put_keyval(cr, key, val) (((cr)->data++)[0] = cpu_to_be32(((key) << 24) | (val)))
  1522. static inline void cf_put_str(struct config_rom_ptr *cr, const char *str)
  1523. {
  1524. int t;
  1525. char fourb[4];
  1526. while (str[0]) {
  1527. memset(fourb, 0, 4);
  1528. for (t = 0; t < 4 && str[t]; t++)
  1529. fourb[t] = str[t];
  1530. cf_put_4bytes(cr, fourb[0], fourb[1], fourb[2], fourb[3]);
  1531. str += strlen(str) < 4 ? strlen(str) : 4;
  1532. }
  1533. return;
  1534. }
  1535. static inline void cf_put_crc16(struct config_rom_ptr *cr, int unit)
  1536. {
  1537. *cr->unitdir[unit].start =
  1538. cpu_to_be32((cr->unitdir[unit].length << 16) |
  1539.     ohci_crc16(cr->unitdir[unit].start + 1,
  1540.        cr->unitdir[unit].length));
  1541. }
  1542. static inline void cf_unit_begin(struct config_rom_ptr *cr, int unit)
  1543. {
  1544. if (cr->unitdir[unit].refer != NULL) {
  1545. *cr->unitdir[unit].refer |=
  1546. cpu_to_be32 (cr->data - cr->unitdir[unit].refer);
  1547. cf_put_crc16(cr, cr->unitdir[unit].refunit);
  1548. }
  1549. cr->unitnum = unit;
  1550. cr->unitdir[unit].start = cr->data++;
  1551. }
  1552. static inline void cf_put_refer(struct config_rom_ptr *cr, char key, int unit)
  1553. {
  1554. cr->unitdir[unit].refer = cr->data;
  1555. cr->unitdir[unit].refunit = cr->unitnum;
  1556. (cr->data++)[0] = cpu_to_be32(key << 24);
  1557. }
  1558. static inline void cf_unit_end(struct config_rom_ptr *cr)
  1559. {
  1560. cr->unitdir[cr->unitnum].length = cr->data -
  1561. (cr->unitdir[cr->unitnum].start + 1);
  1562. cf_put_crc16(cr, cr->unitnum);
  1563. }
  1564. /* End of NetBSD derived code.  */
  1565. static void ohci_init_config_rom(struct ti_ohci *ohci)
  1566. {
  1567. struct config_rom_ptr cr;
  1568. memset(&cr, 0, sizeof(cr));
  1569. memset(ohci->csr_config_rom_cpu, 0, sizeof (ohci->csr_config_rom_cpu));
  1570. cr.data = ohci->csr_config_rom_cpu;
  1571. /* Bus info block */
  1572. cf_unit_begin(&cr, 0);
  1573. cf_put_1quad(&cr, reg_read(ohci, OHCI1394_BusID));
  1574. cf_put_1quad(&cr, reg_read(ohci, OHCI1394_BusOptions));
  1575. cf_put_1quad(&cr, reg_read(ohci, OHCI1394_GUIDHi));
  1576. cf_put_1quad(&cr, reg_read(ohci, OHCI1394_GUIDLo));
  1577. cf_unit_end(&cr);
  1578. DBGMSG(ohci->id, "GUID: %08x:%08x", reg_read(ohci, OHCI1394_GUIDHi),
  1579. reg_read(ohci, OHCI1394_GUIDLo));
  1580. /* IEEE P1212 suggests the initial ROM header CRC should only
  1581.  * cover the header itself (and not the entire ROM). Since we do
  1582.  * this, then we can make our bus_info_len the same as the CRC
  1583.  * length.  */
  1584. ohci->csr_config_rom_cpu[0] |= cpu_to_be32(
  1585. (be32_to_cpu(ohci->csr_config_rom_cpu[0]) & 0x00ff0000) << 8);
  1586. reg_write(ohci, OHCI1394_ConfigROMhdr,
  1587.   be32_to_cpu(ohci->csr_config_rom_cpu[0]));
  1588. /* Root directory */
  1589. cf_unit_begin(&cr, 1);
  1590. /* Vendor ID */
  1591. cf_put_keyval(&cr, 0x03, reg_read(ohci,OHCI1394_VendorID) & 0xFFFFFF);
  1592. cf_put_refer(&cr, 0x81, 2); /* Textual description unit */
  1593. cf_put_keyval(&cr, 0x0c, 0x0083c0); /* Node capabilities */
  1594. /* NOTE: Add other unit referers here, and append at bottom */
  1595. cf_unit_end(&cr);
  1596. /* Textual description - "Linux 1394" */
  1597. cf_unit_begin(&cr, 2);
  1598. cf_put_keyval(&cr, 0, 0);
  1599. cf_put_1quad(&cr, 0);
  1600. cf_put_str(&cr, "Linux OHCI-1394");
  1601. cf_unit_end(&cr);
  1602. ohci->csr_config_rom_length = cr.data - ohci->csr_config_rom_cpu;
  1603. }
  1604. static size_t ohci_get_rom(struct hpsb_host *host, const quadlet_t **ptr)
  1605. {
  1606. struct ti_ohci *ohci=host->hostdata;
  1607. DBGMSG(ohci->id, "request csr_rom address: %p",
  1608. ohci->csr_config_rom_cpu);
  1609. *ptr = ohci->csr_config_rom_cpu;
  1610. return ohci->csr_config_rom_length * 4;
  1611. }
  1612. static quadlet_t ohci_hw_csr_reg(struct hpsb_host *host, int reg,
  1613.                                  quadlet_t data, quadlet_t compare)
  1614. {
  1615. struct ti_ohci *ohci = host->hostdata;
  1616. int i;
  1617. reg_write(ohci, OHCI1394_CSRData, data);
  1618. reg_write(ohci, OHCI1394_CSRCompareData, compare);
  1619. reg_write(ohci, OHCI1394_CSRControl, reg & 0x3);
  1620. for (i = 0; i < OHCI_LOOP_COUNT; i++) {
  1621. if (reg_read(ohci, OHCI1394_CSRControl) & 0x80000000)
  1622. break;
  1623. mdelay(1);
  1624. }
  1625. return reg_read(ohci, OHCI1394_CSRData);
  1626. }
  1627. static struct hpsb_host_driver ohci1394_driver = {
  1628. .name = OHCI1394_DRIVER_NAME,
  1629. .get_rom = ohci_get_rom,
  1630. .transmit_packet = ohci_transmit,
  1631. .devctl = ohci_devctl,
  1632. .hw_csr_reg = ohci_hw_csr_reg,
  1633. };
  1634. /***********************************
  1635.  * PCI Driver Interface functions  *
  1636.  ***********************************/
  1637. #define FAIL(err, fmt, args...)
  1638. do {
  1639. PRINT_G(KERN_ERR, fmt , ## args);
  1640.         ohci1394_pci_remove(dev);               
  1641. return err;
  1642. } while(0)
  1643. static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
  1644. const struct pci_device_id *ent)
  1645. {
  1646. static unsigned int card_id_counter = 0;
  1647. static int version_printed = 0;
  1648. struct hpsb_host *host;
  1649. struct ti_ohci *ohci; /* shortcut to currently handled device */
  1650. unsigned long ohci_base;
  1651. if (version_printed++ == 0)
  1652. PRINT_G(KERN_INFO, "%s", version);
  1653.         if (pci_enable_device(dev))
  1654. FAIL(-ENXIO, "Failed to enable OHCI hardware %d",
  1655.         card_id_counter++);
  1656.         pci_set_master(dev);
  1657. host = hpsb_alloc_host(&ohci1394_driver, sizeof(struct ti_ohci));
  1658. if (!host) FAIL(-ENOMEM, "Failed to allocate host structure");
  1659. ohci = host->hostdata;
  1660. ohci->id = card_id_counter++;
  1661. ohci->dev = dev;
  1662. ohci->host = host;
  1663. ohci->init_state = OHCI_INIT_ALLOC_HOST;
  1664. host->pdev = dev;
  1665. pci_set_drvdata(dev, ohci);
  1666. /* We don't want hardware swapping */
  1667. pci_write_config_dword(dev, OHCI1394_PCI_HCI_Control, 0);
  1668. /* Some oddball Apple controllers do not order the selfid
  1669.  * properly, so we make up for it here.  */
  1670. #ifndef __LITTLE_ENDIAN
  1671. /* XXX: Need a better way to check this. I'm wondering if we can
  1672.  * read the values of the OHCI1394_PCI_HCI_Control and the
  1673.  * noByteSwapData registers to see if they were not cleared to
  1674.  * zero. Should this work? Obviously it's not defined what these
  1675.  * registers will read when they aren't supported. Bleh! */
  1676. if (dev->vendor == PCI_VENDOR_ID_APPLE && 
  1677.     dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) {
  1678. ohci->no_swap_incoming = 1;
  1679. ohci->selfid_swap = 0;
  1680. } else
  1681. ohci->selfid_swap = 1;
  1682. #endif
  1683. /* We hardwire the MMIO length, since some CardBus adaptors
  1684.  * fail to report the right length.  Anyway, the ohci spec
  1685.  * clearly says it's 2kb, so this shouldn't be a problem. */ 
  1686. ohci_base = pci_resource_start(dev, 0);
  1687. if (pci_resource_len(dev, 0) != OHCI1394_REGISTER_SIZE)
  1688. PRINT(KERN_WARNING, ohci->id, "Unexpected PCI resource length of %lx!",
  1689.       pci_resource_len(dev, 0));
  1690. /* Seems PCMCIA handles this internally. Not sure why. Seems
  1691.  * pretty bogus to force a driver to special case this.  */
  1692. #ifndef PCMCIA
  1693. if (!request_mem_region (ohci_base, OHCI1394_REGISTER_SIZE, OHCI1394_DRIVER_NAME))
  1694. FAIL(-ENOMEM, "MMIO resource (0x%lx - 0x%lx) unavailable",
  1695.      ohci_base, ohci_base + OHCI1394_REGISTER_SIZE);
  1696. #endif
  1697. ohci->init_state = OHCI_INIT_HAVE_MEM_REGION;
  1698. ohci->registers = ioremap(ohci_base, OHCI1394_REGISTER_SIZE);
  1699. if (ohci->registers == NULL)
  1700. FAIL(-ENXIO, "Failed to remap registers - card not accessible");
  1701. ohci->init_state = OHCI_INIT_HAVE_IOMAPPING;
  1702. DBGMSG(ohci->id, "Remapped memory spaces reg 0x%p", ohci->registers);
  1703. /* csr_config rom allocation */
  1704. ohci->csr_config_rom_cpu =
  1705. pci_alloc_consistent(ohci->dev, OHCI_CONFIG_ROM_LEN,
  1706.      &ohci->csr_config_rom_bus);
  1707. OHCI_DMA_ALLOC("consistent csr_config_rom");
  1708. if (ohci->csr_config_rom_cpu == NULL)
  1709. FAIL(-ENOMEM, "Failed to allocate buffer config rom");
  1710. ohci->init_state = OHCI_INIT_HAVE_CONFIG_ROM_BUFFER;
  1711. /* self-id dma buffer allocation */
  1712. ohci->selfid_buf_cpu = 
  1713. pci_alloc_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE,
  1714.                       &ohci->selfid_buf_bus);
  1715. OHCI_DMA_ALLOC("consistent selfid_buf");
  1716. if (ohci->selfid_buf_cpu == NULL)
  1717. FAIL(-ENOMEM, "Failed to allocate DMA buffer for self-id packets");
  1718. ohci->init_state = OHCI_INIT_HAVE_SELFID_BUFFER;
  1719. if ((unsigned long)ohci->selfid_buf_cpu & 0x1fff)
  1720. PRINT(KERN_INFO, ohci->id, "SelfID buffer %p is not aligned on "
  1721.       "8Kb boundary... may cause problems on some CXD3222 chip", 
  1722.       ohci->selfid_buf_cpu);  
  1723. /* No self-id errors at startup */
  1724. ohci->self_id_errors = 0;
  1725. ohci->init_state = OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE;
  1726. /* AR DMA request context allocation */
  1727. if (alloc_dma_rcv_ctx(ohci, &ohci->ar_req_context,
  1728.       DMA_CTX_ASYNC_REQ, 0, AR_REQ_NUM_DESC,
  1729.       AR_REQ_BUF_SIZE, AR_REQ_SPLIT_BUF_SIZE,
  1730.       OHCI1394_AsReqRcvContextBase) < 0)
  1731. FAIL(-ENOMEM, "Failed to allocate AR Req context");
  1732. /* AR DMA response context allocation */
  1733. if (alloc_dma_rcv_ctx(ohci, &ohci->ar_resp_context,
  1734.       DMA_CTX_ASYNC_RESP, 0, AR_RESP_NUM_DESC,
  1735.       AR_RESP_BUF_SIZE, AR_RESP_SPLIT_BUF_SIZE,
  1736.       OHCI1394_AsRspRcvContextBase) < 0)
  1737. FAIL(-ENOMEM, "Failed to allocate AR Resp context");
  1738. /* AT DMA request context */
  1739. if (alloc_dma_trm_ctx(ohci, &ohci->at_req_context,
  1740.       DMA_CTX_ASYNC_REQ, 0, AT_REQ_NUM_DESC,
  1741.       OHCI1394_AsReqTrContextBase) < 0)
  1742. FAIL(-ENOMEM, "Failed to allocate AT Req context");
  1743. /* AT DMA response context */
  1744. if (alloc_dma_trm_ctx(ohci, &ohci->at_resp_context,
  1745.       DMA_CTX_ASYNC_RESP, 1, AT_RESP_NUM_DESC,
  1746.       OHCI1394_AsRspTrContextBase) < 0)
  1747. FAIL(-ENOMEM, "Failed to allocate AT Resp context");
  1748. /* Start off with a soft reset, to clear everything to a sane
  1749.  * state. */
  1750. ohci_soft_reset(ohci);
  1751. /* Now enable LPS, which we need in order to start accessing
  1752.  * most of the registers.  In fact, on some cards (ALI M5251),
  1753.  * accessing registers in the SClk domain without LPS enabled
  1754.  * will lock up the machine.  Wait 50msec to make sure we have
  1755.  * full link enabled.  */
  1756. reg_write(ohci, OHCI1394_HCControlSet, 0x00080000);
  1757. mdelay(50);
  1758. /* Determine the number of available IR and IT contexts. */
  1759. ohci->nb_iso_rcv_ctx =
  1760. get_nb_iso_ctx(ohci, OHCI1394_IsoRecvIntMaskSet);
  1761. DBGMSG(ohci->id, "%d iso receive contexts available",
  1762.        ohci->nb_iso_rcv_ctx);
  1763. ohci->nb_iso_xmit_ctx =
  1764. get_nb_iso_ctx(ohci, OHCI1394_IsoXmitIntMaskSet);
  1765. DBGMSG(ohci->id, "%d iso transmit contexts available",
  1766.        ohci->nb_iso_xmit_ctx);
  1767. /* Set the usage bits for non-existent contexts so they can't
  1768.  * be allocated */
  1769. ohci->ir_ctx_usage = ~0 << ohci->nb_iso_rcv_ctx;
  1770. ohci->it_ctx_usage = ~0 << ohci->nb_iso_xmit_ctx;
  1771. INIT_LIST_HEAD(&ohci->iso_tasklet_list);
  1772. spin_lock_init(&ohci->iso_tasklet_list_lock);
  1773. ohci->ISO_channel_usage = 0;
  1774.         spin_lock_init(&ohci->IR_channel_lock);
  1775. /* IR DMA context */
  1776. if (alloc_dma_rcv_ctx(ohci, &ohci->ir_context,
  1777.       DMA_CTX_ISO, 0, IR_NUM_DESC,
  1778.       IR_BUF_SIZE, IR_SPLIT_BUF_SIZE,
  1779.       OHCI1394_IsoRcvContextBase) < 0)
  1780. FAIL(-ENOMEM, "Failed to allocate IR context");
  1781. /* IT DMA context allocation */
  1782. if (alloc_dma_trm_ctx(ohci, &ohci->it_context,
  1783.       DMA_CTX_ISO, 0, IT_NUM_DESC,
  1784.       OHCI1394_IsoXmitContextBase) < 0)
  1785. FAIL(-ENOMEM, "Failed to allocate IT context");
  1786. if (request_irq(dev->irq, ohci_irq_handler, SA_SHIRQ,
  1787.  OHCI1394_DRIVER_NAME, ohci))
  1788. FAIL(-ENOMEM, "Failed to allocate shared interrupt %d", dev->irq);
  1789. ohci->init_state = OHCI_INIT_HAVE_IRQ;
  1790. ohci_initialize(ohci);
  1791. /* Tell the highlevel this host is ready */
  1792. hpsb_add_host(host);
  1793. ohci->init_state = OHCI_INIT_DONE;
  1794. return 0;
  1795. #undef FAIL
  1796. }
  1797. static void ohci1394_pci_remove(struct pci_dev *pdev)
  1798. {
  1799. struct ti_ohci *ohci;
  1800. ohci = pci_get_drvdata(pdev);
  1801. if (!ohci)
  1802. return;
  1803. switch (ohci->init_state) {
  1804. case OHCI_INIT_DONE:
  1805. hpsb_remove_host(ohci->host);
  1806. case OHCI_INIT_HAVE_IRQ:
  1807. /* Soft reset before we start - this disables
  1808.  * interrupts and clears linkEnable and LPS. */
  1809. ohci_soft_reset(ohci);
  1810. free_irq(ohci->dev->irq, ohci);
  1811. case OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE:
  1812. /* Free AR dma */
  1813. free_dma_rcv_ctx(&ohci->ar_req_context);
  1814. free_dma_rcv_ctx(&ohci->ar_resp_context);
  1815. /* Free AT dma */
  1816. free_dma_trm_ctx(&ohci->at_req_context);
  1817. free_dma_trm_ctx(&ohci->at_resp_context);
  1818. /* Free IR dma */
  1819. free_dma_rcv_ctx(&ohci->ir_context);
  1820. /* Free IT dma */
  1821. free_dma_trm_ctx(&ohci->it_context);
  1822. case OHCI_INIT_HAVE_SELFID_BUFFER:
  1823. pci_free_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE, 
  1824.     ohci->selfid_buf_cpu,
  1825.     ohci->selfid_buf_bus);
  1826. OHCI_DMA_FREE("consistent selfid_buf");
  1827. case OHCI_INIT_HAVE_CONFIG_ROM_BUFFER:
  1828. pci_free_consistent(ohci->dev, OHCI_CONFIG_ROM_LEN,
  1829.     ohci->csr_config_rom_cpu,
  1830.     ohci->csr_config_rom_bus);
  1831. OHCI_DMA_FREE("consistent csr_config_rom");
  1832. case OHCI_INIT_HAVE_IOMAPPING:
  1833. iounmap(ohci->registers);
  1834. case OHCI_INIT_HAVE_MEM_REGION:
  1835. #ifndef PCMCIA
  1836. release_mem_region(pci_resource_start(ohci->dev, 0),
  1837.    OHCI1394_REGISTER_SIZE);
  1838. #endif
  1839. #ifdef CONFIG_ALL_PPC
  1840. /* On UniNorth, power down the cable and turn off the chip
  1841.  * clock when the module is removed to save power on
  1842.  * laptops. Turning it back ON is done by the arch code when
  1843.  * pci_enable_device() is called */
  1844. {
  1845. struct device_node* of_node;
  1846. of_node = pci_device_to_OF_node(ohci->dev);
  1847. if (of_node) {
  1848. pmac_call_feature(PMAC_FTR_1394_ENABLE, of_node, 0, 0);
  1849. pmac_call_feature(PMAC_FTR_1394_CABLE_POWER, of_node, 0, 0);
  1850. }
  1851. }
  1852. #endif /* CONFIG_ALL_PPC */
  1853. case OHCI_INIT_ALLOC_HOST:
  1854. pci_set_drvdata(ohci->dev, NULL);
  1855. hpsb_unref_host(ohci->host);
  1856. }
  1857. }
  1858. #define PCI_CLASS_FIREWIRE_OHCI     ((PCI_CLASS_SERIAL_FIREWIRE << 8) | 0x10)
  1859. static struct pci_device_id ohci1394_pci_tbl[] __devinitdata = {
  1860. {
  1861. .class =  PCI_CLASS_FIREWIRE_OHCI,
  1862. .class_mask =  0x00ffffff,
  1863. .vendor = PCI_ANY_ID,
  1864. .device = PCI_ANY_ID,
  1865. .subvendor = PCI_ANY_ID,
  1866. .subdevice = PCI_ANY_ID,
  1867. },
  1868. { 0, },
  1869. };
  1870. MODULE_DEVICE_TABLE(pci, ohci1394_pci_tbl);
  1871. static struct pci_driver ohci1394_pci_driver = {
  1872. .name = OHCI1394_DRIVER_NAME,
  1873. .id_table = ohci1394_pci_tbl,
  1874. .probe = ohci1394_pci_probe,
  1875. .remove = ohci1394_pci_remove,
  1876. };
  1877. /***********************************
  1878.  * OHCI1394 Video Interface        *
  1879.  ***********************************/
  1880. /* essentially the only purpose of this code is to allow another
  1881.    module to hook into ohci's interrupt handler */
  1882. void ohci1394_stop_context(struct ti_ohci *ohci, int reg, char *msg)
  1883. {
  1884. int i=0;
  1885. /* stop the channel program if it's still running */
  1886. reg_write(ohci, reg, 0x8000);
  1887.    
  1888. /* Wait until it effectively stops */
  1889. while (reg_read(ohci, reg) & 0x400) {
  1890. i++;
  1891. if (i>5000) {
  1892. PRINT(KERN_ERR, ohci->id, 
  1893.       "Runaway loop while stopping context...");
  1894. break;
  1895. }
  1896. }
  1897. if (msg) PRINT(KERN_ERR, ohci->id, "%s: dma prg stopped", msg);
  1898. }
  1899. void ohci1394_init_iso_tasklet(struct ohci1394_iso_tasklet *tasklet, int type,
  1900.        void (*func)(unsigned long), unsigned long data)
  1901. {
  1902. tasklet_init(&tasklet->tasklet, func, data);
  1903. tasklet->type = type;
  1904. /* We init the tasklet->link field, so we can list_del() it
  1905.  * without worrying wether it was added to the list or not. */
  1906. INIT_LIST_HEAD(&tasklet->link);
  1907. }
  1908. int ohci1394_register_iso_tasklet(struct ti_ohci *ohci,
  1909.   struct ohci1394_iso_tasklet *tasklet)
  1910. {
  1911. unsigned long flags, *usage;
  1912. int n, i, r = -EBUSY;
  1913. if (tasklet->type == OHCI_ISO_TRANSMIT) {
  1914. n = ohci->nb_iso_xmit_ctx;
  1915. usage = &ohci->it_ctx_usage;
  1916. }
  1917. else {
  1918. n = ohci->nb_iso_rcv_ctx;
  1919. usage = &ohci->ir_ctx_usage;
  1920. }
  1921. spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
  1922. for (i = 0; i < n; i++)
  1923. if (!test_and_set_bit(i, usage)) {
  1924. tasklet->context = i;
  1925. list_add_tail(&tasklet->link, &ohci->iso_tasklet_list);
  1926. r = 0;
  1927. break;
  1928. }
  1929. spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
  1930. return r;
  1931. }
  1932. void ohci1394_unregister_iso_tasklet(struct ti_ohci *ohci,
  1933.      struct ohci1394_iso_tasklet *tasklet)
  1934. {
  1935. unsigned long flags;
  1936. tasklet_kill(&tasklet->tasklet);
  1937. spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
  1938. if (tasklet->type == OHCI_ISO_TRANSMIT)
  1939. clear_bit(tasklet->context, &ohci->it_ctx_usage);
  1940. else
  1941. clear_bit(tasklet->context, &ohci->ir_ctx_usage);
  1942. list_del(&tasklet->link);
  1943. spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
  1944. }
  1945. EXPORT_SYMBOL(ohci1394_stop_context);
  1946. EXPORT_SYMBOL(ohci1394_init_iso_tasklet);
  1947. EXPORT_SYMBOL(ohci1394_register_iso_tasklet);
  1948. EXPORT_SYMBOL(ohci1394_unregister_iso_tasklet);
  1949. /***********************************
  1950.  * General module initialization   *
  1951.  ***********************************/
  1952. MODULE_AUTHOR("Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>");
  1953. MODULE_DESCRIPTION("Driver for PCI OHCI IEEE-1394 controllers");
  1954. MODULE_LICENSE("GPL");
  1955. static void __exit ohci1394_cleanup (void)
  1956. {
  1957. pci_unregister_driver(&ohci1394_pci_driver);
  1958. }
  1959. static int __init ohci1394_init(void)
  1960. {
  1961. return pci_module_init(&ohci1394_pci_driver);
  1962. }
  1963. module_init(ohci1394_init);
  1964. module_exit(ohci1394_cleanup);