⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atimach64.c

📁 x.org上有关ati系列显卡最新驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
    pATIHW->gen_test_cntl = inr(GEN_TEST_CNTL) & ~GEN_CUR_EN;    if (pATI->Chip >= ATI_CHIP_264VTB)    {        pATIHW->mem_buf_cntl = inr(MEM_BUF_CNTL) | INVALIDATE_RB_CACHE;        pATIHW->mem_cntl = inr(MEM_CNTL);        pATIHW->mpp_config = inr(MPP_CONFIG);        pATIHW->mpp_strobe_seq = inr(MPP_STROBE_SEQ);        pATIHW->tvo_cntl = inr(TVO_CNTL);    }    /* Save draw engine state */    if (pATI->Block0Base && (pATIHW == &pATI->OldHW))    {        /* Ensure apertures are enabled */        outr(BUS_CNTL, pATI->NewHW.bus_cntl);        outr(CONFIG_CNTL, pATI->NewHW.config_cntl);        ATIMach64WaitForIdle(pATI);        /* Save FIFO size */        if (pATI->Chip >= ATI_CHIP_264VT4)            pATIHW->gui_cntl = inm(GUI_CNTL);        /* Save destination registers */        pATIHW->dst_off_pitch = inm(DST_OFF_PITCH);        pATIHW->dst_x = inm(DST_X);        pATIHW->dst_y = inm(DST_Y);        pATIHW->dst_height = inm(DST_HEIGHT);        pATIHW->dst_bres_err = inm(DST_BRES_ERR);        pATIHW->dst_bres_inc = inm(DST_BRES_INC);        pATIHW->dst_bres_dec = inm(DST_BRES_DEC);        pATIHW->dst_cntl = inm(DST_CNTL);        /* Save source registers */        pATIHW->src_off_pitch = inm(SRC_OFF_PITCH);        pATIHW->src_x = inm(SRC_X);        pATIHW->src_y = inm(SRC_Y);        pATIHW->src_width1 = inm(SRC_WIDTH1);        pATIHW->src_height1 = inm(SRC_HEIGHT1);        pATIHW->src_x_start = inm(SRC_X_START);        pATIHW->src_y_start = inm(SRC_Y_START);        pATIHW->src_width2 = inm(SRC_WIDTH2);        pATIHW->src_height2 = inm(SRC_HEIGHT2);        pATIHW->src_cntl = inm(SRC_CNTL);        if (pATI->Chip >= ATI_CHIP_264GTPRO)        {            CARD32 offset = TEX_LEVEL(inm(TEX_SIZE_PITCH));            /* Save 3D control & texture registers */            pATIHW->tex_offset = inm(TEX_0_OFF + offset);            pATIHW->scale_3d_cntl = inm(SCALE_3D_CNTL);        }        /* Save host data register */        pATIHW->host_cntl = inm(HOST_CNTL);        /* Save pattern registers */        pATIHW->pat_reg0 = inm(PAT_REG0);        pATIHW->pat_reg1 = inm(PAT_REG1);        pATIHW->pat_cntl = inm(PAT_CNTL);        /* Save scissor registers */        pATIHW->sc_left = pATI->sc_left = inm(SC_LEFT);        pATIHW->sc_right = pATI->sc_right = inm(SC_RIGHT);        pATIHW->sc_top = pATI->sc_top = inm(SC_TOP);        pATIHW->sc_bottom = pATI->sc_bottom = inm(SC_BOTTOM);        /* Save data path registers */        pATIHW->dp_bkgd_clr = inm(DP_BKGD_CLR);        pATIHW->dp_frgd_clr = inm(DP_FRGD_CLR);        pATIHW->dp_write_mask = inm(DP_WRITE_MASK);        pATIHW->dp_chain_mask = inm(DP_CHAIN_MASK);        pATIHW->dp_pix_width = inm(DP_PIX_WIDTH);        pATIHW->dp_mix = inm(DP_MIX);        pATIHW->dp_src = inm(DP_SRC);        /* Save colour compare registers */        pATIHW->clr_cmp_clr = inm(CLR_CMP_CLR);        pATIHW->clr_cmp_msk = inm(CLR_CMP_MSK);        pATIHW->clr_cmp_cntl = inm(CLR_CMP_CNTL);        /* Save context */        pATIHW->context_mask = inm(CONTEXT_MASK);        if (pATI->Chip >= ATI_CHIP_264GTPRO)        {            /* Save texture setup registers */            pATIHW->tex_size_pitch = inm(TEX_SIZE_PITCH);            pATIHW->tex_cntl = inm(TEX_CNTL);        }        if (pATI->Block1Base)        {            /* Save overlay & scaler registers */            pATIHW->overlay_y_x_start = inm(OVERLAY_Y_X_START);            pATIHW->overlay_y_x_end = inm(OVERLAY_Y_X_END);            pATIHW->overlay_graphics_key_clr = inm(OVERLAY_GRAPHICS_KEY_CLR);            pATIHW->overlay_graphics_key_msk = inm(OVERLAY_GRAPHICS_KEY_MSK);            pATIHW->overlay_key_cntl = inm(OVERLAY_KEY_CNTL);            pATIHW->overlay_scale_inc = inm(OVERLAY_SCALE_INC);            pATIHW->overlay_scale_cntl = inm(OVERLAY_SCALE_CNTL);            pATIHW->scaler_height_width = inm(SCALER_HEIGHT_WIDTH);            pATIHW->scaler_test = inm(SCALER_TEST);            pATIHW->video_format = inm(VIDEO_FORMAT);            if (pATI->Chip < ATI_CHIP_264VTB)            {                pATIHW->buf0_offset = inm(BUF0_OFFSET);                pATIHW->buf0_pitch = inm(BUF0_PITCH);                pATIHW->buf1_offset = inm(BUF1_OFFSET);                pATIHW->buf1_pitch = inm(BUF1_PITCH);            }            else            {                pATIHW->scaler_buf0_offset = inm(SCALER_BUF0_OFFSET);                pATIHW->scaler_buf1_offset = inm(SCALER_BUF1_OFFSET);                pATIHW->scaler_buf_pitch = inm(SCALER_BUF_PITCH);                pATIHW->overlay_exclusive_horz = inm(OVERLAY_EXCLUSIVE_HORZ);                pATIHW->overlay_exclusive_vert = inm(OVERLAY_EXCLUSIVE_VERT);                if (pATI->Chip >= ATI_CHIP_264GTPRO)                {                    pATIHW->scaler_colour_cntl = inm(SCALER_COLOUR_CNTL);                    pATIHW->scaler_h_coeff0 = inm(SCALER_H_COEFF0);                    pATIHW->scaler_h_coeff1 = inm(SCALER_H_COEFF1);                    pATIHW->scaler_h_coeff2 = inm(SCALER_H_COEFF2);                    pATIHW->scaler_h_coeff3 = inm(SCALER_H_COEFF3);                    pATIHW->scaler_h_coeff4 = inm(SCALER_H_COEFF4);                    pATIHW->scaler_buf0_offset_u = inm(SCALER_BUF0_OFFSET_U);                    pATIHW->scaler_buf0_offset_v = inm(SCALER_BUF0_OFFSET_V);                    pATIHW->scaler_buf1_offset_u = inm(SCALER_BUF1_OFFSET_U);                    pATIHW->scaler_buf1_offset_v = inm(SCALER_BUF1_OFFSET_V);                }            }        }        /* Restore aperture enablement */        outr(BUS_CNTL, pATIHW->bus_cntl);        outr(CONFIG_CNTL, pATIHW->config_cntl);    }}/* * ATIMach64Calculate -- * * This function is called to fill in the Mach64 portion of an ATIHWRec. */voidATIMach64Calculate(    ATIPtr         pATI,    ATIHWPtr       pATIHW,    DisplayModePtr pMode){    int VDisplay;    /* If not already done adjust horizontal timings */    if (!pMode->CrtcHAdjusted)    {        pMode->CrtcHAdjusted = TRUE;        /* XXX Deal with Blank Start/End and overscan later */        pMode->CrtcHDisplay = (pMode->HDisplay >> 3) - 1;        pMode->CrtcHSyncStart = (pMode->HSyncStart >> 3) - 1;        pMode->CrtcHSyncEnd = (pMode->HSyncEnd >> 3) - 1;        pMode->CrtcHTotal = (pMode->HTotal >> 3) - 1;        /* Make adjustments if sync pulse width is out-of-bounds */        if ((pMode->CrtcHSyncEnd - pMode->CrtcHSyncStart) >            (int)MaxBits(CRTC_H_SYNC_WID))        {            pMode->CrtcHSyncEnd =                pMode->CrtcHSyncStart + MaxBits(CRTC_H_SYNC_WID);        }        else if (pMode->CrtcHSyncStart == pMode->CrtcHSyncEnd)        {            if (pMode->CrtcHDisplay < pMode->CrtcHSyncStart)                pMode->CrtcHSyncStart--;            else if (pMode->CrtcHSyncEnd < pMode->CrtcHTotal)                pMode->CrtcHSyncEnd++;        }    }    /*     * Always re-do vertical adjustments.     */    pMode->CrtcVDisplay = pMode->VDisplay;    pMode->CrtcVSyncStart = pMode->VSyncStart;    pMode->CrtcVSyncEnd = pMode->VSyncEnd;    pMode->CrtcVTotal = pMode->VTotal;    if ((pATI->Chip >= ATI_CHIP_264CT) &&        ((pMode->Flags & V_DBLSCAN) || (pMode->VScan > 1)))    {        pMode->CrtcVDisplay <<= 1;        pMode->CrtcVSyncStart <<= 1;        pMode->CrtcVSyncEnd <<= 1;        pMode->CrtcVTotal <<= 1;    }    /*     * Might as well default to the same as VGA with respect to sync     * polarities.     */    if ((!(pMode->Flags & (V_PHSYNC | V_NHSYNC))) ||        (!(pMode->Flags & (V_PVSYNC | V_NVSYNC))))    {        pMode->Flags &= ~(V_PHSYNC | V_NHSYNC | V_PVSYNC | V_NVSYNC);        if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0)#ifdef TV_OUT       && !pATI->tvActive#endif)            VDisplay = pATI->LCDVertical;        else            VDisplay = pMode->CrtcVDisplay;        if (VDisplay < 400)            pMode->Flags |= V_PHSYNC | V_NVSYNC;        else if (VDisplay < 480)            pMode->Flags |= V_NHSYNC | V_PVSYNC;        else if (VDisplay < 768)            pMode->Flags |= V_NHSYNC | V_NVSYNC;        else            pMode->Flags |= V_PHSYNC | V_PVSYNC;    }    pMode->CrtcVDisplay--;    pMode->CrtcVSyncStart--;    pMode->CrtcVSyncEnd--;    pMode->CrtcVTotal--;    /* Make sure sync pulse is not too wide */    if ((pMode->CrtcVSyncEnd - pMode->CrtcVSyncStart) >         (int)MaxBits(CRTC_V_SYNC_WID))        pMode->CrtcVSyncEnd = pMode->CrtcVSyncStart + MaxBits(CRTC_V_SYNC_WID);    pMode->CrtcVAdjusted = TRUE;                /* Redundant */    /* Build register contents */    pATIHW->crtc_h_total_disp =        SetBits(pMode->CrtcHTotal, CRTC_H_TOTAL) |            SetBits(pMode->CrtcHDisplay, CRTC_H_DISP);    pATIHW->crtc_h_sync_strt_wid =        SetBits(pMode->CrtcHSyncStart, CRTC_H_SYNC_STRT) |            SetBits(pMode->CrtcHSkew, CRTC_H_SYNC_DLY) |         /* ? */            SetBits(GetBits(pMode->CrtcHSyncStart, 0x0100U),                CRTC_H_SYNC_STRT_HI) |            SetBits(pMode->CrtcHSyncEnd - pMode->CrtcHSyncStart,                CRTC_H_SYNC_WID);    if (pMode->Flags & V_NHSYNC)        pATIHW->crtc_h_sync_strt_wid |= CRTC_H_SYNC_POL;    pATIHW->crtc_v_total_disp =        SetBits(pMode->CrtcVTotal, CRTC_V_TOTAL) |            SetBits(pMode->CrtcVDisplay, CRTC_V_DISP);    pATIHW->crtc_v_sync_strt_wid =        SetBits(pMode->CrtcVSyncStart, CRTC_V_SYNC_STRT) |            SetBits(pMode->CrtcVSyncEnd - pMode->CrtcVSyncStart,                CRTC_V_SYNC_WID);    if (pMode->Flags & V_NVSYNC)        pATIHW->crtc_v_sync_strt_wid |= CRTC_V_SYNC_POL;    pATIHW->crtc_gen_cntl = inr(CRTC_GEN_CNTL) &        ~(CRTC_DBL_SCAN_EN | CRTC_INTERLACE_EN |          CRTC_HSYNC_DIS | CRTC_VSYNC_DIS | CRTC_CSYNC_EN |          CRTC_PIX_BY_2_EN | CRTC_DISPLAY_DIS | CRTC_VGA_XOVERSCAN |          CRTC_PIX_WIDTH | CRTC_BYTE_PIX_ORDER |          CRTC_VGA_128KAP_PAGING | CRTC_VFC_SYNC_TRISTATE |          CRTC_LOCK_REGS |              /* Already off, but ... */          CRTC_SYNC_TRISTATE | CRTC_DISP_REQ_EN |          CRTC_VGA_TEXT_132 | CRTC_CUR_B_TEST);    pATIHW->crtc_gen_cntl |=        CRTC_EXT_DISP_EN | CRTC_EN | CRTC_VGA_LINEAR | CRTC_CNT_EN;    switch (pATI->depth)    {#ifndef AVOID_CPIO        case 1:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_1BPP, CRTC_PIX_WIDTH);            break;        case 4:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_4BPP, CRTC_PIX_WIDTH);            break;#endif /* AVOID_CPIO */        case 8:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_8BPP, CRTC_PIX_WIDTH);            break;        case 15:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_15BPP, CRTC_PIX_WIDTH);            break;        case 16:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_16BPP, CRTC_PIX_WIDTH);            break;        case 24:            if (pATI->bitsPerPixel == 24)            {                pATIHW->crtc_gen_cntl |=                    SetBits(PIX_WIDTH_24BPP, CRTC_PIX_WIDTH);                break;            }            if (pATI->bitsPerPixel != 32)                break;            /* Fall through */        case 32:            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_32BPP, CRTC_PIX_WIDTH);            break;        default:            break;    }    if ((pMode->Flags & V_DBLSCAN) || (pMode->VScan > 1))        pATIHW->crtc_gen_cntl |= CRTC_DBL_SCAN_EN;    if (pMode->Flags & V_INTERLACE)        pATIHW->crtc_gen_cntl |= CRTC_INTERLACE_EN;    if (pATI->OptionCSync || (pMode->Flags & (V_CSYNC | V_PCSYNC)))        pATIHW->crtc_gen_cntl |= CRTC_CSYNC_EN;    /* For now, set display FIFO low water mark as high as possible */    if (pATI->Chip < ATI_CHIP_264VTB)        pATIHW->crtc_gen_cntl |= CRTC_FIFO_LWM;}/* * ATIMach64Set -- * * This function is called to load a Mach64's accelerator CRTC and draw engine. */voidATIMach64Set(    ATIPtr      pATI,    ATIHWPtr    pATIHW){#ifndef AVOID_CPIO    if (pATIHW->crtc == ATI_CRTC_MACH64)#endif /* AVOID_CPIO */    {        if ((pATIHW->FeedbackDivider > 0) &&            (pATI->ProgrammableClock != ATI_CLOCK_NONE))            ATIClockSet(pATI, pATIHW);          /* Programme clock */        if (pATI->DAC == ATI_DAC_IBMRGB514)            ATIRGB514Set(pATI, pATIHW);        /* Load Mach64 CRTC registers */        outr(CRTC_H_TOTAL_DISP, pATIHW->crtc_h_total_disp);        outr(CRTC_H_SYNC_STRT_WID, pATIHW->crtc_h_sync_strt_wid);        outr(CRTC_V_TOTAL_DISP, pATIHW->crtc_v_total_disp);        outr(CRTC_V_SYNC_STRT_WID, pATIHW->crtc_v_sync_strt_wid);        outr(CRTC_OFF_PITCH, pATIHW->crtc_off_pitch);        /* Load overscan registers */        outr(OVR_CLR, pATIHW->ovr_clr);        outr(OVR_WID_LEFT_RIGHT, pATIHW->ovr_wid_left_right);        outr(OVR_WID_TOP_BOTTOM, pATIHW->ovr_wid_top_bottom);        /* Load hardware cursor registers */        outr(CUR_CLR0, pATIHW->cur_clr0);        outr(CUR_CLR1, pATIHW->cur_clr1);        outr(CUR_OFFSET, pATIHW->cur_offset);        outr(CUR_HORZ_VERT_POSN, pATIHW->cur_horz_vert_posn);        outr(CUR_HORZ_VERT_OFF, pATIHW->cur_horz_vert_off);        /* Set pixel clock */        outr(CLOCK_CNTL, pATIHW->clock_cntl | CLOCK_STROBE);        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl);        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);        /* Finalise CRTC setup and turn on the screen */        outr(CRTC_GEN_CNTL, pATIHW->crtc_gen_cntl);    }    /* Load draw engine */    if (pATI->Block0Base)    {        /* Clobber MMIO cache */        (void)memset(pATI->MMIOCached, 0, SizeOf(pATI->MMIOCached));        /* Ensure apertures are enabled */        outr(BUS_CNTL, pATI->NewHW.bus_cntl);        outr(CONFIG_CNTL, pATI->NewHW.config_cntl);        pATI->EngineIsBusy = TRUE;      /* Force engine poll */        ATIMach64WaitForIdle(pATI);        /* Load FIFO size */        if (pATI->Chip >= ATI_CHIP_264VT4)        {            outm(GUI_CNTL, pATIHW->gui_cntl);            pATI->nAvailableFIFOEntries = 0;            ATIMach64PollEngineStatus(pATI);        }        /* Set FIFO depth */        pATI->nFIFOEntries = pATI->nAvailableFIFOEntries;        /* Load destination registers */        ATIMach64WaitForFIFO(pATI, 7);        outf(DST_OFF_PITCH, pATIHW->dst_off_pitch);        outf(DST_Y_X, SetWord(pATIHW->dst_x, 1) | SetWord(pATIHW->dst_y, 0));        outf(DST_HEIGHT, pATIHW->dst_height);        outf(DST_BRES_ERR, pATIHW->dst_bres_err);        outf(DST_BRES_INC, pATIHW->dst_bres_inc);        outf(DST_BRES_DEC, pATIHW->dst_bres_dec);        outf(DST_CNTL, pATIHW->dst_cntl);        if (pATI->Chip >= ATI_CHIP_264GTPRO)        {            /* Load ROP unit registers */            ATIMach64WaitForFIFO(pATI, 2);            outf(Z_CNTL, 0);            outf(ALPHA_TST_CNTL, 0);        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -