]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/contrib/octeon-sdk/cvmx-helper-cfg.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / contrib / octeon-sdk / cvmx-helper-cfg.h
1 /***********************license start***************
2  * Copyright (c) 2003-2010  Cavium Inc. (support@cavium.com). All rights
3  * reserved.
4  *
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  *   * Redistributions of source code must retain the above copyright
11  *     notice, this list of conditions and the following disclaimer.
12  *
13  *   * Redistributions in binary form must reproduce the above
14  *     copyright notice, this list of conditions and the following
15  *     disclaimer in the documentation and/or other materials provided
16  *     with the distribution.
17
18  *   * Neither the name of Cavium Inc. nor the names of
19  *     its contributors may be used to endorse or promote products
20  *     derived from this software without specific prior written
21  *     permission.
22
23  * This Software, including technical data, may be subject to U.S. export  control
24  * laws, including the U.S. Export Administration Act and its  associated
25  * regulations, and may be subject to export or import  regulations in other
26  * countries.
27
28  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29  * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30  * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31  * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32  * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33  * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34  * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35  * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36  * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37  * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38  ***********************license end**************************************/
39
40
41 /**
42  * @file
43  *
44  * Helper Functions for the Configuration Framework
45  *
46  * OCTEON_CN68XX introduces a flexible hw interface configuration
47  * scheme. To cope with this change and the requirements of
48  * configurability for other system resources, e.g., IPD/PIP pknd and
49  * PKO ports and queues, a configuration framework for the SDK is
50  * designed. It has two goals: first to recognize and establish the
51  * default configuration and, second, to allow the user to define key
52  * parameters in a high-level language.
53  *
54  * The helper functions query the QLM setup to help achieving the
55  * first goal.
56  *
57  * The second goal is accomplished by generating
58  * cvmx_helper_cfg_init() from a high-level lanaguage.
59  *
60  * <hr>$Revision: 0 $<hr>
61  */
62
63 #ifndef __CVMX_HELPER_CFG_H__
64 #define __CVMX_HELPER_CFG_H__
65
66 #define CVMX_HELPER_CFG_MAX_IFACE               9
67 #define CVMX_HELPER_CFG_MAX_PKO_PORT            128
68 #define CVMX_HELPER_CFG_MAX_PIP_BPID            64
69 #define CVMX_HELPER_CFG_MAX_PIP_PKND            64
70 #define CVMX_HELPER_CFG_MAX_PKO_QUEUES          256
71 #define CVMX_HELPER_CFG_MAX_PORT_PER_IFACE      256
72
73 #define CVMX_HELPER_CFG_INVALID_VALUE           -1      /* The default return 
74                                                          * value upon failure
75                                                          */
76
77 #ifdef  __cplusplus
78 extern "C" {
79 #endif
80
81 #define cvmx_helper_cfg_assert(cond)                                    \
82         do {                                                            \
83             if (!(cond))                                                \
84             {                                                           \
85                 cvmx_dprintf("cvmx_helper_cfg_assert (%s) at %s:%d\n",  \
86                     #cond, __FILE__, __LINE__);                         \
87             }                                                           \
88         } while (0)
89
90 /*
91  * Config Options
92  *
93  * These options have to be set via cvmx_helper_cfg_opt_set() before calling the
94  * routines that set up the hw. These routines process the options and set them
95  * correctly to take effect at runtime. 
96  */
97 enum cvmx_helper_cfg_option {
98         CVMX_HELPER_CFG_OPT_USE_DWB, /*
99                                       * Global option to control if
100                                       * the SDK configures units (DMA,
101                                       * SSO, and PKO) to send don't
102                                       * write back (DWB) requests for
103                                       * freed buffers. Set to 1/0 to
104                                       * enable/disable DWB.
105                                       *
106                                       * For programs that fit inside
107                                       * L2, sending DWB just causes
108                                       * more L2 operations without
109                                       * benefit.
110                                       */
111
112         CVMX_HELPER_CFG_OPT_MAX
113 };
114 typedef enum cvmx_helper_cfg_option cvmx_helper_cfg_option_t;
115
116 /*
117  * @INTERNAL
118  * Return configured pknd for the port
119  *
120  * @param interface the interface number
121  * @param index the port's index number
122  * @return the pknd
123  */
124 extern int __cvmx_helper_cfg_pknd(int interface, int index);
125
126 /*
127  * @INTERNAL
128  * Return the configured bpid for the port
129  *
130  * @param interface the interface number
131  * @param index the port's index number
132  * @return the bpid
133  */
134 extern int __cvmx_helper_cfg_bpid(int interface, int index);
135
136 /*
137  * @INTERNAL
138  * Return the configured pko_port base for the port
139  *
140  * @param interface the interface number
141  * @param index the port's index number
142  * @return the pko_port base
143  */
144 extern int __cvmx_helper_cfg_pko_port_base(int interface, int index);
145
146 /*
147  * @INTERNAL
148  * Return the configured number of pko_ports for the port
149  *
150  * @param interface the interface number
151  * @param index the port's index number
152  * @return the number of pko_ports
153  */
154 extern int __cvmx_helper_cfg_pko_port_num(int interface, int index);
155
156 /*
157  * @INTERNAL
158  * Return the configured pko_queue base for the pko_port
159  *
160  * @param pko_port
161  * @return the pko_queue base
162  */
163 extern int __cvmx_helper_cfg_pko_queue_base(int pko_port);
164
165 /*
166  * @INTERNAL
167  * Return the configured number of pko_queues for the pko_port
168  *
169  * @param pko_port
170  * @return the number of pko_queues
171  */
172 extern int __cvmx_helper_cfg_pko_queue_num(int pko_port);
173
174 /*
175  * @INTERNAL
176  * Return the interface the pko_port is configured for
177  *
178  * @param pko_port
179  * @return the interface for the pko_port
180  */
181 extern int __cvmx_helper_cfg_pko_port_interface(int pko_port);
182
183 /*
184  * @INTERNAL
185  * Return the index of the port the pko_port is configured for
186  *
187  * @param pko_port
188  * @return the index of the port
189  */
190 extern int __cvmx_helper_cfg_pko_port_index(int pko_port);
191
192 /*
193  * @INTERNAL
194  * Return the pko_eid of the pko_port
195  *
196  * @param pko_port
197  * @return the pko_eid
198  */
199 extern int __cvmx_helper_cfg_pko_port_eid(int pko_port);
200
201 /*
202  * @INTERNAL
203  * Return the max# of pko queues allocated.
204  *
205  * @return the max# of pko queues
206  *
207  * Note: there might be holes in the queue space depending on user
208  * configuration. The function returns the highest queue's index in
209  * use.
210  */
211 extern int __cvmx_helper_cfg_pko_max_queue(void);
212
213 /*
214  * @INTERNAL
215  * Return the max# of PKO DMA engines allocated.
216  *
217  * @return the max# of DMA engines
218  *
219  * NOTE: the DMA engines are allocated contiguously and starting from
220  * 0.
221  */
222 extern int __cvmx_helper_cfg_pko_max_engine(void);
223
224 /*
225  * Get the value set for the config option ``opt''.
226  *
227  * @param opt is the config option.
228  * @return the value set for the option
229  */
230 extern uint64_t cvmx_helper_cfg_opt_get(cvmx_helper_cfg_option_t opt);
231
232 /*
233  * Set the value for a config option.
234  *
235  * @param opt is the config option.
236  * @param val is the value to set for the opt.
237  * @return 0 for success and -1 on error
238  *
239  * Note an option here is a config-time parameter and this means that
240  * it has to be set before calling the corresponding setup functions
241  * that actually sets the option in hw.
242  */
243 extern int cvmx_helper_cfg_opt_set(cvmx_helper_cfg_option_t opt, uint64_t val);
244
245 /*
246  * Retrieve the pko_port base given ipd_port.
247  *
248  * @param ipd_port is the IPD eport
249  * @return the corresponding PKO port base for the physical port
250  * represented by the IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
251  */
252 extern int cvmx_helper_cfg_ipd2pko_port_base(int ipd_port);
253
254 /*
255  * Retrieve the number of pko_ports given ipd_port.
256  *
257  * @param ipd_port is the IPD eport
258  * @return the corresponding number of PKO ports for the physical port 
259  *  represented by IPD eport or CVMX_HELPER_CFG_INVALID_VALUE.
260  */
261 extern int cvmx_helper_cfg_ipd2pko_port_num(int ipd_port);
262
263 /*
264  * @INTERNAL
265  * The init function
266  *
267  * @param none
268  * @return 0 for success.
269  *
270  * Note: this function is meant to be called to set the ``configured
271  * parameters,'' e.g., pknd, bpid, etc. and therefore should be before
272  * any of the corresponding cvmx_helper_cfg_xxxx() functions are
273  * called.
274  */
275
276 extern int __cvmx_helper_cfg_init(void);
277
278 #ifdef  __cplusplus
279 }
280 #endif
281
282 #endif /* __CVMX_HELPER_CFG_H__ */