1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2017 Realtek Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of version 2 of the GNU General Public License as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 *****************************************************************************/ 16 17 #ifndef _RTW_IO_H_ 18 #define _RTW_IO_H_ 19 20 #define NUM_IOREQ 8 21 22 #ifdef PLATFORM_LINUX 23 #define MAX_PROT_SZ (64-16) 24 #endif 25 26 #define _IOREADY 0 27 #define _IO_WAIT_COMPLETE 1 28 #define _IO_WAIT_RSP 2 29 30 /* IO COMMAND TYPE */ 31 #define _IOSZ_MASK_ (0x7F) 32 #define _IO_WRITE_ BIT(7) 33 #define _IO_FIXED_ BIT(8) 34 #define _IO_BURST_ BIT(9) 35 #define _IO_BYTE_ BIT(10) 36 #define _IO_HW_ BIT(11) 37 #define _IO_WORD_ BIT(12) 38 #define _IO_SYNC_ BIT(13) 39 #define _IO_CMDMASK_ (0x1F80) 40 41 42 /* 43 For prompt mode accessing, caller shall free io_req 44 Otherwise, io_handler will free io_req 45 */ 46 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 55 #define IO_RD32 (_IO_SYNC_ | _IO_WORD_) 56 #define IO_RD16 (_IO_SYNC_ | _IO_HW_) 57 #define IO_RD8 (_IO_SYNC_ | _IO_BYTE_) 58 59 #define IO_RD32_ASYNC (_IO_WORD_) 60 #define IO_RD16_ASYNC (_IO_HW_) 61 #define IO_RD8_ASYNC (_IO_BYTE_) 62 63 #define IO_WR32 (_IO_WRITE_ | _IO_SYNC_ | _IO_WORD_) 64 #define IO_WR16 (_IO_WRITE_ | _IO_SYNC_ | _IO_HW_) 65 #define IO_WR8 (_IO_WRITE_ | _IO_SYNC_ | _IO_BYTE_) 66 67 #define IO_WR32_ASYNC (_IO_WRITE_ | _IO_WORD_) 68 #define IO_WR16_ASYNC (_IO_WRITE_ | _IO_HW_) 69 #define IO_WR8_ASYNC (_IO_WRITE_ | _IO_BYTE_) 70 71 /* 72 73 Only Sync. burst accessing is provided. 74 75 */ 76 77 #define IO_WR_BURST(x) (_IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) 78 #define IO_RD_BURST(x) (_IO_SYNC_ | _IO_BURST_ | ((x) & _IOSZ_MASK_)) 79 80 81 82 /* below is for the intf_option bit defition... */ 83 84 #define _INTF_ASYNC_ BIT(0) /* support async io */ 85 86 struct intf_priv; 87 struct intf_hdl; 88 struct io_queue; 89 90 struct _io_ops { 91 u8(*_read8)(struct intf_hdl *pintfhdl, u32 addr); 92 u16(*_read16)(struct intf_hdl *pintfhdl, u32 addr); 93 u32(*_read32)(struct intf_hdl *pintfhdl, u32 addr); 94 95 int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 96 int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 97 int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 98 int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata); 99 100 int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 101 int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 102 int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 103 104 void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); 105 void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); 106 107 void (*_sync_irp_protocol_rw)(struct io_queue *pio_q); 108 109 u32(*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr); 110 111 u32(*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); 112 u32(*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem); 113 114 u32(*_write_scsi)(struct intf_hdl *pintfhdl, u32 cnt, u8 *pmem); 115 116 void (*_read_port_cancel)(struct intf_hdl *pintfhdl); 117 void (*_write_port_cancel)(struct intf_hdl *pintfhdl); 118 119 #ifdef CONFIG_SDIO_HCI 120 u8(*_sd_f0_read8)(struct intf_hdl *pintfhdl, u32 addr); 121 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 122 u8(*_sd_iread8)(struct intf_hdl *pintfhdl, u32 addr); 123 u16(*_sd_iread16)(struct intf_hdl *pintfhdl, u32 addr); 124 u32(*_sd_iread32)(struct intf_hdl *pintfhdl, u32 addr); 125 int (*_sd_iwrite8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 126 int (*_sd_iwrite16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 127 int (*_sd_iwrite32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 128 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 129 #endif 130 131 }; 132 133 struct io_req { 134 _list list; 135 u32 addr; 136 volatile u32 val; 137 u32 command; 138 u32 status; 139 u8 *pbuf; 140 _sema sema; 141 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt); 142 u8 *cnxt; 143 }; 144 145 struct intf_hdl { 146 _adapter *padapter; 147 struct dvobj_priv *pintf_dev;/* pointer to &(padapter->dvobjpriv); */ 148 struct _io_ops io_ops; 149 }; 150 151 struct reg_protocol_rd { 152 153 #ifdef CONFIG_LITTLE_ENDIAN 154 155 /* DW1 */ 156 u32 NumOfTrans:4; 157 u32 Reserved1:4; 158 u32 Reserved2:24; 159 /* DW2 */ 160 u32 ByteCount:7; 161 u32 WriteEnable:1; /* 0:read, 1:write */ 162 u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ 163 u32 BurstMode:1; 164 u32 Byte1Access:1; 165 u32 Byte2Access:1; 166 u32 Byte4Access:1; 167 u32 Reserved3:3; 168 u32 Reserved4:16; 169 /* DW3 */ 170 u32 BusAddress; 171 /* DW4 */ 172 /* u32 Value; */ 173 #else 174 175 176 /* DW1 */ 177 u32 Reserved1:4; 178 u32 NumOfTrans:4; 179 180 u32 Reserved2:24; 181 182 /* DW2 */ 183 u32 WriteEnable:1; 184 u32 ByteCount:7; 185 186 187 u32 Reserved3:3; 188 u32 Byte4Access:1; 189 190 u32 Byte2Access:1; 191 u32 Byte1Access:1; 192 u32 BurstMode:1; 193 u32 FixOrContinuous:1; 194 195 u32 Reserved4:16; 196 197 /* DW3 */ 198 u32 BusAddress; 199 200 /* DW4 */ 201 /* u32 Value; */ 202 203 #endif 204 205 }; 206 207 208 struct reg_protocol_wt { 209 210 211 #ifdef CONFIG_LITTLE_ENDIAN 212 213 /* DW1 */ 214 u32 NumOfTrans:4; 215 u32 Reserved1:4; 216 u32 Reserved2:24; 217 /* DW2 */ 218 u32 ByteCount:7; 219 u32 WriteEnable:1; /* 0:read, 1:write */ 220 u32 FixOrContinuous:1; /* 0:continuous, 1: Fix */ 221 u32 BurstMode:1; 222 u32 Byte1Access:1; 223 u32 Byte2Access:1; 224 u32 Byte4Access:1; 225 u32 Reserved3:3; 226 u32 Reserved4:16; 227 /* DW3 */ 228 u32 BusAddress; 229 /* DW4 */ 230 u32 Value; 231 232 #else 233 /* DW1 */ 234 u32 Reserved1:4; 235 u32 NumOfTrans:4; 236 237 u32 Reserved2:24; 238 239 /* DW2 */ 240 u32 WriteEnable:1; 241 u32 ByteCount:7; 242 243 u32 Reserved3:3; 244 u32 Byte4Access:1; 245 246 u32 Byte2Access:1; 247 u32 Byte1Access:1; 248 u32 BurstMode:1; 249 u32 FixOrContinuous:1; 250 251 u32 Reserved4:16; 252 253 /* DW3 */ 254 u32 BusAddress; 255 256 /* DW4 */ 257 u32 Value; 258 259 #endif 260 261 }; 262 #ifdef CONFIG_PCI_HCI 263 #define MAX_CONTINUAL_IO_ERR 4 264 #endif 265 266 #ifdef CONFIG_USB_HCI 267 #define MAX_CONTINUAL_IO_ERR 4 268 #endif 269 270 #ifdef CONFIG_SDIO_HCI 271 #define SD_IO_TRY_CNT (8) 272 #define MAX_CONTINUAL_IO_ERR SD_IO_TRY_CNT 273 #endif 274 275 #ifdef CONFIG_GSPI_HCI 276 #define SD_IO_TRY_CNT (8) 277 #define MAX_CONTINUAL_IO_ERR SD_IO_TRY_CNT 278 #endif 279 280 281 int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj); 282 void rtw_reset_continual_io_error(struct dvobj_priv *dvobj); 283 284 /* 285 Below is the data structure used by _io_handler 286 287 */ 288 289 struct io_queue { 290 _lock lock; 291 _list free_ioreqs; 292 _list pending; /* The io_req list that will be served in the single protocol read/write. */ 293 _list processing; 294 u8 *free_ioreqs_buf; /* 4-byte aligned */ 295 u8 *pallocated_free_ioreqs_buf; 296 struct intf_hdl intf; 297 }; 298 299 struct io_priv { 300 301 _adapter *padapter; 302 303 struct intf_hdl intf; 304 305 }; 306 307 extern uint ioreq_flush(_adapter *adapter, struct io_queue *ioqueue); 308 extern void sync_ioreq_enqueue(struct io_req *preq, struct io_queue *ioqueue); 309 extern uint sync_ioreq_flush(_adapter *adapter, struct io_queue *ioqueue); 310 311 312 extern uint free_ioreq(struct io_req *preq, struct io_queue *pio_queue); 313 extern struct io_req *alloc_ioreq(struct io_queue *pio_q); 314 315 extern uint register_intf_hdl(u8 *dev, struct intf_hdl *pintfhdl); 316 extern void unregister_intf_hdl(struct intf_hdl *pintfhdl); 317 318 extern void _rtw_attrib_read(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 319 extern void _rtw_attrib_write(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 320 321 extern u8 _rtw_read8(_adapter *adapter, u32 addr); 322 extern u16 _rtw_read16(_adapter *adapter, u32 addr); 323 extern u32 _rtw_read32(_adapter *adapter, u32 addr); 324 extern void _rtw_read_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 325 extern void _rtw_read_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 326 extern void _rtw_read_port_cancel(_adapter *adapter); 327 328 329 extern int _rtw_write8(_adapter *adapter, u32 addr, u8 val); 330 extern int _rtw_write16(_adapter *adapter, u32 addr, u16 val); 331 extern int _rtw_write32(_adapter *adapter, u32 addr, u32 val); 332 extern int _rtw_writeN(_adapter *adapter, u32 addr, u32 length, u8 *pdata); 333 334 #ifdef CONFIG_SDIO_HCI 335 u8 _rtw_sd_f0_read8(_adapter *adapter, u32 addr); 336 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 337 u8 _rtw_sd_iread8(_adapter *adapter, u32 addr); 338 u16 _rtw_sd_iread16(_adapter *adapter, u32 addr); 339 u32 _rtw_sd_iread32(_adapter *adapter, u32 addr); 340 int _rtw_sd_iwrite8(_adapter *adapter, u32 addr, u8 val); 341 int _rtw_sd_iwrite16(_adapter *adapter, u32 addr, u16 val); 342 int _rtw_sd_iwrite32(_adapter *adapter, u32 addr, u32 val); 343 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 344 #endif /* CONFIG_SDIO_HCI */ 345 346 extern int _rtw_write8_async(_adapter *adapter, u32 addr, u8 val); 347 extern int _rtw_write16_async(_adapter *adapter, u32 addr, u16 val); 348 extern int _rtw_write32_async(_adapter *adapter, u32 addr, u32 val); 349 350 extern void _rtw_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 351 extern u32 _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 352 u32 _rtw_write_port_and_wait(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms); 353 extern void _rtw_write_port_cancel(_adapter *adapter); 354 355 #ifdef DBG_IO 356 u32 match_read_sniff(_adapter *adapter, u32 addr, u16 len, u32 val); 357 u32 match_write_sniff(_adapter *adapter, u32 addr, u16 len, u32 val); 358 bool match_rf_read_sniff_ranges(_adapter *adapter, u8 path, u32 addr, u32 mask); 359 bool match_rf_write_sniff_ranges(_adapter *adapter, u8 path, u32 addr, u32 mask); 360 361 void dbg_rtw_reg_read_monitor(_adapter *adapter, u32 addr, u32 len, u32 val, const char *caller, const int line); 362 void dbg_rtw_reg_write_monitor(_adapter *adapter, u32 addr, u32 len, u32 val, const char *caller, const int line); 363 364 extern u8 dbg_rtw_read8(_adapter *adapter, u32 addr, const char *caller, const int line); 365 extern u16 dbg_rtw_read16(_adapter *adapter, u32 addr, const char *caller, const int line); 366 extern u32 dbg_rtw_read32(_adapter *adapter, u32 addr, const char *caller, const int line); 367 368 extern int dbg_rtw_write8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line); 369 extern int dbg_rtw_write16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line); 370 extern int dbg_rtw_write32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line); 371 extern int dbg_rtw_writeN(_adapter *adapter, u32 addr , u32 length , u8 *data, const char *caller, const int line); 372 373 #ifdef CONFIG_SDIO_HCI 374 u8 dbg_rtw_sd_f0_read8(_adapter *adapter, u32 addr, const char *caller, const int line); 375 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 376 u8 dbg_rtw_sd_iread8(_adapter *adapter, u32 addr, const char *caller, const int line); 377 u16 dbg_rtw_sd_iread16(_adapter *adapter, u32 addr, const char *caller, const int line); 378 u32 dbg_rtw_sd_iread32(_adapter *adapter, u32 addr, const char *caller, const int line); 379 int dbg_rtw_sd_iwrite8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line); 380 int dbg_rtw_sd_iwrite16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line); 381 int dbg_rtw_sd_iwrite32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line); 382 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 383 #endif /* CONFIG_SDIO_HCI */ 384 385 #define rtw_read8(adapter, addr) dbg_rtw_read8((adapter), (addr), __FUNCTION__, __LINE__) 386 #define rtw_read16(adapter, addr) dbg_rtw_read16((adapter), (addr), __FUNCTION__, __LINE__) 387 #define rtw_read32(adapter, addr) dbg_rtw_read32((adapter), (addr), __FUNCTION__, __LINE__) 388 #define rtw_read_mem(adapter, addr, cnt, mem) _rtw_read_mem((adapter), (addr), (cnt), (mem)) 389 #define rtw_read_port(adapter, addr, cnt, mem) _rtw_read_port((adapter), (addr), (cnt), (mem)) 390 #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) 391 392 #define rtw_write8(adapter, addr, val) dbg_rtw_write8((adapter), (addr), (val), __FUNCTION__, __LINE__) 393 #define rtw_write16(adapter, addr, val) dbg_rtw_write16((adapter), (addr), (val), __FUNCTION__, __LINE__) 394 #define rtw_write32(adapter, addr, val) dbg_rtw_write32((adapter), (addr), (val), __FUNCTION__, __LINE__) 395 #define rtw_writeN(adapter, addr, length, data) dbg_rtw_writeN((adapter), (addr), (length), (data), __FUNCTION__, __LINE__) 396 397 #define rtw_write8_async(adapter, addr, val) _rtw_write8_async((adapter), (addr), (val)) 398 #define rtw_write16_async(adapter, addr, val) _rtw_write16_async((adapter), (addr), (val)) 399 #define rtw_write32_async(adapter, addr, val) _rtw_write32_async((adapter), (addr), (val)) 400 401 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), addr, cnt, mem) 402 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port(adapter, addr, cnt, mem) 403 #define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms)) 404 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel(adapter) 405 406 #ifdef CONFIG_SDIO_HCI 407 #define rtw_sd_f0_read8(adapter, addr) dbg_rtw_sd_f0_read8((adapter), (addr), __func__, __LINE__) 408 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 409 #define rtw_sd_iread8(adapter, addr) dbg_rtw_sd_iread8((adapter), (addr), __func__, __LINE__) 410 #define rtw_sd_iread16(adapter, addr) dbg_rtw_sd_iread16((adapter), (addr), __func__, __LINE__) 411 #define rtw_sd_iread32(adapter, addr) dbg_rtw_sd_iread32((adapter), (addr), __func__, __LINE__) 412 #define rtw_sd_iwrite8(adapter, addr, val) dbg_rtw_sd_iwrite8((adapter), (addr), (val), __func__, __LINE__) 413 #define rtw_sd_iwrite16(adapter, addr, val) dbg_rtw_sd_iwrite16((adapter), (addr), (val), __func__, __LINE__) 414 #define rtw_sd_iwrite32(adapter, addr, val) dbg_rtw_sd_iwrite32((adapter), (addr), (val), __func__, __LINE__) 415 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 416 #endif /* CONFIG_SDIO_HCI */ 417 418 #else /* DBG_IO */ 419 #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr)) 420 #define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr)) 421 #define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr)) 422 #define rtw_read_mem(adapter, addr, cnt, mem) _rtw_read_mem((adapter), (addr), (cnt), (mem)) 423 #define rtw_read_port(adapter, addr, cnt, mem) _rtw_read_port((adapter), (addr), (cnt), (mem)) 424 #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter)) 425 426 #define rtw_write8(adapter, addr, val) _rtw_write8((adapter), (addr), (val)) 427 #define rtw_write16(adapter, addr, val) _rtw_write16((adapter), (addr), (val)) 428 #define rtw_write32(adapter, addr, val) _rtw_write32((adapter), (addr), (val)) 429 #define rtw_writeN(adapter, addr, length, data) _rtw_writeN((adapter), (addr), (length), (data)) 430 431 #define rtw_write8_async(adapter, addr, val) _rtw_write8_async((adapter), (addr), (val)) 432 #define rtw_write16_async(adapter, addr, val) _rtw_write16_async((adapter), (addr), (val)) 433 #define rtw_write32_async(adapter, addr, val) _rtw_write32_async((adapter), (addr), (val)) 434 435 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), (addr), (cnt), (mem)) 436 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port((adapter), (addr), (cnt), (mem)) 437 #define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms)) 438 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter)) 439 440 #ifdef CONFIG_SDIO_HCI 441 #define rtw_sd_f0_read8(adapter, addr) _rtw_sd_f0_read8((adapter), (addr)) 442 #ifdef CONFIG_SDIO_INDIRECT_ACCESS 443 #define rtw_sd_iread8(adapter, addr) _rtw_sd_iread8((adapter), (addr)) 444 #define rtw_sd_iread16(adapter, addr) _rtw_sd_iread16((adapter), (addr)) 445 #define rtw_sd_iread32(adapter, addr) _rtw_sd_iread32((adapter), (addr)) 446 #define rtw_sd_iwrite8(adapter, addr, val) _rtw_sd_iwrite8((adapter), (addr), (val)) 447 #define rtw_sd_iwrite16(adapter, addr, val) _rtw_sd_iwrite16((adapter), (addr), (val)) 448 #define rtw_sd_iwrite32(adapter, addr, val) _rtw_sd_iwrite32((adapter), (addr), (val)) 449 #endif /* CONFIG_SDIO_INDIRECT_ACCESS */ 450 #endif /* CONFIG_SDIO_HCI */ 451 452 #endif /* DBG_IO */ 453 454 extern void rtw_write_scsi(_adapter *adapter, u32 cnt, u8 *pmem); 455 456 /* ioreq */ 457 extern void ioreq_read8(_adapter *adapter, u32 addr, u8 *pval); 458 extern void ioreq_read16(_adapter *adapter, u32 addr, u16 *pval); 459 extern void ioreq_read32(_adapter *adapter, u32 addr, u32 *pval); 460 extern void ioreq_write8(_adapter *adapter, u32 addr, u8 val); 461 extern void ioreq_write16(_adapter *adapter, u32 addr, u16 val); 462 extern void ioreq_write32(_adapter *adapter, u32 addr, u32 val); 463 464 465 extern uint async_read8(_adapter *adapter, u32 addr, u8 *pbuff, 466 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 467 extern uint async_read16(_adapter *adapter, u32 addr, u8 *pbuff, 468 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 469 extern uint async_read32(_adapter *adapter, u32 addr, u8 *pbuff, 470 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 471 472 extern void async_read_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 473 extern void async_read_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 474 475 extern void async_write8(_adapter *adapter, u32 addr, u8 val, 476 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 477 extern void async_write16(_adapter *adapter, u32 addr, u16 val, 478 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 479 extern void async_write32(_adapter *adapter, u32 addr, u32 val, 480 void (*_async_io_callback)(_adapter *padater, struct io_req *pio_req, u8 *cnxt), u8 *cnxt); 481 482 extern void async_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 483 extern void async_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem); 484 485 486 int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(_adapter *padapter, struct _io_ops *pops)); 487 488 489 extern uint alloc_io_queue(_adapter *adapter); 490 extern void free_io_queue(_adapter *adapter); 491 extern void async_bus_io(struct io_queue *pio_q); 492 extern void bus_sync_io(struct io_queue *pio_q); 493 extern u32 _ioreq2rwmem(struct io_queue *pio_q); 494 495 /* 496 #define RTL_R8(reg) rtw_read8(padapter, reg) 497 #define RTL_R16(reg) rtw_read16(padapter, reg) 498 #define RTL_R32(reg) rtw_read32(padapter, reg) 499 #define RTL_W8(reg, val8) rtw_write8(padapter, reg, val8) 500 #define RTL_W16(reg, val16) rtw_write16(padapter, reg, val16) 501 #define RTL_W32(reg, val32) rtw_write32(padapter, reg, val32) 502 */ 503 504 /* 505 #define RTL_W8_ASYNC(reg, val8) rtw_write32_async(padapter, reg, val8) 506 #define RTL_W16_ASYNC(reg, val16) rtw_write32_async(padapter, reg, val16) 507 #define RTL_W32_ASYNC(reg, val32) rtw_write32_async(padapter, reg, val32) 508 509 #define RTL_WRITE_BB(reg, val32) phy_SetUsbBBReg(padapter, reg, val32) 510 #define RTL_READ_BB(reg) phy_QueryUsbBBReg(padapter, reg) 511 */ 512 513 #define PlatformEFIOWrite1Byte(_a, _b, _c) \ 514 rtw_write8(_a, _b, _c) 515 #define PlatformEFIOWrite2Byte(_a, _b, _c) \ 516 rtw_write16(_a, _b, _c) 517 #define PlatformEFIOWrite4Byte(_a, _b, _c) \ 518 rtw_write32(_a, _b, _c) 519 520 #define PlatformEFIORead1Byte(_a, _b) \ 521 rtw_read8(_a, _b) 522 #define PlatformEFIORead2Byte(_a, _b) \ 523 rtw_read16(_a, _b) 524 #define PlatformEFIORead4Byte(_a, _b) \ 525 rtw_read32(_a, _b) 526 527 #endif /* _RTL8711_IO_H_ */ 528