[Meego-kernel] [PATCH 2/6][RESEND] sst:new ioctl for lpe parameter tuning
Babu, Ramesh
ramesh.babu at intel.com
Mon Dec 20 02:13:06 PST 2010
From: Vinod Koul <vinod.koul at intel.com>
This patch adds new IOCTL for application interface.
Using parameter tuning IOCTL, application can fine
tune the audio firmware for it's requirement.
Signed-off-by: Vinod Koul <vinod.koul at intel.com>
Signed-off-by: Ramesh Babu K V <ramesh.babu at intel.com>
---
include/sound/intel_sst_ioctl.h | 8 +++++++
sound/pci/sst/intel_sst_app_interface.c | 35 +++++++++++++++++++++++++++++++
sound/pci/sst/intel_sst_common.h | 4 +-
sound/pci/sst/intel_sst_fw_ipc.h | 1 +
sound/pci/sst/intel_sst_ipc.c | 18 ++++++++++++++++
5 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/include/sound/intel_sst_ioctl.h b/include/sound/intel_sst_ioctl.h
index bebc395..d1ffc2d 100644
--- a/include/sound/intel_sst_ioctl.h
+++ b/include/sound/intel_sst_ioctl.h
@@ -400,6 +400,13 @@ struct snd_sst_dbufs {
struct snd_sst_buffs *obufs;
};
+struct snd_sst_tuning_params {
+ __u8 type;
+ __u8 str_id;
+ __u8 size;
+ __u8 rsvd;
+ unsigned long addr;
+} __attribute__ ((packed));
/*IOCTL defined here */
/*SST MMF IOCTLS only */
#define SNDRV_SST_STREAM_SET_PARAMS _IOR('L', 0x00, \
@@ -428,5 +435,6 @@ struct snd_sst_dbufs {
/*DSP Ioctls on /dev/intel_sst_ctrl only*/
#define SNDRV_SST_SET_ALGO _IOW('L', 0x30, struct snd_ppp_params *)
#define SNDRV_SST_GET_ALGO _IOWR('L', 0x31, struct snd_ppp_params *)
+#define SNDRV_SST_TUNING_PARAMS _IOW('L', 0x32, struct snd_sst_tuning_params *)
#endif /* __INTEL_SST_IOCTL_H__ */
diff --git a/sound/pci/sst/intel_sst_app_interface.c b/sound/pci/sst/intel_sst_app_interface.c
index cd78d72..a5c4d51 100644
--- a/sound/pci/sst/intel_sst_app_interface.c
+++ b/sound/pci/sst/intel_sst_app_interface.c
@@ -950,6 +950,32 @@ free_mem:
return retval;
}
+
+int sst_ioctl_tuning_params(unsigned long arg)
+{
+ struct snd_sst_tuning_params params;
+ struct ipc_post *msg;
+
+ if (copy_from_user(¶ms, (void __user *)arg, sizeof(params)))
+ return -EFAULT;
+ if (params.size > SST_MAILBOX_SIZE)
+ return -ENOMEM;
+ pr_debug("sst: Parameter %d, Stream %d, Size %d\n", params.type,
+ params.str_id, params.size);
+ if (sst_create_large_msg(&msg))
+ return -ENOMEM;
+ sst_fill_header(&msg->header, IPC_IA_TUNING_PARAMS, 1, params.str_id);
+ msg->header.part.data = sizeof(u32) + sizeof(params) + params.size;
+ memcpy(msg->mailbox_data, &msg->header.full, sizeof(u32));
+ memcpy(msg->mailbox_data + sizeof(u32), ¶ms, sizeof(params));
+ if (copy_from_user(msg->mailbox_data + sizeof(params),
+ (void __user *)params.addr, params.size)) {
+ kfree(msg->mailbox_data);
+ kfree(msg);
+ return -EFAULT;
+ }
+ return sst_send_algo_ipc(&msg);
+}
/**
* intel_sst_ioctl - recieves the device ioctl's
* @file_ptr:pointer to file
@@ -1381,6 +1407,15 @@ long intel_sst_ioctl(struct file *file_ptr, unsigned int cmd, unsigned long arg)
}
retval = intel_sst_ioctl_dsp(cmd, arg);
break;
+
+ case _IOC_NR(SNDRV_SST_TUNING_PARAMS):
+ if (minor != AM_MODULE) {
+ retval = -EBADRQC;
+ break;
+ }
+ retval = sst_ioctl_tuning_params(arg);
+ break;
+
default:
retval = -EINVAL;
}
diff --git a/sound/pci/sst/intel_sst_common.h b/sound/pci/sst/intel_sst_common.h
index 667f1f9..67a1350 100644
--- a/sound/pci/sst/intel_sst_common.h
+++ b/sound/pci/sst/intel_sst_common.h
@@ -28,8 +28,8 @@
* Common private declarations for SST
*/
-#define SST_DRIVER_VERSION "1.2.14"
-#define SST_VERSION_NUM 0x1214
+#define SST_DRIVER_VERSION "1.2.15"
+#define SST_VERSION_NUM 0x1215
/* driver names */
#define SST_DRV_NAME "intel_sst_driver"
diff --git a/sound/pci/sst/intel_sst_fw_ipc.h b/sound/pci/sst/intel_sst_fw_ipc.h
index ed237c3..7bfa42d 100644
--- a/sound/pci/sst/intel_sst_fw_ipc.h
+++ b/sound/pci/sst/intel_sst_fw_ipc.h
@@ -71,6 +71,7 @@
#define IPC_IA_DECODE_FRAMES 0x18
#define IPC_IA_ALG_PARAMS 0x1A
+#define IPC_IA_TUNING_PARAMS 0x1B
/* I2L Stream config/control msgs */
#define IPC_IA_ALLOC_STREAM 0x20 /* Allocate a stream ID */
diff --git a/sound/pci/sst/intel_sst_ipc.c b/sound/pci/sst/intel_sst_ipc.c
index 4ff6470..227846b 100644
--- a/sound/pci/sst/intel_sst_ipc.c
+++ b/sound/pci/sst/intel_sst_ipc.c
@@ -404,6 +404,24 @@ void sst_process_reply(struct work_struct *work)
}
break;
}
+
+ case IPC_IA_TUNING_PARAMS: {
+ pr_debug("sst:IPC_TUNING_PARAMS resp: %x\n", msg->header.full);
+ pr_debug("sst: data value %x\n", msg->header.part.data);
+ if (msg->header.part.large) {
+ pr_debug("sst: alg set failed\n");
+ sst_drv_ctx->ppp_params_blk.ret_code =
+ -msg->header.part.data;
+ } else {
+ pr_debug("sst: alg set success\n");
+ sst_drv_ctx->ppp_params_blk.ret_code = 0;
+ }
+ if (sst_drv_ctx->ppp_params_blk.on == true) {
+ sst_drv_ctx->ppp_params_blk.condition = true;
+ wake_up(&sst_drv_ctx->wait_queue);
+ }
+ }
+
case IPC_IA_GET_FW_INFO: {
struct snd_sst_fw_info *fw_info =
(struct snd_sst_fw_info *)msg->mailbox;
--
1.6.2.5
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-sst-new-ioctl-for-lpe-parameter-tuning.patch
Type: application/octet-stream
Size: 5112 bytes
Desc: 0002-sst-new-ioctl-for-lpe-parameter-tuning.patch
URL: <http://lists.meego.com/pipermail/meego-kernel/attachments/20101220/5843d29a/attachment.obj>
More information about the MeeGo-kernel
mailing list