undi.h

Go to the documentation of this file.
00001 #ifndef _UNDI_H
00002 #define _UNDI_H
00003 
00004 /** @file
00005  *
00006  * UNDI driver
00007  *
00008  */
00009 
00010 FILE_LICENCE ( GPL2_OR_LATER );
00011 
00012 #ifndef ASSEMBLY
00013 
00014 #include <gpxe/device.h>
00015 #include <pxe_types.h>
00016 
00017 /** An UNDI device
00018  *
00019  * This structure is used by assembly code as well as C; do not alter
00020  * this structure without editing pxeprefix.S to match.
00021  */
00022 struct undi_device {
00023         /** PXENV+ structure address */
00024         SEGOFF16_t pxenv;
00025         /** !PXE structure address */
00026         SEGOFF16_t ppxe;
00027         /** Entry point */
00028         SEGOFF16_t entry;
00029         /** Free base memory after load */
00030         UINT16_t fbms;
00031         /** Free base memory prior to load */
00032         UINT16_t restore_fbms;
00033         /** PCI bus:dev.fn, or @c UNDI_NO_PCI_BUSDEVFN */
00034         UINT16_t pci_busdevfn;
00035         /** ISAPnP card select number, or @c UNDI_NO_ISAPNP_CSN */
00036         UINT16_t isapnp_csn;
00037         /** ISAPnP read port, or @c UNDI_NO_ISAPNP_READ_PORT */
00038         UINT16_t isapnp_read_port;
00039         /** PCI vendor ID
00040          *
00041          * Filled in only for the preloaded UNDI device by pxeprefix.S
00042          */
00043         UINT16_t pci_vendor;
00044         /** PCI device ID 
00045          *
00046          * Filled in only for the preloaded UNDI device by pxeprefix.S
00047          */
00048         UINT16_t pci_device;
00049         /** Flags
00050          *
00051          * This is the bitwise OR of zero or more UNDI_FL_XXX
00052          * constants.
00053          */
00054         UINT16_t flags;
00055 
00056         /** Generic device */
00057         struct device dev;
00058         /** Driver-private data
00059          *
00060          * Use undi_set_drvdata() and undi_get_drvdata() to access this
00061          * field.
00062          */
00063         void *priv;
00064 } __attribute__ (( packed ));
00065 
00066 /**
00067  * Set UNDI driver-private data
00068  *
00069  * @v undi              UNDI device
00070  * @v priv              Private data
00071  */
00072 static inline void undi_set_drvdata ( struct undi_device *undi, void *priv ) {
00073         undi->priv = priv;
00074 }
00075 
00076 /**
00077  * Get UNDI driver-private data
00078  *
00079  * @v undi              UNDI device
00080  * @ret priv            Private data
00081  */
00082 static inline void * undi_get_drvdata ( struct undi_device *undi ) {
00083         return undi->priv;
00084 }
00085 
00086 #endif /* ASSEMBLY */
00087 
00088 /** PCI bus:dev.fn field is invalid */
00089 #define UNDI_NO_PCI_BUSDEVFN 0xffff
00090 
00091 /** ISAPnP card select number field is invalid */
00092 #define UNDI_NO_ISAPNP_CSN 0xffff
00093 
00094 /** ISAPnP read port field is invalid */
00095 #define UNDI_NO_ISAPNP_READ_PORT 0xffff
00096 
00097 /** UNDI flag: START_UNDI has been called */
00098 #define UNDI_FL_STARTED 0x0001
00099 
00100 /** UNDI flag: UNDI_STARTUP and UNDI_INITIALIZE have been called */
00101 #define UNDI_FL_INITIALIZED 0x0002
00102 
00103 /** UNDI flag: keep stack resident */
00104 #define UNDI_FL_KEEP_ALL 0x0004
00105 
00106 #endif /* _UNDI_H */

Generated on Tue Apr 6 20:00:50 2010 for gPXE by  doxygen 1.5.7.1