Browse Source
QEMU supports firmware names for all devices in the QEMU tree but some architectures expect some parts of firmware path names in different format. This introduces a firmware-pathname-change interface definition. If some machines needs to redefine the firmware path format, it has to add the TYPE_FW_PATH_PROVIDER interface to an object that is above the device on the QOM tree (typically /machine). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Andreas Färber <afaerber@suse.de>pull/10/merge
committed by
Andreas Färber
5 changed files with 117 additions and 1 deletions
@ -0,0 +1,51 @@ |
|||
/*
|
|||
* Firmware patch provider class and helpers. |
|||
* |
|||
* This program is free software; you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation; under version 2 of the License. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#include "hw/fw-path-provider.h" |
|||
|
|||
char *fw_path_provider_get_dev_path(FWPathProvider *p, BusState *bus, |
|||
DeviceState *dev) |
|||
{ |
|||
FWPathProviderClass *k = FW_PATH_PROVIDER_GET_CLASS(p); |
|||
|
|||
return k->get_dev_path(p, bus, dev); |
|||
} |
|||
|
|||
char *fw_path_provider_try_get_dev_path(Object *o, BusState *bus, |
|||
DeviceState *dev) |
|||
{ |
|||
FWPathProvider *p = (FWPathProvider *) |
|||
object_dynamic_cast(o, TYPE_FW_PATH_PROVIDER); |
|||
|
|||
if (p) { |
|||
return fw_path_provider_get_dev_path(p, bus, dev); |
|||
} |
|||
|
|||
return NULL; |
|||
} |
|||
|
|||
static const TypeInfo fw_path_provider_info = { |
|||
.name = TYPE_FW_PATH_PROVIDER, |
|||
.parent = TYPE_INTERFACE, |
|||
.class_size = sizeof(FWPathProviderClass), |
|||
}; |
|||
|
|||
static void fw_path_provider_register_types(void) |
|||
{ |
|||
type_register_static(&fw_path_provider_info); |
|||
} |
|||
|
|||
type_init(fw_path_provider_register_types) |
|||
@ -0,0 +1,47 @@ |
|||
/*
|
|||
* Firmware patch provider class and helpers definitions. |
|||
* |
|||
* This program is free software; you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation; under version 2 of the License. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#ifndef FW_PATH_PROVIDER_H |
|||
#define FW_PATH_PROVIDER_H 1 |
|||
|
|||
#include "qemu-common.h" |
|||
#include "qom/object.h" |
|||
|
|||
#define TYPE_FW_PATH_PROVIDER "fw-path-provider" |
|||
|
|||
#define FW_PATH_PROVIDER_CLASS(klass) \ |
|||
OBJECT_CLASS_CHECK(FWPathProviderClass, (klass), TYPE_FW_PATH_PROVIDER) |
|||
#define FW_PATH_PROVIDER_GET_CLASS(obj) \ |
|||
OBJECT_GET_CLASS(FWPathProviderClass, (obj), TYPE_FW_PATH_PROVIDER) |
|||
#define FW_PATH_PROVIDER(obj) \ |
|||
INTERFACE_CHECK(FWPathProvider, (obj), TYPE_FW_PATH_PROVIDER) |
|||
|
|||
typedef struct FWPathProvider { |
|||
Object parent_obj; |
|||
} FWPathProvider; |
|||
|
|||
typedef struct FWPathProviderClass { |
|||
InterfaceClass parent_class; |
|||
|
|||
char *(*get_dev_path)(FWPathProvider *p, BusState *bus, DeviceState *dev); |
|||
} FWPathProviderClass; |
|||
|
|||
char *fw_path_provider_get_dev_path(FWPathProvider *p, BusState *bus, |
|||
DeviceState *dev); |
|||
char *fw_path_provider_try_get_dev_path(Object *o, BusState *bus, |
|||
DeviceState *dev); |
|||
|
|||
#endif /* FW_PATH_PROVIDER_H */ |
|||
Loading…
Reference in new issue