Lines Matching refs:sink

40 static void update_signals(usb_midi_sink_t* sink) {
42 if (sink->dead) {
44 } else if (!list_is_empty(&sink->free_write_reqs)) {
47 if (new_signals != sink->signals) {
48 device_state_clr_set(sink->mxdev,
49 sink->signals & ~new_signals,
50 new_signals & ~sink->signals);
51 sink->signals = new_signals;
56 usb_midi_sink_t* sink = (usb_midi_sink_t*)cookie;
58 usb_req_release(&sink->usb, req);
63 mtx_lock(&sink->mutex);
64 list_add_tail(&sink->free_write_reqs, &req->node);
65 sync_completion_signal(&sink->free_write_completion);
66 update_signals(sink);
67 mtx_unlock(&sink->mutex);
71 usb_midi_sink_t* sink = ctx;
72 sink->dead = true;
73 update_signals(sink);
74 sync_completion_signal(&sink->free_write_completion);
75 device_remove(sink->mxdev);
78 static void usb_midi_sink_free(usb_midi_sink_t* sink) {
80 while ((req = list_remove_head_type(&sink->free_write_reqs, usb_request_t, node)) != NULL) {
81 usb_req_release(&sink->usb, req);
83 free(sink);
87 usb_midi_sink_t* sink = ctx;
88 usb_midi_sink_free(sink);
92 usb_midi_sink_t* sink = ctx;
95 mtx_lock(&sink->mutex);
96 if (sink->open) {
99 sink->open = true;
102 mtx_unlock(&sink->mutex);
108 usb_midi_sink_t* sink = ctx;
110 mtx_lock(&sink->mutex);
111 sink->open = false;
112 mtx_unlock(&sink->mutex);
119 usb_midi_sink_t* sink = ctx;
121 if (sink->dead) {
131 sync_completion_wait(&sink->free_write_completion, ZX_TIME_INFINITE);
132 if (sink->dead) {
135 mtx_lock(&sink->mutex);
136 list_node_t* node = list_remove_head(&sink->free_write_reqs);
137 if (list_is_empty(&sink->free_write_reqs)) {
138 sync_completion_reset(&sink->free_write_completion);
140 mtx_unlock(&sink->mutex);
157 usb_req_copy_to(&sink->usb, req, buffer, 4, 0);
159 usb_request_queue(&sink->usb, req);
166 update_signals(sink);
202 usb_midi_sink_t* sink = calloc(1, sizeof(usb_midi_sink_t));
203 if (!sink) {
208 list_initialize(&sink->free_write_reqs);
209 sink->usb_mxdev = device;
210 memcpy(&sink->usb, usb, sizeof(sink->usb));
220 usb_midi_sink_free(sink);
225 req->cookie = sink;
226 list_add_head(&sink->free_write_reqs, &req->node);
228 sync_completion_signal(&sink->free_write_completion);
231 snprintf(name, sizeof(name), "usb-midi-sink-%d", index);
236 .ctx = sink,
241 zx_status_t status = device_add(device, &args, &sink->mxdev);
244 usb_midi_sink_free(sink);