Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
  3  * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
  4 
  5  * This program is free software; you can redistribute it and/or
  6  * modify it under the terms of the GNU General Public
  7  * License as published by the Free Software Foundation;
  8  * either version 2, or (at your option) any later version.
  9 
 10  * This program is distributed in the hope that it will be useful,
 11  * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
 12  * the implied warranty of MERCHANTABILITY or FITNESS FOR
 13  * A PARTICULAR PURPOSE.See the GNU General Public License
 14  * for more details.
 15 
 16  * You should have received a copy of the GNU General Public License
 17  * along with this program; if not, write to the Free Software
 18  * Foundation, Inc.,
 19  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 20  */
 21 
 22 #include "global.h"
 23 
 24 /* Get frame buffer size from VGA BIOS */
 25 
 26 unsigned int viafb_get_memsize(void)
 27 {
 28         unsigned int m;
 29 
 30         /* If memory size provided by user */
 31         if (viafb_memsize)
 32                 m = viafb_memsize * Mb;
 33         else {
 34                 m = (unsigned int)viafb_read_reg(VIASR, SR39);
 35                 m = m * (4 * Mb);
 36 
 37                 if ((m < (16 * Mb)) || (m > (64 * Mb)))
 38                         m = 16 * Mb;
 39         }
 40         DEBUG_MSG(KERN_INFO "framebuffer size = %d Mb\n", m / Mb);
 41         return m;
 42 }
 43 
 44 /* Get Video Buffer Starting Physical Address(back door)*/
 45 
 46 unsigned long viafb_get_videobuf_addr(void)
 47 {
 48         struct pci_dev *pdev = NULL;
 49         unsigned char sys_mem;
 50         unsigned char video_mem;
 51         unsigned long sys_mem_size;
 52         unsigned long video_mem_size;
 53         /*system memory = 256 MB, video memory 64 MB */
 54         unsigned long vmem_starting_adr = 0x0C000000;
 55 
 56         pdev =
 57             (struct pci_dev *)pci_get_device(VIA_K800_BRIDGE_VID,
 58                                              VIA_K800_BRIDGE_DID, NULL);
 59         if (pdev != NULL) {
 60                 pci_read_config_byte(pdev, VIA_K800_SYSTEM_MEMORY_REG,
 61                                      &sys_mem);
 62                 pci_read_config_byte(pdev, VIA_K800_VIDEO_MEMORY_REG,
 63                                      &video_mem);
 64                 video_mem = (video_mem & 0x70) >> 4;
 65                 sys_mem_size = ((unsigned long)sys_mem) << 24;
 66                 if (video_mem != 0)
 67                         video_mem_size = (1 << (video_mem)) * 1024 * 1024;
 68                 else
 69                         video_mem_size = 0;
 70 
 71                 vmem_starting_adr = sys_mem_size - video_mem_size;
 72                 pci_dev_put(pdev);
 73         }
 74 
 75         DEBUG_MSG(KERN_INFO "Video Memory Starting Address = %lx \n",
 76                   vmem_starting_adr);
 77         return vmem_starting_adr;
 78 }
 79 
  This page was automatically generated by the LXR engine.