blob: d0bfba0b083bde95dc0e8a4d367d36b38dece37a [file] [log] [blame]
David Howellsf3441942010-10-07 14:08:50 +01001/*
2 * Copyright 2005-2008 Analog Devices Inc.
3 *
4 * Licensed under the GPL-2 or later
5 */
6
7#ifndef _MACH_FIO_FLAG_H
8#define _MACH_FIO_FLAG_H
9
10#include <asm/blackfin.h>
11#include <asm/irqflags.h>
12
13#if ANOMALY_05000311
14#define BFIN_WRITE_FIO_FLAG(name) \
15static inline void bfin_write_FIO_FLAG_##name(unsigned short val) \
16{ \
17 unsigned long flags; \
David Howells3b139cd2010-10-07 14:08:52 +010018 flags = hard_local_irq_save(); \
David Howellsf3441942010-10-07 14:08:50 +010019 bfin_write16(FIO_FLAG_##name, val); \
20 bfin_read_CHIPID(); \
David Howells3b139cd2010-10-07 14:08:52 +010021 hard_local_irq_restore(flags); \
David Howellsf3441942010-10-07 14:08:50 +010022}
23BFIN_WRITE_FIO_FLAG(D)
24BFIN_WRITE_FIO_FLAG(C)
25BFIN_WRITE_FIO_FLAG(S)
26BFIN_WRITE_FIO_FLAG(T)
27
28#define BFIN_READ_FIO_FLAG(name) \
29static inline u16 bfin_read_FIO_FLAG_##name(void) \
30{ \
31 unsigned long flags; \
32 u16 ret; \
David Howells3b139cd2010-10-07 14:08:52 +010033 flags = hard_local_irq_save(); \
David Howellsf3441942010-10-07 14:08:50 +010034 ret = bfin_read16(FIO_FLAG_##name); \
35 bfin_read_CHIPID(); \
David Howells3b139cd2010-10-07 14:08:52 +010036 hard_local_irq_restore(flags); \
David Howellsf3441942010-10-07 14:08:50 +010037 return ret; \
38}
39BFIN_READ_FIO_FLAG(D)
40BFIN_READ_FIO_FLAG(C)
41BFIN_READ_FIO_FLAG(S)
42BFIN_READ_FIO_FLAG(T)
43
44#else
45#define bfin_write_FIO_FLAG_D(val) bfin_write16(FIO_FLAG_D, val)
46#define bfin_write_FIO_FLAG_C(val) bfin_write16(FIO_FLAG_C, val)
47#define bfin_write_FIO_FLAG_S(val) bfin_write16(FIO_FLAG_S, val)
48#define bfin_write_FIO_FLAG_T(val) bfin_write16(FIO_FLAG_T, val)
49#define bfin_read_FIO_FLAG_T() bfin_read16(FIO_FLAG_T)
50#define bfin_read_FIO_FLAG_C() bfin_read16(FIO_FLAG_C)
51#define bfin_read_FIO_FLAG_S() bfin_read16(FIO_FLAG_S)
52#define bfin_read_FIO_FLAG_D() bfin_read16(FIO_FLAG_D)
53#endif
54
55#endif /* _MACH_FIO_FLAG_H */