Lines Matching defs:scs

54 static void midi_input_byte(struct fw_scs1x *scs,
59 if (scs->input_escape_count > 0) {
61 scs->input_escape_count--;
62 if (scs->input_escape_count == 0)
69 scs->input_escape_count = 3;
75 static void midi_input_packet(struct fw_scs1x *scs,
84 midi_input_byte(scs, stream, data[i]);
99 struct fw_scs1x *scs = callback_data;
103 if (offset != scs->hss_handler.offset) {
114 stream = READ_ONCE(scs->input);
116 midi_input_packet(scs, stream, data, length);
127 struct fw_scs1x *scs = callback_data;
132 scs->transaction_bytes = 0;
134 scs->error = true;
137 scs->transaction_running = false;
138 schedule_work(&scs->work);
176 struct fw_scs1x *scs = container_of(work, struct fw_scs1x, work);
182 if (scs->transaction_running)
185 stream = READ_ONCE(scs->output);
186 if (!stream || scs->error) {
187 scs->output_idle = true;
188 wake_up(&scs->idle_wait);
192 if (scs->transaction_bytes > 0)
195 i = scs->output_bytes;
198 scs->output_bytes = i;
199 scs->output_idle = true;
200 wake_up(&scs->idle_wait);
207 if (scs->output_escaped && byte < 0x80) {
208 if (scs->output_escape_high_nibble) {
210 scs->buffer[i] = byte << 4;
211 scs->output_escape_high_nibble = false;
214 scs->buffer[i++] |= byte & 0x0f;
215 scs->output_escape_high_nibble = true;
220 scs->output_status))
222 scs->buffer[0] = HSS1394_TAG_USER_DATA;
223 scs->buffer[i++] = scs->output_status;
225 scs->buffer[i++] = byte;
226 if ((i == 3 && is_two_bytes_cmd(scs->output_status)) ||
227 (i == 4 && is_three_bytes_cmd(scs->output_status)))
230 !memcmp(scs->buffer + 1, sysex_escape_prefix,
232 scs->output_escaped = true;
233 scs->output_escape_high_nibble = true;
239 if (scs->output_escaped) {
240 if (i >= 1 && scs->output_escape_high_nibble &&
241 scs->buffer[0] !=
245 if (i > 1 && scs->output_status == 0xf0) {
246 scs->buffer[i++] = 0xf7;
251 scs->output_escaped = false;
254 scs->buffer[0] = HSS1394_TAG_USER_DATA;
255 scs->buffer[i++] = byte;
256 scs->output_status = byte;
257 scs->output_escaped = false;
262 scs->output_bytes = 1;
263 scs->output_escaped = false;
265 scs->transaction_bytes = i;
267 scs->transaction_running = true;
268 generation = scs->fw_dev->generation;
270 fw_send_request(scs->fw_dev->card, &scs->transaction,
271 TCODE_WRITE_BLOCK_REQUEST, scs->fw_dev->node_id,
272 generation, scs->fw_dev->max_speed, HSS1394_ADDRESS,
273 scs->buffer, scs->transaction_bytes,
274 scs_write_callback, scs);
289 struct fw_scs1x *scs = stream->rmidi->private_data;
292 scs->input_escape_count = 0;
293 WRITE_ONCE(scs->input, stream);
295 WRITE_ONCE(scs->input, NULL);
311 struct fw_scs1x *scs = stream->rmidi->private_data;
314 scs->output_status = 0;
315 scs->output_bytes = 1;
316 scs->output_escaped = false;
317 scs->output_idle = false;
318 scs->transaction_bytes = 0;
319 scs->error = false;
321 WRITE_ONCE(scs->output, stream);
322 schedule_work(&scs->work);
324 WRITE_ONCE(scs->output, NULL);
329 struct fw_scs1x *scs = stream->rmidi->private_data;
331 wait_event(scs->idle_wait, scs->output_idle);
336 struct fw_scs1x *scs = oxfw->spec;
340 scs->hss_handler.offset);
347 struct fw_scs1x *scs = rmidi->private_data;
349 fw_core_remove_address_handler(&scs->hss_handler);
371 struct fw_scs1x *scs;
374 scs = devm_kzalloc(&oxfw->card->card_dev, sizeof(struct fw_scs1x),
376 if (!scs)
378 scs->fw_dev = fw_parent_device(oxfw->unit);
379 oxfw->spec = scs;
382 scs->hss_handler.length = HSS1394_MAX_PACKET_SIZE;
383 scs->hss_handler.address_callback = handle_hss;
384 scs->hss_handler.callback_data = scs;
385 err = fw_core_add_address_handler(&scs->hss_handler,
398 rmidi->private_data = scs;
412 INIT_WORK(&scs->work, scs_output_work);
413 init_waitqueue_head(&scs->idle_wait);
414 scs->output_idle = true;
418 fw_core_remove_address_handler(&scs->hss_handler);