Date: Sat, 17 Jul 2010 13:23:18 GMT From: Alexandre Fiveg <afiveg@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 181088 for review Message-ID: <201007171323.o6HDNI71057917@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@181088?ac=10 Change 181088 by afiveg@ringmap-2 on 2010/07/17 13:22:33 Dummy functions for access to 8259x chips added. Currently they do nothing. Affected files ... .. //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#20 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.c#3 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.h#2 edit .. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_8259.h#1 add .. //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_ixgbe.c#2 edit .. //depot/projects/soc2010/ringmap/current/sys/i386/conf/I686RINGMAP_CURRENT#3 edit Differences ... ==== //depot/projects/soc2010/ringmap/current/sys/dev/e1000/if_lem.h#20 (text+ko) ==== @@ -223,7 +223,7 @@ #define EM_MSIX_BAR 3 /* On 82575 */ /* Defines for printing debug information */ -#define DEBUG_INIT 1 +#define DEBUG_INIT 0 #define DEBUG_IOCTL 0 #define DEBUG_HW 0 ==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.c#3 (text+ko) ==== @@ -136,9 +136,13 @@ static void ixgbe_free_receive_structures(struct adapter *); static void ixgbe_free_receive_buffers(struct rx_ring *); static void ixgbe_setup_hw_rsc(struct rx_ring *); - +#ifndef RINGMAP static void ixgbe_enable_intr(struct adapter *); static void ixgbe_disable_intr(struct adapter *); +#else +void ixgbe_enable_intr(struct adapter *); +void ixgbe_disable_intr(struct adapter *); +#endif static void ixgbe_update_stats_counters(struct adapter *); static bool ixgbe_txeof(struct tx_ring *); static bool ixgbe_rxeof(struct ix_queue *, int); @@ -211,7 +215,11 @@ "ix", ixgbe_methods, sizeof(struct adapter), }; -static devclass_t ixgbe_devclass; +#ifndef RINGMAP +static +#endif +devclass_t ixgbe_devclass; + DRIVER_MODULE(ixgbe, pci, ixgbe_driver, ixgbe_devclass, 0, 0); MODULE_DEPEND(ixgbe, pci, 1, 1, 1); @@ -322,6 +330,10 @@ static int fdir_pballoc = 1; #endif +#ifdef RINGMAP +#include <net/ringmap.h> +#endif + /********************************************************************* * Device identification routine * @@ -4425,7 +4437,10 @@ } } -static void +#ifndef RINGMAP +static +#endif +void ixgbe_enable_intr(struct adapter *adapter) { struct ixgbe_hw *hw = &adapter->hw; @@ -4471,7 +4486,10 @@ return; } -static void +#ifndef RINGMAP +static +#endif +void ixgbe_disable_intr(struct adapter *adapter) { if (adapter->msix_mem) ==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ixgbe.h#2 (text+ko) ==== @@ -432,6 +432,10 @@ unsigned long link_irq; struct ixgbe_hw_stats stats; + +#ifdef RINGMAP + struct ringmap *rm; +#endif }; /* Precision Time Sync (IEEE 1588) defines */ ==== //depot/projects/soc2010/ringmap/current/sys/dev/ixgbe/ringmap_ixgbe.c#2 (text+ko) ==== @@ -1,0 +1,273 @@ +#include <sys/param.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/conf.h> +#include <sys/queue.h> +#include <sys/taskqueue.h> + +#include <machine/bus.h> + +#include <net/if.h> +#include <net/if_var.h> +#include <net/if_types.h> +#include <net/if_media.h> + +#include <net/ringmap.h> + +#include "ixgbe_api.h" +#include "ixgbe.h" +#include "ringmap_8259.h" + +int rm_8259_set_ringmap_to_adapter(device_t, struct ringmap *); +struct ringmap * rm_8259_get_ringmap_p(device_t); +device_t rm_8259_get_device_p(struct cdev *); +void rm_8259_enable_intr(device_t); +void rm_8259_disable_intr(device_t); +int rm_8259_set_slot(struct ring *, device_t, unsigned int); +void rm_8259_interrupt(void *); +void rm_8259_delayed_interrupt(void *); +int rm_8259_print_ring_pointers(struct adapter *); +void rm_8259_sync_head_tail(device_t); +void rm_8259_sync_tail(device_t); +void rm_8259_sync_head(device_t); +void rm_8259_delayed_interrupt_per_packet(device_t, int); + +extern devclass_t ixgbe_devclass; +extern void ixgbe_enable_intr(struct adapter *); +extern void ixgbe_disable_intr(struct adapter *); +extern void ringmap_print_slot(struct ring *, unsigned int); +extern void print_capt_obj(struct capt_object *); + + +struct ringmap_functions ringmap_f = { + rm_8259_set_ringmap_to_adapter, + rm_8259_enable_intr, + rm_8259_disable_intr, + rm_8259_interrupt, + rm_8259_delayed_interrupt, + rm_8259_delayed_interrupt_per_packet, + rm_8259_sync_head_tail, + rm_8259_sync_tail, + rm_8259_sync_head, + rm_8259_set_slot, + rm_8259_get_ringmap_p, + rm_8259_get_device_p +}; + + +/* + * This function synchronize the tail and head hardware registers + * with head and tail software varibles, that are visible from + * software process. + * + * Synchronisation rules: + * 1. SYNC_HEAD: ring->kernrp = RDH + * 2. SYNC_TAIL: RDT = ring->userrp + */ +void +rm_8259_sync_head_tail(device_t dev) +{ + rm_8259_sync_tail(dev); + rm_8259_sync_head(dev); +} + + +void +rm_8259_sync_tail(device_t dev) +{ + struct adapter *adapter; + adapter = (struct adapter *)device_get_softc(dev); + + RINGMAP_FUNC_DEBUG(start); + + + RINGMAP_FUNC_DEBUG(end); +} + + +void +rm_8259_sync_head(device_t dev) +{ + struct adapter *adapter; + + RINGMAP_FUNC_DEBUG(start); + + adapter = (struct adapter *)device_get_softc(dev); + + RINGMAP_LOCK(adapter->rm); + + RINGMAP_UNLOCK(adapter->rm); + + RINGMAP_FUNC_DEBUG(end); +} + + +/* + * This should be called from ISR. Other interrupts are disallowed! + * It means the functions must be as small as possible + */ +void +rm_8259_interrupt(void *arg) +{ + struct adapter *adapter = (struct adapter *) arg; + + /* count interrupts only if there is capturing object */ + if ( adapter->rm->open_cnt > 0 ) + adapter->rm->interrupts_counter++; +} + + +void +rm_8259_delayed_interrupt(void *context) +{ + struct adapter *adapter = (struct adapter *)context; + struct timeval last_ts; + + RINGMAP_INTR(start); + RINGMAP_LOCK(adapter->rm); + + getmicrotime(&last_ts); + rm_8259_sync_tail(adapter->dev); + + + RINGMAP_UNLOCK(adapter->rm); + RINGMAP_INTR(end); +} + + +void +rm_8259_delayed_interrupt_per_packet(device_t dev, int slot_num) +{ + struct adapter *adapter = NULL; + struct ringmap *rm = NULL; + + adapter = (struct adapter *)device_get_softc(dev); + rm = adapter->rm; + + RINGMAP_INTR(start); + + RINGMAP_LOCK(rm); + + RINGMAP_UNLOCK(rm); + + RINGMAP_INTR(end); +} + + +int +rm_8259_set_slot(struct ring *ring, device_t dev, unsigned int slot_num) +{ + struct adapter *adapter = NULL; + adapter = (struct adapter *)device_get_softc(dev); + +#if (__RINGMAP_DEB) + printf("[%s] Set slot: %d\n", __func__, slot_num); +#endif + + + return (0); + +} + + +/* + * Disable interrupts on adapter + */ +void +rm_8259_disable_intr(device_t dev) +{ + + struct adapter *adapter; + adapter = (struct adapter *)device_get_softc(dev); + + /*Use function implemeted in native (em) driver */ + ixgbe_disable_intr(adapter); +} + + +/* + * Enable interrupts on adapter + */ +void +rm_8259_enable_intr(device_t dev) +{ + + struct adapter *adapter; + adapter = (struct adapter *)device_get_softc(dev); + + /*Use function implemeted in native (em) driver */ + ixgbe_enable_intr(adapter); +} + + +/* + * Get pointer to device structure of adapter using our ringmap char device. + * This is a trick. Our cdev must have the same unit number as dev of adapter. + * Look in ringmap.c: ringmap_attach() where we create our cdev. + */ +device_t +rm_8259_get_device_p(struct cdev *cdev) +{ + struct adapter *adapter; + + adapter = (struct adapter *)devclass_get_softc(ixgbe_devclass, dev2unit(cdev)); +#if (__RINGMAP_DEB) + if (adapter == NULL){ + RINGMAP_WARN(Can not get pointer to adapter structure); + } +#endif + + return (adapter->dev); +} + + +/* + * Set pointer to ringmap in the adapter structure. + */ +int +rm_8259_set_ringmap_to_adapter(device_t dev, struct ringmap *rm) +{ + struct adapter *adapter; + + adapter = (struct adapter *)device_get_softc(dev); + adapter->rm = rm; + + return (0); +} + + +/* + * Returns pointer to ringmap structure + */ +struct ringmap * +rm_8259_get_ringmap_p(device_t dev) +{ + struct adapter *adapter; + + adapter = (struct adapter *)device_get_softc(dev); + return (adapter->rm); +} + + +int +rm_8259_print_ring_pointers(struct adapter *adapter) +{ + unsigned int rdt, rdh; + struct ringmap *rm = NULL; + + rm = adapter->rm; + + if (rm == NULL) + goto out; + + rdh = 0; + rdt = 0; + + printf("\n== +++++++++ RING POINTERS ++++++++++++ \n"); + printf("== + HW HEAD = %d (KERN POINTER)\n", rdh); + printf("== + HW TAIL = %d (USER POINTER)\n", rdt); + printf("== ++++++++++++++++++++++++++++++++++++++ \n\n"); + +out: + return (0); +} ==== //depot/projects/soc2010/ringmap/current/sys/i386/conf/I686RINGMAP_CURRENT#3 (text+ko) ==== @@ -36,12 +36,10 @@ options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed -options RINGMAP - options SCHED_ULE # ULE scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking -#options INET6 # IPv6 communications protocols +options INET6 # IPv6 communications protocols options SCTP # Stream Control Transmission Protocol options FFS # Berkeley Fast Filesystem options SOFTUPDATES # Enable FFS soft updates support @@ -61,7 +59,7 @@ options GEOM_LABEL # Provides labelization #options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty) #options COMPAT_FREEBSD4 # Compatible with FreeBSD4 -#options COMPAT_FREEBSD5 # Compatible with FreeBSD5 +options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 options COMPAT_FREEBSD7 # Compatible with FreeBSD7 options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI @@ -232,7 +230,7 @@ #device fxp # Intel EtherExpress PRO/100B (82557, 82558) #device jme # JMicron JMC250 Gigabit/JMC260 Fast Ethernet #device lge # Level 1 LXT1001 gigabit Ethernet -device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet +#device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet #device nfe # nVidia nForce MCP on-board Ethernet #device nge # NatSemi DP83820 gigabit Ethernet ##device nve # nVidia nForce MCP on-board Ethernet Networking
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007171323.o6HDNI71057917>