mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 02:09:42 +00:00
soc: ixp4xx: Uninline several functions
These inline functions immediately exploit the static ioremaps for the queue manager memory region. This does not work with multiplatform where everything need to be dynamically remapped, so get rid of these inlines and create new exports for those used by other drivers. Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
0b458d7b10
commit
d08502f245
2 changed files with 124 additions and 120 deletions
|
@ -32,6 +32,117 @@ static void *irq_pdevs[QUEUES];
|
|||
char qmgr_queue_descs[QUEUES][32];
|
||||
#endif
|
||||
|
||||
void qmgr_put_entry(unsigned int queue, u32 val)
|
||||
{
|
||||
#if DEBUG_QMGR
|
||||
BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */
|
||||
|
||||
printk(KERN_DEBUG "Queue %s(%i) put %X\n",
|
||||
qmgr_queue_descs[queue], queue, val);
|
||||
#endif
|
||||
__raw_writel(val, &qmgr_regs->acc[queue][0]);
|
||||
}
|
||||
|
||||
u32 qmgr_get_entry(unsigned int queue)
|
||||
{
|
||||
u32 val;
|
||||
val = __raw_readl(&qmgr_regs->acc[queue][0]);
|
||||
#if DEBUG_QMGR
|
||||
BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */
|
||||
|
||||
printk(KERN_DEBUG "Queue %s(%i) get %X\n",
|
||||
qmgr_queue_descs[queue], queue, val);
|
||||
#endif
|
||||
return val;
|
||||
}
|
||||
|
||||
static int __qmgr_get_stat1(unsigned int queue)
|
||||
{
|
||||
return (__raw_readl(&qmgr_regs->stat1[queue >> 3])
|
||||
>> ((queue & 7) << 2)) & 0xF;
|
||||
}
|
||||
|
||||
static int __qmgr_get_stat2(unsigned int queue)
|
||||
{
|
||||
BUG_ON(queue >= HALF_QUEUES);
|
||||
return (__raw_readl(&qmgr_regs->stat2[queue >> 4])
|
||||
>> ((queue & 0xF) << 1)) & 0x3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(unsigned int 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(unsigned int 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_above_high_watermark() - checks if a queue is above high watermark
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue is above high watermark
|
||||
*/
|
||||
static int qmgr_stat_above_high_watermark(unsigned int queue)
|
||||
{
|
||||
BUG_ON(queue >= HALF_QUEUES);
|
||||
return __qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_FULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(unsigned int 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_underflow() - checks if a hardware queue experienced underflow
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue experienced underflow.
|
||||
*/
|
||||
static int qmgr_stat_underflow(unsigned int queue)
|
||||
{
|
||||
return __qmgr_get_stat2(queue) & QUEUE_STAT2_UNDERFLOW;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(unsigned int queue)
|
||||
{
|
||||
return __qmgr_get_stat2(queue) & QUEUE_STAT2_OVERFLOW;
|
||||
}
|
||||
|
||||
void qmgr_set_irq(unsigned int queue, int src,
|
||||
void (*handler)(void *pdev), void *pdev)
|
||||
{
|
||||
|
@ -375,6 +486,12 @@ module_platform_driver(ixp4xx_qmgr_driver);
|
|||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_AUTHOR("Krzysztof Halasa");
|
||||
|
||||
EXPORT_SYMBOL(qmgr_put_entry);
|
||||
EXPORT_SYMBOL(qmgr_get_entry);
|
||||
EXPORT_SYMBOL(qmgr_stat_empty);
|
||||
EXPORT_SYMBOL(qmgr_stat_below_low_watermark);
|
||||
EXPORT_SYMBOL(qmgr_stat_full);
|
||||
EXPORT_SYMBOL(qmgr_stat_overflow);
|
||||
EXPORT_SYMBOL(qmgr_set_irq);
|
||||
EXPORT_SYMBOL(qmgr_enable_irq);
|
||||
EXPORT_SYMBOL(qmgr_disable_irq);
|
||||
|
|
|
@ -57,6 +57,13 @@ struct qmgr_regs {
|
|||
u32 sram[2048]; /* 0x2000 - 0x3FFF - config and buffer */
|
||||
};
|
||||
|
||||
void qmgr_put_entry(unsigned int queue, u32 val);
|
||||
u32 qmgr_get_entry(unsigned int queue);
|
||||
int qmgr_stat_empty(unsigned int queue);
|
||||
int qmgr_stat_below_low_watermark(unsigned int queue);
|
||||
int qmgr_stat_full(unsigned int queue);
|
||||
int qmgr_stat_overflow(unsigned int queue);
|
||||
void qmgr_release_queue(unsigned int queue);
|
||||
void qmgr_set_irq(unsigned int queue, int src,
|
||||
void (*handler)(void *pdev), void *pdev);
|
||||
void qmgr_enable_irq(unsigned int queue);
|
||||
|
@ -81,124 +88,4 @@ int __qmgr_request_queue(unsigned int queue, unsigned int len /* dwords */,
|
|||
nearly_full_watermark)
|
||||
#endif
|
||||
|
||||
void qmgr_release_queue(unsigned int queue);
|
||||
|
||||
|
||||
static inline void qmgr_put_entry(unsigned int queue, u32 val)
|
||||
{
|
||||
struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
#if DEBUG_QMGR
|
||||
BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */
|
||||
|
||||
printk(KERN_DEBUG "Queue %s(%i) put %X\n",
|
||||
qmgr_queue_descs[queue], queue, val);
|
||||
#endif
|
||||
__raw_writel(val, &qmgr_regs->acc[queue][0]);
|
||||
}
|
||||
|
||||
static inline u32 qmgr_get_entry(unsigned int queue)
|
||||
{
|
||||
u32 val;
|
||||
const struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
val = __raw_readl(&qmgr_regs->acc[queue][0]);
|
||||
#if DEBUG_QMGR
|
||||
BUG_ON(!qmgr_queue_descs[queue]); /* not yet requested */
|
||||
|
||||
printk(KERN_DEBUG "Queue %s(%i) get %X\n",
|
||||
qmgr_queue_descs[queue], queue, val);
|
||||
#endif
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline int __qmgr_get_stat1(unsigned int queue)
|
||||
{
|
||||
const struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
return (__raw_readl(&qmgr_regs->stat1[queue >> 3])
|
||||
>> ((queue & 7) << 2)) & 0xF;
|
||||
}
|
||||
|
||||
static inline int __qmgr_get_stat2(unsigned int queue)
|
||||
{
|
||||
const struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
BUG_ON(queue >= HALF_QUEUES);
|
||||
return (__raw_readl(&qmgr_regs->stat2[queue >> 4])
|
||||
>> ((queue & 0xF) << 1)) & 0x3;
|
||||
}
|
||||
|
||||
/**
|
||||
* qmgr_stat_empty() - checks if a hardware queue is empty
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue is empty.
|
||||
*/
|
||||
static inline int qmgr_stat_empty(unsigned int 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.
|
||||
*/
|
||||
static inline int qmgr_stat_below_low_watermark(unsigned int queue)
|
||||
{
|
||||
const struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
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_above_high_watermark() - checks if a queue is above high watermark
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue is above high watermark
|
||||
*/
|
||||
static inline int qmgr_stat_above_high_watermark(unsigned int queue)
|
||||
{
|
||||
BUG_ON(queue >= HALF_QUEUES);
|
||||
return __qmgr_get_stat1(queue) & QUEUE_STAT1_NEARLY_FULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* qmgr_stat_full() - checks if a hardware queue is full
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue is full.
|
||||
*/
|
||||
static inline int qmgr_stat_full(unsigned int queue)
|
||||
{
|
||||
const struct qmgr_regs __iomem *qmgr_regs = IXP4XX_QMGR_BASE_VIRT;
|
||||
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_underflow() - checks if a hardware queue experienced underflow
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue experienced underflow.
|
||||
*/
|
||||
static inline int qmgr_stat_underflow(unsigned int queue)
|
||||
{
|
||||
return __qmgr_get_stat2(queue) & QUEUE_STAT2_UNDERFLOW;
|
||||
}
|
||||
|
||||
/**
|
||||
* qmgr_stat_overflow() - checks if a hardware queue experienced overflow
|
||||
* @queue: queue number
|
||||
*
|
||||
* Returns non-zero value if the queue experienced overflow.
|
||||
*/
|
||||
static inline int qmgr_stat_overflow(unsigned int queue)
|
||||
{
|
||||
return __qmgr_get_stat2(queue) & QUEUE_STAT2_OVERFLOW;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue