Move poll_* callbacks to fast_ops

Moved poll_* callbacks to fast_ops.
These callbacks may be called frequently indeed.
This commit is contained in:
Takashi Iwai 2005-05-23 09:03:16 +00:00
parent dae58c0192
commit dd37bb20ee
25 changed files with 45 additions and 72 deletions

View file

@ -1273,8 +1273,8 @@ int snd_pcm_unlink(snd_pcm_t *pcm)
int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm)
{
assert(pcm);
if (pcm->ops->poll_descriptors_count)
return pcm->ops->poll_descriptors_count(pcm->op_arg);
if (pcm->fast_ops->poll_descriptors_count)
return pcm->fast_ops->poll_descriptors_count(pcm->fast_op_arg);
return pcm->poll_fd_count;
}
@ -1305,11 +1305,9 @@ int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm)
*/
int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space)
{
int err;
assert(pcm && pfds);
if (pcm->ops->poll_descriptors)
return pcm->ops->poll_descriptors(pcm->op_arg, pfds, space);
if (pcm->fast_ops->poll_descriptors)
return pcm->fast_ops->poll_descriptors(pcm->fast_op_arg, pfds, space);
if (pcm->poll_fd < 0) {
SNDMSG("poll_fd < 0");
return -EIO;
@ -1342,8 +1340,8 @@ int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int s
int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
{
assert(pcm && pfds && revents);
if (pcm->ops->poll_revents)
return pcm->ops->poll_revents(pcm->op_arg, pfds, nfds, revents);
if (pcm->fast_ops->poll_revents)
return pcm->fast_ops->poll_revents(pcm->fast_op_arg, pfds, nfds, revents);
if (nfds == 1) {
*revents = pfds->revents;
return 0;

View file

@ -529,9 +529,6 @@ static snd_pcm_ops_t snd_pcm_adpcm_ops = {
.dump = snd_pcm_adpcm_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -400,9 +400,6 @@ static snd_pcm_ops_t snd_pcm_alaw_ops = {
.dump = snd_pcm_alaw_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -163,9 +163,6 @@ static snd_pcm_ops_t snd_pcm_copy_ops = {
.dump = snd_pcm_copy_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -673,7 +673,6 @@ static snd_pcm_ops_t snd_pcm_dmix_ops = {
.dump = snd_pcm_dmix_dump,
.nonblock = snd_pcm_direct_nonblock,
.async = snd_pcm_direct_async,
.poll_revents = snd_pcm_dmix_poll_revents,
.mmap = snd_pcm_direct_mmap,
.munmap = snd_pcm_direct_munmap,
};
@ -701,6 +700,9 @@ static snd_pcm_fast_ops_t snd_pcm_dmix_fast_ops = {
.readn = snd_pcm_dmix_readn,
.avail_update = snd_pcm_dmix_avail_update,
.mmap_commit = snd_pcm_dmix_mmap_commit,
.poll_descriptors = NULL,
.poll_descriptors_count = NULL,
.poll_revents = snd_pcm_dmix_poll_revents,
};
/**

View file

@ -538,7 +538,6 @@ static snd_pcm_ops_t snd_pcm_dshare_ops = {
.dump = snd_pcm_dshare_dump,
.nonblock = snd_pcm_direct_nonblock,
.async = snd_pcm_direct_async,
.poll_revents = snd_pcm_direct_poll_revents,
.mmap = snd_pcm_direct_mmap,
.munmap = snd_pcm_direct_munmap,
};
@ -566,6 +565,9 @@ static snd_pcm_fast_ops_t snd_pcm_dshare_fast_ops = {
.readn = snd_pcm_dshare_readn,
.avail_update = snd_pcm_dshare_avail_update,
.mmap_commit = snd_pcm_dshare_mmap_commit,
.poll_descriptors = NULL,
.poll_descriptors_count = NULL,
.poll_revents = snd_pcm_direct_poll_revents,
};
/**

View file

@ -439,7 +439,6 @@ static snd_pcm_ops_t snd_pcm_dsnoop_ops = {
.dump = snd_pcm_dsnoop_dump,
.nonblock = snd_pcm_direct_nonblock,
.async = snd_pcm_direct_async,
.poll_revents = snd_pcm_direct_poll_revents,
.mmap = snd_pcm_direct_mmap,
.munmap = snd_pcm_direct_munmap,
};
@ -467,6 +466,9 @@ static snd_pcm_fast_ops_t snd_pcm_dsnoop_fast_ops = {
.readn = snd_pcm_mmap_readn,
.avail_update = snd_pcm_dsnoop_avail_update,
.mmap_commit = snd_pcm_dsnoop_mmap_commit,
.poll_descriptors = NULL,
.poll_descriptors_count = NULL,
.poll_revents = snd_pcm_direct_poll_revents,
};
/**

View file

@ -423,9 +423,6 @@ static snd_pcm_ops_t snd_pcm_extplug_ops = {
.dump = snd_pcm_extplug_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -348,9 +348,6 @@ static snd_pcm_ops_t snd_pcm_file_ops = {
.dump = snd_pcm_file_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_file_mmap,
.munmap = snd_pcm_file_munmap,
};
@ -378,6 +375,9 @@ static snd_pcm_fast_ops_t snd_pcm_file_fast_ops = {
.readn = snd_pcm_file_readn,
.avail_update = snd_pcm_generic_avail_update,
.mmap_commit = snd_pcm_file_mmap_commit,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
};
/**

View file

@ -130,9 +130,6 @@ static snd_pcm_ops_t snd_pcm_hooks_ops = {
.dump = snd_pcm_hooks_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};
@ -160,6 +157,9 @@ static snd_pcm_fast_ops_t snd_pcm_hooks_fast_ops = {
.readn = snd_pcm_generic_readn,
.avail_update = snd_pcm_generic_avail_update,
.mmap_commit = snd_pcm_generic_mmap_commit,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
};
/**

View file

@ -1002,7 +1002,6 @@ static snd_pcm_ops_t snd_pcm_hw_ops = {
.dump = snd_pcm_hw_dump,
.nonblock = snd_pcm_hw_nonblock,
.async = snd_pcm_hw_async,
.poll_revents = NULL,
.mmap = snd_pcm_hw_mmap,
.munmap = snd_pcm_hw_munmap,
};
@ -1030,6 +1029,9 @@ static snd_pcm_fast_ops_t snd_pcm_hw_fast_ops = {
.readn = snd_pcm_hw_readn,
.avail_update = snd_pcm_hw_avail_update,
.mmap_commit = snd_pcm_hw_mmap_commit,
.poll_descriptors = NULL,
.poll_descriptors_count = NULL,
.poll_revents = NULL,
};
/**

View file

@ -423,9 +423,6 @@ static snd_pcm_ops_t snd_pcm_iec958_ops = {
.dump = snd_pcm_iec958_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -712,9 +712,6 @@ static snd_pcm_ops_t snd_pcm_ioplug_ops = {
.close = snd_pcm_ioplug_close,
.nonblock = snd_pcm_ioplug_nonblock,
.async = snd_pcm_ioplug_async,
.poll_descriptors_count = snd_pcm_ioplug_poll_descriptors_count,
.poll_descriptors = snd_pcm_ioplug_poll_descriptors,
.poll_revents = snd_pcm_ioplug_poll_revents,
.info = snd_pcm_ioplug_info,
.hw_refine = snd_pcm_ioplug_hw_refine,
.hw_params = snd_pcm_ioplug_hw_params,
@ -749,6 +746,9 @@ static snd_pcm_fast_ops_t snd_pcm_ioplug_fast_ops = {
.readn = snd_pcm_ioplug_readn,
.avail_update = snd_pcm_ioplug_avail_update,
.mmap_commit = snd_pcm_ioplug_mmap_commit,
.poll_descriptors_count = snd_pcm_ioplug_poll_descriptors_count,
.poll_descriptors = snd_pcm_ioplug_poll_descriptors,
.poll_revents = snd_pcm_ioplug_poll_revents,
};
#endif /* !DOC_HIDDEN */

View file

@ -707,9 +707,6 @@ static snd_pcm_ops_t snd_pcm_ladspa_ops = {
.dump = snd_pcm_ladspa_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -359,9 +359,6 @@ static snd_pcm_ops_t snd_pcm_lfloat_ops = {
.dump = snd_pcm_lfloat_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -416,9 +416,6 @@ static snd_pcm_ops_t snd_pcm_linear_ops = {
.dump = snd_pcm_linear_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -129,9 +129,6 @@ typedef struct {
int (*close)(snd_pcm_t *pcm);
int (*nonblock)(snd_pcm_t *pcm, int nonblock);
int (*async)(snd_pcm_t *pcm, int sig, pid_t pid);
int (*poll_descriptors_count)(snd_pcm_t *pcm);
int (*poll_descriptors)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
int (*poll_revents)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
int (*info)(snd_pcm_t *pcm, snd_pcm_info_t *info);
int (*hw_refine)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
int (*hw_params)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
@ -166,6 +163,9 @@ typedef struct {
snd_pcm_sframes_t (*readn)(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
snd_pcm_sframes_t (*avail_update)(snd_pcm_t *pcm);
snd_pcm_sframes_t (*mmap_commit)(snd_pcm_t *pcm, snd_pcm_uframes_t offset, snd_pcm_uframes_t size);
int (*poll_descriptors_count)(snd_pcm_t *pcm);
int (*poll_descriptors)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
int (*poll_revents)(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
} snd_pcm_fast_ops_t;
struct _snd_pcm {
@ -211,9 +211,9 @@ struct _snd_pcm {
snd_pcm_rbptr_t appl;
snd_pcm_rbptr_t hw;
snd_pcm_uframes_t min_align;
unsigned int mmap_rw: 1;
unsigned int mmap_shadow: 1;
unsigned int donot_close: 1;
unsigned int mmap_rw: 1; /* use always mmapped buffer */
unsigned int mmap_shadow: 1; /* don't call actual mmap */
unsigned int donot_close: 1; /* don't close this PCM */
snd_pcm_channel_info_t *mmap_channels;
snd_pcm_channel_area_t *running_areas;
snd_pcm_channel_area_t *stopped_areas;

View file

@ -512,9 +512,6 @@ static snd_pcm_ops_t snd_pcm_meter_ops = {
.dump = snd_pcm_meter_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};
@ -539,6 +536,9 @@ static snd_pcm_fast_ops_t snd_pcm_meter_fast_ops = {
.readn = snd_pcm_mmap_readn,
.avail_update = snd_pcm_meter_avail_update,
.mmap_commit = snd_pcm_meter_mmap_commit,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
};
/**

View file

@ -415,9 +415,6 @@ static snd_pcm_ops_t snd_pcm_mulaw_ops = {
.dump = snd_pcm_mulaw_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -704,9 +704,6 @@ static snd_pcm_ops_t snd_pcm_multi_ops = {
.dump = snd_pcm_multi_dump,
.nonblock = snd_pcm_multi_nonblock,
.async = snd_pcm_multi_async,
.poll_descriptors_count = snd_pcm_multi_poll_descriptors_count,
.poll_descriptors = snd_pcm_multi_poll_descriptors,
.poll_revents = snd_pcm_multi_poll_revents,
.mmap = snd_pcm_multi_mmap,
.munmap = snd_pcm_multi_munmap,
};
@ -734,6 +731,9 @@ static snd_pcm_fast_ops_t snd_pcm_multi_fast_ops = {
.unlink = snd_pcm_multi_unlink,
.avail_update = snd_pcm_multi_avail_update,
.mmap_commit = snd_pcm_multi_mmap_commit,
.poll_descriptors_count = snd_pcm_multi_poll_descriptors_count,
.poll_descriptors = snd_pcm_multi_poll_descriptors,
.poll_revents = snd_pcm_multi_poll_revents,
};
/**

View file

@ -953,9 +953,6 @@ static snd_pcm_ops_t snd_pcm_plug_ops = {
.dump = snd_pcm_plug_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_plug_mmap,
.munmap = snd_pcm_plug_munmap,
};

View file

@ -567,6 +567,9 @@ snd_pcm_fast_ops_t snd_pcm_plugin_fast_ops = {
.readn = snd_pcm_plugin_readn,
.avail_update = snd_pcm_plugin_avail_update,
.mmap_commit = snd_pcm_plugin_mmap_commit,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
};
#endif

View file

@ -1381,6 +1381,9 @@ static snd_pcm_fast_ops_t snd_pcm_rate_fast_ops = {
.readn = snd_pcm_mmap_readn,
.avail_update = snd_pcm_rate_avail_update,
.mmap_commit = snd_pcm_rate_mmap_commit,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_rate_poll_descriptors,
.poll_revents = snd_pcm_rate_poll_revents,
};
static snd_pcm_ops_t snd_pcm_rate_ops = {
@ -1394,9 +1397,6 @@ static snd_pcm_ops_t snd_pcm_rate_ops = {
.dump = snd_pcm_rate_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_revents = snd_pcm_rate_poll_revents,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_rate_poll_descriptors,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -757,9 +757,6 @@ static snd_pcm_ops_t snd_pcm_route_ops = {
.dump = snd_pcm_route_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};

View file

@ -583,9 +583,6 @@ static snd_pcm_ops_t snd_pcm_softvol_ops = {
.dump = snd_pcm_softvol_dump,
.nonblock = snd_pcm_generic_nonblock,
.async = snd_pcm_generic_async,
.poll_descriptors_count = snd_pcm_generic_poll_descriptors_count,
.poll_descriptors = snd_pcm_generic_poll_descriptors,
.poll_revents = snd_pcm_generic_poll_revents,
.mmap = snd_pcm_generic_mmap,
.munmap = snd_pcm_generic_munmap,
};