BXE: changes sp_state back to a long
[akaros.git] / kern / drivers / net / bxe / bxe.h
index 801f78a..c59fa61 100644 (file)
@@ -39,6 +39,8 @@
 #include <smp.h>
 #include <stdio.h>
 #include <string.h>
+#include <bitmap.h>
+#include <taskqueue.h>
 
 
 /* MACROS for conversion to AKAROS. Might we want this stuff someday? */
@@ -57,20 +59,13 @@ typedef uintptr_t bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
 typedef uintptr_t vm_offset_t;
-typedef qlock_t ECORE_MUTEX_SPIN;
-typedef qlock_t ECORE_MUTEX;
-typedef qlock_t mtx;
 typedef int device_t;
 // WTF ...
 typedef uint64_t uintmax_t;
-#define mtx_lock(x) qlock(x)
-#define mtx_unlock(x) qunlock(x)
 #define MA_OWNED 0
-#define MTX_ASSERT(lock, thing) assert(0)
+#define mtx_assert(lock, thing) assert(1)
 #define device_printf(ignore, format, args...) printk(format, args)
 
-
-
 #if _BYTE_ORDER == _LITTLE_ENDIAN
 #ifndef LITTLE_ENDIAN
 #define LITTLE_ENDIAN
@@ -522,18 +517,17 @@ struct bxe_sw_tpa_info {
 struct bxe_fastpath {
     /* pointer back to parent structure */
     struct bxe_adapter *sc;
-#warning "need to fix up the mtx"
     qlock_t tx_mtx;
     char       tx_mtx_name[32];
     qlock_t rx_mtx;
     char       rx_mtx_name[32];
-#define BXE_FP_TX_LOCK(fp)        mtx_lock(&fp->tx_mtx)
-#define BXE_FP_TX_UNLOCK(fp)      mtx_unlock(&fp->tx_mtx)
-#define BXE_FP_TX_LOCK_ASSERT(fp) assert(0) /*mtx_assert(&fp->tx_mtx, MA_OWNED)*/
+#define BXE_FP_TX_LOCK(fp)        qlock(&fp->tx_mtx)
+#define BXE_FP_TX_UNLOCK(fp)      qunlock(&fp->tx_mtx)
+#define BXE_FP_TX_LOCK_ASSERT(fp) mtx_assert(&fp->tx_mtx, MA_OWNED)
 
-#define BXE_FP_RX_LOCK(fp)        mtx_lock(&fp->rx_mtx)
-#define BXE_FP_RX_UNLOCK(fp)      mtx_unlock(&fp->rx_mtx)
-#define BXE_FP_RX_LOCK_ASSERT(fp) assert(0) /*mtx_assert(&fp->rx_mtx, MA_OWNED)*/
+#define BXE_FP_RX_LOCK(fp)        qlock(&fp->rx_mtx)
+#define BXE_FP_RX_UNLOCK(fp)      qunlock(&fp->rx_mtx)
+#define BXE_FP_RX_LOCK_ASSERT(fp) mtx_assert(&fp->rx_mtx, MA_OWNED)
 
     /* status block */
     struct bxe_dma                 sb_dma;
@@ -605,13 +599,10 @@ struct bxe_fastpath {
     uint8_t index; /* this is also the 'cid' */
 #define FP_IDX(fp) (fp->index)
 
-#warning "no interrupt taskqueue -- whatever that is"
     /* interrupt taskqueue (fast) */
-  /*
     struct task      tq_task;
     struct taskqueue *tq;
     char             tq_name[32];
-  */
 
     /* ethernet client ID (each fastpath set of RX/TX/CQE is a client) */
     uint8_t cl_id;
@@ -699,6 +690,7 @@ struct bxe_fastpath {
 #define FP_SB_MAX_E1x 16
 #define FP_SB_MAX_E2  HC_SB_MAX_SB_E2
 
+#define MAX_CONTEXT 16 /* XXX taken from other fbsd source. */
 union cdu_context {
     struct eth_context eth;
     char pad[1024];
@@ -915,8 +907,6 @@ struct bxe_fw_stats_data {
  * aligned.
  */
 struct bxe_slowpath {
-
-#if 0
     /*
      * The cdu_context array MUST be the first element in this
      * structure. It is used during the leading edge ramrod
@@ -927,7 +917,6 @@ struct bxe_slowpath {
     /* Used as a DMA source for MAC configuration. */
     struct mac_configuration_cmd    mac_config;
     struct mac_configuration_cmd    mcast_config;
-#endif
 
     /* used by the DMAE command executer */
     struct dmae_command dmae[MAX_DMAE_C];
@@ -1030,8 +1019,8 @@ struct bxe_port {
        qlock_t phy_mtx;
        char        phy_mtx_name[32];
 
-#define BXE_PHY_LOCK(sc)          mtx_lock(&sc->port.phy_mtx)
-#define BXE_PHY_UNLOCK(sc)        mtx_unlock(&sc->port.phy_mtx)
+#define BXE_PHY_LOCK(sc)          qlock(&sc->port.phy_mtx)
+#define BXE_PHY_UNLOCK(sc)        qunlock(&sc->port.phy_mtx)
 #define BXE_PHY_LOCK_ASSERT(sc)   mtx_assert(&sc->port.phy_mtx, MA_OWNED)
 
     /*
@@ -1270,8 +1259,7 @@ struct bxe_devinfo {
     uint32_t bc_ver;
     char bc_ver_str[32];
     uint32_t mf_cfg_base; /* bootcode shmem address in BAR memory */
-#warning "bxe_mf_info"
-       struct bxe_mf_info mf_info;
+  struct bxe_mf_info mf_info;
 
     int flash_size;
 #define NVRAM_1MB_SIZE      0x20000
@@ -1319,7 +1307,7 @@ enum {
 };
 
 /* Top level device private data structure. */
-#warning "need to fix up device private"
+
 struct bxe_adapter {
        /*
         * First entry must be a pointer to the BSD ifnet struct which
@@ -1329,6 +1317,19 @@ struct bxe_adapter {
        /* OS defined structs */
        struct net_device *netdev;
        struct pci_device *pcidev;
+       /* commonly used Plan 9 driver struct members. */
+       struct ether                            *edev;
+
+       bool                                            active;
+       void                                            *mmio;
+       spinlock_t                                      imlock;                         /* interrupt mask lock */
+       spinlock_t                                      tlock;                          /* transmit lock */
+       qlock_t                                         slock;                          /* stats */
+       qlock_t                                         alock;                          /* attach */
+       struct rendez                           rrendez;                        /* rproc rendez */
+#define Nstatistics 2
+       unsigned int                            statistics[Nstatistics];
+
        //struct net_device_stats net_stats;
 #warning "no ifmedia. "
        // struct ifmedia  ifmedia; /* network interface media structure */
@@ -1373,16 +1374,14 @@ struct bxe_adapter {
        /* periodic timer callout */
 #define PERIODIC_STOP 0
 #define PERIODIC_GO   1
-       volatile unsigned long periodic_flags;
+       atomic_t periodic_flags;
        //      struct callout         periodic_callout;
        /* chip start/stop/reset taskqueue */
 #define CHIP_TQ_NONE   0
 #define CHIP_TQ_START  1
 #define CHIP_TQ_STOP   2
 #define CHIP_TQ_REINIT 3
-       volatile unsigned long chip_tq_flags;
-#warning "no chip_tq_task or other tasks from here on down"
-#if 0
+       atomic_t chip_tq_flags;
        struct task            chip_tq_task;
        struct taskqueue       *chip_tq;
        char                   chip_tq_name[32];
@@ -1396,7 +1395,6 @@ struct bxe_adapter {
        struct task      rx_mode_tq_task;
        struct taskqueue *rx_mode_tq;
        char             rx_mode_tq_name[32];
-#endif 
        struct bxe_fastpath fp[MAX_RSS_CHAINS];
        struct bxe_sp_objs  sp_objs[MAX_RSS_CHAINS];
        
@@ -1461,30 +1459,30 @@ struct bxe_adapter {
 #define BXE_CORE_UNLOCK(sc)       sx_xunlock(&sc->core_sx)
 #define BXE_CORE_LOCK_ASSERT(sc)  sx_assert(&sc->core_sx, SA_XLOCKED)
 #else
-#define BXE_CORE_TRYLOCK(sc)      mtx_trylock(&sc->core_mtx)
-#define BXE_CORE_LOCK(sc)         mtx_lock(&sc->core_mtx)
-#define BXE_CORE_UNLOCK(sc)       mtx_unlock(&sc->core_mtx)
+#define BXE_CORE_TRYLOCK(sc)      canqlock(&sc->core_mtx)
+#define BXE_CORE_LOCK(sc)         qlock(&sc->core_mtx)
+#define BXE_CORE_UNLOCK(sc)       qunlock(&sc->core_mtx)
 #define BXE_CORE_LOCK_ASSERT(sc)  mtx_assert(&sc->core_mtx, MA_OWNED)
 #endif
 
-#define BXE_SP_LOCK(sc)           mtx_lock(&sc->sp_mtx)
-#define BXE_SP_UNLOCK(sc)         mtx_unlock(&sc->sp_mtx)
+#define BXE_SP_LOCK(sc)           qlock(&sc->sp_mtx)
+#define BXE_SP_UNLOCK(sc)         qunlock(&sc->sp_mtx)
 #define BXE_SP_LOCK_ASSERT(sc)    mtx_assert(&sc->sp_mtx, MA_OWNED)
 
-#define BXE_DMAE_LOCK(sc)         mtx_lock(&sc->dmae_mtx)
-#define BXE_DMAE_UNLOCK(sc)       mtx_unlock(&sc->dmae_mtx)
+#define BXE_DMAE_LOCK(sc)         qlock(&sc->dmae_mtx)
+#define BXE_DMAE_UNLOCK(sc)       qunlock(&sc->dmae_mtx)
 #define BXE_DMAE_LOCK_ASSERT(sc)  mtx_assert(&sc->dmae_mtx, MA_OWNED)
 
-#define BXE_FWMB_LOCK(sc)         mtx_lock(&sc->fwmb_mtx)
-#define BXE_FWMB_UNLOCK(sc)       mtx_unlock(&sc->fwmb_mtx)
+#define BXE_FWMB_LOCK(sc)         qlock(&sc->fwmb_mtx)
+#define BXE_FWMB_UNLOCK(sc)       qunlock(&sc->fwmb_mtx)
 #define BXE_FWMB_LOCK_ASSERT(sc)  mtx_assert(&sc->fwmb_mtx, MA_OWNED)
 
-#define BXE_PRINT_LOCK(sc)        mtx_lock(&sc->print_mtx)
-#define BXE_PRINT_UNLOCK(sc)      mtx_unlock(&sc->print_mtx)
+#define BXE_PRINT_LOCK(sc)        qlock(&sc->print_mtx)
+#define BXE_PRINT_UNLOCK(sc)      qunlock(&sc->print_mtx)
 #define BXE_PRINT_LOCK_ASSERT(sc) mtx_assert(&sc->print_mtx, MA_OWNED)
 
-#define BXE_STATS_LOCK(sc)        mtx_lock(&sc->stats_mtx)
-#define BXE_STATS_UNLOCK(sc)      mtx_unlock(&sc->stats_mtx)
+#define BXE_STATS_LOCK(sc)        qlock(&sc->stats_mtx)
+#define BXE_STATS_UNLOCK(sc)      qunlock(&sc->stats_mtx)
 #define BXE_STATS_LOCK_ASSERT(sc) mtx_assert(&sc->stats_mtx, MA_OWNED)
 
 #warning "find outwhat IF_ADDR_LOCK is"
@@ -1497,8 +1495,6 @@ struct bxe_adapter {
        int dmae_ready;
 #define DMAE_READY(sc) (sc->dmae_ready)
        
-#warning "no credit ppools. "
-
        struct ecore_credit_pool_obj vlans_pool;
        struct ecore_credit_pool_obj macs_pool;
        struct ecore_rx_mode_obj     rx_mode_obj;
@@ -1626,18 +1622,16 @@ struct eth_spe *spq;
 #define MAX_SPQ_PENDING 8
        
        uint16_t       spq_prod_idx;
-#warning "no eth_spe"
        struct eth_spe *spq_prod_bd;
        struct eth_spe *spq_last_bd;
        uint16_t       *dsb_sp_prod;
        uint16_t       *spq_hw_con;
        uint16_t       spq_left;
        
-       volatile unsigned long eq_spq_left; /* COMMON_xxx ramrod credit */
-       volatile unsigned long cq_spq_left; /* ETH_xxx ramrod credit */
+       atomic_t eq_spq_left; /* COMMON_xxx ramrod credit */
+       atomic_t cq_spq_left; /* ETH_xxx ramrod credit */
        
        /* fw decompression buffer */
-#warning "no decmpress buffer"
        struct bxe_dma gz_buf_dma;
        void           *gz_buf;
        //    z_streamp      gz_strm;
@@ -1751,9 +1745,7 @@ struct eth_spe *spq;
        int mtu;
        
        /* LLDP params */
-#if 0
        struct bxe_config_lldp_params lldp_config_params;
-#endif
        /* DCB support on/off */
        int dcb_state;
 #define BXE_DCB_STATE_OFF 0
@@ -2090,8 +2082,8 @@ static const uint32_t dmae_reg_go_c[] = {
 #define BXE_SWCID_SHIFT 17
 #define BXE_SWCID_MASK  ((0x1 << BXE_SWCID_SHIFT) - 1)
 
-#define SW_CID(x)  (le32toh(x) & BXE_SWCID_MASK)
-#define CQE_CMD(x) (le32toh(x) >> COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT)
+#define SW_CID(x)  (le32_to_cpu(x) & BXE_SWCID_MASK)
+#define CQE_CMD(x) (le32_to_cpu(x) >> COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT)
 
 #define CQE_TYPE(cqe_fp_flags)   ((cqe_fp_flags) & ETH_FAST_PATH_RX_CQE_TYPE)
 #define CQE_TYPE_START(cqe_type) ((cqe_type) == RX_ETH_CQE_TYPE_ETH_START_AGG)
@@ -2112,12 +2104,11 @@ static const uint32_t dmae_reg_go_c[] = {
 #define PCI_PM_D0    1
 #define PCI_PM_D3hot 2
 
-int  bxe_test_bit(int nr, volatile unsigned long * addr);
-void bxe_set_bit(unsigned int nr, volatile unsigned long * addr);
-void bxe_clear_bit(int nr, volatile unsigned long * addr);
-int  bxe_test_and_set_bit(int nr, volatile unsigned long * addr);
-int  bxe_test_and_clear_bit(int nr, volatile unsigned long * addr);
-int  bxe_cmpxchg(volatile int *addr, int old, int new);
+#define bxe_test_bit(nr, addr) test_bit(nr, addr)
+#define bxe_set_bit(nr, addr) set_bit(nr, addr)
+#define bxe_clear_bit(nr, addr) clear_bit(nr, addr)
+#define bxe_test_and_set_bit(nr, addr) test_and_set_bit(nr, addr)
+#define bxe_test_and_clear_bit(nr, addr) test_and_clear_bit(nr, addr)
 
 void bxe_reg_wr_ind(struct bxe_adapter *sc, uint32_t addr,
                     uint32_t val);
@@ -2274,6 +2265,9 @@ void bxe_dump_mem(struct bxe_adapter *sc, char *tag,
 void bxe_dump_mbuf_data(struct bxe_adapter *sc, char *pTag,
                         struct mbuf *m, uint8_t contents);
 
+/* Defined in bxe.c, init'd in bxereset or something in bxe_dev.c */
+extern qlock_t bxe_prev_mtx;
+
 /***********/
 /* INLINES */
 /***********/