summaryrefslogtreecommitdiff
path: root/libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base
diff options
context:
space:
mode:
Diffstat (limited to 'libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base')
-rw-r--r--libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base115
1 files changed, 115 insertions, 0 deletions
diff --git a/libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base b/libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base
new file mode 100644
index 00000000..8dba2f00
--- /dev/null
+++ b/libdde_linux26/examples/ne2k/.svn/text-base/main.c.svn-base
@@ -0,0 +1,115 @@
+#include <l4/dde/linux26/dde26.h> /* l4dde26_*() */
+#include <l4/dde/linux26/dde26_net.h> /* l4dde26 networking */
+#include <l4/sys/types.h> /* l4_threadid_t */
+#include <l4/sys/ipc.h> /* l4_ipc_*() */
+
+#include <linux/netdevice.h> /* struct sk_buff */
+#include <linux/pci.h> /* pci_unregister_driver() */
+#include <linux/init.h> // initcall()
+#include <linux/delay.h> // msleep()
+
+#include "arping.h"
+
+#include "8390.h" /* that's what we are */
+
+extern int arping_verbose;
+#define VERBOSE_LOG(fmt, ...) \
+ do { \
+ if (arping_verbose) printk(fmt, ##__VA_ARGS__); \
+ } while (0);
+
+extern struct pci_driver ne2k_driver;
+extern int arping(void);
+
+void open_nw_dev(void);
+void open_nw_dev()
+{
+ struct net_device *dev;
+ struct net *net;
+
+ read_lock(&dev_base_lock);
+ for_each_net(net) {
+ for_each_netdev(net, dev) {
+ int err = 0;
+ printk("dev: '%s'\n", dev->name);
+ printk("MAC: "mac_fmt"\n", mac_str(dev->dev_addr));
+
+ err = dev_open(dev);
+ }
+ }
+ read_unlock(&dev_base_lock);
+}
+
+void close_nw_dev(void);
+void close_nw_dev(void)
+{
+ struct net_device *dev;
+ struct net *net;
+
+ read_lock(&dev_base_lock);
+ for_each_net(net) {
+ for_each_netdev(net, dev) {
+ int err = 0;
+
+ err = dev_close(dev);
+ printk("closed %s\n", dev->name);
+ }
+ }
+ read_unlock(&dev_base_lock);
+}
+
+static int net_rx_handle(struct sk_buff *skb)
+{
+ skb_push(skb, skb->dev->hard_header_len);
+
+ struct arping_elem *e = kmalloc(sizeof(struct arping_elem), GFP_KERNEL);
+ e->skb = skb;
+ skb_get(skb);
+ e->next = NULL;
+
+ if (arping_list == NULL)
+ arping_list = e;
+ else {
+ struct arping_elem *f = arping_list;
+ while (f->next)
+ f = f->next;
+ f->next = e;
+ }
+
+ ddekit_sem_up(arping_semaphore);
+
+ kfree_skb(skb);
+
+ VERBOSE_LOG("freed skb, returning from netif_rx\n");
+ return NET_RX_SUCCESS;
+}
+
+//subsys_initcall(l4dde26_init_pci);
+
+int main(int argc, char **argv);
+int main(int argc, char **argv)
+{
+ l4dde26_init();
+ l4dde26_process_init();
+ l4dde26_softirq_init();
+
+ printk("Initializing skb subsystem\n");
+ skb_init();
+
+ l4dde26_do_initcalls();
+ printk("Setting rx callback @ %p\n", net_rx_handle);
+ l4dde26_register_rx_callback(net_rx_handle);
+
+ printk("Opening nw devs.\n");
+ open_nw_dev();
+ printk("dev is up and ready.\n");
+
+ arping();
+
+ close_nw_dev();
+
+ pci_unregister_driver(&ne2k_driver);
+ printk("shut down driver\n");
+
+ return 0;
+}