Date: Sun, 08 Sep 2002 13:24:25 -0600 (MDT) From: "M. Warner Losh" <imp@bsdimp.com> To: bms@spc.org Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: PCMCIA questions: mapping attribute and common memory? Message-ID: <20020908.132425.21514062.imp@bsdimp.com> In-Reply-To: <20020908190057.GE3235@spc.org> References: <20020906093215.GI15218@spc.org> <20020906.235110.108188889.imp@bsdimp.com> <20020908190057.GE3235@spc.org>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20020908190057.GE3235@spc.org>
Bruce M Simpson <bms@spc.org> writes:
: Many thanks! The only other question I have is - how would I go about
: doing a bus_space_mmap() to be able to copy the attribute memory off
: to a calling process?
I just re-read this, and you could also be asking how to implement a
read function for your device...
In that case, you'd have to do something like the crd driver does.
Since you already have the window picked out, I've removed the pick a
window code. I'm also assuming that you have only 1 4k window and
that you don't have to move it around.
static int
crdread(dev_t dev, struct uio *uio, int ioflag)
{
if (uio->uio_offset > 0x1000)
return (EIO);
while (uio->uio_resid && error == 0) {
offs = (unsigned int)uio->uio_offset & (0x1000 - 1);
p = rman_get_virtual(am_res) + offs;
count = MIN(0x1000 - offs, uio->uio_resid);
error = uiomove(p, count, uio);
}
return (error);
}
I don't recall if uiomove does anything to optimize the memory moving,
but if it does, or if your data is non-linear, you'll have to uiomove
it one byte at a time into userland.
Warner
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020908.132425.21514062.imp>
