Removes the old networking stack (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 21 Jan 2014 05:01:17 +0000 (21:01 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 21 Jan 2014 05:01:17 +0000 (21:01 -0800)
In addition to the socket family of glibc and syscall numbers, I also
removed the syscalls for read/write over serial/ethernet, and the
ethernet audio device.  If we need any of this in the future, we can
get it from git.

You need to fully rebuild glibc for this, including removing the entire
glibc-2.14.1/ directory (but not the -ros one).

37 files changed:
kern/arch/x86/frontend.c
kern/drivers/net/Kbuild
kern/drivers/net/dummy.c [new file with mode: 0644]
kern/drivers/net/e1000.c [deleted file]
kern/drivers/net/e1000.h [deleted file]
kern/drivers/net/ne2k.c [deleted file]
kern/drivers/net/ne2k.h [deleted file]
kern/drivers/net/rl8168.c [deleted file]
kern/drivers/net/rl8168.h [deleted file]
kern/include/eth_audio.h [deleted file]
kern/include/net.h [deleted file]
kern/include/net/dev.h [deleted file]
kern/include/net/ip.h [deleted file]
kern/include/net/nic_common.h [deleted file]
kern/include/net/pbuf.h [deleted file]
kern/include/net/tcp.h [deleted file]
kern/include/net/tcp_impl.h [deleted file]
kern/include/net/timers.h [deleted file]
kern/include/net/udp.h [deleted file]
kern/include/ros/bits/syscall.h
kern/include/socket.h [deleted file]
kern/src/eth_audio.c [deleted file]
kern/src/init.c
kern/src/net/Kconfig
kern/src/syscall.c
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/accept.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/bind.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/connect.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/listen.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recv.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recvfrom.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/select.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/send.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/sendto.c [deleted file]
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/socket.c [deleted file]
user/parlib/include/parlib.h
user/parlib/syscall.c

index bdae12d..5ae5dbb 100644 (file)
@@ -1,7 +1,7 @@
 #include <multiboot.h>
 #include <arch/frontend.h>
-#include <net/nic_common.h>
 #include <kmalloc.h>
+#include <assert.h>
 
 #define debug(...) printk(__VA_ARGS__)
 
index 4d953d6..f3675db 100644 (file)
@@ -1,3 +1,4 @@
+# need at least one obj file to build for Kbuild
+obj-y                                                  += dummy.o
+# here's how to do conditional builds:
 #obj-$(CONFIG_E1000)                   += e1000.o
-obj-$(CONFIG_NE2K)                     += ne2k.o
-#obj-$(CONFIG_RL8168)          += rl8168.o
diff --git a/kern/drivers/net/dummy.c b/kern/drivers/net/dummy.c
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/kern/drivers/net/e1000.c b/kern/drivers/net/e1000.c
deleted file mode 100644 (file)
index 4e98023..0000000
+++ /dev/null
@@ -1,1288 +0,0 @@
-/** @file
- * @brief E1000 Driver       
- *
- * EXPERIMENTAL. DO NOT USE IF YOU DONT KNOW WHAT YOU ARE DOING
- *
- * See Info below 
- *
- * @author Paul Pearce <pearce@eecs.berkeley.edu>
- * @author David Zhu <yuzhu@cs.berkeley.edu>
- *
- */
-
-#ifdef __SHARC__
-#pragma nosharc
-#endif
-
-#include <arch/mmu.h>
-#include <arch/x86.h>
-#include <arch/smp.h>
-#include <arch/apic.h>
-#include <arch/pci.h>
-#include <net/nic_common.h>
-#include "e1000.h"
-
-#include <ros/memlayout.h>
-
-#include <atomic.h>
-#include <stdio.h>
-#include <string.h>
-#include <trap.h>
-#include <kmalloc.h>
-
-#include <pmap.h>
-#include <frontend.h>
-#include <arch/frontend.h>
-#include <eth_audio.h>
-#include <net/ip.h>
-
-#define NUM_TX_DESCRIPTORS E1000_NUM_TX_DESCRIPTORS
-#define NUM_RX_DESCRIPTORS E1000_NUM_RX_DESCRIPTORS
-
-
-// Global variables for the device
-uint32_t e1000_mmio_base_addr = 0;
-uint32_t e1000_io_base_addr = 0;
-uint32_t e1000_irq = 0;
-uint32_t e1000_addr_size = 0;
-
-// The device's MAC address (read from the device)
-unsigned char device_mac[6];
-
-// Vars relating to the receive descriptor ring
-// pointer to receive descriptors
-struct e1000_rx_desc *rx_des_kva;
-unsigned long rx_des_pa;
-// current rx index
-uint32_t e1000_rx_index = 0;
-
-
-// Vars relating to the transmit descriptor ring
-struct e1000_tx_desc *tx_des_kva;
-unsigned long tx_des_pa;
-uint32_t e1000_tx_index = 0;
-
-extern uint8_t eth_up;
-
-// The PCI device ID we detect
-// This is used for quark behavior
-uint16_t device_id = 0;
-
-
-// Hacky variables relating to delivering packets
-extern uint32_t packet_buffer_count;
-extern char* packet_buffers[MAX_PACKET_BUFFERS];
-extern uint32_t packet_buffers_sizes[MAX_PACKET_BUFFERS];
-extern uint32_t packet_buffers_head;
-extern uint32_t packet_buffers_tail;
-spinlock_t packet_buffers_lock;
-
-// Allow us to register our send_frame as the global send_frame
-extern int (*send_frame)(const char *CT(len) data, size_t len);
-
-// compat defines that make transitioning easier
-#define E1000_RX_DESC(x) rx_des_kva[x]
-
-void e1000_dump_rx() {
-
-       for (int i = 0; i < 10; i++) {
-               
-               printk("%u:  %lx%lx\n", i, *(uint64_t*)(&rx_des_kva[i]), *((uint64_t*)(&rx_des_kva[i]) + 1));
-               printk("%ud: %lx\n", i, *(uint64_t*)(KADDR(rx_des_kva[i].buffer_addr)));        
-       }
-
-}
-
-void e1000_dump_stats() {
-
-       uint32_t offset = 0x04000;
-       
-       while (offset <= 0x040FC) {
-               if ((offset % 16) == 0)
-                       printk("\n");
-               printk("%x:%d ", offset,e1000_rr32(offset));
-
-               offset = offset + 4;
-       }
-}
-
-// Main init sequence. This is whats called to configure the device
-// This includes detection of the device.
-void e1000_init() {
-
-       // Detect if the device is present
-       if (e1000_scan_pci() < 0) return;
-
-       // Allocate and program the descriptors for the ring
-       // Note: Does not tell the device to use them, yet.
-       e1000_setup_descriptors();
-       e1000_configure();
-       printk("Network Card MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-          device_mac[0],device_mac[1],device_mac[2],
-          device_mac[3],device_mac[4],device_mac[5]);
-
-       e1000_setup_interrupts();
-
-       // "Register" our send_frame with the global system
-       send_frame = &e1000_send_frame;
-       send_pbuf = &e1000_send_pbuf;
-       recv_pbuf = &e1000_recv_pbuf;
-
-       // sudo /sbin/ifconfig eth0 up
-       eth_up = 1;
-       
-       return;
-}
-
-/* Given a addr read from bar0, determine the IO mode,
- * determine the addr range, and map the MMIO region in.
- *
- * Note: This must be called from a scan_pci() context, as it
- * relies on the state of the PCI_CONFIG_ADDR register.
- */
-void e1000_handle_bar0(uint32_t addr) {
-
-       if (addr & PCI_BAR_IO) {
-               e1000_debug("-->IO PORT MODE\n");
-               panic("IO PORT MODE NOT SUPPORTED\n");
-       } else {
-               e1000_debug("-->MMIO Mode\n");
-               
-               // Now we do magic to find the size
-               // The first non zero bit after we
-                // write all 1's denotes the size
-               outl(PCI_CONFIG_DATA, 0xFFFFFFFF);
-               uint32_t result = inl(PCI_CONFIG_DATA);
-               result = result & PCI_BAR_MEM_MASK;
-               result = (result ^ 0xFFFFFFFF) + 1;
-               e1000_addr_size = result;
-               e1000_debug("-->MMIO Size %x\n", e1000_addr_size);
-                
-               // Restore the MMIO addr to the device (unchanged)
-               outl(PCI_CONFIG_DATA, addr);
-
-               /* Get a virt address chunk */
-               e1000_mmio_base_addr = get_vmap_segment(e1000_addr_size >> PGSHIFT);
-               if (!e1000_mmio_base_addr)
-                       panic("Could not aquire VM space for e1000 MMIO\n");
-               /* Map the pages in */
-               if (map_vmap_segment(e1000_mmio_base_addr, addr,
-                                    e1000_addr_size >> PGSHIFT, PTE_P | PTE_KERN_RW))
-                       panic("Unable to map e1000 MMIO\n");
-       }
-       return;
-}
-
-// Scan the PCI data structures for our device.
-int e1000_scan_pci(void)
-{
-       struct pci_device *pcidev;
-       uint32_t result;
-       printk("Searching for Intel E1000 Network device...");
-       STAILQ_FOREACH(pcidev, &pci_devices, all_dev) {
-               /* Ignore non Intel Devices */
-               if (pcidev->ven_id != INTEL_VENDOR_ID)
-                       continue;
-               /* Ignore non E1000 devices */
-               switch (pcidev->dev_id) {
-                       case (INTEL_82543GC_ID):
-                       case (INTEL_82540EM_ID):
-                       case (INTEL_82545EM_ID):
-                       case (INTEL_82576_ID):
-                       case (INTEL_82576NS_ID):
-                               break;
-                       default:
-                               continue;
-               }
-               printk(" found on BUS %x DEV %x FUNC %x\n", pcidev->bus, pcidev->dev,
-                      pcidev->func);
-               /* TODO: WARNING - EXTREMELY GHETTO  (can only handle 1 NIC) */
-               if (device_id) {
-                       printk("[e1000] Already configured a device, won't do another\n");
-                       continue;
-               }
-               device_id = pcidev->dev_id;
-               /* Find the IRQ */
-               e1000_irq = pcidev->irqline;
-               e1000_debug("-->IRQ: %u\n", e1000_irq);
-               /* Loop over the BARs */
-               /* TODO: pci layer should scan these things and put them in a pci_dev
-                * struct */
-               /* SelectBars based on the IORESOURCE_MEM */
-               for (int k = 0; k <= 5; k++) {
-               /* TODO: clarify this magic */
-                       int reg = 4 + k;
-                       result = pcidev_read32(pcidev, reg << 2);
-
-                       if (result == 0) // (0 denotes no valid data)
-                               continue;
-                       // Read the bottom bit of the BAR. 
-                       if (result & PCI_BAR_IO) {
-                               result = result & PCI_BAR_IO_MASK;
-                               e1000_debug("-->BAR%u: %s --> %x\n", k, "IO", result);
-                       } else {
-                               result = result & PCI_BAR_MEM_MASK;
-                               e1000_debug("-->BAR%u: %s --> %x\n", k, "MEM", result);
-                       }
-                       if (k == 0) { // BAR0 denotes the IO Addr for the device
-                               if (result & PCI_BAR_IO) {
-                                       e1000_debug("-->IO PORT MODE\n");
-                                       panic("IO PORT MODE NOT SUPPORTED\n");
-                               } else {
-                                       e1000_debug("-->MMIO Mode, Base: %p\n", result);
-                                       // Deal with the MMIO base, mapping, and size.
-                                       e1000_handle_bar0(result);
-                               }                                               
-                       }
-               }
-       }
-       if (device_id)
-               return 0;
-       printk(" not found. No device configured.\n");
-       return -1;
-}
-
-/* E1000 Read Register 32bit
- * Read a 32 bit value from a register at the given offset in the 
- * E1000 MMIO range.
- *
- * This function has IOPORT support, but is not used.
- */
-uint32_t e1000_rr32(uint32_t offset) {
-
-       if (e1000_mmio_base_addr) {
-               return read_mmreg32(e1000_mmio_base_addr + offset);
-       } else {
-               return inl(e1000_io_base_addr + offset);
-       }
-}
-
-
-/* E1000 Write Register 32bit
- * Write a 32 bit value from a register at the given offset in the 
- * E1000 MMIO range.
- *
- * This function has IOPORT support, but is not used.
- */
-void e1000_wr32(uint32_t offset, uint32_t val) {
-
-       if (e1000_mmio_base_addr) {
-               write_mmreg32(e1000_mmio_base_addr + offset, val);
-       } else {
-               outl(e1000_io_base_addr + offset, val);
-       }
-}
-
-/* E1000 Read From EEPROM
- * Read a 16 bit value from the EEPROM at the given offset 
- * in the EEPROM.
- *
- * WARNING: USE CAREFULLY. THIS HAS A WHILE LOOP IN IT.
- * if MMIO is not configured correctly, this will lock the kernel.
- */
-uint16_t e1000_read_eeprom(uint32_t offset) {
-
-       uint16_t eeprom_data;
-       uint32_t eeprom_reg_val = e1000_rr32(E1000_EECD);
-
-       // Request access to the EEPROM, then wait for access
-       eeprom_reg_val = eeprom_reg_val | E1000_EECD_REQ;
-       e1000_wr32(E1000_EECD, eeprom_reg_val);
-        while((e1000_rr32(E1000_EECD) & E1000_EECD_GNT) == 0);
-
-       // We now have access, write what value we want to read, then wait for access
-       eeprom_reg_val = E1000_EERD_START | (offset << E1000_EERD_ADDR_SHIFT);
-       e1000_wr32(E1000_EERD, eeprom_reg_val);
-       while(((eeprom_reg_val = e1000_rr32(E1000_EERD)) & E1000_EERD_DONE) == 0);
-       eeprom_data = (eeprom_reg_val & E1000_EERD_DATA_MASK) >> E1000_EERD_DATA_SHIFT;
-       
-       // Read the value (finally)
-       eeprom_reg_val = e1000_rr32(E1000_EECD);
-
-       // Tell the EEPROM we are done.
-       e1000_wr32(E1000_EECD, eeprom_reg_val & ~E1000_EECD_REQ);
-
-       return eeprom_data;
-
-}
-
-// Discover and record the MAC address for this device.
-void e1000_setup_mac() {
-
-       uint16_t eeprom_data = 0;
-       uint32_t mmio_data = 0;
-
-       /* TODO: WARNING - EXTREMELY GHETTO */
-       e1000_debug("-->Setting up MAC addr\n");
-
-       // Quark: For ID0 type, we read from the EEPROm. Else we read from RAL/RAH.
-       if (device_id == INTEL_82540EM_ID) {
-
-               // This is ungodly slow. Like, person perceivable time slow.
-               for (int i = 0; i < 3; i++) {
-
-                       eeprom_data = e1000_read_eeprom(i);
-                       device_mac[2*i] = eeprom_data & 0x00FF;
-                       device_mac[2*i + 1] = (eeprom_data & 0xFF00) >> 8;
-
-               }
-
-       } else {
-               
-               // Get the data from RAL
-               mmio_data = e1000_rr32(E1000_RAL);
-
-               // Do the big magic rain dance
-               device_mac[0] = mmio_data & 0xFF;
-                       device_mac[1] = (mmio_data >> 8) & 0xFF;
-               device_mac[2] = (mmio_data >> 16) & 0xFF;
-               device_mac[3] = (mmio_data >> 24) & 0xFF;
-
-               // Get the rest of the MAC data from RAH.
-               mmio_data = e1000_rr32(E1000_RAH);
-               
-               // Continue magic dance.
-               device_mac[4] = mmio_data & 0xFF;
-               device_mac[5] = (mmio_data >> 8) & 0xFF;
-       }
-
-       // Check if we need to invert the higher order bits (some E1000's)
-       // Got this behavior from Barrelfish.
-       // It's worth noting that if MMIO is screwed up, this is generally
-       // the first warning sign.
-       mmio_data = e1000_rr32(E1000_STATUS);
-       if (mmio_data & E1000_STATUS_FUNC_MASK) {
-               printk("UNTESTED LANB FUNCTIONALITY! MAY BE BREAKING MAC\n");
-               device_mac[5] ^= 0x0100;
-       }       
-
-       // Program the device to use this mac (really only needed for ID0 type)
-       e1000_wr32(E1000_RAH, 0x00000); // Set MAC invalid
-       e1000_wr32(E1000_RAL, *(uint32_t*)device_mac);
-       e1000_wr32(E1000_RAH, *(uint16_t*)(device_mac + 4) | 0x80000000);
-       
-       // Now make sure it read back out.
-       // This is done to make sure everything is working correctly with the NIC
-       mmio_data = e1000_rr32(E1000_RAL);
-       device_mac[0] = mmio_data & 0xFF;
-       device_mac[1] = (mmio_data >> 8) & 0xFF;
-       device_mac[2] = (mmio_data >> 16) & 0xFF;
-       device_mac[3] = (mmio_data >> 24) & 0xFF;
-       mmio_data = e1000_rr32(E1000_RAH);
-       device_mac[4] = mmio_data & 0xFF;
-       device_mac[5] = (mmio_data >> 8) & 0xFF;
-
-       // Clear the MAC's from all the other filters
-       // Must clear high to low.
-       // TODO: Get the right number of filters. Not sure how.
-       //       however they SHOULD all default to all 0's, so
-       //       this shouldnt be needed.
-       for (int i = 1; i < 16; i++) {
-               e1000_wr32(E1000_RAH + 8 * i, 0x0);
-               e1000_wr32(E1000_RAL + 8 * i, 0x0);
-       }
-
-
-       // Clear MTA Table
-       // TODO: Get the right number of filters. See above.
-       for (int i = 0; i < 0x7F; i++) {
-               e1000_wr32(E1000_MTA + 4 * i, 0x0);
-       }
-
-       e1000_debug("-->DEVICE MAC: %02x:%02x:%02x:%02x:%02x:%02x\n",
-                   0xFF & device_mac[0], 0xFF & device_mac[1],
-                   0xFF & device_mac[2], 0xFF & device_mac[3],
-                   0xFF & device_mac[4], 0xFF & device_mac[5]);
-       return;
-}
-
-// Allocate and configure all the transmit and receive descriptors.
-void e1000_setup_descriptors() {
-
-       e1000_debug("-->Setting up tx/rx descriptors.\n");
-
-       // Allocate room for the buffers. 
-       // Must be 16 byte aligned
-
-       // How many pages do we need?
-  uint32_t num_rx_pages = ROUNDUP(NUM_RX_DESCRIPTORS * sizeof(struct e1000_rx_desc), PGSIZE) / PGSIZE;
-  uint32_t num_tx_pages = ROUNDUP(NUM_TX_DESCRIPTORS * sizeof(struct e1000_tx_desc), PGSIZE) / PGSIZE;
-       
-       // Get the pages
-       rx_des_kva = get_cont_pages(LOG2_UP(num_rx_pages), 0);
-       tx_des_kva = get_cont_pages(LOG2_UP(num_tx_pages), 0);
-
-       // +1 point for checking malloc result
-       if (rx_des_kva == NULL) panic("Can't allocate page for RX Ring");
-       if (tx_des_kva == NULL) panic("Can't allocate page for TX Ring");
-       
-       // Get the phys addr
-       rx_des_pa = PADDR(rx_des_kva);
-       tx_des_pa = PADDR(tx_des_kva);
-       
-       // Configure each descriptor.
-       for (int i = 0; i < NUM_RX_DESCRIPTORS; i++) 
-               e1000_set_rx_descriptor(i, TRUE); // True == Allocate memory for the descriptor
-               
-       for (int i = 0; i < NUM_TX_DESCRIPTORS; i++) 
-               e1000_set_tx_descriptor(i);
-
-       return;
-}
-
-// Configure a specific RX descriptor.
-// Serves as a reset, too (with reset_buffer set to FALSE).
-void e1000_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer) {
-       
-       //memset(&rx_des_kva[des_num], 0x00, sizeof(struct e1000_rx_desc));
-       rx_des_kva[des_num].length = 0;
-       rx_des_kva[des_num].csum = 0;
-       rx_des_kva[des_num].status = 0;
-       rx_des_kva[des_num].errors = 0;
-       rx_des_kva[des_num].special = 0;
-       
-       // Check if we are allocating a buffer.
-       // Note: setting this to TRUE not at boot time results in a memory leak.
-       if (reset_buffer) {
-               
-               // Alloc a buffer
-               char *rx_buffer = kmalloc(E1000_RX_MAX_BUFFER_SIZE, 0);
-               if (rx_buffer == NULL) panic ("Can't allocate page for RX Buffer");
-               
-               // Set the buffer addr
-               rx_des_kva[des_num].buffer_addr = PADDR(rx_buffer);
-       }
-
-       return;
-}
-
-// Configure a specific TX descriptor.
-// Calling not at boot results in a memory leak.
-void e1000_set_tx_descriptor(uint32_t des_num) {
-       
-       // Clear the bits.
-       memset(&tx_des_kva[des_num], 0x00, sizeof(struct e1000_tx_desc));
-       
-       // Alloc space for the buffer
-       char *tx_buffer = kmalloc(E1000_TX_MAX_BUFFER_SIZE, 0);
-       if (tx_buffer == NULL) panic ("Can't allocate page for TX Buffer");
-
-       // Set it.
-       tx_des_kva[des_num].buffer_addr = PADDR(tx_buffer);
-       return;
-}
-
-/* Actually configure the device.
- * This goes through the painstaking process of actually configuring the device
- * and preparing it for use. After this function, the device is turned on
- * in a good and functioning state (except interrupts are off).
- *
- * I give a brief description of what each bit of code does, but
- * the details of the bits are in most cases from the spec sheet
- * and exact details are a bit obfuscated. 
- *
- * This startup sequence is taken with love from BarrelFish.
- * <3 the multikernel.
- */
-void e1000_configure() {
-       
-       uint32_t data;
-
-       e1000_debug("-->Configuring Device.\n");
-       
-       // Clear Interrupts
-       e1000_wr32(E1000_IMC, E1000_IMC_ALL);
-       E1000_WRITE_FLUSH();
-
-       // Disable receiver and transmitter
-       e1000_wr32(E1000_RCTL, 0x00);
-       e1000_wr32(E1000_TCTL, 0x00);
-
-       // Reset the device
-       e1000_reset();  
-
-       // Clear interrupts
-       e1000_wr32(E1000_IMC, E1000_IMC_ALL);
-
-       // Fix PHY_RESET
-       data = e1000_rr32(E1000_CTRL);
-       data = data & ~E1000_CTRL_PHY_RST;
-       e1000_wr32(E1000_CTRL, data);
-       data = e1000_rr32(E1000_STATUS);
-       data = data & ~E1000_STATUS_MTXCKOK; // XXX: Against spec
-       e1000_wr32(E1000_STATUS, data);
-
-       // Link MAC and PHY
-       data = e1000_rr32(E1000_CTRL);
-       data = data & E1000_CTRL_SLU;
-       e1000_wr32(E1000_CTRL, data);
-
-       // Set PHY mode
-       data = e1000_rr32(E1000_CTRL_EXT);
-       data = (data & ~E1000_CTRL_EXT_LINK_MODE_MASK) | E1000_CTRL_EXT_LINK_MODE_GMII;
-       e1000_wr32(E1000_CTRL_EXT, data);
-
-       // Set full-duplex
-       data = e1000_rr32(E1000_CTRL);
-       data = data & E1000_CTRL_FD;
-       e1000_wr32(E1000_CTRL, data);
-
-       // Set CTRL speed (from STATUS speed)
-       {
-               data = e1000_rr32(E1000_CTRL);
-               uint32_t status = e1000_rr32(E1000_STATUS);
-               status = (status & E1000_STATUS_SPEED_MASK) >> 6;
-               data = (data & ~E1000_CTRL_SPD_SEL) | (status << 8);
-               e1000_wr32(E1000_CTRL, data);
-       }
-
-       // Turn off flow control
-       e1000_wr32(E1000_FCAL, 0x00);
-       e1000_wr32(E1000_FCAH, 0x00);
-       e1000_wr32(E1000_FCT,  0x00);
-
-       // Setup MAC address
-       e1000_setup_mac();      
-
-        // Set RX Ring
-        e1000_wr32(E1000_RDBAL, rx_des_pa);
-        e1000_wr32(E1000_RDBAH, 0x00);
-
-        // Set RX Ring Size
-        // Size in bytes.
-        e1000_wr32(E1000_RDLEN, (NUM_RX_DESCRIPTORS / 8) << 7);
-       
-       // Disablie the split and replication control queue 
-       e1000_wr32(E1000_SRRCTRL, 0x00);
-
-       // Set head and tail pointers.
-        e1000_wr32(E1000_RDH, 0x00);
-        e1000_wr32(E1000_RDT, 0x00);
-
-        // Receive descriptor control
-       e1000_wr32(E1000_RXDCTL, E1000_RXDCTL_ENABLE | E1000_RXDCTL_WBT | E1000_RXDCTL_MAGIC);
-
-       // Disable packet splitting.
-        data = e1000_rr32(E1000_RFCTL);
-        data = data & ~E1000_RFCTL_EXTEN;
-        e1000_wr32(E1000_RFCTL, data);
-
-       // Enable packet reception
-       data = e1000_rr32(E1000_RCTL);
-       data = data | E1000_RCTL_EN | E1000_RCTL_BAM;
-       e1000_wr32(E1000_RCTL, data);
-
-       // Bump the tail pointer. This MUST be done at this point 
-       // _AFTER_ packet receiption is enabled. See 85276 spec sheet.
-        e1000_wr32(E1000_RDT, NUM_RX_DESCRIPTORS - 1);
-
-       // Set TX Ring
-       e1000_wr32(E1000_TDBAL, tx_des_pa);
-       e1000_wr32(E1000_TDBAH, 0x00);
-
-       // Set TX Des Size.
-       // This is the number of 8 descriptor sets, it starts at the 7th bit.
-       e1000_wr32(E1000_TDLEN, ((NUM_TX_DESCRIPTORS / 8) << 7));
-
-        // Transmit inter packet gap register
-        // XXX: Recomended magic. See 13.4.34
-        e1000_wr32(E1000_TIPG, 0x00702008);
-
-       // Set head and tail pointers.
-       e1000_wr32(E1000_TDH, 0x00);
-       e1000_wr32(E1000_TDT, 0x00);
-
-        // Tansmit desc control
-        e1000_wr32(E1000_TXDCTL, E1000_TXDCTL_MAGIC | E1000_TXDCTL_ENABLE);
-
-       // Enable transmit
-       // Enable + pad short packets + Back off time + Collision thresh
-       // The 0x0F000 is the back off time, and 0x0010 is the collision thresh.
-       e1000_wr32(E1000_TCTL, E1000_TCTL_EN | E1000_TCTL_PSP | 0x0F010);
-
-       return;
-}
-
-// Reset the device.
-void e1000_reset() {
-       e1000_debug("-->Resetting device..... ");
-
-       e1000_wr32(E1000_CTRL, e1000_rr32(E1000_CTRL) | E1000_CTRL_RST);
-
-       e1000_debug(" done.\n");
-
-       return;
-}
-
-void e1000_irq_enable() {
-       printk("e1000 enabled\n");
-       e1000_wr32(E1000_IMS, IMS_ENABLE_MASK);
-       E1000_WRITE_FLUSH();
-}
-
-// Configure and enable interrupts
-void e1000_setup_interrupts() {
-       
-       e1000_debug("-->Setting interrupts.\n");
-       
-       // Set throttle register
-       e1000_wr32(E1000_ITR, 0x0000);
-       
-       // Clear interrupts
-       e1000_wr32(E1000_IMS, 0xFFFFFFFF);
-       e1000_wr32(E1000_IMC, E1000_IMC_ALL);
-       
-       // Set interrupts
-       e1000_irq_enable();
-
-       // Kernel based interrupt stuff
-       register_dev_irq(e1000_irq, e1000_interrupt_handler, 0);
-}
-
-// Code that is executed when an interrupt comes in on IRQ e1000_irq
-void e1000_interrupt_handler(struct hw_trapframe *hw_tf, void *data)
-{
-       e1000_interrupt_debug("\nNic interrupt on core %u!\n", lapic_get_id());
-
-       // Read the offending interrupt(s)
-       // Note: Reading clears the interrupts
-       uint32_t icr = e1000_rr32(E1000_ICR);
-
-       
-       /* Interrupt did not come from our card.., handle one interrupt per isr */
-       if (!icr) return; 
-       /* disable interrupts, this may not be necessary as AUTOMASK of interrupts
-        * is enabled on some cards
-        * but we do it anyways to be safe..
-        */
-       e1000_wr32(E1000_IMC, ~0);
-       E1000_WRITE_FLUSH();
-
-       //printk("Interrupt status: %x\n", icr);
-
-       if ((icr & E1000_ICR_INT_ASSERTED) && (icr & E1000_ICR_RXT0)){
-               e1000_interrupt_debug("---->Packet Received\n");
-#ifdef CONFIG_SOCKET
-//#if 0
-               e1000_clean_rx_irq();
-               // e1000_recv_pbuf(); // really it is now performing the function of rx_clean
-#else
-               e1000_handle_rx_packet();
-#endif
-       }       
-       e1000_irq_enable();
-}
-
-void process_pbuf(uint32_t srcid, long a0, long a1, long a2)
-{
-       if (srcid != core_id())
-               warn("pbuf came from a different core\n");
-       /* assume it is an ip packet */
-       struct pbuf* pb = (struct pbuf*) a0;
-       //printk("processing pbuf \n");
-       /*TODO: check checksum and drop */
-       /*check packet type*/
-       struct ethernet_hdr *ethhdr = (struct ethernet_hdr *) pb->payload;
-       //printk("start of eth %p \n", pb->payload);
-       //print_pbuf(pb);
-       if (memcmp(ethhdr->dst_mac, device_mac, 6)){
-               e1000_debug("mac address do not match, pbuf freed \n");
-               pbuf_free(pb);
-       }
-       switch(htons(ethhdr->eth_type)){
-               case ETHTYPE_IP:
-                       if (!pbuf_header(pb, -(ETH_HDR_SZ)))
-                               ip_input(pb);
-                       else
-                               warn("moving ethernet header in pbuf failed..\n");
-                       break;
-               case ETHTYPE_ARP:
-                       break;
-               default:
-                       //warn("packet type unknown");
-                       pbuf_free(pb);
-       }
-}
-
-static void schedule_pb(struct pbuf* pb) {
-       /* routine kernel message is kind of heavy weight, because it records src/dst etc */
-       /* TODO: consider a core-local chain of pbufs */
-       // using core 3 for network stuff..XXX
-       send_kernel_message(3, (amr_t) process_pbuf, (long)pb, 0, 0, KMSG_ROUTINE);
-       // send_kernel_message(core_id(), (amr_t) process_pbuf, (long)pb, 0, 0, KMSG_ROUTINE);
-       return;
-}
-// Check to see if a packet arrived, and process the packet.
-void e1000_handle_rx_packet() {
-       
-       uint16_t packet_size;
-       uint32_t status;
-       // find rx descriptor head
-       uint32_t head = e1000_rr32(E1000_RDH);
-
-       //printk("Current head is: %x\n", e1000_rr32(E1000_RDH));
-       //printk("Current tail is: %x\n", e1000_rr32(E1000_RDT));
-       
-       // If the HEAD is where we last processed, no new packets.
-       if (head == e1000_rx_index) {
-               e1000_frame_debug("-->Nothing to process. Returning.");
-               return;
-       }
-       
-       // Set our current descriptor to where we last left off.
-       uint32_t rx_des_loop_cur = e1000_rx_index;
-       uint32_t frame_size = 0;
-       uint32_t fragment_size = 0;
-       uint32_t num_frags = 0;
-       
-       // Grab a buffer for this packet.
-       char *rx_buffer = kmalloc(MAX_FRAME_SIZE, 0);
-       if (rx_buffer == NULL) panic ("Can't allocate page for incoming packet.");
-       
-       
-       do {
-               // Get the descriptor status
-               status = rx_des_kva[rx_des_loop_cur].status;
-
-               // If the status is 0x00, it means we are somehow trying to process 
-               //  a packet that hasnt been written by the NIC yet.
-               if (status == 0x0) {
-                       warn("ERROR: E1000: Packet owned by hardware has 0 status value\n");
-                       /* It's possible we are processing a packet that is a fragment
-                        * before the entire packet arrives.  The code currently assumes
-                        * that all of the packets fragments are there, so it assumes the
-                        * next one is ready.  We'll spin until it shows up...  This could
-                        * deadlock, and sucks in general, but will help us diagnose the
-                        * driver's issues.  TODO: determine root cause and fix this shit.*/
-                       while(rx_des_kva[rx_des_loop_cur].status == 0x0)
-                               cpu_relax();
-                       status = rx_des_kva[rx_des_loop_cur].status;
-               }
-       
-               // See how big this fragment? is.
-               fragment_size = rx_des_kva[rx_des_loop_cur].length;
-               
-               // If we've looped through the entire ring and not found a terminating packet, bad nic state.
-               // Panic or clear all descriptors? This is a nic hardware error. 
-               if (num_frags && (rx_des_loop_cur == head)) {
-                       e1000_frame_debug("-->ERR: No ending segment found in RX buffer.\n");
-                       panic("RX Descriptor Ring out of sync.");
-               }
-               
-               // Denote that we have at least 1 fragment.
-               num_frags++;
-               
-               // Make sure ownership is correct. Packet owned by the NIC (ready for kernel reading)
-               //  is denoted by a 1. Packet owned by the kernel (ready for NIC use) is denoted by 0.
-               if ((status & E1000_RXD_STAT_DD) == 0x0) {
-                       e1000_frame_debug("-->ERR: Current RX descriptor not owned by software. Panic!");
-                       panic("RX Descriptor Ring OWN out of sync");
-               }
-               
-               // Deal with packets too large
-               if ((frame_size + fragment_size) > MAX_FRAME_SIZE) {
-                       e1000_frame_debug("-->ERR: Nic sent %u byte packet. Max is %u\n", frame_size, MAX_FRAME_SIZE);
-                       panic("NIC Sent packets larger than configured.");
-               }
-               
-               // Move the fragment data into the buffer
-               memcpy(rx_buffer + frame_size, KADDR(rx_des_kva[rx_des_loop_cur].buffer_addr), fragment_size);
-               
-               // Reset the descriptor. Reuse current buffer (False means don't realloc).
-               e1000_set_rx_descriptor(rx_des_loop_cur, FALSE);
-               
-               // Note: We mask out fragment sizes at 0x3FFFF. There can be at most 2048 of them.
-               // This can not overflow the uint32_t we allocated for frame size, so
-               // we dont need to worry about mallocing too little then overflowing when we read.
-               frame_size = frame_size + fragment_size;
-               
-               // Advance to the next descriptor
-               rx_des_loop_cur = (rx_des_loop_cur + 1) % NUM_RX_DESCRIPTORS;
-
-       } while ((status & E1000_RXD_STAT_EOP) == 0); // Check to see if we are at the final fragment
-
-
-#ifdef CONFIG_APPSERVER
-       // Treat as a syscall frontend response packet if eth_type says so
-       // Will eventually go away, so not too worried about elegance here...
-       uint16_t eth_type = htons(*(uint16_t*)(rx_buffer + 12));
-       if(eth_type == APPSERVER_ETH_TYPE) {
-               handle_appserver_packet(rx_buffer, frame_size);
-               kfree(rx_buffer);
-
-               // Advance the tail pointer                             
-               e1000_rx_index = rx_des_loop_cur;
-               e1000_wr32(E1000_RDT, e1000_rx_index);
-               return;
-       }
-#endif
-
-#ifdef CONFIG_ETH_AUDIO
-       /* TODO: move this, and all packet processing, out of this driver (including
-        * the ghetto buffer).  Note we don't handle IP fragment reassembly (though
-        * this isn't an issue for the eth_audio). */
-       struct ethaud_udp_packet *packet = (struct ethaud_udp_packet*)rx_buffer;
-       uint8_t protocol = packet->ip_hdr.protocol;
-       uint16_t udp_port = ntohs(packet->udp_hdr.dst_port);
-       if (protocol == IPPROTO_UDP && udp_port == ETH_AUDIO_RCV_PORT) {
-               eth_audio_newpacket(packet);
-               // Advance the tail pointer                             
-               e1000_rx_index = rx_des_loop_cur;
-               e1000_wr32(E1000_RDT, e1000_rx_index);
-               return;
-       }
-#endif /* CONFIG_ETH_AUDIO */
-
-       // Paul:Mildly hacky stuff for LWIP
-       // TODO: Why was this necessary for LWIP?
-       spin_lock(&packet_buffers_lock);
-
-       if (num_packet_buffers >= MAX_PACKET_BUFFERS) {
-               printd("WARNING: DROPPING PACKET!\n");
-               spin_unlock(&packet_buffers_lock);
-               kfree(rx_buffer);
-       
-               // Advance the tail pointer                             
-               e1000_rx_index = rx_des_loop_cur;
-        e1000_wr32(E1000_RDT, (e1000_rx_index -1) % NUM_RX_DESCRIPTORS);
-               return;
-       }
-
-       packet_buffers[packet_buffers_tail] = rx_buffer;
-       packet_buffers_sizes[packet_buffers_tail] = frame_size;
-               
-       packet_buffers_tail = (packet_buffers_tail + 1) % MAX_PACKET_BUFFERS;
-       num_packet_buffers++;
-
-       spin_unlock(&packet_buffers_lock);
-       // End mildy hacky stuff for LWIP
-
-       //Log where we should start reading from next time we trap                              
-       e1000_rx_index = rx_des_loop_cur;
-       
-       // Bump the tail pointer. It should be 1 behind where we start reading from.
-       e1000_wr32(E1000_RDT, (e1000_rx_index -1) % NUM_RX_DESCRIPTORS);
-       dumppacket((unsigned char *)rx_buffer, frame_size);
-                               
-       // Chew on the frame data. Command bits should be the same for all frags.
-       //e1000_process_frame(rx_buffer, frame_size, current_command);
-       
-       return;
-}
-
-static void e1000_clean_rx_irq() {
-       // e1000_rx_index is the last one that we have processed
-       uint32_t i= e1000_rx_index;
-       // E1000 RDH is the last descriptor written by the hardware
-       uint32_t head = e1000_rr32(E1000_RDH);
-       uint32_t length = 0;
-       struct e1000_rx_desc *rx_desc =  &(E1000_RX_DESC(i));
-
-       // what happens when i go around the ring? 
-       while (rx_desc->status & E1000_RXD_STAT_DD){
-               struct pbuf* pb;
-               uint8_t status;
-               rx_desc = &rx_des_kva[i];
-               // buffer_info = &rx_des_kva[i];
-               status = rx_desc->status;
-               pb = pbuf_alloc(PBUF_RAW, 0 , PBUF_MTU);
-#if ETH_PAD_SIZE
-               pbuf_header(pb, -ETH_PAD_SIZE); /* drop the padding word */
-#endif
-               // fragment size
-               length = le16_to_cpu(rx_desc->length);
-
-               length -= 4;
-
-               memcpy(pb->payload, KADDR(E1000_RX_DESC(i).buffer_addr), length);
-               // skb_put(skb, length);
-               pb->len = length;
-               pb->tot_len = length;
-               schedule_pb(pb);
-               // do all the error handling 
-next_desc:
-               // this replaces e1000_set_rx_descriptor
-               rx_desc->status = 0;
-               if (++i == NUM_RX_DESCRIPTORS) i = 0;
-               rx_desc = &(E1000_RX_DESC(i)); 
-       }
-       //setting e1000_RDH?
-               printk ("cleaned index %d to %d \n", e1000_rx_index, i-1);
-               e1000_rx_index = i;
-}
-
-struct pbuf* e1000_recv_pbuf(void) {
-       uint16_t packet_size;
-       uint32_t status;
-       // recv head
-       uint32_t head = e1000_rr32(E1000_RDH);
-
-       printk("Current head is: %x\n", e1000_rr32(E1000_RDH));
-       printk("Current tail is: %x\n", e1000_rr32(E1000_RDT));
-       // e1000_rx_index = cleaned
-       // If the HEAD is where we last processed, no new packets.
-       if (head == e1000_rx_index) {
-               e1000_frame_debug("-->Nothing to process. Returning.");
-               return NULL;
-       }
-       // Set our current descriptor to where we last left off.
-       uint32_t rx_des_loop_cur = e1000_rx_index;
-       uint32_t frame_size = 0;
-       uint32_t fragment_size = 0;
-       uint32_t num_frags = 0;
-
-       uint32_t top_fragment = rx_des_loop_cur; 
-       struct pbuf* pb = pbuf_alloc(PBUF_RAW, 0, PBUF_MTU);
-       if (!pb){
-               warn("pbuf allocation failed, packet dropped\n");
-               return NULL;
-       }
-
-       uint32_t copied = 0;
-#if ETH_PAD_SIZE
-       pbuf_header(pb, -ETH_PAD_SIZE); /* drop the padding word */
-#endif
-       // pblen is way too big? it is not an indication of the size but the allocation
-       printk("pb loc %p , pb len %d \n", pb, pb->len);
-       void* rx_buffer = pb->payload;
-
-       /* The following loop generates 1 and only 1 pbuf out of 1(likely) 
-        * or more fragments. 
-        * TODO: convert this loop to clean rx irq style which is capable of 
-        * handling multiple packet / pbuf receptions
-        */
-
-       do {
-               // Get the descriptor status
-               status = rx_des_kva[rx_des_loop_cur].status;
-
-               // If the status is 0x00, it means we are somehow trying to process 
-               // a packet that hasnt been written by the NIC yet.
-               if (status & E1000_RXD_STAT_DD) {
-                       warn("ERROR: E1000: Packet owned by hardware has 0 status value\n");
-                       /* It's possible we are processing a packet that is a fragment
-                        * before the entire packet arrives.  The code currently assumes
-                        * that all of the packets fragments are there, so it assumes the
-                        * next one is ready.  We'll spin until it shows up...  This could
-                        * deadlock, and sucks in general, but will help us diagnose the
-                        * driver's issues.  TODO: determine root cause and fix this shit.*/
-                       while(rx_des_kva[rx_des_loop_cur].status == 0x0)
-                               cpu_relax();
-                       status = rx_des_kva[rx_des_loop_cur].status;
-               }
-               printk ("got out of the dead loop \n");
-       
-               // See how big this fragment is.
-               fragment_size = rx_des_kva[rx_des_loop_cur].length;
-               printk("fragment size %d\n",fragment_size);
-               
-               // If we've looped through the entire ring and not found a terminating packet, bad nic state.
-               // Panic or clear all descriptors? This is a nic hardware error. 
-               if (num_frags && (rx_des_loop_cur == head)) {
-                       e1000_frame_debug("-->ERR: No ending segment found in RX buffer.\n");
-                       panic("RX Descriptor Ring out of sync.");
-               }
-               // Denote that we have at least 1 fragment.
-               num_frags++;
-               if (num_frags > 1) warn ("we have fragments in the network \n");
-               // Make sure ownership is correct. Packet owned by the NIC (ready for kernel reading)
-               // is denoted by a 1. Packet owned by the kernel (ready for NIC use) is denoted by 0.
-               if ((status & E1000_RXD_STAT_DD) == 0x0) {
-                       e1000_frame_debug("-->ERR: Current RX descriptor not owned by software. Panic!");
-                       warn("RX Descriptor Ring OWN out of sync");
-               }
-               
-               // Deal with packets too large
-               if ((frame_size + fragment_size) > MAX_FRAME_SIZE) {
-                       e1000_frame_debug("-->ERR: Nic sent %u byte packet. Max is %u\n", frame_size, MAX_FRAME_SIZE);
-                       warn("NIC Sent packets larger than configured.");
-               }
-               
-               memcpy(rx_buffer, KADDR(rx_des_kva[rx_des_loop_cur].buffer_addr), fragment_size);
-               copied += fragment_size;
-               printk("fragment size %d \n", fragment_size);
-               rx_buffer += fragment_size;
-               
-
-               // Copy into pbuf allocated for this     
-               // TODO: reuse the pbuf later
-               // TODO:real driver uses a pbuf allocated (MTU sized) per descriptor and recycles that
-               // TODO:real driver also does not handle fragments.. simply drops them
-
-               // Reset the descriptor. Reuse current buffer (False means don't realloc).
-               e1000_set_rx_descriptor(rx_des_loop_cur, FALSE);
-               
-               // Note: We mask out fragment sizes at 0x3FFFF. There can be at most 2048 of them.
-               // This can not overflow the uint32_t we allocated for frame size, so
-               // we dont need to worry about mallocing too little then overflowing when we read.
-               frame_size = frame_size + fragment_size;
-               
-               /*Advance to the next descriptor*/
-               rx_des_loop_cur = (rx_des_loop_cur + 1) % NUM_RX_DESCRIPTORS;
-
-       } while ((status & E1000_RXD_STAT_EOP) == 0); // Check to see if we are at the final fragment
-
-       // rx_des_loop_cur has gone past the top_fragment
-       // printk("Copied %d bytes of data \n", copied);
-       // ethernet crc performed in hardware
-       copied -= 4;
-
-       pb->len = copied;
-       pb->tot_len = copied;
-       schedule_pb(pb);
-       return pb;
-}
-
-#if 0
-
-int e1000_clean_rx(){
-       struct net_device *netdev = adapter->netdev;
-       struct pci_dev *pdev = adapter->pdev;
-       struct e1000_rx_desc *rx_desc, *next_rxd;
-       struct e1000_buffer *buffer_info, *next_buffer;
-       unsigned long flags;
-       uint32_t length;
-       uint8_t last_byte;
-       unsigned int i;
-       int cleaned_count = 0;
-       boolean_t cleaned = FALSE;
-       unsigned int total_rx_bytes=0, total_rx_packets=0;
-
-       i = rx_ring->next_to_clean;
-       // rx_desc is the same as rx_des_kva[rx_des_loop_cur]
-       rx_desc = E1000_RX_DESC(*rx_ring, i);
-       buffer_info = &rx_ring->buffer_info[i];
-
-       while (rx_desc->status & E1000_RXD_STAT_DD) {
-               struct sk_buff *skb;
-               u8 status;
-
-#ifdef CONFIG_E1000_NAPI
-               if (*work_done >= work_to_do)
-                       break;
-               (*work_done)++;
-#endif
-               status = rx_desc->status;
-               skb = buffer_info->skb;
-               buffer_info->skb = NULL;
-
-               prefetch(skb->data - NET_IP_ALIGN);
-
-               if (++i == rx_ring->count) i = 0;
-               next_rxd = E1000_RX_DESC(*rx_ring, i);
-               prefetch(next_rxd);
-
-               next_buffer = &rx_ring->buffer_info[i];
-
-               cleaned = TRUE;
-               cleaned_count++;
-               pci_unmap_single(pdev,
-                                buffer_info->dma,
-                                buffer_info->length,
-                                PCI_DMA_FROMDEVICE);
-
-               length = le16_to_cpu(rx_desc->length);
-
-               if (unlikely(!(status & E1000_RXD_STAT_EOP))) {
-                       /* All receives must fit into a single buffer */
-                       E1000_DBG("%s: Receive packet consumed multiple"
-                                 " buffers\n", netdev->name);
-                       /* recycle */
-                       buffer_info->skb = skb;
-                       goto next_desc;
-               }
-
-               if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
-                       last_byte = *(skb->data + length - 1);
-                       if (TBI_ACCEPT(&adapter->hw, status,
-                                     rx_desc->errors, length, last_byte)) {
-                               spin_lock_irqsave(&adapter->stats_lock, flags);
-                               e1000_tbi_adjust_stats(&adapter->hw,
-                                                      &adapter->stats,
-                                                      length, skb->data);
-                               spin_unlock_irqrestore(&adapter->stats_lock,
-                                                      flags);
-                               length--;
-                       } else {
-                               /* recycle */
-                               buffer_info->skb = skb;
-                               goto next_desc;
-                       }
-               }
-
-               /* adjust length to remove Ethernet CRC, this must be
-                * done after the TBI_ACCEPT workaround above */
-               length -= 4;
-
-               /* probably a little skewed due to removing CRC */
-               total_rx_bytes += length;
-               total_rx_packets++;
-
-               /* code added for copybreak, this should improve
-                * performance for small packets with large amounts
-                * of reassembly being done in the stack */
-               if (length < copybreak) {
-                       struct sk_buff *new_skb =
-                           netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
-                       if (new_skb) {
-                               skb_reserve(new_skb, NET_IP_ALIGN);
-                               memcpy(new_skb->data - NET_IP_ALIGN,
-                                      skb->data - NET_IP_ALIGN,
-                                      length + NET_IP_ALIGN);
-                               /* save the skb in buffer_info as good */
-                               buffer_info->skb = skb;
-                               skb = new_skb;
-                       }
-                       /* else just continue with the old one */
-               }
-               /* end copybreak code */
-               skb_put(skb, length);
-
-               /* Receive Checksum Offload */
-               e1000_rx_checksum(adapter,
-                                 (uint32_t)(status) |
-                                 ((uint32_t)(rx_desc->errors) << 24),
-                                 le16_to_cpu(rx_desc->csum), skb);
-
-               skb->protocol = eth_type_trans(skb, netdev);
-#ifdef CONFIG_E1000_NAPI
-               if (unlikely(adapter->vlgrp &&
-                           (status & E1000_RXD_STAT_VP))) {
-                       vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
-                                                le16_to_cpu(rx_desc->special) &
-                                                E1000_RXD_SPC_VLAN_MASK);
-               } else {
-                       netif_receive_skb(skb);
-               }
-#else /* CONFIG_E1000_NAPI */
-               if (unlikely(adapter->vlgrp &&
-                           (status & E1000_RXD_STAT_VP))) {
-                       vlan_hwaccel_rx(skb, adapter->vlgrp,
-                                       le16_to_cpu(rx_desc->special) &
-                                       E1000_RXD_SPC_VLAN_MASK);
-               } else {
-                       netif_rx(skb);
-               }
-#endif /* CONFIG_E1000_NAPI */
-               netdev->last_rx = jiffies;
-
-next_desc:
-               rx_desc->status = 0;
-
-               /* return some buffers to hardware, one at a time is too slow */
-               if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) {
-                       adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);
-                       cleaned_count = 0;
-               }
-
-               /* use prefetched values */
-               rx_desc = next_rxd;
-               buffer_info = next_buffer;
-       }
-       rx_ring->next_to_clean = i;
-
-       cleaned_count = E1000_DESC_UNUSED(rx_ring);
-       if (cleaned_count)
-               adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count);
-
-       adapter->total_rx_packets += total_rx_packets;
-       adapter->total_rx_bytes += total_rx_bytes;
-       return cleaned;
-}
-}
-
-#endif
-
-int e1000_send_pbuf(struct pbuf *p) {
-       int len = p->tot_len;
-       // print_pbuf(p);
-       if (p == NULL) 
-               return -1;
-       if (len == 0)
-               return 0;
-       
-       // Find where we want to write
-       uint32_t head = e1000_rr32(E1000_TDH);
-
-       
-       // Fail if we are out of space
-       if (((e1000_tx_index + 1) % NUM_TX_DESCRIPTORS) == head) {
-               e1000_frame_debug("-->TX Ring Buffer Full!\n");
-               return -1;
-       }
-       
-       // Fail if we are too large
-       if (len > MAX_FRAME_SIZE) {
-               e1000_frame_debug("-->Frame Too Large!\n");
-               return -1;
-       }
-       
-       // Move the data
-       int cplen = pbuf_copy_out(p, KADDR(tx_des_kva[e1000_tx_index].buffer_addr), len, 0);
-
-       for(int i = 0; i< cplen; i++){
-               printd("%x", ((uint8_t*)KADDR(tx_des_kva[e1000_tx_index].buffer_addr))[i]);
-       }
-       // Set the length
-       tx_des_kva[e1000_tx_index].lower.flags.length = len;
-       
-       // Magic that means send 1 fragment and report.
-       tx_des_kva[e1000_tx_index].lower.flags.cmd = 0x0B;
-
-       // Track our location
-       e1000_tx_index = (e1000_tx_index + 1) % NUM_TX_DESCRIPTORS;
-       
-       // Bump the tail.
-       e1000_wr32(E1000_TDT, e1000_tx_index);
-
-       e1000_frame_debug("-->Sent packet.\n");
-       
-       return len;
-}
-// Main routine to send a frame. Just sends it and goes.
-// Card supports sending across multiple fragments, we don't.
-// Would we want to write a function that takes a larger packet and generates fragments?
-// This seems like the stacks responsibility. Leave this for now. may in future
-// Remove the max size cap and generate multiple packets.
-int e1000_send_frame(const char *data, size_t len) {
-
-       if (data == NULL)
-               return -1;
-       if (len == 0)
-               return 0;
-
-       // Find where we want to write
-       uint32_t head = e1000_rr32(E1000_TDH);
-
-       
-       // Fail if we are out of space
-       if (((e1000_tx_index + 1) % NUM_TX_DESCRIPTORS) == head) {
-               e1000_frame_debug("-->TX Ring Buffer Full!\n");
-               return -1;
-       }
-       
-       // Fail if we are too large
-       if (len > MAX_FRAME_SIZE) {
-               e1000_frame_debug("-->Frame Too Large!\n");
-               return -1;
-       }
-       
-       // Move the data
-       memcpy(KADDR(tx_des_kva[e1000_tx_index].buffer_addr), data, len);
-
-       // Set the length
-       tx_des_kva[e1000_tx_index].lower.flags.length = len;
-       
-       // Magic that means send 1 fragment and report.
-       tx_des_kva[e1000_tx_index].lower.flags.cmd = 0x0B;
-
-       // Track our location
-       e1000_tx_index = (e1000_tx_index + 1) % NUM_TX_DESCRIPTORS;
-       
-       // Bump the tail.
-       e1000_wr32(E1000_TDT, e1000_tx_index);
-
-       e1000_frame_debug("-->Sent packet.\n");
-       
-return len;
-}
diff --git a/kern/drivers/net/e1000.h b/kern/drivers/net/e1000.h
deleted file mode 100644 (file)
index a7c96d5..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifndef ROS_INC_E1000_H
-#define ROS_INC_E1000_H
-
-#include <ros/common.h>
-#include <trap.h>
-#include <pmap.h>
-#include <net/nic_common.h>
-#include <net/pbuf.h>
-#if 1
-#define e1000_debug(...)               printk(__VA_ARGS__)  
-#define e1000_interrupt_debug(...)     printk(__VA_ARGS__)  
-#define e1000_frame_debug(...)         printk(__VA_ARGS__)  
-#else
-#define e1000_debug(...)
-#define e1000_interrupt_debug(...)
-#define e1000_frame_debug(...)
-#endif
-
-#define E1000_IRQ_CPU          0
-
-#define INTEL_VENDOR_ID                0x8086
-/* e1000s.  For some info (and lists of more of these, check out
- * http://pci-ids.ucw.cz/read/PC/8086/  
- * Some notes:
- *     - in 2009, paul mentioned that the 82576{,NS} are supported by the igb
- *     driver in Linux, since they support a more advanced feature set.
- *     - There are many more e1000s.  We could import the list from pci-ids, or
- *     something more clever.  This list mostly just tracks devices we've seen
- *     before. */
-
-#define INTEL_82543GC_ID       0x1004
-#define INTEL_82540EM_ID       0x100e          /* qemu's device */
-#define INTEL_82545EM_ID       0x100f
-#define INTEL_82576_ID         0x10c9
-#define INTEL_82576NS_ID       0x150a
-
-#include "e1000_hw.h"
-
-// Intel Descriptor Related Sizing
-#define E1000_NUM_TX_DESCRIPTORS       2048
-#define E1000_NUM_RX_DESCRIPTORS       2048
-
-// This should be in line with the setting of BSIZE in RCTL
-#define E1000_RX_MAX_BUFFER_SIZE 2048
-#define E1000_TX_MAX_BUFFER_SIZE 2048
-#if 0
-struct e1000_tx_ring {
-       /* pointer to the descriptor ring memory */
-       void *desc;
-       /* physical address of the descriptor ring */
-       dma_addr_t dma;
-       /* length of descriptor ring in bytes */
-       unsigned int size;
-       /* number of descriptors in the ring */
-       unsigned int count;
-       /* next descriptor to associate a buffer with */
-       unsigned int next_to_use;
-       /* next descriptor to check for DD status bit */
-       unsigned int next_to_clean;
-       /* array of buffer information structs */
-       struct e1000_buffer *buffer_info;
-
-       spinlock_t tx_lock;
-       uint16_t tdh;
-       uint16_t tdt;
-       boolean_t last_tx_tso;
-};
-
-struct e1000_rx_ring {
-       /* pointer to the descriptor ring memory */
-       void *desc;
-       /* physical address of the descriptor ring */
-       dma_addr_t dma;
-       /* length of descriptor ring in bytes */
-       unsigned int size;
-       /* number of descriptors in the ring */
-       unsigned int count;
-       /* next descriptor to associate a buffer with */
-       unsigned int next_to_use;
-       /* next descriptor to check for DD status bit */
-       unsigned int next_to_clean;
-       /* array of buffer information structs */
-       struct e1000_buffer *buffer_info;
-       /* arrays of page information for packet split */
-       struct e1000_ps_page *ps_page;
-       struct e1000_ps_page_dma *ps_page_dma;
-
-       /* cpu for rx queue */
-       int cpu;
-
-       uint16_t rdh;
-       uint16_t rdt;
-};
-struct e1000_adaptor{
-       struct e1000_tx_ring tx_ring;
-       struct e1000_rx_ring rx_ring;
-
-
-}
-#endif
-
-/* driver private functions */
-static uint32_t e1000_rr32(uint32_t offset);
-static void e1000_wr32(uint32_t offset, uint32_t val);
-#define E1000_WRITE_FLUSH() e1000_rr32(E1000_STATUS)
-
-void e1000_init(void);
-void e1000_reset(void);
-void e1000_interrupt_handler(struct hw_trapframe *hw_tf, void *data);
-int  e1000_scan_pci(void);
-void e1000_setup_interrupts(void);
-void e1000_setup_descriptors(void);
-void e1000_configure(void);
-void e1000_handle_rx_packet(void);
-void e1000_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer);
-void e1000_set_tx_descriptor(uint32_t des_num);
-int  e1000_send_frame(const char* data, size_t len);
-int e1000_send_pbuf(struct pbuf *p);
-static void e1000_clean_rx_irq();
-/* returns a chain of pbuf from the driver */
-struct pbuf* e1000_recv_pbuf();
-void process_pbuf(uint32_t srcid, long a0, long a1, long a2);
-static void schedule_pb(struct pbuf* pb);
-#endif /* !ROS_INC_E1000_H */
diff --git a/kern/drivers/net/ne2k.c b/kern/drivers/net/ne2k.c
deleted file mode 100644 (file)
index 8408b06..0000000
+++ /dev/null
@@ -1 +0,0 @@
-char *nothing = "nothing to see here. ";
diff --git a/kern/drivers/net/ne2k.h b/kern/drivers/net/ne2k.h
deleted file mode 100644 (file)
index 7915428..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef ROS_INC_NE2K_H
-#define ROS_INC_NE2K_H
-
-#include <ros/common.h>
-#include <trap.h>
-#include <pmap.h>
-#include <arch/pci.h>
-#include <net/nic_common.h>
-
-#define ne2k_debug(...)  //cprintf(__VA_ARGS__)  
-#define ne2k_interrupt_debug(...) //cprintf(__VA_ARGS__)  
-#define ne2k_frame_debug(...) //cprintf(__VA_ARGS__)  
-
-#define NIC_IRQ_CPU                    5
-
-#define NE2K_VENDOR_ID 0x10EC
-#define NE2K_DEV_ID 0x8029
-
-void ne2k_init();
-int ne2k_scan_pci();
-void ne2k_configure_nic();
-void ne2k_setup_interrupts();
-void ne2k_interrupt_handler(struct hw_trapframe *hw_tf, void *data);
-void ne2k_mem_alloc();
-void ne2k_read_mac();
-void ne2k_test_interrupts();
-void ne2k_handle_rx_packet();
-int ne2k_send_frame(const char *CT(len) data, size_t len);
-char *CT(PACKET_HEADER_SIZE + len) ne2k_packet_wrap(const char *CT(len) data, size_t len);
-
-#endif /* !ROS_INC_NE2K_H */
diff --git a/kern/drivers/net/rl8168.c b/kern/drivers/net/rl8168.c
deleted file mode 100644 (file)
index f62109f..0000000
+++ /dev/null
@@ -1,676 +0,0 @@
-/** @filec
- * @brief RL8168 Driver       
- *
- * EXPERIMENTAL. DO NOT USE IF YOU DONT KNOW WHAT YOU ARE DOING
- *
- * See Info below 
- *
- * @author Paul Pearce <pearce@eecs.berkeley.edu>
- *
- */
-
-#ifdef __SHARC__
-#pragma nosharc
-#endif
-
-#include <arch/mmu.h>
-#include <arch/x86.h>
-#include <arch/smp.h>
-#include <arch/apic.h>
-#include <arch/pci.h>
-#include "rl8168.h"
-
-#include <ros/memlayout.h>
-
-#include <atomic.h>
-#include <stdio.h>
-#include <string.h>
-#include <trap.h>
-#include <kmalloc.h>
-
-#include <pmap.h>
-
-#include <eth_audio.h>
-#include <net/pbuf.h>
-
-
-/** @file
- * @brief Realtek RL8168 Driver
- *
- * EXPERIMENTAL. DO NOT USE IF YOU DONT KNOW WHAT YOU ARE DOING
- *
- * This is a function rl8168 driver, that uses some really ugly hacks to achieve
- * UDP communication with a remote syscall server, without a network stack.
- *
- * To enable use, define CONFIG_NETWORKING in your Makelocal
- *
- * @author Paul Pearce <pearce@eecs.berkeley.edu>
- *
- * @todo Move documention below into doxygen format.
- * @todo See list in code
- */
-
-
-/* RealTek 8168d (8111d) NIC Driver
- *
- * Written by Paul Pearce.
- *
- * This is a really rough "driver". Really, its not a driver, just a kernel hack to give
- * the kernel a way to receive and send packets. The basis of the init code is the OSDEV
- * page on the 8169 chipset, which is a varient of this chipset (most 8169 drivers work 
- * on the 8168d). http://wiki.osdev.org/RTL8169
- * 
- * Basic ideas (although no direct code) were gleamed from the OpenBSD re(4) driver,
- * which can be found in sys/dev/ic/re.c. sys/dev/ic/rtl81x9reg.h is needed to make
- * sense of the constants used in re.c.
- *
- * This is an ongoing work in progress. Main thing is we need a kernel interface for PCI
- * devices and network devices, that we can hook into, instead of providing arbitary functions
- * 
- * TODO: Remove hacky syscall hack stuff (once we get a real stack).
- * TODO: Jumbo frame support
- * TODO: Use high priority transmit ring for syscall stuff.
- * TODO: Discuss panic conditions.
- * TODO: Shutdown cleanup kfrees()
- * TODO: Use onboard timer interrupt to check for packets, instead of writing a bit each time we have a packet.
- * TODO: CONCURRENCY!
- */
-
-struct Descriptor
-{
-    unsigned int command,  /* command/status dword */
-                 vlan,     /* currently unused */
-                 low_buf,  /* low 32-bits of physical buffer address */
-                 high_buf; /* high 32-bits of physical buffer address */
-};
-
-
-uint32_t rl8168_io_base_addr = 0;
-uint32_t rl8168_irq = 0;
-
-struct Descriptor *CT(NUM_RX_DESCRIPTORS) rx_des_kva;
-unsigned long rx_des_pa;
-
-struct Descriptor *CT(NUM_TX_DESCRIPTORS) tx_des_kva;
-unsigned long tx_des_pa;
-
-uint32_t rx_des_cur = 0;
-uint32_t tx_des_cur = 0;
-
-
-
-void rl8168_init() {
-
-       if (rl8168_scan_pci() < 0) return;
-       rl8168_read_mac();
-       printk("Network Card MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-          device_mac[0],device_mac[1],device_mac[2],
-          device_mac[3],device_mac[4],device_mac[5]);
-       rl8168_setup_descriptors();
-       rl8168_configure();
-       rl8168_setup_interrupts();
-       send_frame = &rl8168_send_frame;
-       send_pbuf = &rl8168_send_pbuf;
-
-       eth_up = 1;
-       
-       //Trigger sw based nic interrupt
-/*     cprintf("Generating interrupt...\n");
-       outb(rl8168_io_base_addr + 0x38, 0x1);
-       cprintf("sleeping\n");
-       udelay(3000000);
-       cprintf("done\n");
-*/
-       return;
-}
-
-
-int rl8168_scan_pci() {
-       struct pci_device *pcidev;
-       uint32_t result;
-       printk("Searching for RealTek 8168 Network device...");
-       STAILQ_FOREACH(pcidev, &pci_devices, all_dev) {
-               /* Ignore non RealTek 8168 Devices */
-               if ((pcidev->ven_id != REALTEK_VENDOR_ID) ||
-                  (pcidev->dev_id != REALTEK_DEV_ID))
-                       continue;
-               printk(" found on BUS %x DEV %x\n", pcidev->bus, pcidev->dev);
-               /* Find the IRQ */
-               rl8168_irq = pcidev->irqline;
-               rl8168_debug("-->IRQ: %u\n", rl8168_irq);
-               /* Loop over the BARs */
-               for (int k = 0; k <= 5; k++) {
-                       int reg = 4 + k;
-               result = pcidev_read32(pcidev, reg << 2);       // SHAME!
-                       if (result == 0) // (0 denotes no valid data)
-                               continue;
-                       // Read the bottom bit of the BAR. 
-                       if (result & PCI_BAR_IO) {
-                               result = result & PCI_BAR_IO_MASK;
-                               rl8168_debug("-->BAR%u: %s --> %x\n", k, "IO", result);
-                       } else {
-                               result = result & PCI_BAR_MEM_MASK;
-                               rl8168_debug("-->BAR%u: %s --> %x\n", k, "MEM", result);
-                       }
-                       // TODO Switch to memory mapped instead of IO?
-                       if (k == 0) // BAR0 denotes the IO Addr for the device
-                               rl8168_io_base_addr = result;                                           
-               }
-               rl8168_debug("-->hwrev: %x\n",
-                            inl(rl8168_io_base_addr + RL_HWREV_REG) & RL_HWREV_MASK);
-               return 0;
-       }
-       printk(" not found. No device configured.\n");
-       return -1;
-}
-
-void rl8168_read_mac() {
-       
-       for (int i = 0; i < 6; i++)
-          device_mac[i] = inb(rl8168_io_base_addr + RL_MAC_OFFSET + i); 
-       
-       rl8168_debug("-->DEVICE MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", 0xFF & device_mac[0], 0xFF & device_mac[1],      
-                                                                   0xFF & device_mac[2], 0xFF & device_mac[3], 
-                                                                0xFF & device_mac[4], 0xFF & device_mac[5]);
-       return;
-}
-
-void rl8168_setup_descriptors() {
-       
-       rl8168_debug("-->Setting up tx/rx descriptors.\n");
-                       
-       // Allocate room for the buffers. 
-       // Buffers need to be on 256 byte boundries.
-       // Note: We use get_cont_pages to force page alignment, and thus 256 byte aligned
-       uint32_t num_rx_pages = ROUNDUP(NUM_RX_DESCRIPTORS * sizeof(struct Descriptor), PGSIZE) / PGSIZE;
-       uint32_t num_tx_pages = ROUNDUP(NUM_TX_DESCRIPTORS * sizeof(struct Descriptor), PGSIZE) / PGSIZE;
-       
-       rx_des_kva = get_cont_pages(LOG2_UP(num_rx_pages), 0);
-       tx_des_kva = get_cont_pages(LOG2_UP(num_tx_pages), 0);
-
-       if (rx_des_kva == NULL) panic("Can't allocate page for RX Ring");
-       if (tx_des_kva == NULL) panic("Can't allocate page for TX Ring");
-       
-       rx_des_pa = PADDR(rx_des_kva);
-       tx_des_pa = PADDR(tx_des_kva);
-       
-    for (int i = 0; i < NUM_RX_DESCRIPTORS; i++) 
-               rl8168_set_rx_descriptor(i, TRUE); // Allocate memory for the descriptor
-               
-       for (int i = 0; i < NUM_TX_DESCRIPTORS; i++) 
-               rl8168_set_tx_descriptor(i);
-               
-       return;
-}
-
-
-void rl8168_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer) {
-       
-       // Set the OWN bit on all descriptors. Also set the buffer size.
-       rx_des_kva[des_num].command = (DES_OWN_MASK | (RL_RX_MAX_BUFFER_SIZE & DES_RX_SIZE_MASK));
-       
-       if (des_num == (NUM_RX_DESCRIPTORS - 1)) 
-               rx_des_kva[des_num].command = rx_des_kva[des_num].command | DES_EOR_MASK;
-       
-       if (reset_buffer) {
-               // Must be aligned on 8 byte boundries. Taken care of by kmalloc.
-               char *rx_buffer = kmalloc(RL_RX_MAX_BUFFER_SIZE, 0);
-       
-               if (rx_buffer == NULL) panic ("Can't allocate page for RX Buffer");
-
-               rx_des_kva[des_num].low_buf = PADDR(rx_buffer);
-               //.high_buf used if we do 64bit.
-       }
-       
-       return;
-}
-
-void rl8168_set_tx_descriptor(uint32_t des_num) {
-       
-       // Clear the command bits.
-       tx_des_kva[des_num].command = 0;
-       
-       // Set EOR bit on last descriptor
-       if (des_num == (NUM_TX_DESCRIPTORS - 1))
-               tx_des_kva[des_num].command = DES_EOR_MASK;     
-               
-       char *tx_buffer = kmalloc(RL_TX_MAX_BUFFER_SIZE, 0);
-
-       if (tx_buffer == NULL) panic ("Can't allocate page for TX Buffer");
-
-       tx_des_kva[des_num].low_buf = PADDR(tx_buffer);
-       //.high_buf used if we do 64bit.
-               
-       return;
-}
-
-void rl8168_configure() {
-       
-       // TODO: Weigh resetting the nic. Not really needed. Remove?
-       // TODO Check ordering of what we set.
-       // TODO Remove C+ register setting?
-       
-       rl8168_debug("-->Configuring Device.\n");
-       rl8168_reset();
-
-       // Magic to handle the C+ register. Completely undocumented, ripped from the BSE RE driver.
-       outl(rl8168_io_base_addr + RL_CP_CTRL_REG, RL_CP_MAGIC_MASK);
-
-       // Unlock EPPROM CTRL REG
-       outb(rl8168_io_base_addr + RL_EP_CTRL_REG, RL_EP_CTRL_UL_MASK);         
-       
-       // Set max RX Packet Size
-    outw(rl8168_io_base_addr + RL_RX_MXPKT_REG, RL_RX_MAX_SIZE);       
-               
-       // Set max TX Packet Size
-    outb(rl8168_io_base_addr + RL_TX_MXPKT_REG, RL_TX_MAX_SIZE);                       
-
-       // Set TX Des Ring Start Addr
-    outl(rl8168_io_base_addr + RL_TX_DES_REG, (unsigned long)tx_des_pa); 
-       
-       // Set RX Des Ring Start Addr
-    outl(rl8168_io_base_addr + RL_RX_DES_REG, (unsigned long)rx_des_pa);       
-
-       // Configure TX
-       outl(rl8168_io_base_addr + RL_TX_CFG_REG, RL_TX_CFG_MASK); 
-       
-       // Configure RX
-       outl(rl8168_io_base_addr + RL_TX_CFG_REG, RL_RX_CFG_MASK);                      
-
-       // Enable RX and TX in the CTRL Reg
-       outb(rl8168_io_base_addr + RL_CTRL_REG, RL_CTRL_RXTX_MASK);                     
-
-       // Lock the EPPROM Ctrl REG
-    outl(rl8168_io_base_addr + RL_EP_CTRL_REG, RL_EP_CTRL_L_MASK);             
-       
-       return;
-}
-
-void rl8168_reset() {
-       
-       rl8168_debug("-->Resetting device..... ");
-       outb(rl8168_io_base_addr + RL_CTRL_REG, RL_CTRL_RESET_MASK);
-       
-       // Wait for NIC to answer "done resetting" before continuing on
-       while (inb(rl8168_io_base_addr + RL_CTRL_REG) & RL_CTRL_RESET_MASK);
-       rl8168_debug(" done.\n");
-       
-       return;
-}
-
-void rl8168_setup_interrupts() {
-       
-       rl8168_debug("-->Setting interrupts.\n");
-       
-       // Enable NIC interrupts
-       outw(rl8168_io_base_addr + RL_IM_REG, RL_INTERRUPT_MASK);
-       
-       //Clear the current interrupts.
-       outw(rl8168_io_base_addr + RL_IS_REG, RL_INTRRUPT_CLEAR);
-       
-       // Kernel based interrupt stuff
-       register_dev_irq(rl8168_irq, rl8168_interrupt_handler, 0);
-}
-
-// We need to evaluate this routine in terms of concurrency.
-// We also need to figure out whats up with different core interrupts
-void rl8168_interrupt_handler(struct hw_trapframe *hw_tf, void *data)
-{
-
-       rl8168_interrupt_debug("\nNic interrupt on core %u!\n", lapic_get_id());
-                               
-       // Read the offending interrupt(s)
-       uint16_t interrupt_status = inw(rl8168_io_base_addr + RL_IS_REG);
-
-       // Clear interrupts immediately so we can get the flag raised again.
-       outw(rl8168_io_base_addr + RL_IS_REG, interrupt_status);
-       
-       // Loop to deal with TOCTOU 
-       while (interrupt_status != 0x0000) {
-               // We can have multiple interrupts fire at once. I've personally seen this.
-               // This means we need to handle this as a series of independent if's
-               if (interrupt_status & RL_INT_ROK) {
-                       rl8168_interrupt_debug("-->RX OK\n");
-                       rl8168_handle_rx_packet();
-               }       
-       
-               if (interrupt_status & RL_INT_RERR) {
-                       rl8168_interrupt_debug("-->RX ERR\n");                  
-               }
-       
-               if (interrupt_status & RL_INT_TOK) {
-                       rl8168_interrupt_debug("-->TX OK\n");
-               }
-       
-               if (interrupt_status & RL_INT_TERR) {
-                       rl8168_interrupt_debug("-->TX ERR\n");                  
-               }
-       
-               if (interrupt_status & RL_INT_RDU) {
-                       rl8168_interrupt_debug("-->RX Descriptor Unavailable\n");                       
-               }
-       
-               if (interrupt_status & RL_INT_LINKCHG) {
-                       rl8168_interrupt_debug("-->Link Status Changed\n");                     
-               }
-       
-               if (interrupt_status & RL_INT_FOVW) {
-                       rl8168_interrupt_debug("-->RX Fifo Overflow\n");                        
-               }
-       
-               if (interrupt_status & RL_INT_TDU) {
-                       rl8168_interrupt_debug("-->TX Descriptor Unavailable\n");                       
-               }
-       
-               if (interrupt_status & RL_INT_SWINT) {
-                       rl8168_interrupt_debug("-->Software Generated Interrupt\n");
-               }
-       
-               if (interrupt_status & RL_INT_TIMEOUT) {
-                       rl8168_interrupt_debug("-->Timer Expired\n");
-               }
-       
-               if (interrupt_status & RL_INT_SERR) {
-                       rl8168_interrupt_debug("-->PCI Bus System Error\n");                    
-               }
-       
-               rl8168_interrupt_debug("\n");
-               
-               // Clear interrupts     
-               interrupt_status = inw(rl8168_io_base_addr + RL_IS_REG);
-               outw(rl8168_io_base_addr + RL_IS_REG, interrupt_status);
-       }
-       
-       // In the event that we got really unlucky and more data arrived after we set 
-       //  set the bit last, try one more check
-       rl8168_handle_rx_packet();
-
-       return;
-}
-
-// TODO: Does a packet too large get dropped or just set the error bits in the descriptor? Find out.
-// TODO: Should we move on to look for the next descriptor? is it safe? TOCTOU
-void rl8168_handle_rx_packet() {
-       
-       uint32_t current_command = rx_des_kva[rx_des_cur].command;
-       uint16_t packet_size;
-       
-       if (current_command & DES_OWN_MASK) {
-               rl8168_frame_debug("-->Nothing to process. Returning.");
-               return;
-       }
-               
-       rl8168_frame_debug("-->RX Des: %u\n", rx_des_cur);
-       
-       // Make sure we are processing from the start of a packet segment
-       if (!(current_command & DES_FS_MASK)) {
-               rl8168_frame_debug("-->ERR: Current RX descriptor not marked with FS mask. Panic!");
-               panic("RX Descriptor Ring FS out of sync");
-       }
-       
-       // NOTE: We are currently configured that the max packet size is large enough to fit inside 1 descriptor buffer,
-       // So we should never be in a situation where a packet spans multiple descriptors.
-       // When we change this, this should operate in a loop until the LS mask is found
-       // Loop would begin here.
-       
-       uint32_t rx_des_loop_cur = rx_des_cur;
-       uint32_t frame_size = 0;
-       uint32_t fragment_size = 0;
-       uint32_t num_frags = 0;
-       
-       char *rx_buffer = kmalloc(MAX_FRAME_SIZE, 0);
-       
-       if (rx_buffer == NULL) panic ("Can't allocate page for incoming packet.");
-       
-       do {
-               current_command =  rx_des_kva[rx_des_loop_cur].command;
-               fragment_size = rx_des_kva[rx_des_loop_cur].command & DES_RX_SIZE_MASK;
-               
-               // If we've looped through the entire ring and not found a terminating packet, bad nic state.
-               // Panic or clear all descriptors? This is a nic hardware error. 
-               if (num_frags && (rx_des_loop_cur == rx_des_cur)) {
-                       //for (int i = 0; i < NUM_RX_DESCRIPTORS; i++) 
-                       //      set_rx_descriptor(i, FALSE); // Dont reallocate memory for the descriptor
-                       // rx_des_cur = 0;
-                       // return;
-                       rl8168_frame_debug("-->ERR: No ending segment found in RX buffer.\n");
-                       panic("RX Descriptor Ring out of sync.");
-               }
-               
-               num_frags++;
-               
-               
-               // Make sure we own the current packet. Kernel ownership is denoted by a 0. Nic by a 1.
-               if (current_command & DES_OWN_MASK) {
-                       rl8168_frame_debug("-->ERR: Current RX descriptor not owned by kernel. Panic!");
-                       panic("RX Descriptor Ring OWN out of sync");
-               }
-               
-               // Make sure if we are at the end of the buffer, the des is marked as end
-               if ((rx_des_loop_cur == (NUM_RX_DESCRIPTORS - 1)) && !(current_command & DES_EOR_MASK)) {
-                       rl8168_frame_debug("-->ERR: Last RX descriptor not marked with EOR mask. Panic!\n");
-                       panic("RX Descriptor Ring EOR Missing");
-               }
-               
-               // We set a max frame size and the nic violated that. 
-               // Panic or clear all desriptors?
-               if ((frame_size + fragment_size) > MAX_FRAME_SIZE) {
-                       //for (int i = 0; i < NUM_RX_DESCRIPTORS; i++) 
-                       //      set_rx_descriptor(i, FALSE); // Dont reallocate memory for the descriptor
-                       // rx_des_cur = 0;
-                       // return;
-                       rl8168_frame_debug("-->ERR: Nic sent %u byte packet. Max is %u\n", frame_size, MAX_FRAME_SIZE);
-                       panic("NIC Sent packets larger than configured.");
-               }
-               
-               // Move the fragment data into the buffer
-               memcpy(rx_buffer + frame_size, KADDR(rx_des_kva[rx_des_loop_cur].low_buf), fragment_size);
-               
-               // Reset the descriptor. No reuse buffer.
-               rl8168_set_rx_descriptor(rx_des_loop_cur, FALSE);
-               
-               // Note: We mask out fragment sizes at 0x3FFFF. There can be at most 1024 of them.
-               // This can not overflow the uint32_t we allocated for frame size, so
-               // we dont need to worry about mallocing too little then overflowing when we read.
-               frame_size = frame_size + fragment_size;
-               
-               // Advance to the next descriptor
-               rx_des_loop_cur = (rx_des_loop_cur + 1) % NUM_RX_DESCRIPTORS;
-               
-       } while (!(current_command & DES_LS_MASK));
-
-#ifdef CONFIG_APPSERVER
-       // Treat as a syscall frontend response packet if eth_type says so
-       // Will eventually go away, so not too worried about elegance here...
-       #include <frontend.h>
-       #include <arch/frontend.h>
-       uint16_t eth_type = htons(*(uint16_t*)(rx_buffer + 12));
-       if(eth_type == APPSERVER_ETH_TYPE) {
-               rx_des_cur = rx_des_loop_cur;
-               rl8168_process_frame(rx_buffer, frame_size, current_command);
-               handle_appserver_packet(rx_buffer, frame_size);
-               kfree(rx_buffer);
-               return;
-       }
-#endif
-#ifdef CONFIG_ETH_AUDIO
-       /* TODO: move this, and all packet processing, out of this driver (including
-        * the ghetto buffer).  Note we don't handle IP fragment reassembly (though
-        * this isn't an issue for the eth_audio). */
-       struct ethaud_udp_packet *packet = (struct ethaud_udp_packet*)rx_buffer;
-       uint8_t protocol = packet->ip_hdr.protocol;
-       uint16_t udp_port = ntohs(packet->udp_hdr.dst_port);
-       if (protocol == IPPROTO_UDP && udp_port == ETH_AUDIO_RCV_PORT) {
-               rx_des_cur = rx_des_loop_cur;
-               eth_audio_newpacket(packet);
-               kfree(rx_buffer);
-               return;
-       }
-#endif /* CONFIG_ETH_AUDIO */
-
-       spin_lock(&packet_buffers_lock);
-
-       if (num_packet_buffers >= MAX_PACKET_BUFFERS) {
-               //printk("WARNING: DROPPING PACKET!\n");
-               spin_unlock(&packet_buffers_lock);
-               rx_des_cur = rx_des_loop_cur;
-               kfree(rx_buffer);
-               return;
-       }
-
-       packet_buffers[packet_buffers_tail] = rx_buffer;
-       packet_buffers_sizes[packet_buffers_tail] = frame_size;
-               
-       packet_buffers_tail = (packet_buffers_tail + 1) % MAX_PACKET_BUFFERS;
-       num_packet_buffers++;
-
-       spin_unlock(&packet_buffers_lock);
-                               
-       rx_des_cur = rx_des_loop_cur;
-
-       // Chew on the frame data. Command bits should be the same for all frags.
-       rl8168_process_frame(rx_buffer, frame_size, current_command);
-       
-       return;
-}
-
-// This is really more of a debug level function. Will probably go away once we get a stack going.
-void rl8168_process_frame(char *frame_buffer, uint32_t frame_size, uint32_t command) {
-               
-       rl8168_frame_debug("-->Command: %x\n", command);
-       rl8168_frame_debug("-->Size: %u\n", frame_size);
-       
-       if (frame_buffer == NULL)
-               return;
-       
-       // This is hacky. Once we know what our stack will look like, change this.
-       // Once remove check for 0 size.
-       if (frame_size < MIN_FRAME_SIZE) {
-               rl8168_frame_debug("-->Packet too small. Discarding.\n");
-               return;
-       }
-       
-       char dest_mac[6];
-       char source_mac[6];
-       char eth_type[2];
-       
-       for (int i = 0; i < 6; i++) {
-               dest_mac[i] = frame_buffer[i];
-       }
-       
-       for (int i = 0; i < 6; i++) {
-               source_mac[i] = frame_buffer[i+6];
-       }
-       
-       eth_type[0] = frame_buffer[12];
-       eth_type[1] = frame_buffer[13];
-       
-       if (command & DES_MAR_MASK) {
-               rl8168_frame_debug("-->Multicast Packet.\n");
-       }
-       
-       if (command & DES_PAM_MASK) {
-               rl8168_frame_debug("-->Physical Address Matched.\n");
-       }
-       
-       if (command & DES_BAR_MASK) {
-               rl8168_frame_debug("-->Broadcast Packet.\n");
-       }
-       
-       // Note: DEST comes before SRC in the ethernet frame, but that 
-       
-       rl8168_frame_debug("-->DEST   MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", 0xFF & dest_mac[0], 0xFF & dest_mac[1],    
-                                                                            0xFF & dest_mac[2], 0xFF & dest_mac[3],    
-                                                                             0xFF & dest_mac[4], 0xFF & dest_mac[5]);
-       
-       rl8168_frame_debug("-->SOURCE MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", 0xFF & source_mac[0], 0xFF & source_mac[1],        
-                                                                            0xFF & source_mac[2], 0xFF & source_mac[3],        
-                                                                             0xFF & source_mac[4], 0xFF & source_mac[5]);
-
-       rl8168_frame_debug("-->ETHR MODE: %02x%02x\n", 0xFF & eth_type[0], 0xFF & eth_type[1]);
-               
-       return;
-}
-
-/* Look into how bsd does send mbuf ? */
-int rl8168_send_pbuf(struct pbuf *p) {
-       int len = p->tot_len;
-       if (p == NULL)
-               return -1;
-       if (len == 0)
-               return 0;
-
-       if (tx_des_kva[tx_des_cur].command & DES_OWN_MASK) {
-               rl8168_frame_debug("-->TX Ring Buffer Full!\n");
-               return -1;
-       }
-       if (len > MAX_FRAME_SIZE){
-               return -1;
-       }
-       /* Copy everything out of pbuf to network buffer to be sent */
-       /* One copy! */
-       pbuf_copy_out(p, KADDR(tx_des_kva[tx_des_cur].low_buf), len, 0);
-       tx_des_kva[tx_des_cur].command = tx_des_kva[tx_des_cur].command | len | DES_OWN_MASK | DES_FS_MASK | DES_LS_MASK;
-       
-       tx_des_kva[tx_des_cur].vlan = 0;
-
-
-       tx_des_cur = (tx_des_cur + 1) % NUM_TX_DESCRIPTORS;
-       
-       rl8168_frame_debug("--> Sending Packet\n");
-       for(int i=0; i<len; i++)
-               rl8168_frame_debug("%x ", (unsigned int)(unsigned char)(data[i]));
-       rl8168_frame_debug("\n");
-       rl8168_frame_debug("--> Sent packet.\n");
-       
-       outb(rl8168_io_base_addr + RL_TX_CTRL_REG, RL_TX_SEND_MASK);
-       
-       return len;
-}
-// Main routine to send a frame. Just sends it and goes.
-// Card supports sending across multiple fragments.
-// Would we want to write a function that takes a larger packet and generates fragments?
-// This seems like the stacks responsibility. Leave this for now. may in future
-// Remove the max size cap and generate multiple packets.
-int rl8168_send_frame(const char *data, size_t len) {
-
-       if (data == NULL)
-               return -1;
-       if (len == 0)
-               return 0;
-
-       if (tx_des_kva[tx_des_cur].command & DES_OWN_MASK) {
-               rl8168_frame_debug("-->TX Ring Buffer Full!\n");
-               return -1;
-       }
-       
-       if (len > MAX_FRAME_SIZE) {
-               rl8168_frame_debug("-->Frame Too Large!\n");
-               return -1;
-       }
-       
-       memcpy(KADDR(tx_des_kva[tx_des_cur].low_buf), data, len);
-
-       tx_des_kva[tx_des_cur].command = tx_des_kva[tx_des_cur].command | len | DES_OWN_MASK | DES_FS_MASK | DES_LS_MASK;
-
-       // For this revision of the NIC, the checksum bits get set in the vlan field not the command field.
-       // THIS IS A HACK: Need to reach inside the frame we are sending and detect if its of type ip/udp/tcp and set right flag
-       // For now, for the syscall hack, force ip checksum on. (we dont care about udp checksum).
-       // Add an argument to function to specify packet type?
-       //tx_des_kva[tx_des_cur].vlan = DES_TX_IP_CHK_MASK;
-       tx_des_kva[tx_des_cur].vlan = 0;
-
-
-       tx_des_cur = (tx_des_cur + 1) % NUM_TX_DESCRIPTORS;
-       
-       rl8168_frame_debug("--> Sending Packet\n");
-       for(int i=0; i<len; i++)
-               rl8168_frame_debug("%x ", (unsigned int)(unsigned char)(data[i]));
-       rl8168_frame_debug("\n");
-       rl8168_frame_debug("--> Sent packet.\n");
-       
-       outb(rl8168_io_base_addr + RL_TX_CTRL_REG, RL_TX_SEND_MASK);
-       
-       return len;
-}
-
diff --git a/kern/drivers/net/rl8168.h b/kern/drivers/net/rl8168.h
deleted file mode 100644 (file)
index 0c23be4..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-#ifndef ROS_INC_REALTEK_H
-#define ROS_INC_REALTEK_H
-
-#include <ros/common.h>
-#include <trap.h>
-#include <pmap.h>
-#include <net/nic_common.h>
-
-#define rl8168_debug(...) // cprintf(__VA_ARGS__)  
-#define rl8168_interrupt_debug(...) //cprintf(__VA_ARGS__)  
-#define rl8168_frame_debug(...)  //cprintf(__VA_ARGS__)  
-
-#define NE2K_IRQ_CPU           5
-
-#define REALTEK_VENDOR_ID   0x10ec
-#define REALTEK_DEV_ID      0x8168
-
-// Realtek Offsets
-#define RL_HWREV_REG           0x40
-#define RL_MAC_OFFSET          0x00
-#define RL_CTRL_REG         0x37
-#define RL_IM_REG                      0x3c
-#define RL_IS_REG                      0x3E
-#define RL_EP_CTRL_REG         0x50
-#define RL_RX_CFG_REG          0x44
-#define RL_TX_CFG_REG          0x40
-#define RL_RX_MXPKT_REG     0xDA
-#define RL_TX_MXPKT_REG     0xEC
-#define RL_RX_DES_REG       0xE4
-#define RL_TX_DES_REG       0x20
-#define RL_TX_CTRL_REG         0x38    
-#define RL_CP_CTRL_REG         0xE0            
-
-// Realtek masks
-#define RL_HWREV_MASK          0x7C800000
-#define RL_CTRL_RXTX_MASK      0x0C
-#define RL_CTRL_RESET_MASK  0x10
-
-#define RL_EP_CTRL_UL_MASK     0xC0
-#define RL_EP_CTRL_L_MASK      0x00
-#define RL_TX_SEND_MASK                0x40
-#define RL_CP_MAGIC_MASK       0x002B // Magic bits pulled from the BSD driver.
-                                                                  // Are listed as needed for TX/RX checksumming
-
-// NOTE: THESE SHOULD BE BROKEN DOWN INTO A SERIES OF BITS TO REPERSENT THE VARIOUS OPTIONS
-// AND THEN THE MASK SHOULD BE DEFINED TO BE AN OR OF THOSE BITS. THIS IS A QUICK HACK JOB.
-// See interrupts below for how this should be done
-#define RL_RX_CFG_MASK         0x0000E70F  // RXFTH: unlimited, MXDMA: unlimited, AAP: set (promisc. mode set)
-#define RL_TX_CFG_MASK         0x3000700  // IFG: normal, MXDMA: unlimited.  crc appended
-
-// Realtek interrupt bits
-#define RL_INT_SERR                    0x8000
-#define RL_INT_TIMEOUT         0x4000
-#define RL_INT_SWINT           0x0100
-#define RL_INT_TDU                     0x0080
-#define RL_INT_FOVW                    0x0040
-#define RL_INT_LINKCHG         0x0020
-#define RL_INT_RDU                     0x0010
-#define RL_INT_TERR                    0x0008
-#define RL_INT_TOK                     0x0004
-#define RL_INT_RERR                    0x0002
-#define RL_INT_ROK                     0x0001
-
-#define RL_INTERRUPT_MASK      RL_INT_LINKCHG | RL_INT_TOK | RL_INT_ROK | RL_INT_SWINT
-#define RL_INTRRUPT_CLEAR      0xFFFF
-
-// Realtek descriptor command bits
-#define DES_OWN_MASK           0x80000000
-#define DES_EOR_MASK           0x40000000
-#define DES_RX_SIZE_MASK       0x3FFF
-#define DES_FS_MASK                    0x20000000
-#define DES_LS_MASK                    0x10000000
-#define DES_MAR_MASK           0x08000000
-#define DES_PAM_MASK           0x04000000
-#define DES_BAR_MASK           0x02000000
-
-// TFor some reaosn the bits are in an undocumented position for our NIC
-// They should be part of the command field, at the commented addrs below. instead
-// they are part of the vlan field as stated below.
-//#define DES_TX_IP_CHK_MASK  0x40000
-//#define DES_TX_UDP_CHK_MASK 0x20000
-//#define DES_TX_TCP_CHK_MASK 0x10000
-#define DES_TX_IP_CHK_MASK  0x20000000
-#define DES_TX_UDP_CHK_MASK 0x80000000
-#define DES_TX_TCP_CHK_MASK 0x40000000
-
-// Realtek Descriptor Related Sizing
-#define NUM_TX_DESCRIPTORS     1024
-#define NUM_RX_DESCRIPTORS     1024
-
-// !!!!!!!!! need to verify the 128byte nature of this field. Spec says it could be 32 for some chips.
-
-#define RL_TX_MAX_BUFFER_SIZE  ROUNDUP(MAX_FRAME_SIZE, 128)
-#define RL_RX_MAX_BUFFER_SIZE  ROUNDUP(MAX_FRAME_SIZE, 8)    // Might be able to be 4 less. Does it strip out the crc flag?
-
-#define RL_TX_MAX_SIZE         RL_TX_MAX_BUFFER_SIZE / 128
-#define RL_RX_MAX_SIZE         RL_RX_MAX_BUFFER_SIZE
-
-#define RL_DES_ALIGN   256
-#define RL_BUF_ALIGN   8
-
-// ^----- Good line ------^
-
-// v----- Evil line ------v
-
-//char *CT(PACKET_HEADER_SIZE + len)
-//rl8168_packet_wrap(const char *CT(len) data, size_t len);
-
-// ^----- Evil line ------^
-
-// v----- Good line ------v
-
-
-void rl8168_init(void);
-void rl8168_reset(void);
-void rl8168_interrupt_handler(struct hw_trapframe *hw_tf, void *data);
-int rl8168_scan_pci(void);
-void rl8168_read_mac(void);
-void rl8168_setup_interrupts(void);
-void rl8168_setup_descriptors(void);
-void rl8168_configure(void);
-void rl8168_handle_rx_packet(void);
-void rl8168_set_rx_descriptor(uint32_t des_num, uint8_t reset_buffer);
-void rl8168_set_tx_descriptor(uint32_t des_num);
-void rl8168_process_frame(char *CT(frame_size) frame_buffer,
-                          uint32_t frame_size, uint32_t command);
-int rl8168_send_frame(const char *CT(len) data, size_t len);
-int rl8168_send_pbuf(struct pbuf *p);
-
-#endif /* !ROS_INC_REALTEK_H */
diff --git a/kern/include/eth_audio.h b/kern/include/eth_audio.h
deleted file mode 100644 (file)
index 282aa7b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (c) 2010 The Regents of the University of California
- * Barret Rhoden <brho@cs.berkeley.edu>
- * See LICENSE for details.
- *
- * Rimas's Ethernet-Audio device */
-
-#ifndef ROS_KERN_ETH_AUDIO_H
-#define ROS_KERN_ETH_AUDIO_H
-
-#include <devfs.h>
-#include <net.h>
-
-#define ETH_AUDIO_RCV_PORT 1792                                /* where we listen */
-#define ETH_AUDIO_SRC_PORT 1792                                /* where we send from */
-#define ETH_AUDIO_DST_PORT 1793                                /* where we send to */
-/* 10 channels * 4 bytes/channel * 32 samples/packet = 1280.  On inbound
- * packets, we have + 2 bytes for a * sequence ID.  On outbound packets, we have
- * 4 bytes for control messages.  For now, we'll use the greater of the two,
- * though this does mean we copy 2 extra bytes (that should be 0) into the
- * mmap'd region.  Just don't read them. */
-#define ETH_AUDIO_PAYLOAD_SZ 1284
-#define ETH_AUDIO_IP_HDR_SZ 20
-#define ETH_AUDIO_HEADER_OFF (ETH_HDR_SZ + ETH_AUDIO_IP_HDR_SZ + UDP_HDR_SZ)
-#define ETH_AUDIO_FRAME_SZ (ETH_AUDIO_PAYLOAD_SZ + ETH_AUDIO_HEADER_OFF)
-
-
-/* Ethernet frame for what one of our packets looks like (since we don't have
- * the infrastructure to build one properly).  This implies that there are no
- * IP or ethernet options. */
-struct ethaud_udp_packet {
-       struct ethernet_hdr                     eth_hdr;
-       struct ip_hdr                           ip_hdr;
-       struct udp_hdr                          udp_hdr;
-       char                                            payload[ETH_AUDIO_PAYLOAD_SZ];
-} __attribute__((packed));
-
-void eth_audio_init(void);
-/* This is called by net subsys when it detects an ethernet audio packet */
-void eth_audio_newpacket(void *buf);
-
-#endif /* ROS_KERN_ETH_AUDIO_H */
diff --git a/kern/include/net.h b/kern/include/net.h
deleted file mode 100644 (file)
index 8524065..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (c) 2010 The Regents of the University of California
- * Barret Rhoden <brho@cs.berkeley.edu>
- * David Zhu <yuzhu@cs.berkeley.edu>
- * See LICENSE for details.
- *
- * Arch independent networking infrastructure */
-
-#ifndef ROS_KERN_NET_H
-#define ROS_KERN_NET_H
-
-#include <bits/netinet.h>
-#include <net/pbuf.h>
-#include <stdio.h>
-
-
-/* A few other useful standard defines.  Note the IP header can change size. */
-#define ETH_HDR_SZ 14 // without padding, 16 with padding
-
-#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE)  
-
-#define UDP_HDR_SZ 8
-#define IP_ETH_TYPE 0x0800
-#define ETHTYPE_IP IP_ETH_TYPE
-#define ETHTYPE_ARP 0x0806
-
-#define IP_HDR_SZ 20
-/* ROS defaults: They really should be netif specific*/
-#define DEFAULT_TTL 64
-#define DEFAULT_MTU 1500
-// is this network order already?
-#define LOCAL_IP_ADDR (struct in_addr) {0x0A000002}  //lookout for address order
-
-
-/* Don't forget the bytes are in network order */
-struct ethernet_hdr {
-       /* might want to pad to increase access speed? */
-       uint8_t                                         dst_mac[6];
-       uint8_t                                         src_mac[6];
-       uint16_t                                        eth_type;
-       /* might be an optional 802.1q tag here */
-} __attribute__((packed));
-
-#define IP_RF 0x8000        /* reserved fragment flag */
-#define IP_DF 0x4000        /* dont fragment flag */
-#define IP_MF 0x2000        /* more fragments flag */
-#define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */
-
-#define PACK_STRUCT_FIELD(x) x __attribute__((packed))
-
-/* For the bit-enumerated fields, note that you need to read "backwards" through
- * the byte (first bits in memory are the "LSB" of the byte).  Can't seem to be
- * able to do it with flags/fragments (3/13 bits each...). */
-struct ip_hdr {
-       /* TODO: Are these accesses slower? */
-       unsigned                                        hdr_len : 4;
-       unsigned                                        version : 4;
-       uint8_t                                         tos;
-       uint16_t                                        packet_len;
-       /* ip header id is used for fragmentation reassembly */
-       uint16_t                                        id;  // 1 index this?
-       /* flags controlling fragmentation(do not fragment etc) */
-       uint16_t                                        flags_frags;
-       /* statically set to a constatnt right now */
-       uint8_t                                         ttl;
-       uint8_t                                         protocol;
-       uint16_t                                        checksum;
-       uint32_t                                        src_addr;
-       uint32_t                                        dst_addr;
-       /* Options could be here (depends on the hdr length) */
-} __attribute__((packed));
-
-struct udp_hdr {
-       uint16_t                                        src_port;
-       uint16_t                                        dst_port;
-       uint16_t                                        length;
-       uint16_t                                        checksum;
-} __attribute__((packed));
-
-struct tcp_hdr {
-  PACK_STRUCT_FIELD(uint16_t src);
-  PACK_STRUCT_FIELD(uint16_t dest);
-  PACK_STRUCT_FIELD(uint32_t seqno);
-  PACK_STRUCT_FIELD(uint32_t ackno);
-  PACK_STRUCT_FIELD(uint16_t _hdrlen_rsvd_flags);
-  PACK_STRUCT_FIELD(uint16_t wnd);
-  PACK_STRUCT_FIELD(uint16_t chksum);
-  PACK_STRUCT_FIELD(uint16_t urgp);
-} __attribute__((packed));
-
-/* src and dst are in network order*/
-uint16_t inet_chksum_pseudo(struct pbuf *p, uint32_t src, uint32_t dest, uint8_t proto, uint16_t proto_len);
-uint16_t __ip_checksum(void *buf, unsigned int len, uint32_t sum);
-uint16_t ip_checksum(struct ip_hdr *ip_hdr);
-uint16_t udp_checksum(struct ip_hdr *ip_hdr, struct udp_hdr *udp_hdr);
-
-// TODO: Move this to a better location
-void dumppacket(unsigned char *buff, size_t len);
-#endif /* ROS_KERN_NET_H */
diff --git a/kern/include/net/dev.h b/kern/include/net/dev.h
deleted file mode 100644 (file)
index 609cf94..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (c) 2010 The Regents of the University of California
- * David Zhu <yuzhu@cs.berkeley.edu> 
- * See LICENSE for details.
- *
- * Simplified network device interface */
-#ifndef ROS_KERN_NET_DEV_H
-#define ROS_KERN_NET_DEV_H
-
-#include <bits/netinet.h>
-#include <stdio.h>
-#include <socket.h>
-#include <ros/common.h>
-
-struct net_device_ops {
-       int (*init)(struct netif *netif);
-       int (*send_frame) (struct netif *netif, const char data, size_t len) ;
-       int (*send_pbuf) (struct netif *netif, const struct pbuf* pb);
-       int (*recv_pbuf) (struct netif *netif, const struct pbuf* pb);
-}
-
-struct netif {
-       /* TODO: next netif so we can build a list of them*/
-       struct in_addr ip_addr;
-       struct in_addr gw;
-       uint16_t mtu;
-       uint8_t mac[6];
-       struct net_device_ops ops;
-       uint8_t eth_up;   // status 
-}; 
-
-
-#endif //ROS_KERN_NET_DEV_H
diff --git a/kern/include/net/ip.h b/kern/include/net/ip.h
deleted file mode 100644 (file)
index dea76e2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef ROS_KERN_IP_H
-#define ROS_KERN_IP_H
-#include <net/pbuf.h>
-#include <net.h>
-#include <bits/netinet.h>
-#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->s_addr == IPADDR_ANY)
-#define ip_addr_cmp(addr1, addr2) ((addr1)->s_addr == (addr2)->s_addr)
-#define ip_match(addr1, addr2) (ip_addr_isany(addr1) || ip_addr_isany(addr2) || ip_addr_cmp(addr1, addr2))
-#define ip_addr_copy(addr1, addr2) ((addr1).s_addr = (addr2).s_addr)
-
-struct in_addr {
-    uint32_t s_addr;
-};
-
-typedef struct in_addr ip_addr_t;
-
-#define IP_PCB \
-/* ips are in network byte order */ \
-struct in_addr local_ip; \
-struct in_addr remote_ip; \
-uint8_t so_options; \
-uint8_t tos; \
-uint8_t ttl; \
-uint8_t addr_hint;
-
-int ip_output(struct pbuf *p, struct in_addr *src, struct in_addr *dest, uint8_t ttl, uint8_t tos, uint8_t proto);
-int ip_input(struct pbuf *p);
-
-#endif // ROS_KERN_IP_H
diff --git a/kern/include/net/nic_common.h b/kern/include/net/nic_common.h
deleted file mode 100644 (file)
index 148bcb4..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef ROS_INC_NIC_COMMON_H
-#define ROS_INC_NIC_COMMON_H
-
-#include <ros/common.h>
-#include <trap.h>
-#include <net.h>
-#include <pmap.h>
-#include <net/pbuf.h>
-
-// Packet sizes
-#define MTU              1500
-/* 14 for the header, 4 for something else.  It's either the CRC at the end
- * (which seems to be 0'd), or for the optional 802.1q tag. */
-#define MAX_FRAME_SIZE   (MTU + 18)
-#define MIN_FRAME_SIZE   60 // See the spec...
-
-// Maximum packet buffers we can handle at any given time
-#define MAX_PACKET_BUFFERS    32 //1024
-// Global send_frame function pointer
-// Means we can only have one network card per system right now...
-extern int (*send_frame)(const char *data, size_t len);
-extern int (*send_pbuf)(struct pbuf *p);
-extern struct pbuf* (*recv_pbuf)(void);
-
-// Global variables for managing ethernet packets over a nic
-// Again, since these are global for all network cards we are 
-// limited to only one for now
-extern unsigned char device_mac[6];
-extern uint8_t eth_up;
-extern uint32_t num_packet_buffers;
-extern char* packet_buffers[MAX_PACKET_BUFFERS];
-extern uint32_t packet_buffers_sizes[MAX_PACKET_BUFFERS];
-extern uint32_t packet_buffers_head;
-extern uint32_t packet_buffers_tail;
-extern spinlock_t packet_buffers_lock; 
-
-// Creates a new ethernet packet and puts the header on it
-char* eth_wrap(const char* data, size_t len, char src_mac[6], 
-               char dest_mac[6], uint16_t eth_type);
-
-struct ETH_Header {
-       char dest_mac[6];
-       char source_mac[6];
-       uint16_t eth_type;
-};
-
-struct eth_frame {
-       struct ETH_Header eth_head;
-       char data[MTU];
-} __attribute__((packed));
-
-static inline void print_mac (uint8_t* mac_addr) {
-       printk("%02x:%02x:%02x:%02x:%02x:%02x\n", 0xFF & mac_addr[0], 0xFF & mac_addr[1],       
-                                                                0xFF & mac_addr[2], 0xFF & mac_addr[3],        
-                                                           0xFF & mac_addr[4], 0xFF & mac_addr[5]);
-}
-
-#endif /* !ROS_INC_NIC_COMMON_H */
diff --git a/kern/include/net/pbuf.h b/kern/include/net/pbuf.h
deleted file mode 100644 (file)
index c43bc3d..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef _ROS_PBUF_H_
-#define _ROS_PBUF_H_
-#include <kmalloc.h>
-#include <slab.h>
-#include <kref.h>
-#include <sys/queue.h>
-#include <atomic.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Currently, the pbuf_custom code is only needed for one specific configuration
- * of IP_FRAG */
-#define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF)
-/* Ensure IP address are 32-bit aligned on 32bit systems, and thus improving the speed of processing
- * for regularly accessed fields such as IP addresses
- */
-#define ETH_PAD_SIZE 2      // padding to ensure ip packet is longword aligned.
-#define PBUF_TRANSPORT_HLEN 20
-#define PBUF_IP_HLEN        20
-#define PBUF_LINK_HLEN      14 + ETH_PAD_SIZE // Padding
-
-/** indicates this packet's data should be immediately passed to the application */
-#define PBUF_FLAG_PUSH      0x01U
-/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a
-    a pbuf differently */
-#define PBUF_FLAG_IS_CUSTOM 0x02U
-/** indicates this pbuf is UDP multicast to be looped back */
-#define PBUF_FLAG_MCASTLOOP 0x04U
-
-typedef enum {
-  PBUF_TRANSPORT,
-  PBUF_IP,
-  PBUF_LINK,
-  PBUF_RAW
-} pbuf_layer;
-
-typedef enum {
-  PBUF_RAM, /* pbuf data is stored in RAM */
-  PBUF_ROM, /* pbuf data is stored in ROM */
-  PBUF_REF, /* pbuf comes from the pbuf pool */
-  PBUF_POOL, /* pbuf payload refers to RAM */
-       PBUF_MTU  /* pbuf with a fixed MTU size */
-} pbuf_type;
-
-
-/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a
-    a pbuf differently */
-#define PBUF_FLAG_IS_CUSTOM 0x02U
-struct pbuf;
-STAILQ_HEAD(pbuf_tailq, pbuf);
-
-struct pbuf {
-       /* Several reasons to roll own version of STAIL queue here 
-        * pbuf chain exists without a queue
-        * also pbuf chain need to be moved entirely onto a socket queue
-        */
-       STAILQ_ENTRY(pbuf) next;
-  // struct pbuf *next;
-
-  /** pointer to the actual data in the buffer */
-  void *payload;
-
-  uint16_t tot_len;
-
-  /** length of this buffer */
-  uint16_t len;
-
-       uint16_t alloc_len;
-
-  /** pbuf_type as u8_t instead of enum to save space */
-  uint8_t type;
-
-  /** misc flags */
-  uint8_t flags;
-
-  struct kref bufref;
-};
-
-struct pbuf_head {
-       struct pbuf_tailq pbuf_fifo;
-       uint32_t qlen;
-       spinlock_t lock; 
-};
-
-static inline void pbuf_head_init(struct pbuf_head *ph) {
-       STAILQ_INIT(&ph->pbuf_fifo);
-       ph->qlen = 0;
-       spinlock_init(&ph->lock);
-}
-extern struct kmem_cache *pbuf_kcache;
-/* Initializes the pbuf module. This call is empty for now, but may not be in future. */
-void pbuf_init(void);
-void pbuf_cat(struct pbuf *head, struct pbuf *tail);
-void pbuf_chain(struct pbuf *head, struct pbuf *tail);
-void pbuf_ref(struct pbuf *p);
-bool pbuf_deref(struct pbuf *p);
-int pbuf_header(struct pbuf *p, int header_size);
-struct pbuf *pbuf_alloc(pbuf_layer layer, uint16_t length, pbuf_type type);
-int pbuf_copy_out(struct pbuf *buf, void *dataptr, size_t len, uint16_t offset);
-void print_pbuf(struct pbuf *p);
-bool pbuf_free(struct pbuf *p);
-
-void attach_pbuf(struct pbuf *p, struct pbuf_head *buf_head);
-struct pbuf* detach_pbuf(struct pbuf_head *buf_head);
-uint8_t pbuf_clen(struct pbuf *p);  
-void pbuf_realloc(struct pbuf *p, uint16_t size); 
-// end
-#if 0
-struct pbuf *pbuf_dechain(struct pbuf *p);
-err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from);
-err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len);
-struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer);
-#if LWIP_CHECKSUM_ON_COPY
-err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr,
-                       u16_t len, u16_t *chksum);
-#endif /* LWIP_CHECKSUM_ON_COPY */
-
-u8_t pbuf_get_at(struct pbuf* p, u16_t offset);
-u16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n);
-u16_t pbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset);
-u16_t pbuf_strstr(struct pbuf* p, const char* substr);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LWIP_PBUF_H__ */
diff --git a/kern/include/net/tcp.h b/kern/include/net/tcp.h
deleted file mode 100644 (file)
index 2a5ddbf..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-#ifndef ROS_KERN_TCP_H
-#define ROS_KERN_TCP_H
-#include <net/pbuf.h>
-#include <net/ip.h>
-#include <net.h>
-#include <error.h>
-#include <bits/netinet.h>
-#include <socket.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TCP_LOCAL_PORT_RANGE_START
-#define TCP_LOCAL_PORT_RANGE_START 4096
-#define TCP_LOCAL_PORT_RANGE_END   0x7fff
-#endif
-
-#ifndef LWIP_CALLBACK_API
-#define LWIP_CALLBACK_API 1
-#endif 
-
-
-/**
- * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT
- * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set
- * in seconds. (does not require sockets.c, and will affect tcp.c)
- */
-#ifndef LWIP_TCP_KEEPALIVE
-#define LWIP_TCP_KEEPALIVE              0
-#endif
-
-/**
- * TCP_TTL: Default Time-To-Live value.
- */
-#ifndef TCP_TTL
-#define TCP_TTL                         (255)
-#endif
-
-/**
- * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
- * you might want to increase this.)
- * For the receive side, this MSS is advertised to the remote side
- * when opening a connection. For the transmit size, this MSS sets
- * an upper limit on the MSS advertised by the remote host.
- */
-#ifndef TCP_MSS
-#define TCP_MSS                         (512)
-#endif
-
-/**
- * TCP_WND: The size of a TCP window.  This must be at least 
- * (2 * TCP_MSS) for things to work well
- */
-#ifndef TCP_WND
-#define TCP_WND                         (4 * TCP_MSS)
-#endif 
-
-/**
- * TCP_MAXRTX: Maximum number of retransmissions of data segments.
- */
-#ifndef TCP_MAXRTX
-#define TCP_MAXRTX                      12
-#endif
-
-/**
- * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments.
- */
-#ifndef TCP_SYNMAXRTX
-#define TCP_SYNMAXRTX                   6
-#endif
-
-/**
- * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order.
- * Define to 0 if your device is low on memory.
- */
-#ifndef TCP_QUEUE_OOSEQ
-#define TCP_QUEUE_OOSEQ                 0
-#endif
-
-
-/**
- * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really
- * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which
- * reflects the available reassembly buffer size at the remote host) and the
- * largest size permitted by the IP layer" (RFC 1122)
- * Setting this to 1 enables code that checks TCP_MSS against the MTU of the
- * netif used for a connection and limits the MSS if it would be too big otherwise.
- */
-#ifndef TCP_CALCULATE_EFF_SEND_MSS
-#define TCP_CALCULATE_EFF_SEND_MSS      1
-#endif
-
-
-/**
- * TCP_SND_BUF: TCP sender buffer space (bytes). 
- */
-#ifndef TCP_SND_BUF
-#define TCP_SND_BUF                     256
-#endif
-
-/**
- * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
- * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work.
- */
-#ifndef TCP_SND_QUEUELEN
-#define TCP_SND_QUEUELEN                ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))
-#endif
-
-/**
- * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than
- * TCP_SND_BUF. It is the amount of space which must be available in the
- * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT).
- */
-#ifndef TCP_SNDLOWAT
-#define TCP_SNDLOWAT                    ((TCP_SND_BUF)/2)
-#endif
-
-/**
- * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be grater
- * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below
- * this number, select returns writable (combined with TCP_SNDLOWAT).
- */
-#ifndef TCP_SNDQUEUELOWAT
-#define TCP_SNDQUEUELOWAT               ((TCP_SND_QUEUELEN)/2)
-#endif
-
-/**
- * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb.
- */
-#ifndef TCP_LISTEN_BACKLOG
-#define TCP_LISTEN_BACKLOG              0
-#endif
-
-/**
- * The maximum allowed backlog for TCP listen netconns.
- * This backlog is used unless another is explicitly specified.
- * 0xff is the maximum (u8_t).
- */
-#ifndef TCP_DEFAULT_LISTEN_BACKLOG
-#define TCP_DEFAULT_LISTEN_BACKLOG      0xff
-#endif
-
-/**
- * TCP_OVERSIZE: The maximum number of bytes that tcp_write may
- * allocate ahead of time in an attempt to create shorter pbuf chains
- * for transmission. The meaningful range is 0 to TCP_MSS. Some
- * suggested values are:
- *
- * 0:         Disable oversized allocation. Each tcp_write() allocates a new
-              pbuf (old behaviour).
- * 1:         Allocate size-aligned pbufs with minimal excess. Use this if your
- *            scatter-gather DMA requires aligned fragments.
- * 128:       Limit the pbuf/memory overhead to 20%.
- * TCP_MSS:   Try to create unfragmented TCP packets.
- * TCP_MSS/4: Try to create 4 fragments or less per TCP packet.
- */
-#ifndef TCP_OVERSIZE
-#define TCP_OVERSIZE                    TCP_MSS
-#endif
-
-/**
- * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option.
- */
-#ifndef LWIP_TCP_TIMESTAMPS
-#define LWIP_TCP_TIMESTAMPS             0
-#endif
-
-/**
- * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an
- * explicit window update
- */
-#ifndef TCP_WND_UPDATE_THRESHOLD
-#define TCP_WND_UPDATE_THRESHOLD   (TCP_WND / 4)
-#endif
-
-struct tcp_pcb;
-
-#define TCP_PRIO_MIN    1
-#define TCP_PRIO_NORMAL 64
-#define TCP_PRIO_MAX    127
-
-/** Function prototype for tcp accept callback functions. Called when a new
- * connection can be accepted on a listening pcb.
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param newpcb The new connection pcb
- * @param err An error code if there has been an error accepting.
- *            Only return ERR_ABRT if you have called tcp_abort from within the
- *            callback function!
- */
-typedef error_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, error_t err);
-
-/** Function prototype for tcp receive callback functions. Called when data has
- * been received.
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param tpcb The connection pcb which received data
- * @param p The received data (or NULL when the connection has been closed!)
- * @param err An error code if there has been an error receiving
- *            Only return ERR_ABRT if you have called tcp_abort from within the
- *            callback function!
- */
-typedef error_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb,
-                             struct pbuf *p, error_t err);
-
-/** Function prototype for tcp sent callback functions. Called when sent data has
- * been acknowledged by the remote side. Use it to free corresponding resources.
- * This also means that the pcb has now space available to send new data.
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param tpcb The connection pcb for which data has been acknowledged
- * @param len The amount of bytes acknowledged
- * @return ERR_OK: try to send some data by calling tcp_output
- *            Only return ERR_ABRT if you have called tcp_abort from within the
- *            callback function!
- */
-typedef error_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb,
-                              uint16_t len);
-
-/** Function prototype for tcp poll callback functions. Called periodically as
- * specified by @see tcp_poll.
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param tpcb tcp pcb
- * @return ERR_OK: try to send some data by calling tcp_output
- *            Only return ERR_ABRT if you have called tcp_abort from within the
- *            callback function!
- */
-typedef error_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb);
-
-/** Function prototype for tcp error callback functions. Called when the pcb
- * receives a RST or is unexpectedly closed for any other reason.
- *
- * @note The corresponding pcb is already freed when this callback is called!
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param err Error code to indicate why the pcb has been closed
- *            ERR_ABRT: aborted through tcp_abort or by a TCP timer
- *            ERR_RST: the connection was reset by the remote host
- */
-typedef void  (*tcp_err_fn)(void *arg, error_t err);
-
-/** Function prototype for tcp connected callback functions. Called when a pcb
- * is connected to the remote side after initiating a connection attempt by
- * calling tcp_connect().
- *
- * @param arg Additional argument to pass to the callback function (@see tcp_arg())
- * @param tpcb The connection pcb which is connected
- * @param err An unused error code, always ERR_OK currently ;-) TODO!
- *            Only return ERR_ABRT if you have called tcp_abort from within the
- *            callback function!
- *
- * @note When a connection attempt fails, the error callback is currently called!
- */
-typedef error_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, error_t err);
-
-enum tcp_state {
-  CLOSED      = 0,
-  LISTEN      = 1,
-  SYN_SENT    = 2,
-  SYN_RCVD    = 3,
-  ESTABLISHED = 4,
-  FIN_WAIT_1  = 5,
-  FIN_WAIT_2  = 6,
-  CLOSE_WAIT  = 7,
-  CLOSING     = 8,
-  LAST_ACK    = 9,
-  TIME_WAIT   = 10
-};
-
-/**
- * members common to struct tcp_pcb and struct tcp_listen_pcb
- */
-#define TCP_PCB_COMMON(type) \
-  type *next; /* for the linked list */ \
-  enum tcp_state state; /* TCP state */ \
-  uint8_t prio; \
-  void *callback_arg; \
-       tcp_accept_fn accept; \
-  /* ports are in host byte order */ \
-  uint16_t local_port
-
-
-/* the TCP protocol control block */
-struct tcp_pcb {
-       IP_PCB;
-
-/** protocol specific PCB members */
-  TCP_PCB_COMMON(struct tcp_pcb);
-       struct socket *pcbsock;
-
-  /* ports are in host byte order */
-  uint16_t remote_port;
-  
-  uint8_t flags;
-#define TF_ACK_DELAY   ((uint8_t)0x01U)   /* Delayed ACK. */
-#define TF_ACK_NOW     ((uint8_t)0x02U)   /* Immediate ACK. */
-#define TF_INFR        ((uint8_t)0x04U)   /* In fast recovery. */
-#define TF_TIMESTAMP   ((uint8_t)0x08U)   /* Timestamp option enabled */
-#define TF_RXCLOSED    ((uint8_t)0x10U)   /* rx closed by tcp_shutdown */
-#define TF_FIN         ((uint8_t)0x20U)   /* Connection was closed locally (FIN segment enqueued). */
-#define TF_NODELAY     ((uint8_t)0x40U)   /* Disable Nagle algorithm */
-#define TF_NAGLEMEMERR ((uint8_t)0x80U)   /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */
-
-  /* the rest of the fields are in host byte order
-     as we have to do some math with them */
-  /* receiver variables */
-  uint32_t rcv_nxt;   /* next seqno expected */
-  uint16_t rcv_wnd;   /* receiver window available */
-  uint16_t rcv_ann_wnd; /* receiver window to announce */
-  uint32_t rcv_ann_right_edge; /* announced right edge of window */
-
-  /* Timers */
-  uint32_t tmr;
-  uint8_t polltmr, pollinterval;
-  
-  /* Retransmission timer. */
-  int16_t rtime;
-  
-  uint16_t mss;   /* maximum segment size */
-  
-  /* RTT (round trip time) estimation variables */
-  uint32_t rttest; /* RTT estimate in 500ms ticks */
-  uint32_t rtseq;  /* sequence number being timed */
-  int16_t sa, sv; /* @todo document this */
-
-  int16_t rto;    /* retransmission time-out */
-  uint8_t nrtx;    /* number of retransmissions */
-
-  /* fast retransmit/recovery */
-  uint32_t lastack; /* Highest acknowledged seqno. */
-  uint8_t dupacks;
-  
-  /* congestion avoidance/control variables */
-  uint16_t cwnd;  
-  uint16_t ssthresh;
-
-  /* sender variables */
-  uint32_t snd_nxt;   /* next new seqno to be sent */
-  uint16_t snd_wnd;   /* sender window */
-  uint32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last
-                             window update. */
-  uint32_t snd_lbb;       /* Sequence number of next byte to be buffered. */
-
-  uint16_t acked;
-  
-  uint16_t snd_buf;   /* Available buffer space for sending (in bytes). */
-#define TCP_SNDQUEUELEN_OVERFLOW (0xffff-3)
-  uint16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */
-
-#if TCP_OVERSIZE
-  /* Extra bytes available at the end of the last pbuf in unsent. */
-  uint16_t unsent_oversize;
-#endif /* TCP_OVERSIZE */ 
-
-  /* These are ordered by sequence number: */
-  struct tcp_seg *unsent;   /* Unsent (queued) segments. */
-  struct tcp_seg *unacked;  /* Sent but unacknowledged segments. */
-#if TCP_QUEUE_OOSEQ  
-  struct tcp_seg *ooseq;    /* Received out of sequence segments. */
-#endif /* TCP_QUEUE_OOSEQ */
-
-  struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */
-
-  /* Function to be called when more send buffer space is available. */
-  tcp_sent_fn sent;
-  /* Function to be called when (in-sequence) data has arrived. */
-  tcp_recv_fn recv;
-  /* Function to be called when a connection has been set up. */
-  tcp_connected_fn connected;
-  /* Function which is called periodically. */
-  tcp_poll_fn poll;
-  /* Function to be called whenever a fatal error occurs. */
-  tcp_err_fn errf;
-
-#if LWIP_TCP_TIMESTAMPS
-  uint32_t ts_lastacksent;
-  uint32_t ts_recent;
-#endif /* LWIP_TCP_TIMESTAMPS */
-
-  /* idle time before KEEPALIVE is sent */
-  uint32_t keep_idle;
-#if LWIP_TCP_KEEPALIVE
-  uint32_t keep_intvl;
-  uint32_t keep_cnt;
-#endif /* LWIP_TCP_KEEPALIVE */
-  
-  /* Persist timer counter */
-  uint32_t persist_cnt;
-  /* Persist timer back-off */
-  uint8_t persist_backoff;
-
-  /* KEEPALIVE counter */
-  uint8_t keep_cnt_sent;
-};
-
-struct tcp_pcb_listen {  
-       IP_PCB;
-/* Protocol specific PCB members */
-  TCP_PCB_COMMON(struct tcp_pcb_listen);
-
-#if TCP_LISTEN_BACKLOG
-  uint8_t backlog;
-  uint8_t accepts_pending;
-#endif /* TCP_LISTEN_BACKLOG */
-};
-
-#if 0 //LWIP_EVENT_API
-
-enum lwip_event {
-  LWIP_EVENT_ACCEPT,
-  LWIP_EVENT_SENT,
-  LWIP_EVENT_RECV,
-  LWIP_EVENT_CONNECTED,
-  LWIP_EVENT_POLL,
-  LWIP_EVENT_ERR
-};
-
-error_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb,
-         enum lwip_event,
-         struct pbuf *p,
-         uint16_t size,
-         error_t err);
-
-#endif /* LWIP_EVENT_API */
-
-/* Application program's interface: */
-struct tcp_pcb * tcp_new (void);
-error_t tcp_bind(struct tcp_pcb *pcb, const struct in_addr *ipaddr, uint16_t port);
-void             tcp_abort (struct tcp_pcb *pcb);
-
-void             tcp_arg     (struct tcp_pcb *pcb, void *arg);
-void             tcp_accept  (struct tcp_pcb *pcb, tcp_accept_fn accept);
-void             tcp_recv    (struct tcp_pcb *pcb, tcp_recv_fn recv);
-void             tcp_sent    (struct tcp_pcb *pcb, tcp_sent_fn sent);
-void             tcp_poll    (struct tcp_pcb *pcb, tcp_poll_fn poll, uint8_t interval);
-void             tcp_err     (struct tcp_pcb *pcb, tcp_err_fn err);
-
-#define          tcp_mss(pcb)             (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12)  : (pcb)->mss)
-#define          tcp_sndbuf(pcb)          ((pcb)->snd_buf)
-#define          tcp_sndqueuelen(pcb)     ((pcb)->snd_queuelen)
-#define          tcp_nagle_disable(pcb)   ((pcb)->flags |= TF_NODELAY)
-#define          tcp_nagle_enable(pcb)    ((pcb)->flags &= ~TF_NODELAY)
-#define          tcp_nagle_disabled(pcb)  (((pcb)->flags & TF_NODELAY) != 0)
-
-#if TCP_LISTEN_BACKLOG
-#define          tcp_accepted(pcb) do { \
-  LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", pcb->state == LISTEN); \
-  (((struct tcp_pcb_listen *)(pcb))->accepts_pending--); } while(0)
-#else  /* TCP_LISTEN_BACKLOG */
-#define          tcp_accepted(pcb) LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", \
-                                               pcb->state == LISTEN)
-#endif /* TCP_LISTEN_BACKLOG */
-
-void             tcp_recved  (struct tcp_pcb *pcb, uint16_t len);
-error_t            tcp_connect (struct tcp_pcb *pcb, ip_addr_t *ipaddr,
-                              uint16_t port, tcp_connected_fn connected);
-
-struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, uint8_t backlog);
-#define          tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG)
-
-error_t            tcp_close   (struct tcp_pcb *pcb);
-error_t            tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx);
-
-/* Flags for "apiflags" parameter in tcp_write */
-#define TCP_WRITE_FLAG_COPY 0x01
-#define TCP_WRITE_FLAG_MORE 0x02
-
-error_t            tcp_write   (struct tcp_pcb *pcb, const void *dataptr, uint16_t len,
-                              uint8_t apiflags);
-
-void             tcp_setprio (struct tcp_pcb *pcb, uint8_t prio);
-
-#define TCP_PRIO_MIN    1
-#define TCP_PRIO_NORMAL 64
-#define TCP_PRIO_MAX    127
-
-error_t            tcp_output  (struct tcp_pcb *pcb);
-
-
-const char* tcp_debug_state_str(enum tcp_state s);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/kern/include/net/tcp_impl.h b/kern/include/net/tcp_impl.h
deleted file mode 100644 (file)
index 7758447..0000000
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#ifndef __LWIP_TCP_IMPL_H__
-#define __LWIP_TCP_IMPL_H__
-#include "error.h"
-#include "net.h"
-#include "socket.h"
-#include "net/pbuf.h"
-#include "net/ip.h"
-#include "bits/netinet.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-// akaros specific option
-
-#define LWIP_EVENT_API 0
-
-struct tcp_hdr;
-struct tcp_pcb* tcp_alloc(uint8_t prio);
-/* Functions for interfacing with TCP: */
-
-/* Lower layer interface to TCP: */
-#define tcp_init() /* Compatibility define, no init needed. */
-void             tcp_tmr     (void);  /* Must be called every
-                                         TCP_TMR_INTERVAL
-                                         ms. (Typically 250 ms). */
-/* It is also possible to call these two functions at the right
-   intervals (instead of calling tcp_tmr()). */
-void             tcp_slowtmr (void);
-void             tcp_fasttmr (void);
-
-
-/* Only used by IP to pass a TCP segment to TCP: */
-// Change: assumed on network interface
-void             tcp_input   (struct pbuf *p);
-/* Used within the TCP code only: */
-void             tcp_abandon (struct tcp_pcb *pcb, int reset);
-error_t            tcp_send_empty_ack(struct tcp_pcb *pcb);
-void             tcp_rexmit  (struct tcp_pcb *pcb);
-void             tcp_rexmit_rto  (struct tcp_pcb *pcb);
-void             tcp_rexmit_fast (struct tcp_pcb *pcb);
-uint32_t            tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb);
-
-/**
- * This is the Nagle algorithm: try to combine user data to send as few TCP
- * segments as possible. Only send if
- * - no previously transmitted data on the connection remains unacknowledged or
- * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or
- * - the only unsent segment is at least pcb->mss bytes long (or there is more
- *   than one unsent segment - with lwIP, this can happen although unsent->len < mss)
- * - or if we are in fast-retransmit (TF_INFR)
- */
-#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \
-                            ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \
-                            (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \
-                              ((tpcb)->unsent->len >= (tpcb)->mss))) \
-                            ) ? 1 : 0)
-#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ESUCCESS)
-
-
-#define TCP_SEQ_LT(a,b)     ((int32_t)((a)-(b)) < 0)
-#define TCP_SEQ_LEQ(a,b)    ((int32_t)((a)-(b)) <= 0)
-#define TCP_SEQ_GT(a,b)     ((int32_t)((a)-(b)) > 0)
-#define TCP_SEQ_GEQ(a,b)    ((int32_t)((a)-(b)) >= 0)
-#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c))
-#define TCP_FIN 0x01U
-#define TCP_SYN 0x02U
-#define TCP_RST 0x04U
-#define TCP_PSH 0x08U
-#define TCP_ACK 0x10U
-#define TCP_URG 0x20U
-#define TCP_ECE 0x40U
-#define TCP_CWR 0x80U
-
-#define TCP_FLAGS 0x3fU
-
-/* Length of the TCP header, excluding options. */
-#define TCP_HLEN 20
-
-#ifndef TCP_TMR_INTERVAL
-#define TCP_TMR_INTERVAL       250  /* The TCP timer interval in milliseconds. */
-#endif /* TCP_TMR_INTERVAL */
-
-#ifndef TCP_FAST_INTERVAL
-#define TCP_FAST_INTERVAL      TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */
-#endif /* TCP_FAST_INTERVAL */
-
-#ifndef TCP_SLOW_INTERVAL
-#define TCP_SLOW_INTERVAL      (2*TCP_TMR_INTERVAL)  /* the coarse grained timeout in milliseconds */
-#endif /* TCP_SLOW_INTERVAL */
-
-#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */
-#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */
-
-#define TCP_OOSEQ_TIMEOUT        6U /* x RTO */
-
-#ifndef TCP_MSL
-#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */
-#endif
-
-/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */
-#ifndef  TCP_KEEPIDLE_DEFAULT
-#define  TCP_KEEPIDLE_DEFAULT     7200000UL /* Default KEEPALIVE timer in milliseconds */
-#endif
-
-#ifndef  TCP_KEEPINTVL_DEFAULT
-#define  TCP_KEEPINTVL_DEFAULT    75000UL   /* Default Time between KEEPALIVE probes in milliseconds */
-#endif
-
-#ifndef  TCP_KEEPCNT_DEFAULT
-#define  TCP_KEEPCNT_DEFAULT      9U        /* Default Counter for KEEPALIVE probes */
-#endif
-
-#define  TCP_MAXIDLE              TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT  /* Maximum KEEPALIVE probe time */
-
-#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8)
-#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12)
-#define TCPH_FLAGS(phdr)  (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS)
-
-#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr))
-#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr))
-#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS((uint16_t)(~(uint16_t)(TCP_FLAGS)))) | htons(flags))
-#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | (flags))
-
-#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags))
-#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) )
-
-#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0))
-
-/** Flags used on input processing, not on pcb->flags
-*/
-#define TF_RESET     (uint8_t)0x08U   /* Connection was reset. */
-#define TF_CLOSED    (uint8_t)0x10U   /* Connection was sucessfully closed. */
-#define TF_GOT_FIN   (uint8_t)0x20U   /* Connection was closed by the remote end. */
-
-#if LWIP_EVENT_API
-
-#define TCP_EVENT_ACCEPT(pcb,err,ret)    ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                LWIP_EVENT_ACCEPT, NULL, 0, err)
-#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                   LWIP_EVENT_SENT, NULL, space, ESUCCESS)
-#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                LWIP_EVENT_RECV, (p), 0, (err))
-#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                LWIP_EVENT_RECV, NULL, 0, ESUCCESS)
-#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                LWIP_EVENT_CONNECTED, NULL, 0, (err))
-#define TCP_EVENT_POLL(pcb,ret)       ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
-                LWIP_EVENT_POLL, NULL, 0, ESUCCESS)
-#define TCP_EVENT_ERR(errf,arg,err)  lwip_tcp_event((arg), NULL, \
-                LWIP_EVENT_ERR, NULL, 0, (err))
-
-#else /* LWIP_EVENT_API */
-
-#define TCP_EVENT_ACCEPT(pcb,err,ret)                          \
-  do {                                                         \
-    if((pcb)->accept != NULL)                                  \
-      (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err));  \
-    else (ret) = EFAIL;                                      \
-  } while (0)
-
-#define TCP_EVENT_SENT(pcb,space,ret)                          \
-  do {                                                         \
-    if((pcb)->sent != NULL)                                    \
-      (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space));  \
-    else (ret) = ESUCCESS;                                       \
-  } while (0)
-
-#define TCP_EVENT_RECV(pcb,p,err,ret)                          \
-  do {                                                         \
-    if((pcb)->recv != NULL) {                                  \
-      (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\
-    } else {                                                   \
-      (ret) = tcp_recv_null(NULL, (pcb), (p), (err));          \
-    }                                                          \
-  } while (0)
-
-#define TCP_EVENT_CLOSED(pcb,ret)                                \
-  do {                                                           \
-    if(((pcb)->recv != NULL)) {                                  \
-      (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ESUCCESS);\
-    } else {                                                     \
-      (ret) = ESUCCESS;                                            \
-    }                                                            \
-  } while (0)
-
-#define TCP_EVENT_CONNECTED(pcb,err,ret)                         \
-  do {                                                           \
-    if((pcb)->connected != NULL)                                 \
-      (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \
-    else (ret) = ESUCCESS;                                         \
-  } while (0)
-
-#define TCP_EVENT_POLL(pcb,ret)                                \
-  do {                                                         \
-    if((pcb)->poll != NULL)                                    \
-      (ret) = (pcb)->poll((pcb)->callback_arg,(pcb));          \
-    else (ret) = ESUCCESS;                                       \
-  } while (0)
-
-#define TCP_EVENT_ERR(errf,arg,err)                            \
-  do {                                                         \
-    if((errf) != NULL)                                         \
-      (errf)((arg),(err));                                     \
-  } while (0)
-
-#endif /* LWIP_EVENT_API */
-
-/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */
-#if TCP_OVERSIZE && defined(LWIP_DEBUG)
-#define TCP_OVERSIZE_DBGCHECK 1
-#else
-#define TCP_OVERSIZE_DBGCHECK 0
-#endif
-
-/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */
-#define TCP_CHECKSUM_ON_COPY  (CHECKSUM_GEN_TCP)
-
-/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */
-struct tcp_seg {
-  struct tcp_seg *next;    /* used when putting segements on a queue */
-  struct pbuf *p;          /* buffer containing data + TCP header */
-  void *dataptr;           /* pointer to the TCP data in the pbuf */
-  uint16_t len;               /* the TCP length of this segment */
-#if TCP_OVERSIZE_DBGCHECK
-  uint16_t oversize_left;     /* Extra bytes available at the end of the last
-                              pbuf in unsent (used for asserting vs.
-                              tcp_pcb.unsent_oversized only) */
-#endif /* TCP_OVERSIZE_DBGCHECK */ 
-#if TCP_CHECKSUM_ON_COPY
-  uint16_t chksum;
-  uint8_t  chksum_swapped;
-#endif /* TCP_CHECKSUM_ON_COPY */
-  uint8_t  flags;
-#define TF_SEG_OPTS_MSS         (uint8_t)0x01U /* Include MSS option. */
-#define TF_SEG_OPTS_TS          (uint8_t)0x02U /* Include timestamp option. */
-#define TF_SEG_DATA_CHECKSUMMED (uint8_t)0x04U /* ALL data (not the header) is
-                                               checksummed into 'chksum' */
-  struct tcp_hdr *tcphdr;  /* the TCP header */
-};
-
-#define LWIP_TCP_OPT_LENGTH(flags)              \
-  (flags & TF_SEG_OPTS_MSS ? 4  : 0) +          \
-  (flags & TF_SEG_OPTS_TS  ? 12 : 0)
-
-/** This returns a TCP header option for MSS in an uint32_t */
-#define TCP_BUILD_MSS_OPTION(x) (x) = PP_HTONL(((uint32_t)2 << 24) |          \
-                                               ((uint32_t)4 << 16) |          \
-                                               (((uint32_t)TCP_MSS / 256) << 8) | \
-                                               (TCP_MSS & 255))
-
-/* Global variables: */
-extern struct tcp_pcb *tcp_input_pcb;
-extern uint32_t tcp_ticks;
-
-/* The TCP PCB lists. */
-union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */
-  struct tcp_pcb_listen *listen_pcbs; 
-  struct tcp_pcb *pcbs;
-};
-extern struct tcp_pcb *tcp_bound_pcbs;
-extern union tcp_listen_pcbs_t tcp_listen_pcbs;
-extern struct tcp_pcb *tcp_active_pcbs;  /* List of all TCP PCBs that are in a
-              state in which they accept or send
-              data. */
-extern struct tcp_pcb *tcp_tw_pcbs;      /* List of all TCP PCBs in TIME-WAIT. */
-
-extern struct tcp_pcb *tcp_tmp_pcb;      /* Only used for temporary storage. */
-
-/* Axioms about the above lists:   
-   1) Every TCP PCB that is not CLOSED is in one of the lists.
-   2) A PCB is only in one of the lists.
-   3) All PCBs in the tcp_listen_pcbs list is in LISTEN state.
-   4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state.
-*/
-/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB
-   with a PCB list or removes a PCB from a list, respectively. */
-#ifndef TCP_DEBUG_PCB_LISTS
-#define TCP_DEBUG_PCB_LISTS 0
-#endif
-#if TCP_DEBUG_PCB_LISTS
-#define TCP_REG(pcbs, npcb) do {\
-                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", (npcb), (npcb)->local_port)); \
-                            for(tcp_tmp_pcb = *(pcbs); \
-          tcp_tmp_pcb != NULL; \
-        tcp_tmp_pcb = tcp_tmp_pcb->next) { \
-                                LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != (npcb)); \
-                            } \
-                            LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \
-                            (npcb)->next = *(pcbs); \
-                            LWIP_ASSERT("TCP_REG: npcb->next != npcb", (npcb)->next != (npcb)); \
-                            *(pcbs) = (npcb); \
-                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
-              tcp_timer_needed(); \
-                            } while(0)
-#define TCP_RMV(pcbs, npcb) do { \
-                            LWIP_ASSERT("TCP_RMV: pcbs != NULL", *(pcbs) != NULL); \
-                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", (npcb), *(pcbs))); \
-                            if(*(pcbs) == (npcb)) { \
-                               *(pcbs) = (*pcbs)->next; \
-                            } else for(tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \
-                               if(tcp_tmp_pcb->next == (npcb)) { \
-                                  tcp_tmp_pcb->next = (npcb)->next; \
-                                  break; \
-                               } \
-                            } \
-                            (npcb)->next = NULL; \
-                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
-                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", (npcb), *(pcbs))); \
-                            } while(0)
-
-#else /* LWIP_DEBUG */
-
-#define TCP_REG(pcbs, npcb)                        \
-  do {                                             \
-    (npcb)->next = *pcbs;                          \
-    *(pcbs) = (npcb);                              \
-    tcp_timer_needed();                            \
-  } while (0)
-
-#define TCP_RMV(pcbs, npcb)                        \
-  do {                                             \
-    if(*(pcbs) == (npcb)) {                        \
-      (*(pcbs)) = (*pcbs)->next;                   \
-    }                                              \
-    else {                                         \
-      for(tcp_tmp_pcb = *pcbs;                     \
-          tcp_tmp_pcb != NULL;                     \
-          tcp_tmp_pcb = tcp_tmp_pcb->next) {       \
-        if(tcp_tmp_pcb->next == (npcb)) {          \
-          tcp_tmp_pcb->next = (npcb)->next;        \
-          break;                                   \
-        }                                          \
-      }                                            \
-    }                                              \
-    (npcb)->next = NULL;                           \
-  } while(0)
-
-#endif /* LWIP_DEBUG */
-
-
-/* Internal functions: */
-struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb);
-void tcp_pcb_purge(struct tcp_pcb *pcb);
-void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb);
-
-void tcp_segs_free(struct tcp_seg *seg);
-void tcp_seg_free(struct tcp_seg *seg);
-struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg);
-
-#define tcp_ack(pcb)                               \
-  do {                                             \
-    if((pcb)->flags & TF_ACK_DELAY) {              \
-      (pcb)->flags &= ~TF_ACK_DELAY;               \
-      (pcb)->flags |= TF_ACK_NOW;                  \
-    }                                              \
-    else {                                         \
-      (pcb)->flags |= TF_ACK_DELAY;                \
-    }                                              \
-  } while (0)
-
-#define tcp_ack_now(pcb)                           \
-  do {                                             \
-    (pcb)->flags |= TF_ACK_NOW;                    \
-  } while (0)
-
-error_t tcp_send_fin(struct tcp_pcb *pcb);
-error_t tcp_enqueue_flags(struct tcp_pcb *pcb, uint8_t flags);
-
-void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg);
-
-void tcp_rst(uint32_t seqno, uint32_t ackno,
-       ip_addr_t *local_ip, ip_addr_t *remote_ip,
-       uint16_t local_port, uint16_t remote_port);
-
-uint32_t tcp_next_iss(void);
-
-void tcp_keepalive(struct tcp_pcb *pcb);
-void tcp_zero_window_probe(struct tcp_pcb *pcb);
-
-#if TCP_CALCULATE_EFF_SEND_MSS
-uint16_t tcp_eff_send_mss(uint16_t sendmss, ip_addr_t *addr);
-#endif /* TCP_CALCULATE_EFF_SEND_MSS */
-
-#if LWIP_CALLBACK_API
-error_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, error_t err);
-#endif /* LWIP_CALLBACK_API */
-
-#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG
-void tcp_debug_print(struct tcp_hdr *tcphdr);
-void tcp_debug_print_flags(uint8_t flags);
-void tcp_debug_print_state(enum tcp_state s);
-void tcp_debug_print_pcbs(void);
-s16_t tcp_pcbs_sane(void);
-#else
-#  define tcp_debug_print(tcphdr)
-#  define tcp_debug_print_flags(flags)
-#  define tcp_debug_print_state(s)
-#  define tcp_debug_print_pcbs()
-#  define tcp_pcbs_sane() 1
-#endif /* TCP_DEBUG */
-
-/** External function (implemented in timers.c), called when TCP detects
- * that a timer is needed (i.e. active- or time-wait-pcb found). */
-void tcp_timer_needed(void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LWIP_TCP_H__ */
diff --git a/kern/include/net/timers.h b/kern/include/net/timers.h
deleted file mode 100644 (file)
index c7aaa71..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *         Simon Goldschmidt
- * Modified to fit Akaros by David Zhu<yuzhu@cs.berkeley.edu>
- *
- */
-#ifndef __NET_TIMERS_H__
-#define __NET_TIMERS_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef LWIP_DEBUG_TIMERNAMES
-#define LWIP_DEBUG_TIMERNAMES 1
-#else
-#define LWIP_DEBUG_TIMERNAMES 0
-#endif
-
-#include <alarm.h>
-
-/** Function prototype for a timeout callback function. Register such a function
- * using sys_timeout().
- *
- * @param arg Additional argument to pass to the function - set up by sys_timeout()
- */
-typedef void (* sys_timeout_handler)(struct alarm_waiter *arg);
-struct timer_req {
-       sys_timeout_handler func;
-       void *arg;
-};
-#if 0
-struct sys_timeo {
-  struct sys_timeo *next;
-  uint32_t time;
-  sys_timeout_handler h;
-  void *arg;
-#if LWIP_DEBUG_TIMERNAMES
-  const char* handler_name;
-#endif /* LWIP_DEBUG_TIMERNAMES */
-};
-#endif
-void sys_timeouts_init(void);
-
-struct alarm_waiter* sys_timeout(uint32_t msecs, sys_timeout_handler handler, struct alarm_waiter* waiter);
-
-void sys_untimeout(sys_timeout_handler handler, void *arg);
-void sys_check_timeouts(void);
-void sys_restart_timeouts(void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __NET_TIMERS_H__  */
diff --git a/kern/include/net/udp.h b/kern/include/net/udp.h
deleted file mode 100644 (file)
index 6e9f274..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef ROS_KERN_UDP_H
-#define ROS_KERN_UDP_H
-#include <net/pbuf.h>
-#include <net/ip.h>
-#include <net.h>
-#include <bits/netinet.h>
-#include <socket.h>
-
-#define UDP_HLEN 8
-#define UDP_TTL 255
-
-
-struct udp_pcb {
-               IP_PCB;
-    /** ports are in host byte order */
-    uint16_t local_port, remote_port;
-    uint8_t flags;
-               uint8_t pad2;
-    /* Protocol specific PCB members */
-    struct udp_pcb *next;
-               struct socket *pcbsock;
-};
-
-extern struct udp_pcb *udp_pcbs;
-#define GLOBAL_IP 0x0A000001 // 10.0.0.1
-struct udp_pcb * udp_new(void);
-int udp_send(struct udp_pcb *pcb, struct pbuf *p);
-int udp_sendto(struct udp_pcb *pcb, struct pbuf *p,
-                    struct in_addr *dst_ip, uint16_t dst_port);
-int udp_bind(struct udp_pcb *pcb, const struct in_addr *ip, uint16_t port);
-int udp_input(struct pbuf *p);
-
-#define UDP_FLAGS_NOCHKSUM       0x01U
-#define UDP_FLAGS_UDPLITE        0x02U
-#define UDP_FLAGS_CONNECTED      0x04U
-#define UDP_FLAGS_MULTICAST_LOOP 0x08U
-
-#endif
index 006623b..d7afedb 100644 (file)
 #define SYS_poke_ksched                                30
 #define SYS_abort_sysc                         31
 
-/* Socket Syscalls */
-#define SYS_socket                                     40
-#define SYS_sendto                                     41
-#define SYS_recvfrom                           42
-#define SYS_select                                     43
-#define SYS_connect                                    44
-#define SYS_send                                       45
-#define SYS_recv                                       46
-#define SYS_bind                                       47
-#define SYS_accept                                     48
-#define SYS_listen                                     49
-
-/* Platform specific syscalls */
-#define SYS_serial_read                                75
-#define SYS_serial_write                       76
-#define SYS_eth_read                           77
-#define SYS_eth_write                          78
-#define SYS_eth_get_mac_addr           79
-#define SYS_eth_recv_check                     80
-
 /* FS Syscalls */
 #define SYS_read                               100
 #define SYS_write                              101
diff --git a/kern/include/socket.h b/kern/include/socket.h
deleted file mode 100644 (file)
index f412d5d..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-#ifndef ROS_SOCKET_H
-#define ROS_SOCKET_H
-
-#include <ros/common.h>
-#include <sys/queue.h>
-#include <atomic.h>
-#include <net/pbuf.h>
-#include <kthread.h>
-#include <net/ip.h>
-#include <vfs.h>
-// Just a couple of AF types that we might support
-#define AF_UNSPEC      0
-#define AF_UNIX                1       /* Unix domain sockets          */
-#define AF_LOCAL       1       /* POSIX name for AF_UNIX       */
-#define AF_INET                2       /* Internet IP Protocol         */
-
-#define PF_UNSPEC      AF_UNSPEC
-#define PF_UNIX                AF_UNIX
-#define PF_LOCAL       AF_LOCAL
-#define PF_INET                AF_INET
-
-#define        SS_NOFDREF              0x0001  /* no file table ref any more */
-#define        SS_ISCONNECTED          0x0002  /* socket connected to a peer */
-#define        SS_ISCONNECTING         0x0004  /* in process of connecting to peer */
-#define        SS_ISDISCONNECTING      0x0008  /* in process of disconnecting */
-#define        SS_NBIO                 0x0100  /* non-blocking ops */
-#define        SS_ASYNC                0x0200  /* async i/o notify */
-#define        SS_ISCONFIRMING         0x0400  /* deciding to accept connection req */
-#define        SS_ISDISCONNECTED       0x2000  /* socket disconnected from peer */
-
-/* Define an range for automatic port assignment */
-#define SOCKET_PORT_START 4096
-#define SOCKET_PORT_END  0x7fff
-
-struct socket;
-struct proc;
-STAILQ_HEAD(socket_tailq, socket);
-struct semaphore_entry;
-LIST_HEAD(sock_semaphore_list, semaphore_entry);
-
-// These are probably defined elsewhere too..
-#ifndef socklen_t
-typedef int socklen_t;
-typedef int sa_family_t;
-#endif
-#define inet_addr_to_ipaddr_p(target_ipaddr_p, source_inaddr)   ((target_ipaddr_p) = (ip_addr_t*)&((source_inaddr)->s_addr))
-enum sock_type {
-    SOCK_STREAM = 1,
-    SOCK_DGRAM  = 2,
-    SOCK_RAW    = 3,
-    SOCK_RDM    = 4,
-    SOCK_SEQPACKET  = 5,
-    SOCK_DCCP   = 6,
-    SOCK_PACKET = 10,
-};
-
-/* TODO: consider building this into struct semaphore */
-struct semaphore_entry {
-       struct semaphore sem;
-       int fd;
-       LIST_ENTRY(semaphore_entry) link;
-};
-
-struct socket{
-  //int so_count;       /* (b) reference count */
-  short   so_type;        /* (a) generic type, see socket.h */
-       short   so_family;
-       int     so_protocol;
-  short   so_options;     /* from socket call, see socket.h */
-  //short   so_linger;      /* time to linger while closing */
-  short   so_state;       /* (b) internal state flags SS_* */
-       //int so_qstate;      /* (e) internal state flags SQ_* */
-       void    *so_pcb;        /* protocol control block */
-       struct pbuf_head recv_buff;
-       struct pbuf_head send_buff;
-       struct semaphore sem;
-       struct semaphore accept_sem;
-       spinlock_t waiter_lock;
-       struct sock_semaphore_list waiters; /* sem for a process to sleep on */
-       struct socket_tailq acceptq;
-       STAILQ_ENTRY(socket) next;
-       //struct  vnet *so_vnet;      /* network stack instance */
-       //struct  protosw *so_proto;  /* (a) protocol handle */
-};
-
-
-/* members are in network byte order */
-struct sockaddr_in {
-    // uint8_t sin_len; -- bsd only field
-    uint8_t sin_family;
-    uint16_t sin_port;
-    struct in_addr sin_addr;
-    char sin_zero[8];
-};
-
-
-struct sockaddr {
-       unsigned char   sa_len;         /* bsd only total length */
-       sa_family_t     sa_family;      /* address family */
-       char            sa_data[14];    /* actually longer; address value */
-};
-
-/*
- * Message header for recvmsg and sendmsg calls.
- * Used value-result for recvmsg, value only for sendmsg.
- */ 
-struct msghdr {
-    void        *msg_name;      /* optional address */
-    socklen_t    msg_namelen;       /* size of address */
-    struct iovec    *msg_iov;       /* scatter/gather array */
-    int      msg_iovlen;        /* # elements in msg_iov */
-    void        *msg_control;       /* ancillary data, see below */
-    socklen_t    msg_controllen;    /* ancillary data buffer len */
-    int      msg_flags;     /* flags on received message */
-};
-
-
-/* Socket-level options for `getsockopt' and `setsockopt'.  */
-enum
-  {
-    SO_DEBUG = 0x0001,         /* Record debugging information.  */
-#define SO_DEBUG SO_DEBUG
-    SO_ACCEPTCONN = 0x0002,    /* Accept connections on socket.  */
-#define SO_ACCEPTCONN SO_ACCEPTCONN
-    SO_REUSEADDR = 0x0004,     /* Allow reuse of local addresses.  */
-#define SO_REUSEADDR SO_REUSEADDR
-    SO_KEEPALIVE = 0x0008,     /* Keep connections alive and send
-                                  SIGPIPE when they die.  */
-#define SO_KEEPALIVE SO_KEEPALIVE
-    SO_DONTROUTE = 0x0010,     /* Don't do local routing.  */
-#define SO_DONTROUTE SO_DONTROUTE
-    SO_BROADCAST = 0x0020,     /* Allow transmission of
-                                  broadcast messages.  */
-#define SO_BROADCAST SO_BROADCAST
-    SO_USELOOPBACK = 0x0040,   /* Use the software loopback to avoid
-                                  hardware use when possible.  */
-#define SO_USELOOPBACK SO_USELOOPBACK
-    SO_LINGER = 0x0080,                /* Block on close of a reliable
-                                  socket to transmit pending data.  */
-#define SO_LINGER SO_LINGER
-    SO_OOBINLINE = 0x0100,     /* Receive out-of-band data in-band.  */
-#define SO_OOBINLINE SO_OOBINLINE
-    SO_REUSEPORT = 0x0200,     /* Allow local address and port reuse.  */
-#define SO_REUSEPORT SO_REUSEPORT
-    SO_SNDBUF = 0x1001,                /* Send buffer size.  */
-#define SO_SNDBUF SO_SNDBUF
-    SO_RCVBUF = 0x1002,                /* Receive buffer.  */
-#define SO_RCVBUF SO_RCVBUF
-    SO_SNDLOWAT = 0x1003,      /* Send low-water mark.  */
-#define SO_SNDLOWAT SO_SNDLOWAT
-    SO_RCVLOWAT = 0x1004,      /* Receive low-water mark.  */
-#define SO_RCVLOWAT SO_RCVLOWAT
-    SO_SNDTIMEO = 0x1005,      /* Send timeout.  */
-#define SO_SNDTIMEO SO_SNDTIMEO
-    SO_RCVTIMEO = 0x1006,      /* Receive timeout.  */
-#define SO_RCVTIMEO SO_RCVTIMEO
-    SO_ERROR = 0x1007,         /* Get and clear error status.  */
-#define SO_ERROR SO_ERROR
-    SO_STYLE = 0x1008,         /* Get socket connection style.  */
-#define SO_STYLE SO_STYLE
-    SO_TYPE = SO_STYLE         /* Compatible name for SO_STYLE.  */
-#define SO_TYPE SO_TYPE
-  };
-#define SO_INHERITED   (SO_REUSEADDR|SO_KEEPALIVE|SO_LINGER)
-
-extern struct kmem_cache *sock_kcache;
-extern struct kmem_cache *mbuf_kcache;
-extern struct kmem_cache *udp_pcb_kcache;
-extern struct kmem_cache *tcp_pcb_kcache;
-extern struct kmem_cache *tcp_pcb_listen_kcache;
-extern struct kmem_cache *tcp_segment_kcache;
-
-
-void socket_init();
-intreg_t send_iov(struct socket* sock, struct iovec* iov, int flags);
-int send_datagram(struct socket* sock, struct iovec* iov, int flags);
-
-intreg_t sys_socket(struct proc *p, int socket_family, int socket_type, int protocol);
-intreg_t sys_sendto(struct proc *p, int socket, const void *buffer, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len);
-intreg_t sys_recvfrom(struct proc *p, int socket, void *restrict buffer, size_t length, int flags, struct sockaddr *restrict address, socklen_t *restrict address_len);
-intreg_t sys_select(struct proc *p, int nfds, fd_set *readfds, fd_set *writefds,
-                               fd_set *exceptfds, struct timeval *timeout);
-intreg_t sys_connect(struct proc *p, int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-intreg_t sys_send(struct proc *p, int sockfd, const void *buf, size_t len, int flags);
-intreg_t sys_recv(struct proc *p, int sockfd, void *buf, size_t len, int flags);
-intreg_t sys_bind(struct proc* p, int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-intreg_t sys_accept(struct proc *p, int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-intreg_t sys_listen(struct proc *p, int sockfd, int backlog);
-
-
-#endif /* ROS_SOCKET_H */
-
diff --git a/kern/src/eth_audio.c b/kern/src/eth_audio.c
deleted file mode 100644 (file)
index f673d7a..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright (c) 2010 The Regents of the University of California
- * Barret Rhoden <brho@cs.berkeley.edu>
- * See LICENSE for details.
- *
- * Rimas's Ethernet-Audio device */
-
-#ifdef CONFIG_ETH_AUDIO
-
-#include <eth_audio.h>
-#include <string.h>
-#include <devfs.h>
-#include <page_alloc.h>
-#include <pmap.h>
-#include <net/nic_common.h>
-#include <process.h>
-#include <smp.h>
-
-struct file_operations ethaud_in_f_op;
-struct file_operations ethaud_out_f_op;
-struct page_map_operations ethaud_pm_op;
-
-/* There is only one packet we'll ever send out.  It's a full ethernet frame
- * that we build and submit to send_frame() (which does another memcpy). */
-struct ethaud_udp_packet eth_udp_out;
-
-/* Consider a lock to protect this */
-struct proc *active_proc = 0;
-
-/* Nodes/inodes representing the device */
-struct inode *ethaud_in, *ethaud_out;
-
-/* Builds the device nodes in /dev */
-void eth_audio_init(void)
-{
-       struct page *page;
-       struct file *in_f, *out_f;
-       in_f = make_device("/dev/eth_audio_in", S_IRUSR, __S_IFBLK,
-                          &ethaud_in_f_op);
-       out_f = make_device("/dev/eth_audio_out", S_IRUSR | S_IWUSR, __S_IFBLK,
-                           &ethaud_out_f_op);
-       /* Grab and save the inodes (might change if we change make_device) */
-       ethaud_in = in_f->f_dentry->d_inode;
-       kref_get(&ethaud_in->i_kref, 1);
-       ethaud_out = out_f->f_dentry->d_inode;
-       kref_get(&ethaud_out->i_kref, 1);
-       /* Let go of the files (mostly used to get the dentry in the right place) */
-       kref_put(&in_f->f_kref);
-       kref_put(&out_f->f_kref);
-       /* make sure the inode tracks the right pm op */
-       ethaud_in->i_mapping->pm_op = &ethaud_pm_op;
-       ethaud_out->i_mapping->pm_op = &ethaud_pm_op;
-       /* zalloc pages and associate them with the devices' inodes */
-       assert(!kpage_alloc(&page));
-       memset(page2kva(page), 0, PGSIZE);
-       ethaud_in->i_fs_info = page;
-       assert(!kpage_alloc(&page));
-       memset(page2kva(page), 0, PGSIZE);
-       ethaud_out->i_fs_info = page;
-}
-
-/* Lots of unnecessary copies.  For now, we need to build the ethernet frame,
- * which means we prepend the ethernet header... */
-static void eth_audio_sendpacket(void *buf)
-{
-       int retval;
-       /* Fill the outgoing buffer (Copy #1.  2 is in send_frame, 3 is the DMA). */
-       memcpy(&eth_udp_out.payload, buf, ETH_AUDIO_PAYLOAD_SZ);
-       /* Make sure there is still a reasonable header. */
-       static_assert(sizeof(eth_udp_out) == ETH_AUDIO_FRAME_SZ);
-       /* Should compute the UDP checksum before sending the frame out.  The
-        * Eth-audio device shouldn't care (and Linux seems to be okay with packets
-        * that have no checksum (but not a wrong checksum)).  Technically, this
-        * hurts our performance a bit (and some NICs can offload this). */
-       eth_udp_out.udp_hdr.checksum = 0;
-       eth_udp_out.udp_hdr.checksum = udp_checksum(&eth_udp_out.ip_hdr,
-                                                         &eth_udp_out.udp_hdr);
-       /* Send it out */
-       retval = send_frame((const char*)&eth_udp_out, ETH_AUDIO_FRAME_SZ);
-       assert(retval >= 0);
-}
-
-/* This is how we know who to send the packet back to, since we have no real
- * networking stack.  Lots of assumptions about how things stay in sync. */
-static void eth_audio_prep_response(struct ethaud_udp_packet *incoming,
-                                    struct ethaud_udp_packet *outgoing)
-{
-       /* If you're looking for optimizations, we can do this just once */
-       memcpy(&outgoing->eth_hdr.dst_mac, &incoming->eth_hdr.src_mac, 6); 
-       memcpy(&outgoing->eth_hdr.src_mac, device_mac, 6); 
-       outgoing->eth_hdr.eth_type = htons(IP_ETH_TYPE);
-       outgoing->ip_hdr.version = IPPROTO_IPV4;
-       outgoing->ip_hdr.hdr_len = ETH_AUDIO_IP_HDR_SZ >> 2;
-       outgoing->ip_hdr.tos = 0;
-       outgoing->ip_hdr.packet_len = htons(ETH_AUDIO_PAYLOAD_SZ + UDP_HDR_SZ +
-                                           ETH_AUDIO_IP_HDR_SZ);
-       outgoing->ip_hdr.id = htons(0);
-       outgoing->ip_hdr.flags_frags = htons(0);
-       outgoing->ip_hdr.ttl = DEFAULT_TTL;
-       outgoing->ip_hdr.protocol = IPPROTO_UDP;
-       /* Need a non-broadcast IP.  Picking one higher than the sender's */
-       outgoing->ip_hdr.src_addr = htonl(ntohl(incoming->ip_hdr.src_addr) + 1);
-       outgoing->ip_hdr.dst_addr = incoming->ip_hdr.src_addr;
-       /* Since the IP header is set already, we can compute the checksum. */
-       outgoing->ip_hdr.checksum = 0;
-       outgoing->ip_hdr.checksum = ip_checksum(&outgoing->ip_hdr);
-       outgoing->udp_hdr.src_port = htons(ETH_AUDIO_SRC_PORT);
-       outgoing->udp_hdr.dst_port = htons(ETH_AUDIO_DST_PORT);
-       outgoing->udp_hdr.length = htons(ETH_AUDIO_PAYLOAD_SZ + UDP_HDR_SZ);
-       outgoing->udp_hdr.checksum = htons(0);
-
-       /* Debugging */
-       static int once = 0;
-       if (!once++)
-               printd("I will send %d bytes from %p:%d to %p:%d, iplen %04p, "
-                      "udplen %04p\n",
-                      ntohs(outgoing->udp_hdr.length),
-                      ntohl(outgoing->ip_hdr.src_addr),
-                      ntohs(outgoing->udp_hdr.src_port), 
-                      ntohl(outgoing->ip_hdr.dst_addr),
-                      ntohs(outgoing->udp_hdr.dst_port),
-                      ntohs(outgoing->ip_hdr.packet_len),
-                      ntohs(outgoing->udp_hdr.length)
-                          ); 
-}
-
-/* This is called by net subsys when it detects an ethernet audio packet.  Make
- * sure the in device has the contents, and send out the old frame. */
-void eth_audio_newpacket(void *buf)
-{
-       struct page *in_page, *out_page;
-       /* Bail out if these two haven't been initialized yet */
-       if (!ethaud_in || !ethaud_out)
-               return;
-       /* Put info from the packet into the outgoing packet */
-       eth_audio_prep_response((struct ethaud_udp_packet*)buf, &eth_udp_out);
-       in_page = (struct page*)ethaud_in->i_fs_info;
-       out_page = (struct page*)ethaud_out->i_fs_info;
-       /* third copy (1st being the NIC to RAM). */
-       memcpy(page2kva(in_page), buf + ETH_AUDIO_HEADER_OFF, ETH_AUDIO_PAYLOAD_SZ);
-       /* Send the current outbound packet (can consider doing this by fsync) */
-       eth_audio_sendpacket(page2kva(out_page));
-       if (active_proc)
-               proc_notify(active_proc, 0);
-}
-
-/* mmap() calls this to do any FS specific mmap() work.  Since our files are
- * defined to be only one page, we need to make sure they aren't mmapping too
- * much, and that it isn't a PRIVATE mapping.
- *
- * Then we need to make sure the one page of the VMR is mapped in the page table
- * (circumventing handle_page_fault and the page cache).  Avoiding the page
- * cache means we won't need to worry about accidentally unmapping this under
- * pressure and having to remap it (which will cause a readpage). */
-int eth_audio_mmap(struct file *file, struct vm_region *vmr)
-{
-       struct page *page = (struct page*)file->f_dentry->d_inode->i_fs_info;
-       /* Only allow mmaping from the start of the file */
-       if (vmr->vm_foff)
-               return -1;
-       /* Only allow mmaping of a page */
-       if (vmr->vm_end - vmr->vm_base != PGSIZE)
-               return -1;
-       /* No private mappings (would be ignored anyway) */
-       if (vmr->vm_flags & MAP_PRIVATE)
-               return -1;
-       /* Only one proc can use it at a time (we need to know who to notify, since
-        * we don't have any sockets or other abstractions to work with).  Note we
-        * are storing a reference. */
-       if (active_proc && active_proc != vmr->vm_proc)
-               return -1;
-       if (!active_proc) {
-               kref_get(&vmr->vm_proc->p_kref, 1);
-               active_proc = vmr->vm_proc;
-       }
-       assert(page);
-       /* Get the PTE for the page this VMR represents */
-       pte_t *pte = pgdir_walk(vmr->vm_proc->env_pgdir, (void*)vmr->vm_base, 1);
-       if (!pte)
-               return -ENOMEM;
-       /* If there was a page there, it should have be munmapp()d. */
-       assert(!PAGE_PRESENT(*pte));
-       /* update the page table */
-       int pte_prot = (vmr->vm_prot & PROT_WRITE) ? PTE_USER_RW :
-                      (vmr->vm_prot & (PROT_READ|PROT_EXEC)) ? PTE_USER_RO : 0;
-       /* Storing a reference to the page in the PTE */
-       page_incref(page);
-       *pte = PTE(page2ppn(page), PTE_P | pte_prot);
-       return 0;
-}
-
-/* This shouldn't be called.  It could be if we ever handled a PF on the device,
- * and the device wasn't present in the page table.  This should not happen,
- * since ea_mmap() should have sorted that out.  Even if there was an unmap()
- * then a new mmap(), it still shouldn't happen. */
-int eth_audio_readpage(struct page_map *pm, struct page *page)
-{
-       warn("Eth audio readpage!  (Did you page fault?)");
-       return -1;
-}
-
-/* Called when the file is about to be closed (file obj freed).  This is the
- * least intrusive way to find out when the device is unmapped and closed, so we
- * can let go of the proc.  TODO: Note that currently, the kernel will not be
- * able to unmap the file by itself, due to the circular dependence of the kref,
- * proc_free, and destroy_vmr.  Programs have to unmap it themselves.  Since
- * this device is a bit of a hack anyway, I'm okay with not making big changes
- * to the kernel to support this yet. */
-int eth_audio_release(struct inode *inode, struct file *file)
-{
-       /* Disconnect the proc from the device, decref. */
-       if (active_proc && current) {
-               assert(active_proc == current);
-               kref_put(&active_proc->p_kref);
-               active_proc = 0;
-       }
-       return 0;
-}
-
-/* File operations */
-struct file_operations ethaud_in_f_op = {
-       dev_c_llseek,   /* Errors out, can't llseek */
-       0,                              /* Can't read, only mmap */
-       0,                              /* Can't write, only mmap */
-       kfs_readdir,    /* this will fail gracefully */
-       eth_audio_mmap,
-       kfs_open,
-       kfs_flush,
-       eth_audio_release,
-       0,                              /* fsync - makes no sense */
-       kfs_poll,
-       0,      /* readv */
-       0,      /* writev */
-       kfs_sendpage,
-       kfs_check_flags,
-};
-
-struct file_operations ethaud_out_f_op = {
-       dev_c_llseek,   /* Errors out, can't llseek */
-       0,                              /* Can't read, only mmap */
-       0,                              /* Can't write, only mmap */
-       kfs_readdir,    /* this will fail gracefully */
-       eth_audio_mmap,
-       kfs_open,
-       kfs_flush,
-       eth_audio_release,
-       0,                              /* fsync - TODO: make this send the packet */
-       kfs_poll,
-       0,      /* readv */
-       0,      /* writev */
-       kfs_sendpage,
-       kfs_check_flags,
-};
-
-/* Eth audio page map ops: */
-struct page_map_operations ethaud_pm_op = {
-       eth_audio_readpage,
-};
-
-#endif /* CONFIG_ETH_AUDIO */
index 21ec4a4..03cf67c 100644 (file)
@@ -42,9 +42,6 @@
 #include <blockdev.h>
 #include <ext2fs.h>
 #include <kthread.h>
-#include <net.h>
-#include <socket.h>
-#include <eth_audio.h>
 #include <console.h>
 
 // zra: flag for Ivy
index d07dbc4..0fe649e 100644 (file)
@@ -2,7 +2,8 @@ menuconfig NETWORKING
        bool "Networking Support"
        default y
        help
-               Basic networking (TCP, UDP, IP, etc).
+               This is a placeholder for networking related option.  Right now,
+               CONFIG_NETWORKING does not change the build in any way.
 
 if NETWORKING
 
index f0dd657..9686691 100644 (file)
 #include <arsc_server.h>
 #include <event.h>
 #include <termios.h>
-#include <socket.h>
-
-#ifdef CONFIG_NETWORKING
-#include <net/nic_common.h>
-extern int (*send_frame)(const char *CT(len) data, size_t len);
-extern unsigned char device_mac[6];
-#endif
 
 /* Tracing Globals */
 int systrace_flags = 0;
@@ -1004,148 +997,6 @@ static int sys_abort_sysc(struct proc *p, struct syscall *sysc)
        return abort_sysc(p, sysc);
 }
 
-/************** Platform Specific Syscalls **************/
-
-//Read a buffer over the serial port
-static ssize_t sys_serial_read(env_t* e, char *DANGEROUS _buf, size_t len)
-{
-       printk("[kernel] serial reading is deprecated.\n");
-       if (len == 0)
-               return 0;
-
-       #ifdef CONFIG_SERIAL_IO
-           char *COUNT(len) buf = user_mem_assert(e, _buf, len, 1, PTE_USER_RO);
-               size_t bytes_read = 0;
-               int c;
-               while((c = serial_read_byte()) != -1) {
-                       buf[bytes_read++] = (uint8_t)c;
-                       if(bytes_read == len) break;
-               }
-               return (ssize_t)bytes_read;
-       #else
-               return -EINVAL;
-       #endif
-}
-
-//Write a buffer over the serial port
-static ssize_t sys_serial_write(env_t* e, const char *DANGEROUS buf, size_t len)
-{
-       printk("[kernel] serial writing is deprecated.\n");
-       if (len == 0)
-               return 0;
-       #ifdef CONFIG_SERIAL_IO
-               char *COUNT(len) _buf = user_mem_assert(e, buf, len, 1, PTE_USER_RO);
-               for(int i =0; i<len; i++)
-                       serial_send_byte(buf[i]);
-               return (ssize_t)len;
-       #else
-               return -EINVAL;
-       #endif
-}
-
-#ifdef CONFIG_NETWORKING
-// This is not a syscall we want. Its hacky. Here just for syscall stuff until get a stack.
-static ssize_t sys_eth_read(env_t* e, char *DANGEROUS buf)
-{
-       if (eth_up) {
-
-               uint32_t len;
-               char *ptr;
-
-               spin_lock(&packet_buffers_lock);
-
-               if (num_packet_buffers == 0) {
-                       spin_unlock(&packet_buffers_lock);
-                       return 0;
-               }
-
-               ptr = packet_buffers[packet_buffers_head];
-               len = packet_buffers_sizes[packet_buffers_head];
-
-               num_packet_buffers--;
-               packet_buffers_head = (packet_buffers_head + 1) % MAX_PACKET_BUFFERS;
-
-               spin_unlock(&packet_buffers_lock);
-
-               char* _buf = user_mem_assert(e, buf, len, 1, PTE_U);
-
-               memcpy(_buf, ptr, len);
-
-               kfree(ptr);
-
-               return len;
-       }
-       else
-               return -EINVAL;
-}
-
-// This is not a syscall we want. Its hacky. Here just for syscall stuff until get a stack.
-static ssize_t sys_eth_write(env_t* e, const char *DANGEROUS buf, size_t len)
-{
-       if (eth_up) {
-
-               if (len == 0)
-                       return 0;
-
-               // HACK TO BYPASS HACK
-               int just_sent = send_frame(buf, len);
-
-               if (just_sent < 0) {
-                       printk("Packet send fail\n");
-                       return 0;
-               }
-
-               return just_sent;
-
-               // END OF RECURSIVE HACK
-/*
-               char *COUNT(len) _buf = user_mem_assert(e, buf, len, PTE_U);
-               int total_sent = 0;
-               int just_sent = 0;
-               int cur_packet_len = 0;
-               while (total_sent != len) {
-                       cur_packet_len = ((len - total_sent) > MTU) ? MTU : (len - total_sent);
-                       char dest_mac[6] = APPSERVER_MAC_ADDRESS;
-                       char* wrap_buffer = eth_wrap(_buf + total_sent, cur_packet_len, device_mac, dest_mac, APPSERVER_PORT);
-                       just_sent = send_frame(wrap_buffer, cur_packet_len + sizeof(struct ETH_Header));
-
-                       if (just_sent < 0)
-                               return 0; // This should be an error code of its own
-
-                       if (wrap_buffer)
-                               kfree(wrap_buffer);
-
-                       total_sent += cur_packet_len;
-               }
-
-               return (ssize_t)len;
-*/
-       }
-       else
-               return -EINVAL;
-}
-
-static ssize_t sys_eth_get_mac_addr(env_t* e, char *DANGEROUS buf) 
-{
-       if (eth_up) {
-               for (int i = 0; i < 6; i++)
-                       buf[i] = device_mac[i];
-               return 0;
-       }
-       else
-               return -EINVAL;
-}
-
-static int sys_eth_recv_check(env_t* e) 
-{
-       if (num_packet_buffers != 0) 
-               return 1;
-       else
-               return 0;
-}
-
-#endif // Network
-
 static intreg_t sys_read(struct proc *p, int fd, void *buf, int len)
 {
        ssize_t ret;
@@ -1859,16 +1710,6 @@ const static struct sys_table_entry syscall_table[] = {
        [SYS_self_notify] = {(syscall_t)sys_self_notify, "self_notify"},
        [SYS_vc_entry] = {(syscall_t)sys_vc_entry, "vc_entry"},
        [SYS_halt_core] = {(syscall_t)sys_halt_core, "halt_core"},
-#ifdef CONFIG_SERIAL_IO
-       [SYS_serial_read] = {(syscall_t)sys_serial_read, "ser_read"},
-       [SYS_serial_write] = {(syscall_t)sys_serial_write, "ser_write"},
-#endif
-#ifdef CONFIG_NETWORKING
-       [SYS_eth_read] = {(syscall_t)sys_eth_read, "eth_read"},
-       [SYS_eth_write] = {(syscall_t)sys_eth_write, "eth_write"},
-       [SYS_eth_get_mac_addr] = {(syscall_t)sys_eth_get_mac_addr, "get_mac"},
-       [SYS_eth_recv_check] = {(syscall_t)sys_eth_recv_check, "recv_check"},
-#endif
 #ifdef CONFIG_ARSC_SERVER
        [SYS_init_arsc] = {(syscall_t)sys_init_arsc, "init_arsc"},
 #endif
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/accept.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/accept.c
deleted file mode 100644 (file)
index fe96e1c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
-       return ros_syscall(SYS_accept, sockfd, addr, addrlen, 0, 0, 0);
-}
-
-libc_hidden_def (accept)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/bind.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/bind.c
deleted file mode 100644 (file)
index eafa3da..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-int __bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
-{
-       return ros_syscall(SYS_bind, sockfd, addr, addrlen, 0, 0, 0);
-}
-
-weak_alias (__bind, bind)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/connect.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/connect.c
deleted file mode 100644 (file)
index c52928c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-#undef __connect
-int __connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
-{
-       return ros_syscall(SYS_connect, sockfd, addr, addrlen, 0, 0, 0);
-}
-
-INTDEF(__connect)
-weak_alias (__connect, connect)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/listen.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/listen.c
deleted file mode 100644 (file)
index d3be5f6..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-int __listen(int sockfd, int backlog) {
-       return ros_syscall(SYS_listen, sockfd, backlog, 0, 0, 0, 0);
-}
-weak_alias (__listen, listen)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recv.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recv.c
deleted file mode 100644 (file)
index 2297105..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-ssize_t __recv(int s, void *buf, size_t len, int flags) {
-       return ros_syscall(SYS_recv, s, buf, len, flags, 0, 0);
-}
-
-//libc_hidden_def (__recv)
-weak_alias (__recv, recv)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recvfrom.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/recvfrom.c
deleted file mode 100644 (file)
index 06443e5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-ssize_t __recvfrom (int s, void *buf, size_t len, int flags,
-                 struct sockaddr *from, socklen_t *fromlen)
-{
-       return ros_syscall(SYS_recvfrom, s, buf, len, flags, from, fromlen);
-}
-
-weak_alias (__recvfrom, recvfrom)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/select.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/select.c
deleted file mode 100644 (file)
index 446b4ae..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <sysdep.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-int __select(int nfds, fd_set *readfds, fd_set *writefds,
-           fd_set *exceptfds, struct timeval *timeout) {
-       return ros_syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout, 0);
-}
-
-libc_hidden_def (__select)
-weak_alias (__select, select)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/send.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/send.c
deleted file mode 100644 (file)
index 611e927..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-ssize_t
-__send(int s, const void *buf, size_t len, int flags) {
-       return ros_syscall(SYS_send, s, buf, len, flags, 0, 0);
-}
-
-libc_hidden_def (__send)
-weak_alias (__send, send)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/sendto.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/sendto.c
deleted file mode 100644 (file)
index f3a6e7f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <ros/syscall.h>
-
-ssize_t
-__sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) {
-       return ros_syscall(SYS_sendto, s, buf, len, flags, to, tolen);
-}
-
-weak_alias (__sendto, sendto)
diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/socket.c b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/socket.c
deleted file mode 100644 (file)
index 800fcfb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <sysdep.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <ros/syscall.h>
-
-int __socket(int socket_family, int socket_type, int protocol) {
-       return ros_syscall(SYS_socket, socket_family, socket_type, protocol, 0,0,0);
-}
-
-//libc_hidden_def (__socket)
-weak_alias (__socket, socket)
index e94f023..6322287 100644 (file)
@@ -30,10 +30,6 @@ extern "C" {
 ssize_t     sys_cputs(const uint8_t *s, size_t len);
 uint16_t    sys_cgetc(void);
 int         sys_null(void);
-ssize_t     sys_serial_write(void* buf, size_t len); 
-ssize_t     sys_serial_read(void* buf, size_t len);
-ssize_t     sys_eth_write(void *COUNT(len) buf, size_t len); 
-ssize_t     sys_eth_read(void *COUNT(len) buf, size_t len);
 size_t      sys_getpcoreid(void);
 /* Process Management */
 int         sys_getpid(void);
index 145094c..960d4d4 100644 (file)
@@ -46,36 +46,6 @@ ssize_t sys_shared_page_free(void* addr, pid_t p2)
        return ros_syscall(SYS_shared_page_free, addr, p2, 0, 0, 0, 0);
 }
 
-//Write a buffer over the serial port
-ssize_t sys_serial_write(void* buf, size_t len) 
-{
-       return ros_syscall(SYS_serial_write, buf, len, 0, 0, 0, 0);
-}
-
-//Read a buffer over the serial port
-ssize_t sys_serial_read(void* buf, size_t len) 
-{
-       return ros_syscall(SYS_serial_read, buf, len, 0, 0, 0, 0);
-}
-
-//Write a buffer over ethernet
-ssize_t sys_eth_write(void* buf, size_t len) 
-{
-       if (len == 0)
-               return 0;
-       
-       return ros_syscall(SYS_eth_write, buf, len, 0, 0, 0, 0);
-}
-
-//Read a buffer via ethernet
-ssize_t sys_eth_read(void* buf, size_t len) 
-{
-       if (len == 0)
-               return 0;
-               
-       return ros_syscall(SYS_eth_read, buf, len, 0, 0, 0, 0);
-}
-
 void sys_reboot(void)
 {
        ros_syscall(SYS_reboot, 0, 0, 0, 0, 0, 0);