xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8821cs/include/rtw_io.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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