Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 03 Dec 1996 11:44:34 -0600
From:      "Eric L. Hernes" <erich@lodgenet.com>
To:        Michael Smith <msmith@atrad.adelaide.edu.au>
Cc:        tony@nlanr.net (Tony Sterrett), hackers@freebsd.org
Subject:   Re: Driver help 
Message-ID:  <199612031744.LAA13076@jake.lodgenet.com>
In-Reply-To: Your message of "Tue, 03 Dec 1996 11:27:06 %2B1030." <199612030057.LAA06521@genesis.atrad.adelaide.edu.au> 

next in thread | previous in thread | raw e-mail | index | archive | help
Michael Smith writes:
> - You should use uiomove because it's wise to the type of the
>   destination; for destinations in kernel space it will use bcopy()
>   rather than copyout(), and it understands fragmented destinations
>   (ie. readv()/writev()).
>   IMHO, using copyin/out in drivers is bogus in most cases.

I agree, but people porting drivers from a sysV derrivative, may want
to have a driver that will compile and work on either machine.  I've
used a set of macros tucked away in the ifdef section like:

#ifdef __FreeBSD__
#define uio_in uiomove
#define uio_out uiomove

#else /* probably SCO */

#define uio_out(base, n, uio) copyout(base, uio.u_base, n); \
                              uio.u_base+=n; uio.u_offset+=n; uio.u_count-=n

#define uio_in(base, n, uio) copyin(uio.u_base, base, n); \
                             uio.u_base+=n; uio.u_offset+=n; uio.u_count-=n

#endif

I've also done similar things with the dma kernel support functions.  Usually,
the driver ends up looking more BSDish than SCOish, but isn't that how God
intended? ;-)

>
>-- 
>]] Mike Smith, Software Engineer        msmith@gsoft.com.au             [[
>]] Genesis Software                     genesis@gsoft.com.au            [[
>]] High-speed data acquisition and      (GSM mobile)     0411-222-496   [[
>]] realtime instrument control.         (ph)          +61-8-8267-3493   [[
>]] Unix hardware collector.             "Where are your PEZ?" The Tick  [[
>

eric.
-- 
erich@lodgenet.com
http://rrnet.com/~erich erich@rrnet.com






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