On 31 dec 2010, 23:36, Freddie Witherden <fred...@witherden.org>
wrote:
> Hi all,
>
> I am having problems with the REQUEST_ASYNC_READ function number in
> the IEEE 1394 stack. *My 1394 'virtual' device needs to read the
> configuration ROMs of all attached nodes. *Now, getting the list of
> nodes is not difficult and the location of the ROM is easy to come by.
>
> The problem is that reading the ROM just does not work. *However,
> weirdly, reading other (lower) addresses does. *The return from
> WdfIoTargetSendInternalIoctlSynchronously is status c000009c. *This
> error is: STATUS_DEVICE_DATA_ERROR.
>
> * ioAddress.IA_Destination_Offset.Off_High * *=
> INITIAL_REGISTER_SPACE_HI;
> * ioAddress.IA_Destination_Offset.Off_Low * * = CONFIG_ROM_LOCATION;
>
> The ->nLength field is 1024 (for a device with a known MAX_REC of 2048
> bytes). *->nBlockSize does not seem to have an effect. *If I set
> Off_High to 0 and Off_Low to say, 5*1024*1024, the request succeeds
> (so requests do work, it is just high ones).
>
> Hence my questions are, firstly, why reading from the ROM register
> space does not work? *Every other (Mac OS X and Linux) stack treats it
> no differently to any other async read. *And, secondly, how can I go
> about reading the CSR *of an arbitrary node number*. *Clearly it must
> be possible, as Windows seems to have no trouble reading the CSR of my
> devices (as device manager shows).
You are trying to read the config rom which for most devices is
handled in link layer, the TI devices normaly only accept quadlet
reads and not block reads.
So try reading at one quadlet at a time might do the trick.
|