Subversion Repositories HelenOS

Rev

Rev 4399 | Rev 4537 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef PCI_H
  2. #define PCI_H
  3.  
  4. //#include <arch/types.h>
  5. #include <libadt/list.h>
  6. #include <stdio.h>
  7. #include <stdlib.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.     link_t link;
  21.     int vendor_id;
  22.     int device_id; 
  23.     pci_drv_ops_t *ops;
  24. };
  25.  
  26. struct pci_dev{
  27.     link_t link;
  28.     pci_bus_t *bus;
  29.     int dev;
  30.     int fn;
  31.    
  32.     int vendor_id;
  33.     int device_id;
  34.     pci_drv_t *driver; 
  35. };
  36.  
  37. struct pci_drv_ops {
  38.     int (*add_device)(pci_dev_t *dev);
  39.    
  40. };
  41.  
  42. struct pci_bus {
  43.     link_t link;
  44.     int num;
  45.     // architecture-specific usage
  46.     void *data;
  47. };
  48.  
  49. void pci_bus_register(pci_bus_t *bus);
  50. void pci_device_register(pci_dev_t *dev);
  51. void pci_driver_register(pci_drv_t *drv);
  52.  
  53. void pci_bus_scan(pci_bus_t *bus);
  54.  
  55. static inline pci_bus_t* pci_alloc_bus()
  56. {
  57.     pci_bus_t *bus = (pci_bus_t *)malloc(sizeof(pci_bus_t));
  58.     link_initialize(&bus->link);
  59.     bus->num = 0;
  60.     bus->data = NULL;
  61.     return bus;
  62. }
  63.  
  64. // arch. spec. initialization of pci bus structure - of its data member
  65. void pci_init_bus_data(pci_bus_t *bus, pci_bus_t *parent);
  66.  
  67. static inline void pci_init_bus(pci_bus_t *bus, pci_bus_t *parent, int bus_num)
  68. {
  69.     bus->num = bus_num;
  70.     pci_init_bus_data(bus, parent);
  71. }
  72.  
  73. static inline void pci_free_bus(pci_bus_t *bus)
  74. {
  75.     free(bus);
  76. }
  77.  
  78. static inline pci_dev_t* pci_alloc_dev()
  79. {
  80.     pci_dev_t *dev = (pci_dev_t *)malloc(sizeof(pci_dev_t));
  81.     bzero(dev, sizeof(pci_dev_t));
  82.     link_initialize(&dev->link);   
  83.     return dev;
  84. }
  85.  
  86. static inline void pci_init_dev(pci_dev_t *dev, pci_bus_t *bus, int devnum, int fn)
  87. {
  88.     dev->bus = bus;
  89.     dev->dev = devnum;
  90.     dev->fn = fn;
  91. }
  92.  
  93. static inline void pci_free_dev(pci_dev_t *dev)
  94. {
  95.     free(dev);
  96. }
  97.  
  98. #endif
  99.