headers: add ActivateAudioInterfaceAsync API's in mmdeviceapi

The ActivateAudioInterfaceAsync function is added to mmdeviceapi.dll for all
platforms.

See https://docs.microsoft.com/en-us/windows/win32/api/mmdeviceapi/nf-mmdeviceapi-activateaudiointerfaceasync
and https://docs.microsoft.com/en-us/windows/desktop/api/mmdeviceapi/nn-mmdeviceapi-iactivateaudiointerfaceasyncoperation

The libarm32 version is removed in favor of the one in common.

Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/lib-common/mmdevapi.def b/mingw-w64-crt/lib-common/mmdevapi.def
new file mode 100644
index 0000000..4affff5
--- /dev/null
+++ b/mingw-w64-crt/lib-common/mmdevapi.def
@@ -0,0 +1,3 @@
+LIBRARY "mmdevapi.dll"
+EXPORTS
+ActivateAudioInterfaceAsync
diff --git a/mingw-w64-crt/lib32/Makefile.am b/mingw-w64-crt/lib32/Makefile.am
index a6d2013..d3e5140 100644
--- a/mingw-w64-crt/lib32/Makefile.am
+++ b/mingw-w64-crt/lib32/Makefile.am
@@ -170,6 +170,7 @@
 lib32_DATA += %reldir%/libmfreadwrite.a
 lib32_DATA += %reldir%/libmgmtapi.a
 lib32_DATA += %reldir%/libmincore.a
+lib32_DATA += %reldir%/libmmdevapi.a
 lib32_DATA += %reldir%/libmpr.a
 lib32_DATA += %reldir%/libmprapi.a
 lib32_DATA += %reldir%/libmqrt.a
diff --git a/mingw-w64-crt/lib32/mmdevapi.def b/mingw-w64-crt/lib32/mmdevapi.def
new file mode 100644
index 0000000..a13425c
--- /dev/null
+++ b/mingw-w64-crt/lib32/mmdevapi.def
@@ -0,0 +1,3 @@
+LIBRARY "mmdevapi.dll"
+EXPORTS
+ActivateAudioInterfaceAsync@20
diff --git a/mingw-w64-crt/lib64/Makefile.am b/mingw-w64-crt/lib64/Makefile.am
index 040dcdc..7b52bc9 100644
--- a/mingw-w64-crt/lib64/Makefile.am
+++ b/mingw-w64-crt/lib64/Makefile.am
@@ -306,6 +306,7 @@
 lib64_DATA += %reldir%/libmll_hp.a
 lib64_DATA += %reldir%/libmll_mtf.a
 lib64_DATA += %reldir%/libmll_qic.a
+lib64_DATA += %reldir%/libmmdevapi.a
 lib64_DATA += %reldir%/libmmfutil.a
 lib64_DATA += %reldir%/libmmutilse.a
 lib64_DATA += %reldir%/libmobsync.a
diff --git a/mingw-w64-crt/libarm32/mmdevapi.def b/mingw-w64-crt/libarm32/mmdevapi.def
deleted file mode 100644
index f0499a1..0000000
--- a/mingw-w64-crt/libarm32/mmdevapi.def
+++ /dev/null
@@ -1,23 +0,0 @@
-;
-; Definition file of MMDevAPI.DLL
-; Automatic generated by gendef
-; written by Kai Tietz 2008-2014
-;
-LIBRARY "MMDevAPI.DLL"
-EXPORTS
-ord_2 @2
-ord_3 @3
-ord_4 @4
-ord_5 @5
-ord_6 @6
-ord_7 @7
-ord_8 @8
-ord_9 @9
-ord_10 @10
-ord_11 @11
-ord_12 @12
-ord_13 @13
-ord_14 @14
-ord_15 @15
-ActivateAudioInterfaceAsync
-ord_18 @18
diff --git a/mingw-w64-crt/libarm64/Makefile.am b/mingw-w64-crt/libarm64/Makefile.am
index dcffd2f..7a2ca4a 100644
--- a/mingw-w64-crt/libarm64/Makefile.am
+++ b/mingw-w64-crt/libarm64/Makefile.am
@@ -153,6 +153,7 @@
 libarm64_DATA += %reldir%/libmidimap.a
 libarm64_DATA += %reldir%/libmincore.a
 libarm64_DATA += %reldir%/libmlang.a
+libarm64_DATA += %reldir%/libmmdevapi.a
 libarm64_DATA += %reldir%/libmodemui.a
 libarm64_DATA += %reldir%/libmpr.a
 libarm64_DATA += %reldir%/libmsacm32.a
diff --git a/mingw-w64-headers/include/mmdeviceapi.h b/mingw-w64-headers/include/mmdeviceapi.h
index 7c9f880..30dc505 100644
--- a/mingw-w64-headers/include/mmdeviceapi.h
+++ b/mingw-w64-headers/include/mmdeviceapi.h
@@ -66,6 +66,22 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __IActivateAudioInterfaceAsyncOperation_FWD_DEFINED__
+#define __IActivateAudioInterfaceAsyncOperation_FWD_DEFINED__
+typedef interface IActivateAudioInterfaceAsyncOperation IActivateAudioInterfaceAsyncOperation;
+#ifdef __cplusplus
+interface IActivateAudioInterfaceAsyncOperation;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __IActivateAudioInterfaceCompletionHandler_FWD_DEFINED__
+#define __IActivateAudioInterfaceCompletionHandler_FWD_DEFINED__
+typedef interface IActivateAudioInterfaceCompletionHandler IActivateAudioInterfaceCompletionHandler;
+#ifdef __cplusplus
+interface IActivateAudioInterfaceCompletionHandler;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __MMDeviceEnumerator_FWD_DEFINED__
 #define __MMDeviceEnumerator_FWD_DEFINED__
 #ifdef __cplusplus
@@ -769,6 +785,164 @@
 
 #endif  /* __IMMDeviceActivator_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IActivateAudioInterfaceAsyncOperation interface
+ */
+#ifndef __IActivateAudioInterfaceAsyncOperation_INTERFACE_DEFINED__
+#define __IActivateAudioInterfaceAsyncOperation_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IActivateAudioInterfaceAsyncOperation, 0x72a22d78, 0xcde4, 0x431d, 0xb8,0xcc, 0x84,0x3a,0x71,0x19,0x9b,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("72a22d78-cde4-431d-b8cc-843a71199b6d")
+IActivateAudioInterfaceAsyncOperation : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetActivateResult(
+        HRESULT *activateResult,
+        IUnknown **activatedInterface) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IActivateAudioInterfaceAsyncOperation, 0x72a22d78, 0xcde4, 0x431d, 0xb8,0xcc, 0x84,0x3a,0x71,0x19,0x9b,0x6d)
+#endif
+#else
+typedef struct IActivateAudioInterfaceAsyncOperationVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IActivateAudioInterfaceAsyncOperation *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IActivateAudioInterfaceAsyncOperation *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IActivateAudioInterfaceAsyncOperation *This);
+
+    /*** IActivateAudioInterfaceAsyncOperation methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetActivateResult)(
+        IActivateAudioInterfaceAsyncOperation *This,
+        HRESULT *activateResult,
+        IUnknown **activatedInterface);
+
+    END_INTERFACE
+} IActivateAudioInterfaceAsyncOperationVtbl;
+
+interface IActivateAudioInterfaceAsyncOperation {
+    CONST_VTBL IActivateAudioInterfaceAsyncOperationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IActivateAudioInterfaceAsyncOperation_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IActivateAudioInterfaceAsyncOperation_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IActivateAudioInterfaceAsyncOperation_Release(This) (This)->lpVtbl->Release(This)
+/*** IActivateAudioInterfaceAsyncOperation methods ***/
+#define IActivateAudioInterfaceAsyncOperation_GetActivateResult(This,activateResult,activatedInterface) (This)->lpVtbl->GetActivateResult(This,activateResult,activatedInterface)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IActivateAudioInterfaceAsyncOperation_QueryInterface(IActivateAudioInterfaceAsyncOperation* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IActivateAudioInterfaceAsyncOperation_AddRef(IActivateAudioInterfaceAsyncOperation* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IActivateAudioInterfaceAsyncOperation_Release(IActivateAudioInterfaceAsyncOperation* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IActivateAudioInterfaceAsyncOperation methods ***/
+static FORCEINLINE HRESULT IActivateAudioInterfaceAsyncOperation_GetActivateResult(IActivateAudioInterfaceAsyncOperation* This,HRESULT *activateResult,IUnknown **activatedInterface) {
+    return This->lpVtbl->GetActivateResult(This,activateResult,activatedInterface);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IActivateAudioInterfaceAsyncOperation_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IActivateAudioInterfaceCompletionHandler interface
+ */
+#ifndef __IActivateAudioInterfaceCompletionHandler_INTERFACE_DEFINED__
+#define __IActivateAudioInterfaceCompletionHandler_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IActivateAudioInterfaceCompletionHandler, 0x41d949ab, 0x9862, 0x444a, 0x80,0xf6, 0xc2,0x61,0x33,0x4d,0xa5,0xeb);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("41d949ab-9862-444a-80f6-c261334da5eb")
+IActivateAudioInterfaceCompletionHandler : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE ActivateCompleted(
+        IActivateAudioInterfaceAsyncOperation *activateOperation) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IActivateAudioInterfaceCompletionHandler, 0x41d949ab, 0x9862, 0x444a, 0x80,0xf6, 0xc2,0x61,0x33,0x4d,0xa5,0xeb)
+#endif
+#else
+typedef struct IActivateAudioInterfaceCompletionHandlerVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IActivateAudioInterfaceCompletionHandler *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IActivateAudioInterfaceCompletionHandler *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IActivateAudioInterfaceCompletionHandler *This);
+
+    /*** IActivateAudioInterfaceCompletionHandler methods ***/
+    HRESULT (STDMETHODCALLTYPE *ActivateCompleted)(
+        IActivateAudioInterfaceCompletionHandler *This,
+        IActivateAudioInterfaceAsyncOperation *activateOperation);
+
+    END_INTERFACE
+} IActivateAudioInterfaceCompletionHandlerVtbl;
+
+interface IActivateAudioInterfaceCompletionHandler {
+    CONST_VTBL IActivateAudioInterfaceCompletionHandlerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IActivateAudioInterfaceCompletionHandler_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IActivateAudioInterfaceCompletionHandler_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IActivateAudioInterfaceCompletionHandler_Release(This) (This)->lpVtbl->Release(This)
+/*** IActivateAudioInterfaceCompletionHandler methods ***/
+#define IActivateAudioInterfaceCompletionHandler_ActivateCompleted(This,activateOperation) (This)->lpVtbl->ActivateCompleted(This,activateOperation)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IActivateAudioInterfaceCompletionHandler_QueryInterface(IActivateAudioInterfaceCompletionHandler* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IActivateAudioInterfaceCompletionHandler_AddRef(IActivateAudioInterfaceCompletionHandler* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IActivateAudioInterfaceCompletionHandler_Release(IActivateAudioInterfaceCompletionHandler* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IActivateAudioInterfaceCompletionHandler methods ***/
+static FORCEINLINE HRESULT IActivateAudioInterfaceCompletionHandler_ActivateCompleted(IActivateAudioInterfaceCompletionHandler* This,IActivateAudioInterfaceAsyncOperation *activateOperation) {
+    return This->lpVtbl->ActivateCompleted(This,activateOperation);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IActivateAudioInterfaceCompletionHandler_INTERFACE_DEFINED__ */
+
+HRESULT WINAPI ActivateAudioInterfaceAsync(LPCWSTR deviceInterfacePath, REFIID riid, PROPVARIANT *activationParams, IActivateAudioInterfaceCompletionHandler *completionHandler, IActivateAudioInterfaceAsyncOperation **activationOperation);
+
 typedef struct _AudioExtensionParams {
     LPARAM AddPageParam;
     IMMDevice *pEndPoint;
diff --git a/mingw-w64-headers/include/mmdeviceapi.idl b/mingw-w64-headers/include/mmdeviceapi.idl
index d1fb6ae..9a35b0c 100644
--- a/mingw-w64-headers/include/mmdeviceapi.idl
+++ b/mingw-w64-headers/include/mmdeviceapi.idl
@@ -229,6 +229,38 @@
     );
 }
 
+[
+    object,
+    local,
+    uuid(72a22d78-cde4-431d-b8cc-843a71199b6d),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IActivateAudioInterfaceAsyncOperation : IUnknown
+{
+    [id(1)] HRESULT GetActivateResult(
+        [out] HRESULT *activateResult,
+        [out] IUnknown **activatedInterface
+    );
+}
+
+[
+    object,
+    local,
+    uuid(41d949ab-9862-444a-80f6-c261334da5eb),
+    nonextensible,
+    pointer_default(unique)
+]
+interface IActivateAudioInterfaceCompletionHandler : IUnknown
+{
+    [id(1)] HRESULT ActivateCompleted(
+        [out] IActivateAudioInterfaceAsyncOperation *activateOperation
+    );
+}
+
+cpp_quote("HRESULT WINAPI ActivateAudioInterfaceAsync(LPCWSTR deviceInterfacePath, REFIID riid, PROPVARIANT *activationParams, IActivateAudioInterfaceCompletionHandler *completionHandler, IActivateAudioInterfaceAsyncOperation **activationOperation);")
+cpp_quote("")
+
 typedef struct _AudioExtensionParams
 {
     LPARAM AddPageParam;