|
|
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: /* Copyright (c) 1991 NeXT Computer, Inc. All rights reserved.
25: *
26: * kernelDiskMethods.m - Kernel devsw glue for DiskObject class.
27: *
28: * HISTORY
29: * 02-May-91 Doug Mitchell at NeXT
30: * Created.
31: */
32:
33: /*
34: * HACK ALERT
35: * avoid including the code in signal.h to avoid the multiple definition of
36: * __quad_word.
37: */
38: #define _MACHINE_SIGNAL_ 1
39:
40: #import <driverkit/return.h>
41: #import <driverkit/IODisk.h>
42: #import <driverkit/kernelDiskMethods.h>
43: #import <bsd/sys/buf.h>
44: #import <bsd/sys/errno.h>
45: #import <kern/assert.h>
46: #import <kernserv/prototypes.h>
47: #import <driverkit/generalFuncs.h>
48:
49:
50: #ifdef ppc //bknight - 12/3/97 - Radar #2004660
51: #define GROK_APPLE 1
52: #endif //bknight - 12/3/97 - Radar #2004660
53:
54:
55: @implementation IODisk(kernelDiskMethods)
56:
57: /*
58: * Async I/O complete function. Supercedes ioComplete method in
59: * libDriver/User/IODeviceDispatch.m. The void * argument is actually
60: * a struct buf *, but the rest of the code in DiskObject doesn't
61: * need to know that.
62: */
63: - (void)completeTransfer : (void *)iobuf
64: withStatus : (IOReturn)status
65: actualLength : (unsigned)actualLength
66: {
67: struct buf *bp = iobuf;
68:
69: if(status != IO_R_SUCCESS) {
70: bp->b_flags |= B_ERROR;
71: }
72: bp->b_error = [self errnoFromReturn:status];
73: bp->b_resid = bp->b_bcount - actualLength;
74: biodone(bp);
75: }
76:
77:
78: /*
79: * Get/set idMap pointer.
80: */
81: - (IODevAndIdInfo *)devAndIdInfo
82: {
83: return(_devAndIdInfo);
84: }
85:
86: - (void)setDevAndIdInfo : (IODevAndIdInfo *)devAndIdInfo
87: {
88: _devAndIdInfo = devAndIdInfo;
89: }
90:
91: /*
92: * Obtain dev_t associated with this instance. This does not take into
93: * account partitions, since they are a IODiskPartition construct.
94: */
95: - (dev_t)blockDev
96: {
97: return _devAndIdInfo->blockDev;
98: }
99:
100: - (dev_t)rawDev
101: {
102: return _devAndIdInfo->rawDev;
103: }
104:
105: @end
106:
107: @implementation IODisk(kernelDiskMethodsPrivate)
108:
109: /*
110: * Register either a LogicalDisk or a DiskObject subclass with the owner's
111: * IODevAndIdInfo array.
112: */
113: - (void)registerUnixDisk : (int) partition
114: {
115: #ifdef GROK_APPLE //bknight - 12/3/97 - Radar #2004660
116: if( ! ( partition < ( 2 * NPART ) ) ) {
117: #else GROK_APPLE //bknight - 12/3/97 - Radar #2004660
118: if(partition > (NPART-2)) {
119: #endif GROK_APPLE //bknight - 12/3/97 - Radar #2004660
120: IOLog("%s registerUnixDisk: Bogus partition (%d)\n",
121: [self name], partition);
122: return;
123: }
124: if(_isPhysical) {
125: _devAndIdInfo->liveId = self;
126: }
127: else {
128: _devAndIdInfo->partitionId[partition] = self;
129: }
130: }
131:
132: /*
133: * FIXME:
134: * This needs some locking to prevent IO requests to nil IDs!
135: */
136: - (void)unregisterUnixDisk :(int) partition
137: {
138: #ifdef GROK_APPLE //bknight - 12/3/97 - Radar #2004660
139: if( ! ( partition < ( 2 * NPART ) ) ) {
140: #else GROK_APPLE //bknight - 12/3/97 - Radar #2004660
141: if(partition > (NPART-2)) {
142: #endif GROK_APPLE //bknight - 12/3/97 - Radar #2004660
143: IOLog("%s unregisterUnixDisk: Bogus partition (%d)\n",
144: [self name], partition);
145: return;
146: }
147: if(_isPhysical) {
148: _devAndIdInfo->liveId = nil;
149: }
150: else {
151: _devAndIdInfo->partitionId[partition] = nil;
152: }
153: }
154:
155: @end
156:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.