[BACK]Return to midivar.h CVS log [TXT][DIR] Up to [local] / sys / dev

Annotation of sys/dev/midivar.h, Revision 1.1.1.1

1.1       nbrk        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_ */

CVSweb