summaryrefslogtreecommitdiff
path: root/sys/arch/atari/dev
diff options
context:
space:
mode:
authortsutsui <tsutsui@NetBSD.org>2009-01-24 02:02:38 +0000
committertsutsui <tsutsui@NetBSD.org>2009-01-24 02:02:38 +0000
commit1e5c3b25c83f6834bcd9e9dbffc539cace515e4a (patch)
tree3839e9e17f40a807fc7e7be9cbc900e6fca4598d /sys/arch/atari/dev
parent6d3b1b1ecdeab697f528b26cc16e30844aa14819 (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.c64
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