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 41int dpmcp_open(struct fsl_mc_io *mc_io, 42 uint32_t cmd_flags, 43 int dpmcp_id, 44 uint16_t *token); 45 46/* Get portal ID from pool */ 47#define DPMCP_GET_PORTAL_ID_FROM_POOL (-1) 48 49int dpmcp_close(struct fsl_mc_io *mc_io, 50 uint32_t cmd_flags, 51 uint16_t token); 52 53/** 54 * struct dpmcp_cfg - Structure representing DPMCP configuration 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 62int dpmcp_create(struct fsl_mc_io *mc_io, 63 uint32_t cmd_flags, 64 const struct dpmcp_cfg *cfg, 65 uint16_t *token); 66 67int dpmcp_destroy(struct fsl_mc_io *mc_io, 68 uint32_t cmd_flags, 69 uint16_t token); 70 71int dpmcp_reset(struct fsl_mc_io *mc_io, 72 uint32_t cmd_flags, 73 uint16_t token); 74 75/* IRQ */ 76/* IRQ Index */ 77#define DPMCP_IRQ_INDEX 0 78/* irq event - Indicates that the link state changed */ 79#define DPMCP_IRQ_EVENT_CMD_DONE 0x00000001 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}; 92 93int dpmcp_set_irq(struct fsl_mc_io *mc_io, 94 uint32_t cmd_flags, 95 uint16_t token, 96 uint8_t irq_index, 97 struct dpmcp_irq_cfg *irq_cfg); 98 99int dpmcp_get_irq(struct fsl_mc_io *mc_io, 100 uint32_t cmd_flags, 101 uint16_t token, 102 uint8_t irq_index, 103 int *type, 104 struct dpmcp_irq_cfg *irq_cfg); 105 106int dpmcp_set_irq_enable(struct fsl_mc_io *mc_io, 107 uint32_t cmd_flags, 108 uint16_t token, 109 uint8_t irq_index, 110 uint8_t en); 111 112int dpmcp_get_irq_enable(struct fsl_mc_io *mc_io, 113 uint32_t cmd_flags, 114 uint16_t token, 115 uint8_t irq_index, 116 uint8_t *en); 117 118int dpmcp_set_irq_mask(struct fsl_mc_io *mc_io, 119 uint32_t cmd_flags, 120 uint16_t token, 121 uint8_t irq_index, 122 uint32_t mask); 123 124int dpmcp_get_irq_mask(struct fsl_mc_io *mc_io, 125 uint32_t cmd_flags, 126 uint16_t token, 127 uint8_t irq_index, 128 uint32_t *mask); 129 130int dpmcp_get_irq_status(struct fsl_mc_io *mc_io, 131 uint32_t cmd_flags, 132 uint16_t token, 133 uint8_t irq_index, 134 uint32_t *status); 135 136int dpmcp_clear_irq_status(struct fsl_mc_io *mc_io, 137 uint32_t cmd_flags, 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 160int dpmcp_get_attributes(struct fsl_mc_io *mc_io, 161 uint32_t cmd_flags, 162 uint16_t token, 163 struct dpmcp_attr *attr); 164 165#endif /* __FSL_DPMCP_H */ 166