Added a generalised ISA device-probing mechanism.
[people/lynusvaz/gpxe.git] / src / include / isa.h
1 #ifndef ISA_H
2 #define ISA_H
3
4 #include "isa_ids.h"
5 #include "dev.h"
6
7 /*
8  * A physical ISA device
9  *
10  */
11 struct isa_device {
12         char *magic; /* must be first */
13         unsigned int probe_idx;
14         uint16_t ioaddr;
15         int already_tried;
16 };
17
18 /*
19  * An individual ISA device, identified by probe address
20  *
21  */
22 struct isa_probe_addr {
23         uint16_t addr;
24 } __attribute__ (( packed ));
25
26 /*
27  * An ISA driver, with a probe address list and a probe_addr method.
28  * probe_addr() should return 1 if a card is physically present,
29  * leaving the other operations (read MAC address etc.) down to the
30  * main probe() routine.
31  *
32  */
33 struct isa_driver {
34         const char *name;
35         struct isa_probe_addr *probe_addrs;
36         unsigned int addr_count;
37         int ( * probe_addr ) ( uint16_t addr );
38         uint16_t mfg_id;
39         uint16_t prod_id;
40 };
41
42 /*
43  * Define an ISA driver
44  *
45  */
46 #define ISA_DRIVER( _name, _probe_addrs, _probe_addr, _mfg_id, _prod_id ) { \
47         .name = _name,                                                      \
48         .probe_addrs = _probe_addrs,                                        \
49         .addr_count = sizeof ( _probe_addrs ) / sizeof ( probe_addrs[0] ),  \
50         .probe_addr = _probe_addr,                                          \
51         .mfg_id = _mfg_id,                                                  \
52         .prod_id = _prod_id,                                                \
53 }
54
55 /*
56  * ISA_ROM is parsed by parserom.pl to generate Makefile rules and
57  * files for rom-o-matic.
58  *
59  */
60 #define ISA_ROM( IMAGE, DESCRIPTION )
61
62 /*
63  * Functions in isa.c
64  *
65  */
66 extern int find_isa_device ( struct isa_device *eisa,
67                              struct isa_driver *driver );
68 extern int find_isa_boot_device ( struct dev *dev,
69                                   struct isa_driver *driver );
70
71 /*
72  * config.c defines isa_extra_probe_addrs and isa_extra_probe_addr_count.
73  *
74  */
75 extern struct isa_probe_addr isa_extra_probe_addrs[];
76 extern unsigned int isa_extra_probe_addr_count;
77
78 #endif /* ISA_H */
79