]>
Commit | Line | Data |
---|---|---|
8cc72361 WYC |
1 | /** |
2 | * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. | |
3 | * | |
4 | * This source file is released under GPL v2 license (no other versions). | |
5 | * See the COPYING file included in the main directory of this source | |
6 | * distribution for the license terms and conditions. | |
7 | * | |
8 | * @File ctatc.h | |
9 | * | |
10 | * @Brief | |
11 | * This file contains the definition of the device resource management object. | |
12 | * | |
13 | * @Author Liu Chun | |
14 | * @Date Mar 28 2008 | |
15 | * | |
16 | */ | |
17 | ||
18 | #ifndef CTATC_H | |
19 | #define CTATC_H | |
20 | ||
21 | #include <linux/types.h> | |
22 | #include <linux/spinlock_types.h> | |
23 | #include <linux/pci.h> | |
24 | #include <linux/timer.h> | |
25 | #include <sound/core.h> | |
26 | ||
27 | #include "ctvmem.h" | |
28 | #include "ctresource.h" | |
29 | ||
30 | enum CTALSADEVS { /* Types of alsa devices */ | |
31 | FRONT, | |
8cc72361 | 32 | SURROUND, |
8372d498 TI |
33 | CLFE, |
34 | SIDE, | |
8cc72361 WYC |
35 | IEC958, |
36 | MIXER, | |
37 | NUM_CTALSADEVS /* This should always be the last */ | |
38 | }; | |
39 | ||
8cc72361 WYC |
40 | struct ct_atc_chip_sub_details { |
41 | u16 subsys; | |
42 | const char *nm_model; | |
43 | }; | |
44 | ||
45 | struct ct_atc_chip_details { | |
46 | u16 vendor; | |
47 | u16 device; | |
48 | const struct ct_atc_chip_sub_details *sub_details; | |
49 | const char *nm_card; | |
50 | }; | |
51 | ||
52 | struct ct_atc; | |
b7bbf876 TI |
53 | struct ct_timer; |
54 | struct ct_timer_instance; | |
8cc72361 WYC |
55 | |
56 | /* alsa pcm stream descriptor */ | |
57 | struct ct_atc_pcm { | |
58 | struct snd_pcm_substream *substream; | |
59 | void (*interrupt)(struct ct_atc_pcm *apcm); | |
b7bbf876 | 60 | struct ct_timer_instance *timer; |
8cc72361 | 61 | unsigned int started:1; |
8cc72361 WYC |
62 | |
63 | /* Only mono and interleaved modes are supported now. */ | |
64 | struct ct_vm_block *vm_block; | |
65 | void *src; /* SRC for interacting with host memory */ | |
66 | void **srccs; /* SRCs for sample rate conversion */ | |
67 | void **srcimps; /* SRC Input Mappers */ | |
68 | void **amixers; /* AMIXERs for routing converted data */ | |
69 | void *mono; /* A SUM resource for mixing chs to one */ | |
70 | unsigned char n_srcc; /* Number of converting SRCs */ | |
71 | unsigned char n_srcimp; /* Number of SRC Input Mappers */ | |
72 | unsigned char n_amixer; /* Number of AMIXERs */ | |
73 | }; | |
74 | ||
75 | /* Chip resource management object */ | |
76 | struct ct_atc { | |
77 | struct pci_dev *pci; | |
78 | struct snd_card *card; | |
79 | unsigned int rsr; /* reference sample rate in Hz */ | |
80 | unsigned int msr; /* master sample rate in rsr */ | |
81 | unsigned int pll_rate; /* current rate of Phase Lock Loop */ | |
82 | ||
9470195a TI |
83 | int chip_type; |
84 | int model; | |
85 | const char *chip_name; | |
86 | const char *model_name; | |
8cc72361 WYC |
87 | |
88 | struct ct_vm *vm; /* device virtual memory manager for this card */ | |
89 | int (*map_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
90 | void (*unmap_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
91 | unsigned long (*get_ptp_phys)(struct ct_atc *atc, int index); | |
92 | ||
93 | spinlock_t atc_lock; | |
8cc72361 WYC |
94 | |
95 | int (*pcm_playback_prepare)(struct ct_atc *atc, | |
96 | struct ct_atc_pcm *apcm); | |
97 | int (*pcm_playback_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
98 | int (*pcm_playback_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
99 | int (*pcm_playback_position)(struct ct_atc *atc, | |
100 | struct ct_atc_pcm *apcm); | |
101 | int (*spdif_passthru_playback_prepare)(struct ct_atc *atc, | |
102 | struct ct_atc_pcm *apcm); | |
103 | int (*pcm_capture_prepare)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
104 | int (*pcm_capture_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
105 | int (*pcm_capture_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm); | |
106 | int (*pcm_capture_position)(struct ct_atc *atc, | |
107 | struct ct_atc_pcm *apcm); | |
108 | int (*pcm_release_resources)(struct ct_atc *atc, | |
109 | struct ct_atc_pcm *apcm); | |
110 | int (*select_line_in)(struct ct_atc *atc); | |
111 | int (*select_mic_in)(struct ct_atc *atc); | |
112 | int (*select_digit_io)(struct ct_atc *atc); | |
113 | int (*line_front_unmute)(struct ct_atc *atc, unsigned char state); | |
114 | int (*line_surround_unmute)(struct ct_atc *atc, unsigned char state); | |
115 | int (*line_clfe_unmute)(struct ct_atc *atc, unsigned char state); | |
116 | int (*line_rear_unmute)(struct ct_atc *atc, unsigned char state); | |
117 | int (*line_in_unmute)(struct ct_atc *atc, unsigned char state); | |
118 | int (*spdif_out_unmute)(struct ct_atc *atc, unsigned char state); | |
119 | int (*spdif_in_unmute)(struct ct_atc *atc, unsigned char state); | |
120 | int (*spdif_out_get_status)(struct ct_atc *atc, unsigned int *status); | |
121 | int (*spdif_out_set_status)(struct ct_atc *atc, unsigned int status); | |
122 | int (*spdif_out_passthru)(struct ct_atc *atc, unsigned char state); | |
123 | int (*have_digit_io_switch)(struct ct_atc *atc); | |
124 | ||
125 | /* Don't touch! Used for internal object. */ | |
126 | void *rsc_mgrs[NUM_RSCTYP]; /* chip resource managers */ | |
127 | void *mixer; /* internal mixer object */ | |
128 | void *hw; /* chip specific hardware access object */ | |
129 | void **daios; /* digital audio io resources */ | |
130 | void **pcm; /* SUMs for collecting all pcm stream */ | |
131 | void **srcs; /* Sample Rate Converters for input signal */ | |
132 | void **srcimps; /* input mappers for SRCs */ | |
133 | unsigned char n_daio; | |
134 | unsigned char n_src; | |
135 | unsigned char n_srcimp; | |
136 | unsigned char n_pcm; | |
b7bbf876 TI |
137 | |
138 | struct ct_timer *timer; | |
8cc72361 WYC |
139 | }; |
140 | ||
141 | ||
142 | int __devinit ct_atc_create(struct snd_card *card, struct pci_dev *pci, | |
9470195a | 143 | unsigned int rsr, unsigned int msr, int chip_type, |
8cc72361 | 144 | struct ct_atc **ratc); |
2a36f67f | 145 | int __devinit ct_atc_create_alsa_devs(struct ct_atc *atc); |
8cc72361 WYC |
146 | |
147 | #endif /* CTATC_H */ |