iwlwifi: mvm: fix an overflow in iwl_mvm_get_signal_strength
[sfrench/cifs-2.6.git] / arch / mips / include / asm / mach-bcm63xx / bcm63xx_dev_spi.h
1 #ifndef BCM63XX_DEV_SPI_H
2 #define BCM63XX_DEV_SPI_H
3
4 #include <linux/types.h>
5 #include <bcm63xx_io.h>
6 #include <bcm63xx_regs.h>
7
8 int __init bcm63xx_spi_register(void);
9
10 struct bcm63xx_spi_pdata {
11         unsigned int    fifo_size;
12         unsigned int    msg_type_shift;
13         unsigned int    msg_ctl_width;
14         int             bus_num;
15         int             num_chipselect;
16 };
17
18 enum bcm63xx_regs_spi {
19         SPI_CMD,
20         SPI_INT_STATUS,
21         SPI_INT_MASK_ST,
22         SPI_INT_MASK,
23         SPI_ST,
24         SPI_CLK_CFG,
25         SPI_FILL_BYTE,
26         SPI_MSG_TAIL,
27         SPI_RX_TAIL,
28         SPI_MSG_CTL,
29         SPI_MSG_DATA,
30         SPI_RX_DATA,
31 };
32
33 #define __GEN_SPI_RSET_BASE(__cpu, __rset)                              \
34         case SPI_## __rset:                                             \
35                 return SPI_## __cpu ##_## __rset;
36
37 #define __GEN_SPI_RSET(__cpu)                                           \
38         switch (reg) {                                                  \
39         __GEN_SPI_RSET_BASE(__cpu, CMD)                                 \
40         __GEN_SPI_RSET_BASE(__cpu, INT_STATUS)                          \
41         __GEN_SPI_RSET_BASE(__cpu, INT_MASK_ST)                         \
42         __GEN_SPI_RSET_BASE(__cpu, INT_MASK)                            \
43         __GEN_SPI_RSET_BASE(__cpu, ST)                                  \
44         __GEN_SPI_RSET_BASE(__cpu, CLK_CFG)                             \
45         __GEN_SPI_RSET_BASE(__cpu, FILL_BYTE)                           \
46         __GEN_SPI_RSET_BASE(__cpu, MSG_TAIL)                            \
47         __GEN_SPI_RSET_BASE(__cpu, RX_TAIL)                             \
48         __GEN_SPI_RSET_BASE(__cpu, MSG_CTL)                             \
49         __GEN_SPI_RSET_BASE(__cpu, MSG_DATA)                            \
50         __GEN_SPI_RSET_BASE(__cpu, RX_DATA)                             \
51         }
52
53 #define __GEN_SPI_REGS_TABLE(__cpu)                                     \
54         [SPI_CMD]               = SPI_## __cpu ##_CMD,                  \
55         [SPI_INT_STATUS]        = SPI_## __cpu ##_INT_STATUS,           \
56         [SPI_INT_MASK_ST]       = SPI_## __cpu ##_INT_MASK_ST,          \
57         [SPI_INT_MASK]          = SPI_## __cpu ##_INT_MASK,             \
58         [SPI_ST]                = SPI_## __cpu ##_ST,                   \
59         [SPI_CLK_CFG]           = SPI_## __cpu ##_CLK_CFG,              \
60         [SPI_FILL_BYTE]         = SPI_## __cpu ##_FILL_BYTE,            \
61         [SPI_MSG_TAIL]          = SPI_## __cpu ##_MSG_TAIL,             \
62         [SPI_RX_TAIL]           = SPI_## __cpu ##_RX_TAIL,              \
63         [SPI_MSG_CTL]           = SPI_## __cpu ##_MSG_CTL,              \
64         [SPI_MSG_DATA]          = SPI_## __cpu ##_MSG_DATA,             \
65         [SPI_RX_DATA]           = SPI_## __cpu ##_RX_DATA,
66
67 static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg)
68 {
69 #ifdef BCMCPU_RUNTIME_DETECT
70         extern const unsigned long *bcm63xx_regs_spi;
71
72         return bcm63xx_regs_spi[reg];
73 #else
74 #if defined(CONFIG_BCM63XX_CPU_6338) || defined(CONFIG_BCM63XX_CPU_6348)
75         __GEN_SPI_RSET(6348)
76 #endif
77 #if defined(CONFIG_BCM63XX_CPU_6358) || defined(CONFIG_BCM63XX_CPU_6362) || \
78         defined(CONFIG_BCM63XX_CPU_6368)
79         __GEN_SPI_RSET(6358)
80 #endif
81 #endif
82         return 0;
83 }
84
85 #endif /* BCM63XX_DEV_SPI_H */