1 #ifndef _MSM_IPA_H_ 2 #define _MSM_IPA_H_ 3 4 #include <stdint.h> 5 #include <stddef.h> 6 #include <sys/stat.h> 7 #include <linux/ioctl.h> 8 #include <linux/types.h> 9 #include <linux/if_ether.h> 10 11 /** 12 * unique magic number of the IPA device 13 */ 14 #define IPA_IOC_MAGIC 0xCF 15 16 /** 17 * IPA device full path 18 */ 19 #define IPA_DEV_NAME "/dev/ipa" 20 21 /** 22 * IPA NAT table character device name 23 */ 24 #define IPA_NAT_DEV_NAME "ipaNatTable" 25 26 /** 27 * IPA IPv6CT table character device name 28 */ 29 #define IPA_IPV6CT_DEV_NAME "ipaIpv6CTTable" 30 31 /** 32 * name of the default routing tables for v4 and v6 33 */ 34 #define IPA_DFLT_RT_TBL_NAME "ipa_dflt_rt" 35 36 /** 37 * commands supported by IPA driver 38 */ 39 #define IPA_IOCTL_ADD_HDR 0 40 #define IPA_IOCTL_DEL_HDR 1 41 #define IPA_IOCTL_ADD_RT_RULE 2 42 #define IPA_IOCTL_DEL_RT_RULE 3 43 #define IPA_IOCTL_ADD_FLT_RULE 4 44 #define IPA_IOCTL_DEL_FLT_RULE 5 45 #define IPA_IOCTL_COMMIT_HDR 6 46 #define IPA_IOCTL_RESET_HDR 7 47 #define IPA_IOCTL_COMMIT_RT 8 48 #define IPA_IOCTL_RESET_RT 9 49 #define IPA_IOCTL_COMMIT_FLT 10 50 #define IPA_IOCTL_RESET_FLT 11 51 #define IPA_IOCTL_DUMP 12 52 #define IPA_IOCTL_GET_RT_TBL 13 53 #define IPA_IOCTL_PUT_RT_TBL 14 54 #define IPA_IOCTL_COPY_HDR 15 55 #define IPA_IOCTL_QUERY_INTF 16 56 #define IPA_IOCTL_QUERY_INTF_TX_PROPS 17 57 #define IPA_IOCTL_QUERY_INTF_RX_PROPS 18 58 #define IPA_IOCTL_GET_HDR 19 59 #define IPA_IOCTL_PUT_HDR 20 60 #define IPA_IOCTL_SET_FLT 21 61 #define IPA_IOCTL_ALLOC_NAT_MEM 22 62 #define IPA_IOCTL_V4_INIT_NAT 23 63 #define IPA_IOCTL_TABLE_DMA_CMD 24 64 #define IPA_IOCTL_NAT_DMA IPA_IOCTL_TABLE_DMA_CMD 65 #define IPA_IOCTL_INIT_IPV6CT_TABLE 25 66 #define IPA_IOCTL_V4_DEL_NAT 26 67 #define IPA_IOCTL_PULL_MSG 27 68 #define IPA_IOCTL_GET_NAT_OFFSET 28 69 #define IPA_IOCTL_RM_ADD_DEPENDENCY 29 70 #define IPA_IOCTL_RM_DEL_DEPENDENCY 30 71 #define IPA_IOCTL_GENERATE_FLT_EQ 31 72 #define IPA_IOCTL_QUERY_INTF_EXT_PROPS 32 73 #define IPA_IOCTL_QUERY_EP_MAPPING 33 74 #define IPA_IOCTL_QUERY_RT_TBL_INDEX 34 75 #define IPA_IOCTL_WRITE_QMAPID 35 76 #define IPA_IOCTL_MDFY_FLT_RULE 36 77 #define IPA_IOCTL_NOTIFY_WAN_UPSTREAM_ROUTE_ADD 37 78 #define IPA_IOCTL_NOTIFY_WAN_UPSTREAM_ROUTE_DEL 38 79 #define IPA_IOCTL_NOTIFY_WAN_EMBMS_CONNECTED 39 80 #define IPA_IOCTL_ADD_HDR_PROC_CTX 40 81 #define IPA_IOCTL_DEL_HDR_PROC_CTX 41 82 #define IPA_IOCTL_MDFY_RT_RULE 42 83 #define IPA_IOCTL_ADD_RT_RULE_AFTER 43 84 #define IPA_IOCTL_ADD_FLT_RULE_AFTER 44 85 #define IPA_IOCTL_GET_HW_VERSION 45 86 #define IPA_IOCTL_ADD_RT_RULE_EXT 46 87 #define IPA_IOCTL_ADD_VLAN_IFACE 47 88 #define IPA_IOCTL_DEL_VLAN_IFACE 48 89 #define IPA_IOCTL_ADD_L2TP_VLAN_MAPPING 49 90 #define IPA_IOCTL_DEL_L2TP_VLAN_MAPPING 50 91 #define IPA_IOCTL_NAT_MODIFY_PDN 51 92 #define IPA_IOCTL_ALLOC_NAT_TABLE 52 93 #define IPA_IOCTL_ALLOC_IPV6CT_TABLE 53 94 #define IPA_IOCTL_DEL_NAT_TABLE 54 95 #define IPA_IOCTL_DEL_IPV6CT_TABLE 55 96 #define IPA_IOCTL_CLEANUP 56 97 #define IPA_IOCTL_QUERY_WLAN_CLIENT 57 98 #define IPA_IOCTL_GET_VLAN_MODE 58 99 100 /** 101 * max size of the header to be inserted 102 */ 103 #define IPA_HDR_MAX_SIZE 64 104 105 /** 106 * max size of the name of the resource (routing table, header) 107 */ 108 #define IPA_RESOURCE_NAME_MAX 32 109 110 /** 111 * max number of interface properties 112 */ 113 #define IPA_NUM_PROPS_MAX 35 114 115 /** 116 * size of the mac address 117 */ 118 #define IPA_MAC_ADDR_SIZE 6 119 120 /** 121 * max number of mbim streams 122 */ 123 #define IPA_MBIM_MAX_STREAM_NUM 8 124 125 /** 126 * size of the ipv6 address 127 */ 128 #define IPA_WAN_MSG_IPv6_ADDR_GW_LEN 4 129 130 /** 131 * max number of lan clients supported per device type 132 * for LAN stats via HW. 133 */ 134 #define IPA_MAX_NUM_HW_PATH_CLIENTS 16 135 136 /** 137 * max number of destination pipes possible for a client. 138 */ 139 #define QMI_IPA_MAX_CLIENT_DST_PIPES 4 140 141 /** 142 * the attributes of the rule (routing or filtering) 143 */ 144 #define IPA_FLT_TOS (1ul << 0) 145 #define IPA_FLT_PROTOCOL (1ul << 1) 146 #define IPA_FLT_SRC_ADDR (1ul << 2) 147 #define IPA_FLT_DST_ADDR (1ul << 3) 148 #define IPA_FLT_SRC_PORT_RANGE (1ul << 4) 149 #define IPA_FLT_DST_PORT_RANGE (1ul << 5) 150 #define IPA_FLT_TYPE (1ul << 6) 151 #define IPA_FLT_CODE (1ul << 7) 152 #define IPA_FLT_SPI (1ul << 8) 153 #define IPA_FLT_SRC_PORT (1ul << 9) 154 #define IPA_FLT_DST_PORT (1ul << 10) 155 #define IPA_FLT_TC (1ul << 11) 156 #define IPA_FLT_FLOW_LABEL (1ul << 12) 157 #define IPA_FLT_NEXT_HDR (1ul << 13) 158 #define IPA_FLT_META_DATA (1ul << 14) 159 #define IPA_FLT_FRAGMENT (1ul << 15) 160 #define IPA_FLT_TOS_MASKED (1ul << 16) 161 #define IPA_FLT_MAC_SRC_ADDR_ETHER_II (1ul << 17) 162 #define IPA_FLT_MAC_DST_ADDR_ETHER_II (1ul << 18) 163 #define IPA_FLT_MAC_SRC_ADDR_802_3 (1ul << 19) 164 #define IPA_FLT_MAC_DST_ADDR_802_3 (1ul << 20) 165 #define IPA_FLT_MAC_ETHER_TYPE (1ul << 21) 166 #define IPA_FLT_MAC_DST_ADDR_L2TP (1ul << 22) 167 #define IPA_FLT_TCP_SYN (1ul << 23) 168 #define IPA_FLT_TCP_SYN_L2TP (1ul << 24) 169 #define IPA_FLT_L2TP_INNER_IP_TYPE (1ul << 25) 170 #define IPA_FLT_L2TP_INNER_IPV4_DST_ADDR (1ul << 26) 171 172 /** 173 * maximal number of NAT PDNs in the PDN config table 174 */ 175 #define IPA_MAX_PDN_NUM 5 176 177 /** 178 * enum ipa_client_type - names for the various IPA "clients" 179 * these are from the perspective of the clients, for e.g. 180 * HSIC1_PROD means HSIC client is the producer and IPA is the 181 * consumer. 182 * PROD clients are always even, and CONS clients are always odd. 183 * Add new clients in the end of the list and update IPA_CLIENT_MAX 184 */ 185 enum ipa_client_type { 186 IPA_CLIENT_HSIC1_PROD = 0, 187 IPA_CLIENT_HSIC1_CONS = 1, 188 189 IPA_CLIENT_HSIC2_PROD = 2, 190 IPA_CLIENT_HSIC2_CONS = 3, 191 192 IPA_CLIENT_HSIC3_PROD = 4, 193 IPA_CLIENT_HSIC3_CONS = 5, 194 195 IPA_CLIENT_HSIC4_PROD = 6, 196 IPA_CLIENT_HSIC4_CONS = 7, 197 198 IPA_CLIENT_HSIC5_PROD = 8, 199 IPA_CLIENT_HSIC5_CONS = 9, 200 201 IPA_CLIENT_WLAN1_PROD = 10, 202 IPA_CLIENT_WLAN1_CONS = 11, 203 204 IPA_CLIENT_A5_WLAN_AMPDU_PROD = 12, 205 IPA_CLIENT_WLAN2_CONS = 13, 206 207 /* RESERVERD PROD = 14, */ 208 IPA_CLIENT_WLAN3_CONS = 15, 209 210 /* RESERVERD PROD = 16, */ 211 IPA_CLIENT_WLAN4_CONS = 17, 212 213 IPA_CLIENT_USB_PROD = 18, 214 IPA_CLIENT_USB_CONS = 19, 215 216 IPA_CLIENT_USB2_PROD = 20, 217 IPA_CLIENT_USB2_CONS = 21, 218 219 IPA_CLIENT_USB3_PROD = 22, 220 IPA_CLIENT_USB3_CONS = 23, 221 222 IPA_CLIENT_USB4_PROD = 24, 223 IPA_CLIENT_USB4_CONS = 25, 224 225 IPA_CLIENT_UC_USB_PROD = 26, 226 IPA_CLIENT_USB_DPL_CONS = 27, 227 228 IPA_CLIENT_A2_EMBEDDED_PROD = 28, 229 IPA_CLIENT_A2_EMBEDDED_CONS = 29, 230 231 IPA_CLIENT_A2_TETHERED_PROD = 30, 232 IPA_CLIENT_A2_TETHERED_CONS = 31, 233 234 IPA_CLIENT_APPS_LAN_PROD = 32, 235 IPA_CLIENT_APPS_LAN_CONS = 33, 236 237 IPA_CLIENT_APPS_WAN_PROD = 34, 238 IPA_CLIENT_APPS_LAN_WAN_PROD = IPA_CLIENT_APPS_WAN_PROD, 239 IPA_CLIENT_APPS_WAN_CONS = 35, 240 241 IPA_CLIENT_APPS_CMD_PROD = 36, 242 IPA_CLIENT_A5_LAN_WAN_CONS = 37, 243 244 IPA_CLIENT_ODU_PROD = 38, 245 IPA_CLIENT_ODU_EMB_CONS = 39, 246 247 /* RESERVERD PROD = 40, */ 248 IPA_CLIENT_ODU_TETH_CONS = 41, 249 250 IPA_CLIENT_MHI_PROD = 42, 251 IPA_CLIENT_MHI_CONS = 43, 252 253 IPA_CLIENT_MEMCPY_DMA_SYNC_PROD = 44, 254 IPA_CLIENT_MEMCPY_DMA_SYNC_CONS = 45, 255 256 IPA_CLIENT_MEMCPY_DMA_ASYNC_PROD = 46, 257 IPA_CLIENT_MEMCPY_DMA_ASYNC_CONS = 47, 258 259 IPA_CLIENT_ETHERNET_PROD = 48, 260 IPA_CLIENT_ETHERNET_CONS = 49, 261 262 IPA_CLIENT_Q6_LAN_PROD = 50, 263 IPA_CLIENT_Q6_LAN_CONS = 51, 264 265 IPA_CLIENT_Q6_WAN_PROD = 52, 266 IPA_CLIENT_Q6_WAN_CONS = 53, 267 268 IPA_CLIENT_Q6_CMD_PROD = 54, 269 IPA_CLIENT_Q6_DUN_CONS = 55, 270 271 IPA_CLIENT_Q6_DECOMP_PROD = 56, 272 IPA_CLIENT_Q6_DECOMP_CONS = 57, 273 274 IPA_CLIENT_Q6_DECOMP2_PROD = 58, 275 IPA_CLIENT_Q6_DECOMP2_CONS = 59, 276 277 /* RESERVERD PROD = 60, */ 278 IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS = 61, 279 280 IPA_CLIENT_TEST_PROD = 62, 281 IPA_CLIENT_TEST_CONS = 63, 282 283 IPA_CLIENT_TEST1_PROD = 64, 284 IPA_CLIENT_TEST1_CONS = 65, 285 286 IPA_CLIENT_TEST2_PROD = 66, 287 IPA_CLIENT_TEST2_CONS = 67, 288 289 IPA_CLIENT_TEST3_PROD = 68, 290 IPA_CLIENT_TEST3_CONS = 69, 291 292 IPA_CLIENT_TEST4_PROD = 70, 293 IPA_CLIENT_TEST4_CONS = 71, 294 295 /* RESERVERD PROD = 72, */ 296 IPA_CLIENT_DUMMY_CONS = 73 297 }; 298 299 #define IPA_CLIENT_MAX (IPA_CLIENT_DUMMY_CONS + 1) 300 301 #define IPA_CLIENT_IS_APPS_CONS(client) \ 302 ((client) == IPA_CLIENT_APPS_LAN_CONS || \ 303 (client) == IPA_CLIENT_APPS_WAN_CONS) 304 305 #define IPA_CLIENT_IS_USB_CONS(client) \ 306 ((client) == IPA_CLIENT_USB_CONS || \ 307 (client) == IPA_CLIENT_USB2_CONS || \ 308 (client) == IPA_CLIENT_USB3_CONS || \ 309 (client) == IPA_CLIENT_USB_DPL_CONS || \ 310 (client) == IPA_CLIENT_USB4_CONS) 311 312 #define IPA_CLIENT_IS_WLAN_CONS(client) \ 313 ((client) == IPA_CLIENT_WLAN1_CONS || \ 314 (client) == IPA_CLIENT_WLAN2_CONS || \ 315 (client) == IPA_CLIENT_WLAN3_CONS || \ 316 (client) == IPA_CLIENT_WLAN4_CONS) 317 318 #define IPA_CLIENT_IS_ODU_CONS(client) \ 319 ((client) == IPA_CLIENT_ODU_EMB_CONS || \ 320 (client) == IPA_CLIENT_ODU_TETH_CONS) 321 322 #define IPA_CLIENT_IS_Q6_CONS(client) \ 323 ((client) == IPA_CLIENT_Q6_LAN_CONS || \ 324 (client) == IPA_CLIENT_Q6_WAN_CONS || \ 325 (client) == IPA_CLIENT_Q6_DUN_CONS || \ 326 (client) == IPA_CLIENT_Q6_DECOMP_CONS || \ 327 (client) == IPA_CLIENT_Q6_DECOMP2_CONS || \ 328 (client) == IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS) 329 330 #define IPA_CLIENT_IS_Q6_PROD(client) \ 331 ((client) == IPA_CLIENT_Q6_LAN_PROD || \ 332 (client) == IPA_CLIENT_Q6_WAN_PROD || \ 333 (client) == IPA_CLIENT_Q6_CMD_PROD || \ 334 (client) == IPA_CLIENT_Q6_DECOMP_PROD || \ 335 (client) == IPA_CLIENT_Q6_DECOMP2_PROD) 336 337 #define IPA_CLIENT_IS_Q6_NON_ZIP_CONS(client) \ 338 ((client) == IPA_CLIENT_Q6_LAN_CONS || \ 339 (client) == IPA_CLIENT_Q6_WAN_CONS || \ 340 (client) == IPA_CLIENT_Q6_DUN_CONS || \ 341 (client) == IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS) 342 343 #define IPA_CLIENT_IS_Q6_ZIP_CONS(client) \ 344 ((client) == IPA_CLIENT_Q6_DECOMP_CONS || \ 345 (client) == IPA_CLIENT_Q6_DECOMP2_CONS) 346 347 #define IPA_CLIENT_IS_Q6_NON_ZIP_PROD(client) \ 348 ((client) == IPA_CLIENT_Q6_LAN_PROD || \ 349 (client) == IPA_CLIENT_Q6_WAN_PROD || \ 350 (client) == IPA_CLIENT_Q6_CMD_PROD) 351 352 #define IPA_CLIENT_IS_Q6_ZIP_PROD(client) \ 353 ((client) == IPA_CLIENT_Q6_DECOMP_PROD || \ 354 (client) == IPA_CLIENT_Q6_DECOMP2_PROD) 355 356 #define IPA_CLIENT_IS_MEMCPY_DMA_CONS(client) \ 357 ((client) == IPA_CLIENT_MEMCPY_DMA_SYNC_CONS || \ 358 (client) == IPA_CLIENT_MEMCPY_DMA_ASYNC_CONS) 359 360 #define IPA_CLIENT_IS_MEMCPY_DMA_PROD(client) \ 361 ((client) == IPA_CLIENT_MEMCPY_DMA_SYNC_PROD || \ 362 (client) == IPA_CLIENT_MEMCPY_DMA_ASYNC_PROD) 363 364 #define IPA_CLIENT_IS_MHI_CONS(client) \ 365 ((client) == IPA_CLIENT_MHI_CONS) 366 367 #define IPA_CLIENT_IS_MHI(client) \ 368 ((client) == IPA_CLIENT_MHI_CONS || \ 369 (client) == IPA_CLIENT_MHI_PROD) 370 371 #define IPA_CLIENT_IS_TEST_PROD(client) \ 372 ((client) == IPA_CLIENT_TEST_PROD || \ 373 (client) == IPA_CLIENT_TEST1_PROD || \ 374 (client) == IPA_CLIENT_TEST2_PROD || \ 375 (client) == IPA_CLIENT_TEST3_PROD || \ 376 (client) == IPA_CLIENT_TEST4_PROD) 377 378 #define IPA_CLIENT_IS_TEST_CONS(client) \ 379 ((client) == IPA_CLIENT_TEST_CONS || \ 380 (client) == IPA_CLIENT_TEST1_CONS || \ 381 (client) == IPA_CLIENT_TEST2_CONS || \ 382 (client) == IPA_CLIENT_TEST3_CONS || \ 383 (client) == IPA_CLIENT_TEST4_CONS) 384 385 #define IPA_CLIENT_IS_TEST(client) \ 386 (IPA_CLIENT_IS_TEST_PROD(client) || IPA_CLIENT_IS_TEST_CONS(client)) 387 388 /** 389 * enum ipa_ip_type - Address family: IPv4 or IPv6 390 */ 391 enum ipa_ip_type { 392 IPA_IP_v4, 393 IPA_IP_v6, 394 IPA_IP_MAX 395 }; 396 397 /** 398 * enum ipa_rule_type - Type of routing or filtering rule 399 * Hashable: Rule will be located at the hashable tables 400 * Non_Hashable: Rule will be located at the non-hashable tables 401 */ 402 enum ipa_rule_type { 403 IPA_RULE_HASHABLE, 404 IPA_RULE_NON_HASHABLE, 405 }; 406 #define IPA_RULE_TYPE_MAX (IPA_RULE_NON_HASHABLE + 1) 407 408 /** 409 * enum ipa_flt_action - action field of filtering rule 410 * 411 * Pass to routing: 5'd0 412 * Pass to source NAT: 5'd1 413 * Pass to destination NAT: 5'd2 414 * Pass to default output pipe (e.g., Apps or Modem): 5'd3 415 */ 416 enum ipa_flt_action { 417 IPA_PASS_TO_ROUTING, 418 IPA_PASS_TO_SRC_NAT, 419 IPA_PASS_TO_DST_NAT, 420 IPA_PASS_TO_EXCEPTION 421 }; 422 423 /** 424 * enum ipa_wlan_event - Events for wlan client 425 * 426 * wlan client connect: New wlan client connected 427 * wlan client disconnect: wlan client disconnected 428 * wlan client power save: wlan client moved to power save 429 * wlan client normal: wlan client moved out of power save 430 * sw routing enable: ipa routing is disabled 431 * sw routing disable: ipa routing is enabled 432 * wlan ap connect: wlan AP(access point) is up 433 * wlan ap disconnect: wlan AP(access point) is down 434 * wlan sta connect: wlan STA(station) is up 435 * wlan sta disconnect: wlan STA(station) is down 436 * wlan client connect ex: new wlan client connected 437 * wlan scc switch: wlan interfaces in scc mode 438 * wlan mcc switch: wlan interfaces in mcc mode 439 * wlan wdi enable: wdi data path completed 440 * wlan wdi disable: wdi data path teardown 441 */ 442 enum ipa_wlan_event { 443 WLAN_CLIENT_CONNECT, 444 WLAN_CLIENT_DISCONNECT, 445 WLAN_CLIENT_POWER_SAVE_MODE, 446 WLAN_CLIENT_NORMAL_MODE, 447 SW_ROUTING_ENABLE, 448 SW_ROUTING_DISABLE, 449 WLAN_AP_CONNECT, 450 WLAN_AP_DISCONNECT, 451 WLAN_STA_CONNECT, 452 WLAN_STA_DISCONNECT, 453 WLAN_CLIENT_CONNECT_EX, 454 WLAN_SWITCH_TO_SCC, 455 WLAN_SWITCH_TO_MCC, 456 WLAN_WDI_ENABLE, 457 WLAN_WDI_DISABLE, 458 IPA_WLAN_EVENT_MAX 459 }; 460 461 /** 462 * enum ipa_wan_event - Events for wan client 463 * 464 * wan default route add/del 465 * wan embms connect: New wan embms interface connected 466 */ 467 enum ipa_wan_event { 468 WAN_UPSTREAM_ROUTE_ADD = IPA_WLAN_EVENT_MAX, 469 WAN_UPSTREAM_ROUTE_DEL, 470 WAN_EMBMS_CONNECT, 471 WAN_XLAT_CONNECT, 472 IPA_WAN_EVENT_MAX 473 }; 474 475 enum ipa_ecm_event { 476 ECM_CONNECT = IPA_WAN_EVENT_MAX, 477 ECM_DISCONNECT, 478 IPA_ECM_EVENT_MAX, 479 }; 480 481 enum ipa_tethering_stats_event { 482 IPA_TETHERING_STATS_UPDATE_STATS = IPA_ECM_EVENT_MAX, 483 IPA_TETHERING_STATS_UPDATE_NETWORK_STATS, 484 IPA_TETHERING_STATS_EVENT_MAX, 485 }; 486 487 488 enum ipa_quota_event { 489 IPA_QUOTA_REACH = IPA_TETHERING_STATS_EVENT_MAX, 490 IPA_QUOTA_EVENT_MAX, 491 }; 492 493 enum ipa_ssr_event { 494 IPA_SSR_BEFORE_SHUTDOWN = IPA_QUOTA_EVENT_MAX, 495 IPA_SSR_AFTER_POWERUP, 496 IPA_SSR_EVENT_MAX 497 }; 498 499 enum ipa_vlan_l2tp_event { 500 ADD_VLAN_IFACE = IPA_SSR_EVENT_MAX, 501 DEL_VLAN_IFACE, 502 ADD_L2TP_VLAN_MAPPING, 503 DEL_L2TP_VLAN_MAPPING, 504 IPA_VLAN_L2TP_EVENT_MAX, 505 }; 506 507 enum ipa_per_client_stats_event { 508 IPA_PER_CLIENT_STATS_CONNECT_EVENT = IPA_VLAN_L2TP_EVENT_MAX, 509 IPA_PER_CLIENT_STATS_DISCONNECT_EVENT, 510 IPA_PER_CLIENT_STATS_EVENT_MAX 511 }; 512 513 enum ipa_wlan_fw_ssr_event { 514 WLAN_FWR_SSR_BEFORE_SHUTDOWN = IPA_PER_CLIENT_STATS_EVENT_MAX, 515 IPA_WLAN_FW_SSR_EVENT_MAX, 516 #define IPA_WLAN_FW_SSR_EVENT_MAX IPA_WLAN_FW_SSR_EVENT_MAX 517 }; 518 519 #define IPA_EVENT_MAX_NUM (IPA_WLAN_FW_SSR_EVENT_MAX) 520 #define IPA_EVENT_MAX ((int)IPA_EVENT_MAX_NUM) 521 522 /** 523 * enum ipa_rm_resource_name - IPA RM clients identification names 524 * 525 * PROD resources are always even, and CONS resources are always odd. 526 * Add new clients in the end of the list and update IPA_RM_RESOURCE_MAX 527 */ 528 enum ipa_rm_resource_name { 529 IPA_RM_RESOURCE_Q6_PROD = 0, 530 IPA_RM_RESOURCE_Q6_CONS = 1, 531 532 IPA_RM_RESOURCE_USB_PROD = 2, 533 IPA_RM_RESOURCE_USB_CONS = 3, 534 535 IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD = 4, 536 IPA_RM_RESOURCE_USB_DPL_CONS = 5, 537 538 IPA_RM_RESOURCE_HSIC_PROD = 6, 539 IPA_RM_RESOURCE_HSIC_CONS = 7, 540 541 IPA_RM_RESOURCE_STD_ECM_PROD = 8, 542 IPA_RM_RESOURCE_APPS_CONS = 9, 543 544 IPA_RM_RESOURCE_RNDIS_PROD = 10, 545 /* RESERVED CONS = 11, */ 546 547 IPA_RM_RESOURCE_WWAN_0_PROD = 12, 548 /* RESERVED CONS = 13, */ 549 550 IPA_RM_RESOURCE_WLAN_PROD = 14, 551 IPA_RM_RESOURCE_WLAN_CONS = 15, 552 553 IPA_RM_RESOURCE_ODU_ADAPT_PROD = 16, 554 IPA_RM_RESOURCE_ODU_ADAPT_CONS = 17, 555 556 IPA_RM_RESOURCE_MHI_PROD = 18, 557 IPA_RM_RESOURCE_MHI_CONS = 19, 558 559 IPA_RM_RESOURCE_ETHERNET_PROD = 20, 560 IPA_RM_RESOURCE_ETHERNET_CONS = 21, 561 }; 562 #define IPA_RM_RESOURCE_MAX (IPA_RM_RESOURCE_ETHERNET_CONS + 1) 563 564 /** 565 * enum ipa_hw_type - IPA hardware version type 566 * @IPA_HW_None: IPA hardware version not defined 567 * @IPA_HW_v1_0: IPA hardware version 1.0 568 * @IPA_HW_v1_1: IPA hardware version 1.1 569 * @IPA_HW_v2_0: IPA hardware version 2.0 570 * @IPA_HW_v2_1: IPA hardware version 2.1 571 * @IPA_HW_v2_5: IPA hardware version 2.5 572 * @IPA_HW_v2_6: IPA hardware version 2.6 573 * @IPA_HW_v2_6L: IPA hardware version 2.6L 574 * @IPA_HW_v3_0: IPA hardware version 3.0 575 * @IPA_HW_v3_1: IPA hardware version 3.1 576 * @IPA_HW_v3_5: IPA hardware version 3.5 577 * @IPA_HW_v3_5_1: IPA hardware version 3.5.1 578 * @IPA_HW_v4_0: IPA hardware version 4.0 579 */ 580 enum ipa_hw_type { 581 IPA_HW_None = 0, 582 IPA_HW_v1_0 = 1, 583 IPA_HW_v1_1 = 2, 584 IPA_HW_v2_0 = 3, 585 IPA_HW_v2_1 = 4, 586 IPA_HW_v2_5 = 5, 587 IPA_HW_v2_6 = IPA_HW_v2_5, 588 IPA_HW_v2_6L = 6, 589 IPA_HW_v3_0 = 10, 590 IPA_HW_v3_1 = 11, 591 IPA_HW_v3_5 = 12, 592 IPA_HW_v3_5_1 = 13, 593 IPA_HW_v4_0 = 14, 594 }; 595 #define IPA_HW_MAX (IPA_HW_v4_0 + 1) 596 597 #define IPA_HW_v4_0 IPA_HW_v4_0 598 599 /** 600 * struct ipa_rule_attrib - attributes of a routing/filtering 601 * rule, all in LE 602 * @attrib_mask: what attributes are valid 603 * @src_port_lo: low port of src port range 604 * @src_port_hi: high port of src port range 605 * @dst_port_lo: low port of dst port range 606 * @dst_port_hi: high port of dst port range 607 * @type: ICMP/IGMP type 608 * @code: ICMP/IGMP code 609 * @spi: IPSec SPI 610 * @src_port: exact src port 611 * @dst_port: exact dst port 612 * @meta_data: meta-data val 613 * @meta_data_mask: meta-data mask 614 * @u.v4.tos: type of service 615 * @u.v4.protocol: protocol 616 * @u.v4.src_addr: src address value 617 * @u.v4.src_addr_mask: src address mask 618 * @u.v4.dst_addr: dst address value 619 * @u.v4.dst_addr_mask: dst address mask 620 * @u.v6.tc: traffic class 621 * @u.v6.flow_label: flow label 622 * @u.v6.next_hdr: next header 623 * @u.v6.src_addr: src address val 624 * @u.v6.src_addr_mask: src address mask 625 * @u.v6.dst_addr: dst address val 626 * @u.v6.dst_addr_mask: dst address mask 627 */ 628 struct ipa_rule_attrib { 629 uint32_t attrib_mask; 630 uint16_t src_port_lo; 631 uint16_t src_port_hi; 632 uint16_t dst_port_lo; 633 uint16_t dst_port_hi; 634 uint8_t type; 635 uint8_t code; 636 uint8_t tos_value; 637 uint8_t tos_mask; 638 uint32_t spi; 639 uint16_t src_port; 640 uint16_t dst_port; 641 uint32_t meta_data; 642 uint32_t meta_data_mask; 643 uint8_t src_mac_addr[ETH_ALEN]; 644 uint8_t src_mac_addr_mask[ETH_ALEN]; 645 uint8_t dst_mac_addr[ETH_ALEN]; 646 uint8_t dst_mac_addr_mask[ETH_ALEN]; 647 uint16_t ether_type; 648 union { 649 struct { 650 uint8_t tos; 651 uint8_t protocol; 652 uint32_t src_addr; 653 uint32_t src_addr_mask; 654 uint32_t dst_addr; 655 uint32_t dst_addr_mask; 656 } v4; 657 struct { 658 uint8_t tc; 659 uint32_t flow_label; 660 uint8_t next_hdr; 661 uint32_t src_addr[4]; 662 uint32_t src_addr_mask[4]; 663 uint32_t dst_addr[4]; 664 uint32_t dst_addr_mask[4]; 665 } v6; 666 } u; 667 }; 668 669 /*! @brief The maximum number of Mask Equal 32 Eqns */ 670 #define IPA_IPFLTR_NUM_MEQ_32_EQNS 2 671 672 /*! @brief The maximum number of IHL offset Mask Equal 32 Eqns */ 673 #define IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS 2 674 675 /*! @brief The maximum number of Mask Equal 128 Eqns */ 676 #define IPA_IPFLTR_NUM_MEQ_128_EQNS 2 677 678 /*! @brief The maximum number of IHL offset Range Check 16 Eqns */ 679 #define IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS 2 680 681 /*! @brief Offset and 16 bit comparison equation */ 682 struct ipa_ipfltr_eq_16 { 683 int8_t offset; 684 uint16_t value; 685 }; 686 687 /*! @brief Offset and 32 bit comparison equation */ 688 struct ipa_ipfltr_eq_32 { 689 int8_t offset; 690 uint32_t value; 691 }; 692 693 /*! @brief Offset and 128 bit masked comparison equation */ 694 struct ipa_ipfltr_mask_eq_128 { 695 int8_t offset; 696 uint8_t mask[16]; 697 uint8_t value[16]; 698 }; 699 700 /*! @brief Offset and 32 bit masked comparison equation */ 701 struct ipa_ipfltr_mask_eq_32 { 702 int8_t offset; 703 uint32_t mask; 704 uint32_t value; 705 }; 706 707 /*! @brief Equation for identifying a range. Ranges are inclusive */ 708 struct ipa_ipfltr_range_eq_16 { 709 int8_t offset; 710 uint16_t range_low; 711 uint16_t range_high; 712 }; 713 714 /*! @brief Rule equations which are set according to DS filter installation */ 715 struct ipa_ipfltri_rule_eq { 716 /*! 16-bit Bitmask to indicate how many eqs are valid in this rule */ 717 uint16_t rule_eq_bitmap; 718 /*! Specifies if a type of service check rule is present */ 719 uint8_t tos_eq_present; 720 /*! The value to check against the type of service (ipv4) field */ 721 uint8_t tos_eq; 722 /*! Specifies if a protocol check rule is present */ 723 uint8_t protocol_eq_present; 724 /*! The value to check against the protocol (ipv6) field */ 725 uint8_t protocol_eq; 726 /*! The number of ip header length offset 16 bit range check 727 * rules in this rule 728 */ 729 uint8_t num_ihl_offset_range_16; 730 /*! An array of the registered ip header length offset 16 bit 731 * range check rules 732 */ 733 struct ipa_ipfltr_range_eq_16 734 ihl_offset_range_16[IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS]; 735 /*! The number of mask equal 32 rules present in this rule */ 736 uint8_t num_offset_meq_32; 737 /*! An array of all the possible mask equal 32 rules in this rule */ 738 struct ipa_ipfltr_mask_eq_32 739 offset_meq_32[IPA_IPFLTR_NUM_MEQ_32_EQNS]; 740 /*! Specifies if the traffic class rule is present in this rule */ 741 uint8_t tc_eq_present; 742 /*! The value to check the traffic class (ipv4) field against */ 743 uint8_t tc_eq; 744 /*! Specifies if the flow equals rule is present in this rule */ 745 uint8_t fl_eq_present; 746 /*! The value to check the flow (ipv6) field against */ 747 uint32_t fl_eq; 748 /*! The number of ip header length offset 16 bit equations in this 749 * rule 750 */ 751 uint8_t ihl_offset_eq_16_present; 752 /*! The ip header length offset 16 bit equation */ 753 struct ipa_ipfltr_eq_16 ihl_offset_eq_16; 754 /*! The number of ip header length offset 32 bit equations in this 755 * rule 756 */ 757 uint8_t ihl_offset_eq_32_present; 758 /*! The ip header length offset 32 bit equation */ 759 struct ipa_ipfltr_eq_32 ihl_offset_eq_32; 760 /*! The number of ip header length offset 32 bit mask equations in 761 * this rule 762 */ 763 uint8_t num_ihl_offset_meq_32; 764 /*! The ip header length offset 32 bit mask equation */ 765 struct ipa_ipfltr_mask_eq_32 766 ihl_offset_meq_32[IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS]; 767 /*! The number of ip header length offset 128 bit equations in this 768 * rule 769 */ 770 uint8_t num_offset_meq_128; 771 /*! The ip header length offset 128 bit equation */ 772 struct ipa_ipfltr_mask_eq_128 773 offset_meq_128[IPA_IPFLTR_NUM_MEQ_128_EQNS]; 774 /*! The metadata 32 bit masked comparison equation present or not */ 775 /* Metadata based rules are added internally by IPA driver */ 776 uint8_t metadata_meq32_present; 777 /*! The metadata 32 bit masked comparison equation */ 778 struct ipa_ipfltr_mask_eq_32 metadata_meq32; 779 /*! Specifies if the Fragment equation is present in this rule */ 780 uint8_t ipv4_frag_eq_present; 781 }; 782 783 /** 784 * struct ipa_flt_rule - attributes of a filtering rule 785 * @retain_hdr: bool switch to instruct IPA core to add back to the packet 786 * the header removed as part of header removal 787 * @to_uc: bool switch to pass packet to micro-controller 788 * @action: action field 789 * @rt_tbl_hdl: handle of table from "get" 790 * @attrib: attributes of the rule 791 * @eq_attrib: attributes of the rule in equation form (valid when 792 * eq_attrib_type is true) 793 * @rt_tbl_idx: index of RT table referred to by filter rule (valid when 794 * eq_attrib_type is true and non-exception action) 795 * @eq_attrib_type: true if equation level form used to specify attributes 796 * @max_prio: bool switch. is this rule with Max priority? meaning on rule hit, 797 * IPA will use the rule and will not look for other rules that may have 798 * higher priority 799 * @hashable: bool switch. is this rule hashable or not? 800 * ipa uses hashable rules to cache their hit results to be used in 801 * consecutive packets 802 * @rule_id: rule_id to be assigned to the filter rule. In case client specifies 803 * rule_id as 0 the driver will assign a new rule_id 804 * @set_metadata: bool switch. should metadata replacement at the NAT block 805 * take place? 806 * @pdn_idx: if action is "pass to source\destination NAT" then a comparison 807 * against the PDN index in the matching PDN entry will take place as an 808 * additional condition for NAT hit. 809 */ 810 struct ipa_flt_rule { 811 uint8_t retain_hdr; 812 uint8_t to_uc; 813 enum ipa_flt_action action; 814 uint32_t rt_tbl_hdl; 815 struct ipa_rule_attrib attrib; 816 struct ipa_ipfltri_rule_eq eq_attrib; 817 uint32_t rt_tbl_idx; 818 uint8_t eq_attrib_type; 819 uint8_t max_prio; 820 uint8_t hashable; 821 uint16_t rule_id; 822 uint8_t set_metadata; 823 uint8_t pdn_idx; 824 }; 825 826 /** 827 * enum ipa_hdr_l2_type - L2 header type 828 * IPA_HDR_L2_NONE: L2 header which isn't Ethernet II and isn't 802_3 829 * IPA_HDR_L2_ETHERNET_II: L2 header of type Ethernet II 830 * IPA_HDR_L2_802_3: L2 header of type 802_3 831 * IPA_HDR_L2_802_1Q: L2 header of type 802_1Q 832 */ 833 enum ipa_hdr_l2_type { 834 IPA_HDR_L2_NONE, 835 IPA_HDR_L2_ETHERNET_II, 836 IPA_HDR_L2_802_3, 837 IPA_HDR_L2_802_1Q, 838 }; 839 #define IPA_HDR_L2_MAX (IPA_HDR_L2_802_1Q + 1) 840 841 #define IPA_HDR_L2_802_1Q IPA_HDR_L2_802_1Q 842 843 /** 844 * enum ipa_hdr_l2_type - Processing context type 845 * IPA_HDR_PROC_NONE: No processing context 846 * IPA_HDR_PROC_ETHII_TO_ETHII: Process Ethernet II to Ethernet II 847 * IPA_HDR_PROC_ETHII_TO_802_3: Process Ethernet II to 802_3 848 * IPA_HDR_PROC_802_3_TO_ETHII: Process 802_3 to Ethernet II 849 * IPA_HDR_PROC_802_3_TO_802_3: Process 802_3 to 802_3 850 */ 851 enum ipa_hdr_proc_type { 852 IPA_HDR_PROC_NONE, 853 IPA_HDR_PROC_ETHII_TO_ETHII, 854 IPA_HDR_PROC_ETHII_TO_802_3, 855 IPA_HDR_PROC_802_3_TO_ETHII, 856 IPA_HDR_PROC_802_3_TO_802_3, 857 IPA_HDR_PROC_L2TP_HEADER_ADD, 858 IPA_HDR_PROC_L2TP_HEADER_REMOVE 859 }; 860 #define IPA_HDR_PROC_MAX (IPA_HDR_PROC_L2TP_HEADER_REMOVE + 1) 861 862 /** 863 * struct ipa_rt_rule - attributes of a routing rule 864 * @dst: dst "client" 865 * @hdr_hdl: handle to the dynamic header 866 it is not an index or an offset 867 * @hdr_proc_ctx_hdl: handle to header processing context. if it is provided 868 hdr_hdl shall be 0 869 * @attrib: attributes of the rule 870 * @max_prio: bool switch. is this rule with Max priority? meaning on rule hit, 871 * IPA will use the rule and will not look for other rules that may have 872 * higher priority 873 * @hashable: bool switch. is this rule hashable or not? 874 * ipa uses hashable rules to cache their hit results to be used in 875 * consecutive packets 876 * @retain_hdr: bool switch to instruct IPA core to add back to the packet 877 * the header removed as part of header removal 878 */ 879 struct ipa_rt_rule { 880 enum ipa_client_type dst; 881 uint32_t hdr_hdl; 882 uint32_t hdr_proc_ctx_hdl; 883 struct ipa_rule_attrib attrib; 884 uint8_t max_prio; 885 uint8_t hashable; 886 uint8_t retain_hdr; 887 }; 888 889 /** 890 * struct ipa_hdr_add - header descriptor includes in and out 891 * parameters 892 * @name: name of the header 893 * @hdr: actual header to be inserted 894 * @hdr_len: size of above header 895 * @type: l2 header type 896 * @is_partial: header not fully specified 897 * @hdr_hdl: out parameter, handle to header, valid when status is 0 898 * @status: out parameter, status of header add operation, 899 * 0 for success, 900 * -1 for failure 901 * @is_eth2_ofst_valid: is eth2_ofst field valid? 902 * @eth2_ofst: offset to start of Ethernet-II/802.3 header 903 */ 904 struct ipa_hdr_add { 905 char name[IPA_RESOURCE_NAME_MAX]; 906 uint8_t hdr[IPA_HDR_MAX_SIZE]; 907 uint8_t hdr_len; 908 enum ipa_hdr_l2_type type; 909 uint8_t is_partial; 910 uint32_t hdr_hdl; 911 int status; 912 uint8_t is_eth2_ofst_valid; 913 uint16_t eth2_ofst; 914 }; 915 916 /** 917 * struct ipa_ioc_add_hdr - header addition parameters (support 918 * multiple headers and commit) 919 * @commit: should headers be written to IPA HW also? 920 * @num_hdrs: num of headers that follow 921 * @ipa_hdr_add hdr: all headers need to go here back to 922 * back, no pointers 923 */ 924 struct ipa_ioc_add_hdr { 925 uint8_t commit; 926 uint8_t num_hdrs; 927 struct ipa_hdr_add hdr[0]; 928 }; 929 930 /** 931 * struct ipa_l2tp_header_add_procparams - 932 * @eth_hdr_retained: Specifies if Ethernet header is retained or not 933 * @input_ip_version: Specifies if Input header is IPV4(0) or IPV6(1) 934 * @output_ip_version: Specifies if template header is IPV4(0) or IPV6(1) 935 */ 936 struct ipa_l2tp_header_add_procparams { 937 uint32_t eth_hdr_retained:1; 938 uint32_t input_ip_version:1; 939 uint32_t output_ip_version:1; 940 uint32_t reserved:29; 941 }; 942 943 /** 944 * struct ipa_l2tp_header_remove_procparams - 945 * @hdr_len_remove: Specifies how much of the header needs to 946 be removed in bytes 947 * @eth_hdr_retained: Specifies if Ethernet header is retained or not 948 * @hdr_ofst_pkt_size_valid: Specifies if the Header offset is valid 949 * @hdr_ofst_pkt_size: If hdr_ofst_pkt_size_valid =1, this indicates where the 950 packet size field (2bytes) resides 951 * @hdr_endianness: 0:little endian, 1:big endian 952 */ 953 struct ipa_l2tp_header_remove_procparams { 954 uint32_t hdr_len_remove:8; 955 uint32_t eth_hdr_retained:1; 956 /* Following fields are valid if eth_hdr_retained =1 ( bridge mode) */ 957 uint32_t hdr_ofst_pkt_size_valid:1; 958 uint32_t hdr_ofst_pkt_size:6; 959 uint32_t hdr_endianness:1; 960 uint32_t reserved:15; 961 }; 962 963 /** 964 * struct ipa_l2tp_hdr_proc_ctx_params - 965 * @hdr_add_param: parameters for header add 966 * @hdr_remove_param: parameters for header remove 967 * @is_dst_pipe_valid: if dst pipe is valid 968 * @dst_pipe: destination pipe 969 */ 970 struct ipa_l2tp_hdr_proc_ctx_params { 971 struct ipa_l2tp_header_add_procparams hdr_add_param; 972 struct ipa_l2tp_header_remove_procparams hdr_remove_param; 973 uint8_t is_dst_pipe_valid; 974 enum ipa_client_type dst_pipe; 975 }; 976 977 #define L2TP_USER_SPACE_SPECIFY_DST_PIPE 978 979 /** 980 * struct ipa_hdr_proc_ctx_add - processing context descriptor includes 981 * in and out parameters 982 * @type: processing context type 983 * @hdr_hdl: in parameter, handle to header 984 * @l2tp_params: l2tp parameters 985 * @proc_ctx_hdl: out parameter, handle to proc_ctx, valid when status is 0 986 * @status: out parameter, status of header add operation, 987 * 0 for success, 988 * -1 for failure 989 */ 990 struct ipa_hdr_proc_ctx_add { 991 enum ipa_hdr_proc_type type; 992 uint32_t hdr_hdl; 993 uint32_t proc_ctx_hdl; 994 int status; 995 struct ipa_l2tp_hdr_proc_ctx_params l2tp_params; 996 }; 997 998 #define IPA_L2TP_HDR_PROC_SUPPORT 999 1000 /** 1001 * struct ipa_ioc_add_hdr - processing context addition parameters (support 1002 * multiple processing context and commit) 1003 * @commit: should processing context be written to IPA HW also? 1004 * @num_proc_ctxs: num of processing context that follow 1005 * @proc_ctx: all processing context need to go here back to 1006 * back, no pointers 1007 */ 1008 struct ipa_ioc_add_hdr_proc_ctx { 1009 uint8_t commit; 1010 uint8_t num_proc_ctxs; 1011 struct ipa_hdr_proc_ctx_add proc_ctx[0]; 1012 }; 1013 1014 /** 1015 * struct ipa_ioc_copy_hdr - retrieve a copy of the specified 1016 * header - caller can then derive the complete header 1017 * @name: name of the header resource 1018 * @hdr: out parameter, contents of specified header, 1019 * valid only when ioctl return val is non-negative 1020 * @hdr_len: out parameter, size of above header 1021 * valid only when ioctl return val is non-negative 1022 * @type: l2 header type 1023 * valid only when ioctl return val is non-negative 1024 * @is_partial: out parameter, indicates whether specified header is partial 1025 * valid only when ioctl return val is non-negative 1026 * @is_eth2_ofst_valid: is eth2_ofst field valid? 1027 * @eth2_ofst: offset to start of Ethernet-II/802.3 header 1028 */ 1029 struct ipa_ioc_copy_hdr { 1030 char name[IPA_RESOURCE_NAME_MAX]; 1031 uint8_t hdr[IPA_HDR_MAX_SIZE]; 1032 uint8_t hdr_len; 1033 enum ipa_hdr_l2_type type; 1034 uint8_t is_partial; 1035 uint8_t is_eth2_ofst_valid; 1036 uint16_t eth2_ofst; 1037 }; 1038 1039 /** 1040 * struct ipa_ioc_get_hdr - header entry lookup parameters, if lookup was 1041 * successful caller must call put to release the reference count when done 1042 * @name: name of the header resource 1043 * @hdl: out parameter, handle of header entry 1044 * valid only when ioctl return val is non-negative 1045 */ 1046 struct ipa_ioc_get_hdr { 1047 char name[IPA_RESOURCE_NAME_MAX]; 1048 uint32_t hdl; 1049 }; 1050 1051 /** 1052 * struct ipa_hdr_del - header descriptor includes in and out 1053 * parameters 1054 * 1055 * @hdl: handle returned from header add operation 1056 * @status: out parameter, status of header remove operation, 1057 * 0 for success, 1058 * -1 for failure 1059 */ 1060 struct ipa_hdr_del { 1061 uint32_t hdl; 1062 int status; 1063 }; 1064 1065 /** 1066 * struct ipa_ioc_del_hdr - header deletion parameters (support 1067 * multiple headers and commit) 1068 * @commit: should headers be removed from IPA HW also? 1069 * @num_hdls: num of headers being removed 1070 * @ipa_hdr_del hdl: all handles need to go here back to back, no pointers 1071 */ 1072 struct ipa_ioc_del_hdr { 1073 uint8_t commit; 1074 uint8_t num_hdls; 1075 struct ipa_hdr_del hdl[0]; 1076 }; 1077 1078 /** 1079 * struct ipa_hdr_proc_ctx_del - processing context descriptor includes 1080 * in and out parameters 1081 * @hdl: handle returned from processing context add operation 1082 * @status: out parameter, status of header remove operation, 1083 * 0 for success, 1084 * -1 for failure 1085 */ 1086 struct ipa_hdr_proc_ctx_del { 1087 uint32_t hdl; 1088 int status; 1089 }; 1090 1091 /** 1092 * ipa_ioc_del_hdr_proc_ctx - processing context deletion parameters (support 1093 * multiple headers and commit) 1094 * @commit: should processing contexts be removed from IPA HW also? 1095 * @num_hdls: num of processing contexts being removed 1096 * @ipa_hdr_proc_ctx_del hdl: all handles need to go here back to back, 1097 * no pointers 1098 */ 1099 struct ipa_ioc_del_hdr_proc_ctx { 1100 uint8_t commit; 1101 uint8_t num_hdls; 1102 struct ipa_hdr_proc_ctx_del hdl[0]; 1103 }; 1104 1105 /** 1106 * struct ipa_rt_rule_add - routing rule descriptor includes in 1107 * and out parameters 1108 * @rule: actual rule to be added 1109 * @at_rear: add at back of routing table, it is NOT possible to add rules at 1110 * the rear of the "default" routing tables 1111 * @rt_rule_hdl: output parameter, handle to rule, valid when status is 0 1112 * @status: output parameter, status of routing rule add operation, 1113 * 0 for success, 1114 * -1 for failure 1115 */ 1116 struct ipa_rt_rule_add { 1117 struct ipa_rt_rule rule; 1118 uint8_t at_rear; 1119 uint32_t rt_rule_hdl; 1120 int status; 1121 }; 1122 1123 /** 1124 * struct ipa_ioc_add_rt_rule - routing rule addition parameters (supports 1125 * multiple rules and commit); 1126 * 1127 * all rules MUST be added to same table 1128 * @commit: should rules be written to IPA HW also? 1129 * @ip: IP family of rule 1130 * @rt_tbl_name: name of routing table resource 1131 * @num_rules: number of routing rules that follow 1132 * @ipa_rt_rule_add rules: all rules need to go back to back here, no pointers 1133 */ 1134 struct ipa_ioc_add_rt_rule { 1135 uint8_t commit; 1136 enum ipa_ip_type ip; 1137 char rt_tbl_name[IPA_RESOURCE_NAME_MAX]; 1138 uint8_t num_rules; 1139 struct ipa_rt_rule_add rules[0]; 1140 }; 1141 1142 /** 1143 * struct ipa_ioc_add_rt_rule_after - routing rule addition after a specific 1144 * rule parameters(supports multiple rules and commit); 1145 * 1146 * all rules MUST be added to same table 1147 * @commit: should rules be written to IPA HW also? 1148 * @ip: IP family of rule 1149 * @rt_tbl_name: name of routing table resource 1150 * @num_rules: number of routing rules that follow 1151 * @add_after_hdl: the rules will be added after this specific rule 1152 * @ipa_rt_rule_add rules: all rules need to go back to back here, no pointers 1153 * at_rear field will be ignored when using this IOCTL 1154 */ 1155 struct ipa_ioc_add_rt_rule_after { 1156 uint8_t commit; 1157 enum ipa_ip_type ip; 1158 char rt_tbl_name[IPA_RESOURCE_NAME_MAX]; 1159 uint8_t num_rules; 1160 uint32_t add_after_hdl; 1161 struct ipa_rt_rule_add rules[0]; 1162 }; 1163 1164 /** 1165 * struct ipa_rt_rule_mdfy - routing rule descriptor includes 1166 * in and out parameters 1167 * @rule: actual rule to be added 1168 * @rt_rule_hdl: handle to rule which supposed to modify 1169 * @status: output parameter, status of routing rule modify operation, 1170 * 0 for success, 1171 * -1 for failure 1172 * 1173 */ 1174 struct ipa_rt_rule_mdfy { 1175 struct ipa_rt_rule rule; 1176 uint32_t rt_rule_hdl; 1177 int status; 1178 }; 1179 1180 /** 1181 * struct ipa_ioc_mdfy_rt_rule - routing rule modify parameters (supports 1182 * multiple rules and commit) 1183 * @commit: should rules be written to IPA HW also? 1184 * @ip: IP family of rule 1185 * @num_rules: number of routing rules that follow 1186 * @rules: all rules need to go back to back here, no pointers 1187 */ 1188 struct ipa_ioc_mdfy_rt_rule { 1189 uint8_t commit; 1190 enum ipa_ip_type ip; 1191 uint8_t num_rules; 1192 struct ipa_rt_rule_mdfy rules[0]; 1193 }; 1194 1195 /** 1196 * struct ipa_rt_rule_del - routing rule descriptor includes in 1197 * and out parameters 1198 * @hdl: handle returned from route rule add operation 1199 * @status: output parameter, status of route rule delete operation, 1200 * 0 for success, 1201 * -1 for failure 1202 */ 1203 struct ipa_rt_rule_del { 1204 uint32_t hdl; 1205 int status; 1206 }; 1207 1208 /** 1209 * struct ipa_rt_rule_add_ext - routing rule descriptor includes in 1210 * and out parameters 1211 * @rule: actual rule to be added 1212 * @at_rear: add at back of routing table, it is NOT possible to add rules at 1213 * the rear of the "default" routing tables 1214 * @rt_rule_hdl: output parameter, handle to rule, valid when status is 0 1215 * @status: output parameter, status of routing rule add operation, 1216 * @rule_id: rule_id to be assigned to the routing rule. In case client 1217 * specifies rule_id as 0 the driver will assign a new rule_id 1218 * 0 for success, 1219 * -1 for failure 1220 */ 1221 struct ipa_rt_rule_add_ext { 1222 struct ipa_rt_rule rule; 1223 uint8_t at_rear; 1224 uint32_t rt_rule_hdl; 1225 int status; 1226 uint16_t rule_id; 1227 }; 1228 1229 /** 1230 * struct ipa_ioc_add_rt_rule - routing rule addition parameters (supports 1231 * multiple rules and commit with rule_id); 1232 * 1233 * all rules MUST be added to same table 1234 * @commit: should rules be written to IPA HW also? 1235 * @ip: IP family of rule 1236 * @rt_tbl_name: name of routing table resource 1237 * @num_rules: number of routing rules that follow 1238 * @ipa_rt_rule_add_ext rules: all rules need to go back to back here, 1239 * no pointers 1240 */ 1241 struct ipa_ioc_add_rt_rule_ext { 1242 uint8_t commit; 1243 enum ipa_ip_type ip; 1244 char rt_tbl_name[IPA_RESOURCE_NAME_MAX]; 1245 uint8_t num_rules; 1246 struct ipa_rt_rule_add_ext rules[0]; 1247 }; 1248 1249 1250 /** 1251 * struct ipa_ioc_del_rt_rule - routing rule deletion parameters (supports 1252 * multiple headers and commit) 1253 * @commit: should rules be removed from IPA HW also? 1254 * @ip: IP family of rules 1255 * @num_hdls: num of rules being removed 1256 * @ipa_rt_rule_del hdl: all handles need to go back to back here, no pointers 1257 */ 1258 struct ipa_ioc_del_rt_rule { 1259 uint8_t commit; 1260 enum ipa_ip_type ip; 1261 uint8_t num_hdls; 1262 struct ipa_rt_rule_del hdl[0]; 1263 }; 1264 1265 /** 1266 * struct ipa_ioc_get_rt_tbl_indx - routing table index lookup parameters 1267 * @ip: IP family of table 1268 * @name: name of routing table resource 1269 * @index: output parameter, routing table index, valid only when ioctl 1270 * return val is non-negative 1271 */ 1272 struct ipa_ioc_get_rt_tbl_indx { 1273 enum ipa_ip_type ip; 1274 char name[IPA_RESOURCE_NAME_MAX]; 1275 uint32_t idx; 1276 }; 1277 1278 /** 1279 * struct ipa_flt_rule_add - filtering rule descriptor includes 1280 * in and out parameters 1281 * @rule: actual rule to be added 1282 * @at_rear: add at back of filtering table? 1283 * @flt_rule_hdl: out parameter, handle to rule, valid when status is 0 1284 * @status: output parameter, status of filtering rule add operation, 1285 * 0 for success, 1286 * -1 for failure 1287 * 1288 */ 1289 struct ipa_flt_rule_add { 1290 struct ipa_flt_rule rule; 1291 uint8_t at_rear; 1292 uint32_t flt_rule_hdl; 1293 int status; 1294 }; 1295 1296 /** 1297 * struct ipa_ioc_add_flt_rule - filtering rule addition parameters (supports 1298 * multiple rules and commit) 1299 * all rules MUST be added to same table 1300 * @commit: should rules be written to IPA HW also? 1301 * @ip: IP family of rule 1302 * @ep: which "clients" pipe does this rule apply to? 1303 * valid only when global is 0 1304 * @global: does this apply to global filter table of specific IP family 1305 * @num_rules: number of filtering rules that follow 1306 * @rules: all rules need to go back to back here, no pointers 1307 */ 1308 struct ipa_ioc_add_flt_rule { 1309 uint8_t commit; 1310 enum ipa_ip_type ip; 1311 enum ipa_client_type ep; 1312 uint8_t global; 1313 uint8_t num_rules; 1314 struct ipa_flt_rule_add rules[0]; 1315 }; 1316 1317 /** 1318 * struct ipa_ioc_add_flt_rule_after - filtering rule addition after specific 1319 * rule parameters (supports multiple rules and commit) 1320 * all rules MUST be added to same table 1321 * @commit: should rules be written to IPA HW also? 1322 * @ip: IP family of rule 1323 * @ep: which "clients" pipe does this rule apply to? 1324 * @num_rules: number of filtering rules that follow 1325 * @add_after_hdl: rules will be added after the rule with this handle 1326 * @rules: all rules need to go back to back here, no pointers. at rear field 1327 * is ignored when using this IOCTL 1328 */ 1329 struct ipa_ioc_add_flt_rule_after { 1330 uint8_t commit; 1331 enum ipa_ip_type ip; 1332 enum ipa_client_type ep; 1333 uint8_t num_rules; 1334 uint32_t add_after_hdl; 1335 struct ipa_flt_rule_add rules[0]; 1336 }; 1337 1338 /** 1339 * struct ipa_flt_rule_mdfy - filtering rule descriptor includes 1340 * in and out parameters 1341 * @rule: actual rule to be added 1342 * @flt_rule_hdl: handle to rule 1343 * @status: output parameter, status of filtering rule modify operation, 1344 * 0 for success, 1345 * -1 for failure 1346 * 1347 */ 1348 struct ipa_flt_rule_mdfy { 1349 struct ipa_flt_rule rule; 1350 uint32_t rule_hdl; 1351 int status; 1352 }; 1353 1354 /** 1355 * struct ipa_ioc_mdfy_flt_rule - filtering rule modify parameters (supports 1356 * multiple rules and commit) 1357 * @commit: should rules be written to IPA HW also? 1358 * @ip: IP family of rule 1359 * @num_rules: number of filtering rules that follow 1360 * @rules: all rules need to go back to back here, no pointers 1361 */ 1362 struct ipa_ioc_mdfy_flt_rule { 1363 uint8_t commit; 1364 enum ipa_ip_type ip; 1365 uint8_t num_rules; 1366 struct ipa_flt_rule_mdfy rules[0]; 1367 }; 1368 1369 /** 1370 * struct ipa_flt_rule_del - filtering rule descriptor includes 1371 * in and out parameters 1372 * 1373 * @hdl: handle returned from filtering rule add operation 1374 * @status: output parameter, status of filtering rule delete operation, 1375 * 0 for success, 1376 * -1 for failure 1377 */ 1378 struct ipa_flt_rule_del { 1379 uint32_t hdl; 1380 int status; 1381 }; 1382 1383 /** 1384 * struct ipa_ioc_del_flt_rule - filtering rule deletion parameters (supports 1385 * multiple headers and commit) 1386 * @commit: should rules be removed from IPA HW also? 1387 * @ip: IP family of rules 1388 * @num_hdls: num of rules being removed 1389 * @hdl: all handles need to go back to back here, no pointers 1390 */ 1391 struct ipa_ioc_del_flt_rule { 1392 uint8_t commit; 1393 enum ipa_ip_type ip; 1394 uint8_t num_hdls; 1395 struct ipa_flt_rule_del hdl[0]; 1396 }; 1397 1398 /** 1399 * struct ipa_ioc_get_rt_tbl - routing table lookup parameters, if lookup was 1400 * successful caller must call put to release the reference 1401 * count when done 1402 * @ip: IP family of table 1403 * @name: name of routing table resource 1404 * @htl: output parameter, handle of routing table, valid only when ioctl 1405 * return val is non-negative 1406 */ 1407 struct ipa_ioc_get_rt_tbl { 1408 enum ipa_ip_type ip; 1409 char name[IPA_RESOURCE_NAME_MAX]; 1410 uint32_t hdl; 1411 }; 1412 1413 /** 1414 * struct ipa_ioc_query_intf - used to lookup number of tx and 1415 * rx properties of interface 1416 * @name: name of interface 1417 * @num_tx_props: output parameter, number of tx properties 1418 * valid only when ioctl return val is non-negative 1419 * @num_rx_props: output parameter, number of rx properties 1420 * valid only when ioctl return val is non-negative 1421 * @num_ext_props: output parameter, number of ext properties 1422 * valid only when ioctl return val is non-negative 1423 * @excp_pipe: exception packets of this interface should be 1424 * routed to this pipe 1425 */ 1426 struct ipa_ioc_query_intf { 1427 char name[IPA_RESOURCE_NAME_MAX]; 1428 uint32_t num_tx_props; 1429 uint32_t num_rx_props; 1430 uint32_t num_ext_props; 1431 enum ipa_client_type excp_pipe; 1432 }; 1433 1434 /** 1435 * struct ipa_ioc_tx_intf_prop - interface tx property 1436 * @ip: IP family of routing rule 1437 * @attrib: routing rule 1438 * @dst_pipe: routing output pipe 1439 * @alt_dst_pipe: alternate routing output pipe 1440 * @hdr_name: name of associated header if any, empty string when no header 1441 * @hdr_l2_type: type of associated header if any, use NONE when no header 1442 */ 1443 struct ipa_ioc_tx_intf_prop { 1444 enum ipa_ip_type ip; 1445 struct ipa_rule_attrib attrib; 1446 enum ipa_client_type dst_pipe; 1447 enum ipa_client_type alt_dst_pipe; 1448 char hdr_name[IPA_RESOURCE_NAME_MAX]; 1449 enum ipa_hdr_l2_type hdr_l2_type; 1450 }; 1451 1452 /** 1453 * struct ipa_ioc_query_intf_tx_props - interface tx propertie 1454 * @name: name of interface 1455 * @num_tx_props: number of TX properties 1456 * @tx[0]: output parameter, the tx properties go here back to back 1457 */ 1458 struct ipa_ioc_query_intf_tx_props { 1459 char name[IPA_RESOURCE_NAME_MAX]; 1460 uint32_t num_tx_props; 1461 struct ipa_ioc_tx_intf_prop tx[0]; 1462 }; 1463 1464 /** 1465 * struct ipa_ioc_ext_intf_prop - interface extended property 1466 * @ip: IP family of routing rule 1467 * @eq_attrib: attributes of the rule in equation form 1468 * @action: action field 1469 * @rt_tbl_idx: index of RT table referred to by filter rule 1470 * @mux_id: MUX_ID 1471 * @filter_hdl: handle of filter (as specified by provider of filter rule) 1472 * @is_xlat_rule: it is xlat flt rule or not 1473 */ 1474 struct ipa_ioc_ext_intf_prop { 1475 enum ipa_ip_type ip; 1476 struct ipa_ipfltri_rule_eq eq_attrib; 1477 enum ipa_flt_action action; 1478 uint32_t rt_tbl_idx; 1479 uint8_t mux_id; 1480 uint32_t filter_hdl; 1481 uint8_t is_xlat_rule; 1482 uint32_t rule_id; 1483 uint8_t is_rule_hashable; 1484 }; 1485 1486 /** 1487 * struct ipa_ioc_query_intf_ext_props - interface ext propertie 1488 * @name: name of interface 1489 * @num_ext_props: number of EXT properties 1490 * @ext[0]: output parameter, the ext properties go here back to back 1491 */ 1492 struct ipa_ioc_query_intf_ext_props { 1493 char name[IPA_RESOURCE_NAME_MAX]; 1494 uint32_t num_ext_props; 1495 struct ipa_ioc_ext_intf_prop ext[0]; 1496 }; 1497 1498 /** 1499 * struct ipa_ioc_rx_intf_prop - interface rx property 1500 * @ip: IP family of filtering rule 1501 * @attrib: filtering rule 1502 * @src_pipe: input pipe 1503 * @hdr_l2_type: type of associated header if any, use NONE when no header 1504 */ 1505 struct ipa_ioc_rx_intf_prop { 1506 enum ipa_ip_type ip; 1507 struct ipa_rule_attrib attrib; 1508 enum ipa_client_type src_pipe; 1509 enum ipa_hdr_l2_type hdr_l2_type; 1510 }; 1511 1512 /** 1513 * struct ipa_ioc_query_intf_rx_props - interface rx propertie 1514 * @name: name of interface 1515 * @num_rx_props: number of RX properties 1516 * @rx: output parameter, the rx properties go here back to back 1517 */ 1518 struct ipa_ioc_query_intf_rx_props { 1519 char name[IPA_RESOURCE_NAME_MAX]; 1520 uint32_t num_rx_props; 1521 struct ipa_ioc_rx_intf_prop rx[0]; 1522 }; 1523 1524 /** 1525 * struct ipa_ioc_nat_alloc_mem - nat table memory allocation 1526 * properties 1527 * @dev_name: input parameter, the name of table 1528 * @size: input parameter, size of table in bytes 1529 * @offset: output parameter, offset into page in case of system memory 1530 */ 1531 struct ipa_ioc_nat_alloc_mem { 1532 char dev_name[IPA_RESOURCE_NAME_MAX]; 1533 size_t size; 1534 off_t offset; 1535 }; 1536 1537 /** 1538 * struct ipa_ioc_nat_ipv6ct_table_alloc - NAT/IPv6CT table memory allocation 1539 * properties 1540 * @size: input parameter, size of table in bytes 1541 * @offset: output parameter, offset into page in case of system memory 1542 */ 1543 struct ipa_ioc_nat_ipv6ct_table_alloc { 1544 size_t size; 1545 off_t offset; 1546 }; 1547 1548 /** 1549 * struct ipa_ioc_v4_nat_init - nat table initialization parameters 1550 * @tbl_index: input parameter, index of the table 1551 * @ipv4_rules_offset: input parameter, ipv4 rules address offset 1552 * @expn_rules_offset: input parameter, ipv4 expansion rules address offset 1553 * @index_offset: input parameter, index rules offset 1554 * @index_expn_offset: input parameter, index expansion rules offset 1555 * @table_entries: input parameter, ipv4 rules table number of entries 1556 * @expn_table_entries: input parameter, ipv4 expansion rules table number of 1557 * entries 1558 * @ip_addr: input parameter, public ip address 1559 */ 1560 struct ipa_ioc_v4_nat_init { 1561 uint8_t tbl_index; 1562 uint32_t ipv4_rules_offset; 1563 uint32_t expn_rules_offset; 1564 1565 uint32_t index_offset; 1566 uint32_t index_expn_offset; 1567 1568 uint16_t table_entries; 1569 uint16_t expn_table_entries; 1570 uint32_t ip_addr; 1571 }; 1572 1573 /** 1574 * struct ipa_ioc_ipv6ct_init - IPv6CT table initialization parameters 1575 * @base_table_offset: input parameter, IPv6CT base table address offset 1576 * @expn_table_offset: input parameter, IPv6CT expansion table address offset 1577 * @table_entries: input parameter, IPv6CT table number of entries 1578 * @expn_table_entries: input parameter, IPv6CT expansion table number of 1579 * entries 1580 * @tbl_index: input parameter, index of the table 1581 */ 1582 struct ipa_ioc_ipv6ct_init { 1583 uint32_t base_table_offset; 1584 uint32_t expn_table_offset; 1585 uint16_t table_entries; 1586 uint16_t expn_table_entries; 1587 uint8_t tbl_index; 1588 }; 1589 1590 /** 1591 * struct ipa_ioc_v4_nat_del - nat table delete parameter 1592 * @table_index: input parameter, index of the table 1593 * @public_ip_addr: input parameter, public ip address 1594 */ 1595 struct ipa_ioc_v4_nat_del { 1596 uint8_t table_index; 1597 uint32_t public_ip_addr; 1598 }; 1599 1600 /** 1601 * struct ipa_ioc_nat_ipv6ct_table_del - NAT/IPv6CT table delete parameter 1602 * @table_index: input parameter, index of the table 1603 */ 1604 struct ipa_ioc_nat_ipv6ct_table_del { 1605 uint8_t table_index; 1606 }; 1607 1608 /** 1609 * struct ipa_ioc_nat_dma_one - nat/ipv6ct dma command parameter 1610 * @table_index: input parameter, index of the table 1611 * @base_addr: type of table, from which the base address of the table 1612 * can be inferred 1613 * @offset: destination offset within the NAT table 1614 * @data: data to be written. 1615 */ 1616 struct ipa_ioc_nat_dma_one { 1617 uint8_t table_index; 1618 uint8_t base_addr; 1619 1620 uint32_t offset; 1621 uint16_t data; 1622 1623 }; 1624 1625 /** 1626 * struct ipa_ioc_nat_dma_cmd - To hold multiple nat/ipv6ct dma commands 1627 * @entries: number of dma commands in use 1628 * @dma: data pointer to the dma commands 1629 */ 1630 struct ipa_ioc_nat_dma_cmd { 1631 uint8_t entries; 1632 struct ipa_ioc_nat_dma_one dma[0]; 1633 1634 }; 1635 1636 /** 1637 * struct ipa_ioc_nat_pdn_entry - PDN entry modification data 1638 * @pdn_index: index of the entry in the PDN config table to be changed 1639 * @public_ip: PDN's public ip 1640 * @src_metadata: PDN's source NAT metadata for metadata replacement 1641 * @dst_metadata: PDN's destination NAT metadata for metadata replacement 1642 */ 1643 struct ipa_ioc_nat_pdn_entry { 1644 uint8_t pdn_index; 1645 uint32_t public_ip; 1646 uint32_t src_metadata; 1647 uint32_t dst_metadata; 1648 }; 1649 1650 /** 1651 * struct ipa_ioc_vlan_iface_info - add vlan interface 1652 * @name: interface name 1653 * @vlan_id: VLAN ID 1654 */ 1655 struct ipa_ioc_vlan_iface_info { 1656 char name[IPA_RESOURCE_NAME_MAX]; 1657 uint8_t vlan_id; 1658 }; 1659 1660 /** 1661 * struct ipa_ioc_l2tp_vlan_mapping_info - l2tp->vlan mapping info 1662 * @iptype: l2tp tunnel IP type 1663 * @l2tp_iface_name: l2tp interface name 1664 * @l2tp_session_id: l2tp session id 1665 * @vlan_iface_name: vlan interface name 1666 */ 1667 struct ipa_ioc_l2tp_vlan_mapping_info { 1668 enum ipa_ip_type iptype; 1669 char l2tp_iface_name[IPA_RESOURCE_NAME_MAX]; 1670 uint8_t l2tp_session_id; 1671 char vlan_iface_name[IPA_RESOURCE_NAME_MAX]; 1672 }; 1673 1674 /** 1675 * struct ipa_msg_meta - Format of the message meta-data. 1676 * @msg_type: the type of the message 1677 * @rsvd: reserved bits for future use. 1678 * @msg_len: the length of the message in bytes 1679 * 1680 * For push model: 1681 * Client in user-space should issue a read on the device (/dev/ipa) with a 1682 * sufficiently large buffer in a continuous loop, call will block when there is 1683 * no message to read. Upon return, client can read the ipa_msg_meta from start 1684 * of buffer to find out type and length of message 1685 * size of buffer supplied >= (size of largest message + size of metadata) 1686 * 1687 * For pull model: 1688 * Client in user-space can also issue a pull msg IOCTL to device (/dev/ipa) 1689 * with a payload containing space for the ipa_msg_meta and the message specific 1690 * payload length. 1691 * size of buffer supplied == (len of specific message + size of metadata) 1692 */ 1693 struct ipa_msg_meta { 1694 uint8_t msg_type; 1695 uint8_t rsvd; 1696 uint16_t msg_len; 1697 }; 1698 1699 /** 1700 * struct ipa_wlan_msg - To hold information about wlan client 1701 * @name: name of the wlan interface 1702 * @mac_addr: mac address of wlan client 1703 * 1704 * wlan drivers need to pass name of wlan iface and mac address of 1705 * wlan client along with ipa_wlan_event, whenever a wlan client is 1706 * connected/disconnected/moved to power save/come out of power save 1707 */ 1708 struct ipa_wlan_msg { 1709 char name[IPA_RESOURCE_NAME_MAX]; 1710 uint8_t mac_addr[IPA_MAC_ADDR_SIZE]; 1711 }; 1712 1713 /** 1714 * enum ipa_wlan_hdr_attrib_type - attribute type 1715 * in wlan client header 1716 * 1717 * WLAN_HDR_ATTRIB_MAC_ADDR: attrib type mac address 1718 * WLAN_HDR_ATTRIB_STA_ID: attrib type station id 1719 */ 1720 enum ipa_wlan_hdr_attrib_type { 1721 WLAN_HDR_ATTRIB_MAC_ADDR, 1722 WLAN_HDR_ATTRIB_STA_ID 1723 }; 1724 1725 /** 1726 * struct ipa_wlan_hdr_attrib_val - header attribute value 1727 * @attrib_type: type of attribute 1728 * @offset: offset of attribute within header 1729 * @u.mac_addr: mac address 1730 * @u.sta_id: station id 1731 */ 1732 struct ipa_wlan_hdr_attrib_val { 1733 enum ipa_wlan_hdr_attrib_type attrib_type; 1734 uint8_t offset; 1735 union { 1736 uint8_t mac_addr[IPA_MAC_ADDR_SIZE]; 1737 uint8_t sta_id; 1738 } u; 1739 }; 1740 1741 /** 1742 * struct ipa_wlan_msg_ex - To hold information about wlan client 1743 * @name: name of the wlan interface 1744 * @num_of_attribs: number of attributes 1745 * @attrib_val: holds attribute values 1746 * 1747 * wlan drivers need to pass name of wlan iface and mac address 1748 * of wlan client or station id along with ipa_wlan_event, 1749 * whenever a wlan client is connected/disconnected/moved to 1750 * power save/come out of power save 1751 */ 1752 struct ipa_wlan_msg_ex { 1753 char name[IPA_RESOURCE_NAME_MAX]; 1754 uint8_t num_of_attribs; 1755 struct ipa_wlan_hdr_attrib_val attribs[0]; 1756 }; 1757 1758 struct ipa_ecm_msg { 1759 char name[IPA_RESOURCE_NAME_MAX]; 1760 int ifindex; 1761 }; 1762 1763 /** 1764 * struct ipa_wan_msg - To hold information about wan client 1765 * @name: name of the wan interface 1766 * 1767 * CnE need to pass the name of default wan iface when connected/disconnected. 1768 * CNE need to pass the gw info in wlan AP+STA mode. 1769 * netmgr need to pass the name of wan eMBMS iface when connected. 1770 */ 1771 struct ipa_wan_msg { 1772 char upstream_ifname[IPA_RESOURCE_NAME_MAX]; 1773 char tethered_ifname[IPA_RESOURCE_NAME_MAX]; 1774 enum ipa_ip_type ip; 1775 uint32_t ipv4_addr_gw; 1776 uint32_t ipv6_addr_gw[IPA_WAN_MSG_IPv6_ADDR_GW_LEN]; 1777 }; 1778 1779 /** 1780 * struct ipa_ioc_rm_dependency - parameters for add/delete dependency 1781 * @resource_name: name of dependent resource 1782 * @depends_on_name: name of its dependency 1783 */ 1784 struct ipa_ioc_rm_dependency { 1785 enum ipa_rm_resource_name resource_name; 1786 enum ipa_rm_resource_name depends_on_name; 1787 }; 1788 1789 struct ipa_ioc_generate_flt_eq { 1790 enum ipa_ip_type ip; 1791 struct ipa_rule_attrib attrib; 1792 struct ipa_ipfltri_rule_eq eq_attrib; 1793 }; 1794 1795 /** 1796 * struct ipa_ioc_write_qmapid - to write mux id to endpoint meta register 1797 * @mux_id: mux id of wan 1798 */ 1799 struct ipa_ioc_write_qmapid { 1800 enum ipa_client_type client; 1801 uint8_t qmap_id; 1802 }; 1803 1804 enum ipacm_client_enum { 1805 IPACM_CLIENT_USB = 1, 1806 IPACM_CLIENT_WLAN, 1807 IPACM_CLIENT_MAX 1808 }; 1809 1810 enum ipacm_per_client_device_type { 1811 IPACM_CLIENT_DEVICE_TYPE_USB = 0, 1812 IPACM_CLIENT_DEVICE_TYPE_WLAN = 1, 1813 IPACM_CLIENT_DEVICE_TYPE_ETH = 2 1814 }; 1815 1816 /** 1817 * max number of device types supported. 1818 */ 1819 #define IPACM_MAX_CLIENT_DEVICE_TYPES 3 1820 1821 /** 1822 * @lanIface - Name of the lan interface 1823 * @mac: Mac address of the client. 1824 */ 1825 struct ipa_lan_client_msg { 1826 char lanIface[IPA_RESOURCE_NAME_MAX]; 1827 uint8_t mac[IPA_MAC_ADDR_SIZE]; 1828 }; 1829 1830 /** 1831 * struct ipa_lan_client - lan client data 1832 * @mac: MAC Address of the client. 1833 * @client_idx: Client Index. 1834 * @inited: Bool to indicate whether client info is set. 1835 */ 1836 struct ipa_lan_client { 1837 uint8_t mac[IPA_MAC_ADDR_SIZE]; 1838 int8_t client_idx; 1839 uint8_t inited; 1840 }; 1841 1842 /** 1843 * struct ipa_tether_device_info - tether device info indicated from IPACM 1844 * @ul_src_pipe: Source pipe of the lan client. 1845 * @hdr_len: Header length of the client. 1846 * @num_clients: Number of clients connected. 1847 */ 1848 struct ipa_tether_device_info { 1849 int32_t ul_src_pipe; 1850 uint8_t hdr_len; 1851 uint32_t num_clients; 1852 struct ipa_lan_client lan_client[IPA_MAX_NUM_HW_PATH_CLIENTS]; 1853 }; 1854 1855 /** 1856 * enum ipa_vlan_ifaces - vlan interfaces types 1857 */ 1858 enum ipa_vlan_ifaces { 1859 IPA_VLAN_IF_ETH, 1860 IPA_VLAN_IF_RNDIS, 1861 IPA_VLAN_IF_ECM 1862 }; 1863 1864 #define IPA_VLAN_IF_EMAC IPA_VLAN_IF_ETH 1865 #define IPA_VLAN_IF_MAX (IPA_VLAN_IF_ECM + 1) 1866 1867 /** 1868 * struct ipa_get_vlan_mode - get vlan mode of a Lan interface 1869 * @iface: Lan interface type to be queried. 1870 * @is_vlan_mode: output parameter, is interface in vlan mode, valid only when 1871 * ioctl return val is non-negative 1872 */ 1873 struct ipa_ioc_get_vlan_mode { 1874 enum ipa_vlan_ifaces iface; 1875 uint32_t is_vlan_mode; 1876 }; 1877 1878 /** 1879 * actual IOCTLs supported by IPA driver 1880 */ 1881 #define IPA_IOC_ADD_HDR _IOWR(IPA_IOC_MAGIC, \ 1882 IPA_IOCTL_ADD_HDR, \ 1883 struct ipa_ioc_add_hdr *) 1884 #define IPA_IOC_DEL_HDR _IOWR(IPA_IOC_MAGIC, \ 1885 IPA_IOCTL_DEL_HDR, \ 1886 struct ipa_ioc_del_hdr *) 1887 #define IPA_IOC_ADD_RT_RULE _IOWR(IPA_IOC_MAGIC, \ 1888 IPA_IOCTL_ADD_RT_RULE, \ 1889 struct ipa_ioc_add_rt_rule *) 1890 #define IPA_IOC_ADD_RT_RULE_EXT _IOWR(IPA_IOC_MAGIC, \ 1891 IPA_IOCTL_ADD_RT_RULE_EXT, \ 1892 struct ipa_ioc_add_rt_rule_ext *) 1893 #define IPA_IOC_ADD_RT_RULE_AFTER _IOWR(IPA_IOC_MAGIC, \ 1894 IPA_IOCTL_ADD_RT_RULE_AFTER, \ 1895 struct ipa_ioc_add_rt_rule_after *) 1896 #define IPA_IOC_DEL_RT_RULE _IOWR(IPA_IOC_MAGIC, \ 1897 IPA_IOCTL_DEL_RT_RULE, \ 1898 struct ipa_ioc_del_rt_rule *) 1899 #define IPA_IOC_ADD_FLT_RULE _IOWR(IPA_IOC_MAGIC, \ 1900 IPA_IOCTL_ADD_FLT_RULE, \ 1901 struct ipa_ioc_add_flt_rule *) 1902 #define IPA_IOC_ADD_FLT_RULE_AFTER _IOWR(IPA_IOC_MAGIC, \ 1903 IPA_IOCTL_ADD_FLT_RULE_AFTER, \ 1904 struct ipa_ioc_add_flt_rule_after *) 1905 #define IPA_IOC_DEL_FLT_RULE _IOWR(IPA_IOC_MAGIC, \ 1906 IPA_IOCTL_DEL_FLT_RULE, \ 1907 struct ipa_ioc_del_flt_rule *) 1908 #define IPA_IOC_COMMIT_HDR _IO(IPA_IOC_MAGIC,\ 1909 IPA_IOCTL_COMMIT_HDR) 1910 #define IPA_IOC_RESET_HDR _IO(IPA_IOC_MAGIC,\ 1911 IPA_IOCTL_RESET_HDR) 1912 #define IPA_IOC_COMMIT_RT _IOW(IPA_IOC_MAGIC, \ 1913 IPA_IOCTL_COMMIT_RT, \ 1914 enum ipa_ip_type) 1915 #define IPA_IOC_RESET_RT _IOW(IPA_IOC_MAGIC, \ 1916 IPA_IOCTL_RESET_RT, \ 1917 enum ipa_ip_type) 1918 #define IPA_IOC_COMMIT_FLT _IOW(IPA_IOC_MAGIC, \ 1919 IPA_IOCTL_COMMIT_FLT, \ 1920 enum ipa_ip_type) 1921 #define IPA_IOC_RESET_FLT _IOW(IPA_IOC_MAGIC, \ 1922 IPA_IOCTL_RESET_FLT, \ 1923 enum ipa_ip_type) 1924 #define IPA_IOC_DUMP _IO(IPA_IOC_MAGIC, \ 1925 IPA_IOCTL_DUMP) 1926 #define IPA_IOC_GET_RT_TBL _IOWR(IPA_IOC_MAGIC, \ 1927 IPA_IOCTL_GET_RT_TBL, \ 1928 struct ipa_ioc_get_rt_tbl *) 1929 #define IPA_IOC_PUT_RT_TBL _IOW(IPA_IOC_MAGIC, \ 1930 IPA_IOCTL_PUT_RT_TBL, \ 1931 uint32_t) 1932 #define IPA_IOC_COPY_HDR _IOWR(IPA_IOC_MAGIC, \ 1933 IPA_IOCTL_COPY_HDR, \ 1934 struct ipa_ioc_copy_hdr *) 1935 #define IPA_IOC_QUERY_INTF _IOWR(IPA_IOC_MAGIC, \ 1936 IPA_IOCTL_QUERY_INTF, \ 1937 struct ipa_ioc_query_intf *) 1938 #define IPA_IOC_QUERY_INTF_TX_PROPS _IOWR(IPA_IOC_MAGIC, \ 1939 IPA_IOCTL_QUERY_INTF_TX_PROPS, \ 1940 struct ipa_ioc_query_intf_tx_props *) 1941 #define IPA_IOC_QUERY_INTF_RX_PROPS _IOWR(IPA_IOC_MAGIC, \ 1942 IPA_IOCTL_QUERY_INTF_RX_PROPS, \ 1943 struct ipa_ioc_query_intf_rx_props *) 1944 #define IPA_IOC_QUERY_INTF_EXT_PROPS _IOWR(IPA_IOC_MAGIC, \ 1945 IPA_IOCTL_QUERY_INTF_EXT_PROPS, \ 1946 struct ipa_ioc_query_intf_ext_props *) 1947 #define IPA_IOC_GET_HDR _IOWR(IPA_IOC_MAGIC, \ 1948 IPA_IOCTL_GET_HDR, \ 1949 struct ipa_ioc_get_hdr *) 1950 #define IPA_IOC_PUT_HDR _IOW(IPA_IOC_MAGIC, \ 1951 IPA_IOCTL_PUT_HDR, \ 1952 uint32_t) 1953 #define IPA_IOC_ALLOC_NAT_MEM _IOWR(IPA_IOC_MAGIC, \ 1954 IPA_IOCTL_ALLOC_NAT_MEM, \ 1955 struct ipa_ioc_nat_alloc_mem *) 1956 #define IPA_IOC_ALLOC_NAT_TABLE _IOWR(IPA_IOC_MAGIC, \ 1957 IPA_IOCTL_ALLOC_NAT_TABLE, \ 1958 struct ipa_ioc_nat_ipv6ct_table_alloc *) 1959 #define IPA_IOC_ALLOC_IPV6CT_TABLE _IOWR(IPA_IOC_MAGIC, \ 1960 IPA_IOCTL_ALLOC_IPV6CT_TABLE, \ 1961 struct ipa_ioc_nat_ipv6ct_table_alloc *) 1962 #define IPA_IOC_V4_INIT_NAT _IOWR(IPA_IOC_MAGIC, \ 1963 IPA_IOCTL_V4_INIT_NAT, \ 1964 struct ipa_ioc_v4_nat_init *) 1965 #define IPA_IOC_INIT_IPV6CT_TABLE _IOWR(IPA_IOC_MAGIC, \ 1966 IPA_IOCTL_INIT_IPV6CT_TABLE, \ 1967 struct ipa_ioc_ipv6ct_init *) 1968 #define IPA_IOC_NAT_DMA _IOWR(IPA_IOC_MAGIC, \ 1969 IPA_IOCTL_NAT_DMA, \ 1970 struct ipa_ioc_nat_dma_cmd *) 1971 #define IPA_IOC_TABLE_DMA_CMD _IOWR(IPA_IOC_MAGIC, \ 1972 IPA_IOCTL_TABLE_DMA_CMD, \ 1973 struct ipa_ioc_nat_dma_cmd *) 1974 #define IPA_IOC_V4_DEL_NAT _IOWR(IPA_IOC_MAGIC, \ 1975 IPA_IOCTL_V4_DEL_NAT, \ 1976 struct ipa_ioc_v4_nat_del *) 1977 #define IPA_IOC_DEL_NAT_TABLE _IOWR(IPA_IOC_MAGIC, \ 1978 IPA_IOCTL_DEL_NAT_TABLE, \ 1979 struct ipa_ioc_nat_ipv6ct_table_del *) 1980 #define IPA_IOC_DEL_IPV6CT_TABLE _IOWR(IPA_IOC_MAGIC, \ 1981 IPA_IOCTL_DEL_IPV6CT_TABLE, \ 1982 struct ipa_ioc_nat_ipv6ct_table_del *) 1983 #define IPA_IOC_GET_NAT_OFFSET _IOWR(IPA_IOC_MAGIC, \ 1984 IPA_IOCTL_GET_NAT_OFFSET, \ 1985 uint32_t *) 1986 #define IPA_IOC_NAT_MODIFY_PDN _IOWR(IPA_IOC_MAGIC, \ 1987 IPA_IOCTL_NAT_MODIFY_PDN, \ 1988 struct ipa_ioc_nat_pdn_entry *) 1989 #define IPA_IOC_SET_FLT _IOW(IPA_IOC_MAGIC, \ 1990 IPA_IOCTL_SET_FLT, \ 1991 uint32_t) 1992 #define IPA_IOC_PULL_MSG _IOWR(IPA_IOC_MAGIC, \ 1993 IPA_IOCTL_PULL_MSG, \ 1994 struct ipa_msg_meta *) 1995 #define IPA_IOC_RM_ADD_DEPENDENCY _IOWR(IPA_IOC_MAGIC, \ 1996 IPA_IOCTL_RM_ADD_DEPENDENCY, \ 1997 struct ipa_ioc_rm_dependency *) 1998 #define IPA_IOC_RM_DEL_DEPENDENCY _IOWR(IPA_IOC_MAGIC, \ 1999 IPA_IOCTL_RM_DEL_DEPENDENCY, \ 2000 struct ipa_ioc_rm_dependency *) 2001 #define IPA_IOC_GENERATE_FLT_EQ _IOWR(IPA_IOC_MAGIC, \ 2002 IPA_IOCTL_GENERATE_FLT_EQ, \ 2003 struct ipa_ioc_generate_flt_eq *) 2004 #define IPA_IOC_QUERY_EP_MAPPING _IOR(IPA_IOC_MAGIC, \ 2005 IPA_IOCTL_QUERY_EP_MAPPING, \ 2006 uint32_t) 2007 #define IPA_IOC_QUERY_RT_TBL_INDEX _IOWR(IPA_IOC_MAGIC, \ 2008 IPA_IOCTL_QUERY_RT_TBL_INDEX, \ 2009 struct ipa_ioc_get_rt_tbl_indx *) 2010 #define IPA_IOC_WRITE_QMAPID _IOWR(IPA_IOC_MAGIC, \ 2011 IPA_IOCTL_WRITE_QMAPID, \ 2012 struct ipa_ioc_write_qmapid *) 2013 #define IPA_IOC_MDFY_FLT_RULE _IOWR(IPA_IOC_MAGIC, \ 2014 IPA_IOCTL_MDFY_FLT_RULE, \ 2015 struct ipa_ioc_mdfy_flt_rule *) 2016 #define IPA_IOC_MDFY_RT_RULE _IOWR(IPA_IOC_MAGIC, \ 2017 IPA_IOCTL_MDFY_RT_RULE, \ 2018 struct ipa_ioc_mdfy_rt_rule *) 2019 2020 #define IPA_IOC_NOTIFY_WAN_UPSTREAM_ROUTE_ADD _IOWR(IPA_IOC_MAGIC, \ 2021 IPA_IOCTL_NOTIFY_WAN_UPSTREAM_ROUTE_ADD, \ 2022 struct ipa_wan_msg *) 2023 2024 #define IPA_IOC_NOTIFY_WAN_UPSTREAM_ROUTE_DEL _IOWR(IPA_IOC_MAGIC, \ 2025 IPA_IOCTL_NOTIFY_WAN_UPSTREAM_ROUTE_DEL, \ 2026 struct ipa_wan_msg *) 2027 #define IPA_IOC_NOTIFY_WAN_EMBMS_CONNECTED _IOWR(IPA_IOC_MAGIC, \ 2028 IPA_IOCTL_NOTIFY_WAN_EMBMS_CONNECTED, \ 2029 struct ipa_wan_msg *) 2030 #define IPA_IOC_ADD_HDR_PROC_CTX _IOWR(IPA_IOC_MAGIC, \ 2031 IPA_IOCTL_ADD_HDR_PROC_CTX, \ 2032 struct ipa_ioc_add_hdr_proc_ctx *) 2033 #define IPA_IOC_DEL_HDR_PROC_CTX _IOWR(IPA_IOC_MAGIC, \ 2034 IPA_IOCTL_DEL_HDR_PROC_CTX, \ 2035 struct ipa_ioc_del_hdr_proc_ctx *) 2036 2037 #define IPA_IOC_GET_HW_VERSION _IOWR(IPA_IOC_MAGIC, \ 2038 IPA_IOCTL_GET_HW_VERSION, \ 2039 enum ipa_hw_type *) 2040 2041 #define IPA_IOC_ADD_VLAN_IFACE _IOWR(IPA_IOC_MAGIC, \ 2042 IPA_IOCTL_ADD_VLAN_IFACE, \ 2043 struct ipa_ioc_vlan_iface_info *) 2044 2045 #define IPA_IOC_DEL_VLAN_IFACE _IOWR(IPA_IOC_MAGIC, \ 2046 IPA_IOCTL_DEL_VLAN_IFACE, \ 2047 struct ipa_ioc_vlan_iface_info *) 2048 2049 #define IPA_IOC_ADD_L2TP_VLAN_MAPPING _IOWR(IPA_IOC_MAGIC, \ 2050 IPA_IOCTL_ADD_L2TP_VLAN_MAPPING, \ 2051 struct ipa_ioc_l2tp_vlan_mapping_info *) 2052 2053 #define IPA_IOC_DEL_L2TP_VLAN_MAPPING _IOWR(IPA_IOC_MAGIC, \ 2054 IPA_IOCTL_DEL_L2TP_VLAN_MAPPING, \ 2055 struct ipa_ioc_l2tp_vlan_mapping_info *) 2056 #define IPA_IOC_CLEANUP _IO(IPA_IOC_MAGIC,\ 2057 IPA_IOCTL_CLEANUP) 2058 #define IPA_IOC_QUERY_WLAN_CLIENT _IO(IPA_IOC_MAGIC,\ 2059 IPA_IOCTL_QUERY_WLAN_CLIENT) 2060 #define IPA_IOC_GET_VLAN_MODE _IOWR(IPA_IOC_MAGIC, \ 2061 IPA_IOCTL_GET_VLAN_MODE, \ 2062 struct ipa_ioc_get_vlan_mode *) 2063 /* 2064 * unique magic number of the Tethering bridge ioctls 2065 */ 2066 #define TETH_BRIDGE_IOC_MAGIC 0xCE 2067 2068 /* 2069 * Ioctls supported by Tethering bridge driver 2070 */ 2071 #define TETH_BRIDGE_IOCTL_SET_BRIDGE_MODE 0 2072 #define TETH_BRIDGE_IOCTL_SET_AGGR_PARAMS 1 2073 #define TETH_BRIDGE_IOCTL_GET_AGGR_PARAMS 2 2074 #define TETH_BRIDGE_IOCTL_GET_AGGR_CAPABILITIES 3 2075 #define TETH_BRIDGE_IOCTL_MAX 4 2076 2077 2078 /** 2079 * enum teth_link_protocol_type - link protocol (IP / Ethernet) 2080 */ 2081 enum teth_link_protocol_type { 2082 TETH_LINK_PROTOCOL_IP, 2083 TETH_LINK_PROTOCOL_ETHERNET, 2084 TETH_LINK_PROTOCOL_MAX, 2085 }; 2086 2087 /** 2088 * enum teth_aggr_protocol_type - Aggregation protocol (MBIM / TLP) 2089 */ 2090 enum teth_aggr_protocol_type { 2091 TETH_AGGR_PROTOCOL_NONE, 2092 TETH_AGGR_PROTOCOL_MBIM, 2093 TETH_AGGR_PROTOCOL_TLP, 2094 TETH_AGGR_PROTOCOL_MAX, 2095 }; 2096 2097 /** 2098 * struct teth_aggr_params_link - Aggregation parameters for uplink/downlink 2099 * @aggr_prot: Aggregation protocol (MBIM / TLP) 2100 * @max_transfer_size_byte: Maximal size of aggregated packet in bytes. 2101 * Default value is 16*1024. 2102 * @max_datagrams: Maximal number of IP packets in an aggregated 2103 * packet. Default value is 16 2104 */ 2105 struct teth_aggr_params_link { 2106 enum teth_aggr_protocol_type aggr_prot; 2107 uint32_t max_transfer_size_byte; 2108 uint32_t max_datagrams; 2109 }; 2110 2111 2112 /** 2113 * struct teth_aggr_params - Aggregation parmeters 2114 * @ul: Uplink parameters 2115 * @dl: Downlink parmaeters 2116 */ 2117 struct teth_aggr_params { 2118 struct teth_aggr_params_link ul; 2119 struct teth_aggr_params_link dl; 2120 }; 2121 2122 /** 2123 * struct teth_aggr_capabilities - Aggregation capabilities 2124 * @num_protocols: Number of protocols described in the array 2125 * @prot_caps[]: Array of aggregation capabilities per protocol 2126 */ 2127 struct teth_aggr_capabilities { 2128 uint16_t num_protocols; 2129 struct teth_aggr_params_link prot_caps[0]; 2130 }; 2131 2132 /** 2133 * struct teth_ioc_set_bridge_mode 2134 * @link_protocol: link protocol (IP / Ethernet) 2135 * @lcid: logical channel number 2136 */ 2137 struct teth_ioc_set_bridge_mode { 2138 enum teth_link_protocol_type link_protocol; 2139 uint16_t lcid; 2140 }; 2141 2142 /** 2143 * struct teth_ioc_set_aggr_params 2144 * @aggr_params: Aggregation parmeters 2145 * @lcid: logical channel number 2146 */ 2147 struct teth_ioc_aggr_params { 2148 struct teth_aggr_params aggr_params; 2149 uint16_t lcid; 2150 }; 2151 2152 2153 #define TETH_BRIDGE_IOC_SET_BRIDGE_MODE _IOW(TETH_BRIDGE_IOC_MAGIC, \ 2154 TETH_BRIDGE_IOCTL_SET_BRIDGE_MODE, \ 2155 struct teth_ioc_set_bridge_mode *) 2156 #define TETH_BRIDGE_IOC_SET_AGGR_PARAMS _IOW(TETH_BRIDGE_IOC_MAGIC, \ 2157 TETH_BRIDGE_IOCTL_SET_AGGR_PARAMS, \ 2158 struct teth_ioc_aggr_params *) 2159 #define TETH_BRIDGE_IOC_GET_AGGR_PARAMS _IOR(TETH_BRIDGE_IOC_MAGIC, \ 2160 TETH_BRIDGE_IOCTL_GET_AGGR_PARAMS, \ 2161 struct teth_ioc_aggr_params *) 2162 #define TETH_BRIDGE_IOC_GET_AGGR_CAPABILITIES _IOWR(TETH_BRIDGE_IOC_MAGIC, \ 2163 TETH_BRIDGE_IOCTL_GET_AGGR_CAPABILITIES, \ 2164 struct teth_aggr_capabilities *) 2165 2166 /* 2167 * unique magic number of the ODU bridge ioctls 2168 */ 2169 #define ODU_BRIDGE_IOC_MAGIC 0xCD 2170 2171 /* 2172 * Ioctls supported by ODU bridge driver 2173 */ 2174 #define ODU_BRIDGE_IOCTL_SET_MODE 0 2175 #define ODU_BRIDGE_IOCTL_SET_LLV6_ADDR 1 2176 #define ODU_BRIDGE_IOCTL_MAX 2 2177 2178 /** 2179 * enum odu_bridge_mode - bridge mode 2180 * (ROUTER MODE / BRIDGE MODE) 2181 */ 2182 enum odu_bridge_mode { 2183 ODU_BRIDGE_MODE_ROUTER, 2184 ODU_BRIDGE_MODE_BRIDGE, 2185 ODU_BRIDGE_MODE_MAX, 2186 }; 2187 2188 #define ODU_BRIDGE_IOC_SET_MODE _IOW(ODU_BRIDGE_IOC_MAGIC, \ 2189 ODU_BRIDGE_IOCTL_SET_MODE, \ 2190 enum odu_bridge_mode) 2191 2192 #define ODU_BRIDGE_IOC_SET_LLV6_ADDR _IOW(ODU_BRIDGE_IOC_MAGIC, \ 2193 ODU_BRIDGE_IOCTL_SET_LLV6_ADDR, \ 2194 struct in6_addr *) 2195 2196 #endif /* _MSM_IPA_H_ */ 2197