Updated all common buses to new API.
[people/xl0/gpxe.git] / src / include / eisa.h
1 #ifndef EISA_H
2 #define EISA_H
3
4 #include "stdint.h"
5 #include "isa_ids.h"
6 #include "nic.h"
7
8 /*
9  * EISA constants
10  *
11  */
12
13 #define EISA_MIN_SLOT (0x1)
14 #define EISA_MAX_SLOT (0xf)     /* Must be 2^n - 1 */
15 #define EISA_SLOT_BASE( n ) ( 0x1000 * (n) )
16
17 #define EISA_MFG_ID_HI ( 0xc80 )
18 #define EISA_MFG_ID_LO ( 0xc81 )
19 #define EISA_PROD_ID_HI ( 0xc82 )
20 #define EISA_PROD_ID_LO ( 0xc83 )
21 #define EISA_GLOBAL_CONFIG ( 0xc84 )
22
23 #define EISA_CMD_RESET ( 1 << 2 )
24 #define EISA_CMD_ENABLE ( 1 << 0 )
25
26 /*
27  * A location on an EISA bus
28  *
29  */
30 struct eisa_loc {
31         unsigned int slot;
32 };
33
34 /*
35  * A physical EISA device
36  *
37  */
38 struct eisa_device {
39         const char *name;
40         unsigned int slot;
41         uint16_t ioaddr;
42         uint16_t mfg_id;
43         uint16_t prod_id;
44 };
45
46 /*
47  * An individual EISA device identified by ID
48  *
49  */
50 struct eisa_id {
51         const char *name;
52         uint16_t mfg_id, prod_id;
53 };
54
55 /*
56  * An EISA driver, with a device ID (struct eisa_id) table.
57  *
58  */
59 struct eisa_driver {
60         const char *name;
61         struct eisa_id *ids;
62         unsigned int id_count;
63 };
64
65 /*
66  * Define an EISA driver
67  *
68  */
69 #define EISA_DRIVER( _ids ) {                                   \
70         .ids = _ids,                                            \
71         .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),       \
72 }
73
74 /*
75  * Functions in eisa.c
76  *
77  */
78 extern void enable_eisa_device ( struct eisa_device *eisa );
79 extern void fill_eisa_nic ( struct nic *nic, struct eisa_device *eisa );
80
81 /*
82  * EISA bus global definition
83  *
84  */
85 extern struct bus_driver eisa_driver;
86
87 #endif /* EISA_H */