Debashis Dutt | c4c52dc | 2016-10-04 17:12:23 -0700 | [diff] [blame] | 1 | /* |
Tallapragada Kalyan | 57b6bb3 | 2018-01-02 12:58:33 +0530 | [diff] [blame^] | 2 | * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved. |
Debashis Dutt | c4c52dc | 2016-10-04 17:12:23 -0700 | [diff] [blame] | 3 | * |
| 4 | * Permission to use, copy, modify, and/or distribute this software for |
| 5 | * any purpose with or without fee is hereby granted, provided that the |
| 6 | * above copyright notice and this permission notice appear in all |
| 7 | * copies. |
| 8 | * |
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| 10 | * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| 11 | * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| 12 | * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| 13 | * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| 14 | * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| 15 | * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| 16 | * PERFORMANCE OF THIS SOFTWARE. |
| 17 | */ |
Jeff Johnson | 2cb8fc7 | 2016-12-17 10:45:08 -0800 | [diff] [blame] | 18 | #ifndef _DP_PEER_H_ |
| 19 | #define _DP_PEER_H_ |
Debashis Dutt | c4c52dc | 2016-10-04 17:12:23 -0700 | [diff] [blame] | 20 | |
| 21 | #include <qdf_types.h> |
| 22 | #include <qdf_lock.h> |
| 23 | #include "dp_types.h" |
| 24 | |
| 25 | #define DP_INVALID_PEER_ID 0xffff |
| 26 | |
| 27 | /** |
| 28 | * dp_peer_find_by_id() - Returns peer object given the peer id |
| 29 | * |
| 30 | * @soc : core DP soc context |
| 31 | * @peer_id : peer id from peer object can be retrieved |
| 32 | * |
| 33 | * Return: struct dp_peer*: Pointer to DP peer object |
| 34 | */ |
| 35 | static inline struct dp_peer * |
| 36 | dp_peer_find_by_id(struct dp_soc *soc, |
| 37 | uint16_t peer_id) |
| 38 | { |
| 39 | struct dp_peer *peer; |
| 40 | |
| 41 | /* TODO: Hold lock */ |
| 42 | peer = (peer_id >= soc->max_peers) ? NULL : |
| 43 | soc->peer_id_to_obj_map[peer_id]; |
| 44 | |
| 45 | return peer; |
| 46 | } |
Jeff Johnson | 2cb8fc7 | 2016-12-17 10:45:08 -0800 | [diff] [blame] | 47 | |
| 48 | void dp_rx_peer_map_handler(void *soc_handle, uint16_t peer_id, |
Tallapragada Kalyan | 6f6166e | 2017-02-17 17:00:23 +0530 | [diff] [blame] | 49 | uint16_t hw_peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr); |
Jeff Johnson | 2cb8fc7 | 2016-12-17 10:45:08 -0800 | [diff] [blame] | 50 | void dp_rx_peer_unmap_handler(void *soc_handle, uint16_t peer_id); |
| 51 | void dp_rx_sec_ind_handler(void *soc_handle, uint16_t peer_id, |
| 52 | enum htt_sec_type sec_type, int is_unicast, |
| 53 | u_int32_t *michael_key, u_int32_t *rx_pn); |
Ishank Jain | 1e7401c | 2017-02-17 15:38:39 +0530 | [diff] [blame] | 54 | uint8_t dp_get_peer_mac_addr_frm_id(struct cdp_soc_t *soc_handle, |
| 55 | uint16_t peer_id, uint8_t *peer_mac); |
Jeff Johnson | 2cb8fc7 | 2016-12-17 10:45:08 -0800 | [diff] [blame] | 56 | |
Pamidipati, Vijay | b8bbf16 | 2017-06-26 23:47:39 +0530 | [diff] [blame] | 57 | int dp_peer_add_ast(struct dp_soc *soc, struct dp_peer *peer, |
Tallapragada Kalyan | 57b6bb3 | 2018-01-02 12:58:33 +0530 | [diff] [blame^] | 58 | uint8_t *mac_addr, enum cdp_txrx_ast_entry_type type, |
| 59 | uint32_t flags); |
| 60 | |
| 61 | void dp_peer_del_ast(struct dp_soc *soc, struct dp_ast_entry *ast_entry); |
| 62 | |
| 63 | int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer, |
| 64 | struct dp_ast_entry *ast_entry, uint32_t flags); |
| 65 | |
Tallapragada Kalyan | 1c14d5d | 2017-07-26 00:31:35 +0530 | [diff] [blame] | 66 | struct dp_ast_entry *dp_peer_ast_hash_find(struct dp_soc *soc, |
Tallapragada Kalyan | 57b6bb3 | 2018-01-02 12:58:33 +0530 | [diff] [blame^] | 67 | uint8_t *ast_mac_addr); |
| 68 | |
| 69 | uint8_t dp_peer_ast_get_pdev_id(struct dp_soc *soc, |
| 70 | struct dp_ast_entry *ast_entry); |
| 71 | |
| 72 | |
| 73 | uint8_t dp_peer_ast_get_next_hop(struct dp_soc *soc, |
| 74 | struct dp_ast_entry *ast_entry); |
| 75 | |
| 76 | void dp_peer_ast_set_type(struct dp_soc *soc, |
| 77 | struct dp_ast_entry *ast_entry, |
| 78 | enum cdp_txrx_ast_entry_type type); |
Pamidipati, Vijay | b8bbf16 | 2017-06-26 23:47:39 +0530 | [diff] [blame] | 79 | |
Pramod Simha | b17d067 | 2017-03-06 17:20:13 -0800 | [diff] [blame] | 80 | /* |
| 81 | * dp_get_vdev_from_soc_vdev_id_wifi3() - |
| 82 | * Returns vdev object given the vdev id |
| 83 | * vdev id is unique across pdev's |
| 84 | * |
| 85 | * @soc : core DP soc context |
| 86 | * @vdev_id : vdev id from vdev object can be retrieved |
| 87 | * |
| 88 | * Return: struct dp_vdev*: Pointer to DP vdev object |
| 89 | */ |
| 90 | static inline struct dp_vdev * |
| 91 | dp_get_vdev_from_soc_vdev_id_wifi3(struct dp_soc *soc, |
| 92 | uint8_t vdev_id) |
| 93 | { |
| 94 | struct dp_pdev *pdev = NULL; |
| 95 | struct dp_vdev *vdev = NULL; |
| 96 | int i; |
| 97 | |
| 98 | for (i = 0; i < MAX_PDEV_CNT && soc->pdev_list[i]; i++) { |
| 99 | pdev = soc->pdev_list[i]; |
| 100 | TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) { |
| 101 | if (vdev->vdev_id == vdev_id) { |
| 102 | QDF_TRACE(QDF_MODULE_ID_DP, |
| 103 | QDF_TRACE_LEVEL_INFO, |
Jeff Johnson | 3f217e2 | 2017-09-18 10:13:35 -0700 | [diff] [blame] | 104 | FL("Found vdev 0x%pK on pdev %d\n"), |
Pramod Simha | b17d067 | 2017-03-06 17:20:13 -0800 | [diff] [blame] | 105 | vdev, i); |
| 106 | return vdev; |
| 107 | } |
| 108 | } |
| 109 | } |
| 110 | return NULL; |
| 111 | |
| 112 | } |
Jeff Johnson | 2cb8fc7 | 2016-12-17 10:45:08 -0800 | [diff] [blame] | 113 | #endif /* _DP_PEER_H_ */ |