Use linker functions for NIC and medium pre-init
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 22 Jan 2014 21:05:02 +0000 (13:05 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 22 Jan 2014 21:05:02 +0000 (13:05 -0800)
I picked levels 3 and 4, so it'll be easier to use the lower levels.  We
can always add higher levels as needed, but adding additional lower
levels will require changing exist call sites (e.g. all linker_func_3
need to be incremented).

kern/drivers/net/ether8139.c
kern/src/init.c
kern/src/net/ethermedium.c
kern/src/net/loopbackmedium.c

index 0296e56..5086129 100644 (file)
@@ -766,7 +766,7 @@ static int rtl8139pnp(struct ether *edev)
        return 0;
 }
 
-void __etherlink ether8139link(void)
+linker_func_3(ether8139link)
 {
        addethercard("rtl8139", rtl8139pnp);
 }
index b58d899..0f9870e 100644 (file)
@@ -86,17 +86,9 @@ void kernel_init(multiboot_info_t *mboot_info)
        arch_init();
        block_init();
        enable_irq();
-       void ether8139link(void);
-       ether8139link();
        run_linker_funcs();
-/*
-       void ether8169link(void);
-       ether8169link();
-       void etherigbelink(void);
-       etherigbelink();
-*/
-       ethermediumlink();
-       loopbackmediumlink();
+       /* reset/init devtab after linker funcs 3 and 4.  these run NIC and medium
+        * pre-inits, which need to happen before devether. */
        devtabreset();
        devtabinit();
 
index 61250ff..e571bd7 100644 (file)
@@ -793,8 +793,7 @@ multicastarp(struct Fs *f,
        return NULL;
 }
 
-void
-ethermediumlink(void)
+linker_func_4(ethermediumlink)
 {
        addipmedium(&ethermedium);
        addipmedium(&gbemedium);
index 69e3a9f..c9a302d 100644 (file)
@@ -127,8 +127,7 @@ struct medium loopbackmedium =
 .bwrite=       loopbackbwrite,
 };
 
-void
-loopbackmediumlink(void)
+linker_func_4(loopbackmediumlink)
 {
        addipmedium(&loopbackmedium);
 }