|
|
1.1 root 1: /*
2: * Copyright (c) 1998 Apple Computer, Inc. All rights reserved.
3: *
4: * Interface definition for the Burgundy audio Controller
5: *
6: * HISTORY
7: *
8: */
9:
10: #ifndef _PPCBURGUNDY_H
11: #define _PPCBURGUNDY_H
12:
13: #include <IOKit/audio/IOAudioBus.h>
14:
15: // Uncomment the following line to log the driver activity
16: //#define DEBUGMODE
17:
18: struct IODBDMAChannelRegisters;
19: struct IODBDMADescriptor;
20:
21: class PPCBurgundy : public IOAudioBus
22: {
23: OSDeclareDefaultStructors(PPCBurgundy)
24:
25: // Controls for sound source and destination
26: enum soundControls {
27: kSpeakerMute = 0,
28: kSpeakerVolLeft = 1,
29: kSpeakerVolRight = 2,
30: kHeadphonesMute = 3,
31: kHeadphonesVolLeft = 4,
32: kHeadphonesVolRight = 5,
33: kMicrophoneMute = 6,
34: kCDMute = 7,
35: kMixerInVolLeft = 8,
36: kMixerInVolRight = 9,
37: kPassThruVolLeft = 10,
38: kPassThruVolRight = 11,
39: kPassThruMute = 12,
40: kLineOutMute = 13,
41: kNumControls
42: };
43:
44: // machines that support PPCBurgundy:
45: enum supportedHardware {
46: kMachineNone = 0,
47: kMachine9500,
48: kMachineGenericGossamer,
49: kMachineTypeSilk,
50: kMachineTypeWallstreet,
51: kMachineTypeiMac,
52: kMachineTypeYosemite,
53: kMachineTypeSawtooth,
54: kMachineType101,
55: kMachineTypeiBook,
56: // Do not add anything after this:
57: kMachineTypeUnknown
58: };
59:
60: // We save here whatever machine type we find:
61: int machineType;
62:
63: // Burgundy specific stuff:
64: bool bOutputActive;
65: bool bInputActive;
66: volatile UInt16 intsPending;
67: UInt16 intsSent;
68: UInt16 intsReceived;
69: UInt16 intsDelivered;
70:
71: // This registry entry contains a lot of useful informations about the
72: // way burgundy is wired:
73: IORegistryEntry *sound;
74:
75: // This is the base of the burgundy registers:
76: UInt8 *ioBaseBurgundy;
77:
78: bool isBordeaux;
79: UInt16 recsrc;
80: UInt32 fBlockSize;
81: UInt32 fBufMax;
82:
83: // Register Mirrors:
84: UInt32 soundControlRegister;
85: UInt32 CodecControlRegister[8];
86: UInt32 currentOutputMuteReg;
87: UInt32 lastStatusRegister;
88:
89: // for each line (in input and output) we have an audio component:
90: typedef IOAudioComponentImpl *IOAudioComponentImplPtr;
91: UInt16 numInputComponents;
92: UInt16 numOutputComponents;
93: IOAudioComponentImplPtr *fInputComponents;
94: IOAudioComponentImplPtr *fOutputComponents;
95:
96: // There is a set of components that depend on each other (e.g. speaker
97: // and headphones) the following map helps to always retrive the right
98: // component.
99: enum standardInputComponents {
100: kMicroPhone = 0,
101: kCD = 1,
102: kLineIn = 2,
103: kUndefinedInput
104: };
105:
106: enum standardOutputComponents {
107: kSpeaker = 0,
108: kHeadphones = 1,
109: kLineOut = 2,
110: kUndefinedOutput
111: };
112:
113: protected:
114: // Discovers if this is a burgundy compatible device:
115: bool implementsBurgundy(IORegistryEntry*);
116:
117: // Finds the hardware the driver is running in:
118: int findHostingHardware(IOService*);
119:
120: // Finds the number of DMA channels and their direction:
121: int numOfDMAChannels();
122:
123: // finds the number of components for the
124: // input and output lines:
125: int numberOfOutputComponents();
126: int numberOfInputComponents();
127:
128: // returns the frame rate fpr the input and output
129: // channels. Possibly reading them from the registry
130: UInt16 inputFrameRate();
131: UInt16 outputFrameRate();
132:
133: // Acts on changes of the status register:
134: void checkStatusRegister();
135: bool inputComponentStatus(int);
136: bool outputComponentStatus(int);
137:
138: // this handles the setup of the burgundy chip for each kind of
139: // hosting hardware.
140: bool dependentSetup();
141:
142: // Returns true if some sense line changed in the
143: // status register since the last check:
144: bool burgundyStatusChanged();
145:
146: // A mute function for each supported mute line:
147: void muteInternalSpeaker(bool);
148: void muteRCAOutput(bool);
149: void muteHeadphones(bool);
150: void muteCDLine(bool);
151:
152: // Sets the microphone as input source:
153: void setMicInput(bool);
154:
155: // Scale the volume to the range used by burgundy:
156: UInt8 scaleVolume(int);
157:
158: // sets the volume for the output lines:
159: void volumeInternalSpeakerLeft(int);
160: void volumeInternalSpeakerRight(int);
161:
162: void volumeRCAOutputLeft(int);
163: void volumeRCAOutputRight(int);
164:
165: void volumeHeadphonesLeft(int);
166: void volumeHeadphonesRight(int);
167:
168: void volumeCDLineLeft(int);
169: void volumeCDLineRight(int);
170:
171: // Sets the volume of all the above together
172: void volumeAllRight(int);
173: void volumeAllLeft(int);
174:
175: // Sets the gain for the input line:
176: void volumeMixerInLeft(int);
177: void volumeMixerInRight(int);
178:
179: // A sense function for each "jacked" input:
180: bool headphonesInserted();
181: bool microphoneInserted();
182:
183: // they return the strings for the component dictionaries
184: // for each kind of component
185: char* componentDictionarySpeaker();
186: char* componentDictionaryHeadphones();
187: char* componentDictionaryMicrophone();
188: char* componentDictionaryLineout();
189: char* componentDictionaryCD();
190: char* componentDictionaryMixerIn();
191: char* componentDictionaryMixerOut();
192: char* componentDictionaryPassThru();
193: char* componentDictionaryLinein();
194:
195: public:
196: virtual bool init(OSDictionary *properties = 0);
197: virtual void free();
198: virtual IOService* probe(IOService *provider, SInt32*);
199: virtual bool start(IOService*);
200: virtual void stop(IOService*);
201: virtual void DoClockTick(IOTimerEventSource*);
202: virtual void calculateTickInterval(AbsoluteTime *tickInterval);
203:
204: // These are all the functions we need to override:
205: virtual IOReturn SetControl(UInt16, int);
206: virtual void CreateAudioTopology(class IOCommandQueue *);
207: };
208:
209: #endif /* !_PPCBURGUNDY_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.