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
This commit is contained in:
Daniel Bright 2020-10-26 11:34:53 -07:00
parent 974ddb9f1a
commit 15cc34ae2c
5 changed files with 167 additions and 0 deletions

View file

@ -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);
};

View file

@ -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);
};

View file

@ -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;
};
/**

View file

@ -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<void> isNrDualConnectivityEnabledResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info, bool isEnabled);
Return<void> allocatePduSessionIdResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info, int32_t id);
Return<void> releasePduSessionIdResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info);
Return<void> beginHandoverResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info);
Return<void> cancelHandoverResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info);
};
/* Callback class for radio indication */

View file

@ -1113,3 +1113,32 @@ Return<void> RadioResponse_v1_6::isNrDualConnectivityEnabledResponse(
parent_v1_6.notify(info.serial);
return Void();
}
Return<void> 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<void> RadioResponse_v1_6::releasePduSessionIdResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info) {
rspInfo = info;
parent_v1_6.notify(info.serial);
return Void();
}
Return<void> RadioResponse_v1_6::beginHandoverResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info) {
rspInfo = info;
parent_v1_6.notify(info.serial);
return Void();
}
Return<void> RadioResponse_v1_6::cancelHandoverResponse(
const ::android::hardware::radio::V1_6::RadioResponseInfo& info) {
rspInfo = info;
parent_v1_6.notify(info.serial);
return Void();
}