Annotation of XNU/iokit/Drivers/network/drvIntel82557/i82557Inline.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: 
                     23: #ifndef _I82557INLINE_H
                     24: #define _I82557INLINE_H
                     25: 
                     26: //---------------------------------------------------------------------------
                     27: // CSR macros.
                     28: 
                     29: #define CSR_VALUE(name, x)     (((x) & name ## _MASK) >> name ## _SHIFT)
                     30: #define CSR_FIELD(name, x)     (((x) << name ## _SHIFT) & name ## _MASK)
                     31: #define CSR_MASK(name, x)      ((x) << name ## _SHIFT)
                     32: #define BIT(x)                         (1 << (x))
                     33: 
                     34: //---------------------------------------------------------------------------
                     35: // Flush write buffers.
                     36: 
                     37: #ifdef __ppc__
                     38: #define IOSync()       __asm__ ("eieio")
                     39: #else
                     40: #define IOSync()
                     41: #endif
                     42: 
                     43: //---------------------------------------------------------------------------
                     44: // CSR read & write.
                     45: 
                     46: #ifdef __BIG_ENDIAN__
                     47: 
                     48: #ifdef __ppc__
                     49: 
                     50: static inline
                     51: UInt8
                     52: OSReadLE8(volatile void * base)
                     53: {
                     54:        return *(volatile UInt8 *)base;
                     55: }
                     56: 
                     57: static inline
                     58: UInt16
                     59: OSReadLE16(volatile void * base)
                     60: {
                     61:     UInt16 result;
                     62:     __asm__ volatile("lhbrx %0, 0, %1"
                     63:                      : "=r" (result)
                     64:                      : "r" (base)
                     65:                      : "r0");
                     66:     return result;
                     67: }
                     68: 
                     69: static inline
                     70: UInt32
                     71: OSReadLE32(volatile void * base)
                     72: {
                     73:     UInt32 result;
                     74:     __asm__ volatile("lwbrx %0, 0, %1"
                     75:                      : "=r" (result)
                     76:                      : "r" (base)
                     77:                      : "r0");
                     78:     return result;
                     79: }
                     80: 
                     81: static inline
                     82: void
                     83: OSWriteLE8(volatile void * base, UInt8 data)
                     84: {
                     85:        *(volatile UInt8 *)base = data;
                     86:        IOSync();
                     87: }
                     88: 
                     89: static inline
                     90: void
                     91: OSWriteLE16(volatile void * base, UInt16 data)
                     92: {
                     93:     __asm__ volatile("sthbrx %0, 0, %1"
                     94:                      :
                     95:                      : "r" (data), "r" (base)
                     96:                      : "r0");
                     97:        IOSync();
                     98: }
                     99: 
                    100: static inline
                    101: void
                    102: OSWriteLE32(volatile void * base, UInt32 data)
                    103: {
                    104:     __asm__ volatile("stwbrx %0, 0, %1"
                    105:                      :
                    106:                      : "r" (data), "r" (base)
                    107:                      : "r0" );
                    108:        IOSync();
                    109: }
                    110: 
                    111: #else
                    112: #error Unknown big-endian processor type
                    113: #endif /* __ppc__ */
                    114: 
                    115: #else  /* little endian processor */
                    116: 
                    117: static inline
                    118: UInt8
                    119: OSReadLE8(volatile void * base)
                    120: {
                    121:        return *(volatile UInt8 *)base;
                    122: }
                    123: 
                    124: static inline
                    125: UInt16
                    126: OSReadLE16(volatile void * base)
                    127: {
                    128:        return *(volatile UInt16 *)base;
                    129: }
                    130: 
                    131: static inline
                    132: UInt32
                    133: OSReadLE32(volatile void * base)
                    134: {
                    135:        return *(volatile UInt32 *)base;
                    136: }
                    137: 
                    138: static inline
                    139: void
                    140: OSWriteLE8(volatile void * base, UInt8 data)
                    141: {
                    142:        *(volatile UInt8 *)base = data;
                    143: }
                    144: 
                    145: static inline
                    146: void
                    147: OSWriteLE16(volatile void * base, UInt16 data)
                    148: {
                    149:        *(volatile UInt16 *)base = data;
                    150: }
                    151: 
                    152: static inline
                    153: void
                    154: OSWriteLE32(volatile void * base, UInt32 data)
                    155: {
                    156:        *(volatile UInt32 *)base = data;
                    157: }
                    158: 
                    159: #endif /* __BIG_ENDIAN__ */
                    160: 
                    161: //---------------------------------------------------------------------------
                    162: // Set/clear bit(s) macros.
                    163: 
                    164: #define __SET(n) \
                    165: static inline void \
                    166: OSSetLE##n(volatile void * base, UInt##n bit) \
                    167: { \
                    168:        OSWriteLE##n(base, (OSReadLE##n(base) | (bit))); \
                    169: }
                    170: 
                    171: #define __CLR(n) \
                    172: static inline void \
                    173: OSClearLE##n(volatile void * base, UInt##n bit) \
                    174: { \
                    175:        OSWriteLE##n(base, (OSReadLE##n(base) & ~(bit))); \
                    176: }
                    177:        
                    178: __SET(8)
                    179: __SET(16)
                    180: __SET(32)
                    181: 
                    182: __CLR(8)
                    183: __CLR(16)
                    184: __CLR(32)
                    185: 
                    186: #endif /* !_I82557INLINE_H */

unix.superglobalmegacorp.com

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