Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2022 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | package android.hardware.wifi@1.6; |
| 18 | |
Quang Luong | 5d8805e | 2022-01-28 15:46:40 -0800 | [diff] [blame] | 19 | import @1.0::ChipModeId; |
Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 20 | import @1.0::IWifiIface; |
| 21 | import @1.0::WifiStatus; |
| 22 | import @1.5::WifiBand; |
| 23 | import @1.5::IWifiChip; |
| 24 | import @1.5::WifiIfaceMode; |
| 25 | import IWifiRttController; |
| 26 | |
| 27 | /** |
| 28 | * Interface that represents a chip that must be configured as a single unit. |
| 29 | */ |
| 30 | interface IWifiChip extends @1.5::IWifiChip { |
Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 31 | /** |
Nate Jiang | 6e13599 | 2022-01-24 12:14:23 -0800 | [diff] [blame] | 32 | * Usable Wifi channels filter masks. |
| 33 | */ |
| 34 | enum UsableChannelFilter : @1.5::IWifiChip.UsableChannelFilter { |
| 35 | /** |
| 36 | * Filter Wifi channels that are supported for NAN3.1 Instant communication mode. This |
| 37 | * filter should only be applied to NAN interface. |
| 38 | * - If 5G is supported default discovery channel 149/44 is considered, |
| 39 | * - If 5G is not supported then channel 6 has to be considered. |
| 40 | */ |
| 41 | NAN_INSTANT_MODE = 1 << 2, |
| 42 | }; |
| 43 | |
| 44 | /** |
Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 45 | * Create a RTTController instance. |
| 46 | * |
| 47 | * RTT controller can be either: |
| 48 | * a) Bound to a specific iface by passing in the corresponding |IWifiIface| |
| 49 | * object in |iface| param, OR |
| 50 | * b) Let the implementation decide the iface to use for RTT operations by |
| 51 | * passing null in |iface| param. |
| 52 | * |
| 53 | * @param boundIface HIDL interface object representing the iface if |
| 54 | * the responder must be bound to a specific iface, null otherwise. |
| 55 | * @return status WifiStatus of the operation. |
| 56 | * Possible status codes: |
| 57 | * |WifiStatusCode.SUCCESS|, |
| 58 | * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID| |
| 59 | */ |
| 60 | createRttController_1_6(IWifiIface boundIface) |
| 61 | generates (WifiStatus status, IWifiRttController rtt); |
| 62 | |
| 63 | /** |
| 64 | * Retrieve list of usable Wifi channels for the specified band & |
| 65 | * operational modes. |
| 66 | * |
| 67 | * The list of usable Wifi channels in a given band depends on factors |
| 68 | * like current country code, operational mode (e.g. STA, SAP, WFD-CLI, |
| 69 | * WFD-GO, TDLS, NAN) and other restrictons due to DFS, cellular coexistence |
| 70 | * and conncurency state of the device. |
| 71 | * |
| 72 | * @param band |WifiBand| for which list of usable channels is requested. |
| 73 | * @param ifaceModeMask Bitmask of the modes represented by |WifiIfaceMode| |
| 74 | * Bitmask respresents all the modes that the caller is interested |
| 75 | * in (e.g. STA, SAP, CLI, GO, TDLS, NAN). E.g. If the caller is |
| 76 | * interested in knowing usable channels for P2P CLI, P2P GO & NAN, |
| 77 | * ifaceModeMask would be set to |
| 78 | * IFACE_MODE_P2P_CLIENT|IFACE_MODE_P2P_GO|IFACE_MODE_NAN. |
| 79 | * @param filterMask Bitmask of filters represented by |
| 80 | * |UsableChannelFilter|. Specifies whether driver should filter |
| 81 | * channels based on additional criteria. If no filter is specified |
| 82 | * driver should return usable channels purely based on regulatory |
| 83 | * constraints. |
| 84 | * @return status WifiStatus of the operation. |
| 85 | * Possible status codes: |
| 86 | * |WifiStatusCode.SUCCESS|, |
| 87 | * |WifiStatusCode.ERROR_NOT_SUPPORTED|, |
| 88 | * |WifiStatusCode.ERROR_INVALID_ARGS|, |
| 89 | * |WifiStatusCode.FAILURE_UNKNOWN| |
| 90 | * @return channels List of channels represented by |WifiUsableChannel| |
| 91 | * Each entry represents a channel frequency, bandwidth and |
| 92 | * bitmask of modes (e.g. STA, SAP, CLI, GO, TDLS, NAN) that are |
| 93 | * allowed on that channel. E.g. If only STA mode can be supported |
| 94 | * on an indoor channel, only the IFACE_MODE_STA bit would be set |
| 95 | * for that channel. If 5GHz SAP cannot be supported, then none of |
| 96 | * the 5GHz channels will have IFACE_MODE_SOFTAP bit set. |
| 97 | * Note: Bits do not represent concurrency state. Each bit only |
| 98 | * represents whether particular mode is allowed on that channel. |
| 99 | */ |
| 100 | getUsableChannels_1_6(WifiBand band, bitfield<WifiIfaceMode> ifaceModeMask, |
Nate Jiang | 50c001d | 2022-01-12 16:06:01 -0800 | [diff] [blame] | 101 | bitfield<UsableChannelFilter> filterMask) |
Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 102 | generates (WifiStatus status, vec<WifiUsableChannel> channels); |
Sunil Ravi | ef97d23 | 2022-01-24 10:39:56 -0800 | [diff] [blame] | 103 | |
| 104 | /** |
Quang Luong | 5d8805e | 2022-01-28 15:46:40 -0800 | [diff] [blame] | 105 | * Set of interface concurrency types with the maximum number of interfaces that can have |
| 106 | * one of the specified concurrency types for a given ChipConcurrencyCombination. See |
| 107 | * ChipConcurrencyCombination for examples. |
| 108 | */ |
| 109 | struct ChipConcurrencyCombinationLimit { |
| 110 | // Each IfaceConcurrencyType must occur at most once. |
| 111 | vec<IfaceConcurrencyType> types; |
| 112 | uint32_t maxIfaces; |
| 113 | }; |
| 114 | |
| 115 | /** |
| 116 | * Set of interfaces that can operate concurrently when in a given mode. See |
| 117 | * ChipMode below. |
| 118 | * |
| 119 | * For example: |
| 120 | * [{STA} <= 2] |
| 121 | * At most two STA interfaces are supported |
| 122 | * [], [STA], [STA+STA] |
| 123 | * |
| 124 | * [{STA} <= 1, {NAN} <= 1, {AP_BRIDGED} <= 1] |
| 125 | * Any combination of STA, NAN, AP_BRIDGED |
| 126 | * [], [STA], [NAN], [AP_BRIDGED], [STA+NAN], [STA+AP_BRIDGED], [NAN+AP_BRIDGED], |
| 127 | * [STA+NAN+AP_BRIDGED] |
| 128 | * |
| 129 | * [{STA} <= 1, {NAN,P2P} <= 1] |
| 130 | * Optionally a STA and either NAN or P2P |
| 131 | * [], [STA], [STA+NAN], [STA+P2P], [NAN], [P2P] |
| 132 | * Not included [NAN+P2P], [STA+NAN+P2P] |
| 133 | * |
| 134 | * [{STA} <= 1, {STA,NAN} <= 1] |
| 135 | * Optionally a STA and either a second STA or a NAN |
| 136 | * [], [STA], [STA+NAN], [STA+STA], [NAN] |
| 137 | * Not included [STA+STA+NAN] |
| 138 | */ |
| 139 | struct ChipConcurrencyCombination { |
| 140 | vec<ChipConcurrencyCombinationLimit> limits; |
| 141 | }; |
| 142 | |
| 143 | /** |
| 144 | * A mode that the chip can be put in. A mode defines a set of constraints on |
| 145 | * the interfaces that can exist while in that mode. Modes define a unit of |
| 146 | * configuration where all interfaces must be torn down to switch to a |
| 147 | * different mode. Some HALs may only have a single mode, but an example where |
| 148 | * multiple modes would be required is if a chip has different firmwares with |
| 149 | * different capabilities. |
| 150 | * |
| 151 | * When in a mode, it must be possible to perform any combination of creating |
| 152 | * and removing interfaces as long as at least one of the |
| 153 | * ChipConcurrencyCombinations is satisfied. This means that if a chip has two |
| 154 | * available combinations, [{STA} <= 1] and [{AP_BRIDGED} <= 1] then it is expected |
| 155 | * that exactly one STA type or one AP_BRIDGED type can be created, but it |
| 156 | * is not expected that both a STA and AP_BRIDGED type could be created. If it |
| 157 | * was then there would be a single available combination |
| 158 | * [{STA} <=1, {AP_BRIDGED} <= 1]. |
| 159 | * |
| 160 | * When switching between two available combinations it is expected that |
| 161 | * interfaces only supported by the initial combination must be removed until |
| 162 | * the target combination is also satisfied. At that point new interfaces |
| 163 | * satisfying only the target combination can be added (meaning the initial |
| 164 | * combination limits will no longer satisfied). The addition of these new |
| 165 | * interfaces must not impact the existence of interfaces that satisfy both |
| 166 | * combinations. |
| 167 | * |
| 168 | * For example, a chip with available combinations: |
| 169 | * [{STA} <= 2, {NAN} <=1] and [{STA} <=1, {NAN} <= 1, {AP_BRIDGED} <= 1}] |
| 170 | * If the chip currently has 3 interfaces STA, STA and NAN and wants to add an |
| 171 | * AP_BRIDGED interface in place of one of the STAs then first one of the STA |
| 172 | * interfaces must be removed and then the AP interface can be created after |
| 173 | * the STA had been torn down. During this process the remaining STA and NAN |
| 174 | * interfaces must not be removed/recreated. |
| 175 | * |
| 176 | * If a chip does not support this kind of reconfiguration in this mode then |
| 177 | * the combinations must be separated into two separate modes. Before |
| 178 | * switching modes all interfaces must be torn down, the mode switch must be |
| 179 | * enacted and when it completes the new interfaces must be brought up. |
| 180 | */ |
| 181 | struct ChipMode { |
| 182 | /** |
| 183 | * Id that can be used to put the chip in this mode. |
| 184 | */ |
| 185 | ChipModeId id; |
| 186 | |
| 187 | /** |
| 188 | * A list of the possible interface concurrency type combinations that the chip can have |
| 189 | * while in this mode. |
| 190 | */ |
| 191 | vec<ChipConcurrencyCombination> availableCombinations; |
| 192 | }; |
| 193 | |
| 194 | /** |
| 195 | * Get the set of operation modes that the chip supports. |
| 196 | * |
| 197 | * @return status WifiStatus of the operation. |
| 198 | * Possible status codes: |
| 199 | * |WifiStatusCode.SUCCESS|, |
| 200 | * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID| |
| 201 | * @return modes List of modes supported by the device. |
| 202 | */ |
| 203 | getAvailableModes_1_6() generates (WifiStatus status, vec<ChipMode> modes); |
| 204 | |
| 205 | /** |
Sunil Ravi | ef97d23 | 2022-01-24 10:39:56 -0800 | [diff] [blame] | 206 | * Retrieve the list of all the possible radio combinations supported by this |
| 207 | * chip. |
| 208 | * |
| 209 | * @return status WifiStatus of the operation. |
| 210 | * Possible status codes: |
| 211 | * |WifiStatusCode.SUCCESS|, |
| 212 | * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|, |
| 213 | * |WifiStatusCode.ERROR_NOT_SUPPORTED|, |
| 214 | * |WifiStatusCode.FAILURE_UNKNOWN| |
| 215 | * @return radioCombinationMatrix |
| 216 | * A list of all the possible radio combinations represented by |
| 217 | * |WifiRadioCombinationMatrix|. |
| 218 | * For Example in case of a chip which has two radios, where one radio is |
| 219 | * capable of 2.4GHz 2X2 only and another radio which is capable of either |
| 220 | * 5GHz or 6GHz 2X2, number of possible radio combinations in this case |
| 221 | * are 5 and possible combinations are |
| 222 | * {{{2G 2X2}}, //Standalone 2G |
| 223 | * {{5G 2X2}}, //Standalone 5G |
| 224 | * {{6G 2X2}}, //Standalone 6G |
| 225 | * {{2G 2X2}, {5G 2X2}}, //2G+5G DBS |
| 226 | * {{2G 2X2}, {6G 2X2}}} //2G+6G DBS |
| 227 | * Note: Since this chip doesn’t support 5G+6G simultaneous operation |
| 228 | * as there is only one radio which can support both bands, So it can only |
| 229 | * do MCC 5G+6G. This table should not get populated with possible MCC |
| 230 | * configurations. This is only for simultaneous radio configurations |
| 231 | * (such as standalone, multi band simultaneous or single band simultaneous). |
| 232 | */ |
| 233 | getSupportedRadioCombinationsMatrix() |
| 234 | generates (WifiStatus status, WifiRadioCombinationMatrix radioCombinationMatrix); |
Ahmed ElArabawy | d73b64c | 2022-01-13 09:20:15 -0800 | [diff] [blame] | 235 | }; |