|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * Copyright 1997-1998 by Apple Computer, Inc., All rights reserved.
27: * Copyright 1994-1997 NeXT Software, Inc., All rights reserved.
28: *
29: * ATADiskInt.h - private categories and typedefs for ATADisk class.
30: *
31: * HISTORY
32: * 07-Jul-1994 Rakesh Dubey at NeXT
33: * Created from original driver written by David Somayajulu.
34: */
35:
36: #ifdef DRIVER_PRIVATE
37:
38: #ifndef _BSD_DEV_ATADISKINTERNAL_H
39: #define _BSD_DEV_ATADISKINTERNAL_H
40:
41: #import <driverkit/return.h>
42: #import <driverkit/driverTypes.h>
43: #import "ATADisk.h"
44: #import "IdeCntPublic.h"
45:
46: /*
47: * Condition variable states for ioQueueLock.
48: */
49: #define NO_WORK_AVAILABLE 0
50: #define WORK_AVAILABLE 1
51:
52: /*
53: * Kernel-specific types.
54: */
55: #define NUM_IDE_DEV (MAX_IDE_DRIVES * MAX_IDE_CONTROLLERS) // 4
56:
57: #define NUM_IDE_PART 8
58: #define IDE_LIVE_PART (NUM_IDE_PART-1)
59:
60:
61: typedef struct {
62: /*
63: * One per unit. Note that the physDevice (live partition), the raw
64: * device, and the block devices for a given disk all share the same
65: * physbuf. Block devices don't use physbuf; arbitration for access to
66: * physbuf by the raw and live devices is done by physio().
67: */
68: struct buf *physbuf; /* for phys I/O */
69:
70: } Ide_dev_t;
71:
72: __private_extern__ void ide_init_idmap(id);
73: __private_extern__ IODevAndIdInfo *ide_idmap();
74:
75: /*
76: * General utility methods in ATADiskInternal.m.
77: */
78: @interface ATADisk(Internal)
79:
80: /*
81: * Print details about the drive.
82: */
83: -(void)printInfo:(ideIdentifyInfo_t *)ideIdentifyInfo unit:(unsigned int)unit;
84:
85: /*
86: * Probe for existing drive.
87: */
88: - (BOOL)ideDiskInit:(unsigned int)diskUnit target:(unsigned int)unit;
89:
90: - (IOReturn)initIdeDrive;
91:
92: /*
93: * One-time only initialization.
94: */
95: - initResources:controller;
96:
97: /*
98: * Free up local resources.
99: */
100: - free;
101:
102:
103: /*
104: * Alloc/free command buffers.
105: */
106: - (ideBuf_t *)allocIdeBuf:(void *)pending;
107: - (void)freeIdeBuf:(ideBuf_t *)ideBuf;
108:
109: /*
110: * Common read/write routine.
111: */
112: - (IOReturn) deviceRwCommon : (IdeCmd_t)command
113: block: (u_int) deviceBlock
114: length : (u_int)length
115: buffer : (void *)buffer
116: client : (vm_task_t)client
117: pending : (void *)pending
118: actualLength : (u_int *)actualLength;
119:
120: /*
121: * -- Enqueue an ideBuf_t on ioQueue<Disk,Nodisk>
122: * -- wake up the I/O thread
123: * -- wait for I/O complete (if ideBuf->pending == NULL)
124: */
125: - (IOReturn)enqueueIdeBuf : (ideBuf_t *)ideBuf;
126:
127: /*
128: * Either wake up the thread which is waiting on the ideCmdBuf, or send an
129: * ioComplete back to client. ideCmdBuf->status must be valid.
130: */
131: - (void)ideIoComplete : (ideBuf_t *)ideBuf;
132:
133: /*
134: * Main command dispatch method.
135: */
136: - (void)ideCmdDispatch : (ideBuf_t *)ideBuf;
137:
138: - (IOReturn) ideXfrIoReq:(ideIoReq_t *)ideIoReq;
139: /*
140: * Common read/write method.
141: */
142: - (IOReturn)ideRwCommon : (ideBuf_t *)ideBuf;
143:
144: - (void)logRwErr : (const char *)errType
145: block : (int)block
146: status : (ide_return_t)status
147: readFlag : (BOOL)readFlag;
148:
149: /*
150: * Unlock ioQLock, updating condition variable as appropriate.
151: */
152: - (void)unlockIoQLock;
153:
154: /*
155: * Top-level I/O thread.
156: */
157: volatile void ideThread(ATADisk *idisk);
158:
159: @end /* ATADisk(Internal) */
160:
161: #endif /* _BSD_DEV_ATADISKINTERNAL_H */
162:
163: #endif /* DRIVER_PRIVATE */
164:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.