Exemplo n.º 1
0
/* 
 * inserts a wait for vline in the command stream 
 */
void
wait_vline_range(ScrnInfoPtr pScrn, drmBufPtr ib, int crtc, int start, int stop)
{
    RHDPtr rhdPtr = RHDPTR(pScrn);
    struct rhdCrtc *rhdCrtc;

    if ((crtc < 0) || (crtc > 1))
	return;

    rhdCrtc = rhdPtr->Crtc[crtc];
    if(!rhdCrtc || !rhdCrtc->CurrentMode)
	return;

    start = max(start, 0);
    stop = min(stop, rhdCrtc->CurrentMode->VDisplay-1);

#if 0
    LOG("wait_vline_range: start %d stop %d\n", start, stop);
#endif

    if (stop <= start)
	return;

    /* set the VLINE range */
    if(crtc == 0)
	EREG(ib, D1MODE_VLINE_START_END, start | (stop << 16));
    else
	EREG(ib, D2MODE_VLINE_START_END, start | (stop << 16));

    /* tell the CP to poll the VLINE state register */
    PACK3(ib, IT_WAIT_REG_MEM, 6);
    E32(ib, WAIT_REG | WAIT_EQ);
    if(crtc == 0)
	E32(ib, D1MODE_VLINE_STATUS >> 2);
    else
Exemplo n.º 2
0
void
wait_3d_idle_clean(ScrnInfoPtr pScrn, drmBufPtr ib)
{

    /* flush caches, don't generate timestamp */
    PACK3(ib, IT_EVENT_WRITE, 1);
    E32(ib, CACHE_FLUSH_AND_INV_EVENT);
    /* wait for 3D idle clean */
    EREG(ib, WAIT_UNTIL,                          (WAIT_3D_IDLE_bit |
						     WAIT_3D_IDLECLEAN_bit));
}
Exemplo n.º 3
0
/* Flush the indirect buffer to the kernel for submission to the card */
void R600CPFlushIndirect(ScrnInfoPtr pScrn, drmBufPtr ib)
{
    drmBufPtr          buffer = ib;
    int                start  = 0;
    drm_radeon_indirect_t  indirect;
    int drmFD = RHDDRMFDGet(pScrn->scrnIndex);

    if (!buffer) return;

    while (buffer->used & 0x3c){
        E32(buffer, CP_PACKET2()); /* fill up to multiple of 16 dwords */
    }

    indirect.idx     = buffer->idx;
    indirect.start   = start;
    indirect.end     = buffer->used;
    indirect.discard = 1;

    drmCommandWriteRead(drmFD, DRM_RADEON_INDIRECT,
			&indirect, sizeof(drm_radeon_indirect_t));

}
Exemplo n.º 4
0
static void
externalize_ehdr(Elf_Byte bo, Elf_Ehdr *ehdr)
{

#if ELFSIZE == 32
	E16(ehdr->e_type);
	E16(ehdr->e_machine);
	E32(ehdr->e_version);
	E32(ehdr->e_entry);
	E32(ehdr->e_phoff);
	E32(ehdr->e_shoff);
	E32(ehdr->e_flags);
	E16(ehdr->e_ehsize);
	E16(ehdr->e_phentsize);
	E16(ehdr->e_phnum);
	E16(ehdr->e_shentsize);
	E16(ehdr->e_shnum);
	E16(ehdr->e_shstrndx);
#elif ELFSIZE == 64
	E16(ehdr->e_type);
	E16(ehdr->e_machine);
	E32(ehdr->e_version);
	E64(ehdr->e_entry);
	E64(ehdr->e_phoff);
	E64(ehdr->e_shoff);
	E32(ehdr->e_flags);
	E16(ehdr->e_ehsize);
	E16(ehdr->e_phentsize);
	E16(ehdr->e_phnum);
	E16(ehdr->e_shentsize);
	E16(ehdr->e_shnum);
	E16(ehdr->e_shstrndx);
#else
#error ELFSIZE is not 32 or 64
#endif
}
Exemplo n.º 5
0
static void
externalize_shdr(Elf_Byte bo, Elf_Shdr *shdr)
{

#if ELFSIZE == 32
	E32(shdr->sh_name);
	E32(shdr->sh_type);
	E32(shdr->sh_flags);
	E32(shdr->sh_addr);
	E32(shdr->sh_offset);
	E32(shdr->sh_size);
	E32(shdr->sh_link);
	E32(shdr->sh_info);
	E32(shdr->sh_addralign);
	E32(shdr->sh_entsize);
#elif ELFSIZE == 64
	E32(shdr->sh_name);
	E32(shdr->sh_type);
	E64(shdr->sh_flags);
	E64(shdr->sh_addr);
	E64(shdr->sh_offset);
	E64(shdr->sh_size);
	E32(shdr->sh_link);
	E32(shdr->sh_info);
	E64(shdr->sh_addralign);
	E64(shdr->sh_entsize);
#else
#error ELFSIZE is not 32 or 64
#endif
}