home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / sound / seq_instr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.6 KB  |  111 lines

  1. #ifndef __SOUND_SEQ_INSTR_H
  2. #define __SOUND_SEQ_INSTR_H
  3.  
  4. /*
  5.  *  Main kernel header file for the ALSA sequencer
  6.  *  Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz>
  7.  *
  8.  *
  9.  *   This program is free software; you can redistribute it and/or modify
  10.  *   it under the terms of the GNU General Public License as published by
  11.  *   the Free Software Foundation; either version 2 of the License, or
  12.  *   (at your option) any later version.
  13.  *
  14.  *   This program is distributed in the hope that it will be useful,
  15.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  *   GNU General Public License for more details.
  18.  *
  19.  *   You should have received a copy of the GNU General Public License
  20.  *   along with this program; if not, write to the Free Software
  21.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  22.  *
  23.  */
  24. #include "seq_kernel.h"
  25.  
  26. /* Instrument cluster */
  27. struct snd_seq_kcluster {
  28.     snd_seq_instr_cluster_t cluster;
  29.     char name[32];
  30.     int priority;
  31.     struct snd_seq_kcluster *next;
  32. };
  33.  
  34. /* return pointer to private data */
  35. #define KINSTR_DATA(kinstr)    (void *)(((char *)kinstr) + sizeof(struct snd_seq_kinstr))
  36.  
  37. /* Instrument structure */
  38. struct snd_seq_kinstr {
  39.     struct snd_seq_instr instr;
  40.     char name[32];
  41.     int type;            /* instrument type */
  42.     int use;            /* use count */
  43.     int busy;            /* not useable */
  44.     int add_len;            /* additional length */
  45.     struct snd_seq_kinstr_ops *ops;    /* operations */
  46.     struct snd_seq_kinstr *next;
  47. };
  48.  
  49. #define SNDRV_SEQ_INSTR_HASH_SIZE        32
  50.  
  51. /* Instrument flags */
  52. #define SNDRV_SEQ_INSTR_FLG_DIRECT    (1<<0)    /* accept only direct events */
  53.  
  54. /* List of all instruments */
  55. struct snd_seq_kinstr_list {
  56.     struct snd_seq_kinstr *hash[SNDRV_SEQ_INSTR_HASH_SIZE];
  57.     int count;            /* count of all instruments */
  58.     
  59.     struct snd_seq_kcluster *chash[SNDRV_SEQ_INSTR_HASH_SIZE];
  60.     int ccount;            /* count of all clusters */
  61.  
  62.     int owner;            /* current owner of the instrument list */
  63.     unsigned int flags;
  64.  
  65.     spinlock_t lock;
  66.     spinlock_t ops_lock;
  67.     struct mutex ops_mutex;
  68.     unsigned long ops_flags;
  69. };
  70.  
  71. #define SNDRV_SEQ_INSTR_NOTIFY_REMOVE    0
  72. #define SNDRV_SEQ_INSTR_NOTIFY_CHANGE    1
  73.  
  74. struct snd_seq_kinstr_ops {
  75.     void *private_data;
  76.     long add_len;            /* additional length */
  77.     char *instr_type;
  78.     int (*info)(void *private_data, char *info_data, long len);
  79.     int (*put)(void *private_data, struct snd_seq_kinstr *kinstr,
  80.            char __user *instr_data, long len, int atomic, int cmd);
  81.     int (*get)(void *private_data, struct snd_seq_kinstr *kinstr,
  82.            char __user *instr_data, long len, int atomic, int cmd);
  83.     int (*get_size)(void *private_data, struct snd_seq_kinstr *kinstr, long *size);
  84.     int (*remove)(void *private_data, struct snd_seq_kinstr *kinstr, int atomic);
  85.     void (*notify)(void *private_data, struct snd_seq_kinstr *kinstr, int what);
  86.     struct snd_seq_kinstr_ops *next;
  87. };
  88.  
  89.  
  90. /* instrument operations */
  91. struct snd_seq_kinstr_list *snd_seq_instr_list_new(void);
  92. void snd_seq_instr_list_free(struct snd_seq_kinstr_list **list);
  93. int snd_seq_instr_list_free_cond(struct snd_seq_kinstr_list *list,
  94.                  struct snd_seq_instr_header *ifree,
  95.                  int client,
  96.                  int atomic);
  97. struct snd_seq_kinstr *snd_seq_instr_find(struct snd_seq_kinstr_list *list,
  98.                       struct snd_seq_instr *instr,
  99.                       int exact,
  100.                       int follow_alias);
  101. void snd_seq_instr_free_use(struct snd_seq_kinstr_list *list,
  102.                 struct snd_seq_kinstr *instr);
  103. int snd_seq_instr_event(struct snd_seq_kinstr_ops *ops,
  104.             struct snd_seq_kinstr_list *list,
  105.             struct snd_seq_event *ev,
  106.             int client,
  107.             int atomic,
  108.             int hop);
  109.  
  110. #endif /* __SOUND_SEQ_INSTR_H */
  111.