• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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