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 39 struct fsl_mc_io; 40 41 int 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 49 int 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 */ 58 struct dpmcp_cfg { 59 int portal_id; 60 }; 61 62 int dpmcp_create(struct fsl_mc_io *mc_io, 63 uint32_t cmd_flags, 64 const struct dpmcp_cfg *cfg, 65 uint16_t *token); 66 67 int dpmcp_destroy(struct fsl_mc_io *mc_io, 68 uint32_t cmd_flags, 69 uint16_t token); 70 71 int 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 * @irq_num: A user defined number associated with this IRQ 86 */ 87 struct dpmcp_irq_cfg { 88 uint64_t paddr; 89 uint32_t val; 90 int irq_num; 91 }; 92 93 int 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 99 int 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 106 int 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 112 int 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 118 int 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 124 int 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 130 int 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 136 /** 137 * struct dpmcp_attr - Structure representing DPMCP attributes 138 * @id: DPMCP object ID 139 * @version: DPMCP version 140 */ 141 struct dpmcp_attr { 142 int id; 143 /** 144 * struct version - Structure representing DPMCP version 145 * @major: DPMCP major version 146 * @minor: DPMCP minor version 147 */ 148 struct { 149 uint16_t major; 150 uint16_t minor; 151 } version; 152 }; 153 154 int dpmcp_get_attributes(struct fsl_mc_io *mc_io, 155 uint32_t cmd_flags, 156 uint16_t token, 157 struct dpmcp_attr *attr); 158 159 #endif /* __FSL_DPMCP_H */ 160