{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -EINVAL);
+ rdev = rmidi->private_data;
return snd_virmidi_dev_receive_event(rdev, ev);
}
{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+ rdev = private_data;
if (!(rdev->flags & SNDRV_VIRMIDI_USE))
return 0; /* ignored */
return snd_virmidi_dev_receive_event(rdev, ev);
*/
static void snd_virmidi_input_trigger(snd_rawmidi_substream_t * substream, int up)
{
- snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return);
+ snd_virmidi_t *vmidi = substream->runtime->private_data;
if (up) {
vmidi->trigger = 1;
*/
static void snd_virmidi_output_trigger(snd_rawmidi_substream_t * substream, int up)
{
- snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return);
+ snd_virmidi_t *vmidi = substream->runtime->private_data;
int count, res;
unsigned char buf[32], *pbuf;
*/
static int snd_virmidi_input_open(snd_rawmidi_substream_t * substream)
{
- snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, substream->rmidi->private_data, return -EINVAL);
+ snd_virmidi_dev_t *rdev = substream->rmidi->private_data;
snd_rawmidi_runtime_t *runtime = substream->runtime;
snd_virmidi_t *vmidi;
unsigned long flags;
- vmidi = snd_magic_kcalloc(snd_virmidi_t, 0, GFP_KERNEL);
+ vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL);
if (vmidi == NULL)
return -ENOMEM;
vmidi->substream = substream;
if (snd_midi_event_new(0, &vmidi->parser) < 0) {
- snd_magic_kfree(vmidi);
+ kfree(vmidi);
return -ENOMEM;
}
vmidi->seq_mode = rdev->seq_mode;
*/
static int snd_virmidi_output_open(snd_rawmidi_substream_t * substream)
{
- snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, substream->rmidi->private_data, return -EINVAL);
+ snd_virmidi_dev_t *rdev = substream->rmidi->private_data;
snd_rawmidi_runtime_t *runtime = substream->runtime;
snd_virmidi_t *vmidi;
- vmidi = snd_magic_kcalloc(snd_virmidi_t, 0, GFP_KERNEL);
+ vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL);
if (vmidi == NULL)
return -ENOMEM;
vmidi->substream = substream;
if (snd_midi_event_new(MAX_MIDI_EVENT_BUF, &vmidi->parser) < 0) {
- snd_magic_kfree(vmidi);
+ kfree(vmidi);
return -ENOMEM;
}
vmidi->seq_mode = rdev->seq_mode;
*/
static int snd_virmidi_input_close(snd_rawmidi_substream_t * substream)
{
- snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return -EINVAL);
+ snd_virmidi_t *vmidi = substream->runtime->private_data;
snd_midi_event_free(vmidi->parser);
list_del(&vmidi->list);
substream->runtime->private_data = NULL;
- snd_magic_kfree(vmidi);
+ kfree(vmidi);
return 0;
}
*/
static int snd_virmidi_output_close(snd_rawmidi_substream_t * substream)
{
- snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return -EINVAL);
+ snd_virmidi_t *vmidi = substream->runtime->private_data;
snd_midi_event_free(vmidi->parser);
substream->runtime->private_data = NULL;
- snd_magic_kfree(vmidi);
+ kfree(vmidi);
return 0;
}
{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+ rdev = private_data;
if (!try_module_get(rdev->card->module))
return -EFAULT;
rdev->flags |= SNDRV_VIRMIDI_SUBSCRIBE;
{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+ rdev = private_data;
rdev->flags &= ~SNDRV_VIRMIDI_SUBSCRIBE;
module_put(rdev->card->module);
return 0;
{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+ rdev = private_data;
if (!try_module_get(rdev->card->module))
return -EFAULT;
rdev->flags |= SNDRV_VIRMIDI_USE;
{
snd_virmidi_dev_t *rdev;
- rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+ rdev = private_data;
rdev->flags &= ~SNDRV_VIRMIDI_USE;
module_put(rdev->card->module);
return 0;
int client;
snd_seq_client_callback_t callbacks;
snd_seq_port_callback_t pcallbacks;
- snd_seq_client_info_t info;
- snd_seq_port_info_t pinfo;
+ snd_seq_client_info_t *info;
+ snd_seq_port_info_t *pinfo;
int err;
if (rdev->client >= 0)
return 0;
+ info = kmalloc(sizeof(*info), GFP_KERNEL);
+ pinfo = kmalloc(sizeof(*pinfo), GFP_KERNEL);
+ if (! info || ! pinfo) {
+ err = -ENOMEM;
+ goto __error;
+ }
+
memset(&callbacks, 0, sizeof(callbacks));
callbacks.private_data = rdev;
callbacks.allow_input = 1;
callbacks.allow_output = 1;
client = snd_seq_create_kernel_client(rdev->card, rdev->device, &callbacks);
- if (client < 0)
- return client;
+ if (client < 0) {
+ err = client;
+ goto __error;
+ }
rdev->client = client;
/* set client name */
- memset(&info, 0, sizeof(info));
- info.client = client;
- info.type = KERNEL_CLIENT;
- sprintf(info.name, "%s %d-%d", rdev->rmidi->name, rdev->card->number, rdev->device);
+ memset(info, 0, sizeof(*info));
+ info->client = client;
+ info->type = KERNEL_CLIENT;
+ sprintf(info->name, "%s %d-%d", rdev->rmidi->name, rdev->card->number, rdev->device);
snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_SET_CLIENT_INFO, &info);
/* create a port */
- memset(&pinfo, 0, sizeof(pinfo));
- pinfo.addr.client = client;
- sprintf(pinfo.name, "VirMIDI %d-%d", rdev->card->number, rdev->device);
+ memset(pinfo, 0, sizeof(*pinfo));
+ pinfo->addr.client = client;
+ sprintf(pinfo->name, "VirMIDI %d-%d", rdev->card->number, rdev->device);
/* set all capabilities */
- pinfo.capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SYNC_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE;
- pinfo.capability |= SNDRV_SEQ_PORT_CAP_READ | SNDRV_SEQ_PORT_CAP_SYNC_READ | SNDRV_SEQ_PORT_CAP_SUBS_READ;
- pinfo.capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
- pinfo.type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC;
- pinfo.midi_channels = 16;
+ pinfo->capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SYNC_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE;
+ pinfo->capability |= SNDRV_SEQ_PORT_CAP_READ | SNDRV_SEQ_PORT_CAP_SYNC_READ | SNDRV_SEQ_PORT_CAP_SUBS_READ;
+ pinfo->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
+ pinfo->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC;
+ pinfo->midi_channels = 16;
memset(&pcallbacks, 0, sizeof(pcallbacks));
pcallbacks.owner = THIS_MODULE;
pcallbacks.private_data = rdev;
pcallbacks.use = snd_virmidi_use;
pcallbacks.unuse = snd_virmidi_unuse;
pcallbacks.event_input = snd_virmidi_event_input;
- pinfo.kernel = &pcallbacks;
+ pinfo->kernel = &pcallbacks;
err = snd_seq_kernel_client_ctl(client, SNDRV_SEQ_IOCTL_CREATE_PORT, &pinfo);
if (err < 0) {
snd_seq_delete_kernel_client(client);
rdev->client = -1;
- return err;
+ goto __error;
}
- rdev->port = pinfo.addr.port;
- return 0; /* success */
+ rdev->port = pinfo->addr.port;
+ err = 0; /* success */
+
+ __error:
+ kfree(info);
+ kfree(pinfo);
+ return err;
}
*/
static int snd_virmidi_dev_register(snd_rawmidi_t *rmidi)
{
- snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -ENXIO);
+ snd_virmidi_dev_t *rdev = rmidi->private_data;
int err;
switch (rdev->seq_mode) {
*/
static int snd_virmidi_dev_unregister(snd_rawmidi_t *rmidi)
{
- snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -ENXIO);
+ snd_virmidi_dev_t *rdev = rmidi->private_data;
if (rdev->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH)
snd_virmidi_dev_detach_seq(rdev);
*/
static void snd_virmidi_free(snd_rawmidi_t *rmidi)
{
- snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return);
- snd_magic_kfree(rdev);
+ snd_virmidi_dev_t *rdev = rmidi->private_data;
+ kfree(rdev);
}
/*
&rmidi)) < 0)
return err;
strcpy(rmidi->name, rmidi->id);
- rdev = snd_magic_kcalloc(snd_virmidi_dev_t, 0, GFP_KERNEL);
+ rdev = kcalloc(1, sizeof(*rdev), GFP_KERNEL);
if (rdev == NULL) {
snd_device_free(card, rmidi);
return -ENOMEM;