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