Merge branch 'fix/rt5645' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[linux-2.6-block.git] / drivers / staging / fsl-mc / bus / dpmcp.h
CommitLineData
197f4d6a
GR
1/* Copyright 2013-2015 Freescale Semiconductor Inc.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are met:
5 * * Redistributions of source code must retain the above copyright
6 * notice, this list of conditions and the following disclaimer.
7 * * Redistributions in binary form must reproduce the above copyright
8 * notice, this list of conditions and the following disclaimer in the
9 * documentation and/or other materials provided with the distribution.
10 * * Neither the name of the above-listed copyright holders nor the
11 * names of any contributors may be used to endorse or promote products
12 * derived from this software without specific prior written permission.
13 *
14 *
15 * ALTERNATIVELY, this software may be distributed under the terms of the
16 * GNU General Public License ("GPL") as published by the Free Software
17 * Foundation, either version 2 of that License or (at your option) any
18 * later version.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32#ifndef __FSL_DPMCP_H
33#define __FSL_DPMCP_H
34
35/* Data Path Management Command Portal API
36 * Contains initialization APIs and runtime control APIs for DPMCP
37 */
38
39struct fsl_mc_io;
40
7a9a56be
GR
41int dpmcp_open(struct fsl_mc_io *mc_io,
42 uint32_t cmd_flags,
43 int dpmcp_id,
44 uint16_t *token);
197f4d6a
GR
45
46/* Get portal ID from pool */
47#define DPMCP_GET_PORTAL_ID_FROM_POOL (-1)
48
7a9a56be
GR
49int dpmcp_close(struct fsl_mc_io *mc_io,
50 uint32_t cmd_flags,
51 uint16_t token);
197f4d6a
GR
52
53/**
7a9a56be 54 * struct dpmcp_cfg - Structure representing DPMCP configuration
197f4d6a
GR
55 * @portal_id: Portal ID; 'DPMCP_GET_PORTAL_ID_FROM_POOL' to get the portal ID
56 * from pool
57 */
58struct dpmcp_cfg {
59 int portal_id;
60};
61
197f4d6a 62int dpmcp_create(struct fsl_mc_io *mc_io,
7a9a56be 63 uint32_t cmd_flags,
197f4d6a
GR
64 const struct dpmcp_cfg *cfg,
65 uint16_t *token);
66
7a9a56be
GR
67int dpmcp_destroy(struct fsl_mc_io *mc_io,
68 uint32_t cmd_flags,
69 uint16_t token);
197f4d6a 70
7a9a56be
GR
71int dpmcp_reset(struct fsl_mc_io *mc_io,
72 uint32_t cmd_flags,
73 uint16_t token);
197f4d6a
GR
74
75/* IRQ */
7a9a56be 76/* IRQ Index */
197f4d6a 77#define DPMCP_IRQ_INDEX 0
7a9a56be 78/* irq event - Indicates that the link state changed */
197f4d6a 79#define DPMCP_IRQ_EVENT_CMD_DONE 0x00000001
7a9a56be
GR
80
81/**
82 * struct dpmcp_irq_cfg - IRQ configuration
83 * @paddr: Address that must be written to signal a message-based interrupt
84 * @val: Value to write into irq_addr address
85 * @user_irq_id: A user defined number associated with this IRQ
86 */
87struct dpmcp_irq_cfg {
88 uint64_t paddr;
89 uint32_t val;
90 int user_irq_id;
91};
197f4d6a 92
197f4d6a 93int dpmcp_set_irq(struct fsl_mc_io *mc_io,
7a9a56be 94 uint32_t cmd_flags,
197f4d6a
GR
95 uint16_t token,
96 uint8_t irq_index,
7a9a56be 97 struct dpmcp_irq_cfg *irq_cfg);
197f4d6a 98
197f4d6a 99int dpmcp_get_irq(struct fsl_mc_io *mc_io,
7a9a56be 100 uint32_t cmd_flags,
197f4d6a
GR
101 uint16_t token,
102 uint8_t irq_index,
103 int *type,
7a9a56be 104 struct dpmcp_irq_cfg *irq_cfg);
197f4d6a 105
197f4d6a 106int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io,
7a9a56be 107 uint32_t cmd_flags,
197f4d6a
GR
108 uint16_t token,
109 uint8_t irq_index,
110 uint8_t en);
111
197f4d6a 112int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io,
7a9a56be 113 uint32_t cmd_flags,
197f4d6a
GR
114 uint16_t token,
115 uint8_t irq_index,
116 uint8_t *en);
117
197f4d6a 118int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io,
7a9a56be 119 uint32_t cmd_flags,
197f4d6a
GR
120 uint16_t token,
121 uint8_t irq_index,
122 uint32_t mask);
123
197f4d6a 124int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io,
7a9a56be 125 uint32_t cmd_flags,
197f4d6a
GR
126 uint16_t token,
127 uint8_t irq_index,
128 uint32_t *mask);
129
197f4d6a 130int dpmcp_get_irq_status(struct fsl_mc_io *mc_io,
7a9a56be 131 uint32_t cmd_flags,
197f4d6a
GR
132 uint16_t token,
133 uint8_t irq_index,
134 uint32_t *status);
135
197f4d6a 136int dpmcp_clear_irq_status(struct fsl_mc_io *mc_io,
7a9a56be 137 uint32_t cmd_flags,
197f4d6a
GR
138 uint16_t token,
139 uint8_t irq_index,
140 uint32_t status);
141
142/**
143 * struct dpmcp_attr - Structure representing DPMCP attributes
144 * @id: DPMCP object ID
145 * @version: DPMCP version
146 */
147struct dpmcp_attr {
148 int id;
149 /**
150 * struct version - Structure representing DPMCP version
151 * @major: DPMCP major version
152 * @minor: DPMCP minor version
153 */
154 struct {
155 uint16_t major;
156 uint16_t minor;
157 } version;
158};
159
197f4d6a 160int dpmcp_get_attributes(struct fsl_mc_io *mc_io,
7a9a56be 161 uint32_t cmd_flags,
197f4d6a
GR
162 uint16_t token,
163 struct dpmcp_attr *attr);
164
165#endif /* __FSL_DPMCP_H */