Annotation of drvEIDE/EIDE.drvproj/EIDE.lksproj/IdeDisk.h, revision 1.1.1.1

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.0 (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:  * Copyright 1997-1998 by Apple Computer, Inc., All rights reserved.
                     26:  * Copyright 1994-1997 NeXT Software, Inc., All rights reserved.
                     27:  *
                     28:  * IdeDisk.h - Exported Interface for IDE Disk device class. 
                     29:  *
                     30:  * HISTORY 
                     31:  *
                     32:  * 04-Mar-1996  Rakesh Dubey at NeXT
                     33:  *     Modified so that no memory is allocated at run-time.
                     34:  *
                     35:  * 07-Jul-1994  Rakesh Dubey at NeXT
                     36:  *     Created from original driver written by David Somayajulu.
                     37:  */
                     38: 
                     39: #ifdef DRIVER_PRIVATE
                     40: 
                     41: #ifndef        _BSD_DEV_IDEDISK_H
                     42: #define _BSD_DEV_IDEDISK_H 1
                     43: 
                     44: #import <driverkit/return.h>
                     45: #import <driverkit/driverTypes.h>
                     46: #import <driverkit/IODisk.h>
                     47: #import <driverkit/kernelDiskMethods.h>
                     48: 
                     49: #if (IO_DRIVERKIT_VERSION == 330)
                     50: #import <mach/time_stamp.h>
                     51: #else
                     52: #import <kern/queue.h>
                     53: #import <kern/time_stamp.h>
                     54: #endif
                     55: 
                     56: #import <kernserv/clock_timer.h>
                     57: #import "IdeCntPublic.h"
                     58: 
                     59: /*
                     60:  * We will preallocate command buffers for doing I/O. This avoids a deadlock
                     61:  * situation when we are running very low on memory. Comment out this #define
                     62:  * if this behavior is not desired.
                     63:  */
                     64: #define NO_ATA_RUNTIME_MEMORY_ALLOCATION
                     65: 
                     66: /*
                     67:  * Commands to be executed by I/O thread.
                     68:  */
                     69: typedef enum {
                     70:     IDEC_IOREQ,                        /* process IdeIoReq_t */
                     71:     IDEC_READ,                 /* normal read */
                     72:     IDEC_WRITE,                        /* normal write */
                     73:     IDEC_ABORT,                        /* abort pending "needsDisk" I/Os */
                     74:     IDEC_THREAD_ABORT,         /* thread abort */
                     75:     IDEC_INIT,                 /* initialize the ide drive */
                     76: } IdeCmd_t;
                     77: 
                     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: 
                    111: 
                    112: @interface IdeDisk:IODisk<IODiskReadingAndWriting, IOPhysicalDiskMethods>
                    113: {
                    114: @private
                    115:     /*
                    116:      * The queues on which all I/Os are enqueued by exported methods. 
                    117:      */
                    118:     queue_head_t       _ioQueueDisk;   /* for I/Os requiring disk */
                    119:     queue_head_t       _ioQueueNodisk; /* for other I/O */
                    120: 
                    121: #ifdef NO_ATA_RUNTIME_MEMORY_ALLOCATION
                    122:     queue_head_t       _ideBufQueue;
                    123:     id                 _ideBufLock;
                    124: #define MAX_NUM_ATABUF         128
                    125:     ideBuf_t           _ideBufPool[MAX_NUM_ATABUF];
                    126: #endif NO_ATA_RUNTIME_MEMORY_ALLOCATION
                    127:     
                    128:     /*
                    129:      * NXConditionLock - protects the queues; I/O thread sleeps on this. 
                    130:      */
                    131:     id                         _ioQLock;
                    132:     
                    133:     /*
                    134:      * The pseudo controller to streamline interrupts, resets and diagnostics
                    135:      * commands. 
                    136:      */
                    137:     id                 _cntrlr;
                    138:     
                    139:     /*
                    140:      * Commands to read and write from the disk are cached here. 
                    141:      */
                    142:     unsigned           _ideReadCommand;
                    143:     unsigned           _ideWriteCommand;
                    144: 
                    145:     ideDriveInfo_t     _ideInfo;
                    146:     unsigned           _driveNum;
                    147:     unsigned char      _ideDriveName[32];
                    148: }
                    149: 
                    150: /*
                    151:  * Probe is invoked at load time. It determines what devices are on the
                    152:  * bus and alloc's and init:'s an instance of this class for each one.
                    153:  */
                    154: + (BOOL)probe:deviceDescription;
                    155: + (IODeviceStyle) deviceStyle;
                    156: + (Protocol **) requiredProtocols;
                    157: + (BOOL)hd_devsw_init:deviceDescription;
                    158: 
                    159: - (ideDriveInfo_t)ideGetDriveInfo;
                    160: - (id)cntrlr;
                    161: - (unsigned)driveNum;
                    162: 
                    163: @end
                    164: 
                    165: #endif /* _BSD_DEV_IDEDISK_H */
                    166: 
                    167: #endif /* DRIVER_PRIVATE */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.