net: minor improvements in tcp client sockets
[quarnos.git] / resources / pci.h
blob70a88231d2bbb6584a51fea0440a94f98b74bfbf
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 unsigned int get_devclass() const;
43 inline unsigned int get_devid() const;
46 class pci : public bus {
47 private:
48 int dev_count;
50 static const int max_pci_buses;
51 static const int max_pci_devs;
52 static const int max_pci_funcs;
54 static int start_io;
56 static const int free_irqs[];
57 static int last_irq;
59 protected:
60 unsigned int get_conf(int bus, int dev, int func, int dword) const;
61 void set_conf(int bus, int dev, int func, int dword, int value);
62 bool dev_exist(int bus, int dev, int func);
63 int allocate_irq();
64 int allocate_io(int bar);
66 void device_found(int, int, int);
67 int scan_bus();
69 public:
70 pci_did alloc_resources(int bus, int dev, int func);
72 bool initialize();
73 bool type_added(manes::cds::component_name);
75 int get_count();
77 unsigned int get_devclass(p<did>) const;
78 unsigned int get_devid(p<did>) const;
80 static void register_type();
83 unsigned int pci_did::get_devclass() const {
84 return get_bus().cast<pci>()->get_devclass((did*)this);
87 unsigned int pci_did::get_devid() const {
88 return get_bus().cast<pci>()->get_devid((did*)this);
92 #endif