IOFireWireSBP2LibMgmtORB.h   [plain text]


/*
 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 *
 * The contents of this file constitute Original Code as defined in and
 * are subject to the Apple Public Source License Version 1.1 (the
 * "License").  You may not use this file except in compliance with the
 * License.  Please obtain a copy of the License at
 * http://www.apple.com/publicsource and read it before using this file.
 *
 * This Original Code and all software distributed under the License are
 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * @APPLE_LICENSE_HEADER_END@
 */

#ifndef _IOKIT_IOFIREWIRESBP2LIBMGMTORB_H_
#define _IOKIT_IOFIREWIRESBP2LIBMGMTORB_H_

#include "IOFireWireSBP2LibLUN.h"
#include "IOFireWireSBP2UserClientCommon.h"

class IOFireWireSBP2LibMgmtORB
{

public:

	struct InterfaceMap 
	{
        IUnknownVTbl *pseudoVTable;
        IOFireWireSBP2LibMgmtORB *obj;
    };
	
	IOFireWireSBP2LibMgmtORB( void );
	virtual ~IOFireWireSBP2LibMgmtORB();
	
	virtual IOReturn init( io_connect_t connection, mach_port_t asyncPort );
	
protected:

	//////////////////////////////////////
	// cf plugin interfaces
	
	static IOFireWireSBP2LibMgmtORBInterface	sIOFireWireSBP2LibMgmtORBInterface;
	InterfaceMap								fIOFireWireSBP2LibMgmtORBInterface;

	//////////////////////////////////////
	// cf plugin ref counting
	
	UInt32 			fRefCount;
	
	//////////////////////////////////////
	// user client connection
	
	io_connect_t 	fConnection;	// connection to user client in kernel
	mach_port_t 	fAsyncPort;		// async port for callback from kernel
	UInt32 			fMgmtORBRef;  	// reference to kernel orb object

	IOFWSBP2ORBAppendCallback		fORBCallbackRoutine;
	void *							fORBCallbackRefCon;

	UInt32			fRefCon;
	
	// utility function to get "this" pointer from interface
	static inline IOFireWireSBP2LibMgmtORB *getThis( void *self )
        { return (IOFireWireSBP2LibMgmtORB *) ((InterfaceMap *) self)->obj; };

	//////////////////////////////////////	
	// IUnknown static methods
	
	static HRESULT staticQueryInterface( void * self, REFIID iid, void **ppv );
	virtual HRESULT queryInterface( REFIID iid, void **ppv );

	static UInt32 staticAddRef( void * self );
	virtual UInt32 addRef( void );

	static UInt32 staticRelease( void * self );
	virtual UInt32 release( void );

	//////////////////////////////////////	
	// IOFireWireSBP2LibMgmtORB static methods
	static IOReturn staticSubmitORB( void * self );
	virtual IOReturn submitORB( void );

	static void staticSetORBCallback( void * self, void * refCon, 
												IOFWSBP2ORBAppendCallback callback );
	virtual void setORBCallback( void * refCon, IOFWSBP2ORBAppendCallback callback );

	static void staticSetRefCon( void * self, UInt32 refCon );
	virtual void setRefCon( UInt32 refCon );

	static UInt32 staticGetRefCon( void * self );
	virtual UInt32 getRefCon( void );

    static IOReturn staticSetCommandFunction( void * self, UInt32 function );
    virtual IOReturn setCommandFunction( UInt32 function );

	static IOReturn staticSetManageeORB( void * self, void * orb );
	virtual IOReturn setManageeORB( void * orb );

	static IOReturn staticSetManageeLogin( void * self, void * login );
	virtual IOReturn setManageeLogin( void * login );

	static IOReturn staticSetResponseBuffer( void * self, void * buf, UInt32 len );
	virtual IOReturn setResponseBuffer( void * buf, UInt32 len );

	//////////////////////////////////////
	// callback static methods
	
	static void staticORBCompletion( void *refcon, IOReturn result, void * arg0 );
	virtual void ORBCompletion( IOReturn result, void * arg0 );

public:
	
	static IUnknownVTbl **alloc( io_connect_t connection, mach_port_t asyncPort );

};
#endif