diff --git a/configs/rgmp/README.txt b/configs/rgmp/README.txt index bc28bf8a277e95f7f02cf69e86337c6a3dab2c12..2db1d6b13d96ee6560e3c5a487d6d83be6b2fdd8 100755 --- a/configs/rgmp/README.txt +++ b/configs/rgmp/README.txt @@ -10,15 +10,18 @@ and GPOS features. See http://rgmp.sourceforge.net/wiki/index.php/Main_Page for further information about RGMP. +The updated build instructions can be found at: +http://rgmp.sourceforge.net/wiki/index.php/Documentation + Ubuntu Build Instructions -------------------------- Build requirements: Hardware: x86 PC -Software: Ubuntu 10.04 or Ubuntu 10.10 +Software: Ubuntu 10.04, 10.10 or 11.04 Run requirements: Hardware: multi-processor x86 PC -Software: Ubuntu 10.04 or Ubuntu 10.10 +Software: Ubuntu 10.04, 10.10 or 11.04 1. Download RGMP from the following URL: @@ -66,7 +69,7 @@ Other Linux OS Build Instruction -------------------------------------- Requirements: Hardware: multi-processor x86 PC -Software: running Linux kernel 2.6.32 or 2.6.35 kernel +Software: running Linux kernel 2.6.32, 2.6.35 or 2.6.38 1. Get your running Linux kernel header under /usr/src/linux-headers-$(uname -r) directory. diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c index 97b51a74525c707fe169b5eb097180d47f058b86..481c2123ebe97b61f2d007c7a96c92963bb37ee2 100644 --- a/drivers/net/e1000.c +++ b/drivers/net/e1000.c @@ -176,7 +176,7 @@ static inline uint32_t e1000_inl(struct e1000_dev *dev, int reg) /****************************** e1000 driver ********************************/ -static void e1000_reset(struct e1000_dev *dev) +void e1000_reset(struct e1000_dev *dev) { uint32_t dev_control; @@ -186,7 +186,7 @@ static void e1000_reset(struct e1000_dev *dev) dev_control |= (0<<2); // GIOMD-bit (GIO Master Disable) dev_control |= (1<<3); // LRST-bit (Link Reset) dev_control |= (1<<6); // SLU-bit (Set Link Up) - dev_control |= (1<<8); // SPEED=2 (1000Mbps) + dev_control |= (2<<8); // SPEED=2 (1000Mbps) dev_control |= (0<<11); // FRCSPD-bit (Force Speed) dev_control |= (0<<12); // FRCDPLX-bit (Force Duplex) dev_control |= (0<<20); // ADVD3WUC-bit (Advertise D3 Wake Up Cap) @@ -201,11 +201,12 @@ static void e1000_reset(struct e1000_dev *dev) e1000_outl(dev, E1000_CTRL, dev_control); dev_control &= ~(1<<26); // clear RST-bit (Device Reset) e1000_outl(dev, E1000_CTRL, dev_control); - up_mdelay(2000); + up_mdelay(10); e1000_outl(dev, E1000_CTRL_EXT, 0x001401C0); + e1000_outl(dev, E1000_IMC, 0xFFFFFFFF); } -static void e1000_turn_on(struct e1000_dev *dev) +void e1000_turn_on(struct e1000_dev *dev) { int tx_control, rx_control; uint32_t ims = 0; @@ -232,7 +233,7 @@ static void e1000_turn_on(struct e1000_dev *dev) e1000_outl(dev, E1000_IMS, ims); } -static void e1000_turn_off(struct e1000_dev *dev) +void e1000_turn_off(struct e1000_dev *dev) { int tx_control, rx_control; @@ -250,7 +251,7 @@ static void e1000_turn_off(struct e1000_dev *dev) e1000_outl(dev, E1000_IMC, 0xFFFFFFFF); } -static void e1000_init(struct e1000_dev *dev) +void e1000_init(struct e1000_dev *dev) { uint32_t rxd_phys, txd_phys, kmem_phys; uint32_t rx_control, tx_control; @@ -885,7 +886,7 @@ static int e1000_probe(uint16_t addr, pci_id_t id) { uint32_t mmio_base, mmio_size; uint32_t pci_cmd, size; - int err, irq; + int err, irq, flags; void *kmem, *omem; struct e1000_dev *dev; @@ -922,11 +923,16 @@ static int e1000_probe(uint16_t addr, pci_id_t id) memcpy(dev->src_mac, (void *)(dev->io_mem_base+E1000_RA), 6); // get e1000 IRQ - irq = pci_read_irq(addr); + flags = 0; + irq = pci_enable_msi(addr); + if (irq == 0) { + irq = pci_read_irq(addr); + flags |= IDC_SHARE; + } dev->irq = irq; dev->int_desc.handler = e1000_interrupt_handler; dev->int_desc.dev_id = dev; - err = rgmp_request_irq(irq, &dev->int_desc, IDC_SHARE); + err = rgmp_request_irq(irq, &dev->int_desc, flags); if (err) goto err0; @@ -1014,7 +1020,6 @@ static int e1000_probe(uint16_t addr, pci_id_t id) void e1000_mod_init(void) { pci_probe_device(e1000_id_table, e1000_probe); - return 0; } void e1000_mod_exit(void)