1/* 2 * Copyright (c) 2012, The Linux Foundation. All rights reserved. 3 * Permission to use, copy, modify, and/or distribute this software for 4 * any purpose with or without fee is hereby granted, provided that the 5 * above copyright notice and this permission notice appear in all copies. 6 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 7 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 8 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 9 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 10 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 11 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 12 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 13 */ 14 15 16/** 17 * @defgroup fal_trunk FAL_TRUNK 18 * @{ 19 */ 20#include "sw.h" 21#include "fal_trunk.h" 22#include "hsl_api.h" 23 24static sw_error_t 25_fal_trunk_group_set(a_uint32_t dev_id, a_uint32_t trunk_id, 26 a_bool_t enable, fal_pbmp_t member) 27{ 28 sw_error_t rv; 29 hsl_api_t *p_api; 30 31 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 32 33 if (NULL == p_api->trunk_group_set) 34 return SW_NOT_SUPPORTED; 35 36 rv = p_api->trunk_group_set(dev_id, trunk_id, enable, member); 37 return rv; 38} 39 40static sw_error_t 41_fal_trunk_group_get(a_uint32_t dev_id, a_uint32_t trunk_id, 42 a_bool_t * enable, fal_pbmp_t * member) 43{ 44 sw_error_t rv; 45 hsl_api_t *p_api; 46 47 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 48 49 if (NULL == p_api->trunk_group_get) 50 return SW_NOT_SUPPORTED; 51 52 rv = p_api->trunk_group_get(dev_id, trunk_id, enable, member); 53 return rv; 54} 55 56static sw_error_t 57_fal_trunk_hash_mode_set(a_uint32_t dev_id, a_uint32_t hash_mode) 58{ 59 sw_error_t rv; 60 hsl_api_t *p_api; 61 62 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 63 64 if (NULL == p_api->trunk_hash_mode_set) 65 return SW_NOT_SUPPORTED; 66 67 rv = p_api->trunk_hash_mode_set(dev_id, hash_mode); 68 return rv; 69} 70 71static sw_error_t 72_fal_trunk_hash_mode_get(a_uint32_t dev_id, a_uint32_t * hash_mode) 73{ 74 sw_error_t rv; 75 hsl_api_t *p_api; 76 77 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 78 79 if (NULL == p_api->trunk_hash_mode_get) 80 return SW_NOT_SUPPORTED; 81 82 rv = p_api->trunk_hash_mode_get(dev_id, hash_mode); 83 return rv; 84} 85 86static sw_error_t 87_fal_trunk_manipulate_sa_set(a_uint32_t dev_id, fal_mac_addr_t * addr) 88{ 89 sw_error_t rv; 90 hsl_api_t *p_api; 91 92 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 93 94 if (NULL == p_api->trunk_manipulate_sa_set) 95 return SW_NOT_SUPPORTED; 96 97 rv = p_api->trunk_manipulate_sa_set(dev_id, addr); 98 return rv; 99} 100 101static sw_error_t 102_fal_trunk_manipulate_sa_get(a_uint32_t dev_id, fal_mac_addr_t * addr) 103{ 104 sw_error_t rv; 105 hsl_api_t *p_api; 106 107 SW_RTN_ON_NULL(p_api = hsl_api_ptr_get(dev_id)); 108 109 if (NULL == p_api->trunk_manipulate_sa_get) 110 return SW_NOT_SUPPORTED; 111 112 rv = p_api->trunk_manipulate_sa_get(dev_id, addr); 113 return rv; 114} 115 116/** 117 * @brief Set particular trunk group information on particular device. 118 * @param[in] dev_id device id 119 * @param[in] trunk_id trunk group id 120 * @param[in] enable trunk group status, enable or disable 121 * @param[in] member port member information 122 * @return SW_OK or error code 123 */ 124sw_error_t 125fal_trunk_group_set(a_uint32_t dev_id, a_uint32_t trunk_id, 126 a_bool_t enable, fal_pbmp_t member) 127{ 128 sw_error_t rv; 129 130 FAL_API_LOCK; 131 rv = _fal_trunk_group_set(dev_id, trunk_id, enable, member); 132 FAL_API_UNLOCK; 133 return rv; 134} 135 136/** 137 * @brief Get particular trunk group information on particular device. 138 * @param[in] dev_id device id 139 * @param[in] trunk_id trunk group id 140 * @param[out] enable trunk group status, enable or disable 141 * @param[out] member port member information 142 * @return SW_OK or error code 143 */ 144sw_error_t 145fal_trunk_group_get(a_uint32_t dev_id, a_uint32_t trunk_id, 146 a_bool_t * enable, fal_pbmp_t * member) 147{ 148 sw_error_t rv; 149 150 FAL_API_LOCK; 151 rv = _fal_trunk_group_get(dev_id, trunk_id, enable, member); 152 FAL_API_UNLOCK; 153 return rv; 154} 155 156/** 157 * @brief Set trunk hash mode on particular device. 158 * @param[in] dev_id device id 159 * @param[in] hash_mode trunk hash mode 160 * @return SW_OK or error code 161 */ 162sw_error_t 163fal_trunk_hash_mode_set(a_uint32_t dev_id, a_uint32_t hash_mode) 164{ 165 sw_error_t rv; 166 167 FAL_API_LOCK; 168 rv = _fal_trunk_hash_mode_set(dev_id, hash_mode); 169 FAL_API_UNLOCK; 170 return rv; 171} 172 173/** 174 * @brief Get trunk hash mode on particular device. 175 * @param[in] dev_id device id 176 * @param[out] hash_mode trunk hash mode 177 * @return SW_OK or error code 178 */ 179sw_error_t 180fal_trunk_hash_mode_get(a_uint32_t dev_id, a_uint32_t * hash_mode) 181{ 182 sw_error_t rv; 183 184 FAL_API_LOCK; 185 rv = _fal_trunk_hash_mode_get(dev_id, hash_mode); 186 FAL_API_UNLOCK; 187 return rv; 188} 189 190/** 191 * @brief Set trunk manipulate SA on particular device. 192 * @param[in] dev_id device id 193 * @param[in] addr manipulate SA 194 * @return SW_OK or error code 195 */ 196sw_error_t 197fal_trunk_manipulate_sa_set(a_uint32_t dev_id, fal_mac_addr_t * addr) 198{ 199 sw_error_t rv; 200 201 FAL_API_LOCK; 202 rv = _fal_trunk_manipulate_sa_set(dev_id, addr); 203 FAL_API_UNLOCK; 204 return rv; 205} 206 207/** 208 * @brief Get trunk manipulate SA on particular device. 209 * @param[in] dev_id device id 210 * @param[out] addr manipulate SA 211 * @return SW_OK or error code 212 */ 213sw_error_t 214fal_trunk_manipulate_sa_get(a_uint32_t dev_id, fal_mac_addr_t * addr) 215{ 216 sw_error_t rv; 217 218 FAL_API_LOCK; 219 rv = _fal_trunk_manipulate_sa_get(dev_id, addr); 220 FAL_API_UNLOCK; 221 return rv; 222} 223 224 225/** 226 * @} 227 */ 228