0001
0002
0003
0004
0005
0006 #include <linux/kernel.h>
0007 #include <linux/fsl/mc.h>
0008
0009 #include "fsl-mc-private.h"
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 int dpcon_open(struct fsl_mc_io *mc_io,
0029 u32 cmd_flags,
0030 int dpcon_id,
0031 u16 *token)
0032 {
0033 struct fsl_mc_command cmd = { 0 };
0034 struct dpcon_cmd_open *dpcon_cmd;
0035 int err;
0036
0037
0038 cmd.header = mc_encode_cmd_header(DPCON_CMDID_OPEN,
0039 cmd_flags,
0040 0);
0041 dpcon_cmd = (struct dpcon_cmd_open *)cmd.params;
0042 dpcon_cmd->dpcon_id = cpu_to_le32(dpcon_id);
0043
0044
0045 err = mc_send_command(mc_io, &cmd);
0046 if (err)
0047 return err;
0048
0049
0050 *token = mc_cmd_hdr_read_token(&cmd);
0051
0052 return 0;
0053 }
0054 EXPORT_SYMBOL_GPL(dpcon_open);
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067 int dpcon_close(struct fsl_mc_io *mc_io,
0068 u32 cmd_flags,
0069 u16 token)
0070 {
0071 struct fsl_mc_command cmd = { 0 };
0072
0073
0074 cmd.header = mc_encode_cmd_header(DPCON_CMDID_CLOSE,
0075 cmd_flags,
0076 token);
0077
0078
0079 return mc_send_command(mc_io, &cmd);
0080 }
0081 EXPORT_SYMBOL_GPL(dpcon_close);
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091 int dpcon_enable(struct fsl_mc_io *mc_io,
0092 u32 cmd_flags,
0093 u16 token)
0094 {
0095 struct fsl_mc_command cmd = { 0 };
0096
0097
0098 cmd.header = mc_encode_cmd_header(DPCON_CMDID_ENABLE,
0099 cmd_flags,
0100 token);
0101
0102
0103 return mc_send_command(mc_io, &cmd);
0104 }
0105 EXPORT_SYMBOL_GPL(dpcon_enable);
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115 int dpcon_disable(struct fsl_mc_io *mc_io,
0116 u32 cmd_flags,
0117 u16 token)
0118 {
0119 struct fsl_mc_command cmd = { 0 };
0120
0121
0122 cmd.header = mc_encode_cmd_header(DPCON_CMDID_DISABLE,
0123 cmd_flags,
0124 token);
0125
0126
0127 return mc_send_command(mc_io, &cmd);
0128 }
0129 EXPORT_SYMBOL_GPL(dpcon_disable);
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139 int dpcon_reset(struct fsl_mc_io *mc_io,
0140 u32 cmd_flags,
0141 u16 token)
0142 {
0143 struct fsl_mc_command cmd = { 0 };
0144
0145
0146 cmd.header = mc_encode_cmd_header(DPCON_CMDID_RESET,
0147 cmd_flags, token);
0148
0149
0150 return mc_send_command(mc_io, &cmd);
0151 }
0152 EXPORT_SYMBOL_GPL(dpcon_reset);
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
0164 u32 cmd_flags,
0165 u16 token,
0166 struct dpcon_attr *attr)
0167 {
0168 struct fsl_mc_command cmd = { 0 };
0169 struct dpcon_rsp_get_attr *dpcon_rsp;
0170 int err;
0171
0172
0173 cmd.header = mc_encode_cmd_header(DPCON_CMDID_GET_ATTR,
0174 cmd_flags,
0175 token);
0176
0177
0178 err = mc_send_command(mc_io, &cmd);
0179 if (err)
0180 return err;
0181
0182
0183 dpcon_rsp = (struct dpcon_rsp_get_attr *)cmd.params;
0184 attr->id = le32_to_cpu(dpcon_rsp->id);
0185 attr->qbman_ch_id = le16_to_cpu(dpcon_rsp->qbman_ch_id);
0186 attr->num_priorities = dpcon_rsp->num_priorities;
0187
0188 return 0;
0189 }
0190 EXPORT_SYMBOL_GPL(dpcon_get_attributes);
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 int dpcon_set_notification(struct fsl_mc_io *mc_io,
0202 u32 cmd_flags,
0203 u16 token,
0204 struct dpcon_notification_cfg *cfg)
0205 {
0206 struct fsl_mc_command cmd = { 0 };
0207 struct dpcon_cmd_set_notification *dpcon_cmd;
0208
0209
0210 cmd.header = mc_encode_cmd_header(DPCON_CMDID_SET_NOTIFICATION,
0211 cmd_flags,
0212 token);
0213 dpcon_cmd = (struct dpcon_cmd_set_notification *)cmd.params;
0214 dpcon_cmd->dpio_id = cpu_to_le32(cfg->dpio_id);
0215 dpcon_cmd->priority = cfg->priority;
0216 dpcon_cmd->user_ctx = cpu_to_le64(cfg->user_ctx);
0217
0218
0219 return mc_send_command(mc_io, &cmd);
0220 }
0221 EXPORT_SYMBOL_GPL(dpcon_set_notification);