Changeset 20444 in vbox
- Timestamp:
- Jun 9, 2009 3:16:41 PM (16 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA.cpp
r20374 r20444 2163 2163 uint32_t v, addr1, addr; 2164 2164 vga_draw_line_func *vga_draw_line; 2165 booloffsets_changed;2165 int offsets_changed; 2166 2166 2167 2167 offsets_changed = update_basic_params(s); … … 3044 3044 PDMBOTHCBDECL(int) vgaIOPortWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb) 3045 3045 { 3046 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3047 3048 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_WRITE); 3049 if (rc != VINF_SUCCESS) 3050 return rc; 3051 3046 3052 NOREF(pvUser); 3047 3053 if (cb == 1) 3048 vga_ioport_write( PDMINS_2_DATA(pDevIns, PVGASTATE), Port, u32);3054 vga_ioport_write(s, Port, u32); 3049 3055 else if (cb == 2) 3050 3056 { 3051 vga_ioport_write(PDMINS_2_DATA(pDevIns, PVGASTATE), Port, u32 & 0xff); 3052 vga_ioport_write(PDMINS_2_DATA(pDevIns, PVGASTATE), Port + 1, u32 >> 8); 3053 } 3057 vga_ioport_write(s, Port, u32 & 0xff); 3058 vga_ioport_write(s, Port + 1, u32 >> 8); 3059 } 3060 PDMCritSectLeave(&s->lock); 3054 3061 return VINF_SUCCESS; 3055 3062 } … … 3069 3076 PDMBOTHCBDECL(int) vgaIOPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *pu32, unsigned cb) 3070 3077 { 3078 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3071 3079 NOREF(pvUser); 3080 3081 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_READ); 3082 if (rc != VINF_SUCCESS) 3083 return rc; 3084 3085 rc = VERR_IOM_IOPORT_UNUSED; 3072 3086 if (cb == 1) 3073 3087 { 3074 *pu32 = vga_ioport_read( PDMINS_2_DATA(pDevIns, PVGASTATE), Port);3075 r eturnVINF_SUCCESS;3088 *pu32 = vga_ioport_read(s, Port); 3089 rc = VINF_SUCCESS; 3076 3090 } 3077 3091 else if (cb == 2) 3078 3092 { 3079 *pu32 = vga_ioport_read(PDMINS_2_DATA(pDevIns, PVGASTATE), Port) 3080 | (vga_ioport_read(PDMINS_2_DATA(pDevIns, PVGASTATE), Port + 1) << 8); 3081 return VINF_SUCCESS; 3082 } 3083 return VERR_IOM_IOPORT_UNUSED; 3093 *pu32 = vga_ioport_read(s, Port) 3094 | (vga_ioport_read(s, Port + 1) << 8); 3095 rc = VINF_SUCCESS; 3096 } 3097 PDMCritSectLeave(&s->lock); 3098 return rc; 3084 3099 } 3085 3100 … … 3100 3115 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3101 3116 3117 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_WRITE); 3118 if (rc != VINF_SUCCESS) 3119 return rc; 3120 3102 3121 NOREF(pvUser); 3103 3122 … … 3107 3126 { 3108 3127 HGSMIGuestWrite (s->pHGSMI, u32); 3128 PDMCritSectLeave(&s->lock); 3109 3129 return VINF_SUCCESS; 3110 3130 } … … 3112 3132 { 3113 3133 HGSMIHostWrite (s->pHGSMI, u32); 3134 PDMCritSectLeave(&s->lock); 3114 3135 return VINF_SUCCESS; 3115 3136 } … … 3120 3141 Log(("vgaIOPortWriteVBEData: %s - Switching to host...\n", 3121 3142 s->vbe_index == VBE_DISPI_INDEX_VBVA_HOST? "VBE_DISPI_INDEX_VBVA_HOST": "VBE_DISPI_INDEX_VBVA_GUEST")); 3143 PDMCritSectLeave(&s->lock); 3122 3144 return VINF_IOM_HC_IOPORT_WRITE; 3123 3145 } … … 3129 3151 * This has to be done on the host in order to execute the connector callbacks. 3130 3152 */ 3131 if ( s->vbe_index == VBE_DISPI_INDEX_ENABLE3132 || s->vbe_index == VBE_DISPI_INDEX_VBOX_VIDEO)3153 if ( s->vbe_index == VBE_DISPI_INDEX_ENABLE 3154 || s->vbe_index == VBE_DISPI_INDEX_VBOX_VIDEO) 3133 3155 { 3134 3156 Log(("vgaIOPortWriteVBEData: VBE_DISPI_INDEX_ENABLE - Switching to host...\n")); 3157 PDMCritSectLeave(&s->lock); 3135 3158 return VINF_IOM_HC_IOPORT_WRITE; 3136 3159 } … … 3145 3168 { 3146 3169 s->fWriteVBEData = false; 3147 return vbe_ioport_write_data(s, Port, u32 & 0xFF); 3170 rc = vbe_ioport_write_data(s, Port, u32 & 0xFF); 3171 PDMCritSectLeave(&s->lock); 3172 return rc; 3148 3173 } 3149 3174 else … … 3151 3176 s->cbWriteVBEData = u32 & 0xFF; 3152 3177 s->fWriteVBEData = true; 3178 PDMCritSectLeave(&s->lock); 3153 3179 return VINF_SUCCESS; 3154 3180 } … … 3177 3203 // } 3178 3204 //#endif 3179 return vbe_ioport_write_data(s, Port, u32); 3205 rc = vbe_ioport_write_data(s, Port, u32); 3206 PDMCritSectLeave(&s->lock); 3207 return rc; 3180 3208 } 3181 3209 else 3182 3210 AssertMsgFailed(("vgaIOPortWriteVBEData: Port=%#x cb=%d u32=%#x\n", Port, cb, u32)); 3211 3212 PDMCritSectLeave(&s->lock); 3183 3213 return VINF_SUCCESS; 3184 3214 } … … 3199 3229 { 3200 3230 NOREF(pvUser); 3231 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3232 3233 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_WRITE); 3234 if (rc != VINF_SUCCESS) 3235 return rc; 3236 3201 3237 #ifdef VBE_BYTEWISE_IO 3202 3238 if (cb == 1) 3203 3239 { 3204 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE);3205 3240 if (!s->fWriteVBEIndex) 3206 3241 { 3207 3242 s->cbWriteVBEIndex = u32 & 0x00FF; 3208 3243 s->fWriteVBEIndex = true; 3244 PDMCritSectLeave(&s->lock); 3209 3245 return VINF_SUCCESS; 3210 3246 } … … 3213 3249 s->fWriteVBEIndex = false; 3214 3250 vbe_ioport_write_index(s, Port, (s->cbWriteVBEIndex << 8) | (u32 & 0x00FF)); 3251 PDMCritSectLeave(&s->lock); 3215 3252 return VINF_SUCCESS; 3216 3253 } … … 3219 3256 #endif 3220 3257 if (cb == 2) 3221 vbe_ioport_write_index( PDMINS_2_DATA(pDevIns, PVGASTATE), Port, u32);3258 vbe_ioport_write_index(s, Port, u32); 3222 3259 else 3223 3260 AssertMsgFailed(("vgaIOPortWriteVBEIndex: Port=%#x cb=%d u32=%#x\n", Port, cb, u32)); 3261 PDMCritSectLeave(&s->lock); 3224 3262 return VINF_SUCCESS; 3225 3263 } … … 3240 3278 { 3241 3279 NOREF(pvUser); 3280 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3281 3282 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_READ); 3283 if (rc != VINF_SUCCESS) 3284 return rc; 3242 3285 3243 3286 #ifdef VBOX_WITH_HGSMI 3244 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE);3245 3287 #ifdef IN_RING3 3246 3288 if (s->vbe_index == VBE_DISPI_INDEX_VBVA_GUEST) 3247 3289 { 3248 3290 *pu32 = HGSMIGuestRead (s->pHGSMI); 3291 PDMCritSectLeave(&s->lock); 3249 3292 return VINF_SUCCESS; 3250 3293 } … … 3252 3295 { 3253 3296 *pu32 = HGSMIHostRead (s->pHGSMI); 3297 PDMCritSectLeave(&s->lock); 3254 3298 return VINF_SUCCESS; 3255 3299 } … … 3260 3304 Log(("vgaIOPortWriteVBEData: %s - Switching to host...\n", 3261 3305 s->vbe_index == VBE_DISPI_INDEX_VBVA_HOST? "VBE_DISPI_INDEX_VBVA_HOST": "VBE_DISPI_INDEX_VBVA_GUEST")); 3306 PDMCritSectLeave(&s->lock); 3262 3307 return VINF_IOM_HC_IOPORT_READ; 3263 3308 } … … 3268 3313 if (cb == 1) 3269 3314 { 3270 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE);3271 3272 3315 if (!s->fReadVBEData) 3273 3316 { 3274 3317 *pu32 = (vbe_ioport_read_data(s, Port) >> 8) & 0xFF; 3275 3318 s->fReadVBEData = true; 3319 PDMCritSectLeave(&s->lock); 3276 3320 return VINF_SUCCESS; 3277 3321 } … … 3280 3324 *pu32 = vbe_ioport_read_data(s, Port) & 0xFF; 3281 3325 s->fReadVBEData = false; 3326 PDMCritSectLeave(&s->lock); 3282 3327 return VINF_SUCCESS; 3283 3328 } … … 3287 3332 if (cb == 2) 3288 3333 { 3289 *pu32 = vbe_ioport_read_data(PDMINS_2_DATA(pDevIns, PVGASTATE), Port); 3334 *pu32 = vbe_ioport_read_data(s, Port); 3335 PDMCritSectLeave(&s->lock); 3290 3336 return VINF_SUCCESS; 3291 3337 } 3292 3338 else if (cb == 4) 3293 3339 { 3294 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE);3295 3340 /* Quick hack for getting the vram size. */ 3296 3341 *pu32 = s->vram_size; 3342 PDMCritSectLeave(&s->lock); 3297 3343 return VINF_SUCCESS; 3298 3344 } 3299 3345 AssertMsgFailed(("vgaIOPortReadVBEData: Port=%#x cb=%d\n", Port, cb)); 3346 PDMCritSectLeave(&s->lock); 3300 3347 return VERR_IOM_IOPORT_UNUSED; 3301 3348 } … … 3316 3363 { 3317 3364 NOREF(pvUser); 3365 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE); 3366 3367 int rc = PDMCritSectEnter(&s->lock, VINF_IOM_HC_IOPORT_READ); 3368 if (rc != VINF_SUCCESS) 3369 return rc; 3370 3318 3371 #ifdef VBE_BYTEWISE_IO 3319 3372 if (cb == 1) 3320 3373 { 3321 VGAState *s = PDMINS_2_DATA(pDevIns, PVGASTATE);3322 3323 3374 if (!s->fReadVBEIndex) 3324 3375 { 3325 3376 *pu32 = (vbe_ioport_read_index(s, Port) >> 8) & 0xFF; 3326 3377 s->fReadVBEIndex = true; 3378 PDMCritSectLeave(&s->lock); 3327 3379 return VINF_SUCCESS; 3328 3380 } … … 3331 3383 *pu32 = vbe_ioport_read_index(s, Port) & 0xFF; 3332 3384 s->fReadVBEIndex = false; 3385 PDMCritSectLeave(&s->lock); 3333 3386 return VINF_SUCCESS; 3334 3387 } … … 3338 3391 if (cb == 2) 3339 3392 { 3340 *pu32 = vbe_ioport_read_index(PDMINS_2_DATA(pDevIns, PVGASTATE), Port); 3393 *pu32 = vbe_ioport_read_index(s, Port); 3394 PDMCritSectLeave(&s->lock); 3341 3395 return VINF_SUCCESS; 3342 3396 } 3397 PDMCritSectLeave(&s->lock); 3343 3398 AssertMsgFailed(("vgaIOPortReadVBEIndex: Port=%#x cb=%d\n", Port, cb)); 3344 3399 return VERR_IOM_IOPORT_UNUSED; … … 3384 3439 * 3385 3440 * @returns VBox status code. 3386 * @param p DevIns Pointer device instance.3441 * @param pThis VGA device structure 3387 3442 * @param pvUser User argument - ignored. 3388 3443 * @param GCPhysAddr Physical address of memory to write. … … 3391 3446 * @param cItems Number of data items to write. 3392 3447 */ 3393 PDMBOTHCBDECL(int) vgaMMIOFill(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, uint32_t u32Item, unsigned cbItem, unsigned cItems) 3394 { 3395 PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE); 3448 static int vgaInternalMMIOFill(PVGASTATE pThis, void *pvUser, RTGCPHYS GCPhysAddr, uint32_t u32Item, unsigned cbItem, unsigned cItems) 3449 { 3396 3450 uint32_t b; 3397 3451 uint32_t write_mask, bit_mask, set_mask; … … 3399 3453 unsigned i; 3400 3454 NOREF(pvUser); 3455 3401 3456 for (i = 0; i < cbItem; i++) 3402 3457 { … … 3558 3613 return VINF_SUCCESS; 3559 3614 } 3615 3616 /** 3617 * Legacy VGA memory (0xa0000 - 0xbffff) write hook, to be called from IOM and from the inside of VGADeviceGC.cpp. 3618 * This is the advanced version of vga_mem_writeb function. 3619 * 3620 * @returns VBox status code. 3621 * @param pDevIns Pointer device instance. 3622 * @param pvUser User argument - ignored. 3623 * @param GCPhysAddr Physical address of memory to write. 3624 * @param u32Item Data to write, up to 4 bytes. 3625 * @param cbItem Size of data Item, only 1/2/4 bytes is allowed for now. 3626 * @param cItems Number of data items to write. 3627 */ 3628 PDMBOTHCBDECL(int) vgaMMIOFill(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, uint32_t u32Item, unsigned cbItem, unsigned cItems) 3629 { 3630 PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE); 3631 3632 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_MMIO_WRITE); 3633 if (rc != VINF_SUCCESS) 3634 return rc; 3635 3636 rc = vgaInternalMMIOFill(pThis, pvUser, GCPhysAddr, u32Item, cbItem, cItems); 3637 PDMCritSectLeave(&pThis->lock); 3638 return rc; 3639 } 3560 3640 #undef APPLY_LOGICAL_AND_MASK 3561 3641 … … 3575 3655 PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE); 3576 3656 STAM_PROFILE_START(&pThis->CTX_MID_Z(Stat,MemoryRead), a); 3577 int rc = VINF_SUCCESS;3578 3657 NOREF(pvUser); 3658 3659 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_MMIO_READ); 3660 if (rc != VINF_SUCCESS) 3661 return rc; 3662 3579 3663 switch (cb) 3580 3664 { … … 3615 3699 } 3616 3700 STAM_PROFILE_STOP(&pThis->CTX_MID_Z(Stat,MemoryRead), a); 3701 PDMCritSectLeave(&pThis->lock); 3617 3702 return rc; 3618 3703 } … … 3632 3717 PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE); 3633 3718 uint8_t *pu8 = (uint8_t *)pv; 3634 int rc = VINF_SUCCESS;3635 3719 STAM_PROFILE_START(&pThis->CTX_MID_Z(Stat,MemoryWrite), a); 3720 3721 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_MMIO_WRITE); 3722 if (rc != VINF_SUCCESS) 3723 return rc; 3636 3724 3637 3725 switch (cb) … … 3690 3778 } 3691 3779 STAM_PROFILE_STOP(&pThis->CTX_MID_Z(Stat,MemoryWrite), a); 3780 PDMCritSectLeave(&pThis->lock); 3692 3781 return rc; 3693 3782 } … … 3704 3793 static int vgaLFBAccess(PVM pVM, PVGASTATE pThis, RTGCPHYS GCPhys, RTGCPTR GCPtr) 3705 3794 { 3706 int rc; 3795 int rc = PDMCritSectEnter(&pThis->lock, VINF_EM_RAW_EMULATE_INSTR); 3796 if (rc != VINF_SUCCESS) 3797 return rc; 3707 3798 3708 3799 /* … … 3723 3814 rc = PGMShwModifyPage(PDMDevHlpGetVMCPU(pThis->CTX_SUFF(pDevIns)), GCPtr, 1, X86_PTE_RW, ~(uint64_t)X86_PTE_RW); 3724 3815 if (RT_SUCCESS(rc)) 3816 { 3817 PDMCritSectLeave(&pThis->lock); 3725 3818 return VINF_SUCCESS; 3819 } 3726 3820 else 3727 3821 AssertMsgFailed(("PGMShwModifyPage -> rc=%d\n", rc)); 3728 3822 #else /* IN_RING3 : We don't have any virtual page address of the access here. */ 3729 3823 Assert(GCPtr == 0); 3824 PDMCritSectLeave(&pThis->lock); 3730 3825 return VINF_SUCCESS; 3731 3826 #endif … … 3734 3829 AssertMsgFailed(("PGMHandlerPhysicalPageTempOff -> rc=%d\n", rc)); 3735 3830 3831 PDMCritSectLeave(&pThis->lock); 3736 3832 return rc; 3737 3833 } … … 3849 3945 { 3850 3946 static int lastWasNotNewline = 0; /* We are only called in a single-threaded way */ 3947 PVGASTATE pThis = PDMINS_2_DATA(pDevIns, PVGASTATE); 3948 3949 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_IOPORT_WRITE); 3950 if (rc != VINF_SUCCESS) 3951 return rc; 3952 3851 3953 /* 3852 3954 * VGA BIOS char printing. … … 3874 3976 lastWasNotNewline = 1; 3875 3977 #endif 3978 PDMCritSectLeave(&pThis->lock); 3876 3979 return VINF_SUCCESS; 3877 3980 } 3878 3981 3982 PDMCritSectLeave(&pThis->lock); 3879 3983 /* not in use. */ 3880 return V INF_SUCCESS;3984 return VERR_IOM_IOPORT_UNUSED; 3881 3985 } 3882 3986 … … 3904 4008 NOREF(Port); 3905 4009 4010 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_IOPORT_WRITE); 4011 if (rc != VINF_SUCCESS) 4012 return rc; 4013 3906 4014 if (cb == 2) 3907 4015 { 3908 4016 Log(("vbeIOPortWriteVBEExtra: addr=%#RX32\n", u32)); 3909 4017 pThis->u16VBEExtraAddress = u32; 3910 return VINF_SUCCESS;3911 }4018 } 4019 PDMCritSectLeave(&pThis->lock); 3912 4020 3913 4021 Log(("vbeIOPortWriteVBEExtra: Ignoring invalid cb=%d writes to the VBE Extra port!!!\n", cb)); … … 3933 4041 NOREF(Port); 3934 4042 4043 int rc = PDMCritSectEnter(&pThis->lock, VINF_IOM_HC_IOPORT_READ); 4044 if (rc != VINF_SUCCESS) 4045 return rc; 4046 3935 4047 if (pThis->u16VBEExtraAddress == 0xffff) 3936 4048 { 3937 4049 Log(("vbeIOPortReadVBEExtra: Requested number of 64k video banks\n")); 3938 4050 *pu32 = pThis->vram_size / _64K; 3939 r eturnVINF_SUCCESS;3940 } 3941 4051 rc = VINF_SUCCESS; 4052 } 4053 else 3942 4054 if ( pThis->u16VBEExtraAddress >= pThis->cbVBEExtraData 3943 4055 || pThis->u16VBEExtraAddress + cb > pThis->cbVBEExtraData) … … 3946 4058 Log(("vbeIOPortReadVBEExtra: Requested address is out of VBE data!!! Address=%#x(%d) cbVBEExtraData=%#x(%d)\n", 3947 4059 pThis->u16VBEExtraAddress, pThis->u16VBEExtraAddress, pThis->cbVBEExtraData, pThis->cbVBEExtraData)); 3948 r eturnVINF_SUCCESS;3949 } 3950 4060 rc = VINF_SUCCESS; 4061 } 4062 else 3951 4063 if (cb == 1) 3952 4064 { … … 3954 4066 3955 4067 Log(("vbeIOPortReadVBEExtra: cb=%#x %.*Rhxs\n", cb, cb, pu32)); 3956 r eturnVINF_SUCCESS;3957 } 3958 4068 rc = VINF_SUCCESS; 4069 } 4070 else 3959 4071 if (cb == 2) 3960 4072 { … … 3963 4075 3964 4076 Log(("vbeIOPortReadVBEExtra: cb=%#x %.*Rhxs\n", cb, cb, pu32)); 3965 return VINF_SUCCESS; 3966 } 4077 rc = VINF_SUCCESS; 4078 } 4079 else 4080 rc = VERR_IOM_IOPORT_UNUSED; 4081 3967 4082 Log(("vbeIOPortReadVBEExtra: Invalid cb=%d read from the VBE Extra port!!!\n", cb)); 3968 return VERR_IOM_IOPORT_UNUSED; 4083 PDMCritSectLeave(&pThis->lock); 4084 return rc; 3969 4085 } 3970 4086 # endif /* VBE_NEW_DYN_LIST */ … … 4633 4749 PPDMDEVINS pDevIns = pThis->CTX_SUFF(pDevIns); 4634 4750 4751 int rc = PDMCritSectEnter(&pThis->lock, VERR_SEM_BUSY); 4752 AssertRC(rc); 4753 4635 4754 #ifndef VBOX_WITH_HGSMI 4636 4755 /* This should be called only in non VBVA mode. */ … … 4638 4757 if (VBVAUpdateDisplay (pThis) == VINF_SUCCESS) 4639 4758 { 4759 PDMCritSectLeave(&pThis->lock); 4640 4760 return VINF_SUCCESS; 4641 4761 } 4642 4762 #endif /* VBOX_WITH_HGSMI */ 4643 4763 4644 intrc = vga_update_display(pThis, false);4764 rc = vga_update_display(pThis, false); 4645 4765 if (rc != VINF_SUCCESS) 4766 { 4767 PDMCritSectLeave(&pThis->lock); 4646 4768 return rc; 4769 } 4647 4770 4648 4771 if (pThis->fHasDirtyBits && pThis->GCPhysVRAM && pThis->GCPhysVRAM != NIL_RTGCPHYS32) … … 4656 4779 pThis->fRemappedVGA = false; 4657 4780 } 4658 4781 PDMCritSectLeave(&pThis->lock); 4659 4782 return VINF_SUCCESS; 4660 4783 } … … 4679 4802 #endif /* DEBUG_sunlover */ 4680 4803 4804 int rc = PDMCritSectEnter(&pThis->lock, VERR_SEM_BUSY); 4805 AssertRC(rc); 4806 4681 4807 pThis->graphic_mode = -1; /* force full update */ 4682 4808 4683 intrc = vga_update_display(pThis, true);4809 rc = vga_update_display(pThis, true); 4684 4810 4685 4811 /* The dirty bits array has been just cleared, reset handlers as well. */ … … 4693 4819 pThis->fRemappedVGA = false; 4694 4820 } 4695 4821 PDMCritSectLeave(&pThis->lock); 4696 4822 return rc; 4697 4823 } … … 5077 5203 if (pThis->pDrv) 5078 5204 pThis->pDrv->pfnRefresh(pThis->pDrv); 5205 5079 5206 if (pThis->cMilliesRefreshInterval) 5080 5207 TMTimerSetMillies(pTimer, pThis->cMilliesRefreshInterval); … … 5780 5907 return rc; 5781 5908 5909 /* Initialize the PDM lock. */ 5910 rc = PDMDevHlpCritSectInit(pDevIns, &pThis->lock, "VGA"); 5911 if (RT_FAILURE(rc)) 5912 { 5913 Log(("%s: Failed to create critical section.\n", __FUNCTION__)); 5914 return rc; 5915 } 5916 5782 5917 /* 5783 5918 * Create the refresh timer. … … 5817 5952 * Allocate and initialize buffer for the VBE BIOS Extra Data. 5818 5953 */ 5819 pThis->cbVBEExtraData = sizeof(VBEHEADER) + cb; 5954 AssertRelease(sizeof(VBEHEADER) + cb < 65536); 5955 pThis->cbVBEExtraData = (uint16_t)(sizeof(VBEHEADER) + cb); 5820 5956 pThis->pu8VBEExtraData = (uint8_t *)PDMDevHlpMMHeapAllocZ(pDevIns, pThis->cbVBEExtraData); 5821 5957 if (!pThis->pu8VBEExtraData) … … 6201 6337 #endif 6202 6338 6339 PDMR3CritSectDelete(&pThis->lock); 6203 6340 return VINF_SUCCESS; 6204 6341 } -
trunk/src/VBox/Devices/Graphics/DevVGA.h
r19844 r20444 305 305 PPDMDEVINSR0 pDevInsR0; 306 306 307 /** The critical section. */ 308 PDMCRITSECT lock; 309 307 310 /** The display port base interface. */ 308 311 PDMIBASE Base;
Note:
See TracChangeset
for help on using the changeset viewer.