diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index d3a92fbabf..c6148d380e 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -42,12 +42,12 @@ #define PVSCSI_MAX_CMD_DATA_WORDS \ (sizeof(PVSCSICmdDescSetupRings)/sizeof(uint32_t)) -#define RS_GET_FIELD(rs_pa, field) \ - (ldl_le_phys(&address_space_memory, \ - rs_pa + offsetof(struct PVSCSIRingsState, field))) -#define RS_SET_FIELD(rs_pa, field, val) \ - (stl_le_phys(&address_space_memory, \ - rs_pa + offsetof(struct PVSCSIRingsState, field), val)) +#define RS_GET_FIELD(m, field) \ + (ldl_le_pci_dma(&container_of(m, PVSCSIState, rings)->parent_obj, \ + (m)->rs_pa + offsetof(struct PVSCSIRingsState, field))) +#define RS_SET_FIELD(m, field, val) \ + (stl_le_pci_dma(&container_of(m, PVSCSIState, rings)->parent_obj, \ + (m)->rs_pa + offsetof(struct PVSCSIRingsState, field), val)) #define TYPE_PVSCSI "pvscsi" #define PVSCSI(obj) OBJECT_CHECK(PVSCSIState, (obj), TYPE_PVSCSI) @@ -153,13 +153,13 @@ pvscsi_ring_init_data(PVSCSIRingInfo *m, PVSCSICmdDescSetupRings *ri) m->cmp_ring_pages_pa[i] = ri->cmpRingPPNs[i] << VMW_PAGE_SHIFT; } - RS_SET_FIELD(m->rs_pa, reqProdIdx, 0); - RS_SET_FIELD(m->rs_pa, reqConsIdx, 0); - RS_SET_FIELD(m->rs_pa, reqNumEntriesLog2, txr_len_log2); + RS_SET_FIELD(m, reqProdIdx, 0); + RS_SET_FIELD(m, reqConsIdx, 0); + RS_SET_FIELD(m, reqNumEntriesLog2, txr_len_log2); - RS_SET_FIELD(m->rs_pa, cmpProdIdx, 0); - RS_SET_FIELD(m->rs_pa, cmpConsIdx, 0); - RS_SET_FIELD(m->rs_pa, cmpNumEntriesLog2, rxr_len_log2); + RS_SET_FIELD(m, cmpProdIdx, 0); + RS_SET_FIELD(m, cmpConsIdx, 0); + RS_SET_FIELD(m, cmpNumEntriesLog2, rxr_len_log2); trace_pvscsi_ring_init_data(txr_len_log2, rxr_len_log2); @@ -185,9 +185,9 @@ pvscsi_ring_init_msg(PVSCSIRingInfo *m, PVSCSICmdDescSetupMsgRing *ri) m->msg_ring_pages_pa[i] = ri->ringPPNs[i] << VMW_PAGE_SHIFT; } - RS_SET_FIELD(m->rs_pa, msgProdIdx, 0); - RS_SET_FIELD(m->rs_pa, msgConsIdx, 0); - RS_SET_FIELD(m->rs_pa, msgNumEntriesLog2, len_log2); + RS_SET_FIELD(m, msgProdIdx, 0); + RS_SET_FIELD(m, msgConsIdx, 0); + RS_SET_FIELD(m, msgNumEntriesLog2, len_log2); trace_pvscsi_ring_init_msg(len_log2); @@ -213,7 +213,7 @@ pvscsi_ring_cleanup(PVSCSIRingInfo *mgr) static hwaddr pvscsi_ring_pop_req_descr(PVSCSIRingInfo *mgr) { - uint32_t ready_ptr = RS_GET_FIELD(mgr->rs_pa, reqProdIdx); + uint32_t ready_ptr = RS_GET_FIELD(mgr, reqProdIdx); if (ready_ptr != mgr->consumed_ptr) { uint32_t next_ready_ptr = @@ -233,7 +233,7 @@ pvscsi_ring_pop_req_descr(PVSCSIRingInfo *mgr) static void pvscsi_ring_flush_req(PVSCSIRingInfo *mgr) { - RS_SET_FIELD(mgr->rs_pa, reqConsIdx, mgr->consumed_ptr); + RS_SET_FIELD(mgr, reqConsIdx, mgr->consumed_ptr); } static hwaddr @@ -278,14 +278,14 @@ pvscsi_ring_flush_cmp(PVSCSIRingInfo *mgr) trace_pvscsi_ring_flush_cmp(mgr->filled_cmp_ptr); - RS_SET_FIELD(mgr->rs_pa, cmpProdIdx, mgr->filled_cmp_ptr); + RS_SET_FIELD(mgr, cmpProdIdx, mgr->filled_cmp_ptr); } static bool pvscsi_ring_msg_has_room(PVSCSIRingInfo *mgr) { - uint32_t prodIdx = RS_GET_FIELD(mgr->rs_pa, msgProdIdx); - uint32_t consIdx = RS_GET_FIELD(mgr->rs_pa, msgConsIdx); + uint32_t prodIdx = RS_GET_FIELD(mgr, msgProdIdx); + uint32_t consIdx = RS_GET_FIELD(mgr, msgConsIdx); return (prodIdx - consIdx) < (mgr->msg_len_mask + 1); } @@ -298,7 +298,7 @@ pvscsi_ring_flush_msg(PVSCSIRingInfo *mgr) trace_pvscsi_ring_flush_msg(mgr->filled_msg_ptr); - RS_SET_FIELD(mgr->rs_pa, msgProdIdx, mgr->filled_msg_ptr); + RS_SET_FIELD(mgr, msgProdIdx, mgr->filled_msg_ptr); } static void