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
|
Rev | Line | |
---|
[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 |
|
---|
| 9 | struct pci_drv;
|
---|
| 10 | struct pci_dev;
|
---|
| 11 | struct pci_bus;
|
---|
| 12 | struct pci_drv_ops;
|
---|
| 13 |
|
---|
| 14 | typedef struct pci_drv pci_drv_t;
|
---|
| 15 | typedef struct pci_dev pci_dev_t;
|
---|
| 16 | typedef struct pci_bus pci_bus_t;
|
---|
| 17 | typedef struct pci_drv_ops pci_drv_ops_t;
|
---|
| 18 |
|
---|
| 19 | struct 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 |
|
---|
| 27 | struct 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 |
|
---|
| 38 | struct pci_drv_ops {
|
---|
| 39 | int (*add_device)(pci_dev_t *dev);
|
---|
| 40 |
|
---|
| 41 | };
|
---|
| 42 |
|
---|
| 43 | struct pci_bus {
|
---|
| 44 | link_t link;
|
---|
| 45 | int num;
|
---|
| 46 | // architecture-specific usage
|
---|
| 47 | void *data;
|
---|
| 48 | };
|
---|
| 49 |
|
---|
| 50 | void pci_bus_register(pci_bus_t *bus);
|
---|
| 51 | void pci_device_register(pci_dev_t *dev);
|
---|
| 52 | void pci_driver_register(pci_drv_t *drv);
|
---|
| 53 |
|
---|
| 54 | void pci_bus_scan(pci_bus_t *bus);
|
---|
| 55 |
|
---|
| 56 | static 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
|
---|
| 66 | void pci_init_bus_data(pci_bus_t *bus, pci_bus_t *parent);
|
---|
| 67 |
|
---|
| 68 | static 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 |
|
---|
| 74 | static inline void pci_free_bus(pci_bus_t *bus)
|
---|
| 75 | {
|
---|
| 76 | free(bus);
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | static 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 |
|
---|
| 87 | static 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 |
|
---|
| 94 | static 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.