Lines Matching refs:par

496                              const struct aty128fb_par *par);
498 struct aty128fb_par *par);
500 static void aty128_get_pllinfo(struct aty128fb_par *par, void __iomem *bios);
502 const struct aty128fb_par *par);
504 static void aty128_timings(struct aty128fb_par *par);
505 static void aty128_init_engine(struct aty128fb_par *par);
506 static void aty128_reset_engine(const struct aty128fb_par *par);
507 static void aty128_flush_pixel_cache(const struct aty128fb_par *par);
508 static void do_wait_for_fifo(u16 entries, struct aty128fb_par *par);
509 static void wait_for_fifo(u16 entries, struct aty128fb_par *par);
510 static void wait_for_idle(struct aty128fb_par *par);
546 const struct aty128fb_par *par) in _aty_ld_le32() argument
548 return readl (par->regbase + regindex); in _aty_ld_le32()
552 const struct aty128fb_par *par) in _aty_st_le32() argument
554 writel (val, par->regbase + regindex); in _aty_st_le32()
558 const struct aty128fb_par *par) in _aty_ld_8() argument
560 return readb (par->regbase + regindex); in _aty_ld_8()
564 const struct aty128fb_par *par) in _aty_st_8() argument
566 writeb (val, par->regbase + regindex); in _aty_st_8()
569 #define aty_ld_le32(regindex) _aty_ld_le32(regindex, par)
570 #define aty_st_le32(regindex, val) _aty_st_le32(regindex, val, par)
571 #define aty_ld_8(regindex) _aty_ld_8(regindex, par)
572 #define aty_st_8(regindex, val) _aty_st_8(regindex, val, par)
578 #define aty_ld_pll(pll_index) _aty_ld_pll(pll_index, par)
579 #define aty_st_pll(pll_index, val) _aty_st_pll(pll_index, val, par)
583 const struct aty128fb_par *par) in _aty_ld_pll() argument
591 const struct aty128fb_par *par) in _aty_st_pll() argument
599 static int aty_pll_readupdate(const struct aty128fb_par *par) in aty_pll_readupdate() argument
605 static void aty_pll_wait_readupdate(const struct aty128fb_par *par) in aty_pll_wait_readupdate() argument
611 if (aty_pll_readupdate(par)) { in aty_pll_wait_readupdate()
622 static void aty_pll_writeupdate(const struct aty128fb_par *par) in aty_pll_writeupdate() argument
624 aty_pll_wait_readupdate(par); in aty_pll_writeupdate()
632 static int register_test(const struct aty128fb_par *par) in register_test() argument
655 static void do_wait_for_fifo(u16 entries, struct aty128fb_par *par) in do_wait_for_fifo() argument
661 par->fifo_slots = aty_ld_le32(GUI_STAT) & 0x0fff; in do_wait_for_fifo()
662 if (par->fifo_slots >= entries) in do_wait_for_fifo()
665 aty128_reset_engine(par); in do_wait_for_fifo()
670 static void wait_for_idle(struct aty128fb_par *par) in wait_for_idle() argument
674 do_wait_for_fifo(64, par); in wait_for_idle()
679 aty128_flush_pixel_cache(par); in wait_for_idle()
680 par->blitter_may_be_busy = 0; in wait_for_idle()
684 aty128_reset_engine(par); in wait_for_idle()
689 static void wait_for_fifo(u16 entries, struct aty128fb_par *par) in wait_for_fifo() argument
691 if (par->fifo_slots < entries) in wait_for_fifo()
692 do_wait_for_fifo(64, par); in wait_for_fifo()
693 par->fifo_slots -= entries; in wait_for_fifo()
697 static void aty128_flush_pixel_cache(const struct aty128fb_par *par) in aty128_flush_pixel_cache() argument
713 static void aty128_reset_engine(const struct aty128fb_par *par) in aty128_reset_engine() argument
717 aty128_flush_pixel_cache(par); in aty128_reset_engine()
741 static void aty128_init_engine(struct aty128fb_par *par) in aty128_init_engine() argument
745 wait_for_idle(par); in aty128_init_engine()
748 wait_for_fifo(1, par); in aty128_init_engine()
751 aty128_reset_engine(par); in aty128_init_engine()
753 pitch_value = par->crtc.pitch; in aty128_init_engine()
754 if (par->crtc.bpp == 24) { in aty128_init_engine()
758 wait_for_fifo(4, par); in aty128_init_engine()
775 (depth_to_dst(par->crtc.depth) << 8) | in aty128_init_engine()
786 wait_for_fifo(8, par); in aty128_init_engine()
804 wait_for_idle(par); in aty128_init_engine()
831 static void __iomem *aty128_map_ROM(const struct aty128fb_par *par, in aty128_map_ROM() argument
918 static void aty128_get_pllinfo(struct aty128fb_par *par, in aty128_get_pllinfo() argument
927 par->constants.ppll_max = BIOS_IN32(bios_pll + 0x16); in aty128_get_pllinfo()
928 par->constants.ppll_min = BIOS_IN32(bios_pll + 0x12); in aty128_get_pllinfo()
929 par->constants.xclk = BIOS_IN16(bios_pll + 0x08); in aty128_get_pllinfo()
930 par->constants.ref_divider = BIOS_IN16(bios_pll + 0x10); in aty128_get_pllinfo()
931 par->constants.ref_clk = BIOS_IN16(bios_pll + 0x0e); in aty128_get_pllinfo()
934 par->constants.ppll_max, par->constants.ppll_min, in aty128_get_pllinfo()
935 par->constants.xclk, par->constants.ref_divider, in aty128_get_pllinfo()
936 par->constants.ref_clk); in aty128_get_pllinfo()
941 static void __iomem *aty128_find_mem_vbios(struct aty128fb_par *par) in aty128_find_mem_vbios() argument
966 static void aty128_timings(struct aty128fb_par *par) in aty128_timings() argument
979 if (!par->constants.ref_clk) in aty128_timings()
980 par->constants.ref_clk = 2950; in aty128_timings()
988 par->constants.xclk = round_div((2 * Nx * par->constants.ref_clk), in aty128_timings()
991 par->constants.ref_divider = in aty128_timings()
995 if (!par->constants.ref_divider) { in aty128_timings()
996 par->constants.ref_divider = 0x3b; in aty128_timings()
999 aty_pll_writeupdate(par); in aty128_timings()
1001 aty_st_pll(PPLL_REF_DIV, par->constants.ref_divider); in aty128_timings()
1002 aty_pll_writeupdate(par); in aty128_timings()
1005 if (!par->constants.ppll_min) in aty128_timings()
1006 par->constants.ppll_min = 12500; in aty128_timings()
1007 if (!par->constants.ppll_max) in aty128_timings()
1008 par->constants.ppll_max = 25000; /* 23000 on some cards? */ in aty128_timings()
1009 if (!par->constants.xclk) in aty128_timings()
1010 par->constants.xclk = 0x1d4d; /* same as mclk */ in aty128_timings()
1012 par->constants.fifo_width = 128; in aty128_timings()
1013 par->constants.fifo_depth = 32; in aty128_timings()
1017 par->mem = &sdr_128; in aty128_timings()
1020 par->mem = &sdr_sgram; in aty128_timings()
1023 par->mem = &ddr_sgram; in aty128_timings()
1026 par->mem = &sdr_sgram; in aty128_timings()
1038 const struct aty128fb_par *par) in aty128_set_crtc() argument
1055 const struct aty128fb_par *par) in aty128_var_to_crtc() argument
1113 if ((u32)(vxres * vyres * bytpp) > par->vram_size) { in aty128_var_to_crtc()
1300 static void aty128_set_crt_enable(struct aty128fb_par *par, int on) in aty128_set_crt_enable() argument
1312 static void aty128_set_lcd_enable(struct aty128fb_par *par, int on) in aty128_set_lcd_enable() argument
1316 struct fb_info *info = pci_get_drvdata(par->pdev); in aty128_set_lcd_enable()
1341 const struct aty128fb_par *par) in aty128_set_pll() argument
1356 aty_pll_wait_readupdate(par); in aty128_set_pll()
1357 aty_st_pll(PPLL_REF_DIV, par->constants.ref_divider & 0x3ff); in aty128_set_pll()
1358 aty_pll_writeupdate(par); in aty128_set_pll()
1367 aty_pll_wait_readupdate(par); in aty128_set_pll()
1369 aty_pll_writeupdate(par); in aty128_set_pll()
1371 aty_pll_wait_readupdate(par); in aty128_set_pll()
1373 aty_pll_writeupdate(par); in aty128_set_pll()
1381 const struct aty128fb_par *par) in aty128_var_to_pll() argument
1383 const struct aty128_constants c = par->constants; in aty128_var_to_pll()
1436 const struct aty128fb_par *par) in aty128_set_fifo() argument
1446 const struct aty128fb_par *par) in aty128_ddafifo() argument
1448 const struct aty128_meminfo *m = par->mem; in aty128_ddafifo()
1449 u32 xclk = par->constants.xclk; in aty128_ddafifo()
1450 u32 fifo_width = par->constants.fifo_width; in aty128_ddafifo()
1451 u32 fifo_depth = par->constants.fifo_depth; in aty128_ddafifo()
1505 struct aty128fb_par *par = info->par; in aty128fb_set_par() local
1509 if ((err = aty128_decode_var(&info->var, par)) != 0) in aty128fb_set_par()
1512 if (par->blitter_may_be_busy) in aty128fb_set_par()
1513 wait_for_idle(par); in aty128fb_set_par()
1531 aty128_set_crtc(&par->crtc, par); in aty128fb_set_par()
1532 aty128_set_pll(&par->pll, par); in aty128fb_set_par()
1533 aty128_set_fifo(&par->fifo_reg, par); in aty128fb_set_par()
1538 if (par->crtc.bpp == 32) in aty128fb_set_par()
1540 else if (par->crtc.bpp == 16) in aty128fb_set_par()
1547 info->fix.line_length = (par->crtc.vxres * par->crtc.bpp) >> 3; in aty128fb_set_par()
1548 info->fix.visual = par->crtc.bpp == 8 ? FB_VISUAL_PSEUDOCOLOR in aty128fb_set_par()
1551 if (par->chip_gen == rage_M3) { in aty128fb_set_par()
1552 aty128_set_crt_enable(par, par->crt_on); in aty128fb_set_par()
1553 aty128_set_lcd_enable(par, par->lcd_on); in aty128fb_set_par()
1555 if (par->accel_flags & FB_ACCELF_TEXT) in aty128fb_set_par()
1556 aty128_init_engine(par); in aty128fb_set_par()
1560 (((par->crtc.h_total>>16) & 0xff)+1)*8, in aty128fb_set_par()
1561 ((par->crtc.v_total>>16) & 0x7ff)+1, in aty128fb_set_par()
1562 par->crtc.bpp, in aty128fb_set_par()
1563 par->crtc.vxres*par->crtc.bpp/8); in aty128fb_set_par()
1574 struct aty128fb_par *par) in aty128_decode_var() argument
1581 if ((err = aty128_var_to_crtc(var, &crtc, par))) in aty128_decode_var()
1584 if ((err = aty128_var_to_pll(var->pixclock, &pll, par))) in aty128_decode_var()
1587 if ((err = aty128_ddafifo(&fifo_reg, &pll, crtc.depth, par))) in aty128_decode_var()
1590 par->crtc = crtc; in aty128_decode_var()
1591 par->pll = pll; in aty128_decode_var()
1592 par->fifo_reg = fifo_reg; in aty128_decode_var()
1593 par->accel_flags = var->accel_flags; in aty128_decode_var()
1600 const struct aty128fb_par *par) in aty128_encode_var() argument
1604 if ((err = aty128_crtc_to_var(&par->crtc, var))) in aty128_encode_var()
1607 if ((err = aty128_pll_to_var(&par->pll, var))) in aty128_encode_var()
1615 var->accel_flags = par->accel_flags; in aty128_encode_var()
1624 struct aty128fb_par par; in aty128fb_check_var() local
1627 par = *(struct aty128fb_par *)info->par; in aty128fb_check_var()
1628 if ((err = aty128_decode_var(var, &par)) != 0) in aty128fb_check_var()
1630 aty128_encode_var(var, &par); in aty128fb_check_var()
1641 struct aty128fb_par *par = fb->par; in aty128fb_pan_display() local
1646 xres = (((par->crtc.h_total >> 16) & 0xff) + 1) << 3; in aty128fb_pan_display()
1647 yres = ((par->crtc.v_total >> 16) & 0x7ff) + 1; in aty128fb_pan_display()
1652 if (xoffset+xres > par->crtc.vxres || yoffset+yres > par->crtc.vyres) in aty128fb_pan_display()
1655 par->crtc.xoffset = xoffset; in aty128fb_pan_display()
1656 par->crtc.yoffset = yoffset; in aty128fb_pan_display()
1658 offset = ((yoffset * par->crtc.vxres + xoffset) * (par->crtc.bpp >> 3)) in aty128fb_pan_display()
1661 if (par->crtc.bpp == 24) in aty128fb_pan_display()
1674 struct aty128fb_par *par) in aty128_st_pal() argument
1676 if (par->chip_gen == rage_M3) { in aty128_st_pal()
1700 struct aty128fb_par *par = info->par; in aty128fb_sync() local
1702 if (par->blitter_may_be_busy) in aty128fb_sync()
1703 wait_for_idle(par); in aty128fb_sync()
1770 static int aty128_bl_get_level_brightness(struct aty128fb_par *par, in aty128_bl_get_level_brightness() argument
1773 struct fb_info *info = pci_get_drvdata(par->pdev); in aty128_bl_get_level_brightness()
1799 struct aty128fb_par *par = bl_get_data(bd); in aty128_bl_update_status() local
1805 !par->lcd_on) in aty128_bl_update_status()
1822 reg |= (aty128_bl_get_level_brightness(par, level) << in aty128_bl_update_status()
1834 reg |= (aty128_bl_get_level_brightness(par, 0) << in aty128_bl_update_status()
1864 static void aty128_bl_init(struct aty128fb_par *par) in aty128_bl_init() argument
1867 struct fb_info *info = pci_get_drvdata(par->pdev); in aty128_bl_init()
1872 if (par->chip_gen != rage_M3) in aty128_bl_init()
1885 bd = backlight_device_register(name, info->dev, par, &aty128_bl_data, in aty128_bl_init()
1924 struct aty128fb_par *par = data; in aty128_early_resume() local
1928 pci_restore_state(par->pdev); in aty128_early_resume()
1929 aty128_do_resume(par->pdev); in aty128_early_resume()
1937 struct aty128fb_par *par = info->par; in aty128_init() local
1957 if (par->vram_size % (1024 * 1024) == 0) in aty128_init()
1958 printk("%dM %s\n", par->vram_size / (1024*1024), par->mem->name); in aty128_init()
1960 printk("%dk %s\n", par->vram_size / 1024, par->mem->name); in aty128_init()
1962 par->chip_gen = ent->driver_data; in aty128_init()
1968 par->lcd_on = default_lcd_on; in aty128_init()
1969 par->crt_on = default_crt_on; in aty128_init()
1975 if (par->chip_gen == rage_M3) { in aty128_init()
1983 pmac_set_early_video_resume(aty128_early_resume, par); in aty128_init()
2049 if (par->chip_gen == rage_M3) in aty128_init()
2061 aty128_init_engine(par); in aty128_init()
2063 par->pdev = pdev; in aty128_init()
2064 par->asleep = 0; in aty128_init()
2065 par->lock_blank = 0; in aty128_init()
2069 aty128_bl_init(par); in aty128_init()
2086 struct aty128fb_par *par; in aty128_probe() local
2121 par = info->par; in aty128_probe()
2123 info->pseudo_palette = par->pseudo_palette; in aty128_probe()
2127 par->regbase = pci_ioremap_bar(pdev, 2); in aty128_probe()
2128 if (!par->regbase) in aty128_probe()
2133 par->vram_size = aty_ld_le32(CNFG_MEMSIZE) & 0x03FFFFFF; in aty128_probe()
2136 info->screen_base = ioremap(fb_addr, par->vram_size); in aty128_probe()
2143 info->fix.smem_len = par->vram_size; in aty128_probe()
2147 if (!register_test(par)) { in aty128_probe()
2153 bios = aty128_map_ROM(par, pdev); in aty128_probe()
2156 bios = aty128_find_mem_vbios(par); in aty128_probe()
2162 aty128_get_pllinfo(par, bios); in aty128_probe()
2167 aty128_timings(par); in aty128_probe()
2175 par->mtrr.vram = mtrr_add(info->fix.smem_start, in aty128_probe()
2176 par->vram_size, MTRR_TYPE_WRCOMB, 1); in aty128_probe()
2177 par->mtrr.vram_valid = 1; in aty128_probe()
2187 iounmap(par->regbase); in aty128_probe()
2202 struct aty128fb_par *par; in aty128_remove() local
2207 par = info->par; in aty128_remove()
2216 if (par->mtrr.vram_valid) in aty128_remove()
2217 mtrr_del(par->mtrr.vram, info->fix.smem_start, in aty128_remove()
2218 par->vram_size); in aty128_remove()
2220 iounmap(par->regbase); in aty128_remove()
2238 struct aty128fb_par *par = fb->par; in aty128fb_blank() local
2241 if (par->lock_blank || par->asleep) in aty128fb_blank()
2264 if (par->chip_gen == rage_M3) { in aty128fb_blank()
2265 aty128_set_crt_enable(par, par->crt_on && !blank); in aty128fb_blank()
2266 aty128_set_lcd_enable(par, par->lcd_on && !blank); in aty128fb_blank()
2280 struct aty128fb_par *par = info->par; in aty128fb_setcolreg() local
2283 || (par->crtc.depth == 16 && regno > 63) in aty128fb_setcolreg()
2284 || (par->crtc.depth == 15 && regno > 31)) in aty128fb_setcolreg()
2295 switch (par->crtc.depth) { in aty128fb_setcolreg()
2312 if (par->crtc.depth == 16 && regno > 0) { in aty128fb_setcolreg()
2320 par->green[regno] = green; in aty128fb_setcolreg()
2322 par->red[regno] = red; in aty128fb_setcolreg()
2323 par->blue[regno] = blue; in aty128fb_setcolreg()
2324 aty128_st_pal(regno * 8, red, par->green[regno*2], in aty128fb_setcolreg()
2325 blue, par); in aty128fb_setcolreg()
2327 red = par->red[regno/2]; in aty128fb_setcolreg()
2328 blue = par->blue[regno/2]; in aty128fb_setcolreg()
2330 } else if (par->crtc.bpp == 16) in aty128fb_setcolreg()
2332 aty128_st_pal(regno, red, green, blue, par); in aty128fb_setcolreg()
2347 struct aty128fb_par *par = info->par; in aty128fb_ioctl() local
2353 if (par->chip_gen != rage_M3) in aty128fb_ioctl()
2358 par->lcd_on = (value & 0x01) != 0; in aty128fb_ioctl()
2359 par->crt_on = (value & 0x02) != 0; in aty128fb_ioctl()
2360 if (!par->crt_on && !par->lcd_on) in aty128fb_ioctl()
2361 par->lcd_on = 1; in aty128fb_ioctl()
2362 aty128_set_crt_enable(par, par->crt_on); in aty128fb_ioctl()
2363 aty128_set_lcd_enable(par, par->lcd_on); in aty128fb_ioctl()
2366 if (par->chip_gen != rage_M3) in aty128fb_ioctl()
2368 value = (par->crt_on << 1) | par->lcd_on; in aty128fb_ioctl()
2381 struct fb_info_aty128 *par)
2388 dstval = depth_to_dst(par->current_par.crtc.depth);
2398 wait_for_fifo(2, par);
2402 wait_for_fifo(6, par);
2411 par->blitter_may_be_busy = 1;
2413 wait_for_fifo(2, par);
2438 static void aty128_set_suspend(struct aty128fb_par *par, int suspend) in aty128_set_suspend() argument
2441 struct pci_dev *pdev = par->pdev; in aty128_set_suspend()
2443 if (!par->pdev->pm_cap) in aty128_set_suspend()
2477 struct aty128fb_par *par = info->par; in aty128_pci_suspend() local
2509 wait_for_idle(par); in aty128_pci_suspend()
2510 aty128_reset_engine(par); in aty128_pci_suspend()
2511 wait_for_idle(par); in aty128_pci_suspend()
2517 par->asleep = 1; in aty128_pci_suspend()
2518 par->lock_blank = 1; in aty128_pci_suspend()
2534 aty128_set_suspend(par, 1); in aty128_pci_suspend()
2546 struct aty128fb_par *par = info->par; in aty128_do_resume() local
2557 aty128_set_suspend(par, 0); in aty128_do_resume()
2558 par->asleep = 0; in aty128_do_resume()
2561 aty128_reset_engine(par); in aty128_do_resume()
2562 wait_for_idle(par); in aty128_do_resume()
2571 par->lock_blank = 0; in aty128_do_resume()