Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
[linux-2.6-microblaze.git] / drivers / staging / wfx / hwio.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Low-level API.
4  *
5  * Copyright (c) 2017-2020, Silicon Laboratories, Inc.
6  * Copyright (c) 2010, ST-Ericsson
7  */
8 #ifndef WFX_HWIO_H
9 #define WFX_HWIO_H
10
11 struct wfx_dev;
12
13 int wfx_data_read(struct wfx_dev *wdev, void *buf, size_t buf_len);
14 int wfx_data_write(struct wfx_dev *wdev, const void *buf, size_t buf_len);
15
16 int sram_buf_read(struct wfx_dev *wdev, u32 addr, void *buf, size_t len);
17 int sram_buf_write(struct wfx_dev *wdev, u32 addr, const void *buf, size_t len);
18
19 int ahb_buf_read(struct wfx_dev *wdev, u32 addr, void *buf, size_t len);
20 int ahb_buf_write(struct wfx_dev *wdev, u32 addr, const void *buf, size_t len);
21
22 int sram_reg_read(struct wfx_dev *wdev, u32 addr, u32 *val);
23 int sram_reg_write(struct wfx_dev *wdev, u32 addr, u32 val);
24
25 int ahb_reg_read(struct wfx_dev *wdev, u32 addr, u32 *val);
26 int ahb_reg_write(struct wfx_dev *wdev, u32 addr, u32 val);
27
28 #define CFG_ERR_SPI_FRAME          0x00000001 // only with SPI
29 #define CFG_ERR_SDIO_BUF_MISMATCH  0x00000001 // only with SDIO
30 #define CFG_ERR_BUF_UNDERRUN       0x00000002
31 #define CFG_ERR_DATA_IN_TOO_LARGE  0x00000004
32 #define CFG_ERR_HOST_NO_OUT_QUEUE  0x00000008
33 #define CFG_ERR_BUF_OVERRUN        0x00000010
34 #define CFG_ERR_DATA_OUT_TOO_LARGE 0x00000020
35 #define CFG_ERR_HOST_NO_IN_QUEUE   0x00000040
36 #define CFG_ERR_HOST_CRC_MISS      0x00000080 // only with SDIO
37 #define CFG_SPI_IGNORE_CS          0x00000080 // only with SPI
38 #define CFG_BYTE_ORDER_MASK        0x00000300 // only writable with SPI
39 #define     CFG_BYTE_ORDER_BADC    0x00000000
40 #define     CFG_BYTE_ORDER_DCBA    0x00000100
41 #define     CFG_BYTE_ORDER_ABCD    0x00000200 // SDIO always use this value
42 #define CFG_DIRECT_ACCESS_MODE     0x00000400
43 #define CFG_PREFETCH_AHB           0x00000800
44 #define CFG_DISABLE_CPU_CLK        0x00001000
45 #define CFG_PREFETCH_SRAM          0x00002000
46 #define CFG_CPU_RESET              0x00004000
47 #define CFG_SDIO_DISABLE_IRQ       0x00008000 // only with SDIO
48 #define CFG_IRQ_ENABLE_DATA        0x00010000
49 #define CFG_IRQ_ENABLE_WRDY        0x00020000
50 #define CFG_CLK_RISE_EDGE          0x00040000
51 #define CFG_SDIO_DISABLE_CRC_CHK   0x00080000 // only with SDIO
52 #define CFG_RESERVED               0x00F00000
53 #define CFG_DEVICE_ID_MAJOR        0x07000000
54 #define CFG_DEVICE_ID_RESERVED     0x78000000
55 #define CFG_DEVICE_ID_TYPE         0x80000000
56 int config_reg_read(struct wfx_dev *wdev, u32 *val);
57 int config_reg_write(struct wfx_dev *wdev, u32 val);
58 int config_reg_write_bits(struct wfx_dev *wdev, u32 mask, u32 val);
59
60 #define CTRL_NEXT_LEN_MASK   0x00000FFF
61 #define CTRL_WLAN_WAKEUP     0x00001000
62 #define CTRL_WLAN_READY      0x00002000
63 int control_reg_read(struct wfx_dev *wdev, u32 *val);
64 int control_reg_write(struct wfx_dev *wdev, u32 val);
65 int control_reg_write_bits(struct wfx_dev *wdev, u32 mask, u32 val);
66
67 #define IGPR_RW          0x80000000
68 #define IGPR_INDEX       0x7F000000
69 #define IGPR_VALUE       0x00FFFFFF
70 int igpr_reg_read(struct wfx_dev *wdev, int index, u32 *val);
71 int igpr_reg_write(struct wfx_dev *wdev, int index, u32 val);
72
73 #endif /* WFX_HWIO_H */