diff --git a/VERSION.txt b/VERSION.txt index 9b705309a2c4..b142a31e4f87 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,2 +1,2 @@ -Current Component wlan-cmn.driver.lnx.1.0 version 5.1.0.22S +Current Component wlan-cmn.driver.lnx.1.0 version 5.1.0.22W Matches Component wlan-cld3.driver.lnx.1.1 version 5.1.0.22C diff --git a/hif/src/snoc/if_snoc.c b/hif/src/snoc/if_snoc.c index ab0bda16b323..a414958d0082 100644 --- a/hif/src/snoc/if_snoc.c +++ b/hif/src/snoc/if_snoc.c @@ -371,8 +371,8 @@ QDF_STATUS hif_snoc_setup_wakeup_sources(struct hif_softc *scn, bool enable) return QDF_STATUS_E_RESOURCES; } - HIF_ERROR("%s: expecting wake from ce %d, irq %d", - __func__, dl_pipe, irq_to_wake_on); + HIF_INFO("%s: expecting wake from ce %d, irq %d enable %d", + __func__, dl_pipe, irq_to_wake_on, enable); return QDF_STATUS_SUCCESS; } diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index ab752c499aa8..3221164012fc 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -2057,4 +2057,17 @@ qdf_nbuf_get_priv_ptr(qdf_nbuf_t buf) */ unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status, qdf_nbuf_t nbuf, uint32_t headroom_sz); + +/** + * qdf_nbuf_mark_wakeup_frame() - mark wakeup frame. + * @buf: Pointer to nbuf + * + * Return: None + */ +static inline void +qdf_nbuf_mark_wakeup_frame(qdf_nbuf_t buf) +{ + __qdf_nbuf_mark_wakeup_frame(buf); +} + #endif /* _QDF_NBUF_H */ diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index f1eaeef2483d..050f73cc37ec 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -66,6 +66,9 @@ typedef struct sk_buff *__qdf_nbuf_t; #define QDF_NBUF_CB_PACKET_TYPE_WAPI 3 #define QDF_NBUF_CB_PACKET_TYPE_DHCP 4 +/* mark the first packet after wow wakeup */ +#define QDF_MARK_FIRST_WAKEUP_PACKET 0x80000000 + /* * Make sure that qdf_dma_addr_t in the cb block is always 64 bit aligned */ @@ -1655,5 +1658,16 @@ static inline void __qdf_invalidate_range(void *start, void *end) } #endif +/** + * __qdf_nbuf_mark_wakeup_frame() - mark wakeup frame. + * @buf: Pointer to nbuf + * + * Return: None + */ +static inline void +__qdf_nbuf_mark_wakeup_frame(__qdf_nbuf_t buf) +{ + buf->mark |= QDF_MARK_FIRST_WAKEUP_PACKET; +} #endif /*_I_QDF_NET_BUF_H */ diff --git a/qdf/linux/src/i_qdf_util.h b/qdf/linux/src/i_qdf_util.h index 1cfb71614232..9894e1c2a368 100644 --- a/qdf/linux/src/i_qdf_util.h +++ b/qdf/linux/src/i_qdf_util.h @@ -203,7 +203,7 @@ static inline bool __qdf_is_macaddr_equal(struct qdf_mac_addr *mac_addr1, pr_err("Assertion failed! %s:%s %s:%d\n", \ # expr, __func__, __FILE__, __LINE__); \ dump_stack(); \ - BUG_ON(1); \ + QDF_BUG(0); \ } \ } while (0) diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 39111a43eeb7..b846298f0f38 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -237,6 +237,8 @@ #define TARGET_INIT_STATUS_GEN_FAILED 0x1 #define TARGET_GET_INIT_STATUS_REASON(status) ((status) & 0xffff) #define TARGET_GET_INIT_STATUS_MODULE_ID(status) (((status) >> 16) & 0xffff) + +#define MAX_ASSOC_IE_LENGTH 1024 typedef uint32_t TARGET_INIT_STATUS; typedef enum { @@ -1714,6 +1716,8 @@ struct roam_offload_scan_params { * structure */ roam_offload_param roam_offload_params; #endif + uint32_t assoc_ie_length; + uint8_t assoc_ie[MAX_ASSOC_IE_LENGTH]; }; /* struct roam_offload_scan_rssi_params - structure containing @@ -3080,6 +3084,7 @@ struct wmi_dual_mac_config { * @self_macaddr: self mac address * @srcIPv6AddrValid: src ipv6 address valid flag * @targetIPv6AddrValid: target ipv6 address valid flag + * @target_ipv6_addr_ac_type: target ipv6 address type * @slotIdx: slot index */ struct ns_offload_req_params { @@ -3089,6 +3094,7 @@ struct ns_offload_req_params { struct qdf_mac_addr self_macaddr; uint8_t srcIPv6AddrValid; uint8_t targetIPv6AddrValid[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; + uint8_t target_ipv6_addr_ac_type[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA]; uint8_t slotIdx; }; #endif /* WLAN_NS_OFFLOAD */ diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 44a2738efb0e..f709315bda70 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -4082,6 +4082,7 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, wmi_roam_11i_offload_tlv_param *roam_offload_11i; wmi_roam_11r_offload_tlv_param *roam_offload_11r; wmi_roam_ese_offload_tlv_param *roam_offload_ese; + wmi_tlv_buf_len_param *assoc_ies; #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ /* Need to create a buf with roam_scan command at * front and piggyback with scan command */ @@ -4116,13 +4117,17 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, } else { len += WMI_TLV_HDR_SIZE; } + + len += (sizeof(*assoc_ies) + (2*WMI_TLV_HDR_SIZE) + + roundup(roam_req->assoc_ie_length, + sizeof(uint32_t))); } else { if (roam_req->is_roam_req_valid) WMI_LOGD("%s : roam offload = %d", __func__, roam_req->roam_offload_enabled); else WMI_LOGD("%s : roam_req is NULL", __func__); - len += (2 * WMI_TLV_HDR_SIZE); + len += (4 * WMI_TLV_HDR_SIZE); } if (roam_req->is_roam_req_valid && roam_req->roam_offload_enabled) { @@ -4138,6 +4143,7 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, } buf_ptr = (uint8_t *) wmi_buf_data(buf); + roam_scan_mode_fp = (wmi_roam_scan_mode_fixed_param *) buf_ptr; WMITLV_SET_HDR(&roam_scan_mode_fp->tlv_header, WMITLV_TAG_STRUC_wmi_roam_scan_mode_fixed_param, @@ -4312,7 +4318,30 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, buf_ptr += WMI_TLV_HDR_SIZE; WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, WMITLV_GET_STRUCT_TLVLEN(0)); + buf_ptr += WMI_TLV_HDR_SIZE; } + + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + sizeof(*assoc_ies)); + buf_ptr += WMI_TLV_HDR_SIZE; + + assoc_ies = (wmi_tlv_buf_len_param *) buf_ptr; + WMITLV_SET_HDR(&assoc_ies->tlv_header, + WMITLV_TAG_STRUC_wmi_tlv_buf_len_param, + WMITLV_GET_STRUCT_TLVLEN(wmi_tlv_buf_len_param)); + assoc_ies->buf_len = roam_req->assoc_ie_length; + + buf_ptr += sizeof(*assoc_ies); + + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE, + roundup(assoc_ies->buf_len, sizeof(uint32_t))); + buf_ptr += WMI_TLV_HDR_SIZE; + + if (assoc_ies->buf_len != 0) { + qdf_mem_copy(buf_ptr, roam_req->assoc_ie, + assoc_ies->buf_len); + } + } else { WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, WMITLV_GET_STRUCT_TLVLEN(0)); @@ -4325,6 +4354,12 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, buf_ptr += WMI_TLV_HDR_SIZE; WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, WMITLV_GET_STRUCT_TLVLEN(0)); + buf_ptr += WMI_TLV_HDR_SIZE; + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC, + WMITLV_GET_STRUCT_TLVLEN(0)); + buf_ptr += WMI_TLV_HDR_SIZE; + WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_BYTE, + WMITLV_GET_STRUCT_TLVLEN(0)); } #endif /* WLAN_FEATURE_ROAM_OFFLOAD */ status = wmi_unified_cmd_send(wmi_handle, buf, @@ -9823,6 +9858,10 @@ QDF_STATUS send_enable_arp_ns_offload_cmd_tlv(wmi_unified_t wmi_handle, A_MEMCPY(&ns_tuple->solicitation_ipaddr, ¶m->nsOffloadInfo. selfIPv6Addr[i], sizeof(WMI_IPV6_ADDR)); + if (param->nsOffloadInfo. + target_ipv6_addr_ac_type[i]) + ns_tuple->flags |= + WMI_NSOFF_FLAGS_IS_IPV6_ANYCAST; WMI_LOGD("NS solicitedIp: %pI6, targetIp: %pI6", ¶m->nsOffloadInfo.selfIPv6Addr[i], ¶m->nsOffloadInfo. @@ -9893,6 +9932,10 @@ QDF_STATUS send_enable_arp_ns_offload_cmd_tlv(wmi_unified_t wmi_handle, A_MEMCPY(&ns_tuple->solicitation_ipaddr, ¶m->nsOffloadInfo.selfIPv6Addr[i], sizeof(WMI_IPV6_ADDR)); + if (param->nsOffloadInfo. + target_ipv6_addr_ac_type[i]) + ns_tuple->flags |= + WMI_NSOFF_FLAGS_IS_IPV6_ANYCAST; WMI_LOGD("Index %d NS solicitedIp: %pI6, targetIp: %pI6", i, ¶m->nsOffloadInfo.selfIPv6Addr[i], ¶m->nsOffloadInfo.targetIPv6Addr[i]);