PERFORCE change 179676 for review
Alexandre Fiveg
afiveg at FreeBSD.org
Wed Jun 16 12:08:16 UTC 2010
http://p4web.freebsd.org/@@179676?ac=10
Change 179676 by afiveg at cottonmouth on 2010/06/16 12:08:08
Working on new ringmap design. Still refactoring and adapting to current "em"
add new files ringmap_8254.[ch]. These should contain the code for accessing
registers of 8254* controller and accessing of structures of conventional "em"
driver: now if_lem
Submitted by: Alexander Fiveg
Affected files ...
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/LICENSE#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/README#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82540.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82542.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_defines.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_hw.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_regs.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.c#6 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.h#5 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.c#5 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.c#1 add
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_8254.h#1 add
.. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_e1000.h#3 edit
.. //depot/projects/soc2010/ringmap/current/sys/modules/em/Makefile#9 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#5 edit
.. //depot/projects/soc2010/ringmap/current/sys/net/ringmap.h#5 edit
Differences ...
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/LICENSE#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/README#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_80003es2lan.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82540.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82541.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82542.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82543.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82571.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_82575.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_api.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_defines.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_hw.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_ich8lan.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_mac.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_manage.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_nvm.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_osdep.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.c#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_phy.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/e1000_regs.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.c#6 (text+ko) ====
@@ -85,6 +85,13 @@
#include "e1000_82571.h"
#include "if_em.h"
+#ifdef RINGMAP
+#include <net/ringmap.h>
+
+extern int ringmap_attach (struct ringmap **);
+extern int ringmap_detach (struct ringmap *);
+#endif
+
/*********************************************************************
* Set this to one to display debug statistics
*********************************************************************/
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_em.h#5 (text+ko) ====
@@ -209,7 +209,7 @@
#define EM_MSIX_BAR 3 /* On 82575 */
/* Defines for printing debug information */
-#define DEBUG_INIT 0
+#define DEBUG_INIT 1
#define DEBUG_IOCTL 0
#define DEBUG_HW 0
@@ -411,6 +411,10 @@
unsigned long watchdog_events;
unsigned long link_irq;
+#ifdef RINGMAP
+ struct ringmap *rm;
+#endif
+
struct e1000_hw_stats stats;
};
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.c#5 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_igb.h#3 (text+ko) ====
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.c#3 (text+ko) ====
@@ -262,6 +262,14 @@
const char *, int *, int);
#endif /* ~EM_LEGACY_IRQ */
+
+#ifdef RINGMAP
+#include <net/ringmap.h>
+
+extern int ringmap_attach (struct ringmap **, device_t);
+extern int ringmap_detach (struct ringmap *);
+#endif
+
#ifdef DEVICE_POLLING
static poll_handler_t lem_poll;
#endif /* POLLING */
@@ -282,13 +290,23 @@
};
static driver_t lem_driver = {
+#ifndef RINGMAP
"em", lem_methods, sizeof(struct adapter),
+#else
+ "ringmap", lem_methods, sizeof(struct adapter),
+#endif
};
extern devclass_t em_devclass;
+#ifndef RINGMAP
DRIVER_MODULE(lem, pci, lem_driver, em_devclass, 0, 0);
MODULE_DEPEND(lem, pci, 1, 1, 1);
MODULE_DEPEND(lem, ether, 1, 1, 1);
+#else
+DRIVER_MODULE(ringmap, pci, lem_driver, em_devclass, 0, 0);
+MODULE_DEPEND(ringmap, pci, 1, 1, 1);
+MODULE_DEPEND(ringmap, ether, 1, 1, 1);
+#endif
/*********************************************************************
* Tunable default values.
@@ -357,7 +375,7 @@
u16 pci_subdevice_id = 0;
em_vendor_info_t *ent;
- INIT_DEBUGOUT("em_probe: begin");
+ INIT_DEBUGOUT("lem_probe: begin");
pci_vendor_id = pci_get_vendor(dev);
if (pci_vendor_id != EM_VENDOR_ID)
@@ -658,6 +676,10 @@
adapter->led_dev = led_create(lem_led_func, adapter,
device_get_nameunit(dev));
+#ifdef RINGMAP
+ ringmap_attach (dev);
+#endif
+
INIT_DEBUGOUT("lem_attach: end");
return (0);
@@ -698,6 +720,10 @@
INIT_DEBUGOUT("em_detach: begin");
+#ifdef RINGMAP
+ ringmap_detach (adapter->rm);
+#endif
+
/* Make sure VLANS are not using driver */
#if __FreeBSD_version >= 700000
if (adapter->ifp->if_vlantrunk != NULL) {
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#3 (text+ko) ====
@@ -218,7 +218,7 @@
#define EM_MSIX_BAR 3 /* On 82575 */
/* Defines for printing debug information */
-#define DEBUG_INIT 0
+#define DEBUG_INIT 1
#define DEBUG_IOCTL 0
#define DEBUG_HW 0
@@ -421,6 +421,9 @@
boolean_t pcix_82544;
boolean_t in_detach;
+#ifdef RINGMAP
+ struct ringmap *rm;
+#endif
struct e1000_hw_stats stats;
};
==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/ringmap_e1000.h#3 (text+ko) ====
@@ -51,7 +51,7 @@
RINGMAP_HW_READ_REG(&adapter->hw, E1000_RDT(0))
-#define RINGMAP_GET_ADAPTER_STRUCT(adapter) \
+#define RINGMAP_GET_ADAPTER_STRUCT() \
(struct adapter *)devclass_get_softc(em_devclass, dev2unit(dev))
==== //depot/projects/soc2010/ringmap/current/sys/modules/em/Makefile#9 (text+ko) ====
@@ -1,9 +1,5 @@
# $FreeBSD: src/sys/modules/em/Makefile,v 1.16 2010/03/29 23:36:34 jfv Exp $
-.if defined(KERNEL_RINGMAP)
-.PATH: ${.CURDIR}/../../dev/e1000 : ${.CURDIR}/../../net
-.else
.PATH: ${.CURDIR}/../../dev/e1000
-.endif
KMOD = if_em
SRCS = device_if.h bus_if.h pci_if.h opt_inet.h
==== //depot/projects/soc2010/ringmap/current/sys/net/ringmap.c#5 (text+ko) ====
@@ -23,46 +23,47 @@
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
+
#include <vm/vm_param.h>
#include <vm/vm_kern.h>
-#ifdef __E1000_RINGMAP__
-#include "e1000_api.h"
-#include "if_em.h"
+//#ifdef __E1000_RINGMAP__
+//#include "e1000_api.h"
+//#include "if_em.h"
+//
+//extern devclass_t em_devclass;
+//extern int em_rxeof(struct rx_ring *, int);
+//extern bool em_txeof(struct tx_ring *);
+//extern void em_print_debug_info(struct adapter *);
+//extern void em_start_locked(struct ifnet *, struct tx_ring *);
+//#endif
-extern devclass_t em_devclass;
-extern int em_rxeof(struct rx_ring *, int);
-extern bool em_txeof(struct tx_ring *);
-extern void em_print_debug_info(struct adapter *);
-extern void em_start_locked(struct ifnet *, struct tx_ring *);
-#endif
-
#include "ringmap.h"
-/* DON'T TOUCH IT */
-int fiveg_da_2009 = 1;
-
/* F U N C T I O N S */
-int ringmap_attach(struct adapter *);
-int ringmap_detach(struct adapter*);
-struct adapter* get_adapter_struct(struct cdev *dev);
-int ringmap_print_ring_pointers(struct adapter *);
-void ringmap_print_ring (struct adapter *adapter, int level);
-void ringmap_print_slot(struct adapter *adapter, unsigned int slot_number);
+int ringmap_attach(device_t);
+int ringmap_detach(device_t);
+int set_ringmap_to_adapter (device_t, ringmap *);
+//struct adapter* get_adapter_struct(struct cdev *dev);
+//int ringmap_print_ring_pointers(struct adapter *);
+//void ringmap_print_ring (struct adapter *adapter, int level);
+//void ringmap_print_slot(struct adapter *adapter, unsigned int slot_number);
-#if (__DRIVER_VERSION == 696)
-void ringmap_handle_rxtx(void *context, int pending);
-#endif
-
-/* For CURRENT */
-void ringmap_handle_que(void *context, int pending);
-
+//#if (__DRIVER_VERSION == 696)
+//void ringmap_handle_rxtx(void *context, int pending);
+//#endif
+//
+///* For CURRENT */
+//void ringmap_handle_que(void *context, int pending);
+//
d_open_t ringmap_open;
d_close_t ringmap_close;
d_ioctl_t ringmap_ioctl;
d_mmap_t ringmap_mmap;
+void ringmap_close_cb (void *data);
+
/*
* Character Device for access on if_em driver structures
*/
@@ -79,16 +80,12 @@
* Will called from if_em.c before returning from
* em_attach() function.
*/
-int ringmap_attach(struct adapter *a) {
- struct adapter *adapter = a;
+int ringmap_attach(device_t devt) {
struct ringmap *rm;
struct ring *ring;
RINGMAP_FUNC_DEBUG(begin);
- /* Disable interrupts while we set our structures */
- RINGMAP_HW_DISABLE_INTR(adapter);
-
rm = (struct ringmap *) contigmalloc (sizeof(struct ringmap),
M_DEVBUF, M_ZERO, 0, -1L, PAGE_SIZE, 0);
@@ -96,21 +93,13 @@
RINGMAP_ERROR(Can not allocate space for ringmap structure);
return (-1);
}
- if ((vm_offset_t)(rm) & PAGE_MASK){
- RINGMAP_ERROR(rm is not allined to PAGE_MASK);
- return (-1);
- }
ring = (struct ring *) contigmalloc (sizeof(struct ring),
M_DEVBUF, M_ZERO, 0, -1L, PAGE_SIZE, 0);
if (ring == NULL) {
- RINGMAP_ERROR(Can not allocate space for ringmap structure);
+ RINGMAP_ERROR(Can not allocate space for ring structure);
return (-1);
}
- if ((vm_offset_t)(ring) & PAGE_MASK){
- RINGMAP_ERROR(rm is not allined to PAGE_MASK);
- return (-1);
- }
rm->ring = ring;
@@ -123,18 +112,17 @@
*
* - controll packet capturing: start, stop, sleep to wait for packets.
*/
- rm->ringmap_dev = make_dev(&ringmap_devsw, device_get_unit(adapter->dev),
- UID_ROOT, GID_WHEEL, 0666, RINGMAP_DEVICE"%s",
- device_get_nameunit(adapter->dev));
+ rm->ringmap_dev = make_dev(&ringmap_devsw, device_get_unit(adapter_dev),
+ UID_ROOT, GID_WHEEL, 0666, RINGMAP_DEVICE);
- /* Counts how many times the device will opened */
+ /* Device open counter */
rm->open_cnt = 0;
- /* Pointer to structure of process wich opened the device */
+ /* Pointer to structure of process wich has opened the device */
rm->procp = NULL;
- adapter->rm = rm;
- rm->adapter = adapter;
+ /* set the pointer to ringmap in the adapters structure */
+
RINGMAP_FUNC_DEBUG(end);
@@ -143,29 +131,16 @@
int
-ringmap_detach(struct adapter *adapter)
+ringmap_detach(struct ringmap *rm)
{
- struct ringmap *rm;
RINGMAP_FUNC_DEBUG(start);
- if (adapter == NULL){
- RINGMAP_ERROR(NUll pointer to adapter structure);
- return (1);
- }
+ destroy_dev(rm->ringmap_dev);
- rm = adapter->rm;
-
- /* Disable pkts receive and interrupts while we set our structures */
- RINGMAP_HW_DISABLE_INTR(adapter);
- RINGMAP_HW_DISABLE_RECEIVE(adapter);
+ contigfree(rm->ring, sizeof(struct ring), M_DEVBUF);
- /* May be any tasks in queue */
- taskqueue_free(adapter->tq);
-
- destroy_dev(rm->ringmap_dev);
-
- // FREE(rm, M_DEVBUF);
+ contigfree(rm, sizeof(struct ring), M_DEVBUF);
RINGMAP_FUNC_DEBUG(end);
@@ -182,67 +157,68 @@
int
ringmap_open(struct cdev *dev, int flag, int otyp, struct thread *td)
{
- unsigned int i;
- struct ring_slot;
- struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
- struct ringmap *rm = adapter->rm;
+// unsigned int i;
+// struct ring_slot;
+// struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
+// struct ringmap *rm = adapter->rm;
RINGMAP_FUNC_DEBUG(start);
#if (__RINGMAP_DEB)
- printf("[%s]: dev_t=%d, flag=%x, otyp=%x, iface=%s\n", __func__,
- dev2udev(dev), flag, otyp, device_get_nameunit(adapter->dev));
+ printf("[%s]: dev_t=%d, flag=%x, otyp=%x\n",
+ __func__, dev2udev(dev), flag, otyp);
#endif
- /**
- ** Only one process only one time can open our device !!!
- **/
- if (!atomic_cmpset_int(&rm->open_cnt, 0, 1)){
- RINGMAP_ERROR(Sorry! Device is opened!);
- return (ENODEV);
- }
-
- /* Disable interrupts of adapter */
- RINGMAP_HW_DISABLE_INTR(adapter);
-
- /* Disable Flow Control */
- RINGMAP_HW_DISABLE_FLOWCONTR(adapter);
-
- /*
- * Prepare ring for caputure
- */
- rm->procp = (struct proc *)td->td_proc;
- rm->td = td;
- RINGMAP_INIT(rm->ring, adapter);
-
- for (i = 0 ; i < SLOTS_NUMBER ; i ++) {
- if (MBUF_AREA(rm->adapter)[i].m_head == NULL) {
- printf(ERR_PREFIX"[%s] mbuf for descriptor=%d is not allocated\n", __func__, i);
- printf(ERR_PREFIX"[%s] The reason may be: ifnet structure for our network device not present or not initialized\n", __func__);
- return (EFAULT);
- }
-
- DESC_AREA(rm->adapter)[i].status = 0;
-
- rm->ring->slot[i].mbuf.kern = (vm_offset_t) RINGMAP_GET_MBUF_P(rm->adapter, i);
- rm->ring->slot[i].mbuf.phys = (bus_addr_t) vtophys(RINGMAP_GET_MBUF_P(rm->adapter, i));
-
- rm->ring->slot[i].packet.kern = (vm_offset_t) RINGMAP_GET_PACKET_P(rm->adapter, i);
- rm->ring->slot[i].packet.phys = (bus_addr_t) vtophys(RINGMAP_GET_PACKET_P(rm->adapter, i));
-
- rm->ring->slot[i].descriptor.kern = (vm_offset_t) RINGMAP_GET_DESCRIPTOR_P(rm->adapter, i);
- rm->ring->slot[i].descriptor.phys = (bus_addr_t) vtophys(RINGMAP_GET_DESCRIPTOR_P(rm->adapter, i));
-
-#if (__RINGMAP_DEB)
- ringmap_print_slot(adapter, i);
-#endif
- }
- rm->ring->hw_stats.kern = (vm_offset_t)(&adapter->stats);
- rm->ring->hw_stats.phys = (bus_addr_t)vtophys(&adapter->stats);
-
-
- RINGMAP_HW_ENABLE_INTR(adapter);
-
+//
+// /**
+// ** Only one process only one time can open our device !!!
+// **/
+// if (!atomic_cmpset_int(&rm->open_cnt, 0, 1)){
+// RINGMAP_ERROR(Sorry! Device is opened!);
+// return (ENODEV);
+// }
+//
+// /* Disable interrupts of adapter */
+// RINGMAP_HW_DISABLE_INTR(adapter);
+//
+// /* Disable Flow Control */
+// RINGMAP_HW_DISABLE_FLOWCONTR(adapter);
+//
+// /*
+// * Prepare ring for caputure
+// */
+// rm->procp = (struct proc *)td->td_proc;
+// rm->td = td;
+// RINGMAP_INIT(rm->ring, adapter);
+//
+// for (i = 0 ; i < SLOTS_NUMBER ; i ++) {
+// if (MBUF_AREA(rm->adapter)[i].m_head == NULL) {
+// printf(ERR_PREFIX"[%s] mbuf for descriptor=%d is not allocated\n", __func__, i);
+// printf(ERR_PREFIX"[%s] The reason may be: ifnet structure for our network device not present or not initialized\n", __func__);
+// return (EFAULT);
+// }
+//
+// DESC_AREA(rm->adapter)[i].status = 0;
+//
+// rm->ring->slot[i].mbuf.kern = (vm_offset_t) RINGMAP_GET_MBUF_P(rm->adapter, i);
+// rm->ring->slot[i].mbuf.phys = (bus_addr_t) vtophys(RINGMAP_GET_MBUF_P(rm->adapter, i));
+//
+// rm->ring->slot[i].packet.kern = (vm_offset_t) RINGMAP_GET_PACKET_P(rm->adapter, i);
+// rm->ring->slot[i].packet.phys = (bus_addr_t) vtophys(RINGMAP_GET_PACKET_P(rm->adapter, i));
+//
+// rm->ring->slot[i].descriptor.kern = (vm_offset_t) RINGMAP_GET_DESCRIPTOR_P(rm->adapter, i);
+// rm->ring->slot[i].descriptor.phys = (bus_addr_t) vtophys(RINGMAP_GET_DESCRIPTOR_P(rm->adapter, i));
+//
+//#if (__RINGMAP_DEB)
+// ringmap_print_slot(adapter, i);
+//#endif
+// }
+// rm->ring->hw_stats.kern = (vm_offset_t)(&adapter->stats);
+// rm->ring->hw_stats.phys = (bus_addr_t)vtophys(&adapter->stats);
+//
+//
+// RINGMAP_HW_ENABLE_INTR(adapter);
+//
RINGMAP_FUNC_DEBUG(end);
return (0);
@@ -252,25 +228,25 @@
int
ringmap_close(struct cdev *dev, int flag, int otyp, struct thread *td)
{
- struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
- struct ringmap *rm = adapter->rm;
-
+// struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
+// struct ringmap *rm = adapter->rm;
+//
RINGMAP_FUNC_DEBUG(start);
-
- /* Disable interrupts while we set our structures */
- RINGMAP_HW_DISABLE_INTR(adapter);
-
-#if (__RINGMAP_DEB)
- printf("[%s]: dev_t=%d, flag=%x, otyp=%x, iface=%s\n", __func__,
- dev2udev(dev), flag, otyp, device_get_nameunit(adapter->dev));
-#endif
-
- /* After close there is no capturing process */
- rm->procp = NULL;
- rm->td = NULL;
+//
+// /* Disable interrupts while we set our structures */
+// RINGMAP_HW_DISABLE_INTR(adapter);
+//
+//#if (__RINGMAP_DEB)
+// printf("[%s]: dev_t=%d, flag=%x, otyp=%x, iface=%s\n", __func__,
+// dev2udev(dev), flag, otyp, device_get_nameunit(adapter->dev));
+//#endif
+//
+// /* After close there is no capturing process */
+// rm->procp = NULL;
+// rm->td = NULL;
+//
+// atomic_readandclear_int(&rm->open_cnt);
- atomic_readandclear_int(&rm->open_cnt);
-
RINGMAP_FUNC_DEBUG(end);
return (0);
}
@@ -278,19 +254,19 @@
int
ringmap_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr)
{
- struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
- struct ringmap *rm = adapter->rm;
-
+// struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
+// struct ringmap *rm = adapter->rm;
+//
RINGMAP_FUNC_DEBUG(start);
-
- if (nprot & PROT_EXEC) {
- RINGMAP_WARN("PROT_EXEC ist set");
- return (ERESTART);
- }
-
- /* We want to map ring in user-space. offset is not needed! */
- offset = 0;
- *paddr = vtophys((rm->ring) + offset);
+//
+// if (nprot & PROT_EXEC) {
+// RINGMAP_WARN("PROT_EXEC ist set");
+// return (ERESTART);
+// }
+//
+// /* We want to map ring in user-space. offset is not needed! */
+// offset = 0;
+// *paddr = vtophys((rm->ring) + offset);
RINGMAP_FUNC_DEBUG(end);
@@ -301,214 +277,215 @@
int
ringmap_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread *td)
{
- int err = 0, err_sleep;
- struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
- struct ringmap *rm = adapter->rm;
-
- unsigned int *userp = NULL;
-
+ int err = 0, err_sleep = err_sleep;
+// struct adapter *adapter = (struct adapter *)get_adapter_struct(dev);
+// struct ringmap *rm = adapter->rm;
+//
+// unsigned int *userp = NULL;
+//
RINGMAP_FUNC_DEBUG(start);
-
- switch( cmd ){
-
- /* Tell to user number of descriptors */
- case IOCTL_G_DNUM:
- RINGMAP_OUTPUT(IOCTL_G_DNUM);
-
- userp = (unsigned int *)(*(unsigned int *)data);
- if (userp == NULL){
- RINGMAP_ERROR(NULL pointer by ioctl IOCTL_G_DNUM);
- return (EINVAL);
- }
-
- unsigned int dn = (unsigned int)adapter->num_rx_desc;
- copyout(&dn, userp, sizeof(unsigned int));
-
- break;
-
- /* Enable Receive and Interrupts */
- case IOCTL_ENABLE_RECEIVE:
- RINGMAP_IOCTL(IOCTL_ENABLE_RECEIVE);
- RINGMAP_HW_ENABLE_INTR(adapter);
- RINGMAP_HW_ENABLE_RECEIVE(adapter);
- break;
-
- /* Disable Receive and Interrupts */
- case IOCTL_DISABLE_RECEIVE:
- RINGMAP_IOCTL(IOCTL_DISABLE_RECEIVE);
- RINGMAP_HW_DISABLE_INTR(adapter);
- RINGMAP_HW_DISABLE_RECEIVE(adapter);
- break;
-
- /* Disable Flow Control */
- case IOCTL_DISABLE_FLOWCNTR:
- RINGMAP_IOCTL(IOCTL_DISABLE_FLOWCNTR);
- RINGMAP_HW_DISABLE_FLOWCONTR(adapter);
- break;
-
- /* Sleep and wait for new frames */
- case IOCTL_SLEEP_WAIT:
- rm->ring->user_wait_kern++;
- RINGMAP_HW_SYNC_TAIL(adapter);
- err_sleep = tsleep(rm, (PRI_MIN) | PCATCH, "ioctl", hz);
- break;
-
- /* Synchronize sowftware ring-tail with hardware-ring-tail (RDT) */
- case IOCTL_SET_RDT:
- SET_RDT(adapter);
- break;
-
- default:
- RINGMAP_ERROR("Undefined command!");
- return (ENODEV);
- }
+//
+// switch( cmd ){
+//
+// /* Tell to user number of descriptors */
+// case IOCTL_G_DNUM:
+// RINGMAP_OUTPUT(IOCTL_G_DNUM);
+//
+// userp = (unsigned int *)(*(unsigned int *)data);
+// if (userp == NULL){
+// RINGMAP_ERROR(NULL pointer by ioctl IOCTL_G_DNUM);
+// return (EINVAL);
+// }
+//
+// unsigned int dn = (unsigned int)adapter->num_rx_desc;
+// copyout(&dn, userp, sizeof(unsigned int));
+//
+// break;
+//
+// /* Enable Receive and Interrupts */
+// case IOCTL_ENABLE_RECEIVE:
+// RINGMAP_IOCTL(IOCTL_ENABLE_RECEIVE);
+// RINGMAP_HW_ENABLE_INTR(adapter);
+// RINGMAP_HW_ENABLE_RECEIVE(adapter);
+// break;
+//
+// /* Disable Receive and Interrupts */
+// case IOCTL_DISABLE_RECEIVE:
+// RINGMAP_IOCTL(IOCTL_DISABLE_RECEIVE);
+// RINGMAP_HW_DISABLE_INTR(adapter);
+// RINGMAP_HW_DISABLE_RECEIVE(adapter);
+// break;
+//
+// /* Disable Flow Control */
+// case IOCTL_DISABLE_FLOWCNTR:
+// RINGMAP_IOCTL(IOCTL_DISABLE_FLOWCNTR);
+// RINGMAP_HW_DISABLE_FLOWCONTR(adapter);
+// break;
+//
+// /* Sleep and wait for new frames */
+// case IOCTL_SLEEP_WAIT:
+// rm->ring->user_wait_kern++;
+// RINGMAP_HW_SYNC_TAIL(adapter);
+// err_sleep = tsleep(rm, (PRI_MIN) | PCATCH, "ioctl", hz);
+// break;
+//
+// /* Synchronize sowftware ring-tail with hardware-ring-tail (RDT) */
+// case IOCTL_SET_RDT:
+// SET_RDT(adapter);
+// break;
+//
+// default:
+// RINGMAP_ERROR("Undefined command!");
+// return (ENODEV);
+// }
RINGMAP_FUNC_DEBUG(end);
return (err);
}
-void
-ringmap_handle_que(void *context, int pending)
-{
- struct adapter *adapter = context;
- struct ringmap *rm = adapter->rm;
- struct ifnet *ifp = adapter->ifp;
- struct tx_ring *txr = adapter->tx_rings;
- struct rx_ring *rxr = adapter->rx_rings;
- bool more_rx;
-
-#if (INTR_DEB)
- printf("########################################################################\n");
-#endif
-
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
- more_rx = em_rxeof(rxr, adapter->rx_process_limit);
-
- EM_TX_LOCK(txr);
- em_txeof(txr);
-#ifdef EM_MULTIQUEUE
- if (!drbr_empty(ifp, txr->br))
- em_mq_start_locked(ifp, txr, NULL);
-#else
- if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
- em_start_locked(ifp, txr);
-#endif
- EM_TX_UNLOCK(txr);
- if (more_rx) {
- taskqueue_enqueue(adapter->tq, &adapter->que_task);
- return;
- }
- }
-
-#if (INTR_DEB)
- printf("########################################################################\n");
-#endif
-
- RINGMAP_HW_ENABLE_INTR(adapter);
-
- if (rm->procp != NULL) {
- wakeup(rm);
- }
-
- return;
-}
-
-#if (__DRIVER_VERSION == 696)
-void
-ringmap_handle_rxtx(void *context, int pending)
-{
- struct adapter *adapter = context;
- struct ifnet *ifp = adapter->ifp;
- struct ringmap *rm = adapter->rm;
-
-#if (INTR_DEB)
- printf("########################################################################\n");
-#endif
-
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-#ifdef __E1000_RINGMAP__
- if (em_rxeof(adapter, adapter->rx_process_limit) != 0)
- taskqueue_enqueue(adapter->tq, &adapter->rxtx_task);
-#endif
- }
-
-#if (INTR_DEB)
- printf("########################################################################\n\n");
-#endif
-
- RINGMAP_HW_ENABLE_INTR(adapter);
-
- if (rm->procp != NULL) {
- wakeup(rm);
- }
-}
-#endif
-
-struct adapter*
-get_adapter_struct(struct cdev *dev)
-{
- struct adapter *adapter;
-
- adapter = RINGMAP_GET_ADAPTER_STRUCT(adapter);
- return (adapter);
-}
-
-
-void
-ringmap_print_ring (struct adapter *adapter, int level)
-{
- struct ringmap *rm = adapter->rm;
-
- printf("Ring Size = %d \n",rm->ring->size );
- printf("Times Kern wait for User = %llu \n",rm->ring->kern_wait_user);
- printf("Times User wait for Kern = %llu \n",rm->ring->user_wait_kern);
- printf("Interrupts Counter = %llu \n",rm->ring->interrupts_counter);
-
- ringmap_print_ring_pointers(adapter);
-}
-
-
-void
-ringmap_print_slot(struct adapter *adapter, unsigned int slot_number)
-{
- struct ringmap *rm = adapter->rm;
-
- printf("Slot Number: %d \n", slot_number);
- printf("---------------- \n");
-
- printf("[%s] physical addr of descriptor[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].descriptor.phys);
- printf("[%s] kernel addr of descriptor[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].descriptor.kern);
- printf("[%s] physical addr of mbuf[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].mbuf.phys);
- printf("[%s] kernel addr of mbuf[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].mbuf.kern);
- printf("[%s] physical addr of packet_buffer[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].packet.phys);
- printf("[%s] kernel addr of packet_buffer[%d] = 0x%X\n", __func__, slot_number,
- (unsigned int) rm->ring->slot[slot_number].packet.kern);
- printf(" \n");
-}
-
-
-int
-ringmap_print_ring_pointers(struct adapter *adapter)
-{
- unsigned int rdt, rdh;
- struct ringmap *rm = adapter->rm;
-
- rdh = RINGMAP_HW_READ_HEAD(adapter);
- rdt = RINGMAP_HW_READ_TAIL(adapter);
-
- printf("\n +++++++++ RING POINTERS ++++++++++++ \n");
- printf(" + RDH = %d (KERN POINTER)\n", rdh);
- printf(" + RDT = %d (USER POINTER)\n", rdt);
- printf(" +\n");
- printf(" + kernrp = %d \n", rm->ring->kernrp);
- printf(" + userrp = %d \n", rm->ring->userrp);
- printf(" ++++++++++++++++++++++++++++++++++++++ \n\n");
-
- return (0);
-}
+//void
+//ringmap_handle_que(void *context, int pending)
+//{
+// struct adapter *adapter = context;
+// struct ringmap *rm = adapter->rm;
+// struct ifnet *ifp = adapter->ifp;
+// struct tx_ring *txr = adapter->tx_rings;
+// struct rx_ring *rxr = adapter->rx_rings;
+// bool more_rx;
+//
+//#if (INTR_DEB)
+// printf("########################################################################\n");
+//#endif
+//
+// if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+// more_rx = em_rxeof(rxr, adapter->rx_process_limit);
+//
+// EM_TX_LOCK(txr);
+// em_txeof(txr);
+//#ifdef EM_MULTIQUEUE
+// if (!drbr_empty(ifp, txr->br))
+// em_mq_start_locked(ifp, txr, NULL);
+//#else
+// if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+// em_start_locked(ifp, txr);
+//#endif
+// EM_TX_UNLOCK(txr);
+// if (more_rx) {
+// taskqueue_enqueue(adapter->tq, &adapter->que_task);
+// return;
+// }
+// }
+//
+//#if (INTR_DEB)
+// printf("########################################################################\n");
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list