Commit 317b3c21 authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds

fbdev: detect primary display device

Add function helper, fb_is_primary_device().  Given struct fb_info, it will
return a nonzero value if the device is the primary display.

Currently, only the i386 is supported where the function checks for the
IORESOURCE_ROM_SHADOW flag.
Signed-off-by: default avatarAntonino Daplas <adaplas@gmail.com>
Cc: David Miller <davem@davemloft.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 10eb2659
...@@ -108,6 +108,7 @@ drivers-$(CONFIG_PCI) += arch/i386/pci/ ...@@ -108,6 +108,7 @@ drivers-$(CONFIG_PCI) += arch/i386/pci/
# must be linked after kernel/ # must be linked after kernel/
drivers-$(CONFIG_OPROFILE) += arch/i386/oprofile/ drivers-$(CONFIG_OPROFILE) += arch/i386/oprofile/
drivers-$(CONFIG_PM) += arch/i386/power/ drivers-$(CONFIG_PM) += arch/i386/power/
drivers-$(CONFIG_FB) += arch/i386/video/
CFLAGS += $(mflags-y) CFLAGS += $(mflags-y)
AFLAGS += $(mflags-y) AFLAGS += $(mflags-y)
......
obj-$(CONFIG_FB) += fbdev.o
/*
* arch/i386/video/fbdev.c - i386 Framebuffer
*
* Copyright (C) 2007 Antonino Daplas <adaplas@gmail.com>
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
* for more details.
*
*/
#include <linux/fb.h>
#include <linux/pci.h>
int fb_is_primary_device(struct fb_info *info)
{
struct device *device;
struct pci_dev *pci_dev = NULL;
struct resource *res = NULL;
int retval = 0;
device = info->device;
if (device)
pci_dev = to_pci_dev(device);
if (pci_dev)
res = &pci_dev->resource[PCI_ROM_RESOURCE];
if (res && res->flags & IORESOURCE_ROM_SHADOW)
retval = 1;
return retval;
}
EXPORT_SYMBOL(fb_is_primary_device);
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/device.h>
/* Caching is off in the I/O space quadrant by design. */ /* Caching is off in the I/O space quadrant by design. */
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -12,4 +13,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -12,4 +13,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
| (_PAGE_BUFFER | _PAGE_DIRTY)); | (_PAGE_BUFFER | _PAGE_DIRTY));
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
extern int fb_is_primary_device(struct fb_info *info);
static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
unsigned long off) unsigned long off)
{ {
......
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/efi.h> #include <linux/efi.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -14,4 +15,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -14,4 +15,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -25,4 +26,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -25,4 +26,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
} }
#endif /* CONFIG_SUN3 */ #endif /* CONFIG_SUN3 */
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -12,4 +13,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -12,4 +13,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot); vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -10,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -9,4 +10,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -9,4 +10,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -11,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma, ...@@ -11,4 +11,9 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
pgprot_val(vma->vm_page_prot) |= _PAGE_PCD; pgprot_val(vma->vm_page_prot) |= _PAGE_PCD;
} }
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
#ifndef _ASM_FB_H_ #ifndef _ASM_FB_H_
#define _ASM_FB_H_ #define _ASM_FB_H_
#include <linux/fb.h>
#define fb_pgprotect(...) do {} while (0) #define fb_pgprotect(...) do {} while (0)
static inline int fb_is_primary_device(struct fb_info *info)
{
return 0;
}
#endif /* _ASM_FB_H_ */ #endif /* _ASM_FB_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment