Changeset 80168 in vbox for trunk/src/VBox/Devices/Storage
- Timestamp:
- Aug 7, 2019 12:48:58 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 132609
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r80149 r80168 60 60 #define VIRTIOSCSI_REGION_PCI_CAP 2 61 61 62 /**63 * Definitions that follow are based on the VirtIO 1.0 specification.64 * Struct names are the same. The field names have been adapted to VirtualBox65 * data type + camel case annotation, with the original field name from the66 * VirtIO specification in the field's comment.67 */68 69 62 #define MATCH_SCSI_CONFIG(member) \ 70 63 ((int)uOffset >= RT_OFFSETOF(VIRTIO_SCSI_CONFIG_T, member) \ … … 75 68 76 69 #define LOG_ACCESSOR(member) \ 77 LogFunc(("Guest %s %s [%d:%d]: %.*Rhxs\n", \ 78 fWrite ? "wrote" : "read ", #member, mOffset, mOffset + cb, cb, pv)); 70 virtioLogMappedIoValue(__FUNCTION__, #member, pv, cb, uMemberOffset, fWrite, false, 0); 79 71 80 72 #define SCSI_CONFIG_ACCESSOR(member) \ 81 73 { \ 82 uint32_t mOffset = uOffset - RT_OFFSETOF(VIRTIO_SCSI_CONFIG_T, member); \74 uint32_t uMemberOffset = uOffset - RT_OFFSETOF(VIRTIO_SCSI_CONFIG_T, member); \ 83 75 if (fWrite) \ 84 memcpy(((char *)&pThis->virtioScsiConfig.member) + u Offset, (const char *)pv, cb); \76 memcpy(((char *)&pThis->virtioScsiConfig.member) + uMemberOffset, (const char *)pv, cb); \ 85 77 else \ 86 memcpy((char *)pv, (const char *)(((char *)&pThis->virtioScsiConfig.member) + u Offset), cb); \78 memcpy((char *)pv, (const char *)(((char *)&pThis->virtioScsiConfig.member) + uMemberOffset), cb); \ 87 79 LOG_ACCESSOR(member); \ 88 80 } … … 90 82 #define SCSI_CONFIG_ACCESSOR_READONLY(member) \ 91 83 { \ 92 uint32_t mOffset = uOffset - RT_OFFSETOF(VIRTIO_SCSI_CONFIG_T, member); \84 uint32_t uMemberOffset = uOffset - RT_OFFSETOF(VIRTIO_SCSI_CONFIG_T, member); \ 93 85 if (fWrite) \ 94 86 LogFunc(("Guest attempted to write readonly virtio_pci_common_cfg.%s\n", #member)); \ 95 87 else \ 96 88 { \ 97 memcpy((char *)pv, (const char *)(((char *)&pThis->virtioScsiConfig.member) + u Offset), cb); \89 memcpy((char *)pv, (const char *)(((char *)&pThis->virtioScsiConfig.member) + uMemberOffset), cb); \ 98 90 LOG_ACCESSOR(member); \ 99 91 } \ 100 92 } 101 93 94 /** 95 * Definitions that follow are based on the VirtIO 1.0 specification. 96 * Struct names are the same. The field names have been adapted to VirtualBox 97 * data type + camel case annotation, with the original field name from the 98 * VirtIO specification in the field's comment. 99 */ 102 100 103 101 /** @name VirtIO 1.0 SCSI Host feature bits … … 112 110 * Features VirtIO 1.0 Host SCSI controller offers guest driver 113 111 */ 114 #define VIRTIOSCSI_HOST_SCSI_FEATURES_OFFERED VIRTIOSCSI_F_INOUT \ 115 | VIRTIOSCSI_F_HOTPLUG \ 116 | VIRTIOSCSI_F_CHANGE \ 117 | VIRTIOSCSI_F_T10_PI \ 112 #define VIRTIOSCSI_HOST_SCSI_FEATURES_OFFERED \ 113 (VIRTIOSCSI_F_INOUT | VIRTIOSCSI_F_HOTPLUG | VIRTIOSCSI_F_CHANGE | VIRTIOSCSI_F_T10_PI) 118 114 119 115 typedef struct virtio_scsi_config … … 167 163 } VIRTIO_SCSI_REQ_CMD_T, *PVIRTIO_SCSI_REQ_CMD_T; 168 164 169 /** Command-specific response values */ 165 /** @name VirtIO 1.0 SCSI req command-specific response values 166 * @{ */ 170 167 #define VIRTIOSCSI_S_OK 0 /* control, command */ 171 168 #define VIRTIOSCSI_S_OVERRUN 1 /* control */ … … 179 176 #define VIRTIOSCSI_S_FAILURE 9 /* control, command */ 180 177 #define VIRTIOSCSI_S_INCORRECT_LUN 12 /* command */ 181 182 183 /** task_attr */ 178 /** @} */ 179 180 181 /** @name VirtIO 1.0 SCSI Command-specific task_attr values 182 * @{ */ 184 183 #define VIRTIOSCSI_S_SIMPLE 0 185 184 #define VIRTIOSCSI_S_ORDERED 1 186 185 #define VIRTIOSCSI_S_HEAD 2 187 186 #define VIRTIOSCSI_S_ACA 3 187 /** @} */ 188 188 189 189 #define VIRTIOSCSI_T_TMF 0 … … 208 208 } VIRTIO_SCSI_CTRL_BUF_T, *PVIRTIO_SCSI_CTRL_BUF_T; 209 209 210 /* command-specific response values */211 210 /** @name VirtIO 1.0 SCSI tmf control command-specific response values 211 * @{ */ 212 212 #define VIRTIOSCSI_S_FUNCTION_COMPLETE 0 213 213 #define VIRTIOSCSI_S_FUNCTION_SUCCEEDED 10 214 214 #define VIRTIOSCSI_S_FUNCTION_REJECTED 11 215 /** @} */ 215 216 216 217 #define VIRTIOSCSI_T_AN_QUERY 1 /** Asynchronous notification query */ … … 242 243 uint8_t response; /** response */ 243 244 } VIRTIO_SCSI_CTRL_T, *PVIRTIO_SCSI_CTRL_T; 245 244 246 245 247 #define VIRTIOSCSI_T_NO_EVENT 0 … … 758 760 } 759 761 760 static int virtioScsiR3C onfigAccess(PVIRTIOSCSI pThis, uint32_t uOffset,762 static int virtioScsiR3CfgAccessed(PVIRTIOSCSI pThis, uint32_t uOffset, 761 763 const void *pv, size_t cb, uint8_t fWrite) 762 764 { … … 825 827 * @param pDevIns The device instance. 826 828 * @param uOffset Offset within device specific capabilities struct 827 * @param pv Buffer in which to save read data829 * @param pv Buffer in which to save read data 828 830 * @param cb Number of bytes to read 829 831 */ … … 836 838 // uOffset, cb)); 837 839 838 rc = virtioScsiR3C onfigAccess(pThis, uOffset, pv, cb, false);840 rc = virtioScsiR3CfgAccessed(pThis, uOffset, pv, cb, false); 839 841 840 842 return rc; … … 847 849 * @param pDevIns The device instance. 848 850 * @param uOffset Offset within device specific capabilities struct 849 * @param pv Buffer in which to save read data851 * @param pv Buffer in which to save read data 850 852 * @param cb Number of bytes to write 851 853 */ … … 858 860 // uOffset, cb)); 859 861 860 rc = virtioScsiR3C onfigAccess(pThis, uOffset, pv, cb, true);862 rc = virtioScsiR3CfgAccessed(pThis, uOffset, pv, cb, true); 861 863 862 864 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.