source: mainline/uspace/srv/dd/pci.h@ fcbd1be

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since fcbd1be was fcbd1be, checked in by Lenka Trochtova <trochtova.lenka@…>, 16 years ago

the name of the hierarchical driver was changed II

  • Property mode set to 100644
File size: 1.7 KB
RevLine 
[fcbd1be]1#ifndef PCI_H
2#define PCI_H
3
4#include <adt/list.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9struct pci_drv;
10struct pci_dev;
11struct pci_bus;
12struct pci_drv_ops;
13
14typedef struct pci_drv pci_drv_t;
15typedef struct pci_dev pci_dev_t;
16typedef struct pci_bus pci_bus_t;
17typedef struct pci_drv_ops pci_drv_ops_t;
18
19struct pci_drv {
20 const char *name;
21 link_t link;
22 int vendor_id;
23 int device_id;
24 pci_drv_ops_t *ops;
25};
26
27struct pci_dev{
28 link_t link;
29 pci_bus_t *bus;
30 int dev;
31 int fn;
32
33 int vendor_id;
34 int device_id;
35 pci_drv_t *driver;
36};
37
38struct pci_drv_ops {
39 int (*add_device)(pci_dev_t *dev);
40
41};
42
43struct pci_bus {
44 link_t link;
45 int num;
46 // architecture-specific usage
47 void *data;
48};
49
50void pci_bus_register(pci_bus_t *bus);
51void pci_device_register(pci_dev_t *dev);
52void pci_driver_register(pci_drv_t *drv);
53
54void pci_bus_scan(pci_bus_t *bus);
55
56static inline pci_bus_t* pci_alloc_bus()
57{
58 pci_bus_t *bus = (pci_bus_t *)malloc(sizeof(pci_bus_t));
59 link_initialize(&bus->link);
60 bus->num = 0;
61 bus->data = NULL;
62 return bus;
63}
64
65// arch. spec. initialization of pci bus structure - of its data member
66void pci_init_bus_data(pci_bus_t *bus, pci_bus_t *parent);
67
68static inline void pci_init_bus(pci_bus_t *bus, pci_bus_t *parent, int bus_num)
69{
70 bus->num = bus_num;
71 pci_init_bus_data(bus, parent);
72}
73
74static inline void pci_free_bus(pci_bus_t *bus)
75{
76 free(bus);
77}
78
79static inline pci_dev_t* pci_alloc_dev()
80{
81 pci_dev_t *dev = (pci_dev_t *)malloc(sizeof(pci_dev_t));
82 bzero(dev, sizeof(pci_dev_t));
83 link_initialize(&dev->link);
84 return dev;
85}
86
87static inline void pci_init_dev(pci_dev_t *dev, pci_bus_t *bus, int devnum, int fn)
88{
89 dev->bus = bus;
90 dev->dev = devnum;
91 dev->fn = fn;
92}
93
94static inline void pci_free_dev(pci_dev_t *dev)
95{
96 free(dev);
97}
98
99#endif
Note: See TracBrowser for help on using the repository browser.