1 /****************************************************************************** 2 * 3 * Copyright(c) 2019 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 *****************************************************************************/ 15 #ifndef _HAL_IO_H_ 16 #define _HAL_IO_H_ 17 18 /* 19 Below is the data structure used by _io_handler 20 */ 21 22 extern u8 _hal_read8(struct rtw_hal_com_t *hal, u32 addr); 23 extern u16 _hal_read16(struct rtw_hal_com_t *hal, u32 addr); 24 extern u32 _hal_read32(struct rtw_hal_com_t *hal, u32 addr); 25 extern void _hal_read_mem(struct rtw_hal_com_t *hal, u32 addr, u32 cnt, u8 *pmem); 26 27 extern int _hal_write8(struct rtw_hal_com_t *hal, u32 addr, u8 val); 28 extern int _hal_write16(struct rtw_hal_com_t *hal, u32 addr, u16 val); 29 extern int _hal_write32(struct rtw_hal_com_t *hal, u32 addr, u32 val); 30 31 32 #ifdef CONFIG_SDIO_HCI 33 u8 _hal_sd_f0_read8(struct rtw_hal_com_t *hal, u32 addr); 34 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 35 u8 _hal_sd_iread8(struct rtw_hal_com_t *hal, u32 addr); 36 u16 _hal_sd_iread16(struct rtw_hal_com_t *hal, u32 addr); 37 u32 _hal_sd_iread32(struct rtw_hal_com_t *hal, u32 addr); 38 int _hal_sd_iwrite8(struct rtw_hal_com_t *hal, u32 addr, u8 val); 39 int _hal_sd_iwrite16(struct rtw_hal_com_t *hal, u32 addr, u16 val); 40 int _hal_sd_iwrite32(struct rtw_hal_com_t *hal, u32 addr, u32 val); 41 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 42 #endif /* CONFIG_SDIO_HCI */ 43 44 45 #ifdef DBG_IO 46 u32 match_read_sniff(struct rtw_hal_com_t *hal, u32 addr, u16 len, u32 val); 47 u32 match_write_sniff(struct rtw_hal_com_t *hal, u32 addr, u16 len, u32 val); 48 bool match_rf_read_sniff_ranges(struct rtw_hal_com_t *hal, u8 path, u32 addr, u32 mask); 49 bool match_rf_write_sniff_ranges(struct rtw_hal_com_t *hal, u8 path, u32 addr, u32 mask); 50 51 extern u8 dbg_hal_read8(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 52 extern u16 dbg_hal_read16(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 53 extern u32 dbg_hal_read32(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 54 55 extern int dbg_hal_write8(struct rtw_hal_com_t *hal, u32 addr, u8 val, const char *caller, const int line); 56 extern int dbg_hal_write16(struct rtw_hal_com_t *hal, u32 addr, u16 val, const char *caller, const int line); 57 extern int dbg_hal_write32(struct rtw_hal_com_t *hal, u32 addr, u32 val, const char *caller, const int line); 58 extern int dbg_hal_writeN(struct rtw_hal_com_t *hal, u32 addr , u32 length , u8 *data, const char *caller, const int line); 59 60 #ifdef CONFIG_SDIO_HCI 61 u8 dbg_hal_sd_f0_read8(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 62 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 63 u8 dbg_hal_sd_iread8(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 64 u16 dbg_hal_sd_iread16(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 65 u32 dbg_hal_sd_iread32(struct rtw_hal_com_t *hal, u32 addr, const char *caller, const int line); 66 int dbg_hal_sd_iwrite8(struct rtw_hal_com_t *hal, u32 addr, u8 val, const char *caller, const int line); 67 int dbg_hal_sd_iwrite16(struct rtw_hal_com_t *hal, u32 addr, u16 val, const char *caller, const int line); 68 int dbg_hal_sd_iwrite32(struct rtw_hal_com_t *hal, u32 addr, u32 val, const char *caller, const int line); 69 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 70 #endif /* CONFIG_SDIO_HCI */ 71 72 #define hal_read8(hal, addr) dbg_hal_read8((hal), (addr), __FUNCTION__, __LINE__) 73 #define hal_read16(hal, addr) dbg_hal_read16((hal), (addr), __FUNCTION__, __LINE__) 74 #define hal_read32(hal, addr) dbg_hal_read32((hal), (addr), __FUNCTION__, __LINE__) 75 76 #define hal_write8(hal, addr, val) dbg_hal_write8((hal), (addr), (val), __FUNCTION__, __LINE__) 77 #define hal_write16(hal, addr, val) dbg_hal_write16((hal), (addr), (val), __FUNCTION__, __LINE__) 78 #define hal_write32(hal, addr, val) dbg_hal_write32((hal), (addr), (val), __FUNCTION__, __LINE__) 79 80 81 #ifdef CONFIG_SDIO_HCI 82 #define hal_sd_f0_read8(hal, addr) dbg_hal_sd_f0_read8((hal), (addr), __func__, __LINE__) 83 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 84 #define hal_sd_iread8(hal, addr) dbg_hal_sd_iread8((hal), (addr), __func__, __LINE__) 85 #define hal_sd_iread16(hal, addr) dbg_hal_sd_iread16((hal), (addr), __func__, __LINE__) 86 #define hal_sd_iread32(hal, addr) dbg_hal_sd_iread32((hal), (addr), __func__, __LINE__) 87 #define hal_sd_iwrite8(hal, addr, val) dbg_hal_sd_iwrite8((hal), (addr), (val), __func__, __LINE__) 88 #define hal_sd_iwrite16(hal, addr, val) dbg_hal_sd_iwrite16((hal), (addr), (val), __func__, __LINE__) 89 #define hal_sd_iwrite32(hal, addr, val) dbg_hal_sd_iwrite32((hal), (addr), (val), __func__, __LINE__) 90 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 91 #endif /* CONFIG_SDIO_HCI */ 92 93 #else /* DBG_IO */ 94 #define hal_read8(hal, addr) _hal_read8((hal), (addr)) 95 #define hal_read16(hal, addr) _hal_read16((hal), (addr)) 96 #define hal_read32(hal, addr) _hal_read32((hal), (addr)) 97 98 #define hal_write8(hal, addr, val) _hal_write8((hal), (addr), (val)) 99 #define hal_write16(hal, addr, val) _hal_write16((hal), (addr), (val)) 100 #define hal_write32(hal, addr, val) _hal_write32((hal), (addr), (val)) 101 102 103 #ifdef CONFIG_SDIO_HCI 104 #define hal_sd_f0_read8(hal, addr) _hal_sd_f0_read8((hal), (addr)) 105 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 106 #define hal_sd_iread8(hal, addr) _hal_sd_iread8((hal), (addr)) 107 #define hal_sd_iread16(hal, addr) _hal_sd_iread16((hal), (addr)) 108 #define hal_sd_iread32(hal, addr) _hal_sd_iread32((hal), (addr)) 109 #define hal_sd_iwrite8(hal, addr, val) _hal_sd_iwrite8((hal), (addr), (val)) 110 #define hal_sd_iwrite16(hal, addr, val) _hal_sd_iwrite16((hal), (addr), (val)) 111 #define hal_sd_iwrite32(hal, addr, val) _hal_sd_iwrite32((hal), (addr), (val)) 112 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 113 #endif /* CONFIG_SDIO_HCI */ 114 115 #endif /* DBG_IO */ 116 117 void hal_write32_mask(struct rtw_hal_com_t *hal, u16 addr, u32 mask, u32 val); 118 119 u32 hal_init_io_priv(struct rtw_hal_com_t *hal, 120 void (*set_intf_ops)(struct rtw_hal_com_t *hal, struct hal_io_ops *ops)); 121 u32 hal_deinit_io_priv(struct rtw_hal_com_t *hal); 122 123 #endif /* _RTW_IO_H_ */ 124