1 // SPDX-License-Identifier: GPL-2.0-only
3 * arch/arm/mach-netx/pfifo.c
5 * Copyright (c) 2005 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
8 #include <linux/init.h>
9 #include <linux/module.h>
10 #include <linux/mutex.h>
13 #include <mach/hardware.h>
14 #include <mach/netx-regs.h>
15 #include <mach/pfifo.h>
17 static DEFINE_MUTEX(pfifo_lock);
19 static unsigned int pfifo_used = 0;
21 int pfifo_request(unsigned int pfifo_mask)
26 mutex_lock(&pfifo_lock);
28 if (pfifo_mask & pfifo_used) {
33 pfifo_used |= pfifo_mask;
35 val = readl(NETX_PFIFO_RESET);
36 writel(val | pfifo_mask, NETX_PFIFO_RESET);
37 writel(val, NETX_PFIFO_RESET);
40 mutex_unlock(&pfifo_lock);
44 void pfifo_free(unsigned int pfifo_mask)
46 mutex_lock(&pfifo_lock);
47 pfifo_used &= ~pfifo_mask;
48 mutex_unlock(&pfifo_lock);
51 EXPORT_SYMBOL(pfifo_push);
52 EXPORT_SYMBOL(pfifo_pop);
53 EXPORT_SYMBOL(pfifo_fill_level);
54 EXPORT_SYMBOL(pfifo_empty);
55 EXPORT_SYMBOL(pfifo_request);
56 EXPORT_SYMBOL(pfifo_free);