2009-04-03 17:06:16 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS Kernel Streaming
|
2009-09-11 06:33:55 +00:00
|
|
|
* FILE: drivers/wdm/audio/backpln/portcls/port.cpp
|
2009-04-03 17:06:16 +00:00
|
|
|
* PURPOSE: Port construction API
|
|
|
|
* PROGRAMMER: Johannes Anderwald
|
|
|
|
* Andrew Greenwood
|
|
|
|
*/
|
2009-01-17 11:19:27 +00:00
|
|
|
|
2009-09-11 06:33:55 +00:00
|
|
|
#include "private.hpp"
|
2009-01-17 11:19:27 +00:00
|
|
|
|
2014-01-03 17:10:56 +00:00
|
|
|
#ifndef YDEBUG
|
|
|
|
#define NDEBUG
|
|
|
|
#endif
|
2008-12-04 18:43:42 +00:00
|
|
|
|
2014-01-03 17:10:56 +00:00
|
|
|
#include <debug.h>
|
2008-12-04 18:43:42 +00:00
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
|
|
|
PcNewPort(
|
|
|
|
OUT PPORT* OutPort,
|
|
|
|
IN REFCLSID ClassId)
|
|
|
|
{
|
|
|
|
NTSTATUS Status;
|
2009-04-03 17:06:16 +00:00
|
|
|
UNICODE_STRING GuidString;
|
2009-01-17 11:19:27 +00:00
|
|
|
|
2009-04-03 17:06:16 +00:00
|
|
|
DPRINT("PcNewPort entered\n");
|
2008-12-04 18:43:42 +00:00
|
|
|
|
2009-09-11 06:33:55 +00:00
|
|
|
PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
|
2009-04-23 19:06:36 +00:00
|
|
|
|
2008-12-04 18:43:42 +00:00
|
|
|
if (!OutPort)
|
|
|
|
{
|
|
|
|
DPRINT("PcNewPort was supplied a NULL OutPort parameter\n");
|
|
|
|
return STATUS_INVALID_PARAMETER;
|
|
|
|
}
|
|
|
|
|
2009-09-11 06:33:55 +00:00
|
|
|
if (IsEqualGUIDAligned(ClassId, CLSID_PortMidi))
|
2009-05-08 09:36:02 +00:00
|
|
|
Status = NewPortDMus(OutPort);
|
2009-09-11 06:33:55 +00:00
|
|
|
else if (IsEqualGUIDAligned(ClassId, CLSID_PortDMus))
|
2008-12-04 18:43:42 +00:00
|
|
|
Status = NewPortDMus(OutPort);
|
2009-09-11 06:33:55 +00:00
|
|
|
else if (IsEqualGUIDAligned(ClassId, CLSID_PortTopology))
|
2008-12-04 18:43:42 +00:00
|
|
|
Status = NewPortTopology(OutPort);
|
2009-09-11 06:33:55 +00:00
|
|
|
else if (IsEqualGUIDAligned(ClassId, CLSID_PortWaveCyclic))
|
2008-12-04 18:43:42 +00:00
|
|
|
Status = NewPortWaveCyclic(OutPort);
|
2009-09-11 06:33:55 +00:00
|
|
|
else if (IsEqualGUIDAligned(ClassId, CLSID_PortWavePci))
|
2008-12-04 18:43:42 +00:00
|
|
|
Status = NewPortWavePci(OutPort);
|
2009-09-11 06:33:55 +00:00
|
|
|
else if (IsEqualGUIDAligned(ClassId, CLSID_PortWaveRT))
|
2009-05-12 16:09:44 +00:00
|
|
|
Status = NewPortWaveRT(OutPort);
|
2008-12-04 18:43:42 +00:00
|
|
|
else
|
2009-01-17 11:19:27 +00:00
|
|
|
{
|
2008-12-04 18:43:42 +00:00
|
|
|
|
2009-04-03 17:06:16 +00:00
|
|
|
if (RtlStringFromGUID(ClassId, &GuidString) == STATUS_SUCCESS)
|
|
|
|
{
|
2009-10-19 18:54:01 +00:00
|
|
|
DPRINT("unknown interface %S\n", GuidString.Buffer);
|
2009-04-03 17:06:16 +00:00
|
|
|
RtlFreeUnicodeString(&GuidString);
|
|
|
|
}
|
2009-01-17 11:19:27 +00:00
|
|
|
|
|
|
|
Status = STATUS_NOT_SUPPORTED;
|
|
|
|
return Status;
|
|
|
|
}
|
2008-12-04 18:43:42 +00:00
|
|
|
DPRINT("PcNewPort Status %lx\n", Status);
|
|
|
|
|
|
|
|
return Status;
|
|
|
|
}
|