gcc is rather over-aggressive about optimising out static data structures
[people/asdlkf/gpxe.git] / src / include / isa.h
1 #ifndef ISA_H
2 #define ISA_H
3
4 #include "stdint.h"
5 #include "isa_ids.h"
6 #include "nic.h"
7
8 /*
9  * A location on an ISA bus
10  *
11  */
12 struct isa_driver;
13 struct isa_loc {
14         unsigned int driver;
15         unsigned int probe_idx;
16 };
17
18 /*
19  * A physical ISA device
20  *
21  */
22 struct isa_device {
23         const char *name;
24         struct isa_driver *driver;
25         uint16_t ioaddr;
26         uint16_t mfg_id;
27         uint16_t prod_id;
28 };
29
30 /*
31  * An individual ISA device, identified by probe address
32  *
33  */
34 typedef uint16_t isa_probe_addr_t;
35
36 /*
37  * An ISA driver, with a probe address list and a probe_addr method.
38  * probe_addr() should return 1 if a card is physically present,
39  * leaving the other operations (read MAC address etc.) down to the
40  * main probe() routine.
41  *
42  */
43 struct isa_driver {
44         const char *name;
45         isa_probe_addr_t *probe_addrs;
46         unsigned int addr_count;
47         int ( * probe_addr ) ( isa_probe_addr_t addr );
48         uint16_t mfg_id;
49         uint16_t prod_id;
50 };
51
52 /*
53  * Define an ISA driver
54  *
55  */
56 #define ISA_DRIVER( _name, _probe_addrs, _probe_addr, _mfg_id, _prod_id )   \
57 struct isa_driver _name __table(isa_driver,01 ) = {                         \
58         .probe_addrs = _probe_addrs,                                        \
59         .addr_count = sizeof ( _probe_addrs ) / sizeof ( _probe_addrs[0] ), \
60         .probe_addr = _probe_addr,                                          \
61         .mfg_id = _mfg_id,                                                  \
62         .prod_id = _prod_id,                                                \
63 }
64
65 /*
66  * ISA_ROM is parsed by parserom.pl to generate Makefile rules and
67  * files for rom-o-matic.
68  *
69  */
70 #define ISA_ROM( IMAGE, DESCRIPTION )
71
72 /*
73  * Functions in isa.c
74  *
75  */
76 extern void isa_fill_nic ( struct nic *nic, struct isa_device *isa );
77
78 /*
79  * ISA bus global definition
80  *
81  */
82 extern struct bus_driver isa_driver;
83
84 #endif /* ISA_H */
85