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,6 +483,8 @@ static inline void vmsvga_cursor_define(struct vmsvga_state_s *s, | ||
| 483 | } | 483 | } |
| 484 | #endif | 484 | #endif |
| 485 | 485 | ||
| 486 | +#define CMD(f) le32_to_cpu(s->cmd->f) | ||
| 487 | + | ||
| 486 | static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) | 488 | static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) |
| 487 | { | 489 | { |
| 488 | if (!s->config || !s->enable) | 490 | if (!s->config || !s->enable) |
| @@ -490,15 +492,20 @@ static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) | @@ -490,15 +492,20 @@ static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) | ||
| 490 | return (s->cmd->next_cmd == s->cmd->stop); | 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 | s->cmd->stop = s->cmd->min; | 500 | s->cmd->stop = s->cmd->min; |
| 499 | return cmd; | 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 | static void vmsvga_fifo_run(struct vmsvga_state_s *s) | 509 | static void vmsvga_fifo_run(struct vmsvga_state_s *s) |
| 503 | { | 510 | { |
| 504 | uint32_t cmd, colour; | 511 | uint32_t cmd, colour; |
| @@ -552,9 +559,9 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) | @@ -552,9 +559,9 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) | ||
| 552 | vmsvga_fifo_read(s); | 559 | vmsvga_fifo_read(s); |
| 553 | cursor.bpp = vmsvga_fifo_read(s); | 560 | cursor.bpp = vmsvga_fifo_read(s); |
| 554 | for (args = 0; args < SVGA_BITMAP_SIZE(x, y); args ++) | 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 | for (args = 0; args < SVGA_PIXMAP_SIZE(x, y, cursor.bpp); args ++) | 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 | #ifdef HW_MOUSE_ACCEL | 565 | #ifdef HW_MOUSE_ACCEL |
| 559 | vmsvga_cursor_define(s, &cursor); | 566 | vmsvga_cursor_define(s, &cursor); |
| 560 | break; | 567 | break; |
| @@ -788,14 +795,14 @@ static void vmsvga_value_write(void *opaque, uint32_t address, uint32_t value) | @@ -788,14 +795,14 @@ static void vmsvga_value_write(void *opaque, uint32_t address, uint32_t value) | ||
| 788 | if (value) { | 795 | if (value) { |
| 789 | s->fifo = (uint32_t *) &s->vram[s->vram_size - SVGA_FIFO_SIZE]; | 796 | s->fifo = (uint32_t *) &s->vram[s->vram_size - SVGA_FIFO_SIZE]; |
| 790 | /* Check range and alignment. */ | 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 | break; | 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 | break; | 802 | break; |
| 796 | - if (s->cmd->max > SVGA_FIFO_SIZE) | 803 | + if (CMD(max) > SVGA_FIFO_SIZE) |
| 797 | break; | 804 | break; |
| 798 | - if (s->cmd->max < s->cmd->min + 10 * 1024) | 805 | + if (CMD(max) < CMD(min) + 10 * 1024) |
| 799 | break; | 806 | break; |
| 800 | } | 807 | } |
| 801 | s->config = !!value; | 808 | s->config = !!value; |
| @@ -1189,7 +1196,7 @@ static void pci_vmsvga_map_mem(PCIDevice *pci_dev, int region_num, | @@ -1189,7 +1196,7 @@ static void pci_vmsvga_map_mem(PCIDevice *pci_dev, int region_num, | ||
| 1189 | { | 1196 | { |
| 1190 | struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; | 1197 | struct pci_vmsvga_state_s *d = (struct pci_vmsvga_state_s *) pci_dev; |
| 1191 | struct vmsvga_state_s *s = &d->chip; | 1198 | struct vmsvga_state_s *s = &d->chip; |
| 1192 | - int iomemtype; | 1199 | + ram_addr_t iomemtype; |
| 1193 | 1200 | ||
| 1194 | s->vram_base = addr; | 1201 | s->vram_base = addr; |
| 1195 | #ifdef DIRECT_VRAM | 1202 | #ifdef DIRECT_VRAM |