/** * qmgr_stat_empty() - checks if a hardware queue is empty * @queue: queue number * * Returns non-zero value if the queue is empty.
*/ int qmgr_stat_empty(unsignedint queue)
{
BUG_ON(queue >= HALF_QUEUES); return __qmgr_get_stat1(queue) & QUEUE_STAT1_EMPTY;
}
/** * qmgr_stat_below_low_watermark() - checks if a queue is below low watermark * @queue: queue number * * Returns non-zero value if the queue is below low watermark.
*/ int qmgr_stat_below_low_watermark(unsignedint queue)
{ if (queue >= HALF_QUEUES) return (__raw_readl(&qmgr_regs->statne_h) >>
(queue - HALF_QUEUES)) & 0x01; return __qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_EMPTY;
}
/** * qmgr_stat_full() - checks if a hardware queue is full * @queue: queue number * * Returns non-zero value if the queue is full.
*/ int qmgr_stat_full(unsignedint queue)
{ if (queue >= HALF_QUEUES) return (__raw_readl(&qmgr_regs->statf_h) >>
(queue - HALF_QUEUES)) & 0x01; return __qmgr_get_stat1(queue) & QUEUE_STAT1_FULL;
}
/** * qmgr_stat_overflow() - checks if a hardware queue experienced overflow * @queue: queue number * * Returns non-zero value if the queue experienced overflow.
*/ int qmgr_stat_overflow(unsignedint queue)
{ return __qmgr_get_stat2(queue) & QUEUE_STAT2_OVERFLOW;
}
static irqreturn_t qmgr_irq1_a0(int irq, void *pdev)
{ int i, ret = 0;
u32 en_bitmap, src, stat;
/* ACK - it may clear any bits so don't rely on it */
__raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[0]);
en_bitmap = __raw_readl(&qmgr_regs->irqen[0]); while (en_bitmap) {
i = __fls(en_bitmap); /* number of the last "low" queue */
en_bitmap &= ~BIT(i);
src = __raw_readl(&qmgr_regs->irqsrc[i >> 3]);
stat = __raw_readl(&qmgr_regs->stat1[i >> 3]); if (src & 4) /* the IRQ condition is inverted */
stat = ~stat; if (stat & BIT(src & 3)) {
irq_handlers[i](irq_pdevs[i]);
ret = IRQ_HANDLED;
}
} return ret;
}
static irqreturn_t qmgr_irq2_a0(int irq, void *pdev)
{ int i, ret = 0;
u32 req_bitmap;
/* ACK - it may clear any bits so don't rely on it */
__raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[1]);
req_bitmap = __raw_readl(&qmgr_regs->irqen[1]) &
__raw_readl(&qmgr_regs->statne_h); while (req_bitmap) {
i = __fls(req_bitmap); /* number of the last "high" queue */
req_bitmap &= ~BIT(i);
irq_handlers[HALF_QUEUES + i](irq_pdevs[HALF_QUEUES + i]);
ret = IRQ_HANDLED;
} return ret;
}
if (!req_bitmap) return 0;
__raw_writel(req_bitmap, &qmgr_regs->irqstat[half]); /* ACK */
while (req_bitmap) {
i = __fls(req_bitmap); /* number of the last queue */
req_bitmap &= ~BIT(i);
i += half * HALF_QUEUES;
irq_handlers[i](irq_pdevs[i]);
} return IRQ_HANDLED;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.