Exemplo n.º 1
0
static void acleanup_module(void)
{
        dev_remove_pack(&mirror_proto);
        printk("Remove mirror port: %s\n", mirror->name);
        dev_put(mirror);
        free_ports();
        printk("MIRROR module unloaded.\n");
}
Exemplo n.º 2
0
static
void* port_thread(void *arg)
{
	alsa_seqmidi_t *self = arg;

	while (self->keep_walking) {
		sem_wait(&self->port_sem);
		free_ports(self, self->port_del);
		update_ports(self);
	}
	debug_log("port_thread exited");
	return NULL;
}
Exemplo n.º 3
0
static
void stream_detach(alsa_seqmidi_t *self, int dir)
{
	stream_t *str = &self->stream[dir];
	int i;

	free_ports(self, str->new_ports);

	// delete all ports from hash
	for (i=0; i<PORT_HASH_SIZE; ++i) {
		port_t *port = str->ports[i];
		while (port) {
			port_t *next = port->next;
			port_free(self, port);
			port = next;
		}
		str->ports[i] = NULL;
	}
}
Exemplo n.º 4
0
static
int alsa_seqmidi_detach(alsa_midi_t *m)
{
	alsa_seqmidi_t *self = (alsa_seqmidi_t*) m;

	debug_log("midi: detach");

	if (!self->seq)
		return -EALREADY;

	alsa_seqmidi_stop(m);

	jack_ringbuffer_reset(self->port_add);
	free_ports(self, self->port_del);

	stream_detach(self, PORT_INPUT);
	stream_detach(self, PORT_OUTPUT);

	snd_seq_close(self->seq);
	self->seq = NULL;

	return 0;
}
Exemplo n.º 5
0
int option_setup (char *opt)
{
        char *from, *to, *cur, tmp;
        struct net_device *dev;
        int count = 0;

        printk ("args: %s\n", opt);

        /* Get mirror port. */
        if ((to = strchr(opt, '@')) == NULL)
                return -EINVAL;
        *to = '\0';
        to++;

        /* Get data ports. */
        from = opt;
        for (cur=opt; cur<=(opt+strlen(opt)); cur++) 
        {
                if (*cur == '/' ||
                    *cur == '@' ||
                    *cur == ',' ||
                    *cur == 0x00)
                {
                        /* FIXME: why I must change it back, otherwise loop would stopped. */
                        tmp = *cur;
                        *cur = 0x00;
                        if (!strcmp(to, from)) 
                        {
                                printk ("%s is mirror port already.\n", to);
                                free_ports();
                                return -EBUSY;
                        }
#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) )
                        dev = dev_get_by_name(from);
#else
                        dev = dev_get_by_name(&init_net, from);
#endif
                        /* Set data ports. */
                        if (!dev) {
                                printk ("Cannot find data port: %s\n", from);
                                free_ports();
                                return -ENODEV;
                        }
                        printk("Set data port: %s\n", dev->name);
                        ports_dev[count++] = dev;
                        ifindex_bits |= (1 << dev->ifindex);
                        from = cur + 1;
                        /* FIXME: why I must change it back, otherwise loop would stopped. */
                        *cur = tmp;
                }
        }

        /* Set mirror port. */
#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) )
        mirror = dev_get_by_name(to);
#else
        mirror = dev_get_by_name(&init_net, to);
#endif
        if (!mirror) 
        {
                printk (KERN_ERR "Cannot find mirror port: %s\n", to);
                return -ENODEV;
        }
        printk("Set mirror port: %s\n", mirror->name);
        dev_add_pack(&mirror_proto);

        return 0;
}