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