- make DMA descriptor members volatile

- set VR_RXSTAT_OWN after all other descriptor data is set

With these changes, vr_init() seems to initialize
the vr chip stuck on RX properly.
This commit is contained in:
tsutsui 2006-11-02 10:44:30 +00:00
parent e1e6c59ee6
commit 06503d5611
2 changed files with 9 additions and 9 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_vr.c,v 1.78 2006/10/20 10:31:06 scw Exp $ */
/* $NetBSD: if_vr.c,v 1.79 2006/11/02 10:44:30 tsutsui Exp $ */
/*-
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@ -104,7 +104,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.78 2006/10/20 10:31:06 scw Exp $");
__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.79 2006/11/02 10:44:30 tsutsui Exp $");
#include "rnd.h"
@ -281,11 +281,11 @@ do { \
struct vr_descsoft *__ds = VR_DSRX((sc), (i)); \
\
__d->vr_next = htole32(VR_CDRXADDR((sc), VR_NEXTRX((i)))); \
__d->vr_status = htole32(VR_RXSTAT_FIRSTFRAG | \
VR_RXSTAT_LASTFRAG | VR_RXSTAT_OWN); \
__d->vr_data = htole32(__ds->ds_dmamap->dm_segs[0].ds_addr); \
__d->vr_ctl = htole32(VR_RXCTL_CHAIN | VR_RXCTL_RX_INTR | \
((MCLBYTES - 1) & VR_RXCTL_BUFLEN)); \
__d->vr_status = htole32(VR_RXSTAT_FIRSTFRAG | \
VR_RXSTAT_LASTFRAG | VR_RXSTAT_OWN); \
VR_CDRXSYNC((sc), (i), BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE); \
} while (/* CONSTCOND */ 0)

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_vrreg.h,v 1.13 2005/12/11 12:22:50 christos Exp $ */
/* $NetBSD: if_vrreg.h,v 1.14 2006/11/02 10:44:30 tsutsui Exp $ */
/*
* Copyright (c) 1997, 1998
@ -328,10 +328,10 @@
*/
struct vr_desc {
u_int32_t vr_status;
u_int32_t vr_ctl;
u_int32_t vr_ptr1;
u_int32_t vr_ptr2;
volatile u_int32_t vr_status;
volatile u_int32_t vr_ctl;
volatile u_int32_t vr_ptr1;
volatile u_int32_t vr_ptr2;
};
#define vr_data vr_ptr1