1/* cmedia_pci.h -- specifics for S3-based PCI audio cards */
2/* $Id: cmedia_pci.h,v 1.3 1999/10/13 02:29:19 cltien Exp $ */
3/*
4	Copyright 1999, Be Incorporated.   All Rights Reserved.
5	This file may be used under the terms of the Be Sample Code License.
6*/
7
8#if !defined(_CMEDIA_PCI_H)
9#define _CMEDIA_PCI_H
10
11#include <Drivers.h>
12#include <SupportDefs.h>
13#include <OS.h>
14#include "audio_driver.h"
15#include "midi_driver.h"
16#include "joystick_driver.h"
17
18
19#define CMEDIA_PCI_VENDOR_ID	0x13F6	/* C-Media Inc	*/
20#define CMEDIA_8338A_DEVICE_ID	0x0100	/* CM8338A		*/
21#define CMEDIA_8338B_DEVICE_ID	0x0101	/* CM8338B		*/
22#define CMEDIA_8738A_DEVICE_ID	0x0111	/* CM8738A		*/
23#define CMEDIA_8738B_DEVICE_ID	0x0112	/* CM8738B		*/
24
25#define CMEDIA_PCI_JOYSTICK_MIN_LATENCY 5000		/* 200 times a second! */
26#define CMEDIA_PCI_JOYSTICK_MAX_LATENCY 100000		/* 10 times a second */
27
28#define DRIVER_NAME "cmedia"
29
30typedef struct joystick cmedia_pci_joystick;
31
32
33typedef struct audio_format cmedia_pci_audio_format;
34typedef struct audio_buf_header cmedia_pci_audio_buf_header;
35
36
37/* the mux devices use these records */
38typedef audio_routing cmedia_pci_routing;
39
40/* this is the argument for ioctl() */
41typedef audio_routing_cmd cmedia_pci_routing_cmd;
42
43
44/* selectors for routing */
45#define CMEDIA_PCI_INPUT_MUX				B_AUDIO_INPUT_SELECT
46#define CMEDIA_PCI_MIC_BOOST				B_AUDIO_MIC_BOOST
47#define CMEDIA_PCI_MIDI_OUTPUT_TO_SYNTH	B_AUDIO_MIDI_OUTPUT_TO_SYNTH
48#define CMEDIA_PCI_MIDI_INPUT_TO_SYNTH		B_AUDIO_MIDI_INPUT_TO_SYNTH
49#define CMEDIA_PCI_MIDI_OUTPUT_TO_PORT		B_AUDIO_MIDI_OUTPUT_TO_PORT
50
51/* input MUX source values */
52#define CMEDIA_PCI_INPUT_CD				B_AUDIO_INPUT_CD
53#define CMEDIA_PCI_INPUT_DAC				B_AUDIO_INPUT_DAC
54#define CMEDIA_PCI_INPUT_AUX2				B_AUDIO_INPUT_AUX2
55#define CMEDIA_PCI_INPUT_LINE				B_AUDIO_INPUT_LINE_IN
56#define CMEDIA_PCI_INPUT_AUX1				B_AUDIO_INPUT_AUX1
57#define CMEDIA_PCI_INPUT_MIC				B_AUDIO_INPUT_MIC
58#define CMEDIA_PCI_INPUT_MIX_OUT			B_AUDIO_INPUT_MIX_OUT
59
60
61/* the mixer devices use these records */
62typedef audio_level cmedia_pci_level;
63
64/* this is the arg to ioctl() */
65typedef audio_level_cmd cmedia_pci_level_cmd;
66
67/* bitmask for the flags */
68#define CMEDIA_PCI_LEVEL_MUTED				B_AUDIO_LEVEL_MUTED
69
70/* selectors for levels */
71#define CMEDIA_PCI_LEFT_ADC_INPUT_G		B_AUDIO_MIX_ADC_LEFT
72#define CMEDIA_PCI_RIGHT_ADC_INPUT_G 		B_AUDIO_MIX_ADC_RIGHT
73#define CMEDIA_PCI_LEFT_AUX1_LOOPBACK_GAM	B_AUDIO_MIX_VIDEO_LEFT
74#define CMEDIA_PCI_RIGHT_AUX1_LOOPBACK_GAM	B_AUDIO_MIX_VIDEO_RIGHT
75#define CMEDIA_PCI_LEFT_CD_LOOPBACK_GAM	B_AUDIO_MIX_CD_LEFT
76#define CMEDIA_PCI_RIGHT_CD_LOOPBACK_GAM	B_AUDIO_MIX_CD_RIGHT
77#define CMEDIA_PCI_LEFT_LINE_LOOPBACK_GAM	B_AUDIO_MIX_LINE_IN_LEFT
78#define CMEDIA_PCI_RIGHT_LINE_LOOPBACK_GAM	B_AUDIO_MIX_LINE_IN_RIGHT
79#define CMEDIA_PCI_MIC_LOOPBACK_GAM		B_AUDIO_MIX_MIC
80#define CMEDIA_PCI_LEFT_SYNTH_OUTPUT_GAM	B_AUDIO_MIX_SYNTH_LEFT
81#define CMEDIA_PCI_RIGHT_SYNTH_OUTPUT_GAM	B_AUDIO_MIX_SYNTH_RIGHT
82#define CMEDIA_PCI_LEFT_AUX2_LOOPBACK_GAM	B_AUDIO_MIX_AUX_LEFT
83#define CMEDIA_PCI_RIGHT_AUX2_LOOPBACK_GAM	B_AUDIO_MIX_AUX_RIGHT
84#define CMEDIA_PCI_LEFT_MASTER_VOLUME_AM	B_AUDIO_MIX_LINE_OUT_LEFT
85#define CMEDIA_PCI_RIGHT_MASTER_VOLUME_AM	B_AUDIO_MIX_LINE_OUT_RIGHT
86#define CMEDIA_PCI_LEFT_PCM_OUTPUT_GAM		B_AUDIO_MIX_DAC_LEFT
87#define CMEDIA_PCI_RIGHT_PCM_OUTPUT_GAM	B_AUDIO_MIX_DAC_RIGHT
88#define CMEDIA_PCI_DIGITAL_LOOPBACK_AM		B_AUDIO_MIX_LOOPBACK_LEVEL
89
90
91/* secret handshake ioctl()s */
92#define SV_SECRET_HANDSHAKE 10100
93typedef struct {
94	bigtime_t	wr_time;
95	bigtime_t	rd_time;
96	uint32		wr_skipped;
97	uint32		rd_skipped;
98	uint64		wr_total;
99	uint64		rd_total;
100	uint32		_reserved_[6];
101} sv_handshake;
102#define SV_RD_TIME_WAIT 10101
103#define SV_WR_TIME_WAIT 10102
104typedef struct {
105	bigtime_t	time;
106	bigtime_t	bytes;
107	uint32		skipped;
108	uint32		_reserved_[3];
109} sv_timing;
110
111
112
113#endif	/* _CMEDIA_PCI_H */
114
115