Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Dec 1996 10:10:33 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        hasty@rah.star-gate.com (Amancio Hasty)
Cc:        terry@lambert.org, hackers@freebsd.org, multimedia@freebsd.org
Subject:   Re: mmap problems?
Message-ID:  <199612191710.KAA11716@phaeton.artisoft.com>
In-Reply-To: <199612190619.WAA08457@rah.star-gate.com> from "Amancio Hasty" at Dec 18, 96 10:19:32 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> > You'll have to look carefully at the driver to see which is happening
> > (if either is the correct reason).

[ ... ]

Well, I did say "if".

Personally, I'd:

meteor_mmap(dev_t dev, int offset, int nprot)
{

        int     unit;
        meteor_reg_t *mtr;

        unit = UNIT(minor(dev));
printf( "meteor_mmap: unit=%d of %d, offset=%d, nprot=%08x\n",
	unit, NMETEOR, offset, nprot);
        if (unit >= NMETEOR)            /* at this point could this happen? */
{
printf( "meteor_mmap: failed: unit exceeded possible units\n");
                return(-1);
}

        mtr = &(meteor[unit]);


        if(nprot & PROT_EXEC)
{
printf("meteor_mmap: can't map a device PROT_EXEC!\n");
                return -1;
}

printf("meteor_mmap: device pages(%08x)\n", mtr->alloc_pages * page_size);
        if(offset >= mtr->alloc_pages * PAGE_SIZE)
{
printf("meteor_mmap: offset (%08x) exceeds device pages\n", offset);
                return -1;
}

        return i386_btop(vtophys(mtr->bigbuf) + offset);
}

This leaves a possible failure of (vtophys() + offset) to be valid;
you can check that, but it's unlikely (the pages are wired).


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612191710.KAA11716>