Re: [PATCH v7 03/10] mbimmodem: add support for MBIM extensions
Andres Salomon <[email protected]> Fri, 12 Dec 2025 02:32:36 -0500
| Newsgroups | dev.linux.lists.ofono |
|---|---|
| Message-ID | <[email protected]> |
On 11/28/25 12:36, Muhammad Asif wrote:
> With MBIMEx 3.0, arguments for activating GPRS changed. Update as
> needed.
> ---
> drivers/mbimmodem/gprs-context.c | 64 +++++++++++++++++++++++++-------
> drivers/mbimmodem/mbim.c | 13 +++++++
> drivers/mbimmodem/mbim.h | 6 +++
> drivers/mbimmodem/mbimmodem.h | 1 +
> drivers/mbimmodem/sim.c | 31 +++++++++++++---
> drivers/mbimmodem/util.c | 1 -
> plugins/mbim.c | 39 +++++++++++++++++++
> 7 files changed, 134 insertions(+), 21 deletions(-)
>
[...]
> @@ -281,6 +281,29 @@ error:
> mbim_device_shutdown(md->device);
> }
>
> +static void mbim_device_mbimex_version_cb(struct mbim_message *message,
> + void *user)
> +{
> + struct ofono_modem *modem = user;
> + uint16_t mbim_version, mbimex_version;
> +
> + if (mbim_message_get_error(message) != 0) {
> + /* Fallback to MBIM 1.0 with no extensions */
> + mbim_version = (1 << 8) | 0;
> + mbimex_version = (0 << 8) | 0;
> + goto version_set;
> + }
> +
> + mbim_message_get_arguments(message, "qq",
> + &mbim_version, &mbimex_version);
mbim_message_get_arguments() can fail, and the return value should be
checked here; I'd rework it to something like this:
if (mbim_message_get_error(message) != 0 ||
!mbim_message_get_arguments(message, "qq", &mbim_version,
&mbimex_version)) {
/* fallback to MBIM 1.0 with no extensions */
mbim_version = ...
mbimex_version = ...
}
ofono_modem_set_integer(...);
> +
> +version_set:
> + ofono_modem_set_integer(modem, "MBIMVersion",
> + mbim_version);
> + ofono_modem_set_integer(modem, "MBIMExVersion",
> + mbimex_version);
> +}
> +
> static void mbim_device_closed(void *user_data)
> {
> struct ofono_modem *modem = user_data;
> @@ -298,6 +321,22 @@ static void mbim_device_ready(void *user_data)
> struct mbim_data *md = ofono_modem_get_data(modem);
> struct mbim_message *message;
>
> + /* Version is formatted as (major version) << 8 | (minor version) */
> + static const uint16_t mbim_version = (1 << 8) | 0;
> +
> + /* Always open with MBIMEx 3, devices not supporting it will fallback to MBIMEx 2 */
> + static const uint16_t mbimex_version = (3 << 8) | 0;
> +
> + message = mbim_message_new(mbim_ms_basic_connect_extensions,
> + MBIM_CID_MS_BASIC_CONNECT_EXTENSIONS_VERSION,
> + MBIM_COMMAND_TYPE_QUERY);
> + mbim_message_set_arguments(message, "qq",
> + mbim_version,
> + mbimex_version);
> +
> + mbim_device_send(md->device, 0, message,
> + mbim_device_mbimex_version_cb, modem, NULL);
> +
> message = mbim_message_new(mbim_uuid_basic_connect,
> MBIM_CID_DEVICE_CAPS,
> MBIM_COMMAND_TYPE_QUERY);