aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Collins <bcollins@ubuntu.com>2006-06-12 18:12:21 -0400
committerBen Collins <bcollins@ubuntu.com>2006-06-12 18:12:21 -0400
commit57fdb58fa5a140bdd52cf4c4ffc30df73676f0a5 (patch)
tree336c32051f005771cbfad5501a5a73caa6493eb1
parent7597028a833b6bfafae0a8fbc18992a278467adf (diff)
ieee1394/ohci1394: CycleTooLong interrupt management
This patch modifies the ohci1394.c file to enable and manage the "cycle too long" interrupt. If this interrupt occurs, the "LinkControl.CycleMaster" bit of the host controller is reseted. This implies, that the host controller does not send "cycle start" packet anymore freezing then the isochronous communication. The management of the interrupt added by the patch is that when the interrupt occurs, the OHCI irq handler prints a kernel log warning and then sets the "LinkControl.CycleMaster" bit again resuming the isochronous communication. Signed-off-by: Jean-Baptiste Mur <jeanbaptiste@maunakeatech.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Ben Collins <bcollins@ubuntu.com>
-rw-r--r--drivers/ieee1394/ohci1394.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index 8c43065a6055..643094c3339c 100644
--- a/drivers/ieee1394/ohci1394.c
+++ b/drivers/ieee1394/ohci1394.c
@@ -580,6 +580,7 @@ static void ohci_initialize(struct ti_ohci *ohci)
580 OHCI1394_isochRx | 580 OHCI1394_isochRx |
581 OHCI1394_isochTx | 581 OHCI1394_isochTx |
582 OHCI1394_postedWriteErr | 582 OHCI1394_postedWriteErr |
583 OHCI1394_cycleTooLong |
583 OHCI1394_cycleInconsistent); 584 OHCI1394_cycleInconsistent);
584 585
585 /* Enable link */ 586 /* Enable link */
@@ -2386,6 +2387,15 @@ static irqreturn_t ohci_irq_handler(int irq, void *dev_id,
2386 PRINT(KERN_ERR, "physical posted write error"); 2387 PRINT(KERN_ERR, "physical posted write error");
2387 /* no recovery strategy yet, had to involve protocol drivers */ 2388 /* no recovery strategy yet, had to involve protocol drivers */
2388 } 2389 }
2390 if (event & OHCI1394_cycleTooLong) {
2391 if(printk_ratelimit())
2392 PRINT(KERN_WARNING, "isochronous cycle too long");
2393 else
2394 DBGMSG("OHCI1394_cycleTooLong");
2395 reg_write(ohci, OHCI1394_LinkControlSet,
2396 OHCI1394_LinkControl_CycleMaster);
2397 event &= ~OHCI1394_cycleTooLong;
2398 }
2389 if (event & OHCI1394_cycleInconsistent) { 2399 if (event & OHCI1394_cycleInconsistent) {
2390 /* We subscribe to the cycleInconsistent event only to 2400 /* We subscribe to the cycleInconsistent event only to
2391 * clear the corresponding event bit... otherwise, 2401 * clear the corresponding event bit... otherwise,