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:
Markus Armbruster 2014-10-24 12:19:11 +01:00 committed by Peter Maydell
parent 1430500bb8
commit 7797a73947
6 changed files with 0 additions and 82 deletions

View File

@ -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

View File

@ -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;
} }

View File

@ -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)

View File

@ -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)

View File

@ -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
View File

@ -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 */