Tech Support > Microsoft Windows > Drivers > filter driver question...
filter driver question...
Posted by bluestar on February 8th, 2007


I want to add filter driver between sbp2port.sys and ohci1394.sys
that means driver and HW flow are
"Disk.sys(Class drivers)->sbp2port.sys-> kohci.sys ->1394bus.sys-

I also register one MajorFunction:IRP_MJ_INTERNAL_DEVICE_CONTROL to
catch infomation
about IRB of IEEE1394 request in my filter driver.

But except REQUEST_GET_CONFIGURATION_INFO,
REQUEST_GET_GENERATION_COUNT,
REQUEST_ALLOCATE_ADDRESS_RANGE..., i just only get
REQUEST_ASYNC_WRITE:
length is 4 and datalength is 0x00000F. I already mapped this data
with 1394/sbp2 protocol and
it is doorbell from Host Controller to 1394 HDD....

How to get other informations, like that when i copy one file to 1394
HDD, can i know where are
data length, data source, sbp2 packet, ...etc???

I would like to split more smaller blocks to send when copying one big
file in my filter driver...



Alan


Posted by Maxim S. Shatskih on February 8th, 2007


Read the SBP-2 spec first to understand what goes on at the level you plug your
filter in.

For instance, "allocate address range" means - adding the _target_
functionality to the host machine, so the 1394 device can be a master and write
to some MDL you have provided using a 1394 transaction. Callbacks will be
called at such a write attempt.

This is something like common buffer DMA or message-signaled interrupts, but
for 1394 bus. There is no such facility in USB since USB is strictly
host-to-target, while 1394 is not.

Some 1394-based protocols use "allocate address range". For instance, AV/C
protocol used to discover the inner topology of the miniDV camera and to
control its tape mechanism uses the address range (camera is a master, computer
is a slave) to indicate "tape operation done" events.

But, for SBP-2 (which is "storage over 1394" or "SCSI over 1394") - the
"allocate address range" feature can be not employed at all.

Also the "allocate bandwidth/channel/resources" features. They are for isoch
traffic only, no isoch traffic for SBP-2.

--
Maxim Shatskih, Windows DDK MVP
StorageCraft Corporation
maxim@storagecraft.com
http://www.storagecraft.com


Posted by bluestar on February 10th, 2007


Dear Max:

I am very appreciated your information.

When on power-on, i found the sbp2port driver will call
"allocate address range" many times
to prepare some memories for host controller to the purpose you
mention. And then ask the device
to "AGENT_RESET", "UNSOLICITED_STATUS_ENABLE","ORB_POINTER" to the
host controller.
At last, if the host want to do commands, it will put
"command_block_ORB to memory" and then
send AsyncWrite(DOORBELL) to the device.

Could you teach me how do i get this memory that it put
command_block_ORB ???
If i know the this memory, maybe fetch the ORB information and modify
its data for fixing debug
of our host controller. (split 32 page_tables(128K bytes) to both 16
page_tables(64K, 64K) )



Alan

On 2¤ë8¤é, ¤U¤È7®É35¤À, "Maxim S. Shatskih" <m...@storagecraft.com> wrote:


Posted by bluestar on February 10th, 2007


Dear Max:

I am very appreciated your information.

When on power-on, i found the sbp2port driver will send
"allocate address range" many times to ohci1394 to prepare
some memories for host controller to the purpose you mention.
And then host sends "AGENT_RESET",
"UNSOLICITED_STATUS_ENABLE", "ORB_POINTER" to
the device. At last, if the host want to do read/write commands,
it will put "command_block_ORB to memory" and then send
AsyncWrite(DOORBELL) to the device.

Could you teach me how do i get this memory that it put
command_block_ORB ??? If i know the this memory, maybe
fetch the ORB information and modify its data for fixing debug
of our host controller. (split 32 page_tables(128K bytes) to
both 16 page_tables(64K, 64K) )

Alan


On 2¤ë8¤é, ¤U¤È7®É35¤À, "Maxim S. Shatskih" <m...@storagecraft.com> wrote: