Update d_mmap() to accept vm_ooffset_t and vm_memattr_t.

This replaces d_mmap() with the d_mmap2() implementation and also
changes the type of offset to vm_ooffset_t.

Purge d_mmap2().

All driver modules will need to be rebuilt since D_VERSION is also
bumped.

Reviewed by:	jhb@
MFC after:	Not in this lifetime...
This commit is contained in:
Robert Noland 2009-12-29 21:51:28 +00:00
parent 723bd8c6b5
commit cfd7bacef2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=201223
36 changed files with 109 additions and 112 deletions

View File

@ -144,8 +144,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
*/
/* ARGSUSED */
int
memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int prot __unused)
memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot __unused, vm_memattr_t *memattr __unused)
{
if (dev2unit(dev) == CDEV_MINOR_MEM)
*paddr = offset;

View File

@ -153,8 +153,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
/* ARGSUSED */
int
memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int prot __unused)
memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot __unused, vm_memattr_t *memattr __unused)
{
if (dev2unit(dev) == CDEV_MINOR_MEM)
*paddr = offset;

View File

@ -161,7 +161,8 @@ adlink_intr(void *arg)
}
static int
adlink_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
adlink_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
struct softc *sc;
vm_offset_t o;

View File

@ -868,7 +868,8 @@ agp_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int fflag, struct thread
}
static int
agp_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
agp_mmap(struct cdev *kdev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
device_t dev = kdev->si_drv1;
struct agp_softc *sc = device_get_softc(dev);

View File

@ -794,7 +794,8 @@ bktr_ioctl( struct cdev *dev, ioctl_cmd_t cmd, caddr_t arg, int flag, struct thr
*
*/
static int
bktr_mmap( struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot )
bktr_mmap( struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr )
{
int unit;
bktr_ptr_t bktr;

View File

@ -31,8 +31,8 @@ __FBSDID("$FreeBSD$");
#include "dev/drm/drmP.h"
#include "dev/drm/drm.h"
int drm_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
int drm_mmap(struct cdev *kdev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
struct drm_device *dev = drm_get_device_from_kdev(kdev);
struct drm_file *file_priv = NULL;

View File

@ -692,8 +692,8 @@ creator_blank_display(video_adapter_t *adp, int mode)
}
static int
creator_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
creator_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
return (EINVAL);
@ -1048,8 +1048,8 @@ creator_fb_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags,
}
static int
creator_fb_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
creator_fb_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
struct creator_softc *sc;
int i;

View File

@ -511,10 +511,10 @@ int genfbioctl(genfb_softc_t *sc, video_adapter_t *adp, u_long cmd,
return error;
}
int genfbmmap(genfb_softc_t *sc, video_adapter_t *adp, vm_offset_t offset,
vm_offset_t *paddr, int prot)
int genfbmmap(genfb_softc_t *sc, video_adapter_t *adp, vm_ooffset_t offset,
vm_offset_t *paddr, int prot, vm_memattr_t *memattr)
{
return vidd_mmap(adp, offset, paddr, prot);
return vidd_mmap(adp, offset, paddr, prot, memattr);
}
#endif /* FB_INSTALL_CDEV */

View File

@ -131,8 +131,8 @@ typedef int vi_blank_display_t(video_adapter_t *adp, int mode);
#define V_DISPLAY_STAND_BY 2
#define V_DISPLAY_SUSPEND 3
*/
typedef int vi_mmap_t(video_adapter_t *adp, vm_offset_t offset,
vm_paddr_t *paddr, int prot);
typedef int vi_mmap_t(video_adapter_t *adp, vm_ooffset_t offset,
vm_paddr_t *paddr, int prot, vm_memattr_t *memattr);
typedef int vi_ioctl_t(video_adapter_t *adp, u_long cmd, caddr_t data);
typedef int vi_clear_t(video_adapter_t *adp);
typedef int vi_fill_rect_t(video_adapter_t *adp, int val, int x, int y,
@ -228,8 +228,9 @@ typedef struct video_switch {
(height), (celsize), (blink))
#define vidd_blank_display(adp, mode) \
(*vidsw[(adp)->va_index]->blank_display)((adp), (mode))
#define vidd_mmap(adp, offset, paddr, prot) \
(*vidsw[(adp)->va_index]->mmap)((adp), (offset), (paddr), (prot))
#define vidd_mmap(adp, offset, paddr, prot, memattr) \
(*vidsw[(adp)->va_index]->mmap)((adp), (offset), (paddr), \
(prot), (memattr))
#define vidd_ioctl(adp, cmd, data) \
(*vidsw[(adp)->va_index]->ioctl)((adp), (cmd), (data))
#define vidd_clear(adp) \
@ -317,7 +318,8 @@ int genfbwrite(genfb_softc_t *sc, video_adapter_t *adp,
int genfbioctl(genfb_softc_t *sc, video_adapter_t *adp,
u_long cmd, caddr_t arg, int flag, struct thread *td);
int genfbmmap(genfb_softc_t *sc, video_adapter_t *adp,
vm_offset_t offset, vm_offset_t *paddr, int prot);
vm_ooffset_t offset, vm_offset_t *paddr,
int prot, vm_memattr_t *memattr);
#endif /* FB_INSTALL_CDEV */

View File

@ -837,8 +837,8 @@ machfb_blank_display(video_adapter_t *adp, int mode)
}
static int
machfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
machfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
struct machfb_softc *sc;
video_info_t *vi;

View File

@ -388,10 +388,10 @@ s3lfb_blank_display(video_adapter_t *adp, int mode)
}
static int
s3lfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
s3lfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
return (*prevvidsw->mmap)(adp, offset, paddr, prot);
return (*prevvidsw->mmap)(adp, offset, paddr, prot, memattr);
}
static int

View File

@ -1528,12 +1528,12 @@ vesa_blank_display(video_adapter_t *adp, int mode)
}
static int
vesa_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
vesa_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
#if VESA_DEBUG > 0
printf("vesa_mmap(): window:0x%tx, buffer:0x%tx, offset:0x%tx\n",
printf("vesa_mmap(): window:0x%tx, buffer:0x%tx, offset:0x%jx\n",
adp->va_info.vi_window, adp->va_info.vi_buffer, offset);
#endif
@ -1546,7 +1546,7 @@ vesa_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
*paddr = adp->va_info.vi_buffer + offset;
return (0);
}
return ((*prevvidsw->mmap)(adp, offset, paddr, prot));
return ((*prevvidsw->mmap)(adp, offset, paddr, prot, memattr));
}
static int

View File

@ -144,10 +144,10 @@ vga_ioctl(struct cdev *dev, vga_softc_t *sc, u_long cmd, caddr_t arg, int flag,
}
int
vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_offset_t offset, vm_offset_t *paddr,
int prot)
vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_ooffset_t offset,
vm_offset_t *paddr, int prot, vm_memattr_t *memattr)
{
return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot);
return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot, memattr);
}
#endif /* FB_INSTALL_CDEV */
@ -2465,8 +2465,8 @@ vga_blank_display(video_adapter_t *adp, int mode)
* all adapters
*/
static int
vga_mmap_buf(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
vga_mmap_buf(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
if (adp->va_info.vi_flags & V_INFO_LINEAR)
return -1;

View File

@ -88,8 +88,8 @@ int vga_read(struct cdev *dev, vga_softc_t *sc, struct uio *uio, int flag);
int vga_write(struct cdev *dev, vga_softc_t *sc, struct uio *uio, int flag);
int vga_ioctl(struct cdev *dev, vga_softc_t *sc, u_long cmd, caddr_t arg,
int flag, struct thread *td);
int vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_offset_t offset,
vm_offset_t *paddr, int prot);
int vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_ooffset_t offset,
vm_offset_t *paddr, int prot, vm_memattr_t *memattr);
#endif
extern int (*vga_sub_configure)(int flags);

View File

@ -884,7 +884,8 @@ static int
#if defined(__DragonFly__) || __FreeBSD_version < 500102
fw_mmap (struct cdev *dev, vm_offset_t offset, int nproto)
#else
fw_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
fw_mmap (struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nproto, vm_memattr_t *memattr)
#endif
{
@ -892,7 +893,7 @@ fw_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
#if defined(__DragonFly__) || __FreeBSD_version < 500102
return fwmem_mmap(dev, offset, nproto);
#else
return fwmem_mmap(dev, offset, paddr, nproto);
return fwmem_mmap(dev, offset, paddr, nproto, memattr);
#endif
return EINVAL;

View File

@ -445,7 +445,8 @@ int
#if defined(__DragonFly__) || __FreeBSD_version < 500102
fwmem_mmap (struct cdev *dev, vm_offset_t offset, int nproto)
#else
fwmem_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
fwmem_mmap (struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nproto, vm_memattr_t *memattr)
#endif
{
return EINVAL;

View File

@ -2929,8 +2929,8 @@ hifn_write_reg_1(struct hifn_softc *sc, bus_size_t reg, u_int32_t val)
*
*/
static int
vulcanpk_mmap(struct cdev *dev, vm_offset_t offset,
vm_paddr_t *paddr, int nprot)
vulcanpk_mmap(struct cdev *dev, vm_ooffset_t offset,
vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr)
{
struct hifn_softc *sc;
vm_paddr_t pd;
@ -2942,7 +2942,8 @@ vulcanpk_mmap(struct cdev *dev, vm_offset_t offset,
b = rman_get_virtual(sc->sc_bar1res);
#if 0
printf("vpk mmap: %p(%08x) offset=%d\n", b, pd, offset);
printf("vpk mmap: %p(%016llx) offset=%lld\n", b,
(unsigned long long)pd, offset);
hexdump(b, HIFN_1_PUB_MEMEND, "vpk", 0);
#endif

View File

@ -589,8 +589,8 @@ ksyms_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int32_t flag __unused,
/* ARGUSED */
static int
ksyms_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int prot __unused)
ksyms_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot __unused, vm_memattr_t *memattr __unused)
{
struct ksyms_softc *sc;
int error;

View File

@ -2179,7 +2179,8 @@ dsp_poll(struct cdev *i_dev, int events, struct thread *td)
}
static int
dsp_mmap(struct cdev *i_dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
dsp_mmap(struct cdev *i_dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
struct snddev_info *d;
struct pcm_channel *wrch, *rdch, *c;

View File

@ -3431,14 +3431,15 @@ scgetc(sc_softc_t *sc, u_int flags)
}
static int
sctty_mmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
sctty_mmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
scr_stat *scp;
scp = sc_get_stat(tp);
if (scp != scp->sc->cur_scp)
return -1;
return vidd_mmap(scp->sc->adp, offset, paddr, nprot);
return vidd_mmap(scp->sc->adp, offset, paddr, nprot, memattr);
}
static int

View File

@ -421,7 +421,8 @@ tdfx_close(struct cdev *dev, int fflag, int devtype, struct thread *td)
}
static int
tdfx_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
tdfx_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
/*
* mmap(2) is called by a user process to request that an area of memory

View File

@ -416,7 +416,8 @@ elan_watchdog(void *foo __unused, u_int spec, int *error)
}
static int
elan_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
elan_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
if (offset >= 0x1000)

View File

@ -163,8 +163,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
*/
/* ARGSUSED */
int
memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int prot __unused)
memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot __unused, vm_memattr_t *memattr __unused)
{
if (dev2unit(dev) == CDEV_MINOR_MEM)
*paddr = offset;

View File

@ -521,8 +521,8 @@ xboxfb_blank_display(video_adapter_t *adp, int mode)
}
static int
xboxfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
xboxfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
return (EINVAL);
}

View File

@ -148,7 +148,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
* instead of going through read/write
*/
int
memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
/*
* /dev/mem is the only one that makes sense through this

View File

@ -278,9 +278,11 @@ isavga_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread
}
static int
isavga_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
isavga_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
return (vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), offset, paddr, prot));
return (vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), offset, paddr, prot,
memattr));
}
#endif /* FB_INSTALL_CDEV */

View File

@ -302,7 +302,7 @@ static struct cdevsw dead_cdevsw = {
#define no_read (d_read_t *)enodev
#define no_write (d_write_t *)enodev
#define no_ioctl (d_ioctl_t *)enodev
#define no_mmap (d_mmap2_t *)enodev
#define no_mmap (d_mmap_t *)enodev
#define no_kqfilter (d_kqfilter_t *)enodev
#define no_mmap_single (d_mmap_single_t *)enodev
@ -469,7 +469,7 @@ giant_kqfilter(struct cdev *dev, struct knote *kn)
}
static int
giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot,
giant_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot,
vm_memattr_t *memattr)
{
struct cdevsw *dsw;
@ -479,11 +479,8 @@ giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot,
if (dsw == NULL)
return (ENXIO);
mtx_lock(&Giant);
if (dsw->d_gianttrick->d_flags & D_MMAP2)
retval = dsw->d_gianttrick->d_mmap2(dev, offset, paddr, nprot,
memattr);
else
retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot);
retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot,
memattr);
mtx_unlock(&Giant);
dev_relthread(dev);
return (retval);
@ -595,8 +592,7 @@ prep_cdevsw(struct cdevsw *devsw)
return;
}
if (devsw->d_version != D_VERSION_01 &&
devsw->d_version != D_VERSION_02) {
if (devsw->d_version != D_VERSION_03) {
printf(
"WARNING: Device driver \"%s\" has wrong version %s\n",
devsw->d_name == NULL ? "???" : devsw->d_name,
@ -608,18 +604,16 @@ prep_cdevsw(struct cdevsw *devsw)
devsw->d_ioctl = dead_ioctl;
devsw->d_poll = dead_poll;
devsw->d_mmap = dead_mmap;
devsw->d_mmap_single = dead_mmap_single;
devsw->d_strategy = dead_strategy;
devsw->d_dump = dead_dump;
devsw->d_kqfilter = dead_kqfilter;
}
if (devsw->d_version == D_VERSION_01)
devsw->d_mmap_single = NULL;
if (devsw->d_flags & D_NEEDGIANT) {
if (devsw->d_gianttrick == NULL) {
memcpy(dsw2, devsw, sizeof *dsw2);
devsw->d_gianttrick = dsw2;
devsw->d_flags |= D_MMAP2;
dsw2 = NULL;
}
}
@ -640,7 +634,7 @@ prep_cdevsw(struct cdevsw *devsw)
FIXUP(d_write, no_write, giant_write);
FIXUP(d_ioctl, no_ioctl, giant_ioctl);
FIXUP(d_poll, no_poll, giant_poll);
FIXUP(d_mmap2, no_mmap, giant_mmap);
FIXUP(d_mmap, no_mmap, giant_mmap);
FIXUP(d_strategy, no_strategy, giant_strategy);
FIXUP(d_kqfilter, no_kqfilter, giant_kqfilter);
FIXUP(d_mmap_single, no_mmap_single, giant_mmap_single);

View File

@ -449,7 +449,8 @@ static TAILQ_HEAD(, statspage) pagelist = TAILQ_HEAD_INITIALIZER(pagelist);
static MALLOC_DEFINE(M_DEVSTAT, "devstat", "Device statistics");
static int
devstat_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
devstat_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
struct statspage *spp;

View File

@ -603,7 +603,8 @@ ttydev_poll(struct cdev *dev, int events, struct thread *td)
}
static int
ttydev_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
ttydev_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
struct tty *tp = dev->si_drv1;
int error;
@ -613,7 +614,7 @@ ttydev_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
error = ttydev_enter(tp);
if (error)
return (-1);
error = ttydevsw_mmap(tp, offset, paddr, nprot);
error = ttydevsw_mmap(tp, offset, paddr, nprot, memattr);
tty_unlock(tp);
return (error);
@ -905,8 +906,8 @@ ttydevsw_defmodem(struct tty *tp, int sigon, int sigoff)
}
static int
ttydevsw_defmmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr,
int nprot)
ttydevsw_defmmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
return (-1);

View File

@ -173,7 +173,8 @@ memrw(dev, uio, flags)
/*ARGSUSED*/
int
memmmap(struct cdev *dev, vm_offset_t off, vm_paddr_t *paddr, int prot)
memmmap(struct cdev *dev, vm_ooffset_t off, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
return (EOPNOTSUPP);

View File

@ -395,12 +395,13 @@ gdcioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
}
static int
gdcmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
gdcmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
gdc_softc_t *sc;
sc = GDC_SOFTC(GDC_UNIT(dev));
return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot);
return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot, memattr);
}
#endif /* FB_INSTALL_CDEV */
@ -1337,8 +1338,8 @@ gdc_blank_display(video_adapter_t *adp, int mode)
* Mmap frame buffer.
*/
static int
gdc_mmap_buf(video_adapter_t *adp, vm_offset_t offset, vm_offset_t *paddr,
int prot)
gdc_mmap_buf(video_adapter_t *adp, vm_ooffset_t offset, vm_offset_t *paddr,
int prot, vm_memattr_t *memattr)
{
/* FIXME: is this correct? XXX */
if (offset > VIDEO_BUF_SIZE - PAGE_SIZE)

View File

@ -624,8 +624,8 @@ ofwfb_blank_display(video_adapter_t *adp, int mode)
}
static int
ofwfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
int prot)
ofwfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
struct ofwfb_softc *sc;
int i;

View File

@ -161,7 +161,8 @@ kmem_direct_mapped: v = uio->uio_offset;
* instead of going through read/write
*/
int
memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int prot, vm_memattr_t *memattr)
{
/*
* /dev/mem is the only one that makes sense through this

View File

@ -135,9 +135,7 @@ typedef int d_read_t(struct cdev *dev, struct uio *uio, int ioflag);
typedef int d_write_t(struct cdev *dev, struct uio *uio, int ioflag);
typedef int d_poll_t(struct cdev *dev, int events, struct thread *td);
typedef int d_kqfilter_t(struct cdev *dev, struct knote *kn);
typedef int d_mmap_t(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
int nprot);
typedef int d_mmap2_t(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
typedef int d_mmap_t(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr);
typedef int d_mmap_single_t(struct cdev *cdev, vm_ooffset_t *offset,
vm_size_t size, struct vm_object **object, int nprot);
@ -172,7 +170,6 @@ typedef int dumper_t(
#define D_PSEUDO 0x00200000 /* make_dev() can return NULL */
#define D_NEEDGIANT 0x00400000 /* driver want Giant */
#define D_NEEDMINOR 0x00800000 /* driver uses clone_create() */
#define D_MMAP2 0x01000000 /* driver uses d_mmap2() */
/*
* Version numbers.
@ -180,7 +177,8 @@ typedef int dumper_t(
#define D_VERSION_00 0x20011966
#define D_VERSION_01 0x17032005 /* Add d_uid,gid,mode & kind */
#define D_VERSION_02 0x28042009 /* Add d_mmap_single */
#define D_VERSION D_VERSION_02
#define D_VERSION_03 0x17122009 /* d_mmap takes memattr,vm_ooffset_t */
#define D_VERSION D_VERSION_03
/*
* Flags used for internal housekeeping
@ -201,10 +199,7 @@ struct cdevsw {
d_write_t *d_write;
d_ioctl_t *d_ioctl;
d_poll_t *d_poll;
union {
d_mmap_t *old;
d_mmap2_t *new;
} __d_mmap;
d_mmap_t *d_mmap;
d_strategy_t *d_strategy;
dumper_t *d_dump;
d_kqfilter_t *d_kqfilter;
@ -222,8 +217,6 @@ struct cdevsw {
SLIST_ENTRY(cdevsw) postfree_list;
} __d_giant;
};
#define d_mmap __d_mmap.old
#define d_mmap2 __d_mmap.new
#define d_gianttrick __d_giant.gianttrick
#define d_postfree_list __d_giant.postfree_list

View File

@ -48,8 +48,8 @@ typedef int tsw_ioctl_t(struct tty *tp, u_long cmd, caddr_t data,
struct thread *td);
typedef int tsw_param_t(struct tty *tp, struct termios *t);
typedef int tsw_modem_t(struct tty *tp, int sigon, int sigoff);
typedef int tsw_mmap_t(struct tty *tp, vm_offset_t offset,
vm_paddr_t * paddr, int nprot);
typedef int tsw_mmap_t(struct tty *tp, vm_ooffset_t offset,
vm_paddr_t * paddr, int nprot, vm_memattr_t *memattr);
typedef void tsw_pktnotify_t(struct tty *tp, char event);
typedef void tsw_free_t(void *softc);
@ -142,11 +142,12 @@ ttydevsw_modem(struct tty *tp, int sigon, int sigoff)
}
static __inline int
ttydevsw_mmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
ttydevsw_mmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
int nprot, vm_memattr_t *memattr)
{
MPASS(!tty_gone(tp));
return tp->t_devsw->tsw_mmap(tp, offset, paddr, nprot);
return tp->t_devsw->tsw_mmap(tp, offset, paddr, nprot, memattr);
}
static __inline void

View File

@ -93,17 +93,6 @@ dev_pager_init()
UMA_ZONE_NOFREE|UMA_ZONE_VM);
}
static __inline int
dev_mmap(struct cdevsw *csw, struct cdev *dev, vm_offset_t offset,
vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr)
{
if (csw->d_flags & D_MMAP2)
return (csw->d_mmap2(dev, offset, paddr, nprot, memattr));
else
return (csw->d_mmap(dev, offset, paddr, nprot));
}
/*
* MPSAFE
*/
@ -116,7 +105,7 @@ dev_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
vm_pindex_t pindex;
unsigned int npages;
vm_paddr_t paddr;
vm_offset_t off;
vm_ooffset_t off;
vm_memattr_t dummy;
struct cdevsw *csw;
@ -145,7 +134,7 @@ dev_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
*/
npages = OFF_TO_IDX(size);
for (off = foff; npages--; off += PAGE_SIZE)
if (dev_mmap(csw, dev, off, &paddr, (int)prot, &dummy) != 0) {
if (csw->d_mmap(dev, off, &paddr, (int)prot, &dummy) != 0) {
dev_relthread(dev);
return (NULL);
}
@ -242,7 +231,7 @@ dev_pager_getpages(object, m, count, reqpage)
td = curthread;
fpop = td->td_fpop;
td->td_fpop = NULL;
ret = dev_mmap(csw, dev, (vm_offset_t)offset << PAGE_SHIFT, &paddr,
ret = csw->d_mmap(dev, (vm_ooffset_t)offset << PAGE_SHIFT, &paddr,
PROT_READ, &memattr);
KASSERT(ret == 0, ("dev_pager_getpage: map function returns error"));
td->td_fpop = fpop;