Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15cc34ae authored by Daniel Bright's avatar Daniel Bright
Browse files

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
parent 974ddb9f
Loading
Loading
Loading
Loading
+63 −0
Original line number Diff line number Diff line
@@ -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);
};
+52 −0
Original line number Diff line number Diff line
@@ -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);
};
+8 −0
Original line number Diff line number Diff line
@@ -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;
};

/**
+15 −0
Original line number Diff line number Diff line
@@ -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 */
+29 −0
Original line number Diff line number Diff line
@@ -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();
}