236c90021fbff300156c70e52e8138fddca81548
[people/xl0/gpxe.git] / src / include / mca.h
1 /*
2  * MCA bus driver code
3  *
4  * Abstracted from 3c509.c.
5  *
6  */
7
8 #ifndef MCA_H
9 #define MCA_H
10
11 #include "isa_ids.h"
12 #include "dev.h"
13
14 #define MCA_BUS_TYPE    3
15
16 /*
17  * MCA constants
18  *
19  */
20
21 #define MCA_MOTHERBOARD_SETUP_REG       0x94
22 #define MCA_ADAPTER_SETUP_REG           0x96
23 #define MCA_MAX_SLOT_NR                 0x07    /* Must be 2^n - 1 */
24 #define MCA_POS_REG(n)                  (0x100+(n))
25
26 /* Is there a standard that would define this? */
27 #define GENERIC_MCA_VENDOR ISA_VENDOR ( 'M', 'C', 'A' )
28
29 /*
30  * A location on an MCA bus
31  *
32  */
33 struct mca_loc {
34         unsigned int slot;
35 };
36
37 /*
38  * A physical MCA device
39  *
40  */
41 struct mca_device {
42         const char *name;
43         unsigned int slot;
44         unsigned char pos[8];
45 };
46 #define MCA_ID(mca) ( ( (mca)->pos[1] << 8 ) + (mca)->pos[0] )
47
48 /*
49  * An individual MCA device identified by ID
50  *
51  */
52 struct mca_id {
53         const char *name;
54         int id;
55 };
56
57 /*
58  * An MCA driver, with a device ID (struct mca_id) table.
59  *
60  */
61 struct mca_driver {
62         struct mca_id *ids;
63         unsigned int id_count;
64 };
65
66 /*
67  * Define an MCA driver
68  *
69  */
70 #define MCA_DRIVER( _ids ) {                                    \
71         .ids = _ids,                                            \
72         .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),       \
73 }
74
75 /*
76  * MCA bus global definition
77  *
78  */
79 extern struct bus_driver mca_driver;
80
81 #endif