[PATCH v4 5/6] mbimmodem: sim: add support for querying IMSI with MBIMEx 3 This commit adds the ability to query IMSI with newer modems that use the MBIMEx 3 protocol.

Muhammad Asif <[email protected]> Mon, 5 May 2025 00:19:30 +0500
Newsgroups dev.linux.lists.ofono
Message-ID <[email protected]>
---
 drivers/mbimmodem/sim.c | 30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

diff --git a/drivers/mbimmodem/sim.c b/drivers/mbimmodem/sim.c
index df8d73ce..8f9998a7 100644
--- a/drivers/mbimmodem/sim.c
+++ b/drivers/mbimmodem/sim.c
@@ -390,12 +390,22 @@ static void mbim_subscriber_ready_status_changed(struct mbim_message *message,
 	char *imsi;
 	char *iccid;
 	uint32_t ready_info;
+	uint32_t ready_flags;
+	bool r;
 
 	DBG("");
 
-	if (!mbim_message_get_arguments(message, "ussu",
-					&ready_state, &imsi,
-					&iccid, &ready_info))
+	if (mbim_device_check_mbimex_version(sd->device, 3, 0)) {
+		r = mbim_message_get_arguments(message, "uussu",
+						&ready_state, &ready_flags, &imsi,
+						&iccid, &ready_info);
+	} else {
+		r = mbim_message_get_arguments(message, "ussu",
+						&ready_state, &imsi,
+						&iccid, &ready_info);
+	}
+
+	if (!r)
 		return;
 
 	l_free(sd->iccid);
@@ -418,6 +428,7 @@ static void mbim_subscriber_ready_status_cb(struct mbim_message *message,
 	char *imsi;
 	char *iccid;
 	uint32_t ready_info;
+	uint32_t ready_flags;
 	bool r;
 
 	DBG("");
@@ -426,9 +437,16 @@ static void mbim_subscriber_ready_status_cb(struct mbim_message *message,
 		goto error;
 
 	/* We don't bother parsing MSISDN/MDN array */
-	r = mbim_message_get_arguments(message, "ussu",
-					&ready_state, &imsi,
-					&iccid, &ready_info);
+	if (mbim_device_check_mbimex_version(sd->device, 3, 0)) {
+		r = mbim_message_get_arguments(message, "uussu",
+						&ready_state, &ready_flags, &imsi,
+						&iccid, &ready_info);
+	} else {
+		r = mbim_message_get_arguments(message, "ussu",
+						&ready_state, &imsi,
+						&iccid, &ready_info);
+	}
+
 	if (!r)
 		goto error;
 
-- 
2.49.0