1394 Async write

Discussion in 'Windows Vista Drivers' started by Raj, Nov 25, 2003.

  1. Raj

    Raj Guest

    How many 1394 Async write commands can I send in a loop to "Microsoft
    1394 bus driver" (through my driver) before the driver returns busy.
    How should I synchronise this activity. Obviously I opened the file
    for 'overlap'.

    for(ii=0; ii<loop_count; ii++)
    {
    DeviceIoControl(IOCTL_ASYNC_WRITE);
    }

    What can be loop_count if my device driver simply sends the packet to
    bus driver through IoCallDriver for every IOCTL call. How many packets
    can be pended at the bus driver?

    Thanks.
     
    Raj, Nov 25, 2003
    #1
    1. Advertisements

  2. Raj

    Tim Clacy Guest

    The 1394 standard allows up to 64 outstanding transactions between any two
    nodes (tcode); assuming that you complete no responses from your target node
    during the time that your sending to that node, then this should be the
    limit. Can't you just run your test and see?
     
    Tim Clacy, Nov 26, 2003
    #2
    1. Advertisements

  3. Raj

    Raj Guest

    The 1394 standard allows up to 64 outstanding transactions between any two
    Thanks for the reply.

    I already ran the test. Even before 10 requests are looped, 1394 bus
    driver will return "Device busy" error. I think bus driver did not
    provide buffers or descriptors for 64 outstanding requests. Or may be
    I am missing something.
     
    Raj, Nov 27, 2003
    #3
  4. Raj

    Tim Clacy Guest

    It'll be interesting to hear the 'certified proffesionals' justification for
    this... if they know. Don't be suprised if you get fobbed-off with referals
    to their own services or books though.
     
    Tim Clacy, Nov 28, 2003
    #4
  5. It'll be interesting to hear the 'certified proffesionals' justification for
    Sorry, I did not touch the Windows 1394 stack since around 2000, but
    nevertheless:

    First, you're referring to "tLabel" and not "tCode".

    "tLabel" is 6bit number of pending transaction to match responses to requests.
    "tCode" is the kind of transaction - read/write/lock etc.

    Second, 1394 API is for drivers only, and unaccessible from user mode. You must
    write a driver which will talk to 1394 stack, and this driver of yours will be
    exposed to user mode.

    Third, the "tLabel" assignment is the job of OHCI1394 (or another port) driver,
    your driver must not bother.

    Fourth, the OHCI1394 driver (at least the old version of Win98SE/w2k betas) had
    a limit of 32 outstanding outgoing async transactions. After this limit is
    over, the driver will fail further requests with STATUS_INSUFFICIENT_RESOURCES.
    Undecent behaviour, I would say, the packet should be queued till there will be
    available DMA descriptors to send it, but "se la vie".

    Dunno on modern (XPs and later) 1394 stacks. I would suggest to copy the
    binaries from the checked build and run with them. What ASSERTs are printed?
    Also try to play with "OhciDebugLevel" variable and to set it to nonzero
    values, which will cause OHCI1394 to spit lots of debug traces.
     
    Maxim S. Shatskih, Nov 28, 2003
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.