linux/sound/oss/sequencer.c
<<
>>
Prefs
   1/*
   2 * sound/oss/sequencer.c
   3 *
   4 * The sequencer personality manager.
   5 */
   6/*
   7 * Copyright (C) by Hannu Savolainen 1993-1997
   8 *
   9 * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
  10 * Version 2 (June 1991). See the "COPYING" file distributed with this software
  11 * for more info.
  12 */
  13/*
  14 * Thomas Sailer   : ioctl code reworked (vmalloc/vfree removed)
  15 * Alan Cox        : reformatted and fixed a pair of null pointer bugs
  16 */
  17#include <linux/kmod.h>
  18#include <linux/spinlock.h>
  19#include "sound_config.h"
  20
  21#include "midi_ctrl.h"
  22
  23static int      sequencer_ok;
  24static struct sound_timer_operations *tmr;
  25static int      tmr_no = -1;    /* Currently selected timer */
  26static int      pending_timer = -1;     /* For timer change operation */
  27extern unsigned long seq_time;
  28
  29static int      obsolete_api_used;
  30static DEFINE_SPINLOCK(lock);
  31
  32/*
  33 * Local counts for number of synth and MIDI devices. These are initialized
  34 * by the sequencer_open.
  35 */
  36static int      max_mididev;
  37static int      max_synthdev;
  38
  39/*
  40 * The seq_mode gives the operating mode of the sequencer:
  41 *      1 = level1 (the default)
  42 *      2 = level2 (extended capabilities)
  43 */
  44
  45#define SEQ_1   1
  46#define SEQ_2   2
  47static int      seq_mode = SEQ_1;
  48
  49static DECLARE_WAIT_QUEUE_HEAD(seq_sleeper);
  50static DECLARE_WAIT_QUEUE_HEAD(midi_sleeper);
  51
  52static int      midi_opened[MAX_MIDI_DEV];
  53
  54static int      midi_written[MAX_MIDI_DEV];
  55
  56static unsigned long prev_input_time;
  57static int      prev_event_time;
  58
  59#include "tuning.h"
  60
  61#define EV_SZ   8
  62#define IEV_SZ  8
  63
  64static unsigned char *queue;
  65static unsigned char *iqueue;
  66
  67static volatile int qhead, qtail, qlen;
  68static volatile int iqhead, iqtail, iqlen;
  69static volatile int seq_playing;
  70static volatile int sequencer_busy;
  71static int      output_threshold;
  72static long     pre_event_timeout;
  73static unsigned synth_open_mask;
  74
  75static int      seq_queue(unsigned char *note, char nonblock);
  76static void     seq_startplay(void);
  77static int      seq_sync(void);
  78static void     seq_reset(void);
  79
  80#if MAX_SYNTH_DEV > 15
  81#error Too many synthesizer devices enabled.
  82#endif
  83
  84int sequencer_read(int dev, struct file *file, char __user *buf, int count)
  85{
  86        int c = count, p = 0;
  87        int ev_len;
  88        unsigned long flags;
  89
  90        dev = dev >> 4;
  91
  92        ev_len = seq_mode == SEQ_1 ? 4 : 8;
  93
  94        spin_lock_irqsave(&lock,flags);
  95
  96        if (!iqlen)
  97        {
  98                spin_unlock_irqrestore(&lock,flags);
  99                if (file->f_flags & O_NONBLOCK) {
 100                        return -EAGAIN;
 101                }
 102
 103                interruptible_sleep_on_timeout(&midi_sleeper,
 104                                               pre_event_timeout);
 105                spin_lock_irqsave(&lock,flags);
 106                if (!iqlen)
 107                {
 108                        spin_unlock_irqrestore(&lock,flags);
 109                        return 0;
 110                }
 111        }
 112        while (iqlen && c >= ev_len)
 113        {
 114                char *fixit = (char *) &iqueue[iqhead * IEV_SZ];
 115                spin_unlock_irqrestore(&lock,flags);
 116                if (copy_to_user(&(buf)[p], fixit, ev_len))
 117                        return count - c;
 118                p += ev_len;
 119                c -= ev_len;
 120
 121                spin_lock_irqsave(&lock,flags);
 122                iqhead = (iqhead + 1) % SEQ_MAX_QUEUE;
 123                iqlen--;
 124        }
 125        spin_unlock_irqrestore(&lock,flags);
 126        return count - c;
 127}
 128
 129static void sequencer_midi_output(int dev)
 130{
 131        /*
 132         * Currently NOP
 133         */
 134}
 135
 136void seq_copy_to_input(unsigned char *event_rec, int len)
 137{
 138        unsigned long flags;
 139
 140        /*
 141         * Verify that the len is valid for the current mode.
 142         */
 143
 144        if (len != 4 && len != 8)
 145                return;
 146        if ((seq_mode == SEQ_1) != (len == 4))
 147                return;
 148
 149        if (iqlen >= (SEQ_MAX_QUEUE - 1))
 150                return;         /* Overflow */
 151
 152        spin_lock_irqsave(&lock,flags);
 153        memcpy(&iqueue[iqtail * IEV_SZ], event_rec, len);
 154        iqlen++;
 155        iqtail = (iqtail + 1) % SEQ_MAX_QUEUE;
 156        wake_up(&midi_sleeper);
 157        spin_unlock_irqrestore(&lock,flags);
 158}
 159EXPORT_SYMBOL(seq_copy_to_input);
 160
 161static void sequencer_midi_input(int dev, unsigned char data)
 162{
 163        unsigned int tstamp;
 164        unsigned char event_rec[4];
 165
 166        if (data == 0xfe)       /* Ignore active sensing */
 167                return;
 168
 169        tstamp = jiffies - seq_time;
 170
 171        if (tstamp != prev_input_time)
 172        {
 173                tstamp = (tstamp << 8) | SEQ_WAIT;
 174                seq_copy_to_input((unsigned char *) &tstamp, 4);
 175                prev_input_time = tstamp;
 176        }
 177        event_rec[0] = SEQ_MIDIPUTC;
 178        event_rec[1] = data;
 179        event_rec[2] = dev;
 180        event_rec[3] = 0;
 181
 182        seq_copy_to_input(event_rec, 4);
 183}
 184
 185void seq_input_event(unsigned char *event_rec, int len)
 186{
 187        unsigned long this_time;
 188
 189        if (seq_mode == SEQ_2)
 190                this_time = tmr->get_time(tmr_no);
 191        else
 192                this_time = jiffies - seq_time;
 193
 194        if (this_time != prev_input_time)
 195        {
 196                unsigned char   tmp_event[8];
 197
 198                tmp_event[0] = EV_TIMING;
 199                tmp_event[1] = TMR_WAIT_ABS;
 200                tmp_event[2] = 0;
 201                tmp_event[3] = 0;
 202                *(unsigned int *) &tmp_event[4] = this_time;
 203
 204                seq_copy_to_input(tmp_event, 8);
 205                prev_input_time = this_time;
 206        }
 207        seq_copy_to_input(event_rec, len);
 208}
 209EXPORT_SYMBOL(seq_input_event);
 210
 211int sequencer_write(int dev, struct file *file, const char __user *buf, int count)
 212{
 213        unsigned char event_rec[EV_SZ], ev_code;
 214        int p = 0, c, ev_size;
 215        int mode = translate_mode(file);
 216
 217        dev = dev >> 4;
 218
 219        DEB(printk("sequencer_write(dev=%d, count=%d)\n", dev, count));
 220
 221        if (mode == OPEN_READ)
 222                return -EIO;
 223
 224        c = count;
 225
 226        while (c >= 4)
 227        {
 228                if (copy_from_user((char *) event_rec, &(buf)[p], 4))
 229                        goto out;
 230                ev_code = event_rec[0];
 231
 232                if (ev_code == SEQ_FULLSIZE)
 233                {
 234                        int err, fmt;
 235
 236                        dev = *(unsigned short *) &event_rec[2];
 237                        if (dev < 0 || dev >= max_synthdev || synth_devs[dev] == NULL)
 238                                return -ENXIO;
 239
 240                        if (!(synth_open_mask & (1 << dev)))
 241                                return -ENXIO;
 242
 243                        fmt = (*(short *) &event_rec[0]) & 0xffff;
 244                        err = synth_devs[dev]->load_patch(dev, fmt, buf + p, c, 0);
 245                        if (err < 0)
 246                                return err;
 247
 248                        return err;
 249                }
 250                if (ev_code >= 128)
 251                {
 252                        if (seq_mode == SEQ_2 && ev_code == SEQ_EXTENDED)
 253                        {
 254                                printk(KERN_WARNING "Sequencer: Invalid level 2 event %x\n", ev_code);
 255                                return -EINVAL;
 256                        }
 257                        ev_size = 8;
 258
 259                        if (c < ev_size)
 260                        {
 261                                if (!seq_playing)
 262                                        seq_startplay();
 263                                return count - c;
 264                        }
 265                        if (copy_from_user((char *)&event_rec[4],
 266                                           &(buf)[p + 4], 4))
 267                                goto out;
 268
 269                }
 270                else
 271                {
 272                        if (seq_mode == SEQ_2)
 273                        {
 274                                printk(KERN_WARNING "Sequencer: 4 byte event in level 2 mode\n");
 275                                return -EINVAL;
 276                        }
 277                        ev_size = 4;
 278
 279                        if (event_rec[0] != SEQ_MIDIPUTC)
 280                                obsolete_api_used = 1;
 281                }
 282
 283                if (event_rec[0] == SEQ_MIDIPUTC)
 284                {
 285                        if (!midi_opened[event_rec[2]])
 286                        {
 287                                int err, mode;
 288                                int dev = event_rec[2];
 289
 290                                if (dev >= max_mididev || midi_devs[dev]==NULL)
 291                                {
 292                                        /*printk("Sequencer Error: Nonexistent MIDI device %d\n", dev);*/
 293                                        return -ENXIO;
 294                                }
 295                                mode = translate_mode(file);
 296
 297                                if ((err = midi_devs[dev]->open(dev, mode,
 298                                                                sequencer_midi_input, sequencer_midi_output)) < 0)
 299                                {
 300                                        seq_reset();
 301                                        printk(KERN_WARNING "Sequencer Error: Unable to open Midi #%d\n", dev);
 302                                        return err;
 303                                }
 304                                midi_opened[dev] = 1;
 305                        }
 306                }
 307                if (!seq_queue(event_rec, (file->f_flags & (O_NONBLOCK) ? 1 : 0)))
 308                {
 309                        int processed = count - c;
 310
 311                        if (!seq_playing)
 312                                seq_startplay();
 313
 314                        if (!processed && (file->f_flags & O_NONBLOCK))
 315                                return -EAGAIN;
 316                        else
 317                                return processed;
 318                }
 319                p += ev_size;
 320                c -= ev_size;
 321        }
 322
 323        if (!seq_playing)
 324                seq_startplay();
 325out:
 326        return count;
 327}
 328
 329static int seq_queue(unsigned char *note, char nonblock)
 330{
 331
 332        /*
 333         * Test if there is space in the queue
 334         */
 335
 336        if (qlen >= SEQ_MAX_QUEUE)
 337                if (!seq_playing)
 338                        seq_startplay();        /*
 339                                                 * Give chance to drain the queue
 340                                                 */
 341
 342        if (!nonblock && qlen >= SEQ_MAX_QUEUE && !waitqueue_active(&seq_sleeper)) {
 343                /*
 344                 * Sleep until there is enough space on the queue
 345                 */
 346                interruptible_sleep_on(&seq_sleeper);
 347        }
 348        if (qlen >= SEQ_MAX_QUEUE)
 349        {
 350                return 0;       /*
 351                                 * To be sure
 352                                 */
 353        }
 354        memcpy(&queue[qtail * EV_SZ], note, EV_SZ);
 355
 356        qtail = (qtail + 1) % SEQ_MAX_QUEUE;
 357        qlen++;
 358
 359        return 1;
 360}
 361
 362static int extended_event(unsigned char *q)
 363{
 364        int dev = q[2];
 365
 366        if (dev < 0 || dev >= max_synthdev)
 367                return -ENXIO;
 368
 369        if (!(synth_open_mask & (1 << dev)))
 370                return -ENXIO;
 371
 372        switch (q[1])
 373        {
 374                case SEQ_NOTEOFF:
 375                        synth_devs[dev]->kill_note(dev, q[3], q[4], q[5]);
 376                        break;
 377
 378                case SEQ_NOTEON:
 379                        if (q[4] > 127 && q[4] != 255)
 380                                return 0;
 381
 382                        if (q[5] == 0)
 383                        {
 384                                synth_devs[dev]->kill_note(dev, q[3], q[4], q[5]);
 385                                break;
 386                        }
 387                        synth_devs[dev]->start_note(dev, q[3], q[4], q[5]);
 388                        break;
 389
 390                case SEQ_PGMCHANGE:
 391                        synth_devs[dev]->set_instr(dev, q[3], q[4]);
 392                        break;
 393
 394                case SEQ_AFTERTOUCH:
 395                        synth_devs[dev]->aftertouch(dev, q[3], q[4]);
 396                        break;
 397
 398                case SEQ_BALANCE:
 399                        synth_devs[dev]->panning(dev, q[3], (char) q[4]);
 400                        break;
 401
 402                case SEQ_CONTROLLER:
 403                        synth_devs[dev]->controller(dev, q[3], q[4], (short) (q[5] | (q[6] << 8)));
 404                        break;
 405
 406                case SEQ_VOLMODE:
 407                        if (synth_devs[dev]->volume_method != NULL)
 408                                synth_devs[dev]->volume_method(dev, q[3]);
 409                        break;
 410
 411                default:
 412                        return -EINVAL;
 413        }
 414        return 0;
 415}
 416
 417static int find_voice(int dev, int chn, int note)
 418{
 419        unsigned short key;
 420        int i;
 421
 422        key = (chn << 8) | (note + 1);
 423        for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
 424                if (synth_devs[dev]->alloc.map[i] == key)
 425                        return i;
 426        return -1;
 427}
 428
 429static int alloc_voice(int dev, int chn, int note)
 430{
 431        unsigned short  key;
 432        int voice;
 433
 434        key = (chn << 8) | (note + 1);
 435
 436        voice = synth_devs[dev]->alloc_voice(dev, chn, note,
 437                                             &synth_devs[dev]->alloc);
 438        synth_devs[dev]->alloc.map[voice] = key;
 439        synth_devs[dev]->alloc.alloc_times[voice] =
 440                        synth_devs[dev]->alloc.timestamp++;
 441        return voice;
 442}
 443
 444static void seq_chn_voice_event(unsigned char *event_rec)
 445{
 446#define dev event_rec[1]
 447#define cmd event_rec[2]
 448#define chn event_rec[3]
 449#define note event_rec[4]
 450#define parm event_rec[5]
 451
 452        int voice = -1;
 453
 454        if ((int) dev > max_synthdev || synth_devs[dev] == NULL)
 455                return;
 456        if (!(synth_open_mask & (1 << dev)))
 457                return;
 458        if (!synth_devs[dev])
 459                return;
 460
 461        if (seq_mode == SEQ_2)
 462        {
 463                if (synth_devs[dev]->alloc_voice)
 464                        voice = find_voice(dev, chn, note);
 465
 466                if (cmd == MIDI_NOTEON && parm == 0)
 467                {
 468                        cmd = MIDI_NOTEOFF;
 469                        parm = 64;
 470                }
 471        }
 472
 473        switch (cmd)
 474        {
 475                case MIDI_NOTEON:
 476                        if (note > 127 && note != 255)  /* Not a seq2 feature */
 477                                return;
 478
 479                        if (voice == -1 && seq_mode == SEQ_2 && synth_devs[dev]->alloc_voice)
 480                        {
 481                                /* Internal synthesizer (FM, GUS, etc) */
 482                                voice = alloc_voice(dev, chn, note);
 483                        }
 484                        if (voice == -1)
 485                                voice = chn;
 486
 487                        if (seq_mode == SEQ_2 && (int) dev < num_synths)
 488                        {
 489                                /*
 490                                 * The MIDI channel 10 is a percussive channel. Use the note
 491                                 * number to select the proper patch (128 to 255) to play.
 492                                 */
 493
 494                                if (chn == 9)
 495                                {
 496                                        synth_devs[dev]->set_instr(dev, voice, 128 + note);
 497                                        synth_devs[dev]->chn_info[chn].pgm_num = 128 + note;
 498                                }
 499                                synth_devs[dev]->setup_voice(dev, voice, chn);
 500                        }
 501                        synth_devs[dev]->start_note(dev, voice, note, parm);
 502                        break;
 503
 504                case MIDI_NOTEOFF:
 505                        if (voice == -1)
 506                                voice = chn;
 507                        synth_devs[dev]->kill_note(dev, voice, note, parm);
 508                        break;
 509
 510                case MIDI_KEY_PRESSURE:
 511                        if (voice == -1)
 512                                voice = chn;
 513                        synth_devs[dev]->aftertouch(dev, voice, parm);
 514                        break;
 515
 516                default:;
 517        }
 518#undef dev
 519#undef cmd
 520#undef chn
 521#undef note
 522#undef parm
 523}
 524
 525
 526static void seq_chn_common_event(unsigned char *event_rec)
 527{
 528        unsigned char dev = event_rec[1];
 529        unsigned char cmd = event_rec[2];
 530        unsigned char chn = event_rec[3];
 531        unsigned char p1 = event_rec[4];
 532
 533        /* unsigned char p2 = event_rec[5]; */
 534        unsigned short w14 = *(short *) &event_rec[6];
 535
 536        if ((int) dev > max_synthdev || synth_devs[dev] == NULL)
 537                return;
 538        if (!(synth_open_mask & (1 << dev)))
 539                return;
 540        if (!synth_devs[dev])
 541                return;
 542
 543        switch (cmd)
 544        {
 545                case MIDI_PGM_CHANGE:
 546                        if (seq_mode == SEQ_2)
 547                        {
 548                                if (chn > 15)
 549                                        break;
 550
 551                                synth_devs[dev]->chn_info[chn].pgm_num = p1;
 552                                if ((int) dev >= num_synths)
 553                                        synth_devs[dev]->set_instr(dev, chn, p1);
 554                        }
 555                        else
 556                                synth_devs[dev]->set_instr(dev, chn, p1);
 557
 558                        break;
 559
 560                case MIDI_CTL_CHANGE:
 561                        if (seq_mode == SEQ_2)
 562                        {
 563                                if (chn > 15 || p1 > 127)
 564                                        break;
 565
 566                                synth_devs[dev]->chn_info[chn].controllers[p1] = w14 & 0x7f;
 567
 568                                if (p1 < 32)    /* Setting MSB should clear LSB to 0 */
 569                                        synth_devs[dev]->chn_info[chn].controllers[p1 + 32] = 0;
 570
 571                                if ((int) dev < num_synths)
 572                                {
 573                                        int val = w14 & 0x7f;
 574                                        int i, key;
 575
 576                                        if (p1 < 64)    /* Combine MSB and LSB */
 577                                        {
 578                                                val = ((synth_devs[dev]->
 579                                                        chn_info[chn].controllers[p1 & ~32] & 0x7f) << 7)
 580                                                        | (synth_devs[dev]->
 581                                                        chn_info[chn].controllers[p1 | 32] & 0x7f);
 582                                                p1 &= ~32;
 583                                        }
 584                                        /* Handle all playing notes on this channel */
 585
 586                                        key = ((int) chn << 8);
 587
 588                                        for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
 589                                                if ((synth_devs[dev]->alloc.map[i] & 0xff00) == key)
 590                                                        synth_devs[dev]->controller(dev, i, p1, val);
 591                                }
 592                                else
 593                                        synth_devs[dev]->controller(dev, chn, p1, w14);
 594                        }
 595                        else    /* Mode 1 */
 596                                synth_devs[dev]->controller(dev, chn, p1, w14);
 597                        break;
 598
 599                case MIDI_PITCH_BEND:
 600                        if (seq_mode == SEQ_2)
 601                        {
 602                                if (chn > 15)
 603                                        break;
 604
 605                                synth_devs[dev]->chn_info[chn].bender_value = w14;
 606
 607                                if ((int) dev < num_synths)
 608                                {
 609                                        /* Handle all playing notes on this channel */
 610                                        int i, key;
 611
 612                                        key = (chn << 8);
 613
 614                                        for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
 615                                                if ((synth_devs[dev]->alloc.map[i] & 0xff00) == key)
 616                                                        synth_devs[dev]->bender(dev, i, w14);
 617                                }
 618                                else
 619                                        synth_devs[dev]->bender(dev, chn, w14);
 620                        }
 621                        else    /* MODE 1 */
 622                                synth_devs[dev]->bender(dev, chn, w14);
 623                        break;
 624
 625                default:;
 626        }
 627}
 628
 629static int seq_timing_event(unsigned char *event_rec)
 630{
 631        unsigned char cmd = event_rec[1];
 632        unsigned int parm = *(int *) &event_rec[4];
 633
 634        if (seq_mode == SEQ_2)
 635        {
 636                int ret;
 637
 638                if ((ret = tmr->event(tmr_no, event_rec)) == TIMER_ARMED)
 639                        if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
 640                                wake_up(&seq_sleeper);
 641                return ret;
 642        }
 643        switch (cmd)
 644        {
 645                case TMR_WAIT_REL:
 646                        parm += prev_event_time;
 647
 648                        /*
 649                         * NOTE!  No break here. Execution of TMR_WAIT_REL continues in the
 650                         * next case (TMR_WAIT_ABS)
 651                         */
 652
 653                case TMR_WAIT_ABS:
 654                        if (parm > 0)
 655                        {
 656                                long time;
 657
 658                                time = parm;
 659                                prev_event_time = time;
 660
 661                                seq_playing = 1;
 662                                request_sound_timer(time);
 663
 664                                if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
 665                                        wake_up(&seq_sleeper);
 666                                return TIMER_ARMED;
 667                        }
 668                        break;
 669
 670                case TMR_START:
 671                        seq_time = jiffies;
 672                        prev_input_time = 0;
 673                        prev_event_time = 0;
 674                        break;
 675
 676                case TMR_STOP:
 677                        break;
 678
 679                case TMR_CONTINUE:
 680                        break;
 681
 682                case TMR_TEMPO:
 683                        break;
 684
 685                case TMR_ECHO:
 686                        if (seq_mode == SEQ_2)
 687                                seq_copy_to_input(event_rec, 8);
 688                        else
 689                        {
 690                                parm = (parm << 8 | SEQ_ECHO);
 691                                seq_copy_to_input((unsigned char *) &parm, 4);
 692                        }
 693                        break;
 694
 695                default:;
 696        }
 697
 698        return TIMER_NOT_ARMED;
 699}
 700
 701static void seq_local_event(unsigned char *event_rec)
 702{
 703        unsigned char   cmd = event_rec[1];
 704        unsigned int    parm = *((unsigned int *) &event_rec[4]);
 705
 706        switch (cmd)
 707        {
 708                case LOCL_STARTAUDIO:
 709                        DMAbuf_start_devices(parm);
 710                        break;
 711
 712                default:;
 713        }
 714}
 715
 716static void seq_sysex_message(unsigned char *event_rec)
 717{
 718        unsigned int dev = event_rec[1];
 719        int i, l = 0;
 720        unsigned char  *buf = &event_rec[2];
 721
 722        if (dev > max_synthdev)
 723                return;
 724        if (!(synth_open_mask & (1 << dev)))
 725                return;
 726        if (!synth_devs[dev])
 727                return;
 728
 729        l = 0;
 730        for (i = 0; i < 6 && buf[i] != 0xff; i++)
 731                l = i + 1;
 732
 733        if (!synth_devs[dev]->send_sysex)
 734                return;
 735        if (l > 0)
 736                synth_devs[dev]->send_sysex(dev, buf, l);
 737}
 738
 739static int play_event(unsigned char *q)
 740{
 741        /*
 742         * NOTE! This routine returns
 743         *   0 = normal event played.
 744         *   1 = Timer armed. Suspend playback until timer callback.
 745         *   2 = MIDI output buffer full. Restore queue and suspend until timer
 746         */
 747        unsigned int *delay;
 748
 749        switch (q[0])
 750        {
 751                case SEQ_NOTEOFF:
 752                        if (synth_open_mask & (1 << 0))
 753                                if (synth_devs[0])
 754                                        synth_devs[0]->kill_note(0, q[1], 255, q[3]);
 755                        break;
 756
 757                case SEQ_NOTEON:
 758                        if (q[4] < 128 || q[4] == 255)
 759                                if (synth_open_mask & (1 << 0))
 760                                        if (synth_devs[0])
 761                                                synth_devs[0]->start_note(0, q[1], q[2], q[3]);
 762                        break;
 763
 764                case SEQ_WAIT:
 765                        delay = (unsigned int *) q;     /*
 766                                                         * Bytes 1 to 3 are containing the *
 767                                                         * delay in 'ticks'
 768                                                         */
 769                        *delay = (*delay >> 8) & 0xffffff;
 770
 771                        if (*delay > 0)
 772                        {
 773                                long time;
 774
 775                                seq_playing = 1;
 776                                time = *delay;
 777                                prev_event_time = time;
 778
 779                                request_sound_timer(time);
 780
 781                                if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
 782                                        wake_up(&seq_sleeper);
 783                                /*
 784                                 * The timer is now active and will reinvoke this function
 785                                 * after the timer expires. Return to the caller now.
 786                                 */
 787                                return 1;
 788                        }
 789                        break;
 790
 791                case SEQ_PGMCHANGE:
 792                        if (synth_open_mask & (1 << 0))
 793                                if (synth_devs[0])
 794                                        synth_devs[0]->set_instr(0, q[1], q[2]);
 795                        break;
 796
 797                case SEQ_SYNCTIMER:     /*
 798                                         * Reset timer
 799                                         */
 800                        seq_time = jiffies;
 801                        prev_input_time = 0;
 802                        prev_event_time = 0;
 803                        break;
 804
 805                case SEQ_MIDIPUTC:      /*
 806                                         * Put a midi character
 807                                         */
 808                        if (midi_opened[q[2]])
 809                        {
 810                                int dev;
 811
 812                                dev = q[2];
 813
 814                                if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL)
 815                                        break;
 816
 817                                if (!midi_devs[dev]->outputc(dev, q[1]))
 818                                {
 819                                        /*
 820                                         * Output FIFO is full. Wait one timer cycle and try again.
 821                                         */
 822
 823                                        seq_playing = 1;
 824                                        request_sound_timer(-1);
 825                                        return 2;
 826                                }
 827                                else
 828                                        midi_written[dev] = 1;
 829                        }
 830                        break;
 831
 832                case SEQ_ECHO:
 833                        seq_copy_to_input(q, 4);        /*
 834                                                         * Echo back to the process
 835                                                         */
 836                        break;
 837
 838                case SEQ_PRIVATE:
 839                        if ((int) q[1] < max_synthdev)
 840                                synth_devs[q[1]]->hw_control(q[1], q);
 841                        break;
 842
 843                case SEQ_EXTENDED:
 844                        extended_event(q);
 845                        break;
 846
 847                case EV_CHN_VOICE:
 848                        seq_chn_voice_event(q);
 849                        break;
 850
 851                case EV_CHN_COMMON:
 852                        seq_chn_common_event(q);
 853                        break;
 854
 855                case EV_TIMING:
 856                        if (seq_timing_event(q) == TIMER_ARMED)
 857                        {
 858                                return 1;
 859                        }
 860                        break;
 861
 862                case EV_SEQ_LOCAL:
 863                        seq_local_event(q);
 864                        break;
 865
 866                case EV_SYSEX:
 867                        seq_sysex_message(q);
 868                        break;
 869
 870                default:;
 871        }
 872        return 0;
 873}
 874
 875/* called also as timer in irq context */
 876static void seq_startplay(void)
 877{
 878        int this_one, action;
 879        unsigned long flags;
 880
 881        while (qlen > 0)
 882        {
 883
 884                spin_lock_irqsave(&lock,flags);
 885                qhead = ((this_one = qhead) + 1) % SEQ_MAX_QUEUE;
 886                qlen--;
 887                spin_unlock_irqrestore(&lock,flags);
 888
 889                seq_playing = 1;
 890
 891                if ((action = play_event(&queue[this_one * EV_SZ])))
 892                {               /* Suspend playback. Next timer routine invokes this routine again */
 893                        if (action == 2)
 894                        {
 895                                qlen++;
 896                                qhead = this_one;
 897                        }
 898                        return;
 899                }
 900        }
 901
 902        seq_playing = 0;
 903
 904        if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
 905                wake_up(&seq_sleeper);
 906}
 907
 908static void reset_controllers(int dev, unsigned char *controller, int update_dev)
 909{
 910        int i;
 911        for (i = 0; i < 128; i++)
 912                controller[i] = ctrl_def_values[i];
 913}
 914
 915static void setup_mode2(void)
 916{
 917        int dev;
 918
 919        max_synthdev = num_synths;
 920
 921        for (dev = 0; dev < num_midis; dev++)
 922        {
 923                if (midi_devs[dev] && midi_devs[dev]->converter != NULL)
 924                {
 925                        synth_devs[max_synthdev++] = midi_devs[dev]->converter;
 926                }
 927        }
 928
 929        for (dev = 0; dev < max_synthdev; dev++)
 930        {
 931                int chn;
 932
 933                synth_devs[dev]->sysex_ptr = 0;
 934                synth_devs[dev]->emulation = 0;
 935
 936                for (chn = 0; chn < 16; chn++)
 937                {
 938                        synth_devs[dev]->chn_info[chn].pgm_num = 0;
 939                        reset_controllers(dev,
 940                                synth_devs[dev]->chn_info[chn].controllers,0);
 941                        synth_devs[dev]->chn_info[chn].bender_value = (1 << 7); /* Neutral */
 942                        synth_devs[dev]->chn_info[chn].bender_range = 200;
 943                }
 944        }
 945        max_mididev = 0;
 946        seq_mode = SEQ_2;
 947}
 948
 949int sequencer_open(int dev, struct file *file)
 950{
 951        int retval, mode, i;
 952        int level, tmp;
 953
 954        if (!sequencer_ok)
 955                sequencer_init();
 956
 957        level = ((dev & 0x0f) == SND_DEV_SEQ2) ? 2 : 1;
 958
 959        dev = dev >> 4;
 960        mode = translate_mode(file);
 961
 962        DEB(printk("sequencer_open(dev=%d)\n", dev));
 963
 964        if (!sequencer_ok)
 965        {
 966/*              printk("Sound card: sequencer not initialized\n");*/
 967                return -ENXIO;
 968        }
 969        if (dev)                /* Patch manager device (obsolete) */
 970                return -ENXIO;
 971
 972        if(synth_devs[dev] == NULL)
 973                request_module("synth0");
 974
 975        if (mode == OPEN_READ)
 976        {
 977                if (!num_midis)
 978                {
 979                        /*printk("Sequencer: No MIDI devices. Input not possible\n");*/
 980                        sequencer_busy = 0;
 981                        return -ENXIO;
 982                }
 983        }
 984        if (sequencer_busy)
 985        {
 986                return -EBUSY;
 987        }
 988        sequencer_busy = 1;
 989        obsolete_api_used = 0;
 990
 991        max_mididev = num_midis;
 992        max_synthdev = num_synths;
 993        pre_event_timeout = MAX_SCHEDULE_TIMEOUT;
 994        seq_mode = SEQ_1;
 995
 996        if (pending_timer != -1)
 997        {
 998                tmr_no = pending_timer;
 999                pending_timer = -1;
1000        }
1001        if (tmr_no == -1)       /* Not selected yet */
1002        {
1003                int i, best;
1004
1005                best = -1;
1006                for (i = 0; i < num_sound_timers; i++)
1007                        if (sound_timer_devs[i] && sound_timer_devs[i]->priority > best)
1008                        {
1009                                tmr_no = i;
1010                                best = sound_timer_devs[i]->priority;
1011                        }
1012                if (tmr_no == -1)       /* Should not be */
1013                        tmr_no = 0;
1014        }
1015        tmr = sound_timer_devs[tmr_no];
1016
1017        if (level == 2)
1018        {
1019                if (tmr == NULL)
1020                {
1021                        /*printk("sequencer: No timer for level 2\n");*/
1022                        sequencer_busy = 0;
1023                        return -ENXIO;
1024                }
1025                setup_mode2();
1026        }
1027        if (!max_synthdev && !max_mididev)
1028        {
1029                sequencer_busy=0;
1030                return -ENXIO;
1031        }
1032
1033        synth_open_mask = 0;
1034
1035        for (i = 0; i < max_mididev; i++)
1036        {
1037                midi_opened[i] = 0;
1038                midi_written[i] = 0;
1039        }
1040
1041        for (i = 0; i < max_synthdev; i++)
1042        {
1043                if (synth_devs[i]==NULL)
1044                        continue;
1045
1046                if (!try_module_get(synth_devs[i]->owner))
1047                        continue;
1048
1049                if ((tmp = synth_devs[i]->open(i, mode)) < 0)
1050                {
1051                        printk(KERN_WARNING "Sequencer: Warning! Cannot open synth device #%d (%d)\n", i, tmp);
1052                        if (synth_devs[i]->midi_dev)
1053                                printk(KERN_WARNING "(Maps to MIDI dev #%d)\n", synth_devs[i]->midi_dev);
1054                }
1055                else
1056                {
1057                        synth_open_mask |= (1 << i);
1058                        if (synth_devs[i]->midi_dev)
1059                                midi_opened[synth_devs[i]->midi_dev] = 1;
1060                }
1061        }
1062
1063        seq_time = jiffies;
1064
1065        prev_input_time = 0;
1066        prev_event_time = 0;
1067
1068        if (seq_mode == SEQ_1 && (mode == OPEN_READ || mode == OPEN_READWRITE))
1069        {
1070                /*
1071                 * Initialize midi input devices
1072                 */
1073
1074                for (i = 0; i < max_mididev; i++)
1075                        if (!midi_opened[i] && midi_devs[i])
1076                        {
1077                                if (!try_module_get(midi_devs[i]->owner))
1078                                        continue;
1079        
1080                                if ((retval = midi_devs[i]->open(i, mode,
1081                                        sequencer_midi_input, sequencer_midi_output)) >= 0)
1082                                {
1083                                        midi_opened[i] = 1;
1084                                }
1085                        }
1086        }
1087
1088        if (seq_mode == SEQ_2) {
1089                if (try_module_get(tmr->owner))
1090                        tmr->open(tmr_no, seq_mode);
1091        }
1092
1093        init_waitqueue_head(&seq_sleeper);
1094        init_waitqueue_head(&midi_sleeper);
1095        output_threshold = SEQ_MAX_QUEUE / 2;
1096
1097        return 0;
1098}
1099
1100static void seq_drain_midi_queues(void)
1101{
1102        int i, n;
1103
1104        /*
1105         * Give the Midi drivers time to drain their output queues
1106         */
1107
1108        n = 1;
1109
1110        while (!signal_pending(current) && n)
1111        {
1112                n = 0;
1113
1114                for (i = 0; i < max_mididev; i++)
1115                        if (midi_opened[i] && midi_written[i])
1116                                if (midi_devs[i]->buffer_status != NULL)
1117                                        if (midi_devs[i]->buffer_status(i))
1118                                                n++;
1119
1120                /*
1121                 * Let's have a delay
1122                 */
1123
1124                if (n)
1125                        interruptible_sleep_on_timeout(&seq_sleeper,
1126                                                       HZ/10);
1127        }
1128}
1129
1130void sequencer_release(int dev, struct file *file)
1131{
1132        int i;
1133        int mode = translate_mode(file);
1134
1135        dev = dev >> 4;
1136
1137        DEB(printk("sequencer_release(dev=%d)\n", dev));
1138
1139        /*
1140         * Wait until the queue is empty (if we don't have nonblock)
1141         */
1142
1143        if (mode != OPEN_READ && !(file->f_flags & O_NONBLOCK))
1144        {
1145                while (!signal_pending(current) && qlen > 0)
1146                {
1147                        seq_sync();
1148                        interruptible_sleep_on_timeout(&seq_sleeper,
1149                                                       3*HZ);
1150                        /* Extra delay */
1151                }
1152        }
1153
1154        if (mode != OPEN_READ)
1155                seq_drain_midi_queues();        /*
1156                                                 * Ensure the output queues are empty
1157                                                 */
1158        seq_reset();
1159        if (mode != OPEN_READ)
1160                seq_drain_midi_queues();        /*
1161                                                 * Flush the all notes off messages
1162                                                 */
1163
1164        for (i = 0; i < max_synthdev; i++)
1165        {
1166                if (synth_open_mask & (1 << i)) /*
1167                                                 * Actually opened
1168                                                 */
1169                        if (synth_devs[i])
1170                        {
1171                                synth_devs[i]->close(i);
1172
1173                                module_put(synth_devs[i]->owner);
1174
1175                                if (synth_devs[i]->midi_dev)
1176                                        midi_opened[synth_devs[i]->midi_dev] = 0;
1177                        }
1178        }
1179
1180        for (i = 0; i < max_mididev; i++)
1181        {
1182                if (midi_opened[i]) {
1183                        midi_devs[i]->close(i);
1184                        module_put(midi_devs[i]->owner);
1185                }
1186        }
1187
1188        if (seq_mode == SEQ_2) {
1189                tmr->close(tmr_no);
1190                module_put(tmr->owner);
1191        }
1192
1193        if (obsolete_api_used)
1194                printk(KERN_WARNING "/dev/music: Obsolete (4 byte) API was used by %s\n", current->comm);
1195        sequencer_busy = 0;
1196}
1197
1198static int seq_sync(void)
1199{
1200        if (qlen && !seq_playing && !signal_pending(current))
1201                seq_startplay();
1202
1203        if (qlen > 0)
1204                interruptible_sleep_on_timeout(&seq_sleeper, HZ);
1205        return qlen;
1206}
1207
1208static void midi_outc(int dev, unsigned char data)
1209{
1210        /*
1211         * NOTE! Calls sleep(). Don't call this from interrupt.
1212         */
1213
1214        int n;
1215        unsigned long flags;
1216
1217        /*
1218         * This routine sends one byte to the Midi channel.
1219         * If the output FIFO is full, it waits until there
1220         * is space in the queue
1221         */
1222
1223        n = 3 * HZ;             /* Timeout */
1224
1225        spin_lock_irqsave(&lock,flags);
1226        while (n && !midi_devs[dev]->outputc(dev, data)) {
1227                interruptible_sleep_on_timeout(&seq_sleeper, HZ/25);
1228                n--;
1229        }
1230        spin_unlock_irqrestore(&lock,flags);
1231}
1232
1233static void seq_reset(void)
1234{
1235        /*
1236         * NOTE! Calls sleep(). Don't call this from interrupt.
1237         */
1238
1239        int i;
1240        int chn;
1241        unsigned long flags;
1242
1243        sound_stop_timer();
1244
1245        seq_time = jiffies;
1246        prev_input_time = 0;
1247        prev_event_time = 0;
1248
1249        qlen = qhead = qtail = 0;
1250        iqlen = iqhead = iqtail = 0;
1251
1252        for (i = 0; i < max_synthdev; i++)
1253                if (synth_open_mask & (1 << i))
1254                        if (synth_devs[i])
1255                                synth_devs[i]->reset(i);
1256
1257        if (seq_mode == SEQ_2)
1258        {
1259                for (chn = 0; chn < 16; chn++)
1260                        for (i = 0; i < max_synthdev; i++)
1261                                if (synth_open_mask & (1 << i))
1262                                        if (synth_devs[i])
1263                                        {
1264                                                synth_devs[i]->controller(i, chn, 123, 0);      /* All notes off */
1265                                                synth_devs[i]->controller(i, chn, 121, 0);      /* Reset all ctl */
1266                                                synth_devs[i]->bender(i, chn, 1 << 13); /* Bender off */
1267                                        }
1268        }
1269        else    /* seq_mode == SEQ_1 */
1270        {
1271                for (i = 0; i < max_mididev; i++)
1272                        if (midi_written[i])    /*
1273                                                 * Midi used. Some notes may still be playing
1274                                                 */
1275                        {
1276                                /*
1277                                 *      Sending just a ACTIVE SENSING message should be enough to stop all
1278                                 *      playing notes. Since there are devices not recognizing the
1279                                 *      active sensing, we have to send some all notes off messages also.
1280                                 */
1281                                midi_outc(i, 0xfe);
1282
1283                                for (chn = 0; chn < 16; chn++)
1284                                {
1285                                        midi_outc(i, (unsigned char) (0xb0 + (chn & 0x0f)));            /* control change */
1286                                        midi_outc(i, 0x7b);     /* All notes off */
1287                                        midi_outc(i, 0);        /* Dummy parameter */
1288                                }
1289
1290                                midi_devs[i]->close(i);
1291
1292                                midi_written[i] = 0;
1293                                midi_opened[i] = 0;
1294                        }
1295        }
1296
1297        seq_playing = 0;
1298
1299        spin_lock_irqsave(&lock,flags);
1300
1301        if (waitqueue_active(&seq_sleeper)) {
1302                /*      printk( "Sequencer Warning: Unexpected sleeping process - Waking up\n"); */
1303                wake_up(&seq_sleeper);
1304        }
1305        spin_unlock_irqrestore(&lock,flags);
1306}
1307
1308static void seq_panic(void)
1309{
1310        /*
1311         * This routine is called by the application in case the user
1312         * wants to reset the system to the default state.
1313         */
1314
1315        seq_reset();
1316
1317        /*
1318         * Since some of the devices don't recognize the active sensing and
1319         * all notes off messages, we have to shut all notes manually.
1320         *
1321         *      TO BE IMPLEMENTED LATER
1322         */
1323
1324        /*
1325         * Also return the controllers to their default states
1326         */
1327}
1328
1329int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, void __user *arg)
1330{
1331        int midi_dev, orig_dev, val, err;
1332        int mode = translate_mode(file);
1333        struct synth_info inf;
1334        struct seq_event_rec event_rec;
1335        unsigned long flags;
1336        int __user *p = arg;
1337
1338        orig_dev = dev = dev >> 4;
1339
1340        switch (cmd)
1341        {
1342                case SNDCTL_TMR_TIMEBASE:
1343                case SNDCTL_TMR_TEMPO:
1344                case SNDCTL_TMR_START:
1345                case SNDCTL_TMR_STOP:
1346                case SNDCTL_TMR_CONTINUE:
1347                case SNDCTL_TMR_METRONOME:
1348                case SNDCTL_TMR_SOURCE:
1349                        if (seq_mode != SEQ_2)
1350                                return -EINVAL;
1351                        return tmr->ioctl(tmr_no, cmd, arg);
1352
1353                case SNDCTL_TMR_SELECT:
1354                        if (seq_mode != SEQ_2)
1355                                return -EINVAL;
1356                        if (get_user(pending_timer, p))
1357                                return -EFAULT;
1358                        if (pending_timer < 0 || pending_timer >= num_sound_timers || sound_timer_devs[pending_timer] == NULL)
1359                        {
1360                                pending_timer = -1;
1361                                return -EINVAL;
1362                        }
1363                        val = pending_timer;
1364                        break;
1365
1366                case SNDCTL_SEQ_PANIC:
1367                        seq_panic();
1368                        return -EINVAL;
1369
1370                case SNDCTL_SEQ_SYNC:
1371                        if (mode == OPEN_READ)
1372                                return 0;
1373                        while (qlen > 0 && !signal_pending(current))
1374                                seq_sync();
1375                        return qlen ? -EINTR : 0;
1376
1377                case SNDCTL_SEQ_RESET:
1378                        seq_reset();
1379                        return 0;
1380
1381                case SNDCTL_SEQ_TESTMIDI:
1382                        if (__get_user(midi_dev, p))
1383                                return -EFAULT;
1384                        if (midi_dev < 0 || midi_dev >= max_mididev || !midi_devs[midi_dev])
1385                                return -ENXIO;
1386
1387                        if (!midi_opened[midi_dev] &&
1388                                (err = midi_devs[midi_dev]->open(midi_dev, mode, sequencer_midi_input,
1389                                                     sequencer_midi_output)) < 0)
1390                                return err;
1391                        midi_opened[midi_dev] = 1;
1392                        return 0;
1393
1394                case SNDCTL_SEQ_GETINCOUNT:
1395                        if (mode == OPEN_WRITE)
1396                                return 0;
1397                        val = iqlen;
1398                        break;
1399
1400                case SNDCTL_SEQ_GETOUTCOUNT:
1401                        if (mode == OPEN_READ)
1402                                return 0;
1403                        val = SEQ_MAX_QUEUE - qlen;
1404                        break;
1405
1406                case SNDCTL_SEQ_GETTIME:
1407                        if (seq_mode == SEQ_2)
1408                                return tmr->ioctl(tmr_no, cmd, arg);
1409                        val = jiffies - seq_time;
1410                        break;
1411
1412                case SNDCTL_SEQ_CTRLRATE:
1413                        /*
1414                         * If *arg == 0, just return the current rate
1415                         */
1416                        if (seq_mode == SEQ_2)
1417                                return tmr->ioctl(tmr_no, cmd, arg);
1418
1419                        if (get_user(val, p))
1420                                return -EFAULT;
1421                        if (val != 0)
1422                                return -EINVAL;
1423                        val = HZ;
1424                        break;
1425
1426                case SNDCTL_SEQ_RESETSAMPLES:
1427                case SNDCTL_SYNTH_REMOVESAMPLE:
1428                case SNDCTL_SYNTH_CONTROL:
1429                        if (get_user(dev, p))
1430                                return -EFAULT;
1431                        if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
1432                                return -ENXIO;
1433                        if (!(synth_open_mask & (1 << dev)) && !orig_dev)
1434                                return -EBUSY;
1435                        return synth_devs[dev]->ioctl(dev, cmd, arg);
1436
1437                case SNDCTL_SEQ_NRSYNTHS:
1438                        val = max_synthdev;
1439                        break;
1440
1441                case SNDCTL_SEQ_NRMIDIS:
1442                        val = max_mididev;
1443                        break;
1444
1445                case SNDCTL_SYNTH_MEMAVL:
1446                        if (get_user(dev, p))
1447                                return -EFAULT;
1448                        if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
1449                                return -ENXIO;
1450                        if (!(synth_open_mask & (1 << dev)) && !orig_dev)
1451                                return -EBUSY;
1452                        val = synth_devs[dev]->ioctl(dev, cmd, arg);
1453                        break;
1454
1455                case SNDCTL_FM_4OP_ENABLE:
1456                        if (get_user(dev, p))
1457                                return -EFAULT;
1458                        if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
1459                                return -ENXIO;
1460                        if (!(synth_open_mask & (1 << dev)))
1461                                return -ENXIO;
1462                        synth_devs[dev]->ioctl(dev, cmd, arg);
1463                        return 0;
1464
1465                case SNDCTL_SYNTH_INFO:
1466                        if (get_user(dev, &((struct synth_info __user *)arg)->device))
1467                                return -EFAULT;
1468                        if (dev < 0 || dev >= max_synthdev)
1469                                return -ENXIO;
1470                        if (!(synth_open_mask & (1 << dev)) && !orig_dev)
1471                                return -EBUSY;
1472                        return synth_devs[dev]->ioctl(dev, cmd, arg);
1473
1474                /* Like SYNTH_INFO but returns ID in the name field */
1475                case SNDCTL_SYNTH_ID:
1476                        if (get_user(dev, &((struct synth_info __user *)arg)->device))
1477                                return -EFAULT;
1478                        if (dev < 0 || dev >= max_synthdev)
1479                                return -ENXIO;
1480                        if (!(synth_open_mask & (1 << dev)) && !orig_dev)
1481                                return -EBUSY;
1482                        memcpy(&inf, synth_devs[dev]->info, sizeof(inf));
1483                        strlcpy(inf.name, synth_devs[dev]->id, sizeof(inf.name));
1484                        inf.device = dev;
1485                        return copy_to_user(arg, &inf, sizeof(inf))?-EFAULT:0;
1486
1487                case SNDCTL_SEQ_OUTOFBAND:
1488                        if (copy_from_user(&event_rec, arg, sizeof(event_rec)))
1489                                return -EFAULT;
1490                        spin_lock_irqsave(&lock,flags);
1491                        play_event(event_rec.arr);
1492                        spin_unlock_irqrestore(&lock,flags);
1493                        return 0;
1494
1495                case SNDCTL_MIDI_INFO:
1496                        if (get_user(dev, &((struct midi_info __user *)arg)->device))
1497                                return -EFAULT;
1498                        if (dev < 0 || dev >= max_mididev || !midi_devs[dev])
1499                                return -ENXIO;
1500                        midi_devs[dev]->info.device = dev;
1501                        return copy_to_user(arg, &midi_devs[dev]->info, sizeof(struct midi_info))?-EFAULT:0;
1502
1503                case SNDCTL_SEQ_THRESHOLD:
1504                        if (get_user(val, p))
1505                                return -EFAULT;
1506                        if (val < 1)
1507                                val = 1;
1508                        if (val >= SEQ_MAX_QUEUE)
1509                                val = SEQ_MAX_QUEUE - 1;
1510                        output_threshold = val;
1511                        return 0;
1512
1513                case SNDCTL_MIDI_PRETIME:
1514                        if (get_user(val, p))
1515                                return -EFAULT;
1516                        if (val < 0)
1517                                val = 0;
1518                        val = (HZ * val) / 10;
1519                        pre_event_timeout = val;
1520                        break;
1521
1522                default:
1523                        if (mode == OPEN_READ)
1524                                return -EIO;
1525                        if (!synth_devs[0])
1526                                return -ENXIO;
1527                        if (!(synth_open_mask & (1 << 0)))
1528                                return -ENXIO;
1529                        if (!synth_devs[0]->ioctl)
1530                                return -EINVAL;
1531                        return synth_devs[0]->ioctl(0, cmd, arg);
1532        }
1533        return put_user(val, p);
1534}
1535
1536/* No kernel lock - we're using the global irq lock here */
1537unsigned int sequencer_poll(int dev, struct file *file, poll_table * wait)
1538{
1539        unsigned long flags;
1540        unsigned int mask = 0;
1541
1542        dev = dev >> 4;
1543
1544        spin_lock_irqsave(&lock,flags);
1545        /* input */
1546        poll_wait(file, &midi_sleeper, wait);
1547        if (iqlen)
1548                mask |= POLLIN | POLLRDNORM;
1549
1550        /* output */
1551        poll_wait(file, &seq_sleeper, wait);
1552        if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
1553                mask |= POLLOUT | POLLWRNORM;
1554        spin_unlock_irqrestore(&lock,flags);
1555        return mask;
1556}
1557
1558
1559void sequencer_timer(unsigned long dummy)
1560{
1561        seq_startplay();
1562}
1563EXPORT_SYMBOL(sequencer_timer);
1564
1565int note_to_freq(int note_num)
1566{
1567
1568        /*
1569         * This routine converts a midi note to a frequency (multiplied by 1000)
1570         */
1571
1572        int note, octave, note_freq;
1573        static int notes[] =
1574        {
1575                261632, 277189, 293671, 311132, 329632, 349232,
1576                369998, 391998, 415306, 440000, 466162, 493880
1577        };
1578
1579#define BASE_OCTAVE     5
1580
1581        octave = note_num / 12;
1582        note = note_num % 12;
1583
1584        note_freq = notes[note];
1585
1586        if (octave < BASE_OCTAVE)
1587                note_freq >>= (BASE_OCTAVE - octave);
1588        else if (octave > BASE_OCTAVE)
1589                note_freq <<= (octave - BASE_OCTAVE);
1590
1591        /*
1592         * note_freq >>= 1;
1593         */
1594
1595        return note_freq;
1596}
1597EXPORT_SYMBOL(note_to_freq);
1598
1599unsigned long compute_finetune(unsigned long base_freq, int bend, int range,
1600                 int vibrato_cents)
1601{
1602        unsigned long amount;
1603        int negative, semitones, cents, multiplier = 1;
1604
1605        if (!bend)
1606                return base_freq;
1607        if (!range)
1608                return base_freq;
1609
1610        if (!base_freq)
1611                return base_freq;
1612
1613        if (range >= 8192)
1614                range = 8192;
1615
1616        bend = bend * range / 8192;     /* Convert to cents */
1617        bend += vibrato_cents;
1618
1619        if (!bend)
1620                return base_freq;
1621
1622        negative = bend < 0 ? 1 : 0;
1623
1624        if (bend < 0)
1625                bend *= -1;
1626        if (bend > range)
1627                bend = range;
1628
1629        /*
1630           if (bend > 2399)
1631           bend = 2399;
1632         */
1633        while (bend > 2399)
1634        {
1635                multiplier *= 4;
1636                bend -= 2400;
1637        }
1638
1639        semitones = bend / 100;
1640        cents = bend % 100;
1641
1642        amount = (int) (semitone_tuning[semitones] * multiplier * cent_tuning[cents]) / 10000;
1643
1644        if (negative)
1645                return (base_freq * 10000) / amount;    /* Bend down */
1646        else
1647                return (base_freq * amount) / 10000;    /* Bend up */
1648}
1649EXPORT_SYMBOL(compute_finetune);
1650
1651void sequencer_init(void)
1652{
1653        if (sequencer_ok)
1654                return;
1655        queue = vmalloc(SEQ_MAX_QUEUE * EV_SZ);
1656        if (queue == NULL)
1657        {
1658                printk(KERN_ERR "sequencer: Can't allocate memory for sequencer output queue\n");
1659                return;
1660        }
1661        iqueue = vmalloc(SEQ_MAX_QUEUE * IEV_SZ);
1662        if (iqueue == NULL)
1663        {
1664                printk(KERN_ERR "sequencer: Can't allocate memory for sequencer input queue\n");
1665                vfree(queue);
1666                return;
1667        }
1668        sequencer_ok = 1;
1669}
1670EXPORT_SYMBOL(sequencer_init);
1671
1672void sequencer_unload(void)
1673{
1674        vfree(queue);
1675        vfree(iqueue);
1676        queue = iqueue = NULL;
1677}
1678
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.