Date: Wed, 19 May 2004 09:11:42 +0100 From: Doug Rabson <dfr@nlsystems.com> To: freebsd-firewire@freebsd.org Subject: Re: async bug Message-ID: <200405190911.42668.dfr@nlsystems.com> In-Reply-To: <Pine.GSO.4.58.0405181432030.18744@mono.arc.nasa.gov> References: <Pine.GSO.4.58.0405181432030.18744@mono.arc.nasa.gov>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 18 May 2004 22:33, Buzz Slye wrote:
> The code for the version of 2004/03/28 does not appear to work
> correctly for an asyncronus request of a single register.
>
> (i.e., try: fwcontrol -b 0)
>
> R. E. Slye
> NASA/Ames
The ioctl api is very confusing to use. I had to use the kernel debugger
to get my test program that reads quads over the bus to work. The code
below should work:
uint32_t
fw_read_quad(int fd, int node, uint64_t addr)
{
struct fw_asyreq req;
memset(&req, 0, sizeof req);
req.req.type = FWASREQNODE;
req.req.len = sizeof(req.pkt.mode.rreqq) + 2*sizeof(uint32_t);
req.pkt.mode.rreqq.dst = FWLOCALBUS | node;
req.pkt.mode.rreqq.tcode = FWTCODE_RREQQ;
req.pkt.mode.rreqq.dest_hi = addr >> 32;
req.pkt.mode.rreqq.dest_lo = addr;
if (ioctl(fd, FW_ASYREQ, &req) < 0) {
err(1, "ioctl");
return 0;
}
return req.pkt.mode.rresq.data;
}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405190911.42668.dfr>
