Rev 4569 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4569 | Rev 4570 | ||
---|---|---|---|
Line 232... | Line 232... | ||
232 | uint32_t bytes, bool interruptible, |
232 | uint32_t bytes, bool interruptible, |
233 | unsigned long timeout) |
233 | unsigned long timeout) |
234 | { |
234 | { |
235 | int ret = 0; |
235 | int ret = 0; |
236 | unsigned long end_jiffies = GetTimerTicks() + timeout; |
236 | unsigned long end_jiffies = GetTimerTicks() + timeout; |
237 | DEFINE_WAIT(__wait); |
237 | // DEFINE_WAIT(__wait); |
Line 238... | Line 238... | ||
238 | 238 | ||
Line 239... | Line 239... | ||
239 | DRM_INFO("Fifo wait noirq.\n"); |
239 | DRM_INFO("Fifo wait noirq.\n"); |
240 | 240 | ||
Line 409... | Line 409... | ||
409 | uint32_t chunk_size = max - next_cmd; |
409 | uint32_t chunk_size = max - next_cmd; |
410 | uint32_t rest; |
410 | uint32_t rest; |
411 | uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? |
411 | uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? |
412 | fifo_state->dynamic_buffer : fifo_state->static_buffer; |
412 | fifo_state->dynamic_buffer : fifo_state->static_buffer; |
Line -... | Line 413... | ||
- | 413 | ||
- | 414 | ENTER(); |
|
413 | 415 | ||
414 | if (bytes < chunk_size) |
416 | if (bytes < chunk_size) |
Line 415... | Line 417... | ||
415 | chunk_size = bytes; |
417 | chunk_size = bytes; |
416 | 418 | ||
417 | iowrite32(bytes, fifo_mem + SVGA_FIFO_RESERVED); |
419 | iowrite32(bytes, fifo_mem + SVGA_FIFO_RESERVED); |
418 | mb(); |
420 | mb(); |
419 | memcpy(fifo_mem + (next_cmd >> 2), buffer, chunk_size); |
421 | memcpy(fifo_mem + (next_cmd >> 2), buffer, chunk_size); |
420 | rest = bytes - chunk_size; |
422 | rest = bytes - chunk_size; |
421 | if (rest) |
423 | if (rest) |
- | 424 | memcpy(fifo_mem + (min >> 2), buffer + (chunk_size >> 2), |
|
- | 425 | rest); |
|
422 | memcpy(fifo_mem + (min >> 2), buffer + (chunk_size >> 2), |
426 | LEAVE(); |
Line 423... | Line 427... | ||
423 | rest); |
427 | |
424 | } |
428 | } |
425 | 429 | ||
426 | static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state, |
430 | static void vmw_fifo_slow_copy(struct vmw_fifo_state *fifo_state, |
427 | __le32 __iomem *fifo_mem, |
431 | __le32 __iomem *fifo_mem, |
428 | uint32_t next_cmd, |
432 | uint32_t next_cmd, |
429 | uint32_t max, uint32_t min, uint32_t bytes) |
433 | uint32_t max, uint32_t min, uint32_t bytes) |
- | 434 | { |
|
Line 430... | Line 435... | ||
430 | { |
435 | uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? |
431 | uint32_t *buffer = (fifo_state->dynamic_buffer != NULL) ? |
436 | fifo_state->dynamic_buffer : fifo_state->static_buffer; |
432 | fifo_state->dynamic_buffer : fifo_state->static_buffer; |
437 | ENTER(); |
433 | 438 | ||
Line 439... | Line 444... | ||
439 | mb(); |
444 | mb(); |
440 | iowrite32(next_cmd, fifo_mem + SVGA_FIFO_NEXT_CMD); |
445 | iowrite32(next_cmd, fifo_mem + SVGA_FIFO_NEXT_CMD); |
441 | mb(); |
446 | mb(); |
442 | bytes -= sizeof(uint32_t); |
447 | bytes -= sizeof(uint32_t); |
443 | } |
448 | } |
- | 449 | LEAVE(); |
|
444 | } |
450 | } |
Line 445... | Line 451... | ||
445 | 451 | ||
446 | void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes) |
452 | void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes) |
447 | { |
453 | { |
Line 450... | Line 456... | ||
450 | uint32_t next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); |
456 | uint32_t next_cmd = ioread32(fifo_mem + SVGA_FIFO_NEXT_CMD); |
451 | uint32_t max = ioread32(fifo_mem + SVGA_FIFO_MAX); |
457 | uint32_t max = ioread32(fifo_mem + SVGA_FIFO_MAX); |
452 | uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN); |
458 | uint32_t min = ioread32(fifo_mem + SVGA_FIFO_MIN); |
453 | bool reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE; |
459 | bool reserveable = fifo_state->capabilities & SVGA_FIFO_CAP_RESERVE; |
Line -... | Line 460... | ||
- | 460 | ||
- | 461 | // ENTER(); |
|
454 | 462 | ||
455 | BUG_ON((bytes & 3) != 0); |
463 | BUG_ON((bytes & 3) != 0); |
Line 456... | Line 464... | ||
456 | BUG_ON(bytes > fifo_state->reserved_size); |
464 | BUG_ON(bytes > fifo_state->reserved_size); |
Line 485... | Line 493... | ||
485 | iowrite32(0, fifo_mem + SVGA_FIFO_RESERVED); |
493 | iowrite32(0, fifo_mem + SVGA_FIFO_RESERVED); |
486 | mb(); |
494 | mb(); |
487 | // up_write(&fifo_state->rwsem); |
495 | // up_write(&fifo_state->rwsem); |
488 | vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); |
496 | vmw_fifo_ping_host(dev_priv, SVGA_SYNC_GENERIC); |
489 | mutex_unlock(&fifo_state->fifo_mutex); |
497 | mutex_unlock(&fifo_state->fifo_mutex); |
- | 498 | ||
- | 499 | // LEAVE(); |
|
490 | } |
500 | } |
Line 491... | Line 501... | ||
491 | 501 | ||
492 | int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) |
502 | int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno) |
493 | { |
503 | { |