hmp: Remove "info pcmcia"
This command lists PCMCIA sockets and cards. Only a few ARM boards have sockets (akita, borzoi, connex, mainstone, spitz, terrier, tosa, verdex, z2), the only card is the DSCM-1xxxx Hitachi Microdrive (qdev "microdrive"), and it is only inserted during machine init, if ever. So this command doesn't really tell anybody anything new so far. Moreover, pcmcia_socket_unregister() has a use-after-free bug, flagged by Coverity. Has never been used, because there has never been code to eject a PCMCIA card. Not worth fixing & converting to QMP. Remove it. Signed-off-by: Markus Armbruster <armbru@redhat.com> Acked-by: Luiz Capitulino <lcapitulino@redhat.com> Acked-by: Andreas Färber <afaerber@suse.de> Message-id: 1411144812-22958-1-git-send-email-armbru@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
1430500bb8
commit
7797a73947
@ -1748,8 +1748,6 @@ show information about active capturing
|
|||||||
show list of VM snapshots
|
show list of VM snapshots
|
||||||
@item info status
|
@item info status
|
||||||
show the current VM status (running|paused)
|
show the current VM status (running|paused)
|
||||||
@item info pcmcia
|
|
||||||
show guest PCMCIA status
|
|
||||||
@item info mice
|
@item info mice
|
||||||
show which guest mouse is receiving events
|
show which guest mouse is receiving events
|
||||||
@item info vnc
|
@item info vnc
|
||||||
|
@ -543,7 +543,6 @@ static int dscm1xxxx_attach(PCMCIACardState *card)
|
|||||||
device_reset(DEVICE(md));
|
device_reset(DEVICE(md));
|
||||||
md_interrupt_update(md);
|
md_interrupt_update(md);
|
||||||
|
|
||||||
card->slot->card_string = "DSCM-1xxxx Hitachi Microdrive";
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,24 +149,11 @@ PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
|
|||||||
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
|
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
|
||||||
s = PXA2XX_PCMCIA(dev);
|
s = PXA2XX_PCMCIA(dev);
|
||||||
|
|
||||||
if (base == 0x30000000) {
|
|
||||||
s->slot.slot_string = "PXA PC Card Socket 1";
|
|
||||||
} else {
|
|
||||||
s->slot.slot_string = "PXA PC Card Socket 0";
|
|
||||||
}
|
|
||||||
|
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pxa2xx_pcmcia_realize(DeviceState *dev, Error **errp)
|
|
||||||
{
|
|
||||||
PXA2xxPCMCIAState *s = PXA2XX_PCMCIA(dev);
|
|
||||||
|
|
||||||
pcmcia_socket_register(&s->slot);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pxa2xx_pcmcia_initfn(Object *obj)
|
static void pxa2xx_pcmcia_initfn(Object *obj)
|
||||||
{
|
{
|
||||||
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
|
||||||
@ -262,19 +249,11 @@ void pxa2xx_pcmcia_set_irq_cb(void *opaque, qemu_irq irq, qemu_irq cd_irq)
|
|||||||
s->cd_irq = cd_irq;
|
s->cd_irq = cd_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pxa2xx_pcmcia_class_init(ObjectClass *oc, void *data)
|
|
||||||
{
|
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
|
||||||
|
|
||||||
dc->realize = pxa2xx_pcmcia_realize;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TypeInfo pxa2xx_pcmcia_type_info = {
|
static const TypeInfo pxa2xx_pcmcia_type_info = {
|
||||||
.name = TYPE_PXA2XX_PCMCIA,
|
.name = TYPE_PXA2XX_PCMCIA,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_SYS_BUS_DEVICE,
|
||||||
.instance_size = sizeof(PXA2xxPCMCIAState),
|
.instance_size = sizeof(PXA2xxPCMCIAState),
|
||||||
.instance_init = pxa2xx_pcmcia_initfn,
|
.instance_init = pxa2xx_pcmcia_initfn,
|
||||||
.class_init = pxa2xx_pcmcia_class_init,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pxa2xx_pcmcia_register_types(void)
|
static void pxa2xx_pcmcia_register_types(void)
|
||||||
|
@ -8,14 +8,8 @@
|
|||||||
typedef struct PCMCIASocket {
|
typedef struct PCMCIASocket {
|
||||||
qemu_irq irq;
|
qemu_irq irq;
|
||||||
bool attached;
|
bool attached;
|
||||||
const char *slot_string;
|
|
||||||
const char *card_string;
|
|
||||||
} PCMCIASocket;
|
} PCMCIASocket;
|
||||||
|
|
||||||
void pcmcia_socket_register(PCMCIASocket *socket);
|
|
||||||
void pcmcia_socket_unregister(PCMCIASocket *socket);
|
|
||||||
void pcmcia_info(Monitor *mon, const QDict *qdict);
|
|
||||||
|
|
||||||
#define TYPE_PCMCIA_CARD "pcmcia-card"
|
#define TYPE_PCMCIA_CARD "pcmcia-card"
|
||||||
#define PCMCIA_CARD(obj) \
|
#define PCMCIA_CARD(obj) \
|
||||||
OBJECT_CHECK(PCMCIACardState, (obj), TYPE_PCMCIA_CARD)
|
OBJECT_CHECK(PCMCIACardState, (obj), TYPE_PCMCIA_CARD)
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include "hw/hw.h"
|
#include "hw/hw.h"
|
||||||
#include "monitor/qdev.h"
|
#include "monitor/qdev.h"
|
||||||
#include "hw/usb.h"
|
#include "hw/usb.h"
|
||||||
#include "hw/pcmcia.h"
|
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
#include "hw/pci/pci.h"
|
#include "hw/pci/pci.h"
|
||||||
#include "sysemu/watchdog.h"
|
#include "sysemu/watchdog.h"
|
||||||
@ -2791,13 +2790,6 @@ static mon_cmd_t info_cmds[] = {
|
|||||||
.help = "show the current VM status (running|paused)",
|
.help = "show the current VM status (running|paused)",
|
||||||
.mhandler.cmd = hmp_info_status,
|
.mhandler.cmd = hmp_info_status,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.name = "pcmcia",
|
|
||||||
.args_type = "",
|
|
||||||
.params = "",
|
|
||||||
.help = "show guest PCMCIA status",
|
|
||||||
.mhandler.cmd = pcmcia_info,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "mice",
|
.name = "mice",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
|
44
vl.c
44
vl.c
@ -63,7 +63,6 @@ int main(int argc, char **argv)
|
|||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "sysemu/accel.h"
|
#include "sysemu/accel.h"
|
||||||
#include "hw/usb.h"
|
#include "hw/usb.h"
|
||||||
#include "hw/pcmcia.h"
|
|
||||||
#include "hw/i386/pc.h"
|
#include "hw/i386/pc.h"
|
||||||
#include "hw/isa/isa.h"
|
#include "hw/isa/isa.h"
|
||||||
#include "hw/bt.h"
|
#include "hw/bt.h"
|
||||||
@ -1407,49 +1406,6 @@ void do_usb_del(Monitor *mon, const QDict *qdict)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************/
|
|
||||||
/* PCMCIA/Cardbus */
|
|
||||||
|
|
||||||
static struct pcmcia_socket_entry_s {
|
|
||||||
PCMCIASocket *socket;
|
|
||||||
struct pcmcia_socket_entry_s *next;
|
|
||||||
} *pcmcia_sockets = 0;
|
|
||||||
|
|
||||||
void pcmcia_socket_register(PCMCIASocket *socket)
|
|
||||||
{
|
|
||||||
struct pcmcia_socket_entry_s *entry;
|
|
||||||
|
|
||||||
entry = g_malloc(sizeof(struct pcmcia_socket_entry_s));
|
|
||||||
entry->socket = socket;
|
|
||||||
entry->next = pcmcia_sockets;
|
|
||||||
pcmcia_sockets = entry;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcmcia_socket_unregister(PCMCIASocket *socket)
|
|
||||||
{
|
|
||||||
struct pcmcia_socket_entry_s *entry, **ptr;
|
|
||||||
|
|
||||||
ptr = &pcmcia_sockets;
|
|
||||||
for (entry = *ptr; entry; ptr = &entry->next, entry = *ptr)
|
|
||||||
if (entry->socket == socket) {
|
|
||||||
*ptr = entry->next;
|
|
||||||
g_free(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcmcia_info(Monitor *mon, const QDict *qdict)
|
|
||||||
{
|
|
||||||
struct pcmcia_socket_entry_s *iter;
|
|
||||||
|
|
||||||
if (!pcmcia_sockets)
|
|
||||||
monitor_printf(mon, "No PCMCIA sockets\n");
|
|
||||||
|
|
||||||
for (iter = pcmcia_sockets; iter; iter = iter->next)
|
|
||||||
monitor_printf(mon, "%s: %s\n", iter->socket->slot_string,
|
|
||||||
iter->socket->attached ? iter->socket->card_string :
|
|
||||||
"Empty");
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
/* machine registration */
|
/* machine registration */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user