Lines Matching refs:req

183     ioreq_t *req = xen_vcpu_ioreq(state->shared_page, vcpu);  in cpu_get_ioreq_from_shared_memory()  local
185 if (req->state != STATE_IOREQ_READY) { in cpu_get_ioreq_from_shared_memory()
186 trace_cpu_get_ioreq_from_shared_memory_req_not_ready(req->state, in cpu_get_ioreq_from_shared_memory()
187 req->data_is_ptr, in cpu_get_ioreq_from_shared_memory()
188 req->addr, in cpu_get_ioreq_from_shared_memory()
189 req->data, in cpu_get_ioreq_from_shared_memory()
190 req->count, in cpu_get_ioreq_from_shared_memory()
191 req->size); in cpu_get_ioreq_from_shared_memory()
197 req->state = STATE_IOREQ_INPROCESS; in cpu_get_ioreq_from_shared_memory()
198 return req; in cpu_get_ioreq_from_shared_memory()
280 ioreq_t *req, uint32_t i, void *val, int rw) in rw_phys_req_item() argument
285 hwaddr offset = (hwaddr)req->size * i; in rw_phys_req_item()
286 if (req->df) { in rw_phys_req_item()
291 cpu_physical_memory_rw(addr, val, req->size, rw); in rw_phys_req_item()
295 ioreq_t *req, uint32_t i, void *val) in read_phys_req_item() argument
297 rw_phys_req_item(addr, req, i, val, 0); in read_phys_req_item()
300 ioreq_t *req, uint32_t i, void *val) in write_phys_req_item() argument
302 rw_phys_req_item(addr, req, i, val, 1); in write_phys_req_item()
306 void cpu_ioreq_pio(ioreq_t *req) in cpu_ioreq_pio() argument
310 trace_cpu_ioreq_pio(req, req->dir, req->df, req->data_is_ptr, req->addr, in cpu_ioreq_pio()
311 req->data, req->count, req->size); in cpu_ioreq_pio()
313 if (req->size > sizeof(uint32_t)) { in cpu_ioreq_pio()
314 hw_error("PIO: bad size (%u)", req->size); in cpu_ioreq_pio()
317 if (req->dir == IOREQ_READ) { in cpu_ioreq_pio()
318 if (!req->data_is_ptr) { in cpu_ioreq_pio()
319 req->data = do_inp(req->addr, req->size); in cpu_ioreq_pio()
320 trace_cpu_ioreq_pio_read_reg(req, req->data, req->addr, in cpu_ioreq_pio()
321 req->size); in cpu_ioreq_pio()
325 for (i = 0; i < req->count; i++) { in cpu_ioreq_pio()
326 tmp = do_inp(req->addr, req->size); in cpu_ioreq_pio()
327 write_phys_req_item(req->data, req, i, &tmp); in cpu_ioreq_pio()
330 } else if (req->dir == IOREQ_WRITE) { in cpu_ioreq_pio()
331 if (!req->data_is_ptr) { in cpu_ioreq_pio()
332 trace_cpu_ioreq_pio_write_reg(req, req->data, req->addr, in cpu_ioreq_pio()
333 req->size); in cpu_ioreq_pio()
334 do_outp(req->addr, req->size, req->data); in cpu_ioreq_pio()
336 for (i = 0; i < req->count; i++) { in cpu_ioreq_pio()
339 read_phys_req_item(req->data, req, i, &tmp); in cpu_ioreq_pio()
340 do_outp(req->addr, req->size, tmp); in cpu_ioreq_pio()
346 static void cpu_ioreq_move(ioreq_t *req) in cpu_ioreq_move() argument
350 trace_cpu_ioreq_move(req, req->dir, req->df, req->data_is_ptr, req->addr, in cpu_ioreq_move()
351 req->data, req->count, req->size); in cpu_ioreq_move()
353 if (req->size > sizeof(req->data)) { in cpu_ioreq_move()
354 hw_error("MMIO: bad size (%u)", req->size); in cpu_ioreq_move()
357 if (!req->data_is_ptr) { in cpu_ioreq_move()
358 if (req->dir == IOREQ_READ) { in cpu_ioreq_move()
359 for (i = 0; i < req->count; i++) { in cpu_ioreq_move()
360 read_phys_req_item(req->addr, req, i, &req->data); in cpu_ioreq_move()
362 } else if (req->dir == IOREQ_WRITE) { in cpu_ioreq_move()
363 for (i = 0; i < req->count; i++) { in cpu_ioreq_move()
364 write_phys_req_item(req->addr, req, i, &req->data); in cpu_ioreq_move()
370 if (req->dir == IOREQ_READ) { in cpu_ioreq_move()
371 for (i = 0; i < req->count; i++) { in cpu_ioreq_move()
372 read_phys_req_item(req->addr, req, i, &tmp); in cpu_ioreq_move()
373 write_phys_req_item(req->data, req, i, &tmp); in cpu_ioreq_move()
375 } else if (req->dir == IOREQ_WRITE) { in cpu_ioreq_move()
376 for (i = 0; i < req->count; i++) { in cpu_ioreq_move()
377 read_phys_req_item(req->data, req, i, &tmp); in cpu_ioreq_move()
378 write_phys_req_item(req->addr, req, i, &tmp); in cpu_ioreq_move()
384 static void cpu_ioreq_config(XenIOState *state, ioreq_t *req) in cpu_ioreq_config() argument
386 uint32_t sbdf = req->addr >> 32; in cpu_ioreq_config()
387 uint32_t reg = req->addr; in cpu_ioreq_config()
390 if (req->size != sizeof(uint8_t) && req->size != sizeof(uint16_t) && in cpu_ioreq_config()
391 req->size != sizeof(uint32_t)) { in cpu_ioreq_config()
392 hw_error("PCI config access: bad size (%u)", req->size); in cpu_ioreq_config()
395 if (req->count != 1) { in cpu_ioreq_config()
396 hw_error("PCI config access: bad count (%u)", req->count); in cpu_ioreq_config()
404 if (!req->data_is_ptr) { in cpu_ioreq_config()
405 if (req->dir == IOREQ_READ) { in cpu_ioreq_config()
406 req->data = pci_host_config_read_common( in cpu_ioreq_config()
408 req->size); in cpu_ioreq_config()
409 trace_cpu_ioreq_config_read(req, xendev->sbdf, reg, in cpu_ioreq_config()
410 req->size, req->data); in cpu_ioreq_config()
411 } else if (req->dir == IOREQ_WRITE) { in cpu_ioreq_config()
412 trace_cpu_ioreq_config_write(req, xendev->sbdf, reg, in cpu_ioreq_config()
413 req->size, req->data); in cpu_ioreq_config()
416 req->data, req->size); in cpu_ioreq_config()
421 if (req->dir == IOREQ_READ) { in cpu_ioreq_config()
424 req->size); in cpu_ioreq_config()
425 trace_cpu_ioreq_config_read(req, xendev->sbdf, reg, in cpu_ioreq_config()
426 req->size, tmp); in cpu_ioreq_config()
427 write_phys_req_item(req->data, req, 0, &tmp); in cpu_ioreq_config()
428 } else if (req->dir == IOREQ_WRITE) { in cpu_ioreq_config()
429 read_phys_req_item(req->data, req, 0, &tmp); in cpu_ioreq_config()
430 trace_cpu_ioreq_config_write(req, xendev->sbdf, reg, in cpu_ioreq_config()
431 req->size, tmp); in cpu_ioreq_config()
434 tmp, req->size); in cpu_ioreq_config()
440 static void handle_ioreq(XenIOState *state, ioreq_t *req) in handle_ioreq() argument
442 trace_handle_ioreq(req, req->type, req->dir, req->df, req->data_is_ptr, in handle_ioreq()
443 req->addr, req->data, req->count, req->size); in handle_ioreq()
445 if (!req->data_is_ptr && (req->dir == IOREQ_WRITE) && in handle_ioreq()
446 (req->size < sizeof (target_ulong))) { in handle_ioreq()
447 req->data &= ((target_ulong) 1 << (8 * req->size)) - 1; in handle_ioreq()
450 if (req->dir == IOREQ_WRITE) in handle_ioreq()
451 trace_handle_ioreq_write(req, req->type, req->df, req->data_is_ptr, in handle_ioreq()
452 req->addr, req->data, req->count, req->size); in handle_ioreq()
454 switch (req->type) { in handle_ioreq()
456 cpu_ioreq_pio(req); in handle_ioreq()
459 cpu_ioreq_move(req); in handle_ioreq()
467 cpu_ioreq_config(state, req); in handle_ioreq()
470 arch_handle_ioreq(state, req); in handle_ioreq()
472 if (req->dir == IOREQ_READ) { in handle_ioreq()
473 trace_handle_ioreq_read(req, req->type, req->df, req->data_is_ptr, in handle_ioreq()
474 req->addr, req->data, req->count, req->size); in handle_ioreq()
483 ioreq_t req; in handle_buffered_iopage() local
490 memset(&req, 0x00, sizeof(req)); in handle_buffered_iopage()
491 req.state = STATE_IOREQ_READY; in handle_buffered_iopage()
492 req.count = 1; in handle_buffered_iopage()
493 req.dir = IOREQ_WRITE; in handle_buffered_iopage()
508 req.size = 1U << buf_req->size; in handle_buffered_iopage()
509 req.addr = buf_req->addr; in handle_buffered_iopage()
510 req.data = buf_req->data; in handle_buffered_iopage()
511 req.type = buf_req->type; in handle_buffered_iopage()
513 qw = (req.size == 8); in handle_buffered_iopage()
520 req.data |= ((uint64_t)buf_req->data) << 32; in handle_buffered_iopage()
524 handle_ioreq(state, &req); in handle_buffered_iopage()
530 assert(req.state == STATE_IOREQ_READY); in handle_buffered_iopage()
531 assert(req.count == 1); in handle_buffered_iopage()
532 assert(req.dir == IOREQ_WRITE); in handle_buffered_iopage()
533 assert(!req.data_is_ptr); in handle_buffered_iopage()
566 ioreq_t *req = cpu_get_ioreq(state); in cpu_handle_ioreq() local
569 if (req) { in cpu_handle_ioreq()
570 ioreq_t copy = *req; in cpu_handle_ioreq()
574 req->data = copy.data; in cpu_handle_ioreq()
576 if (req->state != STATE_IOREQ_INPROCESS) { in cpu_handle_ioreq()
580 req->state, req->data_is_ptr, req->addr, in cpu_handle_ioreq()
581 req->data, req->count, req->size, req->type); in cpu_handle_ioreq()
607 req->state = STATE_IORESP_READY; in cpu_handle_ioreq()