mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
hw: move headers to include/
Many of these should be cleaned up with proper qdev-/QOM-ification. Right now there are many catch-all headers in include/hw/ARCH depending on cpu.h, and this makes it necessary to compile these files per-target. However, fixing this does not belong in these patches. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
bb585a784e
commit
0d09e41a51
511 changed files with 829 additions and 830 deletions
70
include/hw/arm/devices.h
Normal file
70
include/hw/arm/devices.h
Normal file
|
@ -0,0 +1,70 @@
|
|||
#ifndef QEMU_DEVICES_H
|
||||
#define QEMU_DEVICES_H
|
||||
|
||||
#include "hw/irq.h"
|
||||
|
||||
/* ??? Not all users of this file can include cpu-common.h. */
|
||||
struct MemoryRegion;
|
||||
|
||||
/* Devices that have nowhere better to go. */
|
||||
|
||||
/* smc91c111.c */
|
||||
void smc91c111_init(NICInfo *, uint32_t, qemu_irq);
|
||||
|
||||
/* lan9118.c */
|
||||
void lan9118_init(NICInfo *, uint32_t, qemu_irq);
|
||||
|
||||
/* tsc210x.c */
|
||||
uWireSlave *tsc2102_init(qemu_irq pint);
|
||||
uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav);
|
||||
I2SCodec *tsc210x_codec(uWireSlave *chip);
|
||||
uint32_t tsc210x_txrx(void *opaque, uint32_t value, int len);
|
||||
void tsc210x_set_transform(uWireSlave *chip,
|
||||
MouseTransformInfo *info);
|
||||
void tsc210x_key_event(uWireSlave *chip, int key, int down);
|
||||
|
||||
/* tsc2005.c */
|
||||
void *tsc2005_init(qemu_irq pintdav);
|
||||
uint32_t tsc2005_txrx(void *opaque, uint32_t value, int len);
|
||||
void tsc2005_set_transform(void *opaque, MouseTransformInfo *info);
|
||||
|
||||
/* stellaris_input.c */
|
||||
void stellaris_gamepad_init(int n, qemu_irq *irq, const int *keycode);
|
||||
|
||||
/* blizzard.c */
|
||||
void *s1d13745_init(qemu_irq gpio_int);
|
||||
void s1d13745_write(void *opaque, int dc, uint16_t value);
|
||||
void s1d13745_write_block(void *opaque, int dc,
|
||||
void *buf, size_t len, int pitch);
|
||||
uint16_t s1d13745_read(void *opaque, int dc);
|
||||
|
||||
/* cbus.c */
|
||||
typedef struct {
|
||||
qemu_irq clk;
|
||||
qemu_irq dat;
|
||||
qemu_irq sel;
|
||||
} CBus;
|
||||
CBus *cbus_init(qemu_irq dat_out);
|
||||
void cbus_attach(CBus *bus, void *slave_opaque);
|
||||
|
||||
void *retu_init(qemu_irq irq, int vilma);
|
||||
void *tahvo_init(qemu_irq irq, int betty);
|
||||
|
||||
void retu_key_event(void *retu, int state);
|
||||
|
||||
/* tc6393xb.c */
|
||||
typedef struct TC6393xbState TC6393xbState;
|
||||
#define TC6393XB_RAM 0x110000 /* amount of ram for Video and USB */
|
||||
TC6393xbState *tc6393xb_init(struct MemoryRegion *sysmem,
|
||||
uint32_t base, qemu_irq irq);
|
||||
void tc6393xb_gpio_out_set(TC6393xbState *s, int line,
|
||||
qemu_irq handler);
|
||||
qemu_irq *tc6393xb_gpio_in_get(TC6393xbState *s);
|
||||
qemu_irq tc6393xb_l3v_get(TC6393xbState *s);
|
||||
|
||||
/* sm501.c */
|
||||
void sm501_init(struct MemoryRegion *address_space_mem, uint32_t base,
|
||||
uint32_t local_mem_bytes, qemu_irq irq,
|
||||
CharDriverState *chr);
|
||||
|
||||
#endif
|
137
include/hw/arm/exynos4210.h
Normal file
137
include/hw/arm/exynos4210.h
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
* Samsung exynos4210 SoC emulation
|
||||
*
|
||||
* Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
|
||||
* Maksim Kozlov <m.kozlov@samsung.com>
|
||||
* Evgeny Voevodin <e.voevodin@samsung.com>
|
||||
* Igor Mitsyanko <i.mitsyanko@samsung.com>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef EXYNOS4210_H_
|
||||
#define EXYNOS4210_H_
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "exec/memory.h"
|
||||
|
||||
#define EXYNOS4210_NCPUS 2
|
||||
|
||||
#define EXYNOS4210_DRAM0_BASE_ADDR 0x40000000
|
||||
#define EXYNOS4210_DRAM1_BASE_ADDR 0xa0000000
|
||||
#define EXYNOS4210_DRAM_MAX_SIZE 0x60000000 /* 1.5 GB */
|
||||
|
||||
#define EXYNOS4210_IROM_BASE_ADDR 0x00000000
|
||||
#define EXYNOS4210_IROM_SIZE 0x00010000 /* 64 KB */
|
||||
#define EXYNOS4210_IROM_MIRROR_BASE_ADDR 0x02000000
|
||||
#define EXYNOS4210_IROM_MIRROR_SIZE 0x00010000 /* 64 KB */
|
||||
|
||||
#define EXYNOS4210_IRAM_BASE_ADDR 0x02020000
|
||||
#define EXYNOS4210_IRAM_SIZE 0x00020000 /* 128 KB */
|
||||
|
||||
/* Secondary CPU startup code is in IROM memory */
|
||||
#define EXYNOS4210_SMP_BOOT_ADDR EXYNOS4210_IROM_BASE_ADDR
|
||||
#define EXYNOS4210_SMP_BOOT_SIZE 0x1000
|
||||
#define EXYNOS4210_BASE_BOOT_ADDR EXYNOS4210_DRAM0_BASE_ADDR
|
||||
/* Secondary CPU polling address to get loader start from */
|
||||
#define EXYNOS4210_SECOND_CPU_BOOTREG 0x10020814
|
||||
|
||||
#define EXYNOS4210_SMP_PRIVATE_BASE_ADDR 0x10500000
|
||||
#define EXYNOS4210_L2X0_BASE_ADDR 0x10502000
|
||||
|
||||
/*
|
||||
* exynos4210 IRQ subsystem stub definitions.
|
||||
*/
|
||||
#define EXYNOS4210_IRQ_GATE_NINPUTS 2 /* Internal and External GIC */
|
||||
|
||||
#define EXYNOS4210_MAX_INT_COMBINER_OUT_IRQ 64
|
||||
#define EXYNOS4210_MAX_EXT_COMBINER_OUT_IRQ 16
|
||||
#define EXYNOS4210_MAX_INT_COMBINER_IN_IRQ \
|
||||
(EXYNOS4210_MAX_INT_COMBINER_OUT_IRQ * 8)
|
||||
#define EXYNOS4210_MAX_EXT_COMBINER_IN_IRQ \
|
||||
(EXYNOS4210_MAX_EXT_COMBINER_OUT_IRQ * 8)
|
||||
|
||||
#define EXYNOS4210_COMBINER_GET_IRQ_NUM(grp, bit) ((grp)*8 + (bit))
|
||||
#define EXYNOS4210_COMBINER_GET_GRP_NUM(irq) ((irq) / 8)
|
||||
#define EXYNOS4210_COMBINER_GET_BIT_NUM(irq) \
|
||||
((irq) - 8 * EXYNOS4210_COMBINER_GET_GRP_NUM(irq))
|
||||
|
||||
/* IRQs number for external and internal GIC */
|
||||
#define EXYNOS4210_EXT_GIC_NIRQ (160-32)
|
||||
#define EXYNOS4210_INT_GIC_NIRQ 64
|
||||
|
||||
#define EXYNOS4210_I2C_NUMBER 9
|
||||
|
||||
typedef struct Exynos4210Irq {
|
||||
qemu_irq int_combiner_irq[EXYNOS4210_MAX_INT_COMBINER_IN_IRQ];
|
||||
qemu_irq ext_combiner_irq[EXYNOS4210_MAX_EXT_COMBINER_IN_IRQ];
|
||||
qemu_irq int_gic_irq[EXYNOS4210_INT_GIC_NIRQ];
|
||||
qemu_irq ext_gic_irq[EXYNOS4210_EXT_GIC_NIRQ];
|
||||
qemu_irq board_irqs[EXYNOS4210_MAX_INT_COMBINER_IN_IRQ];
|
||||
} Exynos4210Irq;
|
||||
|
||||
typedef struct Exynos4210State {
|
||||
ARMCPU *cpu[EXYNOS4210_NCPUS];
|
||||
Exynos4210Irq irqs;
|
||||
qemu_irq *irq_table;
|
||||
|
||||
MemoryRegion chipid_mem;
|
||||
MemoryRegion iram_mem;
|
||||
MemoryRegion irom_mem;
|
||||
MemoryRegion irom_alias_mem;
|
||||
MemoryRegion dram0_mem;
|
||||
MemoryRegion dram1_mem;
|
||||
MemoryRegion boot_secondary;
|
||||
MemoryRegion bootreg_mem;
|
||||
i2c_bus *i2c_if[EXYNOS4210_I2C_NUMBER];
|
||||
} Exynos4210State;
|
||||
|
||||
void exynos4210_write_secondary(ARMCPU *cpu,
|
||||
const struct arm_boot_info *info);
|
||||
|
||||
Exynos4210State *exynos4210_init(MemoryRegion *system_mem,
|
||||
unsigned long ram_size);
|
||||
|
||||
/* Initialize exynos4210 IRQ subsystem stub */
|
||||
qemu_irq *exynos4210_init_irq(Exynos4210Irq *env);
|
||||
|
||||
/* Initialize board IRQs.
|
||||
* These IRQs contain splitted Int/External Combiner and External Gic IRQs */
|
||||
void exynos4210_init_board_irqs(Exynos4210Irq *s);
|
||||
|
||||
/* Get IRQ number from exynos4210 IRQ subsystem stub.
|
||||
* To identify IRQ source use internal combiner group and bit number
|
||||
* grp - group number
|
||||
* bit - bit number inside group */
|
||||
uint32_t exynos4210_get_irq(uint32_t grp, uint32_t bit);
|
||||
|
||||
/*
|
||||
* Get Combiner input GPIO into irqs structure
|
||||
*/
|
||||
void exynos4210_combiner_get_gpioin(Exynos4210Irq *irqs, DeviceState *dev,
|
||||
int ext);
|
||||
|
||||
/*
|
||||
* exynos4210 UART
|
||||
*/
|
||||
DeviceState *exynos4210_uart_create(hwaddr addr,
|
||||
int fifo_size,
|
||||
int channel,
|
||||
CharDriverState *chr,
|
||||
qemu_irq irq);
|
||||
|
||||
#endif /* EXYNOS4210_H_ */
|
34
include/hw/arm/imx.h
Normal file
34
include/hw/arm/imx.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* i.MX31 emulation
|
||||
*
|
||||
* Copyright (C) 2012 Peter Chubb
|
||||
* NICTA
|
||||
*
|
||||
* This code is released under the GPL, version 2.0 or later
|
||||
* See the file `../COPYING' for details.
|
||||
*/
|
||||
|
||||
#ifndef IMX_H
|
||||
#define IMX_H
|
||||
|
||||
void imx_serial_create(int uart, const hwaddr addr, qemu_irq irq);
|
||||
|
||||
typedef enum {
|
||||
NOCLK,
|
||||
MCU,
|
||||
HSP,
|
||||
IPG,
|
||||
CLK_32k
|
||||
} IMXClk;
|
||||
|
||||
uint32_t imx_clock_frequency(DeviceState *s, IMXClk clock);
|
||||
|
||||
void imx_timerp_create(const hwaddr addr,
|
||||
qemu_irq irq,
|
||||
DeviceState *ccm);
|
||||
void imx_timerg_create(const hwaddr addr,
|
||||
qemu_irq irq,
|
||||
DeviceState *ccm);
|
||||
|
||||
|
||||
#endif /* IMX_H */
|
1015
include/hw/arm/omap.h
Normal file
1015
include/hw/arm/omap.h
Normal file
File diff suppressed because it is too large
Load diff
12
include/hw/arm/primecell.h
Normal file
12
include/hw/arm/primecell.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#ifndef PRIMECELL_H
|
||||
#define PRIMECELL_H
|
||||
|
||||
/* Declarations for ARM PrimeCell based periperals. */
|
||||
/* Also includes some devices that are currently only used by the
|
||||
ARM boards. */
|
||||
|
||||
/* arm_sysctl GPIO lines */
|
||||
#define ARM_SYSCTL_GPIO_MMC_WPROT 0
|
||||
#define ARM_SYSCTL_GPIO_MMC_CARDIN 1
|
||||
|
||||
#endif
|
191
include/hw/arm/pxa.h
Normal file
191
include/hw/arm/pxa.h
Normal file
|
@ -0,0 +1,191 @@
|
|||
/*
|
||||
* Intel XScale PXA255/270 processor support.
|
||||
*
|
||||
* Copyright (c) 2006 Openedhand Ltd.
|
||||
* Written by Andrzej Zaborowski <balrog@zabor.org>
|
||||
*
|
||||
* This code is licensed under the GNU GPL v2.
|
||||
*/
|
||||
#ifndef PXA_H
|
||||
# define PXA_H "pxa.h"
|
||||
|
||||
#include "exec/memory.h"
|
||||
|
||||
/* Interrupt numbers */
|
||||
# define PXA2XX_PIC_SSP3 0
|
||||
# define PXA2XX_PIC_USBH2 2
|
||||
# define PXA2XX_PIC_USBH1 3
|
||||
# define PXA2XX_PIC_KEYPAD 4
|
||||
# define PXA2XX_PIC_PWRI2C 6
|
||||
# define PXA25X_PIC_HWUART 7
|
||||
# define PXA27X_PIC_OST_4_11 7
|
||||
# define PXA2XX_PIC_GPIO_0 8
|
||||
# define PXA2XX_PIC_GPIO_1 9
|
||||
# define PXA2XX_PIC_GPIO_X 10
|
||||
# define PXA2XX_PIC_I2S 13
|
||||
# define PXA26X_PIC_ASSP 15
|
||||
# define PXA25X_PIC_NSSP 16
|
||||
# define PXA27X_PIC_SSP2 16
|
||||
# define PXA2XX_PIC_LCD 17
|
||||
# define PXA2XX_PIC_I2C 18
|
||||
# define PXA2XX_PIC_ICP 19
|
||||
# define PXA2XX_PIC_STUART 20
|
||||
# define PXA2XX_PIC_BTUART 21
|
||||
# define PXA2XX_PIC_FFUART 22
|
||||
# define PXA2XX_PIC_MMC 23
|
||||
# define PXA2XX_PIC_SSP 24
|
||||
# define PXA2XX_PIC_DMA 25
|
||||
# define PXA2XX_PIC_OST_0 26
|
||||
# define PXA2XX_PIC_RTC1HZ 30
|
||||
# define PXA2XX_PIC_RTCALARM 31
|
||||
|
||||
/* DMA requests */
|
||||
# define PXA2XX_RX_RQ_I2S 2
|
||||
# define PXA2XX_TX_RQ_I2S 3
|
||||
# define PXA2XX_RX_RQ_BTUART 4
|
||||
# define PXA2XX_TX_RQ_BTUART 5
|
||||
# define PXA2XX_RX_RQ_FFUART 6
|
||||
# define PXA2XX_TX_RQ_FFUART 7
|
||||
# define PXA2XX_RX_RQ_SSP1 13
|
||||
# define PXA2XX_TX_RQ_SSP1 14
|
||||
# define PXA2XX_RX_RQ_SSP2 15
|
||||
# define PXA2XX_TX_RQ_SSP2 16
|
||||
# define PXA2XX_RX_RQ_ICP 17
|
||||
# define PXA2XX_TX_RQ_ICP 18
|
||||
# define PXA2XX_RX_RQ_STUART 19
|
||||
# define PXA2XX_TX_RQ_STUART 20
|
||||
# define PXA2XX_RX_RQ_MMCI 21
|
||||
# define PXA2XX_TX_RQ_MMCI 22
|
||||
# define PXA2XX_USB_RQ(x) ((x) + 24)
|
||||
# define PXA2XX_RX_RQ_SSP3 66
|
||||
# define PXA2XX_TX_RQ_SSP3 67
|
||||
|
||||
# define PXA2XX_SDRAM_BASE 0xa0000000
|
||||
# define PXA2XX_INTERNAL_BASE 0x5c000000
|
||||
# define PXA2XX_INTERNAL_SIZE 0x40000
|
||||
|
||||
/* pxa2xx_pic.c */
|
||||
DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu);
|
||||
|
||||
/* pxa2xx_gpio.c */
|
||||
DeviceState *pxa2xx_gpio_init(hwaddr base,
|
||||
ARMCPU *cpu, DeviceState *pic, int lines);
|
||||
void pxa2xx_gpio_read_notifier(DeviceState *dev, qemu_irq handler);
|
||||
|
||||
/* pxa2xx_dma.c */
|
||||
DeviceState *pxa255_dma_init(hwaddr base, qemu_irq irq);
|
||||
DeviceState *pxa27x_dma_init(hwaddr base, qemu_irq irq);
|
||||
|
||||
/* pxa2xx_lcd.c */
|
||||
typedef struct PXA2xxLCDState PXA2xxLCDState;
|
||||
PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem,
|
||||
hwaddr base, qemu_irq irq);
|
||||
void pxa2xx_lcd_vsync_notifier(PXA2xxLCDState *s, qemu_irq handler);
|
||||
void pxa2xx_lcdc_oritentation(void *opaque, int angle);
|
||||
|
||||
/* pxa2xx_mmci.c */
|
||||
typedef struct PXA2xxMMCIState PXA2xxMMCIState;
|
||||
PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
|
||||
hwaddr base,
|
||||
BlockDriverState *bd, qemu_irq irq,
|
||||
qemu_irq rx_dma, qemu_irq tx_dma);
|
||||
void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly,
|
||||
qemu_irq coverswitch);
|
||||
|
||||
/* pxa2xx_pcmcia.c */
|
||||
typedef struct PXA2xxPCMCIAState PXA2xxPCMCIAState;
|
||||
PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
|
||||
hwaddr base);
|
||||
int pxa2xx_pcmcia_attach(void *opaque, PCMCIACardState *card);
|
||||
int pxa2xx_pcmcia_dettach(void *opaque);
|
||||
void pxa2xx_pcmcia_set_irq_cb(void *opaque, qemu_irq irq, qemu_irq cd_irq);
|
||||
|
||||
/* pxa2xx_keypad.c */
|
||||
struct keymap {
|
||||
int column;
|
||||
int row;
|
||||
};
|
||||
typedef struct PXA2xxKeyPadState PXA2xxKeyPadState;
|
||||
PXA2xxKeyPadState *pxa27x_keypad_init(MemoryRegion *sysmem,
|
||||
hwaddr base,
|
||||
qemu_irq irq);
|
||||
void pxa27x_register_keypad(PXA2xxKeyPadState *kp, struct keymap *map,
|
||||
int size);
|
||||
|
||||
/* pxa2xx.c */
|
||||
typedef struct PXA2xxI2CState PXA2xxI2CState;
|
||||
PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
|
||||
qemu_irq irq, uint32_t page_size);
|
||||
i2c_bus *pxa2xx_i2c_bus(PXA2xxI2CState *s);
|
||||
|
||||
typedef struct PXA2xxI2SState PXA2xxI2SState;
|
||||
typedef struct PXA2xxFIrState PXA2xxFIrState;
|
||||
|
||||
typedef struct {
|
||||
ARMCPU *cpu;
|
||||
DeviceState *pic;
|
||||
qemu_irq reset;
|
||||
MemoryRegion sdram;
|
||||
MemoryRegion internal;
|
||||
MemoryRegion cm_iomem;
|
||||
MemoryRegion mm_iomem;
|
||||
MemoryRegion pm_iomem;
|
||||
DeviceState *dma;
|
||||
DeviceState *gpio;
|
||||
PXA2xxLCDState *lcd;
|
||||
SSIBus **ssp;
|
||||
PXA2xxI2CState *i2c[2];
|
||||
PXA2xxMMCIState *mmc;
|
||||
PXA2xxPCMCIAState *pcmcia[2];
|
||||
PXA2xxI2SState *i2s;
|
||||
PXA2xxFIrState *fir;
|
||||
PXA2xxKeyPadState *kp;
|
||||
|
||||
/* Power management */
|
||||
hwaddr pm_base;
|
||||
uint32_t pm_regs[0x40];
|
||||
|
||||
/* Clock management */
|
||||
hwaddr cm_base;
|
||||
uint32_t cm_regs[4];
|
||||
uint32_t clkcfg;
|
||||
|
||||
/* Memory management */
|
||||
hwaddr mm_base;
|
||||
uint32_t mm_regs[0x1a];
|
||||
|
||||
/* Performance monitoring */
|
||||
uint32_t pmnc;
|
||||
} PXA2xxState;
|
||||
|
||||
struct PXA2xxI2SState {
|
||||
MemoryRegion iomem;
|
||||
qemu_irq irq;
|
||||
qemu_irq rx_dma;
|
||||
qemu_irq tx_dma;
|
||||
void (*data_req)(void *, int, int);
|
||||
|
||||
uint32_t control[2];
|
||||
uint32_t status;
|
||||
uint32_t mask;
|
||||
uint32_t clk;
|
||||
|
||||
int enable;
|
||||
int rx_len;
|
||||
int tx_len;
|
||||
void (*codec_out)(void *, uint32_t);
|
||||
uint32_t (*codec_in)(void *);
|
||||
void *opaque;
|
||||
|
||||
int fifo_len;
|
||||
uint32_t fifo[16];
|
||||
};
|
||||
|
||||
# define PA_FMT "0x%08lx"
|
||||
# define REG_FMT "0x" TARGET_FMT_plx
|
||||
|
||||
PXA2xxState *pxa270_init(MemoryRegion *address_space, unsigned int sdram_size,
|
||||
const char *revision);
|
||||
PXA2xxState *pxa255_init(MemoryRegion *address_space, unsigned int sdram_size);
|
||||
|
||||
#endif /* PXA_H */
|
17
include/hw/arm/sharpsl.h
Normal file
17
include/hw/arm/sharpsl.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Common declarations for the Zaurii.
|
||||
*
|
||||
* This file is licensed under the GNU GPL.
|
||||
*/
|
||||
#ifndef QEMU_SHARPSL_H
|
||||
#define QEMU_SHARPSL_H
|
||||
|
||||
#define zaurus_printf(format, ...) \
|
||||
fprintf(stderr, "%s: " format, __FUNCTION__, ##__VA_ARGS__)
|
||||
|
||||
/* zaurus.c */
|
||||
|
||||
#define SL_PXA_PARAM_BASE 0xa0000a00
|
||||
void sl_bootparam_write(hwaddr ptr);
|
||||
|
||||
#endif
|
116
include/hw/arm/soc_dma.h
Normal file
116
include/hw/arm/soc_dma.h
Normal file
|
@ -0,0 +1,116 @@
|
|||
/*
|
||||
* On-chip DMA controller framework.
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation
|
||||
* Written by Andrzej Zaborowski <andrew@openedhand.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 or
|
||||
* (at your option) version 3 of the License.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef HW_SOC_DMA_H
|
||||
#define HW_SOC_DMA_H 1
|
||||
|
||||
|
||||
#include "exec/memory.h"
|
||||
#include "hw/irq.h"
|
||||
|
||||
struct soc_dma_s;
|
||||
struct soc_dma_ch_s;
|
||||
typedef void (*soc_dma_io_t)(void *opaque, uint8_t *buf, int len);
|
||||
typedef void (*soc_dma_transfer_t)(struct soc_dma_ch_s *ch);
|
||||
|
||||
enum soc_dma_port_type {
|
||||
soc_dma_port_mem,
|
||||
soc_dma_port_fifo,
|
||||
soc_dma_port_other,
|
||||
};
|
||||
|
||||
enum soc_dma_access_type {
|
||||
soc_dma_access_const,
|
||||
soc_dma_access_linear,
|
||||
soc_dma_access_other,
|
||||
};
|
||||
|
||||
struct soc_dma_ch_s {
|
||||
/* Private */
|
||||
struct soc_dma_s *dma;
|
||||
int num;
|
||||
QEMUTimer *timer;
|
||||
|
||||
/* Set by soc_dma.c */
|
||||
int enable;
|
||||
int update;
|
||||
|
||||
/* This should be set by dma->setup_fn(). */
|
||||
int bytes;
|
||||
/* Initialised by the DMA module, call soc_dma_ch_update after writing. */
|
||||
enum soc_dma_access_type type[2];
|
||||
hwaddr vaddr[2]; /* Updated by .transfer_fn(). */
|
||||
/* Private */
|
||||
void *paddr[2];
|
||||
soc_dma_io_t io_fn[2];
|
||||
void *io_opaque[2];
|
||||
|
||||
int running;
|
||||
soc_dma_transfer_t transfer_fn;
|
||||
|
||||
/* Set and used by the DMA module. */
|
||||
void *opaque;
|
||||
};
|
||||
|
||||
struct soc_dma_s {
|
||||
/* Following fields are set by the SoC DMA module and can be used
|
||||
* by anybody. */
|
||||
uint64_t drqbmp; /* Is zeroed by soc_dma_reset() */
|
||||
qemu_irq *drq;
|
||||
void *opaque;
|
||||
int64_t freq;
|
||||
soc_dma_transfer_t transfer_fn;
|
||||
soc_dma_transfer_t setup_fn;
|
||||
/* Set by soc_dma_init() for use by the DMA module. */
|
||||
struct soc_dma_ch_s *ch;
|
||||
};
|
||||
|
||||
/* Call to activate or stop a DMA channel. */
|
||||
void soc_dma_set_request(struct soc_dma_ch_s *ch, int level);
|
||||
/* Call after every write to one of the following fields and before
|
||||
* calling soc_dma_set_request(ch, 1):
|
||||
* ch->type[0...1],
|
||||
* ch->vaddr[0...1],
|
||||
* ch->paddr[0...1],
|
||||
* or after a soc_dma_port_add_fifo() or soc_dma_port_add_mem(). */
|
||||
void soc_dma_ch_update(struct soc_dma_ch_s *ch);
|
||||
|
||||
/* The SoC should call this when the DMA module is being reset. */
|
||||
void soc_dma_reset(struct soc_dma_s *s);
|
||||
struct soc_dma_s *soc_dma_init(int n);
|
||||
|
||||
void soc_dma_port_add_fifo(struct soc_dma_s *dma, hwaddr virt_base,
|
||||
soc_dma_io_t fn, void *opaque, int out);
|
||||
void soc_dma_port_add_mem(struct soc_dma_s *dma, uint8_t *phys_base,
|
||||
hwaddr virt_base, size_t size);
|
||||
|
||||
static inline void soc_dma_port_add_fifo_in(struct soc_dma_s *dma,
|
||||
hwaddr virt_base, soc_dma_io_t fn, void *opaque)
|
||||
{
|
||||
return soc_dma_port_add_fifo(dma, virt_base, fn, opaque, 0);
|
||||
}
|
||||
|
||||
static inline void soc_dma_port_add_fifo_out(struct soc_dma_s *dma,
|
||||
hwaddr virt_base, soc_dma_io_t fn, void *opaque)
|
||||
{
|
||||
return soc_dma_port_add_fifo(dma, virt_base, fn, opaque, 1);
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue