1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 /* Copyright(c) 2007 - 2011 Realtek Corporation. */ 3 4 #ifndef _RTW_IO_H_ 5 #define _RTW_IO_H_ 6 7 #include "osdep_service.h" 8 #include "osdep_intf.h" 9 10 #include <asm/byteorder.h> 11 #include <linux/semaphore.h> 12 #include <linux/list.h> 13 #include <linux/spinlock.h> 14 #include <asm/atomic.h> 15 16 #include <linux/usb.h> 17 #include <linux/usb/ch9.h> 18 19 #define rtw_usb_buffer_alloc(dev, size, dma) \ 20 usb_alloc_coherent((dev), (size), (in_interrupt() ? \ 21 GFP_ATOMIC : GFP_KERNEL), (dma)) 22 #define rtw_usb_buffer_free(dev, size, addr, dma) \ 23 usb_free_coherent((dev), (size), (addr), (dma)) 24 25 #define NUM_IOREQ 8 26 27 #define MAX_PROT_SZ (64-16) 28 29 #define _IOREADY 0 30 #define _IO_WAIT_COMPLETE 1 31 #define _IO_WAIT_RSP 2 32 33 /* IO COMMAND TYPE */ 34 #define _IOSZ_MASK_ (0x7F) 35 #define _IO_WRITE_ BIT(7) 36 #define _IO_FIXED_ BIT(8) 37 #define _IO_BURST_ BIT(9) 38 #define _IO_BYTE_ BIT(10) 39 #define _IO_HW_ BIT(11) 40 #define _IO_WORD_ BIT(12) 41 #define _IO_SYNC_ BIT(13) 42 #define _IO_CMDMASK_ (0x1F80) 43 44 /* 45 For prompt mode accessing, caller shall free io_req 46 Otherwise, io_handler will free io_req 47 */ 48 49 /* IO STATUS TYPE */ 50 #define _IO_ERR_ BIT(2) 51 #define _IO_SUCCESS_ BIT(1) 52 #define _IO_DONE_ BIT(0) 53 54 #define IO_RD32 (_IO_SYNC_ | _IO_WORD_) 55 #define IO_RD16 (_IO_SYNC_ | _IO_HW_) 56 #define IO_RD8 (_IO_SYNC_ | _IO_BYTE_) 57 58 #define IO_RD32_ASYNC (_IO_WORD_) 59 #define IO_RD16_ASYNC (_IO_HW_) 60 #define IO_RD8_ASYNC (_IO_BYTE_) 61 62 #define IO_WR32 (_IO_WRITE_ | _IO_SYNC_ | _IO_WORD_) 63 #define IO_WR16 (_IO_WRITE_ | _IO_SYNC_ | _IO_HW_) 64 #define IO_WR8 (_IO_WRITE_ | _IO_SYNC_ | _IO_BYTE_) 65 66 #define IO_WR32_ASYNC (_IO_WRITE_ | _IO_WORD_) 67 #define IO_WR16_ASYNC (_IO_WRITE_ | _IO_HW_) 68 #define IO_WR8_ASYNC (_IO_WRITE_ | _IO_BYTE_) 69 70 /* 71 Only Sync. burst accessing is provided. 72 */ 73 74 #define IO_WR_BURST(x) \ 75 (_IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) 76 #define IO_RD_BURST(x) \ 77 (_IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) 78 79 /* below is for the intf_option bit defition... */ 80 81 #define _INTF_ASYNC_ BIT(0) /* support async io */ 82 83 struct intf_priv; 84 struct intf_hdl; 85 struct io_queue; 86 87 struct _io_ops { 88 u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr); 89 u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr); 90 u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr); 91 int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 92 int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 93 int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 94 int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, 95 u8 *pdata); 96 int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 97 int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 98 int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 99 void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 100 u8 *pmem); 101 void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 102 u8 *pmem); 103 u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 104 u8 *pmem); 105 u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 106 u8 *pmem); 107 void (*_read_port_cancel)(struct intf_hdl *pintfhdl); 108 void (*_write_port_cancel)(struct intf_hdl *pintfhdl); 109 }; 110 111 struct io_req { 112 struct list_head list; 113 u32 addr; 114 u32 val; 115 u32 command; 116 u32 status; 117 u8 *pbuf; 118 struct semaphore sema; 119 120 void (*_async_io_callback)(struct adapter *padater, 121 struct io_req *pio_req, u8 *cnxt); 122 u8 *cnxt; 123 }; 124 125 struct intf_hdl { 126 struct adapter *padapter; 127 struct dvobj_priv *pintf_dev; 128 struct _io_ops io_ops; 129 }; 130 131 struct reg_protocol_rd { 132 #ifdef __LITTLE_ENDIAN 133 /* DW1 */ 134 u32 NumOfTrans:4; 135 u32 Reserved1:4; 136 u32 Reserved2:24; 137 /* DW2 */ 138 u32 ByteCount:7; 139 u32 WriteEnable:1; /* 0:read, 1:write */ 140 u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ 141 u32 BurstMode:1; 142 u32 Byte1Access:1; 143 u32 Byte2Access:1; 144 u32 Byte4Access:1; 145 u32 Reserved3:3; 146 u32 Reserved4:16; 147 /* DW3 */ 148 u32 BusAddress; 149 /* DW4 */ 150 /* u32 Value; */ 151 #else 152 /* DW1 */ 153 u32 Reserved1:4; 154 u32 NumOfTrans:4; 155 u32 Reserved2:24; 156 /* DW2 */ 157 u32 WriteEnable:1; 158 u32 ByteCount:7; 159 u32 Reserved3:3; 160 u32 Byte4Access:1; 161 162 u32 Byte2Access:1; 163 u32 Byte1Access:1; 164 u32 BurstMode:1; 165 u32 FixOrContinuous:1; 166 u32 Reserved4:16; 167 /* DW3 */ 168 u32 BusAddress; 169 170 /* DW4 */ 171 #endif 172 }; 173 174 struct reg_protocol_wt { 175 #ifdef __LITTLE_ENDIAN 176 /* DW1 */ 177 u32 NumOfTrans:4; 178 u32 Reserved1:4; 179 u32 Reserved2:24; 180 /* DW2 */ 181 u32 ByteCount:7; 182 u32 WriteEnable:1; /* 0:read, 1:write */ 183 u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ 184 u32 BurstMode:1; 185 u32 Byte1Access:1; 186 u32 Byte2Access:1; 187 u32 Byte4Access:1; 188 u32 Reserved3:3; 189 u32 Reserved4:16; 190 /* DW3 */ 191 u32 BusAddress; 192 /* DW4 */ 193 u32 Value; 194 #else 195 /* DW1 */ 196 u32 Reserved1 :4; 197 u32 NumOfTrans:4; 198 u32 Reserved2:24; 199 /* DW2 */ 200 u32 WriteEnable:1; 201 u32 ByteCount:7; 202 u32 Reserved3:3; 203 u32 Byte4Access:1; 204 u32 Byte2Access:1; 205 u32 Byte1Access:1; 206 u32 BurstMode:1; 207 u32 FixOrContinuous:1; 208 u32 Reserved4:16; 209 /* DW3 */ 210 u32 BusAddress; 211 /* DW4 */ 212 u32 Value; 213 #endif 214 }; 215 216 /* 217 Below is the data structure used by _io_handler 218 */ 219 220 struct io_queue { 221 spinlock_t lock; 222 struct list_head free_ioreqs; 223 struct list_head pending; /* The io_req list that will be served 224 * in the single protocol read/write.*/ 225 struct list_head processing; 226 u8 *free_ioreqs_buf; /* 4-byte aligned */ 227 u8 *pallocated_free_ioreqs_buf; 228 struct intf_hdl intf; 229 }; 230 231 struct io_priv { 232 struct adapter *padapter; 233 struct intf_hdl intf; 234 }; 235 236 uint ioreq_flush(struct adapter *adapter, struct io_queue *ioqueue); 237 void sync_ioreq_enqueue(struct io_req *preq,struct io_queue *ioqueue); 238 uint sync_ioreq_flush(struct adapter *adapter, struct io_queue *ioqueue); 239 uint free_ioreq(struct io_req *preq, struct io_queue *pio_queue); 240 struct io_req *alloc_ioreq(struct io_queue *pio_q); 241 242 uint register_intf_hdl(u8 *dev, struct intf_hdl *pintfhdl); 243 void unregister_intf_hdl(struct intf_hdl *pintfhdl); 244 245 void _rtw_attrib_read(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 246 void _rtw_attrib_write(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 247 248 u8 _rtw_read8(struct adapter *adapter, u32 addr); 249 u16 _rtw_read16(struct adapter *adapter, u32 addr); 250 u32 _rtw_read32(struct adapter *adapter, u32 addr); 251 void _rtw_read_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 252 void _rtw_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 253 void _rtw_read_port_cancel(struct adapter *adapter); 254 255 int _rtw_write8(struct adapter *adapter, u32 addr, u8 val); 256 int _rtw_write16(struct adapter *adapter, u32 addr, u16 val); 257 int _rtw_write32(struct adapter *adapter, u32 addr, u32 val); 258 int _rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata); 259 260 int _rtw_write8_async(struct adapter *adapter, u32 addr, u8 val); 261 int _rtw_write16_async(struct adapter *adapter, u32 addr, u16 val); 262 int _rtw_write32_async(struct adapter *adapter, u32 addr, u32 val); 263 264 void _rtw_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 265 u32 _rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 266 u32 _rtw_write_port_and_wait(struct adapter *adapter, u32 addr, u32 cnt, 267 u8 *pmem, int timeout_ms); 268 void _rtw_write_port_cancel(struct adapter *adapter); 269 270 #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) 271 #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) 272 #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) 273 #define rtw_read_mem(adapter, addr, cnt, mem) \ 274 _rtw_read_mem((adapter), (addr), (cnt), (mem)) 275 #define rtw_read_port(adapter, addr, cnt, mem) \ 276 _rtw_read_port((adapter), (addr), (cnt), (mem)) 277 #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) 278 279 #define rtw_write8(adapter, addr, val) \ 280 _rtw_write8((adapter), (addr), (val)) 281 #define rtw_write16(adapter, addr, val) \ 282 _rtw_write16((adapter), (addr), (val)) 283 #define rtw_write32(adapter, addr, val) \ 284 _rtw_write32((adapter), (addr), (val)) 285 #define rtw_writeN(adapter, addr, length, data) \ 286 _rtw_writeN((adapter), (addr), (length), (data)) 287 #define rtw_write8_async(adapter, addr, val) \ 288 _rtw_write8_async((adapter), (addr), (val)) 289 #define rtw_write16_async(adapter, addr, val) \ 290 _rtw_write16_async((adapter), (addr), (val)) 291 #define rtw_write32_async(adapter, addr, val) \ 292 _rtw_write32_async((adapter), (addr), (val)) 293 #define rtw_write_mem(adapter, addr, cnt, mem) \ 294 _rtw_write_mem((adapter), (addr), (cnt), (mem)) 295 #define rtw_write_port(adapter, addr, cnt, mem) \ 296 _rtw_write_port((adapter), (addr), (cnt), (mem)) 297 #define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) \ 298 _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms)) 299 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) 300 301 void rtw_write_scsi(struct adapter *adapter, u32 cnt, u8 *pmem); 302 303 /* ioreq */ 304 void ioreq_read8(struct adapter *adapter, u32 addr, u8 *pval); 305 void ioreq_read16(struct adapter *adapter, u32 addr, u16 *pval); 306 void ioreq_read32(struct adapter *adapter, u32 addr, u32 *pval); 307 void ioreq_write8(struct adapter *adapter, u32 addr, u8 val); 308 void ioreq_write16(struct adapter *adapter, u32 addr, u16 val); 309 void ioreq_write32(struct adapter *adapter, u32 addr, u32 val); 310 311 uint async_read8(struct adapter *adapter, u32 addr, u8 *pbuff, 312 void (*_async_io_callback)(struct adapter *padater, 313 struct io_req *pio_req, 314 u8 *cnxt), u8 *cnxt); 315 uint async_read16(struct adapter *adapter, u32 addr, u8 *pbuff, 316 void (*_async_io_callback)(struct adapter *padater, 317 struct io_req *pio_req, 318 u8 *cnxt), u8 *cnxt); 319 uint async_read32(struct adapter *adapter, u32 addr, u8 *pbuff, 320 void (*_async_io_callback)(struct adapter *padater, 321 struct io_req *pio_req, 322 u8 *cnxt), u8 *cnxt); 323 324 void async_read_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 325 void async_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 326 327 void async_write8(struct adapter *adapter, u32 addr, u8 val, 328 void (*_async_io_callback)(struct adapter *padater, 329 struct io_req *pio_req, 330 u8 *cnxt), u8 *cnxt); 331 void async_write16(struct adapter *adapter, u32 addr, u16 val, 332 void (*_async_io_callback)(struct adapter *padater, 333 struct io_req *pio_req, 334 u8 *cnxt), u8 *cnxt); 335 void async_write32(struct adapter *adapter, u32 addr, u32 val, 336 void (*_async_io_callback)(struct adapter *padater, 337 struct io_req *pio_req, 338 u8 *cnxt), u8 *cnxt); 339 340 void async_write_mem(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 341 void async_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 342 343 int rtw_init_io_priv(struct adapter *padapter, 344 void (*set_intf_ops)(struct _io_ops *pops)); 345 346 uint alloc_io_queue(struct adapter *adapter); 347 void free_io_queue(struct adapter *adapter); 348 void async_bus_io(struct io_queue *pio_q); 349 void bus_sync_io(struct io_queue *pio_q); 350 u32 _ioreq2rwmem(struct io_queue *pio_q); 351 void dev_power_down(struct adapter * Adapter, u8 bpwrup); 352 353 #define PlatformEFIOWrite1Byte(_a,_b,_c) \ 354 rtw_write8(_a,_b,_c) 355 #define PlatformEFIOWrite2Byte(_a,_b,_c) \ 356 rtw_write16(_a,_b,_c) 357 #define PlatformEFIOWrite4Byte(_a,_b,_c) \ 358 rtw_write32(_a,_b,_c) 359 360 #define PlatformEFIORead1Byte(_a,_b) \ 361 rtw_read8(_a,_b) 362 #define PlatformEFIORead2Byte(_a,_b) \ 363 rtw_read16(_a,_b) 364 #define PlatformEFIORead4Byte(_a,_b) \ 365 rtw_read32(_a,_b) 366 367 #endif /* _RTL8711_IO_H_ */ 368