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"); }
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; }
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; } }
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; }
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; }