usb: getting string descriptors, minor improvements
[quarnos.git] / resources / pci.h
blob3bed1e0d9c78b133db5fd7f883133d1fe74d94e4
1 /* Quarn OS
3 * PCI bus
5 * Copyright (C) 2008-2009 Pawel Dziepak
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #ifndef _PCI_H_
24 #define _PCI_H_
26 #include "bus.h"
27 #include "did.h"
29 namespace resources {
31 class pci_did : public io_did {
32 public:
33 int irq;
34 int dma_channel;
35 void *memory_base;
36 int ibus, device, function;
38 pci_did(p<bus> b) : io_did(b) {}
39 pci_did() {}
40 virtual ~pci_did() {}
42 inline virtual void accepted();
44 inline unsigned int get_devclass() const;
45 inline unsigned int get_devid() const;
48 class pci : public bus {
49 private:
50 int dev_count;
52 static const int max_pci_buses;
53 static const int max_pci_devs;
54 static const int max_pci_funcs;
56 static int start_io;
58 static const int free_irqs[];
59 static int last_irq;
61 protected:
62 unsigned int get_conf(int bus, int dev, int func, int dword) const;
63 void set_conf(int bus, int dev, int func, int dword, int value);
64 bool dev_exist(int bus, int dev, int func);
65 int allocate_irq();
66 int allocate_io(int bar);
68 void device_found(int, int, int);
69 int scan_bus();
71 public:
72 void alloc_resources(p<pci_did> id);
74 bool initialize();
75 bool type_added(manes::cds::component_name);
77 int get_count();
79 unsigned int get_devclass(p<did>) const;
80 unsigned int get_devid(p<did>) const;
82 static void register_type();
85 unsigned int pci_did::get_devclass() const {
86 return get_bus().cast<pci>()->get_devclass((did*)this);
89 unsigned int pci_did::get_devid() const {
90 return get_bus().cast<pci>()->get_devid((did*)this);
93 void pci_did::accepted() {
94 get_bus().cast<pci>()->alloc_resources(this);
98 #endif