qmgr.h revision a6a9fb857b5599b3cefef5576967389c1c43eb4c
182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa/* 282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl> 382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa * 482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa * This program is free software; you can redistribute it and/or modify it 582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa * under the terms of version 2 of the GNU General Public License 682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa * as published by the Free Software Foundation. 782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa */ 882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#ifndef IXP4XX_QMGR_H 1082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define IXP4XX_QMGR_H 1182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 1282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#include <linux/io.h> 1382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#include <linux/kernel.h> 1482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 15e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#define DEBUG_QMGR 0 16e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 1782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define HALF_QUEUES 32 18a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa#define QUEUES 64 1982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define MAX_QUEUE_LENGTH 4 /* in dwords */ 2082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 2182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT1_EMPTY 1 /* queue status bits */ 2282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT1_NEARLY_EMPTY 2 2382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT1_NEARLY_FULL 4 2482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT1_FULL 8 2582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT2_UNDERFLOW 1 2682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_STAT2_OVERFLOW 2 2782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 2882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_0_ENTRIES 0 2982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_1_ENTRY 1 3082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_2_ENTRIES 2 3182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_4_ENTRIES 3 3282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_8_ENTRIES 4 3382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_16_ENTRIES 5 3482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_32_ENTRIES 6 3582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_WATERMARK_64_ENTRIES 7 3682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 3782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa/* queue interrupt request conditions */ 3882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_EMPTY 0 3982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NEARLY_EMPTY 1 4082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NEARLY_FULL 2 4182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_FULL 3 4282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NOT_EMPTY 4 4382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NOT_NEARLY_EMPTY 5 4482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NOT_NEARLY_FULL 6 4582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#define QUEUE_IRQ_SRC_NOT_FULL 7 4682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 4782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastruct qmgr_regs { 4882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 acc[QUEUES][MAX_QUEUE_LENGTH]; /* 0x000 - 0x3FF */ 4982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 stat1[4]; /* 0x400 - 0x40F */ 5082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 stat2[2]; /* 0x410 - 0x417 */ 5182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 statne_h; /* 0x418 - queue nearly empty */ 5282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 statf_h; /* 0x41C - queue full */ 5382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 irqsrc[4]; /* 0x420 - 0x42F IRC source */ 5482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 irqen[2]; /* 0x430 - 0x437 IRQ enabled */ 5582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 irqstat[2]; /* 0x438 - 0x43F - IRQ access only */ 5682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 reserved[1776]; 5782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa u32 sram[2048]; /* 0x2000 - 0x3FFF - config and buffer */ 5882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa}; 5982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 6082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasavoid qmgr_set_irq(unsigned int queue, int src, 6182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa void (*handler)(void *pdev), void *pdev); 6282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasavoid qmgr_enable_irq(unsigned int queue); 6382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasavoid qmgr_disable_irq(unsigned int queue); 6482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 6582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa/* request_ and release_queue() must be called from non-IRQ context */ 66e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 67e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#if DEBUG_QMGR 68e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasaextern char qmgr_queue_descs[QUEUES][32]; 69e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 7082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasaint qmgr_request_queue(unsigned int queue, unsigned int len /* dwords */, 7182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa unsigned int nearly_empty_watermark, 72e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa unsigned int nearly_full_watermark, 73e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa const char *desc_format, const char* name); 74e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#else 75e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasaint __qmgr_request_queue(unsigned int queue, unsigned int len /* dwords */, 76e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa unsigned int nearly_empty_watermark, 77e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa unsigned int nearly_full_watermark); 78e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#define qmgr_request_queue(queue, len, nearly_empty_watermark, \ 79e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa nearly_full_watermark, desc_format, name) \ 80e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa __qmgr_request_queue(queue, len, nearly_empty_watermark, \ 81e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa nearly_full_watermark) 82e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#endif 83e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 8482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasavoid qmgr_release_queue(unsigned int queue); 8582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 8682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 8782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline void qmgr_put_entry(unsigned int queue, u32 val) 8882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 8982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa extern struct qmgr_regs __iomem *qmgr_regs; 90e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#if DEBUG_QMGR 91e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */ 92e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 93e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa printk(KERN_DEBUG "Queue %s(%i) put %X\n", 94e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa qmgr_queue_descs[queue], queue, val); 95e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#endif 9682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa __raw_writel(val, &qmgr_regs->acc[queue][0]); 9782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 9882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 9982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline u32 qmgr_get_entry(unsigned int queue) 10082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 101e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa u32 val; 10282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa extern struct qmgr_regs __iomem *qmgr_regs; 103e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa val = __raw_readl(&qmgr_regs->acc[queue][0]); 104e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#if DEBUG_QMGR 105e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */ 106e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa 107e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa printk(KERN_DEBUG "Queue %s(%i) get %X\n", 108e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa qmgr_queue_descs[queue], queue, val); 109e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa#endif 110e6da96ace859dad966fe85cc9552b89f48bbc930Krzysztof Hałasa return val; 11182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 11282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 113a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasastatic inline int __qmgr_get_stat1(unsigned int queue) 11482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 11582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa extern struct qmgr_regs __iomem *qmgr_regs; 11682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa return (__raw_readl(&qmgr_regs->stat1[queue >> 3]) 11782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa >> ((queue & 7) << 2)) & 0xF; 11882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 11982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 120a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasastatic inline int __qmgr_get_stat2(unsigned int queue) 12182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 12282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa extern struct qmgr_regs __iomem *qmgr_regs; 123a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa BUG_ON(queue >= HALF_QUEUES); 12482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa return (__raw_readl(&qmgr_regs->stat2[queue >> 4]) 12582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa >> ((queue & 0xF) << 1)) & 0x3; 12682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 12782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 128a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 129a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue is empty 130a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 131a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 132a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if the queue is empty. 133a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 13482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_empty(unsigned int queue) 13582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 136a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa BUG_ON(queue >= HALF_QUEUES); 137a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat1(queue) & QUEUE_STAT1_EMPTY; 13882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 13982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 140a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 141a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue is nearly empty 142a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 143a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 144a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if the queue is nearly or completely empty. 145a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 14682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_nearly_empty(unsigned int queue) 14782a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 148a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa extern struct qmgr_regs __iomem *qmgr_regs; 149a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa if (queue >= HALF_QUEUES) 150a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return (__raw_readl(&qmgr_regs->statne_h) >> 151a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa (queue - HALF_QUEUES)) & 0x01; 152a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_EMPTY; 15382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 15482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 155a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 156a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue is nearly full 157a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 158a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 159a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if the queue is nearly or completely full. 160a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 16182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_nearly_full(unsigned int queue) 16282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 163a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa BUG_ON(queue >= HALF_QUEUES); 164a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_FULL; 16582a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 16682a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 167a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 168a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue is full 169a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 170a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 171a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if the queue is full. 172a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 17382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_full(unsigned int queue) 17482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 175a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa extern struct qmgr_regs __iomem *qmgr_regs; 176a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa if (queue >= HALF_QUEUES) 177a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return (__raw_readl(&qmgr_regs->statf_h) >> 178a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa (queue - HALF_QUEUES)) & 0x01; 179a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat1(queue) & QUEUE_STAT1_FULL; 18082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 18182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 182a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 183a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue experienced underflow 184a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 185a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 186a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if empty. 187a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 18882a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_underflow(unsigned int queue) 18982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 190a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat2(queue) & QUEUE_STAT2_UNDERFLOW; 19182a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 19282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 193a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa/** 194a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * qmgr_stat_empty() - checks if a hardware queue experienced overflow 195a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * @queue: queue number 196a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * 197a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa * Returns non-zero value if empty. 198a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa */ 19982a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasastatic inline int qmgr_stat_overflow(unsigned int queue) 20082a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa{ 201a6a9fb857b5599b3cefef5576967389c1c43eb4cKrzysztof Hałasa return __qmgr_get_stat2(queue) & QUEUE_STAT2_OVERFLOW; 20282a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa} 20382a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa 20482a96f5790ac93a406be72ed8f308dd29ad7e6afKrzysztof Halasa#endif 205