summaryrefslogtreecommitdiffstats
path: root/src/include/nic.h
diff options
context:
space:
mode:
authorMichael Brown2005-04-12 18:54:09 +0200
committerMichael Brown2005-04-12 18:54:09 +0200
commit5c31682674e5c6023f2d1f985f1cd7eb165ee7ed (patch)
treeccdb2643c00989f6bab0e84acf6774a8ca39f4ec /src/include/nic.h
parentstruct nic is now part of struct dev, rather than the other way around. (diff)
downloadipxe-5c31682674e5c6023f2d1f985f1cd7eb165ee7ed.tar.gz
ipxe-5c31682674e5c6023f2d1f985f1cd7eb165ee7ed.tar.xz
ipxe-5c31682674e5c6023f2d1f985f1cd7eb165ee7ed.zip
Tie into new boot device framework.
Diffstat (limited to 'src/include/nic.h')
-rw-r--r--src/include/nic.h67
1 files changed, 50 insertions, 17 deletions
diff --git a/src/include/nic.h b/src/include/nic.h
index c258d745..7e74aef9 100644
--- a/src/include/nic.h
+++ b/src/include/nic.h
@@ -8,7 +8,9 @@
#ifndef NIC_H
#define NIC_H
-#include "dev.h"
+/* to get global "dev" */
+struct dev;
+#include "main.h"
typedef enum {
DISABLE = 0,
@@ -20,15 +22,9 @@ typedef enum {
* Structure returned from eth_probe and passed to other driver
* functions.
*/
-struct nic
-{
- struct dev dev; /* This must come first */
- int (*poll)P((struct nic *, int retrieve));
- void (*transmit)P((struct nic *, const char *d,
- unsigned int t, unsigned int s, const char *p));
- void (*irq)P((struct nic *, irq_action_t));
+struct nic {
+ struct nic_operations *nic_op;
int flags; /* driver specific flags */
- struct rom_info *rom_info; /* -> rom_info from main */
unsigned char *node_addr;
unsigned char *packet;
unsigned int packetlen;
@@ -37,13 +33,50 @@ struct nic
void *priv_data; /* driver can hang private data here */
};
+struct nic_operations {
+ int ( *connect ) ( struct nic * );
+ int ( *poll ) ( struct nic *, int retrieve );
+ void ( *transmit ) ( struct nic *, const char *,
+ unsigned int, unsigned int, const char * );
+ void ( *irq ) ( struct nic *, irq_action_t );
+ void ( *disable ) ( struct nic * );
+};
+
+/*
+ * Function prototypes
+ *
+ */
+extern struct nic * nic_device ( struct dev * dev );
+
+/*
+ * Functions that implicitly operate on the current boot device
+ *
+ * "nic" always points to &dev.nic
+ */
+
+extern struct nic *nic;
+
+static inline int eth_connect ( void ) {
+ return nic->nic_op->connect ( nic );
+}
+
+static inline int eth_poll ( int retrieve ) {
+ return nic->nic_op->poll ( nic, retrieve );
+}
+
+static inline void eth_transmit ( const char *dest, unsigned int type,
+ unsigned int size, const void *packet ) {
+ nic->nic_op->transmit ( nic, dest, type, size, packet );
+}
+
+static inline void eth_irq ( irq_action_t action ) {
+ nic->nic_op->irq ( nic, action );
+}
+
+/* Should be using disable() rather than eth_disable() */
+static inline void eth_disable ( void ) __attribute__ (( deprecated ));
+static inline void eth_disable ( void ) {
+ nic->nic_op->disable ( nic );
+}
-extern struct nic nic;
-extern int eth_probe(struct dev *dev);
-extern int eth_poll(int retrieve);
-extern void eth_transmit(const char *d, unsigned int t, unsigned int s, const void *p);
-extern void eth_disable(void);
-extern void eth_irq(irq_action_t action);
-extern int eth_load_configuration(struct dev *dev);
-extern int eth_load(struct dev *dev);;
#endif /* NIC_H */