diff options
author | mux <mux@FreeBSD.org> | 2003-02-25 03:21:22 +0000 |
---|---|---|
committer | mux <mux@FreeBSD.org> | 2003-02-25 03:21:22 +0000 |
commit | 541937cf7373ff6a61c871266ea041503bb02233 (patch) | |
tree | a4ad6d456fdd984cdf9c6c6abd5e4654a9b7e3e0 /sys/i386/isa | |
parent | f52965fa5d8b4bdc23c2e702d17f5537a81f6d01 (diff) | |
download | FreeBSD-src-541937cf7373ff6a61c871266ea041503bb02233.zip FreeBSD-src-541937cf7373ff6a61c871266ea041503bb02233.tar.gz |
Cleanup of the d_mmap_t interface.
- Get rid of the useless atop() / pmap_phys_address() detour. The
device mmap handlers must now give back the physical address
without atop()'ing it.
- Don't borrow the physical address of the mapping in the returned
int. Now we properly pass a vm_offset_t * and expect it to be
filled by the mmap handler when the mapping was successful. The
mmap handler must now return 0 when successful, any other value
is considered as an error. Previously, returning -1 was the only
way to fail. This change thus accidentally fixes some devices
which were bogusly returning errno constants which would have been
considered as addresses by the device pager.
- Garbage collect the poorly named pmap_phys_address() now that it's
no longer used.
- Convert all the d_mmap_t consumers to the new API.
I'm still not sure wheter we need a __FreeBSD_version bump for this,
since and we didn't guarantee API/ABI stability until 5.1-RELEASE.
Discussed with: alc, phk, jake
Reviewed by: peter
Compile-tested on: LINT (i386), GENERIC (alpha and sparc64)
Runtime-tested on: i386
Diffstat (limited to 'sys/i386/isa')
-rw-r--r-- | sys/i386/isa/pcvt/pcvt_drv.c | 5 | ||||
-rw-r--r-- | sys/i386/isa/spigot.c | 5 | ||||
-rw-r--r-- | sys/i386/isa/vesa.c | 13 |
3 files changed, 11 insertions, 12 deletions
diff --git a/sys/i386/isa/pcvt/pcvt_drv.c b/sys/i386/isa/pcvt/pcvt_drv.c index 45b74b3..72a23e0 100644 --- a/sys/i386/isa/pcvt/pcvt_drv.c +++ b/sys/i386/isa/pcvt/pcvt_drv.c @@ -420,11 +420,12 @@ pcvt_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td) * driver mmap *---------------------------------------------------------------------------*/ static int -pcvt_mmap(dev_t dev, vm_offset_t offset, int nprot) +pcvt_mmap(dev_t dev, vm_offset_t offset, vm_offset_t *paddr, int nprot) { if (offset > 0x20000 - PAGE_SIZE) return -1; - return i386_btop((0xa0000 + offset)); + *paddr = 0xa0000 + offset; + return 0; } /*---------------------------------------------------------------------------* diff --git a/sys/i386/isa/spigot.c b/sys/i386/isa/spigot.c index bc6df62..79ad930 100644 --- a/sys/i386/isa/spigot.c +++ b/sys/i386/isa/spigot.c @@ -273,7 +273,7 @@ struct spigot_softc *ss = (struct spigot_softc *)&spigot_softc[unit]; } static int -spigot_mmap(dev_t dev, vm_offset_t offset, int nprot) +spigot_mmap(dev_t dev, vm_offset_t offset, vm_offset_t *paddr, int nprot) { struct spigot_softc *ss = (struct spigot_softc *)&spigot_softc[0]; @@ -285,5 +285,6 @@ struct spigot_softc *ss = (struct spigot_softc *)&spigot_softc[0]; if(nprot & PROT_EXEC) return -1; - return i386_btop(ss->maddr); + *paddr = ss->maddr; + return 0; } diff --git a/sys/i386/isa/vesa.c b/sys/i386/isa/vesa.c index 5284cec..3c3f604 100644 --- a/sys/i386/isa/vesa.c +++ b/sys/i386/isa/vesa.c @@ -1278,7 +1278,8 @@ vesa_blank_display(video_adapter_t *adp, int mode) } static int -vesa_mmap(video_adapter_t *adp, vm_offset_t offset, int prot) +vesa_mmap(video_adapter_t *adp, vm_offset_t offset, vm_offset_t *paddr, + int prot) { #if VESA_DEBUG > 0 printf("vesa_mmap(): window:0x%x, buffer:0x%x, offset:0x%x\n", @@ -1290,14 +1291,10 @@ vesa_mmap(video_adapter_t *adp, vm_offset_t offset, int prot) /* XXX: is this correct? */ if (offset > adp->va_window_size - PAGE_SIZE) return -1; -#ifdef __i386__ - return i386_btop(adp->va_info.vi_buffer + offset); -#endif -#ifdef __alpha__ /* XXX */ - return alpha_btop(adp->va_info.vi_buffer + offset); -#endif + *paddr = adp->va_info.vi_buffer + offset; + return 0; } else { - return (*prevvidsw->mmap)(adp, offset, prot); + return (*prevvidsw->mmap)(adp, offset, paddr, prot); } } |