The attached patch starts splitting vl.h up a bit. I've pulled out the i2c, disk and irq code.
Because I picked some of the easier ones, they can also be built once, rather than for every target. Obviously there's a lot left to do, but my grand plan is to get rid of vl.h altogether. A few files will probably end up effectively including everything, but hopefully most files should disentangle reasonably well. The more gets split out, the better things should get. e.g. scsi-disk.c doesn't need vl.h because I already split out the block API. I want to check this seems a reasonable approach before I go too much further. Comments? Paul
Index: Makefile =================================================================== RCS file: /sources/qemu/qemu/Makefile,v retrieving revision 1.130 diff -u -p -r1.130 Makefile --- Makefile 11 Nov 2007 02:51:15 -0000 1.130 +++ Makefile 11 Nov 2007 04:18:14 -0000 @@ -1,5 +1,7 @@ # Makefile for QEMU. +VPATH=$(SRC_PATH):$(SRC_PATH)/hw + include config-host.mak .PHONY: all clean distclean dvi info install install-doc tar tarbin \ @@ -50,6 +52,10 @@ OBJS=$(BLOCK_OBJS) OBJS+=readline.o console.o OBJS+=block.o +OBJS+=irq.o +OBJS+=i2c.o smbus.o smbus_eeprom.o max7310.o max111x.o wm8750.o +OBJS+=scsi-disk.o cdrom.o + ifdef CONFIG_WIN32 OBJS+=tap-win32.o endif Index: Makefile.target =================================================================== RCS file: /sources/qemu/qemu/Makefile.target,v retrieving revision 1.222 diff -u -p -r1.222 Makefile.target --- Makefile.target 11 Nov 2007 02:51:15 -0000 1.222 +++ Makefile.target 11 Nov 2007 04:18:14 -0000 @@ -399,7 +399,6 @@ endif VL_OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o # XXX: suppress QEMU_TOOL tests VL_OBJS+=block-raw.o -VL_OBJS+=irq.o ifdef CONFIG_ALSA LIBS += -lasound @@ -421,10 +420,8 @@ CPPFLAGS += $(CONFIG_VNC_TLS_CFLAGS) LIBS += $(CONFIG_VNC_TLS_LIBS) endif -VL_OBJS += i2c.o smbus.o - # SCSI layer -VL_OBJS+= scsi-disk.o cdrom.o lsi53c895a.o +VL_OBJS+= lsi53c895a.o # USB layer VL_OBJS+= usb.o usb-hub.o usb-linux.o usb-hid.o usb-ohci.o usb-msd.o @@ -444,7 +441,7 @@ ifeq ($(TARGET_BASE_ARCH), i386) VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o VL_OBJS+= cirrus_vga.o apic.o parallel.o acpi.o piix_pci.o -VL_OBJS+= usb-uhci.o smbus_eeprom.o vmmouse.o vmport.o vmware_vga.o +VL_OBJS+= usb-uhci.o vmmouse.o vmport.o vmware_vga.o CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE endif ifeq ($(TARGET_BASE_ARCH), ppc) @@ -468,7 +465,7 @@ VL_OBJS+= mips_r4k.o mips_malta.o mips_p VL_OBJS+= mips_timer.o mips_int.o dma.o vga.o serial.o i8254.o i8259.o VL_OBJS+= jazz_led.o VL_OBJS+= ide.o gt64xxx.o pckbd.o ps2.o fdc.o mc146818rtc.o usb-uhci.o acpi.o ds1225y.o -VL_OBJS+= piix_pci.o smbus_eeprom.o parallel.o cirrus_vga.o $(SOUND_HW) +VL_OBJS+= piix_pci.o parallel.o cirrus_vga.o $(SOUND_HW) VL_OBJS+= mipsnet.o CPPFLAGS += -DHAS_AUDIO endif @@ -498,8 +495,8 @@ VL_OBJS+= armv7m.o armv7m_nvic.o stellar VL_OBJS+= ssd0323.o pl061.o VL_OBJS+= arm-semi.o VL_OBJS+= pxa2xx.o pxa2xx_pic.o pxa2xx_gpio.o pxa2xx_timer.o pxa2xx_dma.o -VL_OBJS+= pxa2xx_lcd.o pxa2xx_mmci.o pxa2xx_pcmcia.o max111x.o max7310.o -VL_OBJS+= spitz.o ads7846.o ide.o serial.o nand.o ecc.o wm8750.o +VL_OBJS+= pxa2xx_lcd.o pxa2xx_mmci.o pxa2xx_pcmcia.o +VL_OBJS+= spitz.o ads7846.o ide.o serial.o nand.o ecc.o VL_OBJS+= omap.o omap_lcdc.o omap1_clk.o omap_mmc.o omap_i2c.o VL_OBJS+= palm.o tsc210x.o CPPFLAGS += -DHAS_AUDIO Index: exec.c =================================================================== RCS file: /sources/qemu/qemu/exec.c,v retrieving revision 1.113 diff -u -p -r1.113 exec.c --- exec.c 10 Nov 2007 15:15:50 -0000 1.113 +++ exec.c 11 Nov 2007 04:18:15 -0000 @@ -1278,11 +1278,9 @@ int cpu_str_to_log_mask(const char *str) return mask; } -void cpu_abort(CPUState *env, const char *fmt, ...) +static void __attribute__((noreturn)) +cpu_abortv(CPUState *env, const char *fmt, va_list ap) { - va_list ap; - - va_start(ap, fmt); fprintf(stderr, "qemu: fatal: "); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); @@ -1308,10 +1306,27 @@ void cpu_abort(CPUState *env, const char fflush(logfile); fclose(logfile); } - va_end(ap); abort(); } +void cpu_abort(CPUState *env, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + cpu_abortv(env, fmt, ap); + va_end(ap); +} + +void qemu_abort(CPUState *env, const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + cpu_abortv(env, fmt, ap); + va_end(ap); +} + CPUState *cpu_copy(CPUState *env) { #if 0 Index: qemu-common.h =================================================================== RCS file: /sources/qemu/qemu/qemu-common.h,v retrieving revision 1.1 diff -u -p -r1.1 qemu-common.h --- qemu-common.h 11 Nov 2007 02:51:16 -0000 1.1 +++ qemu-common.h 11 Nov 2007 04:18:15 -0000 @@ -80,4 +80,10 @@ int strstart(const char *str, const char int stristart(const char *str, const char *val, const char **ptr); time_t mktimegm(struct tm *tm); +/* Error handling. */ + +void qemu_abort(const char *fmt, ...) + __attribute__ ((__format__ (__printf__, 1, 2))) + __attribute__ ((__noreturn__)); + #endif Index: vl.h =================================================================== RCS file: /sources/qemu/qemu/vl.h,v retrieving revision 1.294 diff -u -p -r1.294 vl.h --- vl.h 11 Nov 2007 02:51:17 -0000 1.294 +++ vl.h 11 Nov 2007 04:18:15 -0000 @@ -1,3 +1,4 @@ +/* FIXME: This header should disappear eventually. */ /* * QEMU System Emulator header * @@ -26,8 +27,9 @@ #include "qemu-common.h" -/* FIXME: Remove this. */ +/* FIXME: Remove these. */ #include "block.h" +#include "hw/hw.h" #ifndef glue #define xglue(x, y) x ## y @@ -446,88 +448,6 @@ int64_t cpu_get_ticks(void); void cpu_enable_ticks(void); void cpu_disable_ticks(void); -/* VM Load/Save */ - -typedef struct QEMUFile QEMUFile; - -QEMUFile *qemu_fopen(const char *filename, const char *mode); -void qemu_fflush(QEMUFile *f); -void qemu_fclose(QEMUFile *f); -void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size); -void qemu_put_byte(QEMUFile *f, int v); -void qemu_put_be16(QEMUFile *f, unsigned int v); -void qemu_put_be32(QEMUFile *f, unsigned int v); -void qemu_put_be64(QEMUFile *f, uint64_t v); -int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size); -int qemu_get_byte(QEMUFile *f); -unsigned int qemu_get_be16(QEMUFile *f); -unsigned int qemu_get_be32(QEMUFile *f); -uint64_t qemu_get_be64(QEMUFile *f); - -static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv) -{ - qemu_put_be64(f, *pv); -} - -static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv) -{ - qemu_put_be32(f, *pv); -} - -static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv) -{ - qemu_put_be16(f, *pv); -} - -static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv) -{ - qemu_put_byte(f, *pv); -} - -static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv) -{ - *pv = qemu_get_be64(f); -} - -static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv) -{ - *pv = qemu_get_be32(f); -} - -static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv) -{ - *pv = qemu_get_be16(f); -} - -static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv) -{ - *pv = qemu_get_byte(f); -} - -#if TARGET_LONG_BITS == 64 -#define qemu_put_betl qemu_put_be64 -#define qemu_get_betl qemu_get_be64 -#define qemu_put_betls qemu_put_be64s -#define qemu_get_betls qemu_get_be64s -#else -#define qemu_put_betl qemu_put_be32 -#define qemu_get_betl qemu_get_be32 -#define qemu_put_betls qemu_put_be32s -#define qemu_get_betls qemu_get_be32s -#endif - -int64_t qemu_ftell(QEMUFile *f); -int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence); - -typedef void SaveStateHandler(QEMUFile *f, void *opaque); -typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); - -int register_savevm(const char *idstr, - int instance_id, - int version_id, - SaveStateHandler *save_state, - LoadStateHandler *load_state, - void *opaque); void qemu_get_timer(QEMUFile *f, QEMUTimer *ts); void qemu_put_timer(QEMUFile *f, QEMUTimer *ts); @@ -802,10 +722,6 @@ void pci_piix3_ide_init(PCIBus *bus, Blo void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, qemu_irq *pic); -/* cdrom.c */ -int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); -int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); - /* ds1225y.c */ typedef struct ds1225y_t ds1225y_t; ds1225y_t *ds1225y_init(target_phys_addr_t mem_base, const char *filename); @@ -963,7 +879,8 @@ int pcspk_audio_init(AudioState *, qemu_ #include "hw/i2c.h" #include "hw/smbus.h" - +/* FIXME: remove this. */ +#include "hw/board.h" /* acpi.c */ extern int acpi_enabled; i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base); @@ -1209,30 +1126,7 @@ void do_usb_add(const char *devname); void do_usb_del(const char *devname); void usb_info(void); -/* scsi-disk.c */ -enum scsi_reason { - SCSI_REASON_DONE, /* Command complete. */ - SCSI_REASON_DATA /* Transfer complete, more data required. */ -}; - -typedef struct SCSIDevice SCSIDevice; -typedef void (*scsi_completionfn)(void *opaque, int reason, uint32_t tag, - uint32_t arg); - -SCSIDevice *scsi_disk_init(BlockDriverState *bdrv, - int tcq, - scsi_completionfn completion, - void *opaque); -void scsi_disk_destroy(SCSIDevice *s); - -int32_t scsi_send_command(SCSIDevice *s, uint32_t tag, uint8_t *buf, int lun); -/* SCSI data transfers are asynchrnonous. However, unlike the block IO - layer the completion routine may be called directly by - scsi_{read,write}_data. */ -void scsi_read_data(SCSIDevice *s, uint32_t tag); -int scsi_write_data(SCSIDevice *s, uint32_t tag); -void scsi_cancel_io(SCSIDevice *s, uint32_t tag); -uint8_t *scsi_get_buf(SCSIDevice *s, uint32_t tag); +#include "hw/scsi-disk.h" /* lsi53c895a.c */ void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id); @@ -1426,14 +1320,6 @@ uint32_t ads7846_read(void *opaque); void ads7846_write(void *opaque, uint32_t value); struct ads7846_state_s *ads7846_init(qemu_irq penirq); -/* max111x.c */ -struct max111x_s; -uint32_t max111x_read(void *opaque); -void max111x_write(void *opaque, uint32_t value); -struct max111x_s *max1110_init(qemu_irq cb); -struct max111x_s *max1111_init(qemu_irq cb); -void max111x_set_input(struct max111x_s *s, int line, uint8_t value); - /* PCMCIA/Cardbus */ struct pcmcia_socket_s { Index: hw/board.h =================================================================== RCS file: hw/board.h diff -N hw/board.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/board.h 11 Nov 2007 04:18:15 -0000 @@ -0,0 +1,12 @@ +/* Declarations for use by board files for creating devices. */ + +#ifndef HW_BOARD_H +#define HW_BOARD_H + +#include "max7310.h" + +#include "max111x.h" + +#include "wm8750.h" + +#endif Index: hw/cdrom.c =================================================================== RCS file: /sources/qemu/qemu/hw/cdrom.c,v retrieving revision 1.3 diff -u -p -r1.3 cdrom.c --- hw/cdrom.c 17 Sep 2007 08:09:46 -0000 1.3 +++ hw/cdrom.c 11 Nov 2007 04:18:15 -0000 @@ -25,7 +25,8 @@ /* ??? Most of the ATAPI emulation is still in ide.c. It should be moved here. */ -#include <vl.h> +#include "qemu-common.h" +#include "cdrom.h" static void lba_to_msf(uint8_t *buf, int lba) { Index: hw/cdrom.h =================================================================== RCS file: hw/cdrom.h diff -N hw/cdrom.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/cdrom.h 11 Nov 2007 04:18:15 -0000 @@ -0,0 +1,4 @@ +/* cdrom.c */ +int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track); +int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num); + Index: hw/esp.c =================================================================== RCS file: /sources/qemu/qemu/hw/esp.c,v retrieving revision 1.27 diff -u -p -r1.27 esp.c --- hw/esp.c 6 Oct 2007 11:28:21 -0000 1.27 +++ hw/esp.c 11 Nov 2007 04:18:15 -0000 @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "vl.h" +#include "scsi-disk.h" /* debug ESP card */ //#define DEBUG_ESP Index: hw/hw.h =================================================================== RCS file: hw/hw.h diff -N hw/hw.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/hw.h 11 Nov 2007 04:18:15 -0000 @@ -0,0 +1,92 @@ +/* Declarations for use by hardware emulation. */ +#ifndef QEMU_HW_H +#define QEMU_HW_H + +#include "qemu-common.h" + +/* VM Load/Save */ + +typedef struct QEMUFile QEMUFile; + +QEMUFile *qemu_fopen(const char *filename, const char *mode); +void qemu_fflush(QEMUFile *f); +void qemu_fclose(QEMUFile *f); +void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size); +void qemu_put_byte(QEMUFile *f, int v); +void qemu_put_be16(QEMUFile *f, unsigned int v); +void qemu_put_be32(QEMUFile *f, unsigned int v); +void qemu_put_be64(QEMUFile *f, uint64_t v); +int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size); +int qemu_get_byte(QEMUFile *f); +unsigned int qemu_get_be16(QEMUFile *f); +unsigned int qemu_get_be32(QEMUFile *f); +uint64_t qemu_get_be64(QEMUFile *f); + +static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv) +{ + qemu_put_be64(f, *pv); +} + +static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv) +{ + qemu_put_be32(f, *pv); +} + +static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv) +{ + qemu_put_be16(f, *pv); +} + +static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv) +{ + qemu_put_byte(f, *pv); +} + +static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv) +{ + *pv = qemu_get_be64(f); +} + +static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv) +{ + *pv = qemu_get_be32(f); +} + +static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv) +{ + *pv = qemu_get_be16(f); +} + +static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv) +{ + *pv = qemu_get_byte(f); +} + +#ifdef NEED_CPU_H +#if TARGET_LONG_BITS == 64 +#define qemu_put_betl qemu_put_be64 +#define qemu_get_betl qemu_get_be64 +#define qemu_put_betls qemu_put_be64s +#define qemu_get_betls qemu_get_be64s +#else +#define qemu_put_betl qemu_put_be32 +#define qemu_get_betl qemu_get_be32 +#define qemu_put_betls qemu_put_be32s +#define qemu_get_betls qemu_get_be32s +#endif +#endif + +int64_t qemu_ftell(QEMUFile *f); +int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence); + +typedef void SaveStateHandler(QEMUFile *f, void *opaque); +typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); + +int register_savevm(const char *idstr, + int instance_id, + int version_id, + SaveStateHandler *save_state, + LoadStateHandler *load_state, + void *opaque); + +#endif Index: hw/i2c.c =================================================================== RCS file: /sources/qemu/qemu/hw/i2c.c,v retrieving revision 1.4 diff -u -p -r1.4 i2c.c --- hw/i2c.c 3 Nov 2007 00:51:03 -0000 1.4 +++ hw/i2c.c 11 Nov 2007 04:18:15 -0000 @@ -7,7 +7,8 @@ * This code is licenced under the LGPL. */ -#include "vl.h" +#include "hw.h" +#include "i2c.h" struct i2c_bus { @@ -30,7 +31,7 @@ i2c_slave *i2c_slave_init(i2c_bus *bus, i2c_slave *dev; if (size < sizeof(i2c_slave)) - cpu_abort(cpu_single_env, "I2C struct too small"); + qemu_abort("I2C struct too small"); dev = (i2c_slave *)qemu_mallocz(size); dev->address = address; Index: hw/i2c.h =================================================================== RCS file: /sources/qemu/qemu/hw/i2c.h,v retrieving revision 1.4 diff -u -p -r1.4 i2c.h --- hw/i2c.h 11 Jul 2007 22:48:58 -0000 1.4 +++ hw/i2c.h 11 Nov 2007 04:18:15 -0000 @@ -50,18 +50,4 @@ void i2c_bus_load(QEMUFile *f, i2c_bus * void i2c_slave_save(QEMUFile *f, i2c_slave *dev); void i2c_slave_load(QEMUFile *f, i2c_slave *dev); -/* max7310.c */ -i2c_slave *max7310_init(i2c_bus *bus); -void max7310_reset(i2c_slave *i2c); -qemu_irq *max7310_gpio_in_get(i2c_slave *i2c); -void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler); - -/* wm8750.c */ -i2c_slave *wm8750_init(i2c_bus *bus, AudioState *audio); -void wm8750_reset(i2c_slave *i2c); -void wm8750_data_req_set(i2c_slave *i2c, - void (*data_req)(void *, int, int), void *opaque); -void wm8750_dac_dat(void *opaque, uint32_t sample); -uint32_t wm8750_adc_dat(void *opaque); - #endif Index: hw/ide.c =================================================================== RCS file: /sources/qemu/qemu/hw/ide.c,v retrieving revision 1.70 diff -u -p -r1.70 ide.c --- hw/ide.c 8 Nov 2007 16:38:17 -0000 1.70 +++ hw/ide.c 11 Nov 2007 04:18:16 -0000 @@ -23,6 +23,7 @@ * THE SOFTWARE. */ #include "vl.h" +#include "cdrom.h" /* debug IDE devices */ //#define DEBUG_IDE Index: hw/irq.c =================================================================== RCS file: /sources/qemu/qemu/hw/irq.c,v retrieving revision 1.3 diff -u -p -r1.3 irq.c --- hw/irq.c 29 Oct 2007 10:59:29 -0000 1.3 +++ hw/irq.c 11 Nov 2007 04:18:16 -0000 @@ -21,7 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -#include "vl.h" +#include "qemu-common.h" +#include "irq.h" struct IRQState { qemu_irq_handler handler; Index: hw/lsi53c895a.c =================================================================== RCS file: /sources/qemu/qemu/hw/lsi53c895a.c,v retrieving revision 1.10 diff -u -p -r1.10 lsi53c895a.c --- hw/lsi53c895a.c 16 Sep 2007 21:07:53 -0000 1.10 +++ hw/lsi53c895a.c 11 Nov 2007 04:18:16 -0000 @@ -11,6 +11,7 @@ big-endian targets. */ #include "vl.h" +#include "scsi-disk.h" //#define DEBUG_LSI //#define DEBUG_LSI_REG Index: hw/max111x.c =================================================================== RCS file: /sources/qemu/qemu/hw/max111x.c,v retrieving revision 1.2 diff -u -p -r1.2 max111x.c --- hw/max111x.c 24 May 2007 18:50:08 -0000 1.2 +++ hw/max111x.c 11 Nov 2007 04:18:16 -0000 @@ -7,7 +7,10 @@ * This code is licensed under the GNU GPLv2. */ -#include <vl.h> +#include "hw.h" +#include "i2c.h" +#include "irq.h" +#include "max111x.h" struct max111x_s { qemu_irq interrupt; Index: hw/max111x.h =================================================================== RCS file: hw/max111x.h diff -N hw/max111x.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/max111x.h 11 Nov 2007 04:18:16 -0000 @@ -0,0 +1,8 @@ +/* max111x.c */ +struct max111x_s; +uint32_t max111x_read(void *opaque); +void max111x_write(void *opaque, uint32_t value); +struct max111x_s *max1110_init(qemu_irq cb); +struct max111x_s *max1111_init(qemu_irq cb); +void max111x_set_input(struct max111x_s *s, int line, uint8_t value); + Index: hw/max7310.c =================================================================== RCS file: /sources/qemu/qemu/hw/max7310.c,v retrieving revision 1.2 diff -u -p -r1.2 max7310.c --- hw/max7310.c 24 May 2007 18:50:08 -0000 1.2 +++ hw/max7310.c 11 Nov 2007 04:18:16 -0000 @@ -7,7 +7,10 @@ * This file is licensed under GNU GPL. */ -#include "vl.h" +#include "hw.h" +#include "i2c.h" +#include "irq.h" +#include "max7310.h" struct max7310_s { i2c_slave i2c; @@ -182,7 +185,7 @@ static void max7310_gpio_set(void *opaqu { struct max7310_s *s = (struct max7310_s *) opaque; if (line >= sizeof(s->handler) / sizeof(*s->handler) || line < 0) - cpu_abort(cpu_single_env, "bad GPIO line"); + qemu_abort("bad GPIO line"); if (level) s->level |= s->direction & (1 << line); @@ -220,7 +223,7 @@ void max7310_gpio_out_set(i2c_slave *i2c { struct max7310_s *s = (struct max7310_s *) i2c; if (line >= sizeof(s->handler) / sizeof(*s->handler) || line < 0) - cpu_abort(cpu_single_env, "bad GPIO line"); + qemu_abort("bad GPIO line"); s->handler[line] = handler; } Index: hw/max7310.h =================================================================== RCS file: hw/max7310.h diff -N hw/max7310.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/max7310.h 11 Nov 2007 04:18:16 -0000 @@ -0,0 +1,5 @@ +/* max7310.c */ +i2c_slave *max7310_init(i2c_bus *bus); +void max7310_reset(i2c_slave *i2c); +qemu_irq *max7310_gpio_in_get(i2c_slave *i2c); +void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler); Index: hw/scsi-disk.c =================================================================== RCS file: /sources/qemu/qemu/hw/scsi-disk.c,v retrieving revision 1.15 diff -u -p -r1.15 scsi-disk.c --- hw/scsi-disk.c 3 Jun 2007 13:35:16 -0000 1.15 +++ hw/scsi-disk.c 11 Nov 2007 04:18:17 -0000 @@ -25,7 +25,10 @@ do { printf("scsi-disk: " fmt , ##args); #define BADF(fmt, args...) \ do { fprintf(stderr, "scsi-disk: " fmt , ##args); } while (0) -#include "vl.h" +#include "qemu-common.h" +#include "block.h" +#include "scsi-disk.h" +#include "cdrom.h" #define SENSE_NO_SENSE 0 #define SENSE_NOT_READY 2 Index: hw/scsi-disk.h =================================================================== RCS file: hw/scsi-disk.h diff -N hw/scsi-disk.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/scsi-disk.h 11 Nov 2007 04:18:17 -0000 @@ -0,0 +1,28 @@ +#ifndef SCSI_DISK_H +#define SCSI_DISK_H + +enum scsi_reason { + SCSI_REASON_DONE, /* Command complete. */ + SCSI_REASON_DATA /* Transfer complete, more data required. */ +}; + +typedef struct SCSIDevice SCSIDevice; +typedef void (*scsi_completionfn)(void *opaque, int reason, uint32_t tag, + uint32_t arg); + +SCSIDevice *scsi_disk_init(BlockDriverState *bdrv, + int tcq, + scsi_completionfn completion, + void *opaque); +void scsi_disk_destroy(SCSIDevice *s); + +int32_t scsi_send_command(SCSIDevice *s, uint32_t tag, uint8_t *buf, int lun); +/* SCSI data transfers are asynchrnonous. However, unlike the block IO + layer the completion routine may be called directly by + scsi_{read,write}_data. */ +void scsi_read_data(SCSIDevice *s, uint32_t tag); +int scsi_write_data(SCSIDevice *s, uint32_t tag); +void scsi_cancel_io(SCSIDevice *s, uint32_t tag); +uint8_t *scsi_get_buf(SCSIDevice *s, uint32_t tag); + +#endif Index: hw/smbus.c =================================================================== RCS file: /sources/qemu/qemu/hw/smbus.c,v retrieving revision 1.3 diff -u -p -r1.3 smbus.c --- hw/smbus.c 16 Sep 2007 21:07:56 -0000 1.3 +++ hw/smbus.c 11 Nov 2007 04:18:17 -0000 @@ -9,7 +9,9 @@ /* TODO: Implement PEC. */ -#include "vl.h" +#include "hw.h" +#include "i2c.h" +#include "smbus.h" //#define DEBUG_SMBUS 1 @@ -194,7 +196,7 @@ SMBusDevice *smbus_device_init(i2c_bus * SMBusDevice *dev; if (size < sizeof(SMBusDevice)) - cpu_abort(cpu_single_env, "SMBus struct too small"); + qemu_abort("SMBus struct too small"); dev = (SMBusDevice *)i2c_slave_init(bus, address, size); dev->i2c.event = smbus_i2c_event; Index: hw/smbus_eeprom.c =================================================================== RCS file: /sources/qemu/qemu/hw/smbus_eeprom.c,v retrieving revision 1.4 diff -u -p -r1.4 smbus_eeprom.c --- hw/smbus_eeprom.c 17 Sep 2007 08:09:48 -0000 1.4 +++ hw/smbus_eeprom.c 11 Nov 2007 04:18:17 -0000 @@ -22,7 +22,9 @@ * THE SOFTWARE. */ -#include "vl.h" +#include "hw.h" +#include "i2c.h" +#include "smbus.h" //#define DEBUG Index: hw/usb-msd.c =================================================================== RCS file: /sources/qemu/qemu/hw/usb-msd.c,v retrieving revision 1.11 diff -u -p -r1.11 usb-msd.c --- hw/usb-msd.c 17 Sep 2007 08:09:49 -0000 1.11 +++ hw/usb-msd.c 11 Nov 2007 04:18:17 -0000 @@ -8,6 +8,7 @@ */ #include "vl.h" +#include "scsi-disk.h" //#define DEBUG_MSD Index: hw/wm8750.c =================================================================== RCS file: /sources/qemu/qemu/hw/wm8750.c,v retrieving revision 1.2 diff -u -p -r1.2 wm8750.c --- hw/wm8750.c 24 May 2007 18:50:09 -0000 1.2 +++ hw/wm8750.c 11 Nov 2007 04:18:17 -0000 @@ -7,7 +7,10 @@ * This file is licensed under GNU GPL. */ -#include "vl.h" +#include "hw.h" +#include "i2c.h" +#include "audio/audio.h" +#include "wm8750.h" #define IN_PORT_N 3 #define OUT_PORT_N 3 Index: hw/wm8750.h =================================================================== RCS file: hw/wm8750.h diff -N hw/wm8750.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ hw/wm8750.h 11 Nov 2007 04:18:17 -0000 @@ -0,0 +1,7 @@ +/* wm8750.c */ +i2c_slave *wm8750_init(i2c_bus *bus, AudioState *audio); +void wm8750_reset(i2c_slave *i2c); +void wm8750_data_req_set(i2c_slave *i2c, + void (*data_req)(void *, int, int), void *opaque); +void wm8750_dac_dat(void *opaque, uint32_t sample); +uint32_t wm8750_adc_dat(void *opaque);