device.h revision 46d03d3c2f65781b5f826c0ae750224154008bbd
1/* Copyright (C) 2007-2008 The Android Open Source Project 2** 3** This software is licensed under the terms of the GNU General Public 4** License version 2, as published by the Free Software Foundation, and 5** may be copied, distributed, and modified under those terms. 6** 7** This program is distributed in the hope that it will be useful, 8** but WITHOUT ANY WARRANTY; without even the implied warranty of 9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10** GNU General Public License for more details. 11*/ 12#ifndef GOLDFISH_DEVICE_H 13#define GOLDFISH_DEVICE_H 14 15#include "config.h" 16#include "exec/cpu-common.h" 17 18struct goldfish_device { 19 struct goldfish_device *next; 20 struct goldfish_device *prev; 21 uint32_t reported_state; 22 void *cookie; 23 const char *name; 24 uint32_t id; 25 uint32_t base; // filled in by goldfish_device_add if 0 26 uint32_t size; 27 uint32_t irq; // filled in by goldfish_device_add if 0 28 uint32_t irq_count; 29}; 30 31 32void goldfish_device_set_irq(struct goldfish_device *dev, int irq, int level); 33int goldfish_device_add(struct goldfish_device *dev, 34 CPUReadMemoryFunc **mem_read, 35 CPUWriteMemoryFunc **mem_write, 36 void *opaque); 37 38int goldfish_add_device_no_io(struct goldfish_device *dev); 39 40void goldfish_device_init(qemu_irq *pic, uint32_t base, uint32_t size, uint32_t irq, uint32_t irq_count); 41int goldfish_device_bus_init(uint32_t base, uint32_t irq); 42 43// device init functions: 44qemu_irq *goldfish_interrupt_init(uint32_t base, qemu_irq parent_irq, qemu_irq parent_fiq); 45void goldfish_timer_and_rtc_init(uint32_t timerbase, int timerirq); 46int goldfish_tty_add(CharDriverState *cs, int id, uint32_t base, int irq); 47void goldfish_fb_init(int id); 48void goldfish_audio_init(uint32_t base, int id, const char* input_source); 49void goldfish_battery_init(int has_battery); 50void goldfish_battery_set_prop(int ac, int property, int value); 51void goldfish_battery_display(void (* callback)(void *data, const char* string), void *data); 52void goldfish_mmc_init(uint32_t base, int id, BlockDriverState* bs); 53int goldfish_guest_is_64bit(); 54 55// these do not add a device 56void trace_dev_init(); 57void events_dev_init(uint32_t base, qemu_irq irq); 58void nand_dev_init(uint32_t base); 59 60#ifdef TARGET_I386 61/* Maximum IRQ number available for a device on x86. */ 62#define GFD_MAX_IRQ 16 63/* IRQ reserved for keyboard. */ 64#define GFD_KBD_IRQ 1 65/* IRQ reserved for RTC. */ 66#define GFD_RTC_IRQ 8 67/* IRQ reserved for mouse. */ 68#define GFD_MOUSE_IRQ 12 69/* IRQ reserved for error (raising an exception in TB code). */ 70#define GFD_ERR_IRQ 13 71#else 72/* Maximum IRQ number available for a device on ARM. */ 73#define GFD_MAX_IRQ 32 74#endif 75 76static inline void uint64_set_low(uint64_t *addr, uint32 value) 77{ 78 *addr = (*addr & ~(0xFFFFFFFFULL)) | value; 79} 80 81static inline void uint64_set_high(uint64_t *addr, uint32 value) 82{ 83 *addr = (*addr & 0xFFFFFFFFULL) | ((uint64_t)value << 32); 84} 85 86#endif /* GOLDFISH_DEVICE_H */ 87