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