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

嵌入式Linux

开发平台:

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