Lines Matching refs:priv
104 static snd_ctl_numid_t *remap_numid_temp(snd_ctl_remap_t *priv, unsigned int numid)
106 priv->numid_temp.numid_child = numid;
107 priv->numid_temp.numid_app = numid;
108 return &priv->numid_temp;
111 static snd_ctl_numid_t *remap_find_numid_app(snd_ctl_remap_t *priv, unsigned int numid_app)
116 if (!priv->numid_remap_active)
117 return remap_numid_temp(priv, numid_app);
118 numid = priv->numid;
119 for (count = priv->numid_items; count > 0; count--, numid++)
125 static snd_ctl_numid_t *remap_numid_new(snd_ctl_remap_t *priv, unsigned int numid_child,
130 if (priv->numid_alloc == priv->numid_items) {
131 numid = realloc(priv->numid, (priv->numid_alloc + 16) * sizeof(*numid));
134 memset(numid + priv->numid_alloc, 0, sizeof(*numid) * 16);
135 priv->numid_alloc += 16;
136 priv->numid = numid;
138 numid = &priv->numid[priv->numid_items++];
145 static snd_ctl_numid_t *remap_numid_child_new(snd_ctl_remap_t *priv, unsigned int numid_child)
151 if (priv->numid_remap_active && remap_find_numid_app(priv, numid_child)) {
152 while (remap_find_numid_app(priv, priv->numid_app_last))
153 priv->numid_app_last++;
154 numid_app = priv->numid_app_last;
158 return remap_numid_new(priv, numid_child, numid_app);
161 static snd_ctl_numid_t *remap_find_numid_child(snd_ctl_remap_t *priv, unsigned int numid_child)
166 if (!priv->numid_remap_active)
167 return remap_numid_temp(priv, numid_child);
168 numid = priv->numid;
169 for (count = priv->numid_items; count > 0; count--, numid++)
172 return remap_numid_child_new(priv, numid_child);
175 static snd_ctl_remap_id_t *remap_find_id_child(snd_ctl_remap_t *priv, snd_ctl_elem_id_t *id)
181 rid = priv->remap;
182 for (count = priv->remap_items; count > 0; count--, rid++)
186 rid = priv->remap;
187 for (count = priv->remap_items; count > 0; count--, rid++)
193 static snd_ctl_remap_id_t *remap_find_id_app(snd_ctl_remap_t *priv, snd_ctl_elem_id_t *id)
199 rid = priv->remap;
200 for (count = priv->remap_items; count > 0; count--, rid++)
204 rid = priv->remap;
205 for (count = priv->remap_items; count > 0; count--, rid++)
211 static snd_ctl_map_t *remap_find_map_numid(snd_ctl_remap_t *priv, unsigned int numid)
218 map = priv->map;
219 for (count = priv->map_items; count > 0; count--, map++) {
226 static snd_ctl_map_t *remap_find_map_id(snd_ctl_remap_t *priv, snd_ctl_elem_id_t *id)
232 return remap_find_map_numid(priv, id->numid);
233 map = priv->map;
234 for (count = priv->map_items; count > 0; count--, map++)
240 static int remap_id_to_child(snd_ctl_remap_t *priv, snd_ctl_elem_id_t *id, snd_ctl_remap_id_t **_rid)
246 rid = remap_find_id_app(priv, id);
249 numid = remap_find_numid_app(priv, id->numid);
257 if (remap_find_id_child(priv, id))
259 numid = remap_find_numid_app(priv, id->numid);
270 static int remap_id_to_app(snd_ctl_remap_t *priv, snd_ctl_elem_id_t *id, snd_ctl_remap_id_t *rid, int err)
276 numid = remap_numid_child_new(priv, id->numid);
285 numid = remap_find_numid_child(priv, id->numid);
294 static void remap_free(snd_ctl_remap_t *priv)
299 for (idx1 = 0; idx1 < priv->map_items; idx1++) {
300 map = &priv->map[idx1];
305 free(priv->map_read_queue);
306 free(priv->map);
307 free(priv->remap);
308 free(priv->numid);
309 free(priv);
314 snd_ctl_remap_t *priv = ctl->private_data;
315 int err = snd_ctl_close(priv->child);
316 remap_free(priv);
322 snd_ctl_remap_t *priv = ctl->private_data;
323 return snd_ctl_nonblock(priv->child, nonblock);
328 snd_ctl_remap_t *priv = ctl->private_data;
329 return snd_ctl_async(priv->child, sig, pid);
334 snd_ctl_remap_t *priv = ctl->private_data;
335 return snd_ctl_subscribe_events(priv->child, subscribe);
340 snd_ctl_remap_t *priv = ctl->private_data;
341 return snd_ctl_card_info(priv->child, info);
346 snd_ctl_remap_t *priv = ctl->private_data;
355 err = snd_ctl_elem_list(priv->child, list);
360 rid = remap_find_id_child(priv, id);
365 numid = remap_find_numid_child(priv, id->numid);
370 if (list->offset >= list->count + priv->map_items)
375 for ( ; index < list->space && index2 < priv->map_items; index2++, index++) {
377 map = &priv->map[index2];
381 list->count += priv->map_items;
392 static int remap_map_elem_info(snd_ctl_remap_t *priv, snd_ctl_elem_info_t *info)
401 map = remap_find_map_id(priv, &info->id);
409 err = snd_ctl_elem_info(priv->child, &info2);
426 err = snd_ctl_elem_info(priv->child, &info3);
464 snd_ctl_remap_t *priv = ctl->private_data;
469 err = remap_map_elem_info(priv, info);
472 err = remap_id_to_child(priv, &info->id, &rid);
475 err = snd_ctl_elem_info(priv->child, info);
476 return remap_id_to_app(priv, &info->id, rid, err);
479 static int remap_map_elem_read(snd_ctl_remap_t *priv, snd_ctl_elem_value_t *control)
487 map = remap_find_map_id(priv, &control->id);
498 err = snd_ctl_elem_read(priv->child, &control2);
527 snd_ctl_remap_t *priv = ctl->private_data;
532 err = remap_map_elem_read(priv, control);
535 err = remap_id_to_child(priv, &control->id, &rid);
538 err = snd_ctl_elem_read(priv->child, control);
539 return remap_id_to_app(priv, &control->id, rid, err);
542 static int remap_map_elem_write(snd_ctl_remap_t *priv, snd_ctl_elem_value_t *control)
550 map = remap_find_map_id(priv, &control->id);
560 err = snd_ctl_elem_read(priv->child, &control2);
592 err = snd_ctl_elem_write(priv->child, &control2);
602 snd_ctl_remap_t *priv = ctl->private_data;
607 err = remap_map_elem_write(priv, control);
610 err = remap_id_to_child(priv, &control->id, &rid);
613 err = snd_ctl_elem_write(priv->child, control);
614 return remap_id_to_app(priv, &control->id, rid, err);
619 snd_ctl_remap_t *priv = ctl->private_data;
624 err = remap_id_to_child(priv, id, &rid);
627 err = snd_ctl_elem_lock(priv->child, id);
628 return remap_id_to_app(priv, id, rid, err);
633 snd_ctl_remap_t *priv = ctl->private_data;
638 err = remap_id_to_child(priv, id, &rid);
641 err = snd_ctl_elem_unlock(priv->child, id);
642 return remap_id_to_app(priv, id, rid, err);
645 static int remap_get_map_numid(snd_ctl_remap_t *priv, struct snd_ctl_map_ctl *mctl)
656 err = snd_ctl_elem_info(priv->child, &info);
659 numid = remap_find_numid_child(priv, info.id.numid);
666 static int remap_map_elem_tlv(snd_ctl_remap_t *priv, int op_flag, unsigned int numid,
675 map = remap_find_map_numid(priv, numid);
682 err = remap_get_map_numid(priv, mctl);
686 err = priv->child->ops->element_tlv(priv->child, op_flag, mctl->id_child.numid, tlv, tlv_size);
694 err = remap_get_map_numid(priv, mctl);
700 err = priv->child->ops->element_tlv(priv->child, op_flag, mctl->id_child.numid, tlv2, tlv_size);
718 snd_ctl_remap_t *priv = ctl->private_data;
723 err = remap_map_elem_tlv(priv, op_flag, numid, tlv, tlv_size);
726 map_numid = remap_find_numid_app(priv, numid);
729 return priv->child->ops->element_tlv(priv->child, op_flag, map_numid->numid_child, tlv, tlv_size);
734 snd_ctl_remap_t *priv = ctl->private_data;
735 return snd_ctl_hwdep_next_device(priv->child, device);
740 snd_ctl_remap_t *priv = ctl->private_data;
741 return snd_ctl_hwdep_info(priv->child, info);
746 snd_ctl_remap_t *priv = ctl->private_data;
747 return snd_ctl_pcm_next_device(priv->child, device);
752 snd_ctl_remap_t *priv = ctl->private_data;
753 return snd_ctl_pcm_info(priv->child, info);
758 snd_ctl_remap_t *priv = ctl->private_data;
759 return snd_ctl_pcm_prefer_subdevice(priv->child, subdev);
764 snd_ctl_remap_t *priv = ctl->private_data;
765 return snd_ctl_rawmidi_next_device(priv->child, device);
770 snd_ctl_remap_t *priv = ctl->private_data;
771 return snd_ctl_rawmidi_info(priv->child, info);
776 snd_ctl_remap_t *priv = ctl->private_data;
777 return snd_ctl_rawmidi_prefer_subdevice(priv->child, subdev);
782 snd_ctl_remap_t *priv = ctl->private_data;
783 return snd_ctl_set_power_state(priv->child, state);
788 snd_ctl_remap_t *priv = ctl->private_data;
789 return snd_ctl_get_power_state(priv->child, state);
797 static void remap_event_for_all_map_controls(snd_ctl_remap_t *priv,
808 map = priv->map;
809 for (count = priv->map_items; count > 0; count--, map++) {
822 for (head = priv->map_read_queue_head;
823 head != priv->map_read_queue_tail;
824 _next_ptr(&head, priv->map_items))
825 if (priv->map_read_queue[head] == map) {
832 priv->map_read_queue[priv->map_read_queue_tail] = map;
833 _next_ptr(&priv->map_read_queue_tail, priv->map_items);
840 snd_ctl_remap_t *priv = ctl->private_data;
846 if (priv->map_read_queue_head != priv->map_read_queue_tail) {
847 map = priv->map_read_queue[priv->map_read_queue_head];
848 _next_ptr(&priv->map_read_queue_head, priv->map_items);
857 err = snd_ctl_read(priv->child, event);
864 remap_event_for_all_map_controls(priv, &event->data.elem.id, event->data.elem.mask);
865 rid = remap_find_id_child(priv, &event->data.elem.id);
868 numid = remap_find_numid_child(priv, event->data.elem.id.numid);
876 numid = remap_find_numid_child(priv, event->data.elem.id.numid);
911 static int add_to_remap(snd_ctl_remap_t *priv,
917 if (priv->remap_alloc == priv->remap_items) {
918 rid = realloc(priv->remap, (priv->remap_alloc + 16) * sizeof(*rid));
921 memset(rid + priv->remap_alloc, 0, sizeof(*rid) * 16);
922 priv->remap_alloc += 16;
923 priv->remap = rid;
925 rid = &priv->remap[priv->remap_items++];
933 static int parse_remap(snd_ctl_remap_t *priv, snd_config_t *conf)
956 if (remap_find_id_app(priv, &app)) {
966 if (remap_find_id_child(priv, &app)) {
970 err = add_to_remap(priv, &child, &app);
978 static int new_map(snd_ctl_remap_t *priv, snd_ctl_map_t **_map, snd_ctl_elem_id_t *id)
983 if (priv->map_alloc == priv->map_items) {
984 map = realloc(priv->map, (priv->map_alloc + 16) * sizeof(*map));
987 memset(map + priv->map_alloc, 0, sizeof(*map) * 16);
988 priv->map_alloc += 16;
989 priv->map = map;
991 map = &priv->map[priv->map_items++];
993 numid = remap_numid_new(priv, 0, ++priv->numid_app_last);
1112 static int parse_map(snd_ctl_remap_t *priv, snd_config_t *conf)
1132 err = new_map(priv, &map, &eid);
1159 snd_ctl_remap_t *priv;
1167 priv = calloc(1, sizeof(*priv));
1168 if (priv == NULL)
1171 err = parse_remap(priv, remap);
1177 err = parse_map(priv, map);
1184 if (priv->map_items == 0 && priv->remap_items == 0) {
1185 remap_free(priv);
1195 priv->map_read_queue = calloc(priv->map_items, sizeof(priv->map_read_queue[0]));
1196 if (priv->map_read_queue == NULL) {
1201 priv->numid_remap_active = priv->map_items > 0;
1203 priv->child = child;
1210 ctl->private_data = priv;
1217 remap_free(priv);