-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
hw/vfio/platform: calxeda xgmac device
The platform device class has become abstract. This patch introduces a calxeda xgmac device that derives from it. Signed-off-by: Eric Auger <[email protected]> Reviewed-by: Alex Bennée <[email protected]> Signed-off-by: Alex Williamson <[email protected]>
- Loading branch information
Showing
3 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* calxeda xgmac VFIO device | ||
* | ||
* Copyright Linaro Limited, 2014 | ||
* | ||
* Authors: | ||
* Eric Auger <[email protected]> | ||
* | ||
* This work is licensed under the terms of the GNU GPL, version 2. See | ||
* the COPYING file in the top-level directory. | ||
* | ||
*/ | ||
|
||
#include "hw/vfio/vfio-calxeda-xgmac.h" | ||
|
||
static void calxeda_xgmac_realize(DeviceState *dev, Error **errp) | ||
{ | ||
VFIOPlatformDevice *vdev = VFIO_PLATFORM_DEVICE(dev); | ||
VFIOCalxedaXgmacDeviceClass *k = VFIO_CALXEDA_XGMAC_DEVICE_GET_CLASS(dev); | ||
|
||
vdev->compat = g_strdup("calxeda,hb-xgmac"); | ||
|
||
k->parent_realize(dev, errp); | ||
} | ||
|
||
static const VMStateDescription vfio_platform_calxeda_xgmac_vmstate = { | ||
.name = TYPE_VFIO_CALXEDA_XGMAC, | ||
.unmigratable = 1, | ||
}; | ||
|
||
static void vfio_calxeda_xgmac_class_init(ObjectClass *klass, void *data) | ||
{ | ||
DeviceClass *dc = DEVICE_CLASS(klass); | ||
VFIOCalxedaXgmacDeviceClass *vcxc = | ||
VFIO_CALXEDA_XGMAC_DEVICE_CLASS(klass); | ||
vcxc->parent_realize = dc->realize; | ||
dc->realize = calxeda_xgmac_realize; | ||
dc->desc = "VFIO Calxeda XGMAC"; | ||
dc->vmsd = &vfio_platform_calxeda_xgmac_vmstate; | ||
} | ||
|
||
static const TypeInfo vfio_calxeda_xgmac_dev_info = { | ||
.name = TYPE_VFIO_CALXEDA_XGMAC, | ||
.parent = TYPE_VFIO_PLATFORM, | ||
.instance_size = sizeof(VFIOCalxedaXgmacDevice), | ||
.class_init = vfio_calxeda_xgmac_class_init, | ||
.class_size = sizeof(VFIOCalxedaXgmacDeviceClass), | ||
}; | ||
|
||
static void register_calxeda_xgmac_dev_type(void) | ||
{ | ||
type_register_static(&vfio_calxeda_xgmac_dev_info); | ||
} | ||
|
||
type_init(register_calxeda_xgmac_dev_type) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/* | ||
* VFIO calxeda xgmac device | ||
* | ||
* Copyright Linaro Limited, 2014 | ||
* | ||
* Authors: | ||
* Eric Auger <[email protected]> | ||
* | ||
* This work is licensed under the terms of the GNU GPL, version 2. See | ||
* the COPYING file in the top-level directory. | ||
* | ||
*/ | ||
|
||
#ifndef HW_VFIO_VFIO_CALXEDA_XGMAC_H | ||
#define HW_VFIO_VFIO_CALXEDA_XGMAC_H | ||
|
||
#include "hw/vfio/vfio-platform.h" | ||
|
||
#define TYPE_VFIO_CALXEDA_XGMAC "vfio-calxeda-xgmac" | ||
|
||
/** | ||
* This device exposes: | ||
* - a single MMIO region corresponding to its register space | ||
* - 3 IRQS (main and 2 power related IRQs) | ||
*/ | ||
typedef struct VFIOCalxedaXgmacDevice { | ||
VFIOPlatformDevice vdev; | ||
} VFIOCalxedaXgmacDevice; | ||
|
||
typedef struct VFIOCalxedaXgmacDeviceClass { | ||
/*< private >*/ | ||
VFIOPlatformDeviceClass parent_class; | ||
/*< public >*/ | ||
DeviceRealize parent_realize; | ||
} VFIOCalxedaXgmacDeviceClass; | ||
|
||
#define VFIO_CALXEDA_XGMAC_DEVICE(obj) \ | ||
OBJECT_CHECK(VFIOCalxedaXgmacDevice, (obj), TYPE_VFIO_CALXEDA_XGMAC) | ||
#define VFIO_CALXEDA_XGMAC_DEVICE_CLASS(klass) \ | ||
OBJECT_CLASS_CHECK(VFIOCalxedaXgmacDeviceClass, (klass), \ | ||
TYPE_VFIO_CALXEDA_XGMAC) | ||
#define VFIO_CALXEDA_XGMAC_DEVICE_GET_CLASS(obj) \ | ||
OBJECT_GET_CLASS(VFIOCalxedaXgmacDeviceClass, (obj), \ | ||
TYPE_VFIO_CALXEDA_XGMAC) | ||
|
||
#endif |