New upstream version 17.11-rc3
[deb_dpdk.git] / drivers / bus / fslmc / mc / fsl_dpio.h
1 /*-
2  * This file is provided under a dual BSD/GPLv2 license. When using or
3  * redistributing this file, you may do so under either license.
4  *
5  *   BSD LICENSE
6  *
7  * Copyright 2013-2016 Freescale Semiconductor Inc.
8  * Copyright 2016-2017 NXP.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  * * Neither the name of the above-listed copyright holders nor the
18  * names of any contributors may be used to endorse or promote products
19  * derived from this software without specific prior written permission.
20  *
21  *   GPL LICENSE SUMMARY
22  *
23  * ALTERNATIVELY, this software may be distributed under the terms of the
24  * GNU General Public License ("GPL") as published by the Free Software
25  * Foundation, either version 2 of that License or (at your option) any
26  * later version.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
32  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38  * POSSIBILITY OF SUCH DAMAGE.
39  */
40 #ifndef __FSL_DPIO_H
41 #define __FSL_DPIO_H
42
43 /* Data Path I/O Portal API
44  * Contains initialization APIs and runtime control APIs for DPIO
45  */
46
47 struct fsl_mc_io;
48
49 int dpio_open(struct fsl_mc_io *mc_io,
50               uint32_t cmd_flags,
51               int dpio_id,
52               uint16_t *token);
53
54 int dpio_close(struct fsl_mc_io *mc_io,
55                uint32_t cmd_flags,
56                uint16_t token);
57
58 /**
59  * enum dpio_channel_mode - DPIO notification channel mode
60  * @DPIO_NO_CHANNEL:    No support for notification channel
61  * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a
62  *      dedicated channel in the DPIO; user should point the queue's
63  *      destination in the relevant interface to this DPIO
64  */
65 enum dpio_channel_mode {
66         DPIO_NO_CHANNEL = 0,
67         DPIO_LOCAL_CHANNEL = 1,
68 };
69
70 /**
71  * struct dpio_cfg - Structure representing DPIO configuration
72  * @channel_mode:       Notification channel mode
73  * @num_priorities:     Number of priorities for the notification channel (1-8);
74  *                      relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL'
75  */
76 struct dpio_cfg {
77         enum dpio_channel_mode channel_mode;
78         uint8_t num_priorities;
79 };
80
81
82 int dpio_create(struct fsl_mc_io *mc_io,
83                 uint16_t dprc_token,
84                 uint32_t cmd_flags,
85                 const struct dpio_cfg *cfg,
86                 uint32_t *obj_id);
87
88 int dpio_destroy(struct fsl_mc_io *mc_io,
89                  uint16_t dprc_token,
90                  uint32_t cmd_flags,
91                  uint32_t object_id);
92
93 int dpio_enable(struct fsl_mc_io *mc_io,
94                 uint32_t cmd_flags,
95                 uint16_t token);
96
97 int dpio_disable(struct fsl_mc_io *mc_io,
98                  uint32_t cmd_flags,
99                  uint16_t token);
100
101 int dpio_is_enabled(struct fsl_mc_io *mc_io,
102                     uint32_t cmd_flags,
103                     uint16_t token,
104                     int *en);
105
106 int dpio_reset(struct fsl_mc_io *mc_io,
107                uint32_t cmd_flags,
108                uint16_t token);
109
110 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
111                                   uint32_t cmd_flags,
112                                   uint16_t token,
113                                   uint8_t sdest);
114
115 int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
116                                   uint32_t cmd_flags,
117                                   uint16_t token,
118                                   uint8_t *sdest);
119
120 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
121                                     uint32_t cmd_flags,
122                                     uint16_t token,
123                                     int dpcon_id,
124                                     uint8_t *channel_index);
125
126 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
127                                        uint32_t cmd_flags,
128                                        uint16_t token,
129                                        int dpcon_id);
130
131 /**
132  * struct dpio_attr - Structure representing DPIO attributes
133  * @id:                         DPIO object ID
134  * @qbman_portal_ce_offset:     Offset of the software portal cache-enabled area
135  * @qbman_portal_ci_offset:     Offset of the software portal
136  *                              cache-inhibited area
137  * @qbman_portal_id:            Software portal ID
138  * @channel_mode:               Notification channel mode
139  * @num_priorities:             Number of priorities for the notification
140  *                              channel (1-8); relevant only if
141  *                              'channel_mode = DPIO_LOCAL_CHANNEL'
142  * @qbman_version:              QBMAN version
143  */
144 struct dpio_attr {
145         int id;
146         uint64_t qbman_portal_ce_offset;
147         uint64_t qbman_portal_ci_offset;
148         uint16_t qbman_portal_id;
149         enum dpio_channel_mode channel_mode;
150         uint8_t num_priorities;
151         uint32_t qbman_version;
152         uint32_t clk;
153 };
154
155 int dpio_get_attributes(struct fsl_mc_io *mc_io,
156                         uint32_t cmd_flags,
157                         uint16_t token,
158                         struct dpio_attr *attr);
159
160 int dpio_get_api_version(struct fsl_mc_io *mc_io,
161                          uint32_t cmd_flags,
162                          uint16_t *major_ver,
163                          uint16_t *minor_ver);
164
165 #endif /* __FSL_DPIO_H */