BXE: bus_dma hacks
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 Jan 2015 23:25:09 +0000 (15:25 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:28 +0000 (10:12 -0500)
In lieu of doing anything smart, we just assume all memory is DMA-able.

kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h

index 90412a3..58f574f 100644 (file)
@@ -828,20 +828,22 @@ bxe_dma_alloc(struct bxe_adapter *sc,
               struct bxe_dma   *dma,
               const char       *msg)
 {
-#if 0
-    int rc;
-
     if (dma->size > 0) {
         BLOGE(sc, "dma block '%s' already has size %lu\n", msg,
               (unsigned long)dma->size);
         return (1);
     }
 
-    memset(dma, 0, sizeof(*dma)); /* sanity */
+    memset(dma, 0, sizeof(*dma)); /* sanity, except for size. */
     dma->sc   = sc;
     dma->size = size;
     snprintf(dma->msg, sizeof(dma->msg), "%s", msg);
 
+       /* Akaros style */
+       dma->vaddr = kzmalloc(size, KMALLOC_WAIT);
+       dma->paddr = PADDR(dma->vaddr);
+
+#if 0 /* the BSD way */
     rc = bus_dma_tag_create(sc->parent_dma_tag, /* parent tag */
                             BCM_PAGE_SIZE,      /* alignment */
                             0,                  /* boundary limit */
@@ -895,7 +897,6 @@ void
 bxe_dma_free(struct bxe_adapter *sc,
              struct bxe_dma   *dma)
 {
-#if 0
     if (dma->size > 0) {
 #if 0
         BLOGD(sc, DBG_LOAD,
@@ -906,13 +907,15 @@ bxe_dma_free(struct bxe_adapter *sc,
 
         DBASSERT(sc, (dma->tag != NULL), ("dma tag is NULL"));
 
+               kfree(dma->vaddr);
+               #if 0 /* the BSD way */
         bus_dmamap_sync(dma->tag, dma->map,
                         (BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE));
         bus_dmamap_unload(dma->tag, dma->map);
         bus_dmamem_free(dma->tag, dma->vaddr, dma->map);
         bus_dma_tag_destroy(dma->tag);
+               #endif
     }
-#endif
     memset(dma, 0, sizeof(*dma));
 }
 
@@ -6255,17 +6258,15 @@ bxe_free_mem(struct bxe_adapter *sc)
 {
     int i;
 
-#if 0
     if (!CONFIGURE_NIC_MODE(sc)) {
         /* free searcher T2 table */
-        bxe_dma_free(sc, &sc->t2);
+        bxe_dma_free(sc, sc->t2);
     }
-#endif
 
     for (i = 0; i < L2_ILT_LINES(sc); i++) {
-      //bxe_dma_free(sc, &sc->context[i].vcxt_dma);
-      //sc->context[i].vcxt = NULL;
-      //sc->context[i].size = 0;
+        bxe_dma_free(sc, &sc->context[i].vcxt_dma);
+        sc->context[i].vcxt = NULL;
+        sc->context[i].size = 0;
     }
 
     ecore_ilt_mem_op(sc, ILT_MEMOP_FREE);
@@ -6284,15 +6285,13 @@ bxe_alloc_mem(struct bxe_adapter *sc)
     int allocated;
     int i;
 
-#if 0
     if (!CONFIGURE_NIC_MODE(sc)) {
         /* allocate searcher T2 table */
         if (bxe_dma_alloc(sc, SRC_T2_SZ,
-                          &sc->t2, "searcher t2 table") != 0) {
+                          sc->t2, "searcher t2 table") != 0) {
             return (-1);
         }
     }
-#endif
 
     /*
      * Allocate memory for CDU context:
index f7dd91d..6983530 100644 (file)
@@ -54,7 +54,7 @@ typedef uint64_t ift_counter;
 typedef uintptr_t bus_addr_t;
 typedef uintptr_t bus_size_t;
 typedef uintptr_t bus_space_handle_t;
-typedef uintptr_t bus_dma_tag_t;
+typedef void* bus_dma_tag_t;
 typedef uintptr_t bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
@@ -62,6 +62,12 @@ typedef uintptr_t vm_offset_t;
 typedef int device_t;
 // WTF ...
 typedef uint64_t uintmax_t;
+
+#define bus_dma_tag_create(...) (0)
+#define bus_dma_tag_destroy(...)
+#define bus_dmamap_sync(...)
+#define bus_dmamap_unload(...)
+
 #define MA_OWNED 0
 #define mtx_assert(lock, thing) assert(1)
 #define device_printf(ignore, format, args...) printk(format, args)
@@ -1672,7 +1678,7 @@ struct eth_spe *spq;
         * context size we need 8 ILT entries.
         */
 #define ILT_MAX_L2_LINES 8
-       //    struct hw_context context[ILT_MAX_L2_LINES];
+       struct hw_context context[ILT_MAX_L2_LINES];
        struct ecore_ilt *ilt;
 #define ILT_MAX_LINES 256
        
@@ -2322,7 +2328,6 @@ bxe_igu_ack_sb_gen(struct bxe_adapter *sc,
     REG_WR(sc, igu_addr, cmd_data.sb_id_and_flags);
 
     /* Make sure that ACK is written */
-#warning "bus space barrier write"
     //    bus_space_barrier(sc->bar[0].tag, sc->bar[0].handle, 0, 0,
     //                BUS_SPACE_BARRIER_WRITE);
     mb();