summaryrefslogtreecommitdiff
path: root/dde_pcnet32_test/main.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2011-05-08 22:45:06 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2011-05-08 22:45:06 +0200
commit878c5456c5a2f9bff741a7b7bcdccd5c1694db22 (patch)
treebcf3d101215fa70b953aa7e9d0de805c5f8865b4 /dde_pcnet32_test/main.c
parent9062642230b7bfb48e7b30f98cba8528172b2d36 (diff)
parentc8f311a7a32d4b0cb0c21672f63bca8efdf5d83a (diff)
Merge branch 'dde' into HEAD
Diffstat (limited to 'dde_pcnet32_test/main.c')
-rw-r--r--dde_pcnet32_test/main.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/dde_pcnet32_test/main.c b/dde_pcnet32_test/main.c
new file mode 100644
index 00000000..cb5ed5b1
--- /dev/null
+++ b/dde_pcnet32_test/main.c
@@ -0,0 +1,112 @@
+#include <dde26.h> /* l4dde26_*() */
+#include <dde26_net.h> /* l4dde26 networking */
+
+#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"
+
+int using_std = 1;
+
+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();
+
+ printk("shut down driver\n");
+
+ return 0;
+}