From 15cc34ae2c1c135dc0ae0f9f2974592d80923c35 Mon Sep 17 00:00:00 2001 From: Daniel Bright Date: Mon, 26 Oct 2020 11:34:53 -0700 Subject: [PATCH] Add HAL for pdu session id support * Add in HAL support for AOSP allocating pdu session ids from modem * Add in HAL support that notifies modem when a handover has begun and was cannceled (clean cherry pick) Test: N/A Bug: 161572859 Change-Id: I2771b4773381ba68f482a80e743bdbb05a8e59d1 Merged-In: I2771b4773381ba68f482a80e743bdbb05a8e59d1 --- radio/1.6/IRadio.hal | 63 +++++++++++++++++++ radio/1.6/IRadioResponse.hal | 52 +++++++++++++++ radio/1.6/types.hal | 8 +++ .../functional/radio_hidl_hal_utils_v1_6.h | 15 +++++ radio/1.6/vts/functional/radio_response.cpp | 29 +++++++++ 5 files changed, 167 insertions(+) diff --git a/radio/1.6/IRadio.hal b/radio/1.6/IRadio.hal index ca40a17b24..0e421cb86f 100644 --- a/radio/1.6/IRadio.hal +++ b/radio/1.6/IRadio.hal @@ -205,4 +205,67 @@ interface IRadio extends @1.5::IRadio { * Response callback is IRadioResponse.isNRDualConnectivityEnabledResponse() */ oneway isNrDualConnectivityEnabled(int32_t serial); + + /** + * Reserves an unallocated pdu session id from the pool of ids. + * + * The allocated id is returned in the response. + * + * When the id is no longer needed, call releasePduSessionId to + * return it to the pool. + * + * Reference: 3GPP TS 24.007 section 11.2.3.1b + * + * @param serial Serial number of request. + * + * Response function is IRadioResponse.allocatePduSessionIdResponse() + */ + oneway allocatePduSessionId(int32_t serial); + + /** + * Releases a pdu session id that was previously allocated using + * allocatePduSessionId. + * + * Reference: 3GPP TS 24.007 section 11.2.3.1b + * @param serial Serial number of request. + * @param id Pdu session id to release. + * + * Response function is IRadioResponse.releasePduSessionIdResponse() + */ + oneway releasePduSessionId(int32_t serial, int32_t id); + + /** + * Indicates that a handover to the IWLAN transport has begun. + * + * Any resources being transferred to the IWlan transport cannot be released while a + * handover is underway. For example, if a pdu session id needs to be + * transferred to IWlan, then, the modem should not release the id while + * the handover is in progress. + * + * If a handover was unsuccessful, then the framework calls IRadio::cancelHandover. + * The modem retains ownership over any of the resources being transferred to IWlan. + * + * If a handover was successful, the framework calls IRadio::deactivateDataCall with reason + * HANDOVER. The IWlan transport now owns the transferred resources and is responsible for + * releasing them. + * + * @param serial Serial number of request. + * @param id callId The identifier of the data call which is provided in SetupDataCallResult + * + * Response function is IRadioResponse.beginHandoverResponse() + */ + oneway beginHandover(int32_t serial, int32_t callId); + + /** + * Indicates that a handover was cancelled after a call to IRadio::beginHandover. + * + * Since the handover was unsuccessful, the modem retains ownership over any of the resources + * being transferred and is still responsible for releasing them. + * + * @param serial Serial number of request. + * @param id callId The identifier of the data call which is provided in SetupDataCallResult + * + * Response function is IRadioResponse.cancelHandoverResponse() + */ + oneway cancelHandover(int32_t serial, int32_t callId); }; diff --git a/radio/1.6/IRadioResponse.hal b/radio/1.6/IRadioResponse.hal index 4ff7e47f12..7708c46dca 100644 --- a/radio/1.6/IRadioResponse.hal +++ b/radio/1.6/IRadioResponse.hal @@ -222,4 +222,56 @@ interface IRadioResponse extends @1.5::IRadioResponse { * RadioError:INTERNAL_ERR */ oneway isNrDualConnectivityEnabledResponse(RadioResponseInfo info, bool isEnabled); + + /** + * @param info Response info struct containing response type, serial no. and error + * @param id The allocated id. On an error, this is set to -1 + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NO_RESOURCES- Indicates that no pdu session ids are available + * RadioError:REQUEST_NOT_SUPPORTED + */ + oneway allocatePduSessionIdResponse(RadioResponseInfo info, int32_t id); + + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NO_RESOURCES + * RadioError:REQUEST_NOT_SUPPORTED + */ + oneway releasePduSessionIdResponse(RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NO_RESOURCES + * RadioError:REQUEST_NOT_SUPPORTED + * RadioError:INVALID_CALL_ID + */ + oneway beginHandoverResponse(RadioResponseInfo info); + + /** + * @param info Response info struct containing response type, serial no. and error + * @param dcResponse Attributes of data call + * + * Valid errors returned: + * RadioError:NONE + * RadioError:RADIO_NOT_AVAILABLE + * RadioError:INTERNAL_ERR + * RadioError:NO_RESOURCES + * RadioError:REQUEST_NOT_SUPPORTED + * RadioError:INVALID_CALL_ID + */ + oneway cancelHandoverResponse(RadioResponseInfo info); }; diff --git a/radio/1.6/types.hal b/radio/1.6/types.hal index 07b49771c5..a98cd1ff83 100644 --- a/radio/1.6/types.hal +++ b/radio/1.6/types.hal @@ -254,6 +254,14 @@ struct SetupDataCallResult { /** Specifies the fallback mode on an IWLAN handover failure. */ HandoverFailureMode handoverFailureMode; + + /** + * The allocated pdu session id for this data call. + * A value of -1 means no pdu session id was attached to this call. + * + * Reference: 3GPP TS 24.007 section 11.2.3.1b + */ + int32_t pduSessionId; }; /** diff --git a/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h b/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h index 784bcd91e8..7477c5425f 100644 --- a/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h +++ b/radio/1.6/vts/functional/radio_hidl_hal_utils_v1_6.h @@ -80,6 +80,9 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon bool enableModemResponseToggle; bool isNRDualConnectivityEnabled; + // Pdu Session Id and Handover + int32_t allocatedPduSessionId; + ::android::hardware::hidl_bitfield<::android::hardware::radio::V1_4::RadioAccessFamily> networkTypeBitmapResponse; @@ -771,6 +774,18 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon const ::android::hardware::radio::V1_6::RadioResponseInfo& info); Return isNrDualConnectivityEnabledResponse( const ::android::hardware::radio::V1_6::RadioResponseInfo& info, bool isEnabled); + + Return allocatePduSessionIdResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, int32_t id); + + Return releasePduSessionIdResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info); + + Return beginHandoverResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info); + + Return cancelHandoverResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info); }; /* Callback class for radio indication */ diff --git a/radio/1.6/vts/functional/radio_response.cpp b/radio/1.6/vts/functional/radio_response.cpp index ffa384ed9b..1cdfeed816 100644 --- a/radio/1.6/vts/functional/radio_response.cpp +++ b/radio/1.6/vts/functional/radio_response.cpp @@ -1113,3 +1113,32 @@ Return RadioResponse_v1_6::isNrDualConnectivityEnabledResponse( parent_v1_6.notify(info.serial); return Void(); } + +Return RadioResponse_v1_6::allocatePduSessionIdResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info, int32_t id) { + rspInfo = info; + allocatedPduSessionId = id; + parent_v1_6.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_6::releasePduSessionIdResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info) { + rspInfo = info; + parent_v1_6.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_6::beginHandoverResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info) { + rspInfo = info; + parent_v1_6.notify(info.serial); + return Void(); +} + +Return RadioResponse_v1_6::cancelHandoverResponse( + const ::android::hardware::radio::V1_6::RadioResponseInfo& info) { + rspInfo = info; + parent_v1_6.notify(info.serial); + return Void(); +}