|
|
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: Copyright (c) 1998 Apple Computer, Inc. All rights reserved. ! 24: ! 25: HISTORY ! 26: 1998-7-13 Godfrey van der Linden(gvdl) ! 27: Created. ! 28: 1998-10-30 Godfrey van der Linden(gvdl) ! 29: Converted to C++ ! 30: 1999-9-22 Godfrey van der Linden(gvdl) ! 31: Deprecated ! 32: ]*/ ! 33: #ifndef _IOKIT_IOCOMMANDQUEUE_H ! 34: #define _IOKIT_IOCOMMANDQUEUE_H ! 35: ! 36: #include <IOKit/IOEventSource.h> ! 37: ! 38: ! 39: ! 40: ! 41: #warning IOCommandQueue has been deprecated in favour of IOCommandGate and will be going away before too long. ! 42: ! 43: ! 44: ! 45: ! 46: ! 47: class IOCommandQueue; ! 48: ! 49: typedef void (*IOCommandQueueAction) ! 50: (OSObject *, void *field0, void *field1, void *field2, void *field3); ! 51: ! 52: class IOCommandQueue : public IOEventSource ! 53: { ! 54: OSDeclareDefaultStructors(IOCommandQueue) ! 55: ! 56: protected: ! 57: static const int kIOCQDefaultSize = 32; ! 58: ! 59: void *queue; ! 60: IOLock *producerLock; ! 61: semaphore_port_t producerSema; ! 62: int producerIndex, consumerIndex; ! 63: int size; ! 64: ! 65: virtual void free(); ! 66: ! 67: virtual bool checkForWork(); ! 68: ! 69: public: ! 70: static IOCommandQueue *commandQueue(OSObject *inOwner, ! 71: IOCommandQueueAction inAction = 0, ! 72: int inSize = kIOCQDefaultSize); ! 73: virtual bool init(OSObject *inOwner, ! 74: IOCommandQueueAction inAction = 0, ! 75: int inSize = kIOCQDefaultSize); ! 76: ! 77: virtual kern_return_t enqueueCommand(bool gotoSleep = true, ! 78: void *field0 = 0, void *field1 = 0, ! 79: void *field2 = 0, void *field3 = 0); ! 80: ! 81: // WARNING: This function can only be safely called from the appropriate ! 82: // work loop context. You should check IOWorkLoop::onThread is true. ! 83: // ! 84: // For each entry in the commandQueue call the target/action. ! 85: // Lockout all new entries to the queue while iterating. ! 86: // If the input fields are zero then the queue's owner/action will be used. ! 87: virtual int performAndFlush(OSObject *target = 0, ! 88: IOCommandQueueAction inAction = 0); ! 89: }; ! 90: ! 91: #endif /* !_IOKIT_IOCOMMANDQUEUE_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.