Lines Matching refs: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 */
395 static int start_input_streams(struct snd_usb_midi2_interface *umidi)
400 list_for_each_entry(ep, &umidi->ep_list, list) {
408 list_for_each_entry(ep, &umidi->ep_list, list) {
416 list_for_each_entry(ep, &umidi->ep_list, list) {
432 static int create_midi2_endpoint(struct snd_usb_midi2_interface *umidi,
439 usb_audio_dbg(umidi->chip, "Creating an EP 0x%02x, #GTB=%d\n",
449 ep->dev = umidi->chip->dev;
472 list_add_tail(&ep->list, &umidi->ep_list);
486 static void free_all_midi2_endpoints(struct snd_usb_midi2_interface *umidi)
490 while (!list_empty(&umidi->ep_list)) {
491 ep = list_first_entry(&umidi->ep_list,
521 static int get_group_terminal_block_descs(struct snd_usb_midi2_interface *umidi)
523 struct usb_host_interface *hostif = umidi->hostif;
524 struct usb_device *dev = umidi->chip->dev;
558 umidi->blk_descs = data;
559 umidi->blk_desc_size = size;
565 find_group_terminal_block(struct snd_usb_midi2_interface *umidi, int id)
567 const unsigned char *data = umidi->blk_descs;
568 int size = umidi->blk_desc_size;
611 usb_audio_info(rmidi->umidi->chip,
628 usb_audio_info(rmidi->umidi->chip,
638 static int parse_group_terminal_blocks(struct snd_usb_midi2_interface *umidi)
644 err = get_group_terminal_block_descs(umidi);
647 if (!umidi->blk_descs)
650 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
651 desc = find_group_terminal_block(umidi, rmidi->usb_block_id);
663 static int parse_midi_2_0_endpoints(struct snd_usb_midi2_interface *umidi)
665 struct usb_host_interface *hostif = umidi->hostif;
684 err = create_midi2_endpoint(umidi, hostep, ms_ep);
691 static void free_all_midi2_umps(struct snd_usb_midi2_interface *umidi)
695 while (!list_empty(&umidi->rawmidi_list)) {
696 rmidi = list_first_entry(&umidi->rawmidi_list,
703 static int create_midi2_ump(struct snd_usb_midi2_interface *umidi,
718 rmidi->dev = umidi->chip->dev;
719 rmidi->umidi = umidi;
722 rmidi->index = umidi->chip->num_rawmidis;
726 err = snd_ump_endpoint_new(umidi->chip->card, idstr, rmidi->index,
729 usb_audio_dbg(umidi->chip, "Failed to create a UMP object\n");
735 umidi->chip->num_rawmidis++;
753 list_add_tail(&rmidi->list, &umidi->rawmidi_list);
759 find_midi2_ump(struct snd_usb_midi2_interface *umidi, int blk_id)
763 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
771 static int find_matching_ep_partner(struct snd_usb_midi2_interface *umidi,
778 usb_audio_dbg(umidi->chip, "Looking for a pair for EP-in 0x%02x\n",
780 list_for_each_entry(pair_ep, &umidi->ep_list, list) {
787 usb_audio_dbg(umidi->chip,
790 return create_midi2_ump(umidi, ep, pair_ep, blk_id);
801 static int parse_ump_endpoints(struct snd_usb_midi2_interface *umidi)
806 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
825 struct snd_usb_midi2_interface *umidi = rmidi->umidi;
830 desc = find_group_terminal_block(umidi, blk);
834 usb_audio_dbg(umidi->chip,
853 usb_audio_dbg(umidi->chip, "Unsupported GTB type %d\n",
876 usb_audio_dbg(umidi->chip,
883 static int create_blocks_from_gtb(struct snd_usb_midi2_interface *umidi)
888 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
913 static int attach_legacy_rawmidi(struct snd_usb_midi2_interface *umidi)
919 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
922 umidi->chip->num_rawmidis);
925 umidi->chip->num_rawmidis++;
931 static void snd_usb_midi_v2_free(struct snd_usb_midi2_interface *umidi)
933 free_all_midi2_endpoints(umidi);
934 free_all_midi2_umps(umidi);
935 list_del(&umidi->list);
936 kfree(umidi->blk_descs);
937 kfree(umidi);
941 static int parse_midi_2_0(struct snd_usb_midi2_interface *umidi)
947 err = parse_midi_2_0_endpoints(umidi);
950 if (list_empty(&umidi->ep_list)) {
951 usb_audio_warn(umidi->chip, "No MIDI endpoints found\n");
960 list_for_each_entry(ep, &umidi->ep_list, list) {
966 err = find_matching_ep_partner(umidi, ep, id);
976 list_for_each_entry(ep, &umidi->ep_list, list) {
981 if (find_midi2_ump(umidi, id))
983 usb_audio_dbg(umidi->chip,
987 err = create_midi2_ump(umidi, ep, NULL, id);
989 err = create_midi2_ump(umidi, NULL, ep, id);
1015 static int set_altset(struct snd_usb_midi2_interface *umidi)
1017 usb_audio_dbg(umidi->chip, "Setting host iface %d:%d\n",
1018 umidi->hostif->desc.bInterfaceNumber,
1019 umidi->hostif->desc.bAlternateSetting);
1020 return usb_set_interface(umidi->chip->dev,
1021 umidi->hostif->desc.bInterfaceNumber,
1022 umidi->hostif->desc.bAlternateSetting);
1040 static void set_fallback_rawmidi_names(struct snd_usb_midi2_interface *umidi)
1042 struct usb_device *dev = umidi->chip->dev;
1046 list_for_each_entry(rmidi, &umidi->rawmidi_list, list) {
1049 if (!*ump->info.name && umidi->hostif->desc.iInterface)
1050 fill_ump_ep_name(ump, dev, umidi->hostif->desc.iInterface);
1074 struct snd_usb_midi2_interface *umidi;
1105 umidi = kzalloc(sizeof(*umidi), GFP_KERNEL);
1106 if (!umidi)
1108 umidi->chip = chip;
1109 umidi->iface = iface;
1110 umidi->hostif = hostif;
1111 INIT_LIST_HEAD(&umidi->rawmidi_list);
1112 INIT_LIST_HEAD(&umidi->ep_list);
1114 list_add_tail(&umidi->list, &chip->midi_v2_list);
1116 err = set_altset(umidi);
1123 err = parse_midi_2_0(umidi);
1130 err = parse_group_terminal_blocks(umidi);
1136 err = start_input_streams(umidi);
1143 err = parse_ump_endpoints(umidi);
1150 err = create_blocks_from_gtb(umidi);
1156 set_fallback_rawmidi_names(umidi);
1158 err = attach_legacy_rawmidi(umidi);
1167 snd_usb_midi_v2_free(umidi);
1183 struct snd_usb_midi2_interface *umidi;
1186 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1187 list_for_each_entry(ep, &umidi->ep_list, list)
1202 struct snd_usb_midi2_interface *umidi;
1205 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1206 set_altset(umidi);
1207 list_for_each_entry(ep, &umidi->ep_list, list)
1214 struct snd_usb_midi2_interface *umidi;
1217 list_for_each_entry(umidi, &chip->midi_v2_list, list) {
1218 umidi->disconnected = 1;
1219 list_for_each_entry(ep, &umidi->ep_list, list) {
1230 struct snd_usb_midi2_interface *umidi, *next;
1232 list_for_each_entry_safe(umidi, next, &chip->midi_v2_list, list)
1233 snd_usb_midi_v2_free(umidi);