Commit ff9cf2cbe4fb8e865dc0e2371cedbcd7fbec8aad
1 parent
931ea435
Properly byte-swap values in VMware SVGA (malc).
Makes PPC host happy. Also use the right type for a memory offset. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4874 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
19 additions
and
12 deletions
hw/vmware_vga.c
... | ... | @@ -483,6 +483,8 @@ static inline void vmsvga_cursor_define(struct vmsvga_state_s *s, |
483 | 483 | } |
484 | 484 | #endif |
485 | 485 | |
486 | +#define CMD(f) le32_to_cpu(s->cmd->f) | |
487 | + | |
486 | 488 | static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) |
487 | 489 | { |
488 | 490 | if (!s->config || !s->enable) |
... | ... | @@ -490,15 +492,20 @@ static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) |
490 | 492 | return (s->cmd->next_cmd == s->cmd->stop); |
491 | 493 | } |
492 | 494 | |
493 | -static inline uint32_t vmsvga_fifo_read(struct vmsvga_state_s *s) | |
495 | +static inline uint32_t vmsvga_fifo_read_raw(struct vmsvga_state_s *s) | |
494 | 496 | { |
495 | - uint32_t cmd = s->fifo[s->cmd->stop >> 2]; | |
496 | - s->cmd->stop += 4; | |
497 | - if (s->cmd->stop >= s->cmd->max) | |
497 | + uint32_t cmd = s->fifo[CMD(stop) >> 2]; | |
498 | + s->cmd->stop = cpu_to_le32(CMD(stop) + 4); | |
499 | + if (CMD(stop) >= CMD(max)) | |
498 | 500 | s->cmd->stop = s->cmd->min; |
499 | 501 | return cmd; |
500 | 502 | } |
501 | 503 | |
504 | +static inline uint32_t vmsvga_fifo_read(struct vmsvga_state_s *s) | |
505 | +{ | |
506 | + return le32_to_cpu(vmsvga_fifo_read_raw(s)); | |
507 | +} | |
508 | + | |
502 | 509 | static void vmsvga_fifo_run(struct vmsvga_state_s *s) |
503 | 510 | { |
504 | 511 | uint32_t cmd, colour; |
... | ... | @@ -552,9 +559,9 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) |
552 | 559 | vmsvga_fifo_read(s); |
553 | 560 | cursor.bpp = vmsvga_fifo_read(s); |
554 | 561 | for (args = 0; args < SVGA_BITMAP_SIZE(x, y); args ++) |
555 | - cursor.mask[args] = vmsvga_fifo_read(s); | |
562 | + cursor.mask[args] = vmsvga_fifo_read_raw(s); | |
556 | 563 | for (args = 0; args < SVGA_PIXMAP_SIZE(x, y, cursor.bpp); args ++) |
557 | - cursor.image[args] = vmsvga_fifo_read(s); | |
564 | + cursor.image[args] = vmsvga_fifo_read_raw(s); | |
558 | 565 | #ifdef HW_MOUSE_ACCEL |
559 | 566 | vmsvga_cursor_define(s, &cursor); |
560 | 567 | break; |
... | ... | @@ -788,14 +795,14 @@ static void vmsvga_value_write(void *opaque, uint32_t address, uint32_t value) |
788 | 795 | if (value) { |
789 | 796 | s->fifo = (uint32_t *) &s->vram[s->vram_size - SVGA_FIFO_SIZE]; |
790 | 797 | /* Check range and alignment. */ |
791 | - if ((s->cmd->min | s->cmd->max | | |
792 | - s->cmd->next_cmd | s->cmd->stop) & 3) | |
798 | + if ((CMD(min) | CMD(max) | | |
799 | + CMD(next_cmd) | CMD(stop)) & 3) | |
793 | 800 | break; |
794 | - if (s->cmd->min < (uint8_t *) s->cmd->fifo - (uint8_t *) s->fifo) | |
801 | + if (CMD(min) < (uint8_t *) s->cmd->fifo - (uint8_t *) s->fifo) | |
795 | 802 | break; |
796 | - if (s->cmd->max > SVGA_FIFO_SIZE) | |
803 | + if (CMD(max) > SVGA_FIFO_SIZE) | |
797 | 804 | break; |
798 | - if (s->cmd->max < s->cmd->min + 10 * 1024) | |
805 | + if (CMD(max) < CMD(min) + 10 * 1024) | |
799 | 806 | break; |
800 | 807 | } |
801 | 808 | s->config = !!value; |
... | ... | @@ -1189,7 +1196,7 @@ static void pci_vmsvga_map_mem(PCIDevice *pci_dev, int region_num, |
1189 | 1196 | { |
1190 | 1197 | struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; |
1191 | 1198 | struct vmsvga_state_s *s = &d->chip; |
1192 | - int iomemtype; | |
1199 | + ram_addr_t iomemtype; | |
1193 | 1200 | |
1194 | 1201 | s->vram_base = addr; |
1195 | 1202 | #ifdef DIRECT_VRAM | ... | ... |