xref: /openbmc/linux/drivers/net/wireless/intersil/p54/p54spi.h (revision d3466830c165a298419788b88086ea99974e63ff)
1*d3466830SKalle Valo /*
2*d3466830SKalle Valo  * Copyright (C) 2008 Christian Lamparter <chunkeey@web.de>
3*d3466830SKalle Valo  *
4*d3466830SKalle Valo  * This driver is a port from stlc45xx:
5*d3466830SKalle Valo  *	Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
6*d3466830SKalle Valo  *
7*d3466830SKalle Valo  * This program is free software; you can redistribute it and/or
8*d3466830SKalle Valo  * modify it under the terms of the GNU General Public License
9*d3466830SKalle Valo  * version 2 as published by the Free Software Foundation.
10*d3466830SKalle Valo  *
11*d3466830SKalle Valo  * This program is distributed in the hope that it will be useful, but
12*d3466830SKalle Valo  * WITHOUT ANY WARRANTY; without even the implied warranty of
13*d3466830SKalle Valo  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*d3466830SKalle Valo  * General Public License for more details.
15*d3466830SKalle Valo  *
16*d3466830SKalle Valo  * You should have received a copy of the GNU General Public License
17*d3466830SKalle Valo  * along with this program; if not, write to the Free Software
18*d3466830SKalle Valo  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19*d3466830SKalle Valo  * 02110-1301 USA
20*d3466830SKalle Valo  */
21*d3466830SKalle Valo 
22*d3466830SKalle Valo #ifndef P54SPI_H
23*d3466830SKalle Valo #define P54SPI_H
24*d3466830SKalle Valo 
25*d3466830SKalle Valo #include <linux/mutex.h>
26*d3466830SKalle Valo #include <linux/list.h>
27*d3466830SKalle Valo #include <net/mac80211.h>
28*d3466830SKalle Valo 
29*d3466830SKalle Valo #include "p54.h"
30*d3466830SKalle Valo 
31*d3466830SKalle Valo /* Bit 15 is read/write bit; ON = READ, OFF = WRITE */
32*d3466830SKalle Valo #define SPI_ADRS_READ_BIT_15		0x8000
33*d3466830SKalle Valo 
34*d3466830SKalle Valo #define SPI_ADRS_ARM_INTERRUPTS		0x00
35*d3466830SKalle Valo #define SPI_ADRS_ARM_INT_EN		0x04
36*d3466830SKalle Valo 
37*d3466830SKalle Valo #define SPI_ADRS_HOST_INTERRUPTS	0x08
38*d3466830SKalle Valo #define SPI_ADRS_HOST_INT_EN		0x0c
39*d3466830SKalle Valo #define SPI_ADRS_HOST_INT_ACK		0x10
40*d3466830SKalle Valo 
41*d3466830SKalle Valo #define SPI_ADRS_GEN_PURP_1		0x14
42*d3466830SKalle Valo #define SPI_ADRS_GEN_PURP_2		0x18
43*d3466830SKalle Valo 
44*d3466830SKalle Valo #define SPI_ADRS_DEV_CTRL_STAT		0x26    /* high word */
45*d3466830SKalle Valo 
46*d3466830SKalle Valo #define SPI_ADRS_DMA_DATA		0x28
47*d3466830SKalle Valo 
48*d3466830SKalle Valo #define SPI_ADRS_DMA_WRITE_CTRL		0x2c
49*d3466830SKalle Valo #define SPI_ADRS_DMA_WRITE_LEN		0x2e
50*d3466830SKalle Valo #define SPI_ADRS_DMA_WRITE_BASE		0x30
51*d3466830SKalle Valo 
52*d3466830SKalle Valo #define SPI_ADRS_DMA_READ_CTRL		0x34
53*d3466830SKalle Valo #define SPI_ADRS_DMA_READ_LEN		0x36
54*d3466830SKalle Valo #define SPI_ADRS_DMA_READ_BASE		0x38
55*d3466830SKalle Valo 
56*d3466830SKalle Valo #define SPI_CTRL_STAT_HOST_OVERRIDE	0x8000
57*d3466830SKalle Valo #define SPI_CTRL_STAT_START_HALTED	0x4000
58*d3466830SKalle Valo #define SPI_CTRL_STAT_RAM_BOOT		0x2000
59*d3466830SKalle Valo #define SPI_CTRL_STAT_HOST_RESET	0x1000
60*d3466830SKalle Valo #define SPI_CTRL_STAT_HOST_CPU_EN	0x0800
61*d3466830SKalle Valo 
62*d3466830SKalle Valo #define SPI_DMA_WRITE_CTRL_ENABLE	0x0001
63*d3466830SKalle Valo #define SPI_DMA_READ_CTRL_ENABLE	0x0001
64*d3466830SKalle Valo #define HOST_ALLOWED			(1 << 7)
65*d3466830SKalle Valo 
66*d3466830SKalle Valo #define SPI_TIMEOUT			100         /* msec */
67*d3466830SKalle Valo 
68*d3466830SKalle Valo #define SPI_MAX_TX_PACKETS		32
69*d3466830SKalle Valo 
70*d3466830SKalle Valo #define SPI_MAX_PACKET_SIZE		32767
71*d3466830SKalle Valo 
72*d3466830SKalle Valo #define SPI_TARGET_INT_WAKEUP		0x00000001
73*d3466830SKalle Valo #define SPI_TARGET_INT_SLEEP		0x00000002
74*d3466830SKalle Valo #define SPI_TARGET_INT_RDDONE		0x00000004
75*d3466830SKalle Valo 
76*d3466830SKalle Valo #define SPI_TARGET_INT_CTS		0x00004000
77*d3466830SKalle Valo #define SPI_TARGET_INT_DR		0x00008000
78*d3466830SKalle Valo 
79*d3466830SKalle Valo #define SPI_HOST_INT_READY		0x00000001
80*d3466830SKalle Valo #define SPI_HOST_INT_WR_READY		0x00000002
81*d3466830SKalle Valo #define SPI_HOST_INT_SW_UPDATE		0x00000004
82*d3466830SKalle Valo #define SPI_HOST_INT_UPDATE		0x10000000
83*d3466830SKalle Valo 
84*d3466830SKalle Valo /* clear to send */
85*d3466830SKalle Valo #define SPI_HOST_INT_CR			0x00004000
86*d3466830SKalle Valo 
87*d3466830SKalle Valo /* data ready */
88*d3466830SKalle Valo #define SPI_HOST_INT_DR			0x00008000
89*d3466830SKalle Valo 
90*d3466830SKalle Valo #define SPI_HOST_INTS_DEFAULT 						    \
91*d3466830SKalle Valo 	(SPI_HOST_INT_READY | SPI_HOST_INT_UPDATE | SPI_HOST_INT_SW_UPDATE)
92*d3466830SKalle Valo 
93*d3466830SKalle Valo #define TARGET_BOOT_SLEEP 50
94*d3466830SKalle Valo 
95*d3466830SKalle Valo struct p54s_dma_regs {
96*d3466830SKalle Valo 	__le16 cmd;
97*d3466830SKalle Valo 	__le16 len;
98*d3466830SKalle Valo 	__le32 addr;
99*d3466830SKalle Valo } __packed;
100*d3466830SKalle Valo 
101*d3466830SKalle Valo struct p54s_tx_info {
102*d3466830SKalle Valo 	struct list_head tx_list;
103*d3466830SKalle Valo };
104*d3466830SKalle Valo 
105*d3466830SKalle Valo struct p54s_priv {
106*d3466830SKalle Valo 	/* p54_common has to be the first entry */
107*d3466830SKalle Valo 	struct p54_common common;
108*d3466830SKalle Valo 	struct ieee80211_hw *hw;
109*d3466830SKalle Valo 	struct spi_device *spi;
110*d3466830SKalle Valo 
111*d3466830SKalle Valo 	struct work_struct work;
112*d3466830SKalle Valo 
113*d3466830SKalle Valo 	struct mutex mutex;
114*d3466830SKalle Valo 	struct completion fw_comp;
115*d3466830SKalle Valo 
116*d3466830SKalle Valo 	spinlock_t tx_lock;
117*d3466830SKalle Valo 
118*d3466830SKalle Valo 	/* protected by tx_lock */
119*d3466830SKalle Valo 	struct list_head tx_pending;
120*d3466830SKalle Valo 
121*d3466830SKalle Valo 	enum fw_state fw_state;
122*d3466830SKalle Valo 	const struct firmware *firmware;
123*d3466830SKalle Valo };
124*d3466830SKalle Valo 
125*d3466830SKalle Valo #endif /* P54SPI_H */
126