| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * QEMU/mipssim emulation | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2011-11-13 22:24:26 +01:00
										 |  |  |  * Emulates a very simple machine model similar to the one used by the | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |  * proprietary MIPS emulator. | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-10-31 17:14:08 +00:00
										 |  |  |  * Copyright (c) 2007 Thiemo Seufer | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | 
					
						
							|  |  |  |  * of this software and associated documentation files (the "Software"), to deal | 
					
						
							|  |  |  |  * in the Software without restriction, including without limitation the rights | 
					
						
							|  |  |  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
					
						
							|  |  |  |  * copies of the Software, and to permit persons to whom the Software is | 
					
						
							|  |  |  |  * furnished to do so, subject to the following conditions: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The above copyright notice and this permission notice shall be included in | 
					
						
							|  |  |  |  * all copies or substantial portions of the Software. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
					
						
							|  |  |  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
					
						
							|  |  |  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | 
					
						
							|  |  |  |  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
					
						
							|  |  |  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
					
						
							|  |  |  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | 
					
						
							|  |  |  |  * THE SOFTWARE. | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-18 17:35:00 +00:00
										 |  |  | #include "qemu/osdep.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"
 | 
					
						
							| 
									
										
										
										
											2016-01-19 21:51:44 +01:00
										 |  |  | #include "qemu-common.h"
 | 
					
						
							|  |  |  | #include "cpu.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-05 17:06:20 +01:00
										 |  |  | #include "hw/mips/mips.h"
 | 
					
						
							|  |  |  | #include "hw/mips/cpudevs.h"
 | 
					
						
							|  |  |  | #include "hw/char/serial.h"
 | 
					
						
							|  |  |  | #include "hw/isa/isa.h"
 | 
					
						
							| 
									
										
										
										
											2012-10-24 08:43:34 +02:00
										 |  |  | #include "net/net.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 18:20:04 +01:00
										 |  |  | #include "sysemu/sysemu.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/boards.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-05 17:06:20 +01:00
										 |  |  | #include "hw/mips/bios.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/loader.h"
 | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  | #include "elf.h"
 | 
					
						
							| 
									
										
										
										
											2013-02-04 15:40:22 +01:00
										 |  |  | #include "hw/sysbus.h"
 | 
					
						
							| 
									
										
										
										
											2019-10-23 15:29:55 +02:00
										 |  |  | #include "hw/qdev-properties.h"
 | 
					
						
							| 
									
										
										
										
											2012-12-17 18:19:49 +01:00
										 |  |  | #include "exec/address-spaces.h"
 | 
					
						
							| 
									
										
										
										
											2013-08-03 16:03:18 +02:00
										 |  |  | #include "qemu/error-report.h"
 | 
					
						
							| 
									
										
										
										
											2013-07-29 17:01:37 +02:00
										 |  |  | #include "sysemu/qtest.h"
 | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:38 +02:00
										 |  |  | #include "sysemu/reset.h"
 | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-09 17:52:11 +00:00
										 |  |  | static struct _loaderparams { | 
					
						
							|  |  |  |     int ram_size; | 
					
						
							|  |  |  |     const char *kernel_filename; | 
					
						
							|  |  |  |     const char *kernel_cmdline; | 
					
						
							|  |  |  |     const char *initrd_filename; | 
					
						
							|  |  |  | } loaderparams; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  | typedef struct ResetData { | 
					
						
							| 
									
										
										
										
											2012-05-05 14:19:45 +02:00
										 |  |  |     MIPSCPU *cpu; | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |     uint64_t vector; | 
					
						
							|  |  |  | } ResetData; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int64_t load_kernel(void) | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-09-13 18:07:13 +08:00
										 |  |  |     int64_t entry, kernel_high, initrd_size; | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     long kernel_size; | 
					
						
							| 
									
										
										
										
											2009-10-01 16:12:16 -05:00
										 |  |  |     ram_addr_t initrd_offset; | 
					
						
							| 
									
										
										
										
											2009-09-20 14:58:02 +00:00
										 |  |  |     int big_endian; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef TARGET_WORDS_BIGENDIAN
 | 
					
						
							|  |  |  |     big_endian = 1; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     big_endian = 0; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-15 12:18:03 +00:00
										 |  |  |     kernel_size = load_elf(loaderparams.kernel_filename, NULL, | 
					
						
							|  |  |  |                            cpu_mips_kseg0_to_phys, NULL, | 
					
						
							|  |  |  |                            (uint64_t *)&entry, NULL, | 
					
						
							| 
									
										
										
										
											2020-01-26 23:55:04 +01:00
										 |  |  |                            (uint64_t *)&kernel_high, NULL, big_endian, | 
					
						
							| 
									
										
										
										
											2016-03-04 11:30:21 +00:00
										 |  |  |                            EM_MIPS, 1, 0); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     if (kernel_size >= 0) { | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |         if ((entry & ~0x7fffffffULL) == 0x80000000) { | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |             entry = (int32_t)entry; | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     } else { | 
					
						
							| 
									
										
											  
											
												hw/mips: 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>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Yongbok Kim <yongbok.kim@imgtec.com>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Conversions that aren't followed by exit() dropped, because they might
be inappropriate.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20180203084315.20497-6-armbru@redhat.com>
											
										 
											2018-02-03 09:43:06 +01:00
										 |  |  |         error_report("could not load kernel '%s': %s", | 
					
						
							| 
									
										
										
										
											2017-07-27 01:56:13 +02:00
										 |  |  |                      loaderparams.kernel_filename, | 
					
						
							|  |  |  |                      load_elf_strerror(kernel_size)); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |         exit(1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* load initrd */ | 
					
						
							|  |  |  |     initrd_size = 0; | 
					
						
							|  |  |  |     initrd_offset = 0; | 
					
						
							| 
									
										
										
										
											2007-11-09 17:52:11 +00:00
										 |  |  |     if (loaderparams.initrd_filename) { | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |         initrd_size = get_image_size(loaderparams.initrd_filename); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |         if (initrd_size > 0) { | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |             initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & | 
					
						
							|  |  |  |                             INITRD_PAGE_MASK; | 
					
						
							| 
									
										
										
										
											2007-11-09 17:52:11 +00:00
										 |  |  |             if (initrd_offset + initrd_size > loaderparams.ram_size) { | 
					
						
							| 
									
										
											  
											
												hw/mips: 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>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Yongbok Kim <yongbok.kim@imgtec.com>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Conversions that aren't followed by exit() dropped, because they might
be inappropriate.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20180203084315.20497-6-armbru@redhat.com>
											
										 
											2018-02-03 09:43:06 +01:00
										 |  |  |                 error_report("memory too small for initial ram disk '%s'", | 
					
						
							|  |  |  |                              loaderparams.initrd_filename); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |                 exit(1); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-04-09 20:05:49 +00:00
										 |  |  |             initrd_size = load_image_targphys(loaderparams.initrd_filename, | 
					
						
							|  |  |  |                 initrd_offset, loaderparams.ram_size - initrd_offset); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (initrd_size == (target_ulong) -1) { | 
					
						
							| 
									
										
											  
											
												hw/mips: 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>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Yongbok Kim <yongbok.kim@imgtec.com>
Cc: "Hervé Poussineau" <hpoussin@reactos.org>
Conversions that aren't followed by exit() dropped, because they might
be inappropriate.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20180203084315.20497-6-armbru@redhat.com>
											
										 
											2018-02-03 09:43:06 +01:00
										 |  |  |             error_report("could not load initial ram disk '%s'", | 
					
						
							|  |  |  |                          loaderparams.initrd_filename); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |             exit(1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |     return entry; | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void main_cpu_reset(void *opaque) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |     ResetData *s = (ResetData *)opaque; | 
					
						
							| 
									
										
										
										
											2012-05-05 14:19:45 +02:00
										 |  |  |     CPUMIPSState *env = &s->cpu->env; | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-05 14:19:45 +02:00
										 |  |  |     cpu_reset(CPU(s->cpu)); | 
					
						
							| 
									
										
										
										
											2010-06-08 13:30:03 -07:00
										 |  |  |     env->active_tc.PC = s->vector & ~(target_ulong)1; | 
					
						
							|  |  |  |     if (s->vector & 1) { | 
					
						
							|  |  |  |         env->hflags |= MIPS_HFLAG_M16; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-04 22:29:26 +02:00
										 |  |  | static void mipsnet_init(int base, qemu_irq irq, NICInfo *nd) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     DeviceState *dev; | 
					
						
							|  |  |  |     SysBusDevice *s; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												qdev: Convert uses of qdev_create() with Coccinelle
This is the transformation explained in the commit before previous.
Takes care of just one pattern that needs conversion.  More to come in
this series.
Coccinelle script:
    @ depends on !(file in "hw/arm/highbank.c")@
    expression bus, type_name, dev, expr;
    @@
    -    dev = qdev_create(bus, type_name);
    +    dev = qdev_new(type_name);
         ... when != dev = expr
    -    qdev_init_nofail(dev);
    +    qdev_realize_and_unref(dev, bus, &error_fatal);
    @@
    expression bus, type_name, dev, expr;
    identifier DOWN;
    @@
    -    dev = DOWN(qdev_create(bus, type_name));
    +    dev = DOWN(qdev_new(type_name));
         ... when != dev = expr
    -    qdev_init_nofail(DEVICE(dev));
    +    qdev_realize_and_unref(DEVICE(dev), bus, &error_fatal);
    @@
    expression bus, type_name, expr;
    identifier dev;
    @@
    -    DeviceState *dev = qdev_create(bus, type_name);
    +    DeviceState *dev = qdev_new(type_name);
         ... when != dev = expr
    -    qdev_init_nofail(dev);
    +    qdev_realize_and_unref(dev, bus, &error_fatal);
    @@
    expression bus, type_name, dev, expr, errp;
    symbol true;
    @@
    -    dev = qdev_create(bus, type_name);
    +    dev = qdev_new(type_name);
         ... when != dev = expr
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize_and_unref(dev, bus, errp);
    @@
    expression bus, type_name, expr, errp;
    identifier dev;
    symbol true;
    @@
    -    DeviceState *dev = qdev_create(bus, type_name);
    +    DeviceState *dev = qdev_new(type_name);
         ... when != dev = expr
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize_and_unref(dev, bus, errp);
The first rule exempts hw/arm/highbank.c, because it matches along two
control flow paths there, with different @type_name.  Covered by the
next commit's manual conversions.
Missing #include "qapi/error.h" added manually.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-10-armbru@redhat.com>
[Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
											
										 
											2020-06-10 07:31:58 +02:00
										 |  |  |     dev = qdev_new("mipsnet"); | 
					
						
							| 
									
										
										
										
											2011-09-04 22:29:26 +02:00
										 |  |  |     qdev_set_nic_properties(dev, nd); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-20 02:47:33 +01:00
										 |  |  |     s = SYS_BUS_DEVICE(dev); | 
					
						
							| 
									
										
											  
											
												sysbus: Convert to sysbus_realize() etc. with Coccinelle
Convert from qdev_realize(), qdev_realize_and_unref() with null @bus
argument to sysbus_realize(), sysbus_realize_and_unref().
Coccinelle script:
    @@
    expression dev, errp;
    @@
    -    qdev_realize(DEVICE(dev), NULL, errp);
    +    sysbus_realize(SYS_BUS_DEVICE(dev), errp);
    @@
    expression sysbus_dev, dev, errp;
    @@
    +    sysbus_dev = SYS_BUS_DEVICE(dev);
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(sysbus_dev, errp);
    -    sysbus_dev = SYS_BUS_DEVICE(dev);
    @@
    expression sysbus_dev, dev, errp;
    expression expr;
    @@
         sysbus_dev = SYS_BUS_DEVICE(dev);
         ... when != dev = expr;
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(sysbus_dev, errp);
    @@
    expression dev, errp;
    @@
    -    qdev_realize_and_unref(DEVICE(dev), NULL, errp);
    +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
    @@
    expression dev, errp;
    @@
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
Whitespace changes minimized manually.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-46-armbru@redhat.com>
[Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
											
										 
											2020-06-10 07:32:34 +02:00
										 |  |  |     sysbus_realize_and_unref(s, &error_fatal); | 
					
						
							| 
									
										
										
										
											2011-09-04 22:29:26 +02:00
										 |  |  |     sysbus_connect_irq(s, 0, irq); | 
					
						
							|  |  |  |     memory_region_add_subregion(get_system_io(), | 
					
						
							|  |  |  |                                 base, | 
					
						
							|  |  |  |                                 sysbus_mmio_get_region(s, 0)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | static void | 
					
						
							| 
									
										
										
										
											2014-05-07 17:42:57 +03:00
										 |  |  | mips_mipssim_init(MachineState *machine) | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2014-05-07 17:42:57 +03:00
										 |  |  |     const char *kernel_filename = machine->kernel_filename; | 
					
						
							|  |  |  |     const char *kernel_cmdline = machine->kernel_cmdline; | 
					
						
							|  |  |  |     const char *initrd_filename = machine->initrd_filename; | 
					
						
							| 
									
										
										
										
											2009-05-30 00:52:44 +01:00
										 |  |  |     char *filename; | 
					
						
							| 
									
										
										
										
											2011-08-08 22:17:28 +03:00
										 |  |  |     MemoryRegion *address_space_mem = get_system_memory(); | 
					
						
							| 
									
										
										
										
											2013-07-22 15:54:20 +02:00
										 |  |  |     MemoryRegion *isa = g_new(MemoryRegion, 1); | 
					
						
							| 
									
										
										
										
											2011-08-08 22:17:28 +03:00
										 |  |  |     MemoryRegion *bios = g_new(MemoryRegion, 1); | 
					
						
							| 
									
										
										
										
											2012-05-05 14:17:49 +02:00
										 |  |  |     MIPSCPU *cpu; | 
					
						
							| 
									
										
										
										
											2012-03-14 01:38:23 +01:00
										 |  |  |     CPUMIPSState *env; | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |     ResetData *reset_info; | 
					
						
							| 
									
										
										
										
											2007-10-18 15:05:11 +00:00
										 |  |  |     int bios_size; | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Init CPUs. */ | 
					
						
							| 
									
										
										
										
											2017-10-05 15:51:13 +02:00
										 |  |  |     cpu = MIPS_CPU(cpu_create(machine->cpu_type)); | 
					
						
							| 
									
										
										
										
											2012-05-05 14:17:49 +02:00
										 |  |  |     env = &cpu->env; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-20 22:09:37 -05:00
										 |  |  |     reset_info = g_malloc0(sizeof(ResetData)); | 
					
						
							| 
									
										
										
										
											2012-05-05 14:19:45 +02:00
										 |  |  |     reset_info->cpu = cpu; | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |     reset_info->vector = env->active_tc.PC; | 
					
						
							|  |  |  |     qemu_register_reset(main_cpu_reset, reset_info); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Allocate RAM. */ | 
					
						
							| 
									
										
										
										
											2020-02-24 21:55:08 +01:00
										 |  |  |     memory_region_init_rom(bios, NULL, "mips_mipssim.bios", BIOS_SIZE, | 
					
						
							| 
									
										
											  
											
												Fix bad error handling after memory_region_init_ram()
Symptom:
    $ qemu-system-x86_64 -m 10000000
    Unexpected error in ram_block_add() at /work/armbru/qemu/exec.c:1456:
    upstream-qemu: cannot set up guest memory 'pc.ram': Cannot allocate memory
    Aborted (core dumped)
Root cause: commit ef701d7 screwed up handling of out-of-memory
conditions.  Before the commit, we report the error and exit(1), in
one place, ram_block_add().  The commit lifts the error handling up
the call chain some, to three places.  Fine.  Except it uses
&error_abort in these places, changing the behavior from exit(1) to
abort(), and thus undoing the work of commit 3922825 "exec: Don't
abort when we can't allocate guest memory".
The three places are:
* memory_region_init_ram()
  Commit 4994653 (right after commit ef701d7) lifted the error
  handling further, through memory_region_init_ram(), multiplying the
  incorrect use of &error_abort.  Later on, imitation of existing
  (bad) code may have created more.
* memory_region_init_ram_ptr()
  The &error_abort is still there.
* memory_region_init_rom_device()
  Doesn't need fixing, because commit 33e0eb5 (soon after commit
  ef701d7) lifted the error handling further, and in the process
  changed it from &error_abort to passing it up the call chain.
  Correct, because the callers are realize() methods.
Fix the error handling after memory_region_init_ram() with a
Coccinelle semantic patch:
    @r@
    expression mr, owner, name, size, err;
    position p;
    @@
            memory_region_init_ram(mr, owner, name, size,
    (
    -                              &error_abort
    +                              &error_fatal
    |
                                   err@p
    )
                                  );
    @script:python@
        p << r.p;
    @@
    print "%s:%s:%s" % (p[0].file, p[0].line, p[0].column)
When the last argument is &error_abort, it gets replaced by
&error_fatal.  This is the fix.
If the last argument is anything else, its position is reported.  This
lets us check the fix is complete.  Four positions get reported:
* ram_backend_memory_alloc()
  Error is passed up the call chain, ultimately through
  user_creatable_complete().  As far as I can tell, it's callers all
  handle the error sanely.
* fsl_imx25_realize(), fsl_imx31_realize(), dp8393x_realize()
  DeviceClass.realize() methods, errors handled sanely further up the
  call chain.
We're good.  Test case again behaves:
    $ qemu-system-x86_64 -m 10000000
    qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory
    [Exit 1 ]
The next commits will repair the rest of commit ef701d7's damage.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1441983105-26376-3-git-send-email-armbru@redhat.com>
Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
											
										 
											2015-09-11 16:51:43 +02:00
										 |  |  |                            &error_fatal); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:30 -05:00
										 |  |  |     memory_region_add_subregion(address_space_mem, 0, machine->ram); | 
					
						
							| 
									
										
										
										
											2009-04-09 20:05:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Map the BIOS / boot exception handler. */ | 
					
						
							| 
									
										
										
										
											2011-08-08 22:17:28 +03:00
										 |  |  |     memory_region_add_subregion(address_space_mem, 0x1fc00000LL, bios); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     /* Load a BIOS / boot exception handler image. */ | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |     if (bios_name == NULL) { | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |         bios_name = BIOS_FILENAME; | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-30 00:52:44 +01:00
										 |  |  |     filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); | 
					
						
							|  |  |  |     if (filename) { | 
					
						
							|  |  |  |         bios_size = load_image_targphys(filename, 0x1fc00000LL, BIOS_SIZE); | 
					
						
							| 
									
										
										
										
											2011-08-20 22:09:37 -05:00
										 |  |  |         g_free(filename); | 
					
						
							| 
									
										
										
										
											2009-05-30 00:52:44 +01:00
										 |  |  |     } else { | 
					
						
							|  |  |  |         bios_size = -1; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-07-29 17:01:37 +02:00
										 |  |  |     if ((bios_size < 0 || bios_size > BIOS_SIZE) && | 
					
						
							|  |  |  |         !kernel_filename && !qtest_enabled()) { | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |         /* Bail out if we have neither a kernel image nor boot vector code. */ | 
					
						
							| 
									
										
										
										
											2013-08-03 16:03:18 +02:00
										 |  |  |         error_report("Could not load MIPS bios '%s', and no " | 
					
						
							| 
									
										
										
										
											2014-11-15 18:06:41 +08:00
										 |  |  |                      "-kernel argument was specified", bios_name); | 
					
						
							| 
									
										
										
										
											2013-08-03 16:03:18 +02:00
										 |  |  |         exit(1); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2007-10-18 15:05:11 +00:00
										 |  |  |         /* We have a boot vector start address. */ | 
					
						
							| 
									
										
										
										
											2008-06-27 10:02:35 +00:00
										 |  |  |         env->active_tc.PC = (target_long)(int32_t)0xbfc00000; | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (kernel_filename) { | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:30 -05:00
										 |  |  |         loaderparams.ram_size = machine->ram_size; | 
					
						
							| 
									
										
										
										
											2007-11-09 17:52:11 +00:00
										 |  |  |         loaderparams.kernel_filename = kernel_filename; | 
					
						
							|  |  |  |         loaderparams.kernel_cmdline = kernel_cmdline; | 
					
						
							|  |  |  |         loaderparams.initrd_filename = initrd_filename; | 
					
						
							| 
									
										
										
										
											2009-11-14 01:04:29 +01:00
										 |  |  |         reset_info->vector = load_kernel(); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Init CPU internal devices. */ | 
					
						
							| 
									
										
										
										
											2016-03-15 14:32:19 +01:00
										 |  |  |     cpu_mips_irq_init_cpu(cpu); | 
					
						
							|  |  |  |     cpu_mips_clock_init(cpu); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Register 64 KB of ISA IO space at 0x1fd00000. */ | 
					
						
							| 
									
										
										
										
											2013-07-22 15:54:20 +02:00
										 |  |  |     memory_region_init_alias(isa, NULL, "isa_mmio", | 
					
						
							|  |  |  |                              get_system_io(), 0, 0x00010000); | 
					
						
							|  |  |  |     memory_region_add_subregion(get_system_memory(), 0x1fd00000, isa); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-19 14:07:55 +02:00
										 |  |  |     /*
 | 
					
						
							|  |  |  |      * A single 16450 sits at offset 0x3f8. It is attached to | 
					
						
							|  |  |  |      * MIPS CPU INT2, which is interrupt 4. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2019-10-23 15:29:55 +02:00
										 |  |  |     if (serial_hd(0)) { | 
					
						
							| 
									
										
											  
											
												qdev: Convert uses of qdev_create() with Coccinelle
This is the transformation explained in the commit before previous.
Takes care of just one pattern that needs conversion.  More to come in
this series.
Coccinelle script:
    @ depends on !(file in "hw/arm/highbank.c")@
    expression bus, type_name, dev, expr;
    @@
    -    dev = qdev_create(bus, type_name);
    +    dev = qdev_new(type_name);
         ... when != dev = expr
    -    qdev_init_nofail(dev);
    +    qdev_realize_and_unref(dev, bus, &error_fatal);
    @@
    expression bus, type_name, dev, expr;
    identifier DOWN;
    @@
    -    dev = DOWN(qdev_create(bus, type_name));
    +    dev = DOWN(qdev_new(type_name));
         ... when != dev = expr
    -    qdev_init_nofail(DEVICE(dev));
    +    qdev_realize_and_unref(DEVICE(dev), bus, &error_fatal);
    @@
    expression bus, type_name, expr;
    identifier dev;
    @@
    -    DeviceState *dev = qdev_create(bus, type_name);
    +    DeviceState *dev = qdev_new(type_name);
         ... when != dev = expr
    -    qdev_init_nofail(dev);
    +    qdev_realize_and_unref(dev, bus, &error_fatal);
    @@
    expression bus, type_name, dev, expr, errp;
    symbol true;
    @@
    -    dev = qdev_create(bus, type_name);
    +    dev = qdev_new(type_name);
         ... when != dev = expr
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize_and_unref(dev, bus, errp);
    @@
    expression bus, type_name, expr, errp;
    identifier dev;
    symbol true;
    @@
    -    DeviceState *dev = qdev_create(bus, type_name);
    +    DeviceState *dev = qdev_new(type_name);
         ... when != dev = expr
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize_and_unref(dev, bus, errp);
The first rule exempts hw/arm/highbank.c, because it matches along two
control flow paths there, with different @type_name.  Covered by the
next commit's manual conversions.
Missing #include "qapi/error.h" added manually.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-10-armbru@redhat.com>
[Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
											
										 
											2020-06-10 07:31:58 +02:00
										 |  |  |         DeviceState *dev = qdev_new(TYPE_SERIAL_IO); | 
					
						
							| 
									
										
										
										
											2019-10-23 15:29:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         qdev_prop_set_chr(dev, "chardev", serial_hd(0)); | 
					
						
							|  |  |  |         qdev_set_legacy_instance_id(dev, 0x3f8, 2); | 
					
						
							| 
									
										
											  
											
												sysbus: Convert to sysbus_realize() etc. with Coccinelle
Convert from qdev_realize(), qdev_realize_and_unref() with null @bus
argument to sysbus_realize(), sysbus_realize_and_unref().
Coccinelle script:
    @@
    expression dev, errp;
    @@
    -    qdev_realize(DEVICE(dev), NULL, errp);
    +    sysbus_realize(SYS_BUS_DEVICE(dev), errp);
    @@
    expression sysbus_dev, dev, errp;
    @@
    +    sysbus_dev = SYS_BUS_DEVICE(dev);
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(sysbus_dev, errp);
    -    sysbus_dev = SYS_BUS_DEVICE(dev);
    @@
    expression sysbus_dev, dev, errp;
    expression expr;
    @@
         sysbus_dev = SYS_BUS_DEVICE(dev);
         ... when != dev = expr;
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(sysbus_dev, errp);
    @@
    expression dev, errp;
    @@
    -    qdev_realize_and_unref(DEVICE(dev), NULL, errp);
    +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
    @@
    expression dev, errp;
    @@
    -    qdev_realize_and_unref(dev, NULL, errp);
    +    sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp);
Whitespace changes minimized manually.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-46-armbru@redhat.com>
[Conflicts in hw/misc/empty_slot.c and hw/sparc/leon3.c resolved]
											
										 
											2020-06-10 07:32:34 +02:00
										 |  |  |         sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); | 
					
						
							| 
									
										
										
										
											2019-10-23 15:29:55 +02:00
										 |  |  |         sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, env->irq[4]); | 
					
						
							| 
									
										
										
										
											2019-11-20 15:16:29 +04:00
										 |  |  |         sysbus_add_io(SYS_BUS_DEVICE(dev), 0x3f8, | 
					
						
							|  |  |  |                       sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0)); | 
					
						
							| 
									
										
										
										
											2019-10-23 15:29:55 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-24 16:35:11 +01:00
										 |  |  |     if (nd_table[0].used) | 
					
						
							| 
									
										
										
										
											2009-01-13 19:39:36 +00:00
										 |  |  |         /* MIPSnet uses the MIPS CPU INT0, which is interrupt 2. */ | 
					
						
							|  |  |  |         mipsnet_init(0x4200, env->irq[2], &nd_table[0]); | 
					
						
							| 
									
										
										
										
											2007-10-17 13:39:42 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-04 15:37:08 -03:00
										 |  |  | static void mips_mipssim_machine_init(MachineClass *mc) | 
					
						
							| 
									
										
										
										
											2009-05-20 18:38:09 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2015-09-04 15:37:08 -03:00
										 |  |  |     mc->desc = "MIPS MIPSsim platform"; | 
					
						
							|  |  |  |     mc->init = mips_mipssim_init; | 
					
						
							| 
									
										
										
										
											2017-10-05 15:51:13 +02:00
										 |  |  | #ifdef TARGET_MIPS64
 | 
					
						
							|  |  |  |     mc->default_cpu_type = MIPS_CPU_TYPE_NAME("5Kf"); | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  |     mc->default_cpu_type = MIPS_CPU_TYPE_NAME("24Kf"); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2020-02-19 11:09:30 -05:00
										 |  |  |     mc->default_ram_id = "mips_mipssim.ram"; | 
					
						
							| 
									
										
										
										
											2009-05-20 18:38:09 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-04 15:37:08 -03:00
										 |  |  | DEFINE_MACHINE("mipssim", mips_mipssim_machine_init) |