/* Commands to the f/w get marshelled to/from this code then onto the PCI * -bus/c running buffer. */ int saa7164_irq_dequeue(struct saa7164_dev *dev) { int ret = SAA_OK; u32 timeout; wait_queue_head_t *q = 0; dprintk(DBGLVL_CMD, "%s()\n", __func__); /* While any outstand message on the bus exists... */ do { /* Peek the msg bus */ tmComResInfo_t tRsp = { 0, 0, 0, 0, 0, 0 }; ret = saa7164_bus_get(dev, &tRsp, NULL, 1); if (ret != SAA_OK) break; q = &dev->cmds[tRsp.seqno].wait; timeout = saa7164_cmd_timeout_get(dev, tRsp.seqno); dprintk(DBGLVL_CMD, "%s() timeout = %d\n", __func__, timeout); if (!timeout) { dprintk(DBGLVL_CMD, "%s() signalled seqno(%d) (for dequeue)\n", __func__, tRsp.seqno); dev->cmds[tRsp.seqno].signalled = 1; wake_up(q); } else { printk(KERN_ERR "%s() found timed out command on the bus\n", __func__); } } while (0); return ret; }
/* Commands to the f/w get marshelled to/from this code then onto the PCI * -bus/c running buffer. */ int saa7164_cmd_dequeue(struct saa7164_dev *dev) { int loop = 1; int ret; u32 timeout; wait_queue_head_t *q = NULL; u8 tmp[512]; ; while (loop) { struct tmComResInfo tRsp = { 0, 0, 0, 0, 0, 0 }; ret = saa7164_bus_get(dev, &tRsp, NULL, 1); if (ret == SAA_ERR_EMPTY) return SAA_OK; if (ret != SAA_OK) return ret; q = &dev->cmds[tRsp.seqno].wait; timeout = saa7164_cmd_timeout_get(dev, tRsp.seqno); ; if (timeout) { ; /* Clean the bus */ ret = saa7164_bus_get(dev, &tRsp, &tmp, 0); ; if (ret == SAA_ERR_EMPTY) /* Someone else already fetched the response */ return SAA_OK; if (ret != SAA_OK) return ret; if (tRsp.flags & PVC_CMDFLAG_CONTINUE) ; else saa7164_cmd_free_seqno(dev, tRsp.seqno); ; continue; } // dprintk(DBGLVL_CMD, "%s() signalled seqno(%d) (for dequeue)\n", ; dev->cmds[tRsp.seqno].signalled = 1; wake_up(q); return SAA_OK; } return SAA_OK; }
/* Commands to the f/w get marshelled to/from this code then onto the PCI * -bus/c running buffer. */ int saa7164_cmd_dequeue(struct saa7164_dev *dev) { int loop = 1; int ret; u32 timeout; wait_queue_head_t *q = 0; u8 tmp[512]; dprintk(DBGLVL_CMD, "%s()\n", __func__); while (loop) { tmComResInfo_t tRsp = { 0, 0, 0, 0, 0, 0 }; ret = saa7164_bus_get(dev, &tRsp, NULL, 1); if (ret == SAA_ERR_EMPTY) return SAA_OK; if (ret != SAA_OK) return ret; q = &dev->cmds[tRsp.seqno].wait; timeout = saa7164_cmd_timeout_get(dev, tRsp.seqno); dprintk(DBGLVL_CMD, "%s() timeout = %d\n", __func__, timeout); if (timeout) { printk(KERN_ERR "found timed out command on the bus\n"); /* Clean the bus */ ret = saa7164_bus_get(dev, &tRsp, &tmp, 0); printk(KERN_ERR "ret = %x\n", ret); if (ret == SAA_ERR_EMPTY) /* Someone else already fetched the response */ return SAA_OK; if (ret != SAA_OK) return ret; if (tRsp.flags & PVC_CMDFLAG_CONTINUE) printk(KERN_ERR "split response\n"); else saa7164_cmd_free_seqno(dev, tRsp.seqno); printk(KERN_ERR " timeout continue\n"); continue; } dprintk(DBGLVL_CMD, "%s() signalled seqno(%d) (for dequeue)\n", __func__, tRsp.seqno); dev->cmds[tRsp.seqno].signalled = 1; wake_up(q); return SAA_OK; } return SAA_OK; }
/* Commands to the f/w get marshelled to/from this code then onto the PCI * -bus/c running buffer. */ int saa7164_irq_dequeue(struct saa7164_dev *dev) { int ret = SAA_OK, i = 0; u32 timeout; wait_queue_head_t *q = NULL; u8 tmp[512]; ; /* While any outstand message on the bus exists... */ do { /* Peek the msg bus */ struct tmComResInfo tRsp = { 0, 0, 0, 0, 0, 0 }; ret = saa7164_bus_get(dev, &tRsp, NULL, 1); if (ret != SAA_OK) break; q = &dev->cmds[tRsp.seqno].wait; timeout = saa7164_cmd_timeout_get(dev, tRsp.seqno); ; if (!timeout) { // dprintk(DBGLVL_CMD, // "%s() signalled seqno(%d) (for dequeue)\n", ; dev->cmds[tRsp.seqno].signalled = 1; wake_up(q); } else { // printk(KERN_ERR // "%s() found timed out command on the bus\n", ; /* Clean the bus */ ret = saa7164_bus_get(dev, &tRsp, &tmp, 0); ; if (ret == SAA_ERR_EMPTY) /* Someone else already fetched the response */ return SAA_OK; if (ret != SAA_OK) return ret; } /* It's unlikely to have more than 4 or 5 pending messages, * ensure we exit at some point regardless. */ } while (i++ < 32); return ret; }