Annotation of driverkit/libDriver/ppc/IODBDMA.m, 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.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:  * Copyright (c) 1997 Apple Computer, Inc.
                     26:  *
                     27:  *
                     28:  * HISTORY
                     29:  *
                     30:  * Simon Douglas  10 Nov 97
                     31:  * - first checked in, mostly from machdep/ppc/dbdma.c
                     32:  *
                     33:  */
                     34: 
                     35: 
                     36: #import        <driverkit/ppc/IODBDMA.h>
                     37: 
                     38: 
                     39: void
                     40: IODBDMAStart( volatile IODBDMAChannelRegisters *registers, volatile IODBDMADescriptor *physicalDescPtr)
                     41: {
                     42: 
                     43:     if( ((int) physicalDescPtr) & 0xf)
                     44:        panic("IODBDMAStart: unaligned IODBDMADescriptor");
                     45: 
                     46:     eieio();
                     47:     IOSetDBDMAInterruptSelect(registers, 0xff000000);          // clear out interrupts
                     48: 
                     49:     IOSetDBDMAChannelControl( registers,
                     50:        IOClearDBDMAChannelControlBits( kdbdmaRun | kdbdmaPause | kdbdmaFlush | kdbdmaWake | kdbdmaDead | kdbdmaActive ));
                     51: 
                     52:     while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
                     53:        eieio();
                     54: 
                     55:     IOSetDBDMACommandPtr( registers, (unsigned int) physicalDescPtr);
                     56: 
                     57:     IOSetDBDMAChannelControl( registers,
                     58:        IOSetDBDMAChannelControlBits( kdbdmaRun | kdbdmaWake ));
                     59: 
                     60: }
                     61: 
                     62: void
                     63: IODBDMAStop( volatile IODBDMAChannelRegisters *registers)
                     64: {
                     65: 
                     66:     IOSetDBDMAChannelControl( registers,
                     67:          IOClearDBDMAChannelControlBits( kdbdmaRun )
                     68:        | IOSetDBDMAChannelControlBits(  kdbdmaFlush ));
                     69: 
                     70:     while( IOGetDBDMAChannelStatus( registers) & ( kdbdmaActive | kdbdmaFlush))
                     71:        eieio();
                     72: 
                     73: }
                     74: 
                     75: void
                     76: IODBDMAFlush( volatile IODBDMAChannelRegisters *registers)
                     77: {
                     78: 
                     79:     IOSetDBDMAChannelControl( registers,
                     80:         IOSetDBDMAChannelControlBits(  kdbdmaFlush ));
                     81: 
                     82:     while( IOGetDBDMAChannelStatus( registers) & kdbdmaFlush)
                     83:        eieio();
                     84: 
                     85: }
                     86: 
                     87: void
                     88: IODBDMAReset( volatile IODBDMAChannelRegisters *registers)
                     89: {
                     90: 
                     91:     IOSetDBDMAChannelControl( registers,
                     92:        IOClearDBDMAChannelControlBits( kdbdmaRun | kdbdmaPause | kdbdmaFlush | kdbdmaWake | kdbdmaDead | kdbdmaActive ));
                     93: 
                     94:     while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
                     95:        eieio();
                     96: 
                     97: }
                     98: 
                     99: void
                    100: IODBDMAContinue( volatile IODBDMAChannelRegisters *registers)
                    101: {
                    102: 
                    103:     IOSetDBDMAChannelControl( registers,
                    104:          IOClearDBDMAChannelControlBits( kdbdmaPause | kdbdmaDead )
                    105:        | IOSetDBDMAChannelControlBits(  kdbdmaRun | kdbdmaWake ));
                    106: 
                    107: }
                    108: 
                    109: void
                    110: IODBDMAPause( volatile IODBDMAChannelRegisters *registers)
                    111: {
                    112: 
                    113:     IOSetDBDMAChannelControl( registers,
                    114:         IOSetDBDMAChannelControlBits(  kdbdmaPause ));
                    115: 
                    116:     while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
                    117:        eieio();
                    118: 
                    119: }
                    120: 
                    121: IOReturn
                    122: IOAllocatePhysicallyContiguousMemory(
                    123:                unsigned int size, unsigned int options,
                    124:                IOVirtualAddress * logical, IOPhysicalAddress * physical )
                    125: {
                    126:     IOReturn           err;
                    127:     vm_offset_t                mem;
                    128: 
                    129:     if( (size > 4096) || (options))
                    130:        return( IO_R_UNSUPPORTED);
                    131: 
                    132:     mem = (vm_offset_t) IOMalloc( size);
                    133:     *logical = (IOVirtualAddress) mem;
                    134: 
                    135:     if( mem) {
                    136:        err = IOPhysicalFromVirtual( IOVmTaskSelf(), mem, (vm_offset_t *) physical);
                    137:        if( err)
                    138:            IOFree( (char *)mem, size);
                    139: 
                    140:     } else {
                    141:        err = IO_R_NO_MEMORY;
                    142:        *physical = 0;
                    143:     }
                    144: 
                    145:     return( err);
                    146: }
                    147: 
                    148: IOReturn
                    149: IOFreePhysicallyContiguousMemory( IOVirtualAddress * logical, unsigned int size)
                    150: {
                    151:     IOFree( logical, size);
                    152:     return( IO_R_SUCCESS);
                    153: }
                    154: 
                    155: 
                    156: 
                    157: 
                    158: 

unix.superglobalmegacorp.com

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