typedef struct _snd_pcm_ops {
  int (*open)(snd_pcm_substream_t *substream);
  int (*close)(snd_pcm_substream_t *substream);
  int (*ioctl)(snd_pcm_substream_t *substream, unsigned int cmd, void *arg);
  int (*hw_params)(snd_pcm_substream_t *substream, snd_pcm_hw_params_t *params);
  int (*hw_free)(snd_pcm_substream_t *substream);
  int (*prepare)(snd_pcm_substream_t *substream);
  int (*trigger)(snd_pcm_substream_t *substream, int cmd);
  snd_pcm_uframes_t (*pointer)(snd_pcm_substream_t *substream);
  int (*copy)(snd_pcm_substream_t *substream, int channel, snd_pcm_uframes_t pos,
              void __user *buf, snd_pcm_ufreams_t count);
  struct page *(*page)(snd_pcm_substream_t *substream, unsigned long offset);
  int (*mmap)(snd_pcm_substream_t *substream, struct vm_area_struct *vma);
  int (*ack)(snd_pcm_substream_t *substream);
} snd_pcm_ops_t;