root/dev/midivar.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: midivar.h,v 1.5 2005/11/21 18:16:38 millert Exp $     */
    2 
    3 /*
    4  * Copyright (c) 2003, 2004 Alexandre Ratchov
    5  *
    6  * Permission to use, copy, modify, and distribute this software for any
    7  * purpose with or without fee is hereby granted, provided that the above
    8  * copyright notice and this permission notice appear in all copies.
    9  *
   10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   17  */
   18 
   19 #ifndef _SYS_DEV_MIDIVAR_H_
   20 #define _SYS_DEV_MIDIVAR_H_
   21 
   22 #include <dev/midi_if.h>
   23 #include <sys/device.h>
   24 #include <sys/selinfo.h>
   25 #include <sys/proc.h>
   26 #include <sys/timeout.h>
   27 
   28 #define MIDI_MAXWRITE   32      /* max bytes to give to the uart at once */
   29 #define MIDI_RATE       3125    /* midi uart baud rate in bytes/second */
   30 #define MIDI_UNIT(a)    ((a) & 0xff)
   31 #define MIDI_DEV2SC(a)  (midi_cd.cd_devs[MIDI_UNIT(a)])
   32 
   33 #include "sequencer.h"
   34 
   35 #if NSEQUENCER > 0
   36 struct midi_dev;                /* defined in sequencervar.h */
   37 #endif
   38 
   39 /*
   40  * simple ring buffer
   41  */
   42 #define MIDIBUF_SIZE            (1 << 10)
   43 #define MIDIBUF_MASK            (MIDIBUF_SIZE - 1)
   44 struct midi_buffer {
   45         unsigned char data[MIDIBUF_SIZE]; 
   46         unsigned      start, used;
   47 };
   48 #define MIDIBUF_START(buf)      ((buf)->start)
   49 #define MIDIBUF_END(buf)        (((buf)->start + (buf)->used) & MIDIBUF_MASK)
   50 #define MIDIBUF_USED(buf)       ((buf)->used)
   51 #define MIDIBUF_AVAIL(buf)      (MIDIBUF_SIZE - (buf)->used)
   52 #define MIDIBUF_ISFULL(buf)     ((buf)->used >= MIDIBUF_SIZE)
   53 #define MIDIBUF_ISEMPTY(buf)    ((buf)->used == 0)
   54 #define MIDIBUF_WRITE(buf, byte)                                \
   55         do {                                                    \
   56                 (buf)->data[MIDIBUF_END(buf)] = (byte);         \
   57                 (buf)->used++;                                  \
   58         } while(0)
   59 #define MIDIBUF_READ(buf, byte)                                 \
   60         do {                                                    \
   61                 (byte) = (buf)->data[(buf)->start++];           \
   62                 (buf)->start &= MIDIBUF_MASK;                   \
   63                 (buf)->used--;                                  \
   64         } while(0)
   65 #define MIDIBUF_REMOVE(buf, count)                              \
   66         do {                                                    \
   67                 (buf)->start += (count);                        \
   68                 (buf)->start &= MIDIBUF_MASK;                   \
   69                 (buf)->used  -= (count);                        \
   70         } while(0)
   71 #define MIDIBUF_INIT(buf)                                       \
   72         do {                                                    \
   73                 (buf)->start = (buf)->used = 0;                 \
   74         } while(0)
   75         
   76 
   77 struct midi_softc {
   78         struct device       dev;
   79         struct midi_hw_if  *hw_if;
   80         void               *hw_hdl;
   81         int                 isopen;
   82         int                 isbusy;             /* concerns only the output */
   83         int                 isdying;
   84         int                 flags;              /* open flags */
   85         int                 props;              /* midi hw proprieties */
   86         int                 rchan;
   87         int                 wchan;
   88         unsigned            wait;               /* see midi_out_do */
   89         struct selinfo      rsel;
   90         struct selinfo      wsel;
   91         struct proc        *async;
   92         struct timeout      timeo;
   93         struct midi_buffer  inbuf;
   94         struct midi_buffer  outbuf;
   95 #if NSEQUENCER > 0
   96         int                 seqopen;
   97         struct midi_dev    *seq_md;             /* structure that links us with the seq. */
   98         int                 evindex;
   99         unsigned char       evstatus;
  100         unsigned char       evdata[2];
  101 #endif /* NSEQUENCER > 0 */
  102 };
  103 
  104 #endif /* _SYS_DEV_MIDIVAR_H_ */

/* [<][>][^][v][top][bottom][index][help] */