mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
ALSA: compress_offload: Add SNDRV_COMPRESS_TSTAMP64 ioctl
The previous patch introduced the internal infrastructure for handling 64-bit timestamps. This patch exposes this capability to user-space. Define the new ioctl command SNDRV_COMPRESS_TSTAMP64, which allows applications to fetch the overflow-safe struct snd_compr_tstamp64. The ioctl dispatch table is updated to handle the new command by calling a new snd_compr_tstamp64 handler, while the legacy path is renamed to snd_compr_tstamp32 for clarity. This patch bumps the SNDRV_COMPRESS_VERSION to 0.4.0. Reviewed-by: Miller Liang <millerliang@google.com> Tested-by: Joris Verhaegen <verhaegen@google.com> Signed-off-by: Joris Verhaegen <verhaegen@google.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Acked-by: Mark Brown <broonie@kernel.org> Acked-by: Vinod Koul <vkoul@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> Link: https://patch.msgid.link/20250905091301.2711705-3-verhaegen@google.com
This commit is contained in:
parent
2c92e2fbe9
commit
f20a53974f
2 changed files with 16 additions and 8 deletions
|
|
@ -13,8 +13,7 @@
|
|||
#include <sound/asound.h>
|
||||
#include <sound/compress_params.h>
|
||||
|
||||
|
||||
#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 3, 0)
|
||||
#define SNDRV_COMPRESS_VERSION SNDRV_PROTOCOL_VERSION(0, 4, 0)
|
||||
/**
|
||||
* struct snd_compressed_buffer - compressed buffer
|
||||
* @fragment_size: size of buffer fragment in bytes
|
||||
|
|
@ -208,6 +207,7 @@ struct snd_compr_task_status {
|
|||
* Note: only codec params can be changed runtime and stream params cant be
|
||||
* SNDRV_COMPRESS_GET_PARAMS: Query codec params
|
||||
* SNDRV_COMPRESS_TSTAMP: get the current timestamp value
|
||||
* SNDRV_COMPRESS_TSTAMP64: get the current timestamp value in 64 bit format
|
||||
* SNDRV_COMPRESS_AVAIL: get the current buffer avail value.
|
||||
* This also queries the tstamp properties
|
||||
* SNDRV_COMPRESS_PAUSE: Pause the running stream
|
||||
|
|
@ -230,6 +230,7 @@ struct snd_compr_task_status {
|
|||
struct snd_compr_metadata)
|
||||
#define SNDRV_COMPRESS_TSTAMP _IOR('C', 0x20, struct snd_compr_tstamp)
|
||||
#define SNDRV_COMPRESS_AVAIL _IOR('C', 0x21, struct snd_compr_avail)
|
||||
#define SNDRV_COMPRESS_TSTAMP64 _IOR('C', 0x22, struct snd_compr_tstamp64)
|
||||
#define SNDRV_COMPRESS_PAUSE _IO('C', 0x30)
|
||||
#define SNDRV_COMPRESS_RESUME _IO('C', 0x31)
|
||||
#define SNDRV_COMPRESS_START _IO('C', 0x32)
|
||||
|
|
|
|||
|
|
@ -736,18 +736,23 @@ snd_compr_set_metadata(struct snd_compr_stream *stream, unsigned long arg)
|
|||
return retval;
|
||||
}
|
||||
|
||||
static inline int
|
||||
snd_compr_tstamp(struct snd_compr_stream *stream, unsigned long arg)
|
||||
static inline int snd_compr_tstamp(struct snd_compr_stream *stream,
|
||||
unsigned long arg, bool is_32bit)
|
||||
{
|
||||
struct snd_compr_tstamp64 tstamp64 = { 0 };
|
||||
struct snd_compr_tstamp tstamp32 = { 0 };
|
||||
const void *copy_from = &tstamp64;
|
||||
size_t copy_size = sizeof(tstamp64);
|
||||
int ret;
|
||||
|
||||
ret = snd_compr_update_tstamp(stream, &tstamp64);
|
||||
if (ret == 0) {
|
||||
snd_compr_tstamp32_from_64(&tstamp32, &tstamp64);
|
||||
ret = copy_to_user((struct snd_compr_tstamp __user *)arg,
|
||||
&tstamp32, sizeof(tstamp32)) ?
|
||||
if (is_32bit) {
|
||||
snd_compr_tstamp32_from_64(&tstamp32, &tstamp64);
|
||||
copy_from = &tstamp32;
|
||||
copy_size = sizeof(tstamp32);
|
||||
}
|
||||
ret = copy_to_user((void __user *)arg, copy_from, copy_size) ?
|
||||
-EFAULT :
|
||||
0;
|
||||
}
|
||||
|
|
@ -1327,7 +1332,9 @@ static long snd_compr_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
|
|||
|
||||
switch (cmd) {
|
||||
case SNDRV_COMPRESS_TSTAMP:
|
||||
return snd_compr_tstamp(stream, arg);
|
||||
return snd_compr_tstamp(stream, arg, true);
|
||||
case SNDRV_COMPRESS_TSTAMP64:
|
||||
return snd_compr_tstamp(stream, arg, false);
|
||||
case SNDRV_COMPRESS_AVAIL:
|
||||
return snd_compr_ioctl_avail(stream, arg);
|
||||
case SNDRV_COMPRESS_PAUSE:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue