|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * 1 Dec 1998 suurballe Created.
24: */
25:
26: #include "IOCudaADBController.h"
27: #include "AppleCuda.h"
28:
29: #define super IOADBController
30: OSDefineMetaClassAndStructors(IOCudaADBController, IOADBController)
31:
32: // **********************************************************************************
33: // init
34: //
35: // **********************************************************************************
36: bool IOCudaADBController::init ( OSDictionary * properties, AppleCuda * driver )
37: {
38:
39: CudaDriver = driver;
40: pollList = 0;
41: autopollOn = false;
42:
43: return super::init(properties);
44: }
45:
46:
47: // **********************************************************************************
48: // start
49: //
50: // **********************************************************************************
51: bool IOCudaADBController::start ( IOService *nub )
52: {
53: if( !super::start(nub))
54: return false;
55:
56: CudaDriver->registerForADBInterrupts ( autopollHandler, this );
57: return true;
58: }
59:
60:
61: // **********************************************************************************
62: // setAutoPollPeriod
63: //
64: // **********************************************************************************
65: IOReturn IOCudaADBController::setAutoPollPeriod ( int microsecs )
66: {
67: cuda_request_t cmd;
68:
69: adb_init_request(&cmd);
70: ADB_BUILD_CMD3(&cmd, ADB_PACKET_PSEUDO, ADB_PSEUDOCMD_SET_AUTO_RATE,
71: ((microsecs + 999) / 1000));
72:
73: return CudaDriver->doSyncRequest(&cmd);
74: }
75:
76:
77: // **********************************************************************************
78: // getAutoPollPeriod
79: //
80: // **********************************************************************************
81: IOReturn IOCudaADBController::getAutoPollPeriod ( int * microsecs )
82: {
83: IOReturn err;
84: cuda_request_t cmd;
85: UInt8 data;
86:
87: adb_init_request(&cmd);
88: ADB_BUILD_CMD2(&cmd, ADB_PACKET_PSEUDO, ADB_PSEUDOCMD_GET_AUTO_RATE);
89: cmd.a_reply.a_buffer = &data;
90: cmd.a_reply.a_bcount = sizeof(UInt8);
91:
92: err = CudaDriver->doSyncRequest(&cmd);
93:
94: if ( err == kIOReturnSuccess ) {
95: *microsecs = data * 1000;
96: }
97: return err;
98: }
99:
100:
101: // **********************************************************************************
102: // getAutoPollPeriod
103: //
104: // **********************************************************************************
105: IOReturn IOCudaADBController::setAutoPollList ( UInt16 activeAddressMask )
106: {
107: cuda_request_t cmd;
108:
109: adb_init_request(&cmd);
110: ADB_BUILD_CMD2(&cmd, ADB_PACKET_PSEUDO, ADB_PSEUDOCMD_SET_DEVICE_LIST)
111:
112: cmd.a_cmd.a_buffer = (UInt8 *) &activeAddressMask;
113: cmd.a_cmd.a_bcount = sizeof(UInt16);
114:
115: return CudaDriver->doSyncRequest(&cmd);
116: }
117:
118:
119: // **********************************************************************************
120: // getAutoPollList
121: //
122: // **********************************************************************************
123: IOReturn IOCudaADBController::getAutoPollList ( UInt16 * activeAddressMask )
124: {
125: cuda_request_t cmd;
126:
127: adb_init_request(&cmd);
128: ADB_BUILD_CMD2(&cmd, ADB_PACKET_PSEUDO, ADB_PSEUDOCMD_GET_DEVICE_LIST);
129: cmd.a_reply.a_buffer = (UInt8 *) activeAddressMask;
130: cmd.a_reply.a_bcount = sizeof(UInt16);
131:
132: return CudaDriver->doSyncRequest(&cmd);
133: }
134:
135:
136: // **********************************************************************************
137: // setAutoPollEnable
138: //
139: // **********************************************************************************
140: IOReturn IOCudaADBController::setAutoPollEnable ( bool enable )
141: {
142: cuda_request_t cmd;
143:
144: adb_init_request(&cmd);
145: ADB_BUILD_CMD3(&cmd, ADB_PACKET_PSEUDO, ADB_PSEUDOCMD_START_STOP_AUTO_POLL, (enable ? 1 : 0));
146:
147: return CudaDriver->doSyncRequest(&cmd);
148: }
149:
150:
151: // **********************************************************************************
152: // resetBus
153: //
154: // **********************************************************************************
155: IOReturn IOCudaADBController::resetBus ( void )
156: {
157: cuda_request_t cmd;
158:
159: adb_init_request(&cmd);
160: ADB_BUILD_CMD2(&cmd, ADB_PACKET_ADB, ADB_ADBCMD_RESET_BUS );
161:
162: return CudaDriver->doSyncRequest(&cmd);
163: }
164:
165:
166: // **********************************************************************************
167: // flushDevice
168: //
169: // **********************************************************************************
170: IOReturn IOCudaADBController::flushDevice ( IOADBAddress address )
171: {
172: cuda_request_t cmd;
173:
174: adb_init_request(&cmd);
175: ADB_BUILD_CMD2(&cmd, ADB_PACKET_ADB, (ADB_ADBCMD_FLUSH_ADB | (address << 4)));
176:
177: return CudaDriver->doSyncRequest(&cmd);
178: }
179:
180:
181:
182: // **********************************************************************************
183: // readFromDevice
184: //
185: // **********************************************************************************
186: IOReturn IOCudaADBController::readFromDevice (IOADBAddress address, IOADBRegister adbRegister,
187: UInt8 * data, IOByteCount * length )
188: {
189: IOReturn err;
190: cuda_request_t cmd;
191:
192: adb_init_request(&cmd);
193: ADB_BUILD_CMD2(&cmd, ADB_PACKET_ADB,
194: (ADB_ADBCMD_READ_ADB | (address << 4) | (adbRegister & 3)));
195:
196: cmd.a_reply.a_buffer = data;
197: cmd.a_reply.a_bcount = *length;
198:
199: err = CudaDriver->doSyncRequest(&cmd);
200:
201: //IOLog("Read %d, Addr %x Reg %x = %04x\n", err, address, adbRegister, *((UInt16 *)data));
202:
203: if( err == ADB_RET_OK ) {
204: *length = cmd.a_reply.a_bcount;
205: }
206: else {
207: *length = 0;
208: }
209:
210: return err;
211: }
212:
213:
214: // **********************************************************************************
215: // writeToDevice
216: //
217: // **********************************************************************************
218: IOReturn IOCudaADBController::writeToDevice ( IOADBAddress address, IOADBRegister adbRegister,
219: UInt8 * data, IOByteCount * length )
220: {
221: IOReturn err;
222: cuda_request_t cmd;
223:
224: adb_init_request(&cmd);
225:
226: ADB_BUILD_CMD2(&cmd, ADB_PACKET_ADB,
227: (ADB_ADBCMD_WRITE_ADB | (address << 4) | (adbRegister & 3)));
228: cmd.a_cmd.a_buffer = data;
229: cmd.a_cmd.a_bcount = *length;
230:
231: err = CudaDriver->doSyncRequest(&cmd);
232:
233: //IOLog("Write %d, Addr %x Reg %x = %04x\n", err, address, adbRegister, *((UInt16 *)data));
234:
235: if( err == ADB_RET_OK ) {
236: *length = cmd.a_reply.a_bcount;
237: }
238: else {
239: *length = 0;
240: }
241: return err;
242: }
243:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.