summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-04-22 14:30:59 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-04-23 23:14:30 +0200
commitd536677efa7e4359d2591e36be7d142948c6a2b9 (patch)
tree9fa24330df59539110126944e69804f982401ada
parent0b1906618eb47b8bd37fba61507259ef09584031 (diff)
downloadlibqmi-d536677efa7e4359d2591e36be7d142948c6a2b9.tar.gz
libqmi-glib,dpm: add service definition
The Data Port Mapper service provides a way to map hardware endpoint ids to the ep-type/ep-iface-number fields we would normally use in "WDA Get/Set Data Format" or "WDS Bind Mux Data Port". This mapping seems to be required in setups using the IPA driver, e.g. as seen in the mmdata_port_cfg() method of the modem-data-manager tool provided by the CodeAurora project under the Linux Foundation: https://source.codeaurora.org/quic/dataservices/modem-data-manager
-rw-r--r--build-aux/qmi-codegen/utils.py4
-rw-r--r--data/Makefile.am1
-rw-r--r--data/qmi-service-dpm.json74
-rw-r--r--docs/reference/libqmi-glib/Makefile.am1
-rw-r--r--docs/reference/libqmi-glib/libqmi-glib-common.sections1
-rw-r--r--docs/reference/libqmi-glib/libqmi-glib-docs.xml10
-rw-r--r--src/libqmi-glib/generated/Makefile.am15
-rw-r--r--src/libqmi-glib/libqmi-glib.h2
-rw-r--r--src/libqmi-glib/qmi-device.c6
-rw-r--r--src/libqmi-glib/qmi-enums.h2
-rw-r--r--src/libqmi-glib/qmi-message.c7
-rw-r--r--src/qmicli/qmicli.c1
12 files changed, 122 insertions, 2 deletions
diff --git a/build-aux/qmi-codegen/utils.py b/build-aux/qmi-codegen/utils.py
index 59fb68b2..2ad66321 100644
--- a/build-aux/qmi-codegen/utils.py
+++ b/build-aux/qmi-codegen/utils.py
@@ -70,8 +70,8 @@ def add_header_start(f, output_name, service):
"#include <gio/gio.h>\n"
"\n"
"#include \"qmi-enums.h\"\n")
- # CTL and GMS don't have enums
- if service not in ('CTL', 'GMS'):
+ # CTL, DPM and GMS don't have enums
+ if service not in ('CTL', 'DPM', 'GMS'):
template += (
"#include \"qmi-enums-${service}.h\"\n")
if service == 'CTL':
diff --git a/data/Makefile.am b/data/Makefile.am
index 7a14f5b8..48e9e008 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -20,6 +20,7 @@ EXTRA_DIST = \
qmi-service-gms.json \
qmi-service-dsd.json \
qmi-service-sar.json \
+ qmi-service-dpm.json \
qmi-collection-minimal.json \
qmi-collection-basic.json \
$(NULL)
diff --git a/data/qmi-service-dpm.json b/data/qmi-service-dpm.json
new file mode 100644
index 00000000..b0b35766
--- /dev/null
+++ b/data/qmi-service-dpm.json
@@ -0,0 +1,74 @@
+[
+ // *********************************************************************************
+ { "name" : "DPM",
+ "type" : "Service" },
+
+ // *********************************************************************************
+ { "name" : "QMI Client DPM",
+ "type" : "Client",
+ "since" : "1.30" },
+
+ // *********************************************************************************
+ { "name" : "QMI Message DPM",
+ "type" : "Message-ID-Enum" },
+
+ // *********************************************************************************
+ { "name" : "Open Port",
+ "type" : "Message",
+ "service" : "DPM",
+ "id" : "0x0020",
+ "since" : "1.30",
+ "input" : [ { "name" : "Control Ports",
+ "id" : "0x10",
+ "type" : "TLV",
+ "since" : "1.30",
+ "format" : "array",
+ "array-element" : { "name" : "Element",
+ "format" : "struct",
+ "contents" : [ { "name" : "Port Name",
+ "format" : "string" },
+ { "name" : "Endpoint Type",
+ "format" : "guint32",
+ "public-format" : "QmiDataEndpointType" },
+ { "name" : "Interface Number",
+ "format" : "guint32" } ] } },
+ { "name" : "Hardware Data Ports",
+ "id" : "0x11",
+ "type" : "TLV",
+ "since" : "1.30",
+ "format" : "array",
+ "array-element" : { "name" : "Element",
+ "format" : "struct",
+ "contents" : [ { "name" : "Endpoint Type",
+ "format" : "guint32",
+ "public-format" : "QmiDataEndpointType" },
+ { "name" : "Interface Number",
+ "format" : "guint32" },
+ { "name" : "RX Endpoint Number",
+ "format" : "guint32" },
+ { "name" : "TX Endpoint Number",
+ "format" : "guint32" } ] } },
+ { "name" : "Software Data Ports",
+ "id" : "0x12",
+ "type" : "TLV",
+ "since" : "1.30",
+ "format" : "array",
+ "array-element" : { "name" : "Element",
+ "format" : "struct",
+ "contents" : [ { "name" : "Endpoint Type",
+ "format" : "guint32",
+ "public-format" : "QmiDataEndpointType" },
+ { "name" : "Interface Number",
+ "format" : "guint32" },
+ { "name" : "Port Name",
+ "format" : "string" } ] } } ],
+ "output" : [ { "common-ref" : "Operation Result" } ] },
+
+ // *********************************************************************************
+ { "name" : "Close Port",
+ "type" : "Message",
+ "service" : "DPM",
+ "id" : "0x0021",
+ "since" : "1.30",
+ "output" : [ { "common-ref" : "Operation Result" } ] }
+]
diff --git a/docs/reference/libqmi-glib/Makefile.am b/docs/reference/libqmi-glib/Makefile.am
index 71d3118b..a7dd0535 100644
--- a/docs/reference/libqmi-glib/Makefile.am
+++ b/docs/reference/libqmi-glib/Makefile.am
@@ -25,6 +25,7 @@ ALL_SECTIONS = \
$(top_builddir)/src/libqmi-glib/generated/qmi-gms.sections \
$(top_builddir)/src/libqmi-glib/generated/qmi-dsd.sections \
$(top_builddir)/src/libqmi-glib/generated/qmi-sar.sections \
+ $(top_builddir)/src/libqmi-glib/generated/qmi-dpm.sections \
$(NULL)
$(DOC_MODULE)-sections.mstamp: $(ALL_SECTIONS)
diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections
index 39abf8c8..24130888 100644
--- a/docs/reference/libqmi-glib/libqmi-glib-common.sections
+++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections
@@ -1838,4 +1838,5 @@ HAVE_QMI_SERVICE_VOICE
HAVE_QMI_SERVICE_WDA
HAVE_QMI_SERVICE_WDS
HAVE_QMI_SERVICE_WMS
+HAVE_QMI_SERVICE_DPM
</SECTION>
diff --git a/docs/reference/libqmi-glib/libqmi-glib-docs.xml b/docs/reference/libqmi-glib/libqmi-glib-docs.xml
index 5539860f..ce3b0312 100644
--- a/docs/reference/libqmi-glib/libqmi-glib-docs.xml
+++ b/docs/reference/libqmi-glib/libqmi-glib-docs.xml
@@ -527,6 +527,16 @@
</chapter>
<chapter>
+ <title>Data Port Mapper (DPM)</title>
+ <xi:include href="xml/qmi-client-dpm.xml"/>
+ <section>
+ <title>DPM Requests</title>
+ <xi:include href="xml/qmi-message-dpm-open-port.xml"/>
+ <xi:include href="xml/qmi-message-dpm-close-port.xml"/>
+ </section>
+ </chapter>
+
+ <chapter>
<title>Compatibility with older versions</title>
<xi:include href="xml/qmi-compat.xml"/>
</chapter>
diff --git a/src/libqmi-glib/generated/Makefile.am b/src/libqmi-glib/generated/Makefile.am
index e80eab44..cf8a3080 100644
--- a/src/libqmi-glib/generated/Makefile.am
+++ b/src/libqmi-glib/generated/Makefile.am
@@ -24,6 +24,7 @@ GENERATED_H = \
qmi-gas.h \
qmi-gms.h \
qmi-dsd.h \
+ qmi-dpm.h \
$(NULL)
GENERATED_C = \
@@ -50,6 +51,7 @@ GENERATED_C = \
qmi-gms.c \
qmi-dsd.c \
qmi-sar.c \
+ qmi-dpm.c \
$(NULL)
GENERATED_SECTIONS = \
@@ -71,6 +73,7 @@ GENERATED_SECTIONS = \
qmi-gms.sections \
qmi-dsd.sections \
qmi-sar.sections \
+ qmi-dpm.sections \
$(NULL)
# Error types
@@ -364,6 +367,17 @@ qmi-sar.h qmi-sar.c qmi-sar.sections: $(top_srcdir)/data/qmi-service-sar.json $(
$(COLLECTION_OPT) \
--output qmi-sar
+# DPM service
+qmi-dpm.h qmi-dpm.c qmi-dpm.sections: $(top_srcdir)/data/qmi-service-dpm.json $(top_srcdir)/build-aux/qmi-codegen/*.py $(top_srcdir)/build-aux/qmi-codegen/qmi-codegen $(COLLECTION_PATH)
+ $(AM_V_GEN) \
+ rm -f qmi-dpm.h && \
+ rm -f qmi-dpm.c && \
+ $(PYTHON) $(top_srcdir)/build-aux/qmi-codegen/qmi-codegen \
+ --input $(top_srcdir)/data/qmi-service-dpm.json \
+ --include $(top_srcdir)/data/qmi-common.json \
+ $(COLLECTION_OPT) \
+ --output qmi-dpm
+
BUILT_SOURCES = $(GENERATED_H) $(GENERATED_C)
nodist_libqmi_glib_generated_la_SOURCES = \
@@ -410,6 +424,7 @@ nodist_include_HEADERS = \
qmi-gas.h \
qmi-gms.h \
qmi-dsd.h \
+ qmi-dpm.h \
$(NULL)
CLEANFILES = $(GENERATED_H) $(GENERATED_C) $(GENERATED_SECTIONS)
diff --git a/src/libqmi-glib/libqmi-glib.h b/src/libqmi-glib/libqmi-glib.h
index 11270056..07bf06bb 100644
--- a/src/libqmi-glib/libqmi-glib.h
+++ b/src/libqmi-glib/libqmi-glib.h
@@ -94,6 +94,8 @@
#include "qmi-enums-sar.h"
#include "qmi-sar.h"
+#include "qmi-dpm.h"
+
/* generated */
#include "qmi-error-types.h"
#include "qmi-enum-types.h"
diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c
index 3c415067..31db4402 100644
--- a/src/libqmi-glib/qmi-device.c
+++ b/src/libqmi-glib/qmi-device.c
@@ -54,6 +54,7 @@
#include "qmi-gas.h"
#include "qmi-gms.h"
#include "qmi-dsd.h"
+#include "qmi-dpm.h"
#include "qmi-utils.h"
#include "qmi-helpers.h"
#include "qmi-error-types.h"
@@ -1271,6 +1272,11 @@ qmi_device_allocate_client (QmiDevice *self,
ctx->client_type = QMI_TYPE_CLIENT_SAR;
#endif
break;
+ case QMI_SERVICE_DPM:
+#if defined HAVE_QMI_SERVICE_DPM
+ ctx->client_type = QMI_TYPE_CLIENT_DPM;
+#endif
+ break;
case QMI_SERVICE_UNKNOWN:
g_assert_not_reached ();
diff --git a/src/libqmi-glib/qmi-enums.h b/src/libqmi-glib/qmi-enums.h
index 4c4cba6b..c669fd6b 100644
--- a/src/libqmi-glib/qmi-enums.h
+++ b/src/libqmi-glib/qmi-enums.h
@@ -79,6 +79,7 @@
* @QMI_SERVICE_RFRPE: RF radiated performance enhancement service. Since: 1.8.
* @QMI_SERVICE_DSD: Data system determination service. Since: 1.8.
* @QMI_SERVICE_SSCTL: Subsystem control service. Since: 1.8.
+ * @QMI_SERVICE_DPM: Data Port Mapper service. Since: 1.30.
* @QMI_SERVICE_CAT: Card Application Toolkit service (v1).
* @QMI_SERVICE_RMS: Remote Management Service.
* @QMI_SERVICE_OMA: Open Mobile Alliance device management service.
@@ -136,6 +137,7 @@ typedef enum { /*< since=1.0 >*/
QMI_SERVICE_RFRPE = 0x29,
QMI_SERVICE_DSD = 0x2A,
QMI_SERVICE_SSCTL = 0x2B,
+ QMI_SERVICE_DPM = 0x2F,
QMI_SERVICE_CAT = 0xE0,
QMI_SERVICE_RMS = 0xE1,
QMI_SERVICE_OMA = 0xE2,
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c
index da0c3aa4..92895ea4 100644
--- a/src/libqmi-glib/qmi-message.c
+++ b/src/libqmi-glib/qmi-message.c
@@ -58,6 +58,7 @@
#include "qmi-gms.h"
#include "qmi-dsd.h"
#include "qmi-sar.h"
+#include "qmi-dpm.h"
#define PACKED __attribute__((packed))
@@ -1715,6 +1716,11 @@ qmi_message_get_printable_full (QmiMessage *self,
contents = __qmi_message_dsd_get_printable (self, context, line_prefix);
#endif
break;
+ case QMI_SERVICE_DPM:
+#if defined HAVE_QMI_SERVICE_DPM
+ contents = __qmi_message_dpm_get_printable (self, context, line_prefix);
+#endif
+ break;
case QMI_SERVICE_UNKNOWN:
g_assert_not_reached ();
@@ -1821,6 +1827,7 @@ __qmi_message_is_abortable (QmiMessage *self,
case QMI_SERVICE_IMSRTP:
case QMI_SERVICE_RFRPE:
case QMI_SERVICE_SSCTL:
+ case QMI_SERVICE_DPM:
case QMI_SERVICE_CAT:
case QMI_SERVICE_RMS:
case QMI_SERVICE_FOTA:
diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c
index 14107e80..7be87f30 100644
--- a/src/qmicli/qmicli.c
+++ b/src/qmicli/qmicli.c
@@ -485,6 +485,7 @@ allocate_client_ready (QmiDevice *dev,
case QMI_SERVICE_IMSRTP:
case QMI_SERVICE_RFRPE:
case QMI_SERVICE_SSCTL:
+ case QMI_SERVICE_DPM:
case QMI_SERVICE_CAT:
case QMI_SERVICE_RMS:
case QMI_SERVICE_FOTA: