Lines Matching full:entry
55 struct snd_info_entry *entry; member
60 static void snd_info_disconnect(struct snd_info_entry *entry);
74 static int alloc_info_private(struct snd_info_entry *entry, in alloc_info_private() argument
79 if (!entry || !entry->p) in alloc_info_private()
81 if (!try_module_get(entry->module)) in alloc_info_private()
85 module_put(entry->module); in alloc_info_private()
88 data->entry = entry; in alloc_info_private()
108 struct snd_info_entry *entry; in snd_info_entry_llseek() local
112 entry = data->entry; in snd_info_entry_llseek()
113 mutex_lock(&entry->access); in snd_info_entry_llseek()
114 if (entry->c.ops->llseek) { in snd_info_entry_llseek()
115 offset = entry->c.ops->llseek(entry, in snd_info_entry_llseek()
121 size = entry->size; in snd_info_entry_llseek()
143 mutex_unlock(&entry->access); in snd_info_entry_llseek()
151 struct snd_info_entry *entry = data->entry; in snd_info_entry_read() local
158 if (pos >= entry->size) in snd_info_entry_read()
160 size = entry->size - pos; in snd_info_entry_read()
162 size = entry->c.ops->read(entry, data->file_private_data, in snd_info_entry_read()
173 struct snd_info_entry *entry = data->entry; in snd_info_entry_write() local
181 size_t maxsize = entry->size - pos; in snd_info_entry_write()
183 size = entry->c.ops->write(entry, data->file_private_data, in snd_info_entry_write()
194 struct snd_info_entry *entry = data->entry; in snd_info_entry_poll() local
197 if (entry->c.ops->poll) in snd_info_entry_poll()
198 return entry->c.ops->poll(entry, in snd_info_entry_poll()
201 if (entry->c.ops->read) in snd_info_entry_poll()
203 if (entry->c.ops->write) in snd_info_entry_poll()
212 struct snd_info_entry *entry = data->entry; in snd_info_entry_ioctl() local
214 if (!entry->c.ops->ioctl) in snd_info_entry_ioctl()
216 return entry->c.ops->ioctl(entry, data->file_private_data, in snd_info_entry_ioctl()
224 struct snd_info_entry *entry; in snd_info_entry_mmap() local
229 entry = data->entry; in snd_info_entry_mmap()
230 if (!entry->c.ops->mmap) in snd_info_entry_mmap()
232 return entry->c.ops->mmap(entry, data->file_private_data, in snd_info_entry_mmap()
238 struct snd_info_entry *entry = PDE_DATA(inode); in snd_info_entry_open() local
243 err = alloc_info_private(entry, &data); in snd_info_entry_open()
248 if (((mode == O_RDONLY || mode == O_RDWR) && !entry->c.ops->read) || in snd_info_entry_open()
249 ((mode == O_WRONLY || mode == O_RDWR) && !entry->c.ops->write)) { in snd_info_entry_open()
254 if (entry->c.ops->open) { in snd_info_entry_open()
255 err = entry->c.ops->open(entry, mode, &data->file_private_data); in snd_info_entry_open()
266 module_put(entry->module); in snd_info_entry_open()
275 struct snd_info_entry *entry = data->entry; in snd_info_entry_release() local
277 if (entry->c.ops->release) in snd_info_entry_release()
278 entry->c.ops->release(entry, file->f_flags & O_ACCMODE, in snd_info_entry_release()
280 module_put(entry->module); in snd_info_entry_release()
306 struct snd_info_entry *entry = data->entry; in snd_info_text_entry_write() local
312 if (!entry->c.text.write) in snd_info_text_entry_write()
321 mutex_lock(&entry->access); in snd_info_text_entry_write()
346 mutex_unlock(&entry->access); in snd_info_text_entry_write()
356 struct snd_info_entry *entry = data->entry; in snd_info_seq_show() local
358 if (!entry->c.text.read) { in snd_info_seq_show()
362 entry->c.text.read(entry, data->rbuffer); in snd_info_seq_show()
369 struct snd_info_entry *entry = PDE_DATA(inode); in snd_info_text_entry_open() local
374 err = alloc_info_private(entry, &data); in snd_info_text_entry_open()
383 if (entry->size) in snd_info_text_entry_open()
385 entry->size); in snd_info_text_entry_open()
396 module_put(entry->module); in snd_info_text_entry_open()
406 struct snd_info_entry *entry = data->entry; in snd_info_text_entry_release() local
408 if (data->wbuffer && entry->c.text.write) in snd_info_text_entry_release()
409 entry->c.text.write(entry, data->wbuffer); in snd_info_text_entry_release()
418 module_put(entry->module); in snd_info_text_entry_release()
435 struct snd_info_entry *entry; in create_subdir() local
437 entry = snd_info_create_module_entry(mod, name, NULL); in create_subdir()
438 if (!entry) in create_subdir()
440 entry->mode = S_IFDIR | 0555; in create_subdir()
441 if (snd_info_register(entry) < 0) { in create_subdir()
442 snd_info_free_entry(entry); in create_subdir()
445 return entry; in create_subdir()
490 static void snd_card_id_read(struct snd_info_entry *entry, in snd_card_id_read() argument
493 struct snd_card *card = entry->private_data; in snd_card_id_read()
505 struct snd_info_entry *entry; in snd_info_card_create() local
511 entry = create_subdir(card->module, str); in snd_info_card_create()
512 if (!entry) in snd_info_card_create()
514 card->proc_root = entry; in snd_info_card_create()
669 * snd_info_create_entry - create an info entry
673 * Creates an info entry with the given file name and initializes as
685 struct snd_info_entry *entry; in snd_info_create_entry() local
686 entry = kzalloc(sizeof(*entry), GFP_KERNEL); in snd_info_create_entry()
687 if (entry == NULL) in snd_info_create_entry()
689 entry->name = kstrdup(name, GFP_KERNEL); in snd_info_create_entry()
690 if (entry->name == NULL) { in snd_info_create_entry()
691 kfree(entry); in snd_info_create_entry()
694 entry->mode = S_IFREG | 0444; in snd_info_create_entry()
695 entry->content = SNDRV_INFO_CONTENT_TEXT; in snd_info_create_entry()
696 mutex_init(&entry->access); in snd_info_create_entry()
697 INIT_LIST_HEAD(&entry->children); in snd_info_create_entry()
698 INIT_LIST_HEAD(&entry->list); in snd_info_create_entry()
699 entry->parent = parent; in snd_info_create_entry()
700 entry->module = module; in snd_info_create_entry()
703 list_add_tail(&entry->list, &parent->children); in snd_info_create_entry()
706 return entry; in snd_info_create_entry()
710 * snd_info_create_module_entry - create an info entry for the given module
715 * Creates a new info entry and assigns it to the given module.
730 * snd_info_create_card_entry - create an info entry for the given card
735 * Creates a new info entry and assigns it to the given card.
749 static void snd_info_disconnect(struct snd_info_entry *entry) in snd_info_disconnect() argument
753 if (!entry->p) in snd_info_disconnect()
755 list_for_each_entry(p, &entry->children, list) in snd_info_disconnect()
757 proc_remove(entry->p); in snd_info_disconnect()
758 entry->p = NULL; in snd_info_disconnect()
762 * snd_info_free_entry - release the info entry
763 * @entry: the info entry
765 * Releases the info entry.
767 void snd_info_free_entry(struct snd_info_entry * entry) in snd_info_free_entry() argument
771 if (!entry) in snd_info_free_entry()
773 if (entry->p) { in snd_info_free_entry()
775 snd_info_disconnect(entry); in snd_info_free_entry()
780 list_for_each_entry_safe(p, n, &entry->children, list) in snd_info_free_entry()
783 p = entry->parent; in snd_info_free_entry()
786 list_del(&entry->list); in snd_info_free_entry()
789 kfree(entry->name); in snd_info_free_entry()
790 if (entry->private_free) in snd_info_free_entry()
791 entry->private_free(entry); in snd_info_free_entry()
792 kfree(entry); in snd_info_free_entry()
796 static int __snd_info_register(struct snd_info_entry *entry) in __snd_info_register() argument
800 if (snd_BUG_ON(!entry)) in __snd_info_register()
802 root = entry->parent == NULL ? snd_proc_root->p : entry->parent->p; in __snd_info_register()
804 if (entry->p || !root) in __snd_info_register()
806 if (S_ISDIR(entry->mode)) { in __snd_info_register()
807 p = proc_mkdir_mode(entry->name, entry->mode, root); in __snd_info_register()
814 if (entry->content == SNDRV_INFO_CONTENT_DATA) in __snd_info_register()
818 p = proc_create_data(entry->name, entry->mode, root, in __snd_info_register()
819 ops, entry); in __snd_info_register()
824 proc_set_size(p, entry->size); in __snd_info_register()
826 entry->p = p; in __snd_info_register()
833 * snd_info_register - register the info entry
834 * @entry: the info entry
836 * Registers the proc info entry.
841 int snd_info_register(struct snd_info_entry *entry) in snd_info_register() argument
846 if (!entry->p) { in snd_info_register()
847 err = __snd_info_register(entry); in snd_info_register()
852 list_for_each_entry(p, &entry->children, list) { in snd_info_register()
863 * snd_card_rw_proc_new - Create a read/write text proc file entry for the card
870 * This proc file entry will be registered via snd_card_register() call, and
877 void (*write)(struct snd_info_entry *entry, in snd_card_rw_proc_new() argument
880 struct snd_info_entry *entry; in snd_card_rw_proc_new() local
882 entry = snd_info_create_card_entry(card, name, card->proc_root); in snd_card_rw_proc_new()
883 if (!entry) in snd_card_rw_proc_new()
885 snd_info_set_text_ops(entry, private_data, read); in snd_card_rw_proc_new()
887 entry->mode |= 0200; in snd_card_rw_proc_new()
888 entry->c.text.write = write; in snd_card_rw_proc_new()
898 static void snd_info_version_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer) in snd_info_version_read() argument
907 struct snd_info_entry *entry; in snd_info_version_init() local
909 entry = snd_info_create_module_entry(THIS_MODULE, "version", NULL); in snd_info_version_init()
910 if (entry == NULL) in snd_info_version_init()
912 entry->c.text.read = snd_info_version_read; in snd_info_version_init()
913 return snd_info_register(entry); /* freed in error path */ in snd_info_version_init()