diff --git a/compatibility_matrices/compatibility_matrix.current.xml b/compatibility_matrices/compatibility_matrix.current.xml index 66417c212f..5a6f1685d1 100644 --- a/compatibility_matrices/compatibility_matrix.current.xml +++ b/compatibility_matrices/compatibility_matrix.current.xml @@ -507,7 +507,7 @@ android.hardware.tetheroffload.control - 1.0 + 1.1 IOffloadControl default diff --git a/tetheroffload/control/1.1/Android.bp b/tetheroffload/control/1.1/Android.bp new file mode 100644 index 0000000000..18c8ea97d1 --- /dev/null +++ b/tetheroffload/control/1.1/Android.bp @@ -0,0 +1,16 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +hidl_interface { + name: "android.hardware.tetheroffload.control@1.1", + root: "android.hardware", + srcs: [ + "types.hal", + "IOffloadControl.hal", + "ITetheringOffloadCallback.hal", + ], + interfaces: [ + "android.hardware.tetheroffload.control@1.0", + "android.hidl.base@1.0", + ], + gen_java: true, +} diff --git a/tetheroffload/control/1.1/IOffloadControl.hal b/tetheroffload/control/1.1/IOffloadControl.hal new file mode 100644 index 0000000000..eb5b8a1383 --- /dev/null +++ b/tetheroffload/control/1.1/IOffloadControl.hal @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.tetheroffload.control@1.1; + +import @1.0::IOffloadControl; + +/** + * Interface used to control the lifecycle of tethering offload. Note that callbacks of 1.1 HAL + * can be registered with the existing callback registration methods from 1.0 HAL. + */ +interface IOffloadControl extends @1.0::IOffloadControl { + /** + * Instruct hardware to send callbacks after certain number of bytes have been transferred in + * either direction on this upstream interface. + * + * The specified quota bytes must be applied to all traffic on the given upstream interface. + * This includes hardware forwarded traffic, software forwarded traffic, and AP-originated + * traffic. IPv4 and IPv6 traffic both count towards the same quota. IP headers are included + * in the byte count quota, but, link-layer headers are not. + * + * This API may only be called while offload is occurring on this upstream. The hardware + * management process MUST NOT store the values when offload is not started and applies once + * offload is started. This is because the quota values would likely become stale over + * time and would not reflect any new traffic that has occurred. + * + * This API replaces {@link @1.0::IOffloadControl::setDataLimit}, the framework would always + * calls this API if 1.1 HAL is supported. Otherwise, calls the other one. Thus, no + * interaction between the two APIs need to be addressed. However, the hardware implementation + * still needs to keep functionality of both in case of shipping with older framework that + * doesn't support 1.1 HAL. + * + * The specified quota bytes MUST replace any previous quotas set by + * {@code setDataWarningAndLimit} specified on the same interface. It may be interpreted as + * "tell me when either or bytes have been transferred + * (in either direction), and stop offload when bytes have been transferred, + * starting now and counting from zero on ." + * + * Once the {@code warningBytes} is reached, the callback registered in initOffload must be + * called with {@code OFFLOAD_WARNING_REACHED} to indicate this event. Once the event fires + * for this upstream, no further {@code OFFLOAD_WARNING_REACHED} event will be fired for this + * upstream unless this method is called again with the same interface. Note that there is + * no need to call initOffload again to resume offload if stopOffload was not called by the + * client. + * + * Similarly, Once the {@code limitBytes} is reached, the callback registered in initOffload + * must be called with {@code OFFLOAD_STOPPED_LIMIT_REACHED} to indicate this event. Once + * the event fires for this upstream, no further {@code OFFLOAD_STOPPED_LIMIT_REACHED} + * event will be fired for this upstream unless this method is called again with the same + * interface. However, unlike {@code warningBytes}, when {@code limitBytes} is reached, + * all offload must be stopped. If offload is desired again, the hardware management + * process must be completely reprogrammed by calling setUpstreamParameters and + * addDownstream again. + * + * Note that when one of the quota bytes is reached, the other one is still considered valid + * unless this method is called again with the same interface. + * + * @param upstream Upstream interface name that quota must apply to. + * @param warningBytes The quota of warning, defined as the number of bytes, starting from + * zero and counting from now. + * @param limitBytes The quota of limit, defined as the number of bytes, starting from zero + * and counting from now. + * + * @return success true if quota is applied, false otherwise + * @return errMsg a human readable string if error has occurred. + */ + setDataWarningAndLimit(string upstream, uint64_t warningBytes, uint64_t limitBytes) + generates (bool success, string errMsg); +}; diff --git a/tetheroffload/control/1.1/ITetheringOffloadCallback.hal b/tetheroffload/control/1.1/ITetheringOffloadCallback.hal new file mode 100644 index 0000000000..7a7d56d9d3 --- /dev/null +++ b/tetheroffload/control/1.1/ITetheringOffloadCallback.hal @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.tetheroffload.control@1.1; + +import @1.0::ITetheringOffloadCallback; +import OffloadCallbackEvent; + +/** + * Callback providing information about status of hardware management process + * as well as providing a way to keep offloaded connections from timing out. + */ +interface ITetheringOffloadCallback extends @1.0::ITetheringOffloadCallback { + /** + * Called when an asynchronous event is generated by the hardware + * management process. Events which are common for 1.0 and 1.1 HAL + * MUST be fired on both 1.0 and 1.1 callback. + */ + oneway onEvent_1_1(OffloadCallbackEvent event); +}; diff --git a/tetheroffload/control/1.1/types.hal b/tetheroffload/control/1.1/types.hal new file mode 100644 index 0000000000..30e6af3e2a --- /dev/null +++ b/tetheroffload/control/1.1/types.hal @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.tetheroffload.control@1.1; + +import @1.0::OffloadCallbackEvent; + +enum OffloadCallbackEvent : @1.0::OffloadCallbackEvent { + /** + * This event is fired when the quota, applied in setDataWarning, has expired. It is + * recommended that the client query for statistics immediately after receiving this event. + * Note that hardware acceleration must not be stopped upon receiving this event. + */ + OFFLOAD_WARNING_REACHED = 6, +};