aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ipw2x00/ipw2200.c
diff options
context:
space:
mode:
authorJiri Slaby <jirislaby@gmail.com>2009-02-12 16:29:40 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-02-27 14:52:34 -0500
commit1788bcd155a2cbb7fad6bb30c2ae3786ceee8b4c (patch)
tree48e680cc4836ff88f587ee98d62f9ec62c8daa41 /drivers/net/wireless/ipw2x00/ipw2200.c
parent191a99b748a080d9ec896f35352da741b556119e (diff)
ipw2200, fix ipw io functions
- some of them are defined as follows: #define ipw_write32 expr1; expr2 and are called from loops or ifs without a compound statement, so they are broken. Fix it by putting them into do {} while (0) for writes and ({ }) for reads. - also unify and cleanup them while at it -- convert them from macros to inline functions, so that we get some basic typechecking Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Acked-by: Zhu Yi <yi.zhu@intel.com> Cc: James Ketrenos <jketreno@linux.intel.com> Cc: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ipw2x00/ipw2200.c')
-rw-r--r--drivers/net/wireless/ipw2x00/ipw2200.c106
1 files changed, 60 insertions, 46 deletions
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c b/drivers/net/wireless/ipw2x00/ipw2200.c
index 0420d3d35dd4..01c4ede90662 100644
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -301,88 +301,102 @@ static inline void ipw_write_reg32(struct ipw_priv *a, u32 b, u32 c)
301} 301}
302 302
303/* 8-bit direct write (low 4K) */ 303/* 8-bit direct write (low 4K) */
304#define _ipw_write8(ipw, ofs, val) writeb((val), (ipw)->hw_base + (ofs)) 304static inline void _ipw_write8(struct ipw_priv *ipw, unsigned long ofs,
305 u8 val)
306{
307 writeb(val, ipw->hw_base + ofs);
308}
305 309
306/* 8-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ 310/* 8-bit direct write (for low 4K of SRAM/regs), with debug wrapper */
307#define ipw_write8(ipw, ofs, val) do { \ 311#define ipw_write8(ipw, ofs, val) do { \
308 IPW_DEBUG_IO("%s %d: write_direct8(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ 312 IPW_DEBUG_IO("%s %d: write_direct8(0x%08X, 0x%08X)\n", __FILE__, \
309 _ipw_write8(ipw, ofs, val); \ 313 __LINE__, (u32)(ofs), (u32)(val)); \
310 } while (0) 314 _ipw_write8(ipw, ofs, val); \
315} while (0)
311 316
312/* 16-bit direct write (low 4K) */ 317/* 16-bit direct write (low 4K) */
313#define _ipw_write16(ipw, ofs, val) writew((val), (ipw)->hw_base + (ofs)) 318static inline void _ipw_write16(struct ipw_priv *ipw, unsigned long ofs,
319 u16 val)
320{
321 writew(val, ipw->hw_base + ofs);
322}
314 323
315/* 16-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ 324/* 16-bit direct write (for low 4K of SRAM/regs), with debug wrapper */
316#define ipw_write16(ipw, ofs, val) \ 325#define ipw_write16(ipw, ofs, val) do { \
317 IPW_DEBUG_IO("%s %d: write_direct16(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ 326 IPW_DEBUG_IO("%s %d: write_direct16(0x%08X, 0x%08X)\n", __FILE__, \
318 _ipw_write16(ipw, ofs, val) 327 __LINE__, (u32)(ofs), (u32)(val)); \
328 _ipw_write16(ipw, ofs, val); \
329} while (0)
319 330
320/* 32-bit direct write (low 4K) */ 331/* 32-bit direct write (low 4K) */
321#define _ipw_write32(ipw, ofs, val) writel((val), (ipw)->hw_base + (ofs)) 332static inline void _ipw_write32(struct ipw_priv *ipw, unsigned long ofs,
333 u32 val)
334{
335 writel(val, ipw->hw_base + ofs);
336}
322 337
323/* 32-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ 338/* 32-bit direct write (for low 4K of SRAM/regs), with debug wrapper */
324#define ipw_write32(ipw, ofs, val) \ 339#define ipw_write32(ipw, ofs, val) do { \
325 IPW_DEBUG_IO("%s %d: write_direct32(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ 340 IPW_DEBUG_IO("%s %d: write_direct32(0x%08X, 0x%08X)\n", __FILE__, \
326 _ipw_write32(ipw, ofs, val) 341 __LINE__, (u32)(ofs), (u32)(val)); \
342 _ipw_write32(ipw, ofs, val); \
343} while (0)
327 344
328/* 8-bit direct read (low 4K) */ 345/* 8-bit direct read (low 4K) */
329#define _ipw_read8(ipw, ofs) readb((ipw)->hw_base + (ofs)) 346static inline u8 _ipw_read8(struct ipw_priv *ipw, unsigned long ofs)
330
331/* 8-bit direct read (low 4K), with debug wrapper */
332static inline u8 __ipw_read8(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
333{ 347{
334 IPW_DEBUG_IO("%s %d: read_direct8(0x%08X)\n", f, l, (u32) (ofs)); 348 return readb(ipw->hw_base + ofs);
335 return _ipw_read8(ipw, ofs);
336} 349}
337 350
338/* alias to 8-bit direct read (low 4K of SRAM/regs), with debug wrapper */ 351/* alias to 8-bit direct read (low 4K of SRAM/regs), with debug wrapper */
339#define ipw_read8(ipw, ofs) __ipw_read8(__FILE__, __LINE__, ipw, ofs) 352#define ipw_read8(ipw, ofs) ({ \
353 IPW_DEBUG_IO("%s %d: read_direct8(0x%08X)\n", __FILE__, __LINE__, \
354 (u32)(ofs)); \
355 _ipw_read8(ipw, ofs); \
356})
340 357
341/* 16-bit direct read (low 4K) */ 358/* 16-bit direct read (low 4K) */
342#define _ipw_read16(ipw, ofs) readw((ipw)->hw_base + (ofs)) 359static inline u16 _ipw_read16(struct ipw_priv *ipw, unsigned long ofs)
343
344/* 16-bit direct read (low 4K), with debug wrapper */
345static inline u16 __ipw_read16(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
346{ 360{
347 IPW_DEBUG_IO("%s %d: read_direct16(0x%08X)\n", f, l, (u32) (ofs)); 361 return readw(ipw->hw_base + ofs);
348 return _ipw_read16(ipw, ofs);
349} 362}
350 363
351/* alias to 16-bit direct read (low 4K of SRAM/regs), with debug wrapper */ 364/* alias to 16-bit direct read (low 4K of SRAM/regs), with debug wrapper */
352#define ipw_read16(ipw, ofs) __ipw_read16(__FILE__, __LINE__, ipw, ofs) 365#define ipw_read16(ipw, ofs) ({ \
366 IPW_DEBUG_IO("%s %d: read_direct16(0x%08X)\n", __FILE__, __LINE__, \
367 (u32)(ofs)); \
368 _ipw_read16(ipw, ofs); \
369})
353 370
354/* 32-bit direct read (low 4K) */ 371/* 32-bit direct read (low 4K) */
355#define _ipw_read32(ipw, ofs) readl((ipw)->hw_base + (ofs)) 372static inline u32 _ipw_read32(struct ipw_priv *ipw, unsigned long ofs)
356
357/* 32-bit direct read (low 4K), with debug wrapper */
358static inline u32 __ipw_read32(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
359{ 373{
360 IPW_DEBUG_IO("%s %d: read_direct32(0x%08X)\n", f, l, (u32) (ofs)); 374 return readl(ipw->hw_base + ofs);
361 return _ipw_read32(ipw, ofs);
362} 375}
363 376
364/* alias to 32-bit direct read (low 4K of SRAM/regs), with debug wrapper */ 377/* alias to 32-bit direct read (low 4K of SRAM/regs), with debug wrapper */
365#define ipw_read32(ipw, ofs) __ipw_read32(__FILE__, __LINE__, ipw, ofs) 378#define ipw_read32(ipw, ofs) ({ \
379 IPW_DEBUG_IO("%s %d: read_direct32(0x%08X)\n", __FILE__, __LINE__, \
380 (u32)(ofs)); \
381 _ipw_read32(ipw, ofs); \
382})
366 383
367/* multi-byte read (above 4K), with debug wrapper */
368static void _ipw_read_indirect(struct ipw_priv *, u32, u8 *, int); 384static void _ipw_read_indirect(struct ipw_priv *, u32, u8 *, int);
369static inline void __ipw_read_indirect(const char *f, int l,
370 struct ipw_priv *a, u32 b, u8 * c, int d)
371{
372 IPW_DEBUG_IO("%s %d: read_indirect(0x%08X) %d bytes\n", f, l, (u32) (b),
373 d);
374 _ipw_read_indirect(a, b, c, d);
375}
376
377/* alias to multi-byte read (SRAM/regs above 4K), with debug wrapper */ 385/* alias to multi-byte read (SRAM/regs above 4K), with debug wrapper */
378#define ipw_read_indirect(a, b, c, d) __ipw_read_indirect(__FILE__, __LINE__, a, b, c, d) 386#define ipw_read_indirect(a, b, c, d) ({ \
387 IPW_DEBUG_IO("%s %d: read_indirect(0x%08X) %u bytes\n", __FILE__, \
388 __LINE__, (u32)(b), (u32)(d)); \
389 _ipw_read_indirect(a, b, c, d); \
390})
379 391
380/* alias to multi-byte read (SRAM/regs above 4K), with debug wrapper */ 392/* alias to multi-byte read (SRAM/regs above 4K), with debug wrapper */
381static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 * data, 393static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 * data,
382 int num); 394 int num);
383#define ipw_write_indirect(a, b, c, d) \ 395#define ipw_write_indirect(a, b, c, d) do { \
384 IPW_DEBUG_IO("%s %d: write_indirect(0x%08X) %d bytes\n", __FILE__, __LINE__, (u32)(b), d); \ 396 IPW_DEBUG_IO("%s %d: write_indirect(0x%08X) %u bytes\n", __FILE__, \
385 _ipw_write_indirect(a, b, c, d) 397 __LINE__, (u32)(b), (u32)(d)); \
398 _ipw_write_indirect(a, b, c, d); \
399} while (0)
386 400
387/* 32-bit indirect write (above 4K) */ 401/* 32-bit indirect write (above 4K) */
388static void _ipw_write_reg32(struct ipw_priv *priv, u32 reg, u32 value) 402static void _ipw_write_reg32(struct ipw_priv *priv, u32 reg, u32 value)