static int test_keyword_ctrl_set_data(struct comp_dev *dev, struct sof_ipc_ctrl_data *cdata) { int ret = 0; /* Check version from ABI header */ if (SOF_ABI_VERSION_INCOMPATIBLE(SOF_ABI_VERSION, cdata->data->abi)) { trace_keyword_error("test_keyword_cmd_set_data() error: " "invalid version"); return -EINVAL; } switch (cdata->cmd) { case SOF_CTRL_CMD_ENUM: trace_keyword("test_keyword_cmd_set_data(), SOF_CTRL_CMD_ENUM"); break; case SOF_CTRL_CMD_BINARY: trace_keyword("test_keyword_cmd_set_data(), " "SOF_CTRL_CMD_BINARY"); ret = test_keyword_ctrl_set_bin_data(dev, cdata); break; default: trace_keyword_error("test_keyword_cmd_set_data() " "error: invalid cdata->cmd"); ret = -EINVAL; break; } return ret; }
int snd_sof_ipc_valid(struct snd_sof_dev *sdev) { struct sof_ipc_fw_ready *ready = &sdev->fw_ready; struct sof_ipc_fw_version *v = &ready->version; dev_info(sdev->dev, "Firmware info: version %d:%d:%d-%s\n", v->major, v->minor, v->micro, v->tag); dev_info(sdev->dev, "Firmware: ABI %d:%d:%d Kernel ABI %d:%d:%d\n", SOF_ABI_VERSION_MAJOR(v->abi_version), SOF_ABI_VERSION_MINOR(v->abi_version), SOF_ABI_VERSION_PATCH(v->abi_version), SOF_ABI_MAJOR, SOF_ABI_MINOR, SOF_ABI_PATCH); if (SOF_ABI_VERSION_INCOMPATIBLE(SOF_ABI_VERSION, v->abi_version)) { dev_err(sdev->dev, "error: incompatible FW ABI version\n"); return -EINVAL; } if (v->abi_version > SOF_ABI_VERSION) { if (!IS_ENABLED(CONFIG_SND_SOC_SOF_STRICT_ABI_CHECKS)) { dev_warn(sdev->dev, "warn: FW ABI is more recent than kernel\n"); } else { dev_err(sdev->dev, "error: FW ABI is more recent than kernel\n"); return -EINVAL; } } if (ready->debug.bits.build) { dev_info(sdev->dev, "Firmware debug build %d on %s-%s - options:\n" " GDB: %s\n" " lock debug: %s\n" " lock vdebug: %s\n", v->build, v->date, v->time, ready->debug.bits.gdb ? "enabled" : "disabled", ready->debug.bits.locks ? "enabled" : "disabled", ready->debug.bits.locks_verbose ? "enabled" : "disabled"); } /* copy the fw_version into debugfs at first boot */ memcpy(&sdev->fw_version, v, sizeof(*v)); return 0; }