Don't do arithmetic on void *s.

This commit is contained in:
bjh21 2001-02-17 19:04:36 +00:00
parent 2e041e883b
commit 4acea3a8cc
1 changed files with 11 additions and 8 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_ei.c,v 1.6 2001/01/23 22:08:00 bjh21 Exp $ */
/* $NetBSD: if_ei.c,v 1.7 2001/02/17 19:04:36 bjh21 Exp $ */
/*-
* Copyright (c) 2000 Ben Harris
@ -38,7 +38,7 @@
#include <sys/param.h>
__RCSID("$NetBSD: if_ei.c,v 1.6 2001/01/23 22:08:00 bjh21 Exp $");
__RCSID("$NetBSD: if_ei.c,v 1.7 2001/02/17 19:04:36 bjh21 Exp $");
#include <sys/device.h>
#include <sys/malloc.h>
@ -253,11 +253,13 @@ ei_copyin(struct ie_softc *sc_ie, void *dest, int src, size_t size)
{
struct ei_softc *sc = (struct ei_softc *)sc_ie;
int cnt, s, extra_byte;
u_int16_t *wptr;
#ifdef DIAGNOSTIC
if (src % 2 != 0 || !ALIGNED_POINTER(dest, u_int16_t))
panic("%s: unaligned copyin", sc_ie->sc_dev.dv_xname);
#endif
wptr = dest;
extra_byte = size % 2;
size -= extra_byte;
while (size > 0) {
@ -268,22 +270,21 @@ ei_copyin(struct ie_softc *sc_ie, void *dest, int src, size_t size)
ei_setpage(sc, ei_atop(src));
/* bus ops are in words */
bus_space_read_region_2(sc->sc_mem_t, sc->sc_mem_h,
ei_atopo(src) / 2, dest, cnt / 2);
ei_atopo(src) / 2, wptr, cnt / 2);
splx(s);
src += cnt;
dest += cnt;
wptr += cnt / 2;
size -= cnt;
}
if (extra_byte) {
/* Do we need to be this careful? */
s = splnet();
ei_setpage(sc, ei_atop(src));
*(u_int8_t *)dest =
*(u_int8_t *)wptr =
bus_space_read_2(sc->sc_mem_t, sc->sc_mem_h,
ei_atopo(src) / 2) & 0xff;
splx(s);
}
}
static void
@ -291,6 +292,7 @@ ei_copyout(struct ie_softc *sc_ie, const void *src, int dest, size_t size)
{
struct ei_softc *sc = (struct ei_softc *)sc_ie;
int cnt, s;
const u_int16_t *wptr;
u_int16_t *bounce = NULL;
#ifdef DIAGNOSTIC
@ -305,6 +307,7 @@ ei_copyout(struct ie_softc *sc_ie, const void *src, int dest, size_t size)
memcpy(bounce, src, size);
src = bounce;
}
wptr = src;
if (size % 2 != 0)
size++; /* This is safe, since the buffer is 16bit aligned */
while (size > 0) {
@ -315,9 +318,9 @@ ei_copyout(struct ie_softc *sc_ie, const void *src, int dest, size_t size)
ei_setpage(sc, ei_atop(dest));
/* bus ops are in words */
bus_space_write_region_2(sc->sc_mem_t, sc->sc_mem_h,
ei_atopo(dest) / 2, src, cnt / 2);
ei_atopo(dest) / 2, wptr, cnt / 2);
splx(s);
src += cnt;
wptr += cnt / 2;
dest += cnt;
size -= cnt;
}