summaryrefslogtreecommitdiff
path: root/kernel/drv/oss_userdev/userdev.h
blob: 1ed1040a750b74004aa35e9e9295e4a41a1cfbc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
 * Purpose: Definition file for the oss_userdev driver
 *
 */
/*
 *
 * This file is part of Open Sound System.
 *
 * Copyright (C) 4Front Technologies 1996-2008.
 *
 * This this source file is released under GPL v2 license (no other versions).
 * See the COPYING file included in the main directory of this source
 * distribution for the license terms and conditions.
 *
 */
#define MAX_RATE 	192000
#define MAX_CHANNELS	64
#define SUPPORTED_FORMATS	(AFMT_S16_NE|AFMT_S32_NE)

typedef struct _userdev_devc_t userdev_devc_t;
typedef struct _userdev_portc_t userdev_portc_t;

struct _userdev_portc_t
{
  userdev_devc_t *devc;
  userdev_portc_t *peer;
  int audio_dev;
  int open_mode;
  int port_type;
#define PT_CLIENT	1
#define PT_SERVER	2

  /* State variables */
  int input_triggered, output_triggered;
};

struct _userdev_devc_t
{
  oss_device_t *osdev;
  int active;
  oss_mutex_t mutex;

  int open_count;	/* 0=not in use, 2=both client and server in use */

  int create_flags;	/* Flags from ioctl(USERDEV_CREATE_INSTANCE) */

  unsigned int poll_ticks; /* Number of clock tickes (OSS_HZ) between polls. */

  unsigned int match_method;
  unsigned int match_key;
  int mixer_dev;

  userdev_devc_t *next_instance;

  int rate;
  int channels;
  unsigned int fmt, fmt_bytes;
  timeout_id_t timeout_id;

  userdev_portc_t client_portc;
  userdev_portc_t server_portc;

  /*
   * Mixer related fields
   */
  int modify_counter;
  int mixer_values[USERDEV_MAX_MIXERS];
};

extern oss_device_t *userdev_osdev;
extern oss_mutex_t userdev_global_mutex;
extern userdev_devc_t *userdev_active_device_list;
extern userdev_devc_t *userdev_free_device_list;

extern int userdev_create_device_pair(void);
extern void userdev_delete_device_pair(userdev_devc_t *devc);
extern int usrdev_find_free_device_pair(void);
extern void userdev_reinit_instance(userdev_devc_t *devc);

extern char *userdev_client_devnode;
extern char *userdev_server_devnode;