diff options
| author | tsutsui <tsutsui@NetBSD.org> | 2009-01-24 02:02:38 +0000 |
|---|---|---|
| committer | tsutsui <tsutsui@NetBSD.org> | 2009-01-24 02:02:38 +0000 |
| commit | 1e5c3b25c83f6834bcd9e9dbffc539cace515e4a (patch) | |
| tree | 3839e9e17f40a807fc7e7be9cbc900e6fca4598d /sys/arch/atari/dev | |
| parent | 6d3b1b1ecdeab697f528b26cc16e30844aa14819 (diff) | |
Replace multi-statement macro using GCC extension `({})' with
static inline functions to avoid possible side effects or confusion.
Tested on TT030 by David Ross and on Falcon by Tuomo Makinen on port-atari.
Diffstat (limited to 'sys/arch/atari/dev')
| -rw-r--r-- | sys/arch/atari/dev/atari5380.c | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/sys/arch/atari/dev/atari5380.c b/sys/arch/atari/dev/atari5380.c index 2847c3d7e4d..5bea80d6870 100644 --- a/sys/arch/atari/dev/atari5380.c +++ b/sys/arch/atari/dev/atari5380.c @@ -1,4 +1,4 @@ -/* $NetBSD: atari5380.c,v 1.46 2008/10/29 14:31:01 abs Exp $ */ +/* $NetBSD: atari5380.c,v 1.47 2009/01/24 02:02:38 tsutsui Exp $ */ /* * Copyright (c) 1995 Leo Weppelman. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: atari5380.c,v 1.46 2008/10/29 14:31:01 abs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: atari5380.c,v 1.47 2009/01/24 02:02:38 tsutsui Exp $"); #include "opt_atariscsi.h" @@ -136,20 +136,29 @@ struct scsi_dma { volatile u_char s_hdma_ctrl; /* Hades control register */ }; -#define set_scsi_dma(addr, val) (void)( \ - { \ - volatile u_char *address = (volatile u_char *)addr+1; \ - u_long nval = (u_long)val; \ - __asm("movepl %0, %1@(0)": :"d" (nval), "a" (address)); \ - }) - -#define get_scsi_dma(addr, res) ( \ - { \ - volatile u_char *address = (volatile u_char *)addr+1; \ - u_long nval; \ - __asm("movepl %1@(0), %0": "=d" (nval) : "a" (address)); \ - res = (u_long)nval; \ - }) +static inline void set_scsi_dma(volatile u_char *, u_long); +static inline u_long get_scsi_dma(volatile u_char *); + +static inline void +set_scsi_dma(volatile u_char *addr, u_long val) +{ + volatile u_char *address; + + address = addr + 1; + __asm("movepl %0, %1@(0)": :"d" (val), "a" (address)); +} + +static inline u_long +get_scsi_dma(volatile u_char *addr) +{ + volatile u_char *address; + u_long nval; + + address = addr + 1; + __asm("movepl %1@(0), %0": "=d" (nval) : "a" (address)); + + return nval; +} /* * Defines for TT-DMA control register @@ -432,13 +441,12 @@ tt_get_dma_result(SC_REQ *reqp, u_long *bytes_left) { int dmastat, dmstat; u_char *byte_p; - u_long leftover, ptr; + u_long leftover; dmastat = SCSI_DMA->s_dma_ctrl; dmstat = GET_TT_REG(NCR5380_DMSTAT); - get_scsi_dma(SCSI_DMA->s_dma_cnt, leftover); - get_scsi_dma(SCSI_DMA->s_dma_ptr, ptr); - byte_p = (u_char *)ptr; + leftover = get_scsi_dma(SCSI_DMA->s_dma_cnt); + byte_p = (u_char *)get_scsi_dma(SCSI_DMA->s_dma_ptr); if (dmastat & SD_BUSERR) { /* @@ -495,7 +503,7 @@ int poll; extern int *nofault; label_t faultbuf; int write; - u_long count, t; + u_long count; volatile u_char *data_p = (volatile u_char *)(stio_addr+0x741); /* @@ -512,7 +520,6 @@ extern int *nofault; nofault = (int *) &faultbuf; if (setjmp((label_t *) nofault)) { - u_char *ptr; u_long cnt, tmp; PID("drq berr"); @@ -521,16 +528,14 @@ extern int *nofault; /* * Determine number of bytes transferred */ - get_scsi_dma(SCSI_DMA->s_dma_ptr, tmp); - ptr = (u_char *)tmp; - cnt = dma_ptr - ptr; + cnt = (u_long)dma_ptr - get_scsi_dma(SCSI_DMA->s_dma_ptr); if (cnt != 0) { /* * Update the DMA pointer/count fields */ - set_scsi_dma(SCSI_DMA->s_dma_ptr, dma_ptr); - get_scsi_dma(SCSI_DMA->s_dma_cnt, tmp); + set_scsi_dma(SCSI_DMA->s_dma_ptr, (u_long)dma_ptr); + tmp = get_scsi_dma(SCSI_DMA->s_dma_cnt); set_scsi_dma(SCSI_DMA->s_dma_cnt, tmp - cnt); if (tmp > cnt) { @@ -590,9 +595,8 @@ extern int *nofault; } #endif - get_scsi_dma(SCSI_DMA->s_dma_cnt, count); - get_scsi_dma(SCSI_DMA->s_dma_ptr, t); - dma_ptr = (u_char *)t; + count = get_scsi_dma(SCSI_DMA->s_dma_cnt); + dma_ptr = (u_char *)get_scsi_dma(SCSI_DMA->s_dma_ptr); /* * Keep pushing bytes until we're done or a bus-error |
