hw/ide: Add the possibility to disable the CompactFlash device in the build
For distros like downstream RHEL, it would be helpful to allow to disable the CompactFlash device. For making this possible, we need a separate Kconfig switch for this device, and the code should reside in a separate file. Let's also introduce a new header ide-dev.h which can be used to collect definitions related to IDE devices. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Message-ID: <20240220085505.30255-2-thuth@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
066804029f
commit
bd217d88dc
@ -57,3 +57,7 @@ config IDE_SII3112
|
|||||||
bool
|
bool
|
||||||
select IDE_PCI
|
select IDE_PCI
|
||||||
select IDE_QDEV
|
select IDE_QDEV
|
||||||
|
|
||||||
|
config IDE_CF
|
||||||
|
bool
|
||||||
|
default y if IDE_QDEV
|
||||||
|
58
hw/ide/cf.c
Normal file
58
hw/ide/cf.c
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* ide CompactFlash support
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "hw/ide/ide-dev.h"
|
||||||
|
#include "qapi/qapi-types-block.h"
|
||||||
|
|
||||||
|
static void ide_cf_realize(IDEDevice *dev, Error **errp)
|
||||||
|
{
|
||||||
|
ide_dev_initfn(dev, IDE_CFATA, errp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Property ide_cf_properties[] = {
|
||||||
|
DEFINE_IDE_DEV_PROPERTIES(),
|
||||||
|
DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
|
||||||
|
DEFINE_PROP_BIOS_CHS_TRANS("bios-chs-trans",
|
||||||
|
IDEDrive, dev.chs_trans, BIOS_ATA_TRANSLATION_AUTO),
|
||||||
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ide_cf_class_init(ObjectClass *klass, void *data)
|
||||||
|
{
|
||||||
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
IDEDeviceClass *k = IDE_DEVICE_CLASS(klass);
|
||||||
|
|
||||||
|
k->realize = ide_cf_realize;
|
||||||
|
dc->fw_name = "drive";
|
||||||
|
dc->desc = "virtual CompactFlash card";
|
||||||
|
device_class_set_props(dc, ide_cf_properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const TypeInfo ide_cf_info = {
|
||||||
|
.name = "ide-cf",
|
||||||
|
.parent = TYPE_IDE_DEVICE,
|
||||||
|
.instance_size = sizeof(IDEDrive),
|
||||||
|
.class_init = ide_cf_class_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ide_cf_register_type(void)
|
||||||
|
{
|
||||||
|
type_register_static(&ide_cf_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(ide_cf_register_type)
|
@ -1,6 +1,7 @@
|
|||||||
system_ss.add(when: 'CONFIG_AHCI', if_true: files('ahci.c'))
|
system_ss.add(when: 'CONFIG_AHCI', if_true: files('ahci.c'))
|
||||||
system_ss.add(when: 'CONFIG_AHCI_ICH9', if_true: files('ich.c'))
|
system_ss.add(when: 'CONFIG_AHCI_ICH9', if_true: files('ich.c'))
|
||||||
system_ss.add(when: 'CONFIG_ALLWINNER_A10', if_true: files('ahci-allwinner.c'))
|
system_ss.add(when: 'CONFIG_ALLWINNER_A10', if_true: files('ahci-allwinner.c'))
|
||||||
|
system_ss.add(when: 'CONFIG_IDE_CF', if_true: files('cf.c'))
|
||||||
system_ss.add(when: 'CONFIG_IDE_CMD646', if_true: files('cmd646.c'))
|
system_ss.add(when: 'CONFIG_IDE_CMD646', if_true: files('cmd646.c'))
|
||||||
system_ss.add(when: 'CONFIG_IDE_CORE', if_true: files('core.c', 'atapi.c'))
|
system_ss.add(when: 'CONFIG_IDE_CORE', if_true: files('core.c', 'atapi.c'))
|
||||||
system_ss.add(when: 'CONFIG_IDE_ISA', if_true: files('isa.c', 'ioport.c'))
|
system_ss.add(when: 'CONFIG_IDE_ISA', if_true: files('isa.c', 'ioport.c'))
|
||||||
|
@ -24,12 +24,9 @@
|
|||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/main-loop.h"
|
#include "qemu/main-loop.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "hw/ide/internal.h"
|
#include "hw/ide/ide-dev.h"
|
||||||
#include "hw/qdev-properties.h"
|
|
||||||
#include "hw/qdev-properties-system.h"
|
|
||||||
#include "sysemu/block-backend.h"
|
#include "sysemu/block-backend.h"
|
||||||
#include "sysemu/blockdev.h"
|
#include "sysemu/blockdev.h"
|
||||||
#include "hw/block/block.h"
|
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "sysemu/runstate.h"
|
#include "sysemu/runstate.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
@ -158,11 +155,7 @@ int ide_get_bios_chs_trans(BusState *bus, int unit)
|
|||||||
|
|
||||||
/* --------------------------------- */
|
/* --------------------------------- */
|
||||||
|
|
||||||
typedef struct IDEDrive {
|
void ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind, Error **errp)
|
||||||
IDEDevice dev;
|
|
||||||
} IDEDrive;
|
|
||||||
|
|
||||||
static void ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind, Error **errp)
|
|
||||||
{
|
{
|
||||||
IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);
|
IDEBus *bus = DO_UPCAST(IDEBus, qbus, dev->qdev.parent_bus);
|
||||||
IDEState *s = bus->ifs + dev->unit;
|
IDEState *s = bus->ifs + dev->unit;
|
||||||
@ -283,19 +276,6 @@ static void ide_cd_realize(IDEDevice *dev, Error **errp)
|
|||||||
ide_dev_initfn(dev, IDE_CD, errp);
|
ide_dev_initfn(dev, IDE_CD, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ide_cf_realize(IDEDevice *dev, Error **errp)
|
|
||||||
{
|
|
||||||
ide_dev_initfn(dev, IDE_CFATA, errp);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEFINE_IDE_DEV_PROPERTIES() \
|
|
||||||
DEFINE_BLOCK_PROPERTIES(IDEDrive, dev.conf), \
|
|
||||||
DEFINE_BLOCK_ERROR_PROPERTIES(IDEDrive, dev.conf), \
|
|
||||||
DEFINE_PROP_STRING("ver", IDEDrive, dev.version), \
|
|
||||||
DEFINE_PROP_UINT64("wwn", IDEDrive, dev.wwn, 0), \
|
|
||||||
DEFINE_PROP_STRING("serial", IDEDrive, dev.serial),\
|
|
||||||
DEFINE_PROP_STRING("model", IDEDrive, dev.model)
|
|
||||||
|
|
||||||
static Property ide_hd_properties[] = {
|
static Property ide_hd_properties[] = {
|
||||||
DEFINE_IDE_DEV_PROPERTIES(),
|
DEFINE_IDE_DEV_PROPERTIES(),
|
||||||
DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
|
DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
|
||||||
@ -346,32 +326,6 @@ static const TypeInfo ide_cd_info = {
|
|||||||
.class_init = ide_cd_class_init,
|
.class_init = ide_cd_class_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
static Property ide_cf_properties[] = {
|
|
||||||
DEFINE_IDE_DEV_PROPERTIES(),
|
|
||||||
DEFINE_BLOCK_CHS_PROPERTIES(IDEDrive, dev.conf),
|
|
||||||
DEFINE_PROP_BIOS_CHS_TRANS("bios-chs-trans",
|
|
||||||
IDEDrive, dev.chs_trans, BIOS_ATA_TRANSLATION_AUTO),
|
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ide_cf_class_init(ObjectClass *klass, void *data)
|
|
||||||
{
|
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
|
||||||
IDEDeviceClass *k = IDE_DEVICE_CLASS(klass);
|
|
||||||
|
|
||||||
k->realize = ide_cf_realize;
|
|
||||||
dc->fw_name = "drive";
|
|
||||||
dc->desc = "virtual CompactFlash card";
|
|
||||||
device_class_set_props(dc, ide_cf_properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TypeInfo ide_cf_info = {
|
|
||||||
.name = "ide-cf",
|
|
||||||
.parent = TYPE_IDE_DEVICE,
|
|
||||||
.instance_size = sizeof(IDEDrive),
|
|
||||||
.class_init = ide_cf_class_init,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void ide_device_class_init(ObjectClass *klass, void *data)
|
static void ide_device_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *k = DEVICE_CLASS(klass);
|
DeviceClass *k = DEVICE_CLASS(klass);
|
||||||
@ -396,7 +350,6 @@ static void ide_register_types(void)
|
|||||||
type_register_static(&ide_bus_info);
|
type_register_static(&ide_bus_info);
|
||||||
type_register_static(&ide_hd_info);
|
type_register_static(&ide_hd_info);
|
||||||
type_register_static(&ide_cd_info);
|
type_register_static(&ide_cd_info);
|
||||||
type_register_static(&ide_cf_info);
|
|
||||||
type_register_static(&ide_device_type_info);
|
type_register_static(&ide_device_type_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
41
include/hw/ide/ide-dev.h
Normal file
41
include/hw/ide/ide-dev.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* ide device definitions
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IDE_DEV_H
|
||||||
|
#define IDE_DEV_H
|
||||||
|
|
||||||
|
#include "hw/qdev-properties.h"
|
||||||
|
#include "hw/block/block.h"
|
||||||
|
#include "hw/ide/internal.h"
|
||||||
|
|
||||||
|
typedef struct IDEDrive {
|
||||||
|
IDEDevice dev;
|
||||||
|
} IDEDrive;
|
||||||
|
|
||||||
|
#define DEFINE_IDE_DEV_PROPERTIES() \
|
||||||
|
DEFINE_BLOCK_PROPERTIES(IDEDrive, dev.conf), \
|
||||||
|
DEFINE_BLOCK_ERROR_PROPERTIES(IDEDrive, dev.conf), \
|
||||||
|
DEFINE_PROP_STRING("ver", IDEDrive, dev.version), \
|
||||||
|
DEFINE_PROP_UINT64("wwn", IDEDrive, dev.wwn, 0), \
|
||||||
|
DEFINE_PROP_STRING("serial", IDEDrive, dev.serial),\
|
||||||
|
DEFINE_PROP_STRING("model", IDEDrive, dev.model)
|
||||||
|
|
||||||
|
void ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind, Error **errp);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user