Annotation of kernel/bsd/dev/ppc/drvApple96_SCSI/Timestamp.h, revision 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: /*
        !            26:        File:           Timestamp.h
        !            27: 
        !            28:     Contains:  Low-impact event timing function library
        !            29: 
        !            30:     Version:   1.1
        !            31: 
        !            32:     Written by: Martin Minow
        !            33: 
        !            34:     Copyright: � 1995-1997 by Apple Computer, Inc., all rights reserved.
        !            35: 
        !            36:     Change History (most recent first):
        !            37: 
        !            38:         <1>    04/14/97    MM      Conversion for Rhapsody SCSI from Copland Timestamp.h;7.
        !            39: */
        !            40: 
        !            41: /*                                                                             Timestamp.h                                                             */
        !            42: /*
        !            43:  * Timestamp.h
        !            44:  * Copyright 1992-97 Apple Computer Inc. All Rights Reserved.
        !            45:  * Programmed by Martin Minow,
        !            46:  *  Internet:  [email protected]
        !            47:  *  AppleLink: MINOW
        !            48:  * Version of May 25, 1995
        !            49:  */
        !            50: /*
        !            51:  * Usage:
        !            52:  *  1. In the makefile (or elsewhere), define TIMESTAMP non-zero. If zero, this
        !            53:  *             code will be stubbed out.
        !            54:  *  2. In your initialization routine, call MakeTimestampRecord() to create a
        !            55:  *             timestamp record. This will be stored in a static, private, variable.
        !            56:  *  3. When you want to time something, call StoreTimestamp() as follows:
        !            57:  *                     {
        !            58:  *                             ns_time_t               eventTime;
        !            59:  *                             IOGetTimestamp(&eventTime);
        !            60:  *                             StoreTimestamp(timestampTag, timestampValue, eventTime);
        !            61:  *                     }
        !            62:  *             Where timestampTag and timestampValue are 32-bit unsigned integers
        !            63:  *             that are not otherwise interpreted by the Timestamp library. By
        !            64:  *             convention, timestampTag contains a 4-byte character (Macintosh OSType)
        !            65:  *             that distinguishes timing events. The OSType, OSTag, and OSString macros
        !            66:  *             can be used to construct tag values. OSTag is useful for recording
        !            67:  *             elapsed time:
        !            68:  *                     StoreTimestamp(OSTag('+', "foo"), 0, startTime);
        !            69:  *                     ...
        !            70:  *                     StoreTimestamp(OSTag('-', "foo"), 0, endTime);
        !            71:  */
        !            72: 
        !            73: #import <objc/objc.h>
        !            74: #import <kernserv/ns_timer.h>
        !            75: #import <driverkit/return.h>
        !            76: #ifndef TIMESTAMP
        !            77: #define TIMESTAMP   1      /* TEMP TEMP TEMP */
        !            78: #endif
        !            79: 
        !            80: #ifndef __APPLE_TYPES_DEFINED__
        !            81: #define __APPLE_TYPES_DEFINED__ 1
        !            82: /**
        !            83:  * These typedef's reproduce (more or less) the Macintosh data types I'm familiar with.
        !            84:  */
        !            85: typedef void           *PhysicalAddress;   /* This is an address on the PCI bus        */
        !            86: typedef vm_address_t   LogicalAddress;         /* This address is "visible" to software        */
        !            87: typedef unsigned int   UInt32;                         /* A 32-bit unsigned integer                            */
        !            88: typedef unsigned char  UInt8;                          /* A "byte-sized" integer                                       */
        !            89: typedef signed int             SInt32;                         /* A 32-bit signed integer                                      */
        !            90: typedef BOOL                   Boolean;                        /* A TRUE/FALSE value (YES/NO in NeXT)          */
        !            91: #endif /* __APPLE_TYPES_DEFINED__ */
        !            92: 
        !            93: /**
        !            94:  * Construct a UInt32 from four characters.
        !            95:  */
        !            96: #define OSType(c0, c1, c2, c3) ( \
        !            97:        (   ((c0) << 24)        \
        !            98:         |  ((c1) << 16)        \
        !            99:         |  ((c2) <<  8)        \
        !           100:         |  ((c3) <<  0)        \
        !           101:                ))
        !           102: /**
        !           103:  * Construct an OSType from a single character and the first three characters from
        !           104:  * a given string.
        !           105:  */
        !           106: #define OSTag(where, what)  (OSType((where), (what)[0], (what)[1], (what)[2]))
        !           107: /**
        !           108:  * Construct an OSType from the first four characters of a C-string.
        !           109:  */
        !           110: #define OSString(what)         (OSType((what)[0], (what)[1], (what)[2], (what)[3]))
        !           111: 
        !           112: /*  .___________________________________________________________________________________.
        !           113:     | Each timestamp entry contains the following information:                         |
        !           114:     |      timestampTag    A user-specified OSType that identifies this timestamp      |
        !           115:     |      timestampValue  A user-specified additional value                           |
        !           116:     |      eventTime       The system UpTime value at the time the data was collected. |
        !           117:     .___________________________________________________________________________________.
        !           118: */
        !           119: struct TimestampDataRecord {
        !           120:     UInt32             timestampTag;       /* Caller's tag parameter                   */
        !           121:     UInt32             timestampValue;     /* Caller's value parameter                 */
        !           122:     ns_time_t          eventTime;          /* Nanoseconds at Timestamp call            */
        !           123: };
        !           124: typedef struct TimestampDataRecord TimestampDataRecord, *TimestampDataPtr;
        !           125: 
        !           126: #if TIMESTAMP
        !           127: void                                           MakeTimestampRecord(
        !           128:                UInt32                                  nEntries
        !           129:     );
        !           130: void                                           StoreNSecTimestamp(
        !           131:        UInt32                  timestampTag,
        !           132:                UInt32                                  timestampValue,
        !           133:                ns_time_t                               timestampEventNSec
        !           134:     );
        !           135: void                                           StoreTimestamp(
        !           136:        UInt32                  timestampTag,
        !           137:                UInt32                                  timestampValue
        !           138:     );
        !           139: /**
        !           140:  * Returns the next timestamp, if any, in resultData.
        !           141:  * @param   resultData     Where to store the data
        !           142:  * @return  TRUE           Valid data returned
        !           143:  *                     FALSE                   No data is available.
        !           144:  */
        !           145: Boolean                                                ReadTimestamp(
        !           146:                TimestampDataPtr                resultData
        !           147:     );
        !           148: /**
        !           149:  * Return a vector of timestamps.
        !           150:  * @param   resultVector    Where to store the data
        !           151:  * @param   count          On entrance, this has the maximum number of elements
        !           152:  *                                                     to return. On exit, this will have the actual number
        !           153:  *                                                     of elements that were returned.
        !           154:  * Note that, if the semaphore is blocked, ReadTimestampVector will not return any
        !           155:  * data. Data cannot be collected while ReadTimestampVector is copying data
        !           156:  * to the user's buffer. Note that, since the user's buffer will typically be
        !           157:  * in pageable memory, pageing I/O that might otherwise be timestamped will
        !           158:  * be lost.
        !           159:  */
        !           160: void                                           ReadTimestampVector(
        !           161:                TimestampDataPtr                resultVector,                   /* -> Result buffer                     */
        !           162:        UInt32                  *count                  /* -> Max count, <-actual   */
        !           163:     );
        !           164: 
        !           165: Boolean                                                EnableTimestamp(
        !           166:        Boolean                 enableTimestamp         /* TRUE to enable timing    */
        !           167:     );
        !           168: Boolean                                                PreserveTimestamp(
        !           169:        Boolean                 preserveFirst           /* TRUE to preserve start   */
        !           170:     );
        !           171: void                                           ResetTimestampIndex(void);
        !           172: UInt32                                         GetTimestampSemaphoreLostCounter(void);
        !           173: #else /* TIMESTAMP not compiled */
        !           174: #define MakeTimestampRecord(nEntries)  /* Nothing */
        !           175: #define StoreTimestamp(timestampTag, timestampValue, timestampEvent)   /* Nothing  */
        !           176: #define ReadTimestamp(resultData)   (0)                                        /* Fails    */
        !           177: #define ReadTimestampVector(resultVector, count) do {  \
        !           178:                if ((count) != NULL) {                                                  \
        !           179:                        *(count) = 0;                                                           \
        !           180:                }                                                                                               \
        !           181:     } while (0)
        !           182: #define EnableTimestamp(enableTimestamp)    (enableTimestamp)
        !           183: #define PreserveTimestamp(preserveFirst)    (preserveFirst)
        !           184: #define ResetTimestampIndex()                                          /* Nothing  */
        !           185: #define GetTimestampSemaphoreLostCount()    (0)
        !           186: #endif /* TIMESTAMP */
        !           187: 

unix.superglobalmegacorp.com

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