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