947cb986fef0b79886efeb1411af6dd2b876202e
[people/mcb30/gpxe.git] / src / include / gpxe / isa.h
1 #ifndef ISA_H
2 #define ISA_H
3
4 #include <stdint.h>
5 #include <gpxe/isa_ids.h>
6 #include <gpxe/device.h>
7 #include <gpxe/tables.h>
8
9 /** An ISA device */
10 struct isa_device {
11         /** Generic device */
12         struct device dev;
13         /** I/O address */
14         uint16_t ioaddr;
15         /** Driver for this device */
16         struct isa_driver *driver;
17         /** Driver-private data
18          *
19          * Use isa_set_drvdata() and isa_get_drvdata() to access
20          * this field.
21          */
22         void *priv;
23         /** Driver name */
24         const char *driver_name;
25 };
26
27 /*
28  * An individual ISA device, identified by probe address
29  *
30  */
31 typedef uint16_t isa_probe_addr_t;
32
33 /** An ISA driver */
34 struct isa_driver {
35         /** Name */
36         const char *name;
37         /** Probe address list */
38         isa_probe_addr_t *probe_addrs;
39         /** Number of entries in probe address list */
40         unsigned int addr_count;
41         /** Manufacturer ID to be assumed for this device */
42         uint16_t vendor_id;
43         /** Product ID to be assumed for this device */
44         uint16_t prod_id;
45         /**
46          * Probe device
47          *
48          * @v isa       ISA device
49          * @v id        Matching entry in ID table
50          * @ret rc      Return status code
51          */
52         int ( * probe ) ( struct isa_device *isa );
53         /**
54          * Remove device
55          *
56          * @v isa       ISA device
57          */
58         void ( * remove ) ( struct isa_device *isa );
59 };
60
61 /** ISA driver table */
62 #define ISA_DRIVERS "isa_drivers"
63
64 /** Declare an ISA driver */
65 #define __isa_driver __table ( struct isa_driver, ISA_DRIVERS, 01 )
66
67 /**
68  * Set ISA driver-private data
69  *
70  * @v isa               ISA device
71  * @v priv              Private data
72  */
73 static inline void isa_set_drvdata ( struct isa_device *isa, void *priv ) {
74         isa->priv = priv;
75 }
76
77 /**
78  * Get ISA driver-private data
79  *
80  * @v isa               ISA device
81  * @ret priv            Private data
82  */
83 static inline void * isa_get_drvdata ( struct isa_device *isa ) {
84         return isa->priv;
85 }
86
87 /*
88  * ISA_ROM is parsed by parserom.pl to generate Makefile rules and
89  * files for rom-o-matic.
90  *
91  */
92 #define ISA_ROM( IMAGE, DESCRIPTION )
93
94 #endif /* ISA_H */
95