Lines Matching defs:umidi

74 	bool disconnected;		/* shadow of umidi->disconnected */
75 struct list_head list; /* list to umidi->ep_list */
82 struct snd_usb_midi2_interface *umidi; /* reference to MIDI iface */
88 struct list_head list; /* list to umidi->rawmidi_list */
387 static int start_input_streams(struct snd_usb_midi2_interface *umidi)
392 list_for_each_entry(ep, &umidi->ep_list, list) {
400 list_for_each_entry(ep, &umidi->ep_list, list) {
408 list_for_each_entry(ep, &umidi->ep_list, list) {
424 static int create_midi2_endpoint(struct snd_usb_midi2_interface *umidi,
431 usb_audio_dbg(umidi->chip, "Creating an EP 0x%02x, #GTB=%d\n",
441 ep->dev = umidi->chip->dev;
464 list_add_tail(&ep->list, &umidi->ep_list);
478 static void free_all_midi2_endpoints(struct snd_usb_midi2_interface *umidi)
482 while (!list_empty(&umidi->ep_list)) {
483 ep = list_first_entry(&umidi->ep_list,
513 static int get_group_terminal_block_descs(struct snd_usb_midi2_interface *umidi)
515 struct usb_host_interface *hostif = umidi->hostif;
516 struct usb_device *dev = umidi->chip->dev;
550 umidi->blk_descs = data;
551 umidi->blk_desc_size = size;
557 find_group_terminal_block(struct snd_usb_midi2_interface *umidi, int id)
559 const unsigned char *data = umidi->blk_descs;
560 int size = umidi->blk_desc_size;
620 static int parse_group_terminal_blocks(struct snd_usb_midi2_interface *umidi)
626 err = get_group_terminal_block_descs(umidi);
629 if (!umidi->blk_descs)
632 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
633 desc = find_group_terminal_block(umidi, rmidi->usb_block_id);
645 static int parse_midi_2_0_endpoints(struct snd_usb_midi2_interface *umidi)
647 struct usb_host_interface *hostif = umidi->hostif;
666 err = create_midi2_endpoint(umidi, hostep, ms_ep);
673 static void free_all_midi2_umps(struct snd_usb_midi2_interface *umidi)
677 while (!list_empty(&umidi->rawmidi_list)) {
678 rmidi = list_first_entry(&umidi->rawmidi_list,
685 static int create_midi2_ump(struct snd_usb_midi2_interface *umidi,
700 rmidi->dev = umidi->chip->dev;
701 rmidi->umidi = umidi;
704 rmidi->index = umidi->chip->num_rawmidis;
708 err = snd_ump_endpoint_new(umidi->chip->card, idstr, rmidi->index,
711 usb_audio_dbg(umidi->chip, "Failed to create a UMP object\n");
717 umidi->chip->num_rawmidis++;
735 list_add_tail(&rmidi->list, &umidi->rawmidi_list);
741 find_midi2_ump(struct snd_usb_midi2_interface *umidi, int blk_id)
745 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
753 static int find_matching_ep_partner(struct snd_usb_midi2_interface *umidi,
760 usb_audio_dbg(umidi->chip, "Looking for a pair for EP-in 0x%02x\n",
762 list_for_each_entry(pair_ep, &umidi->ep_list, list) {
769 usb_audio_dbg(umidi->chip,
772 return create_midi2_ump(umidi, ep, pair_ep, blk_id);
783 static int parse_ump_endpoints(struct snd_usb_midi2_interface *umidi)
788 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
807 struct snd_usb_midi2_interface *umidi = rmidi->umidi;
812 desc = find_group_terminal_block(umidi, blk);
816 usb_audio_dbg(umidi->chip,
835 usb_audio_dbg(umidi->chip, "Unsupported GTB type %d\n",
874 usb_audio_dbg(umidi->chip,
881 static int create_blocks_from_gtb(struct snd_usb_midi2_interface *umidi)
886 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
911 static int attach_legacy_rawmidi(struct snd_usb_midi2_interface *umidi)
917 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
920 umidi->chip->num_rawmidis);
923 umidi->chip->num_rawmidis++;
929 static void snd_usb_midi_v2_free(struct snd_usb_midi2_interface *umidi)
931 free_all_midi2_endpoints(umidi);
932 free_all_midi2_umps(umidi);
933 list_del(&umidi->list);
934 kfree(umidi->blk_descs);
935 kfree(umidi);
939 static int parse_midi_2_0(struct snd_usb_midi2_interface *umidi)
945 err = parse_midi_2_0_endpoints(umidi);
948 if (list_empty(&umidi->ep_list)) {
949 usb_audio_warn(umidi->chip, "No MIDI endpoints found\n");
958 list_for_each_entry(ep, &umidi->ep_list, list) {
964 err = find_matching_ep_partner(umidi, ep, id);
974 list_for_each_entry(ep, &umidi->ep_list, list) {
979 if (find_midi2_ump(umidi, id))
981 usb_audio_dbg(umidi->chip,
985 err = create_midi2_ump(umidi, ep, NULL, id);
987 err = create_midi2_ump(umidi, NULL, ep, id);
1013 static int set_altset(struct snd_usb_midi2_interface *umidi)
1015 usb_audio_dbg(umidi->chip, "Setting host iface %d:%d\n",
1016 umidi->hostif->desc.bInterfaceNumber,
1017 umidi->hostif->desc.bAlternateSetting);
1018 return usb_set_interface(umidi->chip->dev,
1019 umidi->hostif->desc.bInterfaceNumber,
1020 umidi->hostif->desc.bAlternateSetting);
1038 static void set_fallback_rawmidi_names(struct snd_usb_midi2_interface *umidi)
1040 struct usb_device *dev = umidi->chip->dev;
1044 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
1047 if (!*ump->info.name && umidi->hostif->desc.iInterface)
1048 fill_ump_ep_name(ump, dev, umidi->hostif->desc.iInterface);
1073 struct snd_usb_midi2_interface *umidi;
1104 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
1105 if (!umidi)
1107 umidi->chip = chip;
1108 umidi->iface = iface;
1109 umidi->hostif = hostif;
1110 INIT_LIST_HEAD(&umidi->rawmidi_list);
1111 INIT_LIST_HEAD(&umidi->ep_list);
1113 list_add_tail(&umidi->list, &chip->midi_v2_list);
1115 err = set_altset(umidi);
1122 err = parse_midi_2_0(umidi);
1129 err = parse_group_terminal_blocks(umidi);
1135 err = start_input_streams(umidi);
1142 err = parse_ump_endpoints(umidi);
1149 err = create_blocks_from_gtb(umidi);
1155 set_fallback_rawmidi_names(umidi);
1157 err = attach_legacy_rawmidi(umidi);
1166 snd_usb_midi_v2_free(umidi);
1182 struct snd_usb_midi2_interface *umidi;
1185 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1186 list_for_each_entry(ep, &umidi->ep_list, list)
1201 struct snd_usb_midi2_interface *umidi;
1204 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1205 set_altset(umidi);
1206 list_for_each_entry(ep, &umidi->ep_list, list)
1213 struct snd_usb_midi2_interface *umidi;
1216 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1217 umidi->disconnected = 1;
1218 list_for_each_entry(ep, &umidi->ep_list, list) {
1229 struct snd_usb_midi2_interface *umidi, *next;
1231 list_for_each_entry_safe(umidi, next, &chip->midi_v2_list, list)
1232 snd_usb_midi_v2_free(umidi);