From dc949c59bea39fc3042944b112afbe192a48f2ba Mon Sep 17 00:00:00 2001 From: Aditya Sathish Date: Wed, 31 Oct 2018 15:52:14 +0530 Subject: [PATCH] qcacmn: Add CDP support for resolving RA from DA for ME6 Add support for parsing AST entries to resolve the RA for multicast enhancement (mode 6) and enabling access of the API to the higher layers through the use of the CDP framework. Change-Id: I909bea86b90c22f311484c0b2653dd7623971c24 CRs-Fixed: 2333014 --- dp/inc/cdp_txrx_me.h | 21 ++++++++++++++++++++- dp/inc/cdp_txrx_ops.h | 4 ++++ dp/wifi3.0/dp_main.c | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/dp/inc/cdp_txrx_me.h b/dp/inc/cdp_txrx_me.h index 2e40067e6f..0851420562 100644 --- a/dp/inc/cdp_txrx_me.h +++ b/dp/inc/cdp_txrx_me.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -140,6 +140,25 @@ cdp_tx_me_convert_ucast(ol_txrx_soc_handle soc, struct cdp_vdev *vdev, (vdev, wbuf, newmac, newmaccnt); } +static inline uint16_t +cdp_tx_me_find_ast_entry(ol_txrx_soc_handle soc, struct cdp_vdev *vdev, + uint8_t *da_mac_addr, uint8_t *ra_mac_addr) +{ + if (!soc || !soc->ops) { + QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG, + "%s: Invalid Instance", __func__); + QDF_BUG(0); + return 0; + } + + if (!soc->ops->me_ops || + !soc->ops->me_ops->tx_me_find_ast_entry) + return 0; + + return soc->ops->me_ops->tx_me_find_ast_entry(vdev, da_mac_addr, + ra_mac_addr); +} + /* Should be a function pointer in ol_txrx_osif_ops{} */ /** * @brief notify mcast frame indication from FW. diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 479b2bf7a2..68d9cc26d3 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -590,6 +590,10 @@ struct cdp_me_ops { int (*mcast_notify)(struct cdp_pdev *pdev, u_int8_t vdev_id, qdf_nbuf_t msdu); + + uint16_t (*tx_me_find_ast_entry)(struct cdp_vdev *vdev, + uint8_t *da_mac_addr, + uint8_t *ra_mac_addr); }; struct cdp_mon_ops { diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index a4625d02df..af5bee5e24 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -8335,6 +8335,7 @@ static struct cdp_me_ops dp_ops_me = { .tx_me_free_descriptor = dp_tx_me_free_descriptor, .tx_me_convert_ucast = dp_tx_me_send_convert_ucast, #endif + .tx_me_find_ast_entry = NULL, }; static struct cdp_mon_ops dp_ops_mon = {