PciDeviceAttachmentImpl.h revision cb708a92b0b801600e8fcc7012a36fcb74908b67
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync/* $Id$ */
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync/** @file
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync *
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync * PCI attachment information implmentation.
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync */
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync
c58f1213e628a545081c70e26c6b67a841cff880vboxsync/*
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync * Copyright (C) 2010 Oracle Corporation
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync *
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync * available from http://www.virtualbox.org. This file is free software;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
7e443c8da6e409ead5037f14fde35b0d43440155vboxsync */
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync#ifndef ____H_PCIDEVICEATTACHMENTIMPL
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync#define ____H_PCIDEVICEATTACHMENTIMPL
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync#include "VirtualBoxBase.h"
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncclass ATL_NO_VTABLE PciAddress :
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync public VirtualBoxBase,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync VBOX_SCRIPTABLE_IMPL(IPciAddress)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync{
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncpublic:
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(PciAddress, IPciAddress)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync DECLARE_NOT_AGGREGATABLE(PciAddress)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync BEGIN_COM_MAP(PciAddress)
76c869b82c29ec35452aa898ae9fdf303defc00avboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync COM_INTERFACE_ENTRY(IPciAddress)
76c869b82c29ec35452aa898ae9fdf303defc00avboxsync COM_INTERFACE_ENTRY(IDispatch)
76c869b82c29ec35452aa898ae9fdf303defc00avboxsync END_COM_MAP()
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync PciAddress() { }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync ~PciAddress() { }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync // public initializer/uninitializer for internal purposes only
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync HRESULT init(LONG aAddess);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync void uninit();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync HRESULT FinalConstruct();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync void FinalRelease();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync // IPciAddress properties
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(Bus))(SHORT *aBus)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync *aBus = mBus;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMSETTER(Bus))(SHORT aBus)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync mBus = aBus;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(Device))(SHORT *aDevice)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync *aDevice = mDevice;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMSETTER(Device))(SHORT aDevice)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync mDevice = aDevice;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(DevFunction))(SHORT *aDevFunction)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync *aDevFunction = mFn;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMSETTER(DevFunction))(SHORT aDevFunction)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync {
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync mFn = aDevFunction;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync return S_OK;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncprivate:
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync SHORT mBus, mDevice, mFn;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync};
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncclass ATL_NO_VTABLE PciDeviceAttachment :
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync public VirtualBoxBase,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync VBOX_SCRIPTABLE_IMPL(IPciDeviceAttachment)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync{
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncpublic:
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(PciDeviceAttachment, IPciDeviceAttachment)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync DECLARE_NOT_AGGREGATABLE(PciDeviceAttachment)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync BEGIN_COM_MAP(PciDeviceAttachment)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync COM_INTERFACE_ENTRY(IPciDeviceAttachment)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync COM_INTERFACE_ENTRY(IDispatch)
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync END_COM_MAP()
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync PciDeviceAttachment() { }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync ~PciDeviceAttachment() { }
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync // public initializer/uninitializer for internal purposes only
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync HRESULT init(Machine * aParent,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync const Bstr &aName,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync LONG aHostAddess,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync LONG aGuestAddress,
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync BOOL fPhysical);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync void uninit();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync HRESULT FinalConstruct();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync void FinalRelease();
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync // IPciDeviceAttachment properties
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(Name))(BSTR * aName);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(IsPhysicalDevice))(BOOL * aPhysical);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(HostAddress))(LONG * hostAddress);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync STDMETHOD(COMGETTER(GuestAddress))(LONG * guestAddress);
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsyncprivate:
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync struct Data;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync Data *m;
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync};
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync
a0ec2c1df51b7654b1e72b112036527d1afa0de3vboxsync#endif // ____H_PCIDEVICEATTACHMENTIMPL