[wdmaudiodev] Re: Audio Miniport Driver Design Question

  • From: "Jeff Pages" <jeff@xxxxxxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Fri, 3 Aug 2007 09:10:49 +1000

I've implemented multiple ports on a card (which has only one PCI ID and set of resources) using the multiple subdevices approach and it works just fine. Each port has its own wave and topology subdevice, and within each I have an "instance" field that I initialise when the subdevices are created so I can tell them apart later on. As Tom suggested, you need to use a different subdevice name for each instance ("waveA", "topoA", etc) which correspond to entries in the INF file, and don't forget to set the MaxObjects value in your call to PcAddAdapterDevice to the sum of all your wave and topology subdevices.


Jeff Pages
Innes Corporation Pty Ltd

----- Original Message ----- From: "Chinmay Mahata" <chinmay.mahata@xxxxxxxxx>
To: <wdmaudiodev@xxxxxxxxxxxxx>
Cc: "Tom Eckert" <teckert@xxxxxxxxxxxxxxxx>
Sent: Thursday, August 02, 2007 2:27 AM
Subject: [wdmaudiodev] Re: Audio Miniport Driver Design Question


Dear Tom,

   Thanks a lot for your help. It seems to me, I should implement my
driver as a multifunctional one.

 But the problem is,  there is a single device ID to the device as a
whole and no separate PCI base-address registers (BARs) for the
individual subdevices. As I mentioned in my earlier mail  that I got
the ResourceList with MemoryCount = 1, IRQCount =1 and the
DevPrivCount=1.
 Also, even if I treat my device as a collection of multiple
subdevices, then I am having much difficulties to handle my DSP side
code also identify the pins correctly which subdevice it belong to.


===>
"Depending on the HW you should be able to use the same miniport code
for all but you will need to be able to tell each instance which one
it's supposed to be and give it any device specific info it needs.  To
do this I'd suggest adding and interface to the wave miniport and call
it from StartDevice() within or after InstallSubdevice()."
<===

Since I am new to Windows driver development, the above part of your
comment is not very much clear to me. If possible, could you please
send me some snippets which can help me to understand your comment?

Below is the complete wave filter diagram which I need to implement.

      //
       //                      +---------+       +--------+
       //                       | Wave |        | Topo  |
       //                       |          |        |          |
       //    Capture <---  |3      1|<===|3       1|<--- Line In
       //   (WAVEIN)     |          |        |          |
       //                       |          |        |          |
       //   Render --->    |0      2|===>|0       2|---> Line Out
       //   (WAVEOUT)  |         |        |           |
       //                       |          |        |          |
       //     Capture <--- |7      5|<===|7       5|<--- Line In
       //   (WAVEIN)     |          |        |          |
       //                       |          |        |          |
       //       Render --->|4       6|===>|4      6|<--- Line Out
       //   (WAVEOUT)  |          |        |          |
       //                       |           |        |          |
       //      Capture <---|11     9|<===|11     9|<--- Line In
       //     (WAVEIN)   |          |        |           |
       //                       |          |        |           |
       //      Render --->|8     10|===> |8     10|<--- Line Out
       //  (WAVEOUT)  |          |        |           |
       //                       |          |        |          |
       //   Capture <---  |15    13|<===|15   13|<--- Line In
       //   (WAVEIN)    |           |        |          |
       //                      |           |        |          |
       //      Render --->|12    14|===>|12   14|<--- Line Out
       //  (WAVEOUT)  |           |       |           |
       //                      |           |       |           |
       //     Monitor --->|16        |       |           |
       //  (WAVEOUT)+-----------+     +----------+
       //
 //

Please let me know, if it is possible at all,  in such a scenario how
to make my channels/devices (PINs) to be visible to mmsdk APIs and
make my driver works properly.

 Please send me your comments and suggestions.
If you need some more info please let me know.

Thanks in advance.

With best regards,
--Chinmay




On 7/31/07, Tom Eckert <teckert@xxxxxxxxxxxxxxxx> wrote:
Chinmay,
If you want your ports to be reported as separate devices by the legacy
APIs you need separate subdevices, i.e.:

  InstallSubdevice(..., "WaveA",...);
  InstallSubdevice(..., "WaveB",...);
  InstallSubdevice(..., "WaveC",...);
  InstallSubdevice(..., "WaveD",...);

And you will need AddInterface entries for each in the INF.

Depending on the HW you should be able to use the same miniport code for all but you will need to be able to tell each instance which one it's supposed to be and give it any device specific info it needs. To do this I'd suggest adding and interface to the wave miniport and call it from StartDevice() within or after InstallSubdevice().

- Tom


Chinmay Mahata wrote:
> Dear All,
>     I have to develop an WDM Audio Miniport driver for a PCI device
> which has 4 physical ports (A, B, C, D), all 4 ports can work as an
> input device/channel as well as an output device/channel. The platform
> is WinXP SP2. I've already implemented the driver based on DDK sb16
> and AC97 sample for only one pair of channels (1 input, 1 output). I
> seems it is working fine.
>
> Now I should implement support for the rest of the channels, but I
> don't have any idea how.
>
>    Here I am giving some details of my device:
>
> Form the PCI bus controller I got the ResourceList with MemoryCount =
> 1, IRQCount=1 and the DevPrivCount=1. Since the memoryCount is one, in
> my driver code (adapter.cpp) I installed two subdevices.
>
>   InstallSubdevice(..., "Wave",...);
>   InstallSubdevice(..., "Topology",...);
>
> To implement the 4 input and 4 output devices/channels, I created
> Filter factories for 4 input   devices/channels (for waveIn streams)
> and 4 output devices/channels (for waveOut streams). Each
> devices/channels have their own set of pins and nodes. I do not know
> how to reflect these filters in the INF file under RENDER or CAPTURE
> classes.
>
>    Now even if, the driver (sys) is installed without any error, we
> can not see all the devices/channels from the user application.
>
> Here my queries are:
> 1. How to reflect all the render and capture channels/devices in the
> INF file ( I have only one installed subdevice named "Wave")?
> 2. How to make my channels/devices to be visible to mmsdk APIs?
>
> Please let me know if you need any more details.
>
>   I will appreciate for any suggestions and helps.
>
>
> Best regards,
> --Chinmay
> ******************
>
> WDMAUDIODEV addresses:
> Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
> Subscribe: > mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe > Unsubscribe: > mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
> Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
>
> URL to WDMAUDIODEV page:
> http://www.wdmaudiodev.com/
>
>
>
******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/


******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/



******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.com/

Other related posts: