|
|
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: * ATADisk.h - Exported Interface for IDE/ATA Disk device class.
30: *
31: * HISTORY
32: *
33: * 04-Mar-1996 Rakesh Dubey at NeXT
34: * Modified so that no memory is allocated at run-time.
35: *
36: * 07-Jul-1994 Rakesh Dubey at NeXT
37: * Created from original driver written by David Somayajulu.
38: */
39:
40: #ifdef DRIVER_PRIVATE
41:
42: #ifndef _BSD_DEV_ATADISK_H
43: #define _BSD_DEV_ATADISK_H 1
44:
45: #import <driverkit/return.h>
46: #import <driverkit/driverTypes.h>
47: #import <driverkit/IODisk.h>
48: #import <driverkit/kernelDiskMethods.h>
49:
50: #if (IO_DRIVERKIT_VERSION == 330)
51: #import <mach/time_stamp.h>
52: #else
53: #import <kern/queue.h>
54: #import <kern/time_stamp.h>
55: #endif
56:
57: #import <kernserv/clock_timer.h>
58: #import "IdeCntPublic.h"
59:
60: /*
61: * We will preallocate command buffers for doing I/O. This avoids a deadlock
62: * situation when we are running very low on memory. Comment out this #define
63: * if this behavior is not desired.
64: */
65: #define NO_ATA_RUNTIME_MEMORY_ALLOCATION
66:
67: /*
68: * Commands to be executed by I/O thread.
69: */
70: typedef enum {
71: IDEC_IOREQ, /* process IdeIoReq_t */
72: IDEC_READ, /* normal read */
73: IDEC_WRITE, /* normal write */
74: IDEC_ABORT, /* abort pending "needsDisk" I/Os */
75: IDEC_THREAD_ABORT, /* thread abort */
76: IDEC_INIT, /* initialize the ide drive */
77: } IdeCmd_t;
78:
79: /*
80: * Command buffer. These are enqueued on one of the I/O queues by exported
81: * methods and dequeued and processed by the I/O thread.
82: */
83: typedef struct {
84: IdeCmd_t command; /* IDEC_IOREQ, etc. */
85: ideIoReq_t *ideIoReq; /* command block passed to controller,
86: (IDEC_IOREQ only) */
87: u_int block; /* IDE_READ and IDE_WRITE only */
88: u_int blockCnt; /* ditto */
89: void *buf; /* where to r/w, for all except IDEC_IOREQ */
90: vm_task_t client; /* address space containing *buf */
91: id waitLock; /* NXConditionLock */
92: void *pending; /* if non-NULL, async request; this is */
93: /* used to ioComplete: the operation. */
94:
95: unsigned needsDisk:1,
96: oneWay:1; /* 1 ==> no I/O complete */
97:
98: /*
99: * Fields valid at I/O complete time.
100: */
101: u_int bytesXfr; /* bytes actually moved
102: (IDEC_{READ,WRITE} only) */
103: IOReturn status; /* result */
104:
105: queue_chain_t link;
106: queue_chain_t bufLink;
107:
108: } ideBuf_t;
109:
110: @interface ATADisk:IODisk<IODiskReadingAndWriting, IOPhysicalDiskMethods>
111: {
112: @private
113: /*
114: * The queues on which all I/Os are enqueued by exported methods.
115: */
116: queue_head_t _ioQueueDisk; /* for I/Os requiring disk */
117: queue_head_t _ioQueueNodisk; /* for other I/O */
118:
119: #ifdef NO_ATA_RUNTIME_MEMORY_ALLOCATION
120: queue_head_t _ideBufQueue;
121: id _ideBufLock;
122: #define MAX_NUM_ATABUF 128
123: ideBuf_t _ideBufPool[MAX_NUM_ATABUF];
124: #endif NO_ATA_RUNTIME_MEMORY_ALLOCATION
125:
126: /*
127: * NXConditionLock - protects the queues; I/O thread sleeps on this.
128: */
129: id _ioQLock;
130:
131: /*
132: * The pseudo controller to streamline interrupts, resets and diagnostics
133: * commands.
134: */
135: id _cntrlr;
136:
137: /*
138: * Commands to read and write from the disk are cached here.
139: */
140: unsigned _ideReadCommand;
141: unsigned _ideWriteCommand;
142:
143: unsigned _ideReadCommandPIO;
144: unsigned _ideWriteCommandPIO;
145:
146: u_int _ideControllerType;
147:
148: ideDriveInfo_t _ideInfo;
149: unsigned _driveNum;
150: unsigned char _ideDriveName[32];
151: }
152:
153: /*
154: * Probe is invoked at load time. It determines what devices are on the
155: * bus and alloc's and init:'s an instance of this class for each one.
156: */
157: + (BOOL)probe:deviceDescription;
158: + (IODeviceStyle) deviceStyle;
159: + (Protocol **) requiredProtocols;
160: + (BOOL)hd_devsw_init:deviceDescription;
161:
162: - (ideDriveInfo_t)ideGetDriveInfo;
163: - (id)cntrlr;
164: - (unsigned)driveNum;
165:
166: @end
167:
168: #endif /* _BSD_DEV_ATADISK_H */
169:
170: #endif /* DRIVER_PRIVATE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.