本文整理汇总了C++中cpu_physical_memory_read函数的典型用法代码示例。如果您正苦于以下问题:C++ cpu_physical_memory_read函数的具体用法?C++ cpu_physical_memory_read怎么用?C++ cpu_physical_memory_read使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cpu_physical_memory_read函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: pxa2xx_dma_descriptor_fetch
static inline void pxa2xx_dma_descriptor_fetch(
PXA2xxDMAState *s, int ch)
{
uint32_t desc[4];
hwaddr daddr = s->chan[ch].descr & ~0xf;
if ((s->chan[ch].descr & DDADR_BREN) && (s->chan[ch].state & DCSR_CMPST))
daddr += 32;
cpu_physical_memory_read(daddr, desc, 16);
s->chan[ch].descr = desc[DDADR];
s->chan[ch].src = desc[DSADR];
s->chan[ch].dest = desc[DTADR];
s->chan[ch].cmd = desc[DCMD];
if (s->chan[ch].cmd & DCMD_FLOWSRC)
s->chan[ch].src &= ~3;
if (s->chan[ch].cmd & DCMD_FLOWTRG)
s->chan[ch].dest &= ~3;
if (s->chan[ch].cmd & (DCMD_CMPEN | DCMD_FLYBYS | DCMD_FLYBYT))
printf("%s: unsupported mode in channel %i\n", __FUNCTION__, ch);
if (s->chan[ch].cmd & DCMD_STARTIRQEN)
s->chan[ch].state |= DCSR_STARTINTR;
}
开发者ID:01org,项目名称:qemu-lite,代码行数:25,代码来源:pxa2xx_dma.c
示例2: pxa2xx_descriptor_load
/* Load new Frame Descriptors from DMA */
static void pxa2xx_descriptor_load(PXA2xxLCDState *s)
{
PXAFrameDescriptor desc;
hwaddr descptr;
int i;
for (i = 0; i < PXA_LCDDMA_CHANS; i ++) {
s->dma_ch[i].source = 0;
if (!s->dma_ch[i].up)
continue;
if (s->dma_ch[i].branch & FBR_BRA) {
descptr = s->dma_ch[i].branch & FBR_SRCADDR;
if (s->dma_ch[i].branch & FBR_BINT)
pxa2xx_dma_bs_set(s, i);
s->dma_ch[i].branch &= ~FBR_BRA;
} else
descptr = s->dma_ch[i].descriptor;
if (!((descptr >= PXA2XX_SDRAM_BASE && descptr +
sizeof(desc) <= PXA2XX_SDRAM_BASE + ram_size) ||
(descptr >= PXA2XX_INTERNAL_BASE && descptr + sizeof(desc) <=
PXA2XX_INTERNAL_BASE + PXA2XX_INTERNAL_SIZE))) {
continue;
}
cpu_physical_memory_read(descptr, &desc, sizeof(desc));
s->dma_ch[i].descriptor = le32_to_cpu(desc.fdaddr);
s->dma_ch[i].source = le32_to_cpu(desc.fsaddr);
s->dma_ch[i].id = le32_to_cpu(desc.fidr);
s->dma_ch[i].command = le32_to_cpu(desc.ldcmd);
}
}
开发者ID:01org,项目名称:qemu-lite,代码行数:35,代码来源:pxa2xx_lcd.c
示例3: pxa2xx_descriptor_load
/* Load new Frame Descriptors from DMA */
static void pxa2xx_descriptor_load(PXA2xxLCDState *s)
{
PXAFrameDescriptor desc;
target_phys_addr_t descptr;
int i;
for (i = 0; i < PXA_LCDDMA_CHANS; i ++) {
s->dma_ch[i].source = 0;
if (!s->dma_ch[i].up)
continue;
if (s->dma_ch[i].branch & FBR_BRA) {
descptr = s->dma_ch[i].branch & FBR_SRCADDR;
if (s->dma_ch[i].branch & FBR_BINT)
pxa2xx_dma_bs_set(s, i);
s->dma_ch[i].branch &= ~FBR_BRA;
} else
descptr = s->dma_ch[i].descriptor;
if (!(descptr >= PXA2XX_SDRAM_BASE && descptr +
sizeof(desc) <= PXA2XX_SDRAM_BASE + ram_size))
continue;
cpu_physical_memory_read(descptr, (void *)&desc, sizeof(desc));
s->dma_ch[i].descriptor = tswap32(desc.fdaddr);
s->dma_ch[i].source = tswap32(desc.fsaddr);
s->dma_ch[i].id = tswap32(desc.fidr);
s->dma_ch[i].command = tswap32(desc.ldcmd);
}
}
开发者ID:MatzeB,项目名称:qemu-fixes,代码行数:32,代码来源:pxa2xx_lcd.c
示例4: memfrs_scan_phymem
/*******************************************************************
UT_array* memfrs_scan_phymem( uint64_t start_addr, uint64_t end_addr, const char* pattern )
Scan for specific pattern in the VM's physical memory
INPUT: uint64_t start_addr, The start address
uint64_t end_addr, the end address
const char* pattern pattern to search, support only ascii string
OUTPUT: UT_array*, An UT_array that contains the address of found pattern
*******************************************************************/
UT_array* memfrs_scan_phymem( uint64_t start_addr, uint64_t end_addr, const char* pattern , int length ) {
uint64_t i;
UT_array *match_addr;
if(start_addr >= end_addr) {
printf("end_addr is not less than start_addr\n");
return NULL;
}
uint8_t* buf = (uint8_t*)malloc(length);
if(buf == NULL) {
printf("Cannot allocate memory for memfrs_scan_phymem()\n");
return NULL;
}
utarray_new( match_addr, &adr_icd);
printf("Scan for pattern %s\n", pattern);
for(i = start_addr; i < end_addr-length+1; i++)
{
cpu_physical_memory_read(i, buf, length);
if(memcmp(buf, pattern, length)==0)
{
printf("pattern found %lx\n", i);
utarray_push_back(match_addr, &i);
}
}
return match_addr;
}
开发者ID:misterlihao,项目名称:MBA,代码行数:39,代码来源:memfrs.c
示例5: mmc_fifo_pop
static uint32_t mmc_fifo_pop(S5pc1xxMMCState *s, uint32_t pos)
{
uint32_t value = 0;
cpu_physical_memory_read(s->sysad + pos, (uint8_t *)(&value), 4);
return value;
}
开发者ID:vonnyfly,项目名称:qemu-s5pc110,代码行数:7,代码来源:s5pc1xx_mmc.c
示例6: channel_load_g
static void channel_load_g(struct fs_dma_ctrl *ctrl, int c)
{
target_phys_addr_t addr = channel_reg(ctrl, c, RW_GROUP);
/* Load and decode. FIXME: handle endianness. */
cpu_physical_memory_read (addr,
(void *) &ctrl->channels[c].current_g,
sizeof ctrl->channels[c].current_g);
}
开发者ID:tumf,项目名称:xen-3.3.1,代码行数:9,代码来源:etraxfs_dma.c
示例7: channel_load_d
static void channel_load_d(struct fs_dma_ctrl *ctrl, int c)
{
hwaddr addr = channel_reg(ctrl, c, RW_SAVED_DATA);
/* Load and decode. FIXME: handle endianness. */
D(printf("%s ch=%d addr=" TARGET_FMT_plx "\n", __func__, c, addr));
cpu_physical_memory_read (addr,
(void *) &ctrl->channels[c].current_d,
sizeof ctrl->channels[c].current_d);
D(dump_d(c, &ctrl->channels[c].current_d));
ctrl->channels[c].regs[RW_DATA] = addr;
}
开发者ID:BreakawayConsulting,项目名称:QEMU,代码行数:13,代码来源:etraxfs_dma.c
示例8: get_words
/* Get an array of words from main memory */
static inline int get_words(OHCIState *ohci,
uint32_t addr, uint16_t *buf, int num)
{
int i;
addr += ohci->localmem_base;
for (i = 0; i < num; i++, buf++, addr += sizeof(*buf)) {
cpu_physical_memory_read(addr, buf, sizeof(*buf));
*buf = le16_to_cpu(*buf);
}
return 1;
}
开发者ID:MegabytePhreak,项目名称:qemu-mcf5307,代码行数:15,代码来源:usb-ohci.c
示例9: pdc_start_transfer
static int pdc_start_transfer(void *opaque,
target_phys_addr_t tx,
unsigned int *tx_len,
target_phys_addr_t rx,
unsigned int *rx_len,
int last_transfer)
{
SPIState *s = opaque;
unsigned int i;
unsigned int tlen;
DPRINTF("pdc: start transfer, last trans %d\n", last_transfer);
#if 1
if (tx_len == NULL) {
DPRINTF("ignore only read request\n");
return -1;
}
#endif
tlen = *tx_len;
if (rx_len != NULL) {
tlen = *rx_len > tlen ? *rx_len : tlen;
}
/* suppose that transfer 8 bit,
TODO: fix this, extract right value from csr
*/
s->spi_control->set_chipselect(s->spi_control->opaque, 1);
for (i = 0; i < tlen; ++i) {
DPRINTF("pdc: transfering\n");
uint8_t tmp = 0;
if (tx_len != NULL && *tx_len > 0) {
cpu_physical_memory_read(tx, &tmp, 1);
++tx;
--*tx_len;
}
tmp = s->spi_control->txrx_callback(s->spi_control->opaque, tmp, 8);
s->rdr = tmp;
if (rx_len != NULL && *rx_len > 0) {
cpu_physical_memory_write(rx, &tmp, 1);
++rx;
--*rx_len;
}
}
if (last_transfer) {
s->spi_control->set_chipselect(s->spi_control->opaque, 0);
}
return 0;
}
开发者ID:sun12jun,项目名称:QEMU_porting,代码行数:50,代码来源:at91_spi.c
示例10: channel_load_d
static void channel_load_d(struct fs_dma_ctrl *ctrl, int c)
{
target_phys_addr_t addr = channel_reg(ctrl, c, RW_SAVED_DATA);
/* Load and decode. FIXME: handle endianness. */
D(printf("%s addr=%x\n", __func__, addr));
cpu_physical_memory_read (addr,
(void *) &ctrl->channels[c].current_d,
sizeof ctrl->channels[c].current_d);
D(dump_d(c, &ctrl->channels[c].current_d));
ctrl->channels[c].regs[RW_SAVED_DATA_BUF] =
(uint32_t)ctrl->channels[c].current_d.buf;
}
开发者ID:tumf,项目名称:xen-3.3.1,代码行数:14,代码来源:etraxfs_dma.c
示例11: bcm2708_vc_fb
static void bcm2708_vc_fb(struct bcm2708_vc *_vc,
int _chan, uint32_t _msg)
{
target_phys_addr_t dma = _msg &~ (0xc << 28);
cpu_physical_memory_read(dma, &_vc->fb, sizeof(_vc->fb));
// TODO: much better calculations.
int pitch;
switch(_vc->fb.bpp)
{
case 8:
pitch = _vc->fb.xres;
_vc->fb_bpp = BPP_8;
break;
case 16:
pitch = _vc->fb.xres << 1;
_vc->fb_bpp = BPP_16_565;
break;
case 32:
pitch = _vc->fb.xres << 2;
_vc->fb_bpp = BPP_32;
break;
default:
pitch = _vc->fb.xres << 1;
_vc->fb_bpp = BPP_16_565;
break;
}
target_phys_addr_t fbsz = pitch*_vc->fb.yres;
target_phys_addr_t addr = 128*1024*1024; // Currently hard-coded in kernel?
_vc->fb_invalidate = 1;
_vc->fb.pitch = pitch;
_vc->fb.base = addr;
_vc->fb.screen_size = fbsz;
qemu_console_resize(_vc->disp, _vc->fb.xres, _vc->fb.yres);
#ifdef DEBUG_FB
printf("fb mapped to 0x%08x (%p).\n", addr, _vc->disp);
#endif
cpu_physical_memory_write(dma, &_vc->fb, sizeof(_vc->fb));
bcm2708_vc_send(_vc, _chan, 0);
}
开发者ID:ricky26,项目名称:QEMU,代码行数:49,代码来源:bcm2708_vc.c
示例12: kvm_ia64_copy_from_GFW_to_nvram
int
kvm_ia64_copy_from_GFW_to_nvram()
{
struct nvram_save_addr nvram_addr_buf;
uint8_t *nvram_buf;
unsigned long nvram_fd;
unsigned long type = WRITE_TO_NVRAM;
int ret = -1;
nvram_buf = malloc(NVRAM_SIZE);
if (!nvram_buf)
goto out_free;
cpu_physical_memory_read(NVRAM_START, (uint8_t *)&nvram_addr_buf,
sizeof(struct nvram_save_addr));
if (nvram_addr_buf.signature != NVRAM_VALID_SIG) {
goto out_free;
}
cpu_physical_memory_read(nvram_addr_buf.addr, nvram_buf, NVRAM_SIZE);
nvram_fd = kvm_ia64_nvram_init(type);
if (nvram_fd == -1)
goto out;
lseek(nvram_fd, 0, SEEK_SET);
if (write(nvram_fd, nvram_buf, NVRAM_SIZE) != NVRAM_SIZE)
goto out;
ret = 0;
out:
close(nvram_fd);
out_free:
free(nvram_buf);
return ret;
}
开发者ID:AmesianX,项目名称:qemu-kvm,代码行数:36,代码来源:firmware.c
示例13: apic_sync_vapic
static void apic_sync_vapic(APICCommonState *s, int sync_type)
{
VAPICState vapic_state;
//size_t length;
//off_t start;
int vector;
if (!s->vapic_paddr) {
return;
}
if (sync_type & SYNC_FROM_VAPIC) {
cpu_physical_memory_read(NULL, s->vapic_paddr, &vapic_state,
sizeof(vapic_state));
s->tpr = vapic_state.tpr;
}
if (sync_type & (SYNC_TO_VAPIC | SYNC_ISR_IRR_TO_VAPIC)) {
//start = offsetof(VAPICState, isr);
//length = offsetof(VAPICState, enabled) - offsetof(VAPICState, isr);
if (sync_type & SYNC_TO_VAPIC) {
assert(qemu_cpu_is_self(CPU(s->cpu)));
vapic_state.tpr = s->tpr;
vapic_state.enabled = 1;
//start = 0;
//length = sizeof(VAPICState);
}
vector = get_highest_priority_int(s->isr);
if (vector < 0) {
vector = 0;
}
vapic_state.isr = vector & 0xf0;
vapic_state.zero = 0;
vector = get_highest_priority_int(s->irr);
if (vector < 0) {
vector = 0;
}
vapic_state.irr = vector & 0xff;
//cpu_physical_memory_write_rom(&address_space_memory,
// s->vapic_paddr + start,
// ((void *)&vapic_state) + start, length);
// FIXME qq
}
}
开发者ID:Atch0um,项目名称:unicorn,代码行数:48,代码来源:apic.c
示例14: channel_load_c
static void channel_load_c(struct fs_dma_ctrl *ctrl, int c)
{
target_phys_addr_t addr = channel_reg(ctrl, c, RW_GROUP_DOWN);
/* Load and decode. FIXME: handle endianness. */
cpu_physical_memory_read (addr,
(void *) &ctrl->channels[c].current_c,
sizeof ctrl->channels[c].current_c);
D(dump_c(c, &ctrl->channels[c].current_c));
/* I guess this should update the current pos. */
ctrl->channels[c].regs[RW_SAVED_DATA] =
(uint32_t)ctrl->channels[c].current_c.saved_data;
ctrl->channels[c].regs[RW_SAVED_DATA_BUF] =
(uint32_t)ctrl->channels[c].current_c.saved_data_buf;
}
开发者ID:tumf,项目名称:xen-3.3.1,代码行数:16,代码来源:etraxfs_dma.c
示例15: goldfish_mmc_bdrv_write
static int goldfish_mmc_bdrv_write(struct goldfish_mmc_state *s,
int64_t sector_number,
target_phys_addr_t dst_address,
int num_sectors)
{
int ret;
while (num_sectors > 0) {
cpu_physical_memory_read(dst_address, s->buf, 512);
ret = bdrv_write(s->bs, sector_number, s->buf, 1);
if (ret < 0)
return ret;
dst_address += 512;
num_sectors -= 1;
sector_number += 1;
}
return 0;
}
开发者ID:qtekfun,项目名称:htcDesire820Kernel,代码行数:20,代码来源:goldfish_mmc.c
示例16: do_show_memory_taint_map
void do_show_memory_taint_map(struct Monitor *mon, const struct QDict *qdict)
{
uint64_t target_addr = qdict_get_int(qdict, "addr");
uint64_t target_length = qdict_get_int(qdict, "len");
int i;
uint8_t* buf = (uint8_t*)malloc(target_length);
cpu_physical_memory_read(target_addr, buf, target_length);
if(buf == NULL){
monitor_printf(mon, "Cannot allocate memory for do_show_memory_taint_map()\n");
return;
}
monitor_printf(mon, "Taint addr %"PRIx64" length %ld\n", target_addr, target_length);
for(i = 0 ; i < target_length ; i++) {
monitor_printf( mon, "%02x|%02x, ",
buf[i], dift_get_memory_dirty(target_addr + i));
if((i & 0xf) == 0xf)
monitor_printf(mon, "\n");
}
}
开发者ID:misterlihao,项目名称:MBA,代码行数:21,代码来源:dift-commands.c
示例17: goldfish_mmc_bdrv_write
static int goldfish_mmc_bdrv_write(struct goldfish_mmc_state *s,
int64_t sector_number,
hwaddr dst_address,
int num_sectors)
{
int ret;
int printData = matchMeInPidTid(cpu_single_env);
while (num_sectors > 0) {
cpu_physical_memory_read(dst_address, s->buf, 512, printData, "goldfish_mmc_bdrv_write");
ret = bdrv_write(s->bs, sector_number, s->buf, 1);
if (ret < 0)
return ret;
dst_address += 512;
num_sectors -= 1;
sector_number += 1;
}
return 0;
}
开发者ID:pras710,项目名称:qemu,代码行数:21,代码来源:mmc.c
示例18: ac97_out_cb
static void ac97_out_cb(void *opaque, int free_b)
{
MilkymistAC97State *s = opaque;
uint8_t buf[4096];
uint32_t remaining = s->regs[R_D_REMAINING];
int temp = audio_MIN(remaining, free_b);
uint32_t addr = s->regs[R_D_ADDR];
int transferred = 0;
trace_milkymist_ac97_out_cb(free_b, remaining);
/* prevent from raising an IRQ */
if (temp == 0) {
return;
}
while (temp) {
int copied, to_copy;
to_copy = audio_MIN(temp, sizeof(buf));
cpu_physical_memory_read(addr, buf, to_copy);
copied = AUD_write(s->voice_out, buf, to_copy);
if (!copied) {
break;
}
temp -= copied;
addr += copied;
transferred += copied;
}
trace_milkymist_ac97_out_cb_transferred(transferred);
s->regs[R_D_ADDR] = addr;
s->regs[R_D_REMAINING] -= transferred;
if ((s->regs[R_D_CTRL] & CTRL_EN) && (s->regs[R_D_REMAINING] == 0)) {
trace_milkymist_ac97_pulse_irq_dmar();
qemu_irq_pulse(s->dmar_irq);
}
}
开发者ID:BananaSlug,项目名称:esesc,代码行数:40,代码来源:milkymist-ac97.c
示例19: pxa2xx_dma_run
static void pxa2xx_dma_run(PXA2xxDMAState *s)
{
int c, srcinc, destinc;
uint32_t n, size;
uint32_t width;
uint32_t length;
uint8_t buffer[32];
PXA2xxDMAChannel *ch;
if (s->running ++)
return;
while (s->running) {
s->running = 1;
for (c = 0; c < s->channels; c ++) {
ch = &s->chan[c];
while ((ch->state & DCSR_RUN) && !(ch->state & DCSR_STOPINTR)) {
/* Test for pending requests */
if ((ch->cmd & (DCMD_FLOWSRC | DCMD_FLOWTRG)) && !ch->request)
break;
length = ch->cmd & DCMD_LEN;
size = DCMD_SIZE(ch->cmd);
width = DCMD_WIDTH(ch->cmd);
srcinc = (ch->cmd & DCMD_INCSRCADDR) ? width : 0;
destinc = (ch->cmd & DCMD_INCTRGADDR) ? width : 0;
while (length) {
size = MIN(length, size);
for (n = 0; n < size; n += width) {
cpu_physical_memory_read(ch->src, buffer + n, width);
ch->src += srcinc;
}
for (n = 0; n < size; n += width) {
cpu_physical_memory_write(ch->dest, buffer + n, width);
ch->dest += destinc;
}
length -= size;
if ((ch->cmd & (DCMD_FLOWSRC | DCMD_FLOWTRG)) &&
!ch->request) {
ch->state |= DCSR_EORINT;
if (ch->state & DCSR_EORSTOPEN)
ch->state |= DCSR_STOPINTR;
if ((ch->state & DCSR_EORJMPEN) &&
!(ch->state & DCSR_NODESCFETCH))
pxa2xx_dma_descriptor_fetch(s, c);
break;
}
}
ch->cmd = (ch->cmd & ~DCMD_LEN) | length;
/* Is the transfer complete now? */
if (!length) {
if (ch->cmd & DCMD_ENDIRQEN)
ch->state |= DCSR_ENDINTR;
if ((ch->state & DCSR_NODESCFETCH) ||
(ch->descr & DDADR_STOP) ||
(ch->state & DCSR_EORSTOPEN)) {
ch->state |= DCSR_STOPINTR;
ch->state &= ~DCSR_RUN;
break;
}
ch->state |= DCSR_STOPINTR;
break;
}
}
}
s->running --;
}
}
开发者ID:01org,项目名称:qemu-lite,代码行数:81,代码来源:pxa2xx_dma.c
示例20: pipe_dev_write
static void pipe_dev_write(void *opaque, target_phys_addr_t offset, uint32_t value)
{
PipeDevice *s = (PipeDevice *)opaque;
switch (offset) {
case PIPE_REG_COMMAND:
DR("%s: command=%d (0x%x)", __FUNCTION__, value, value);
pipeDevice_doCommand(s, value);
break;
case PIPE_REG_SIZE:
DR("%s: size=%d (0x%x)", __FUNCTION__, value, value);
s->size = value;
break;
case PIPE_REG_ADDRESS:
DR("%s: address=%d (0x%x)", __FUNCTION__, value, value);
s->address = value;
break;
case PIPE_REG_CHANNEL:
DR("%s: channel=%d (0x%x)", __FUNCTION__, value, value);
s->channel = value;
break;
case PIPE_REG_PARAMS_ADDR_HIGH:
s->params_addr = (s->params_addr & ~(0xFFFFFFFFULL << 32) ) |
((uint64_t)value << 32);
break;
case PIPE_REG_PARAMS_ADDR_LOW:
s->params_addr = (s->params_addr & ~(0xFFFFFFFFULL) ) | value;
break;
case PIPE_REG_ACCESS_PARAMS:
{
struct access_params aps;
uint32_t cmd;
if (s->params_addr == 0)
break;
cpu_physical_memory_read(s->params_addr, (void*)&aps,
sizeof(struct access_params));
s->channel = aps.channel;
s->size = aps.size;
s->address = aps.address;
cmd = aps.cmd;
if ((cmd != PIPE_CMD_READ_BUFFER) && (cmd != PIPE_CMD_WRITE_BUFFER))
break;
pipeDevice_doCommand(s, cmd);
aps.result = s->status;
cpu_physical_memory_write(s->params_addr, (void*)&aps,
sizeof(struct access_params));
}
break;
default:
D("%s: offset=%d (0x%x) value=%d (0x%x)\n", __FUNCTION__, offset,
offset, value, value);
break;
}
}
开发者ID:qtekfun,项目名称:htcDesire820Kernel,代码行数:67,代码来源:goldfish_pipe.c
注:本文中的cpu_physical_memory_read函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论