SEP 28, 2004

Phone:
877-514-0537

Fax:
877-514-0538

E-mail:
sales@jungo.com

In this issue:

Case Study: Bustec Ltd. Uses Jungo's KernelDriver for their USB2.0 VXI Slot-0 Controller Bustec Production Ltd. designs and manufactures a complete line of high performance VXI and VXIbus products and instrumentation suitable for Data Acquisition, Control, and Test and Measurement applications. Bustec latest product, The ProDAQ 3020 USB 2.0 Slot-0 Interface is a C-size, register-based VXIbus module, providing a direct connection from PC to a VXIbus mainframe using the high-speed USB 2.0 bus. The driver had a number of specific requirements, like concurrent access of multiple user applications to different VXI modules using the same ProDAQ 3020 Slot-0 Controller. Read more at:
http://www.jungo.com/st/application_story_bustec.html?nl0904
Tutorial: WinDriver PCI is Backward Compatible with 3rd Generation PCI-Express The 3rd generation I/O bus PCI Express is intended to be a substantial upgrade to the existing PCI bus, expanding its features on the original standard and doubling the data transfer rates. PCI Express was developed to answer the need for an I/O architecture suitable for high speed transfers such as USB 2.0, InfiniBand, 1394b and Gigabit Ethernet.

Jungo's WinDriver PCI is backward compatible with the PCI Express bus as the latter maintains hardware and software compatibility with all recent PCI devices. This feature will supplement WinDriver's support for PCI, PCMCIA, PCI-X, CardBus, CompactCPI and ISA.

For more information on PCI-Express, please visit PCI-SIG, the committee responsible for overseeing the PCI interface standard, at:
http://www.pcisig.com/home
In-Depth PCI Express Architecture Course Logic Technology, Jungo's reseller in Benelux, organizes several in-depth courses throughout Europe for hardware and software engineers responsible for incorporating PCI Express technology in their products.
The Ins and Outs of Overlapped I/O
http://go.microsoft.com/?linkid=1043782
Your user-mode application is sending your driver lots of I/O requests, but the driver insists on handling the requests one at a time. What's the problem?

You might think that your driver is blocking in some obscure way or that you need more threads in your application, but the solution is often much simpler: Make sure your application has opened the device for overlapped I/O. Otherwise, the I/O Manager serializes I/O requests by synchronizing through a lock in the file object before dispatching the IRP. Even if your application uses multiple threads, only one request at a time (per file handle) will get through.

To enable overlapped I/O in an application, set dwFlagsAndAttributes with FILE_FLAG_OVERLAPPED when you call CreateFile to open the device. (If you skip this step you won't get overlapped I/O, even if you do everything else right.)

CreateFile returns a handle that can be used to access the device. When you call ReadFile, WriteFile, or DeviceIoControl with the file handle created by CreateFile, supply a pointer to an OVERLAPPED structure that contains a handle to an event object to signal when the operation completes. These functions return immediately for overlapped operations; the event object is signaled when the operation is completed.

Be sure to initialize the OVERLAPPED structure to zero before using it in a function call, and set only the members that are needed by the function. For example, the Offset member should be set for ReadFile and WriteFile calls, but this member should be zero for DeviceIoControl. Also, be sure to use a separate OVERLAPPED structure for each request; re-using the structure before the previous asynchronous operation has been completed can cause errors. Besides, your application will need the original structure to call HasOverlappedIoCompleted or GetOverlappedResult for the request.

After you've opened a device for overlapped I/O, can you simply omit the OVERLAPPED structure to get synchronous I/O? No, you must supply an OVERLAPPED structure for all function calls (read, write, or device control) with that handle. Passing NULL can lead to undefined behavior, even if the driver completes the request synchronously. For synchronous I/O, the OVERLAPPED structure can be declared on the stack as long as the application waits for the I/O to complete before returning.

For code snippets and additional details, read the driver tip on WHDC at:
http://go.microsoft.com/?linkid=1043783

Jungo Software Technologies, 3031 Tisch Way, Suite 808 San Jose, CA 95128, U.S.A.

Jungo, WinDriver, Go-HotSwap, OpenRG and OpenSMB are trademarks of Jungo Ltd.

This newsletter was sent to: [Email] . You have received this newsletter because you have downloaded or used Jungo products. To unsubscribe, reply to this email with subject 'remove [Email]'.