Changeset 81812 in vbox
- Timestamp:
- Nov 12, 2019 4:05:00 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134603
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevBusLogic.cpp
r81810 r81812 486 486 /** ISA compatibility I/O ports. */ 487 487 IOMIOPORTHANDLE hIoPortsIsa; 488 /** BIOS I/O ports for booting, optional. */ 489 IOMIOPORTHANDLE hIoPortsBios; 488 490 /** PCI Region \#0: I/O ports. */ 489 491 IOMIOPORTHANDLE hIoPortsPci; … … 2744 2746 2745 2747 /** 2746 * Port I/O Handler for IN operations - BIOS port. 2747 * 2748 * @returns VBox status code. 2749 * 2750 * @param pDevIns The device instance. 2751 * @param pvUser User argument. 2752 * @param uPort Port number used for the IN operation. 2753 * @param pu32 Where to store the result. 2754 * @param cb Number of bytes read. 2755 */ 2756 static DECLCALLBACK(int) buslogicR3BiosIoPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT uPort, uint32_t *pu32, unsigned cb) 2757 { 2748 * @callback_method_impl{FNIOMIOPORTNEWIN, BIOS port.} 2749 */ 2750 static DECLCALLBACK(VBOXSTRICTRC) 2751 buslogicR3BiosIoPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb) 2752 { 2753 PBUSLOGIC pBusLogic = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2758 2754 RT_NOREF(pvUser, cb); 2759 PBUSLOGIC pBusLogic = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2760 2761 Assert(cb == 1); 2762 2763 int rc = vboxscsiReadRegister(&pBusLogic->VBoxSCSI, (uPort - BUSLOGIC_BIOS_IO_PORT), pu32); 2764 2765 //Log2(("%s: pu32=%p:{%.*Rhxs} iRegister=%d rc=%Rrc\n", 2766 // __FUNCTION__, pu32, 1, pu32, (uPort - BUSLOGIC_BIOS_IO_PORT), rc)); 2755 2756 ASSERT_GUEST(cb == 1); 2757 2758 int rc = vboxscsiReadRegister(&pBusLogic->VBoxSCSI, offPort, pu32); 2759 2760 //Log2(("%s: pu32=%p:{%.*Rhxs} iRegister=%d rc=%Rrc\n", __FUNCTION__, pu32, 1, pu32, offPort, rc)); 2767 2761 2768 2762 return rc; … … 2770 2764 2771 2765 /** 2772 * Port I/O Handler for OUT operations - BIOS port. 2773 * 2774 * @returns VBox status code. 2775 * 2776 * @param pDevIns The device instance. 2777 * @param pvUser User argument. 2778 * @param uPort Port number used for the IN operation. 2779 * @param u32 The value to output. 2780 * @param cb The value size in bytes. 2781 */ 2782 static DECLCALLBACK(int) buslogicR3BiosIoPortWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT uPort, uint32_t u32, unsigned cb) 2783 { 2766 * @callback_method_impl{FNIOMIOPORTNEWOUT, BIOS port.} 2767 */ 2768 static DECLCALLBACK(VBOXSTRICTRC) 2769 buslogicR3BiosIoPortWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb) 2770 { 2771 PBUSLOGIC pThis = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2772 Log2(("#%d %s: pvUser=%#p cb=%d u32=%#x offPort=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, u32, offPort)); 2784 2773 RT_NOREF(pvUser, cb); 2785 PBUSLOGIC pThis = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC);2786 Log2(("#%d %s: pvUser=%#p cb=%d u32=%#x uPort=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, u32, uPort));2787 2774 2788 2775 /* … … 2793 2780 return VINF_SUCCESS; 2794 2781 2795 A ssert(cb == 1);2796 2797 int rc = vboxscsiWriteRegister(&pThis->VBoxSCSI, (uPort - BUSLOGIC_BIOS_IO_PORT), (uint8_t)u32);2782 ASSERT_GUEST(cb == 1); 2783 2784 int rc = vboxscsiWriteRegister(&pThis->VBoxSCSI, offPort, (uint8_t)u32); 2798 2785 if (rc == VERR_MORE_DATA) 2799 2786 { … … 2811 2798 2812 2799 /** 2813 * Port I/O Handler for primary port range OUT string operations. 2814 * @see FNIOMIOPORTOUTSTRING for details. 2815 */ 2816 static DECLCALLBACK(int) buslogicR3BiosIoPortWriteStr(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, 2817 uint8_t const *pbSrc, uint32_t *pcTransfers, unsigned cb) 2818 { 2800 * @callback_method_impl{FNIOMIOPORTNEWOUTSTRING, BIOS port.} 2801 */ 2802 static DECLCALLBACK(VBOXSTRICTRC) buslogicR3BiosIoPortWriteStr(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, 2803 uint8_t const *pbSrc, uint32_t *pcTransfers, unsigned cb) 2804 { 2805 PBUSLOGIC pThis = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2806 Log2(("#%d %s: pvUser=%#p cb=%d offPort=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, offPort)); 2819 2807 RT_NOREF(pvUser); 2820 PBUSLOGIC pThis = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC);2821 Log2(("#%d %s: pvUser=%#p cb=%d Port=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, Port));2822 2808 2823 2809 /* … … 2828 2814 return VINF_SUCCESS; 2829 2815 2830 int rc = vboxscsiWriteString(pDevIns, &pThis->VBoxSCSI, (Port - BUSLOGIC_BIOS_IO_PORT), pbSrc, pcTransfers, cb);2816 int rc = vboxscsiWriteString(pDevIns, &pThis->VBoxSCSI, offPort, pbSrc, pcTransfers, cb); 2831 2817 if (rc == VERR_MORE_DATA) 2832 2818 { … … 2843 2829 2844 2830 /** 2845 * Port I/O Handler for primary port range IN string operations. 2846 * @see FNIOMIOPORTINSTRING for details. 2847 */ 2848 static DECLCALLBACK(int) buslogicR3BiosIoPortReadStr(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, 2849 uint8_t *pbDst, uint32_t *pcTransfers, unsigned cb) 2850 { 2831 * @callback_method_impl{FNIOMIOPORTNEWINSTRING, BIOS port.} 2832 */ 2833 static DECLCALLBACK(VBOXSTRICTRC) buslogicR3BiosIoPortReadStr(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, 2834 uint8_t *pbDst, uint32_t *pcTransfers, unsigned cb) 2835 { 2836 PBUSLOGIC pBusLogic = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2837 LogFlowFunc(("#%d %s: pvUser=%#p cb=%d offPort=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, offPort)); 2851 2838 RT_NOREF(pvUser); 2852 PBUSLOGIC pBusLogic = PDMDEVINS_2_DATA(pDevIns, PBUSLOGIC); 2853 LogFlowFunc(("#%d %s: pvUser=%#p cb=%d Port=%#x\n", pDevIns->iInstance, __FUNCTION__, pvUser, cb, Port)); 2854 2855 return vboxscsiReadString(pDevIns, &pBusLogic->VBoxSCSI, (Port - BUSLOGIC_BIOS_IO_PORT), 2856 pbDst, pcTransfers, cb); 2839 2840 return vboxscsiReadString(pDevIns, &pBusLogic->VBoxSCSI, offPort, pbDst, pcTransfers, cb); 2857 2841 } 2858 2842 … … 2990 2974 } 2991 2975 2976 /** 2977 * @interface_method_impl{PDMIMEDIAPORT,pfnQueryDeviceLocation} 2978 */ 2992 2979 static DECLCALLBACK(int) buslogicR3QueryDeviceLocation(PPDMIMEDIAPORT pInterface, const char **ppcszController, 2993 2980 uint32_t *piInstance, uint32_t *piLUN) … … 4192 4179 { 4193 4180 /* Register I/O port space for BIOS access. */ 4194 rc = PDMDevHlpI OPortRegister(pDevIns, BUSLOGIC_BIOS_IO_PORT, 4, NULL,4195 buslogicR3BiosIoPortWrite, buslogicR3BiosIoPortRead,4196 buslogicR3BiosIoPortWriteStr, buslogicR3BiosIoPortReadStr,4197 "BusLogic BIOS");4181 rc = PDMDevHlpIoPortCreateExAndMap(pDevIns, BUSLOGIC_BIOS_IO_PORT, 4 /*cPorts*/, 4182 buslogicR3BiosIoPortWrite, buslogicR3BiosIoPortRead, 4183 buslogicR3BiosIoPortWriteStr, buslogicR3BiosIoPortReadStr, NULL /*pvUser*/, 4184 "BusLogic BIOS" , NULL /*paExtDesc*/, &pThis->hIoPortsBios); 4198 4185 if (RT_FAILURE(rc)) 4199 4186 return PDMDEV_SET_ERROR(pDevIns, rc, N_("BusLogic cannot register BIOS I/O handlers"));
Note:
See TracChangeset
for help on using the changeset viewer.