Changeset 81849 in vbox
- Timestamp:
- Nov 14, 2019 9:16:30 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134643
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevATA.cpp
r81848 r81849 5004 5004 PDMBOTHCBDECL(int) ataIOPortWrite1Data(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 5005 5005 { 5006 uint32_t i = (uint32_t)(uintptr_t)pvUser;5007 5006 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 5008 PATACONTROLLER pCtl = &pThis->aCts[i];5007 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 5009 5008 RT_NOREF1(Port); 5010 5009 5011 Assert( i< 2);5010 Assert((uintptr_t)pvUser < 2); 5012 5011 Assert(Port == pCtl->IOPortBase1); 5013 5012 Assert(cb == 2 || cb == 4); /* Writes to the data port may be 16-bit or 32-bit. */ … … 5074 5073 PDMBOTHCBDECL(int) ataIOPortRead1Data(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 5075 5074 { 5076 uint32_t i = (uint32_t)(uintptr_t)pvUser;5077 5075 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 5078 PATACONTROLLER pCtl = &pThis->aCts[i];5076 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 5079 5077 RT_NOREF1(Port); 5080 5078 5081 Assert( i< 2);5079 Assert((uintptr_t)pvUser < 2); 5082 5080 Assert(Port == pCtl->IOPortBase1); 5083 5081 … … 5162 5160 uint32_t *pcTransfers, unsigned cb) 5163 5161 { 5164 uint32_t i = (uint32_t)(uintptr_t)pvUser;5165 5162 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 5166 PATACONTROLLER pCtl = &pThis->aCts[ i];5163 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 5167 5164 RT_NOREF1(Port); 5168 5165 5169 Assert( i< 2);5166 Assert((uintptr_t)pvUser < 2); 5170 5167 Assert(Port == pCtl->IOPortBase1); 5171 5168 Assert(*pcTransfers > 0); … … 5253 5250 uint32_t *pcTransfers, unsigned cb) 5254 5251 { 5255 uint32_t i = (uint32_t)(uintptr_t)pvUser;5256 5252 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 5257 PATACONTROLLER pCtl = &pThis->aCts[ i];5253 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 5258 5254 RT_NOREF1(Port); 5259 5255 5260 Assert( i< 2);5256 Assert((uintptr_t)pvUser < 2); 5261 5257 Assert(Port == pCtl->IOPortBase1); 5262 5258 Assert(*pcTransfers > 0); … … 6151 6147 PDMBOTHCBDECL(int) ataBMDMAIOPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 6152 6148 { 6153 uint32_t i = (uint32_t)(uintptr_t)pvUser;6154 6149 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6155 PATACONTROLLER pCtl = &pThis->aCts[i];6150 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6156 6151 6157 6152 int rc = PDMCritSectEnter(&pCtl->lock, VINF_IOM_R3_IOPORT_READ); … … 6184 6179 PDMBOTHCBDECL(int) ataBMDMAIOPortWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 6185 6180 { 6186 uint32_t i = (uint32_t)(uintptr_t)pvUser;6187 6181 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6188 PATACONTROLLER pCtl = &pThis->aCts[i];6182 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6189 6183 6190 6184 int rc = PDMCritSectEnter(&pCtl->lock, VINF_IOM_R3_IOPORT_WRITE); … … 6356 6350 PDMBOTHCBDECL(int) ataIOPortWriteEmptyBus(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 6357 6351 { 6358 uint32_t i = (uint32_t)(uintptr_t)pvUser;6359 6352 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6360 PATACONTROLLER pCtl = &pThis->aCts[ i];6353 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6361 6354 #ifndef VBOX_LOG_ENABLED 6362 6355 RT_NOREF(Port); RT_NOREF(cb); RT_NOREF(u32); RT_NOREF(pCtl); 6363 6356 #endif 6364 6357 6365 Assert( i< 2);6358 Assert((uintptr_t)pvUser < 2); 6366 6359 Assert(!pCtl->aIfs[0].pDrvMedia && !pCtl->aIfs[1].pDrvMedia); 6367 6360 … … 6378 6371 PDMBOTHCBDECL(int) ataIOPortReadEmptyBus(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 6379 6372 { 6380 uint32_t i = (uint32_t)(uintptr_t)pvUser;6381 6373 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6382 PATACONTROLLER pCtl = &pThis->aCts[ i];6374 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6383 6375 #ifndef VBOX_LOG_ENABLED 6384 6376 RT_NOREF(Port); RT_NOREF(pCtl); 6385 6377 #endif 6386 6378 6387 Assert( i< 2);6379 Assert((uintptr_t)pvUser < 2); 6388 6380 Assert(cb <= 4); 6389 6381 Assert(!pCtl->aIfs[0].pDrvMedia && !pCtl->aIfs[1].pDrvMedia); … … 6412 6404 PDMBOTHCBDECL(int) ataIOPortWrite1Other(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 6413 6405 { 6414 uint32_t i = (uint32_t)(uintptr_t)pvUser;6415 6406 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6416 PATACONTROLLER pCtl = &pThis->aCts[ i];6417 6418 Assert( i< 2);6407 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6408 6409 Assert((uintptr_t)pvUser < 2); 6419 6410 Assert(Port != pCtl->IOPortBase1); 6420 6411 … … 6443 6434 PDMBOTHCBDECL(int) ataIOPortRead1Other(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 6444 6435 { 6445 uint32_t i = (uint32_t)(uintptr_t)pvUser;6446 6436 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6447 PATACONTROLLER pCtl = &pThis->aCts[ i];6448 6449 Assert( i< 2);6437 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6438 6439 Assert((uintptr_t)pvUser < 2); 6450 6440 Assert(Port != pCtl->IOPortBase1); 6451 6441 … … 6481 6471 PDMBOTHCBDECL(int) ataIOPortWrite2(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 6482 6472 { 6483 uint32_t i = (uint32_t)(uintptr_t)pvUser;6484 6473 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6485 PATACONTROLLER pCtl = &pThis->aCts[ i];6474 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6486 6475 int rc; 6487 6476 6488 Assert( i< 2);6477 Assert((uintptr_t)pvUser < 2); 6489 6478 6490 6479 if (cb == 1) … … 6512 6501 PDMBOTHCBDECL(int) ataIOPortRead2(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 6513 6502 { 6514 uint32_t i = (uint32_t)(uintptr_t)pvUser;6515 6503 PCIATAState *pThis = PDMDEVINS_2_DATA(pDevIns, PCIATAState *); 6516 PATACONTROLLER pCtl = &pThis->aCts[ i];6504 PATACONTROLLER pCtl = &pThis->aCts[(uintptr_t)pvUser % RT_ELEMENTS(pThis->aCts)]; 6517 6505 int rc; 6518 6506 6519 Assert( i< 2);6507 Assert((uintptr_t)pvUser < 2); 6520 6508 6521 6509 if (cb == 1)
Note:
See TracChangeset
for help on using the changeset viewer.