67b063b6769997d024e109b2fb1cf2d9ac6c9d67
[people/xl0/gpxe.git] / src / arch / i386 / include / undi.h
1 #ifndef _UNDI_H
2 #define _UNDI_H
3
4 /** @file
5  *
6  * UNDI driver
7  *
8  */
9
10 #include <gpxe/device.h>
11 #include <pxe_types.h>
12
13 /** An UNDI device */
14 struct undi_device {
15         /** Generic device */
16         struct device dev;
17         /** Driver-private data
18          *
19          * Use undi_set_drvdata() and undi_get_drvdata() to access this
20          * field.
21          */
22         void *priv;
23
24         /** PXENV+ structure address */
25         SEGOFF16_t pxenv;
26         /** !PXE structure address */
27         SEGOFF16_t ppxe;
28         /** Entry point */
29         SEGOFF16_t entry;
30         /** PCI bus:dev.fn, or 0 */
31         unsigned int pci_busdevfn;
32         /** ISAPnP card select number, or -1U */
33         unsigned int isapnp_csn;
34         /** ISAPnP read port, or -1U */
35         unsigned int isapnp_read_port;
36         /** Free base memory prior to load */
37         unsigned int restore_fbms;
38         /** Free base memory after load */
39         unsigned int fbms;
40 };
41
42 /**
43  * Set UNDI driver-private data
44  *
45  * @v undi              UNDI device
46  * @v priv              Private data
47  */
48 static inline void undi_set_drvdata ( struct undi_device *undi, void *priv ) {
49         undi->priv = priv;
50 }
51
52 /**
53  * Get UNDI driver-private data
54  *
55  * @v undi              UNDI device
56  * @ret priv            Private data
57  */
58 static inline void * undi_get_drvdata ( struct undi_device *undi ) {
59         return undi->priv;
60 }
61
62 #endif /* _UNDI_H */