]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/io/server/src/drivers/pci/intel_gma500.cc
update
[l4.git] / l4 / pkg / io / server / src / drivers / pci / intel_gma500.cc
1 /*
2  * (c) 2010-2014 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
3  *               Alexander Warg <alexander.warg@kernkonzept.com>
4  *               Steffen Liebergeld <steffen.liebergeld@kernkonzept.com>
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  */
10 #include "cfg.h"
11 #include "debug.h"
12 #include "pci.h"
13
14 namespace {
15
16 using namespace Hw::Pci;
17
18 struct Pci_intel_gma500_drv : Driver
19 {
20   int probe(Dev *d)
21   {
22     d_printf(DBG_DEBUG, "Found Intel gma500 device\n");
23
24     l4_uint32_t v;
25
26     // GC - Graphics Control
27     d->cfg_read(0x52, &v, Cfg_short);
28
29     unsigned gfx_mem_sz = 0;
30
31     // VGA disabled?
32     if (v & 2)
33       return 1;
34
35     switch ((v >> 4) & 7)
36       {
37         case 1: gfx_mem_sz = 1 << 20; break;
38         case 2: gfx_mem_sz = 4 << 20; break;
39         case 3: gfx_mem_sz = 8 << 20; break;
40         default: return 1;
41       }
42
43     // BSM - Base of Stolen Memory
44     d->cfg_read(0x5c, &v, Cfg_long);
45     v &= 0xfff00000;
46
47     unsigned flags =   Resource::Mmio_res
48                      | Resource::F_prefetchable;
49     l4_addr_t end = v + gfx_mem_sz - 1;
50
51     Resource *res = new Resource(flags, v, end);
52     d->host()->add_resource(res);
53     Device *p;
54     for (p = d->host()->parent(); p && p->parent(); p = p->parent())
55       ;
56
57     if (p)
58       p->request_child_resource(res, d->host());
59     return 0;
60   }
61 };
62
63 static Pci_intel_gma500_drv _pci_intel_gma500_drv;
64
65 struct Init
66 {
67   Init()
68   {
69     _pci_intel_gma500_drv.register_driver(0x8086, 0x8108);
70   }
71 };
72
73 static Init init;
74
75 }