New upstream version 17.11-rc3
[deb_dpdk.git] / drivers / bus / fslmc / mc / fsl_dpio_cmd.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_CMD_H
41 #define _FSL_DPIO_CMD_H
42
43 /* DPIO Version */
44 #define DPIO_VER_MAJOR                  4
45 #define DPIO_VER_MINOR                  2
46
47 #define DPIO_CMD_BASE_VERSION           1
48 #define DPIO_CMD_ID_OFFSET              4
49
50 #define DPIO_CMD(id)    (((id) << DPIO_CMD_ID_OFFSET) | DPIO_CMD_BASE_VERSION)
51
52 /* Command IDs */
53 #define DPIO_CMDID_CLOSE                                DPIO_CMD(0x800)
54 #define DPIO_CMDID_OPEN                                 DPIO_CMD(0x803)
55 #define DPIO_CMDID_CREATE                               DPIO_CMD(0x903)
56 #define DPIO_CMDID_DESTROY                              DPIO_CMD(0x983)
57 #define DPIO_CMDID_GET_API_VERSION                      DPIO_CMD(0xa03)
58
59 #define DPIO_CMDID_ENABLE                               DPIO_CMD(0x002)
60 #define DPIO_CMDID_DISABLE                              DPIO_CMD(0x003)
61 #define DPIO_CMDID_GET_ATTR                             DPIO_CMD(0x004)
62 #define DPIO_CMDID_RESET                                DPIO_CMD(0x005)
63 #define DPIO_CMDID_IS_ENABLED                           DPIO_CMD(0x006)
64
65 #define DPIO_CMDID_SET_IRQ_ENABLE                       DPIO_CMD(0x012)
66 #define DPIO_CMDID_GET_IRQ_ENABLE                       DPIO_CMD(0x013)
67 #define DPIO_CMDID_SET_IRQ_MASK                         DPIO_CMD(0x014)
68 #define DPIO_CMDID_GET_IRQ_MASK                         DPIO_CMD(0x015)
69 #define DPIO_CMDID_GET_IRQ_STATUS                       DPIO_CMD(0x016)
70 #define DPIO_CMDID_CLEAR_IRQ_STATUS                     DPIO_CMD(0x017)
71
72 #define DPIO_CMDID_SET_STASHING_DEST                    DPIO_CMD(0x120)
73 #define DPIO_CMDID_GET_STASHING_DEST                    DPIO_CMD(0x121)
74 #define DPIO_CMDID_ADD_STATIC_DEQUEUE_CHANNEL           DPIO_CMD(0x122)
75 #define DPIO_CMDID_REMOVE_STATIC_DEQUEUE_CHANNEL        DPIO_CMD(0x123)
76
77 /* Macros for accessing command fields smaller than 1byte */
78 #define DPIO_MASK(field)        \
79         GENMASK(DPIO_##field##_SHIFT + DPIO_##field##_SIZE - 1, \
80                 DPIO_##field##_SHIFT)
81 #define dpio_set_field(var, field, val) \
82         ((var) |= (((val) << DPIO_##field##_SHIFT) & DPIO_MASK(field)))
83 #define dpio_get_field(var, field)      \
84         (((var) & DPIO_MASK(field)) >> DPIO_##field##_SHIFT)
85
86 #pragma pack(push, 1)
87 struct dpio_cmd_open {
88         uint32_t dpio_id;
89 };
90
91 #define DPIO_CHANNEL_MODE_SHIFT         0
92 #define DPIO_CHANNEL_MODE_SIZE          2
93
94 struct dpio_cmd_create {
95         uint16_t pad1;
96         /* from LSB: channel_mode:2 */
97         uint8_t channel_mode;
98         uint8_t pad2;
99         uint8_t num_priorities;
100 };
101
102 struct dpio_cmd_destroy {
103         uint32_t dpio_id;
104 };
105
106 #define DPIO_ENABLE_SHIFT       0
107 #define DPIO_ENABLE_SIZE        1
108
109 struct dpio_rsp_is_enabled {
110         /* only the LSB */
111         uint8_t en;
112 };
113
114 #define DPIO_ATTR_CHANNEL_MODE_SHIFT    0
115 #define DPIO_ATTR_CHANNEL_MODE_SIZE     4
116
117 struct dpio_rsp_get_attr {
118         uint32_t id;
119         uint16_t qbman_portal_id;
120         uint8_t num_priorities;
121         /* from LSB: channel_mode:4 */
122         uint8_t channel_mode;
123         uint64_t qbman_portal_ce_offset;
124         uint64_t qbman_portal_ci_offset;
125         uint32_t qbman_version;
126         uint32_t pad;
127         uint32_t clk;
128 };
129
130 struct dpio_stashing_dest {
131         uint8_t sdest;
132 };
133
134 struct dpio_cmd_static_dequeue_channel {
135         uint32_t dpcon_id;
136 };
137
138 struct dpio_rsp_add_static_dequeue_channel {
139         uint8_t channel_index;
140 };
141
142 struct dpio_rsp_get_api_version {
143         uint16_t major;
144         uint16_t minor;
145 };
146
147 #pragma pack(pop)
148 #endif /* _FSL_DPIO_CMD_H */