| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * isa bus support for qdev. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2009 Gerd Hoffmann <kraxel@redhat.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This library 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 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/>.
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-05-23 16:35:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-26 18:17:30 +00:00
										 |  |  | #include "qemu/osdep.h"
 | 
					
						
							| 
									
										
											  
											
												hw/isa: Replace fprintf(stderr, "*\n" with error_report()
Replace a large number of the fprintf(stderr, "*\n" calls with
error_report(). The functions were renamed with these commands and then
compiler issues where manually fixed.
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
Some lines where then manually tweaked to pass checkpatch.
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
											
										 
											2017-11-08 14:57:30 -08:00
										 |  |  | #include "qemu/error-report.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-23 16:35:07 +02:00
										 |  |  | #include "qemu/module.h"
 | 
					
						
							| 
									
										
											  
											
												include/qemu/osdep.h: Don't include qapi/error.h
Commit 57cb38b included qapi/error.h into qemu/osdep.h to get the
Error typedef.  Since then, we've moved to include qemu/osdep.h
everywhere.  Its file comment explains: "To avoid getting into
possible circular include dependencies, this file should not include
any other QEMU headers, with the exceptions of config-host.h,
compiler.h, os-posix.h and os-win32.h, all of which are doing a
similar job to this file and are under similar constraints."
qapi/error.h doesn't do a similar job, and it doesn't adhere to
similar constraints: it includes qapi-types.h.  That's in excess of
100KiB of crap most .c files don't actually need.
Add the typedef to qemu/typedefs.h, and include that instead of
qapi/error.h.  Include qapi/error.h in .c files that need it and don't
get it now.  Include qapi-types.h in qom/object.h for uint16List.
Update scripts/clean-includes accordingly.  Update it further to match
reality: replace config.h by config-target.h, add sysemu/os-posix.h,
sysemu/os-win32.h.  Update the list of includes in the qemu/osdep.h
comment quoted above similarly.
This reduces the number of objects depending on qapi/error.h from "all
of them" to less than a third.  Unfortunately, the number depending on
qapi-types.h shrinks only a little.  More work is needed for that one.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
[Fix compilation without the spice devel packages. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
											
										 
											2016-03-14 09:01:28 +01:00
										 |  |  | #include "qapi/error.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/hw.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 18:19:49 +01:00
										 |  |  | #include "monitor/monitor.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/sysbus.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 18:20:04 +01:00
										 |  |  | #include "sysemu/sysemu.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-05 17:06:20 +01:00
										 |  |  | #include "hw/isa/isa.h"
 | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | static ISABus *isabus; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent); | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:57 +02:00
										 |  |  | static char *isabus_get_fw_dev_path(DeviceState *dev); | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-02 09:00:20 +02:00
										 |  |  | static void isa_bus_class_init(ObjectClass *klass, void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     BusClass *k = BUS_CLASS(klass); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     k->print_dev = isabus_dev_print; | 
					
						
							|  |  |  |     k->get_fw_dev_path = isabus_get_fw_dev_path; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 11:28:57 -05:00
										 |  |  | static const TypeInfo isa_dma_info = { | 
					
						
							|  |  |  |     .name = TYPE_ISADMA, | 
					
						
							|  |  |  |     .parent = TYPE_INTERFACE, | 
					
						
							|  |  |  |     .class_size = sizeof(IsaDmaClass), | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-02 09:00:20 +02:00
										 |  |  | static const TypeInfo isa_bus_info = { | 
					
						
							|  |  |  |     .name = TYPE_ISA_BUS, | 
					
						
							|  |  |  |     .parent = TYPE_BUS, | 
					
						
							|  |  |  |     .instance_size = sizeof(ISABus), | 
					
						
							|  |  |  |     .class_init = isa_bus_class_init, | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-01 09:12:50 +01:00
										 |  |  | ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space, | 
					
						
							| 
									
										
											  
											
												isa: Clean up error handling around isa_bus_new()
We can have at most one ISA bus.  If you try to create another one,
isa_bus_new() complains to stderr and returns null.
isa_bus_new() is called in two contexts, machine's init() and device's
realize() methods.  Since complaining to stderr is not proper in the
latter context, convert isa_bus_new() to Error.
Machine's init():
* mips_jazz_init(), called from the init() methods of machines
  "magnum" and "pica"
* mips_r4k_init(), the init() method of machine "mips"
* pc_init1() called from the init() methods of non-q35 PC machines
* typhoon_init(), called from clipper_init(), the init() method of
  machine "clipper"
These callers always create the first ISA bus, hence isa_bus_new()
can't fail.  Simply pass &error_abort.
Device's realize():
* i82378_realize(), of PCI device "i82378"
* ich9_lpc_realize(), of PCI device "ICH9-LPC"
* pci_ebus_realize(), of PCI device "ebus"
* piix3_realize(), of PCI device "pci-piix3", abstract parent of
  "PIIX3" and "PIIX3-xen"
* piix4_realize(), of PCI device "PIIX4"
* vt82c686b_realize(), of PCI device "VT82C686B"
Propagate the error.  Note that these devices are typically created
only by machine init() methods with qdev_init_nofail() or similar.  If
we screwed up and created an ISA bus before that call, we now give up
right away.  Before, we'd hobble on, and typically die in
isa_bus_irqs().  Similar if someone finds a way to hot-plug one of
these critters.
Cc: Richard Henderson <rth@twiddle.net>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Reviewed-by: Hervé Poussineau <hpoussin@reactos.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <1450370121-5768-11-git-send-email-armbru@redhat.com>
											
										 
											2015-12-17 17:35:18 +01:00
										 |  |  |                     MemoryRegion *address_space_io, Error **errp) | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     if (isabus) { | 
					
						
							| 
									
										
											  
											
												isa: Clean up error handling around isa_bus_new()
We can have at most one ISA bus.  If you try to create another one,
isa_bus_new() complains to stderr and returns null.
isa_bus_new() is called in two contexts, machine's init() and device's
realize() methods.  Since complaining to stderr is not proper in the
latter context, convert isa_bus_new() to Error.
Machine's init():
* mips_jazz_init(), called from the init() methods of machines
  "magnum" and "pica"
* mips_r4k_init(), the init() method of machine "mips"
* pc_init1() called from the init() methods of non-q35 PC machines
* typhoon_init(), called from clipper_init(), the init() method of
  machine "clipper"
These callers always create the first ISA bus, hence isa_bus_new()
can't fail.  Simply pass &error_abort.
Device's realize():
* i82378_realize(), of PCI device "i82378"
* ich9_lpc_realize(), of PCI device "ICH9-LPC"
* pci_ebus_realize(), of PCI device "ebus"
* piix3_realize(), of PCI device "pci-piix3", abstract parent of
  "PIIX3" and "PIIX3-xen"
* piix4_realize(), of PCI device "PIIX4"
* vt82c686b_realize(), of PCI device "VT82C686B"
Propagate the error.  Note that these devices are typically created
only by machine init() methods with qdev_init_nofail() or similar.  If
we screwed up and created an ISA bus before that call, we now give up
right away.  Before, we'd hobble on, and typically die in
isa_bus_irqs().  Similar if someone finds a way to hot-plug one of
these critters.
Cc: Richard Henderson <rth@twiddle.net>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Reviewed-by: Hervé Poussineau <hpoussin@reactos.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <1450370121-5768-11-git-send-email-armbru@redhat.com>
											
										 
											2015-12-17 17:35:18 +01:00
										 |  |  |         error_setg(errp, "Can't create a second ISA bus"); | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-08-11 21:00:54 +08:00
										 |  |  |     if (!dev) { | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  |         dev = qdev_create(NULL, "isabus-bridge"); | 
					
						
							| 
									
										
										
										
											2009-10-07 01:15:58 +02:00
										 |  |  |         qdev_init_nofail(dev); | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-07 14:11:07 +02:00
										 |  |  |     isabus = ISA_BUS(qbus_create(TYPE_ISA_BUS, dev, NULL)); | 
					
						
							| 
									
										
										
										
											2015-02-01 09:12:50 +01:00
										 |  |  |     isabus->address_space = address_space; | 
					
						
							| 
									
										
										
										
											2011-08-10 15:28:11 -07:00
										 |  |  |     isabus->address_space_io = address_space_io; | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  |     return isabus; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  | void isa_bus_irqs(ISABus *bus, qemu_irq *irqs) | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-12-15 22:10:00 +01:00
										 |  |  |     bus->irqs = irqs; | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:15 +02:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2011-02-19 18:56:22 +01:00
										 |  |  |  * isa_get_irq() returns the corresponding qemu_irq entry for the i8259. | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:15 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This function is only for special cases such as the 'ferr', and | 
					
						
							|  |  |  |  * temporary use for normal devices until they are converted to qdev. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-12-13 13:00:43 +01:00
										 |  |  | qemu_irq isa_get_irq(ISADevice *dev, unsigned isairq) | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:15 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-06-07 14:11:07 +02:00
										 |  |  |     assert(!dev || ISA_BUS(qdev_get_parent_bus(DEVICE(dev))) == isabus); | 
					
						
							| 
									
										
										
										
											2019-12-13 13:00:43 +01:00
										 |  |  |     if (isairq >= ISA_NUM_IRQS) { | 
					
						
							| 
									
										
										
										
											2010-12-03 12:05:03 +01:00
										 |  |  |         hw_error("isa irq %d invalid", isairq); | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:15 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     return isabus->irqs[isairq]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 13:00:43 +01:00
										 |  |  | void isa_init_irq(ISADevice *dev, qemu_irq *p, unsigned isairq) | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-10 11:43:27 +02:00
										 |  |  |     assert(dev->nirqs < ARRAY_SIZE(dev->isairq)); | 
					
						
							| 
									
										
										
										
											2019-12-13 13:00:43 +01:00
										 |  |  |     if (isairq >= ISA_NUM_IRQS) { | 
					
						
							|  |  |  |         hw_error("isa irq %d invalid", isairq); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-10 11:43:27 +02:00
										 |  |  |     dev->isairq[dev->nirqs] = isairq; | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  |     *p = isa_get_irq(dev, isairq); | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  |     dev->nirqs++; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 13:00:43 +01:00
										 |  |  | void isa_connect_gpio_out(ISADevice *isadev, int gpioirq, unsigned isairq) | 
					
						
							| 
									
										
										
										
											2016-06-22 15:24:56 +03:00
										 |  |  | { | 
					
						
							|  |  |  |     qemu_irq irq; | 
					
						
							|  |  |  |     isa_init_irq(isadev, &irq, isairq); | 
					
						
							|  |  |  |     qdev_connect_gpio_out(DEVICE(isadev), gpioirq, irq); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-03 11:28:57 -05:00
										 |  |  | void isa_bus_dma(ISABus *bus, IsaDma *dma8, IsaDma *dma16) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     assert(bus && dma8 && dma16); | 
					
						
							|  |  |  |     assert(!bus->dma[0] && !bus->dma[1]); | 
					
						
							|  |  |  |     bus->dma[0] = dma8; | 
					
						
							|  |  |  |     bus->dma[1] = dma16; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IsaDma *isa_get_dma(ISABus *bus, int nchan) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     assert(bus); | 
					
						
							|  |  |  |     return bus->dma[nchan > 3 ? 1 : 0]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-16 09:02:36 -07:00
										 |  |  | static inline void isa_init_ioport(ISADevice *dev, uint16_t ioport) | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:56 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-08-16 09:02:36 -07:00
										 |  |  |     if (dev && (dev->ioport_id == 0 || ioport < dev->ioport_id)) { | 
					
						
							|  |  |  |         dev->ioport_id = ioport; | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:56 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-10 15:28:12 -07:00
										 |  |  | void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     memory_region_add_subregion(isabus->address_space_io, start, io); | 
					
						
							| 
									
										
										
										
											2011-08-16 09:02:36 -07:00
										 |  |  |     isa_init_ioport(dev, start); | 
					
						
							| 
									
										
										
										
											2011-08-10 15:28:12 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-13 02:11:59 +02:00
										 |  |  | void isa_register_portio_list(ISADevice *dev, | 
					
						
							|  |  |  |                               PortioList *piolist, uint16_t start, | 
					
						
							| 
									
										
										
										
											2011-09-26 14:52:44 +03:00
										 |  |  |                               const MemoryRegionPortio *pio_start, | 
					
						
							|  |  |  |                               void *opaque, const char *name) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-07-13 02:11:59 +02:00
										 |  |  |     assert(piolist && !piolist->owner); | 
					
						
							| 
									
										
										
										
											2011-09-26 14:52:44 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* START is how we should treat DEV, regardless of the actual
 | 
					
						
							|  |  |  |        contents of the portio array.  This is how the old code | 
					
						
							|  |  |  |        actually handled e.g. the FDC device.  */ | 
					
						
							| 
									
										
										
										
											2011-08-16 09:02:36 -07:00
										 |  |  |     isa_init_ioport(dev, start); | 
					
						
							| 
									
										
										
										
											2011-09-26 14:52:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-13 02:11:59 +02:00
										 |  |  |     portio_list_init(piolist, OBJECT(dev), pio_start, opaque, name); | 
					
						
							|  |  |  |     portio_list_add(piolist, isabus->address_space_io, start); | 
					
						
							| 
									
										
										
										
											2011-09-26 14:52:44 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-16 11:27:26 +01:00
										 |  |  | static void isa_device_init(Object *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ISADevice *dev = ISA_DEVICE(obj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     dev->isairq[0] = -1; | 
					
						
							|  |  |  |     dev->isairq[1] = -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  | ISADevice *isa_create(ISABus *bus, const char *name) | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     DeviceState *dev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-07 14:11:07 +02:00
										 |  |  |     dev = qdev_create(BUS(bus), name); | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     return ISA_DEVICE(dev); | 
					
						
							| 
									
										
										
										
											2009-07-31 12:30:14 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  | ISADevice *isa_try_create(ISABus *bus, const char *name) | 
					
						
							| 
									
										
										
										
											2011-02-05 14:34:48 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     DeviceState *dev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-07 14:11:07 +02:00
										 |  |  |     dev = qdev_try_create(BUS(bus), name); | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     return ISA_DEVICE(dev); | 
					
						
							| 
									
										
										
										
											2011-02-05 14:34:48 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  | ISADevice *isa_create_simple(ISABus *bus, const char *name) | 
					
						
							| 
									
										
										
										
											2009-09-10 11:43:29 +02:00
										 |  |  | { | 
					
						
							|  |  |  |     ISADevice *dev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-15 22:09:51 +01:00
										 |  |  |     dev = isa_create(bus, name); | 
					
						
							| 
									
										
										
										
											2013-06-07 13:49:13 +02:00
										 |  |  |     qdev_init_nofail(DEVICE(dev)); | 
					
						
							| 
									
										
										
										
											2009-09-10 11:43:29 +02:00
										 |  |  |     return dev; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-08 16:58:57 +02:00
										 |  |  | ISADevice *isa_vga_init(ISABus *bus) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     switch (vga_interface_type) { | 
					
						
							|  |  |  |     case VGA_CIRRUS: | 
					
						
							|  |  |  |         return isa_create_simple(bus, "isa-cirrus-vga"); | 
					
						
							|  |  |  |     case VGA_QXL: | 
					
						
							| 
									
										
											  
											
												hw/isa: Replace fprintf(stderr, "*\n" with error_report()
Replace a large number of the fprintf(stderr, "*\n" calls with
error_report(). The functions were renamed with these commands and then
compiler issues where manually fixed.
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
Some lines where then manually tweaked to pass checkpatch.
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
											
										 
											2017-11-08 14:57:30 -08:00
										 |  |  |         error_report("%s: qxl: no PCI bus", __func__); | 
					
						
							| 
									
										
										
										
											2012-09-08 16:58:57 +02:00
										 |  |  |         return NULL; | 
					
						
							|  |  |  |     case VGA_STD: | 
					
						
							|  |  |  |         return isa_create_simple(bus, "isa-vga"); | 
					
						
							|  |  |  |     case VGA_VMWARE: | 
					
						
							| 
									
										
											  
											
												hw/isa: Replace fprintf(stderr, "*\n" with error_report()
Replace a large number of the fprintf(stderr, "*\n" calls with
error_report(). The functions were renamed with these commands and then
compiler issues where manually fixed.
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
Some lines where then manually tweaked to pass checkpatch.
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
											
										 
											2017-11-08 14:57:30 -08:00
										 |  |  |         error_report("%s: vmware_vga: no PCI bus", __func__); | 
					
						
							| 
									
										
										
										
											2012-09-08 16:58:57 +02:00
										 |  |  |         return NULL; | 
					
						
							| 
									
										
										
										
											2014-09-10 14:28:48 +02:00
										 |  |  |     case VGA_VIRTIO: | 
					
						
							| 
									
										
											  
											
												hw/isa: Replace fprintf(stderr, "*\n" with error_report()
Replace a large number of the fprintf(stderr, "*\n" calls with
error_report(). The functions were renamed with these commands and then
compiler issues where manually fixed.
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N;N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
find ./* -type f -exec sed -i \
    'N; {s|fprintf(stderr,
"\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \
    {} +
Some lines where then manually tweaked to pass checkpatch.
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
											
										 
											2017-11-08 14:57:30 -08:00
										 |  |  |         error_report("%s: virtio-vga: no PCI bus", __func__); | 
					
						
							| 
									
										
										
										
											2014-09-10 14:28:48 +02:00
										 |  |  |         return NULL; | 
					
						
							| 
									
										
										
										
											2012-09-08 16:58:57 +02:00
										 |  |  |     case VGA_NONE: | 
					
						
							|  |  |  |     default: | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     ISADevice *d = ISA_DEVICE(dev); | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (d->isairq[1] != -1) { | 
					
						
							|  |  |  |         monitor_printf(mon, "%*sisa irqs %d,%d\n", indent, "", | 
					
						
							|  |  |  |                        d->isairq[0], d->isairq[1]); | 
					
						
							|  |  |  |     } else if (d->isairq[0] != -1) { | 
					
						
							|  |  |  |         monitor_printf(mon, "%*sisa irq %d\n", indent, "", | 
					
						
							|  |  |  |                        d->isairq[0]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-24 13:12:29 -06:00
										 |  |  | static void isabus_bridge_class_init(ObjectClass *klass, void *data) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  |     DeviceClass *dc = DEVICE_CLASS(klass); | 
					
						
							| 
									
										
										
										
											2012-01-24 13:12:29 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-20 16:53:59 +01:00
										 |  |  |     set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  |     dc->fw_name = "isa"; | 
					
						
							| 
									
										
										
										
											2012-01-24 13:12:29 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-10 16:19:07 +01:00
										 |  |  | static const TypeInfo isabus_bridge_info = { | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  |     .name          = "isabus-bridge", | 
					
						
							|  |  |  |     .parent        = TYPE_SYS_BUS_DEVICE, | 
					
						
							|  |  |  |     .instance_size = sizeof(SysBusDevice), | 
					
						
							|  |  |  |     .class_init    = isabus_bridge_class_init, | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  | static void isa_device_class_init(ObjectClass *klass, void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     DeviceClass *k = DEVICE_CLASS(klass); | 
					
						
							| 
									
										
										
										
											2012-05-02 09:00:20 +02:00
										 |  |  |     k->bus_type = TYPE_ISA_BUS; | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-10 16:19:07 +01:00
										 |  |  | static const TypeInfo isa_device_type_info = { | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     .name = TYPE_ISA_DEVICE, | 
					
						
							|  |  |  |     .parent = TYPE_DEVICE, | 
					
						
							|  |  |  |     .instance_size = sizeof(ISADevice), | 
					
						
							| 
									
										
										
										
											2013-02-16 11:27:26 +01:00
										 |  |  |     .instance_init = isa_device_init, | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     .abstract = true, | 
					
						
							|  |  |  |     .class_size = sizeof(ISADeviceClass), | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  |     .class_init = isa_device_class_init, | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-09 15:20:55 +01:00
										 |  |  | static void isabus_register_types(void) | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2016-02-03 11:28:57 -05:00
										 |  |  |     type_register_static(&isa_dma_info); | 
					
						
							| 
									
										
										
										
											2012-05-02 09:00:20 +02:00
										 |  |  |     type_register_static(&isa_bus_info); | 
					
						
							| 
									
										
										
										
											2011-12-07 21:34:16 -06:00
										 |  |  |     type_register_static(&isabus_bridge_info); | 
					
						
							| 
									
										
										
										
											2011-12-04 11:52:49 -06:00
										 |  |  |     type_register_static(&isa_device_type_info); | 
					
						
							| 
									
										
										
										
											2009-08-14 11:36:14 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:57 +02:00
										 |  |  | static char *isabus_get_fw_dev_path(DeviceState *dev) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-06-07 13:49:13 +02:00
										 |  |  |     ISADevice *d = ISA_DEVICE(dev); | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:57 +02:00
										 |  |  |     char path[40]; | 
					
						
							|  |  |  |     int off; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     off = snprintf(path, sizeof(path), "%s", qdev_fw_name(dev)); | 
					
						
							| 
									
										
										
										
											2011-08-15 11:59:09 -07:00
										 |  |  |     if (d->ioport_id) { | 
					
						
							|  |  |  |         snprintf(path + off, sizeof(path) - off, "@%04x", d->ioport_id); | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:57 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
											
												scsi, pci, qdev, isa-bus, sysbus: don't let *_get_fw_dev_path return NULL
Use g_strdup rather than strdup, because the sole caller
(qdev_get_fw_dev_path_helper) assumes it gets non-NULL, and dereferences
it.  Besides, in that caller, the allocated buffer is already freed with
g_free, so it's better to allocate with a matching g_strdup.
In one case, (scsi-bus.c) it was trivial, so I replaced an snprintf+
g_strdup combination with an equivalent g_strdup_printf use.
Signed-off-by: Jim Meyering <meyering@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
											
										 
											2012-10-04 13:09:44 +02:00
										 |  |  |     return g_strdup(path); | 
					
						
							| 
									
										
										
										
											2010-12-08 13:34:57 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-15 17:17:35 +03:00
										 |  |  | MemoryRegion *isa_address_space(ISADevice *dev) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-02-01 09:12:50 +01:00
										 |  |  |     if (dev) { | 
					
						
							|  |  |  |         return isa_bus_from_device(dev)->address_space; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return isabus->address_space; | 
					
						
							| 
									
										
										
										
											2011-08-15 17:17:35 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-19 12:50:02 +01:00
										 |  |  | MemoryRegion *isa_address_space_io(ISADevice *dev) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (dev) { | 
					
						
							|  |  |  |         return isa_bus_from_device(dev)->address_space_io; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return isabus->address_space_io; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-09 15:20:55 +01:00
										 |  |  | type_init(isabus_register_types) |