diff options
Diffstat (limited to 'sys/dev/sym/sym_hipd.c')
-rw-r--r-- | sys/dev/sym/sym_hipd.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c index f3bdc92..547db54 100644 --- a/sys/dev/sym/sym_hipd.c +++ b/sys/dev/sym/sym_hipd.c @@ -373,11 +373,7 @@ static void MDELAY(int ms) { while (ms--) UDELAY(1000); } */ #define MEMO_SHIFT 4 /* 16 bytes minimum memory chunk */ -#ifndef __amd64__ #define MEMO_PAGE_ORDER 0 /* 1 PAGE maximum */ -#else -#define MEMO_PAGE_ORDER 1 /* 2 PAGEs maximum on amd64 */ -#endif #if 0 #define MEMO_FREE_UNUSED /* Free unused pages immediately */ #endif @@ -386,14 +382,8 @@ static void MDELAY(int ms) { while (ms--) UDELAY(1000); } #define MEMO_CLUSTER_SIZE (1UL << MEMO_CLUSTER_SHIFT) #define MEMO_CLUSTER_MASK (MEMO_CLUSTER_SIZE-1) -#ifndef __amd64__ #define get_pages() malloc(MEMO_CLUSTER_SIZE, M_DEVBUF, M_NOWAIT) #define free_pages(p) free((p), M_DEVBUF) -#else -#define get_pages() contigmalloc(MEMO_CLUSTER_SIZE, M_DEVBUF, \ - 0, 0, 1LL << 32, PAGE_SIZE, 1LL << 32) -#define free_pages(p) contigfree((p), MEMO_CLUSTER_SIZE, M_DEVBUF) -#endif typedef u_long m_addr_t; /* Enough bits to bit-hack addresses */ @@ -627,7 +617,7 @@ static m_addr_t ___dma_getp(m_pool_s *mp) BUS_DMA_NOWAIT, &vbp->dmamap)) goto out_err; bus_dmamap_load(mp->dmat, vbp->dmamap, vaddr, - MEMO_CLUSTER_SIZE, getbaddrcb, &baddr, 0); + MEMO_CLUSTER_SIZE, getbaddrcb, &baddr, BUS_DMA_NOWAIT); if (baddr) { int hc = VTOB_HASH_CODE(vaddr); vbp->vaddr = (m_addr_t) vaddr; @@ -687,7 +677,7 @@ static m_pool_s *___cre_dma_pool(bus_dma_tag_t dev_dmat) mp->dev_dmat = dev_dmat; if (!bus_dma_tag_create(dev_dmat, 1, MEMO_CLUSTER_SIZE, BUS_SPACE_MAXADDR_32BIT, - BUS_SPACE_MAXADDR_32BIT, + BUS_SPACE_MAXADDR, NULL, NULL, MEMO_CLUSTER_SIZE, 1, MEMO_CLUSTER_SIZE, 0, busdma_lock_mutex, &Giant, &mp->dmat)) { @@ -1536,7 +1526,11 @@ struct sym_hcb { /* * Target data. */ +#ifdef __amd64__ + struct sym_tcb *target; +#else struct sym_tcb target[SYM_CONF_MAX_TARGET]; +#endif /* * Target control block bus address array used by the SCRIPT @@ -8532,6 +8526,12 @@ sym_pci_attach(device_t dev) np->fw_patch = fw->patch; np->fw_name = fw->name; +#ifdef __amd64__ + np->target = sym_calloc_dma(SYM_CONF_MAX_TARGET * sizeof(*(np->target)), + "TARGET"); + if (!np->target) + goto attach_failed; +#endif /* * Edit its name. */ @@ -8930,6 +8930,11 @@ static void sym_pci_free(hcb_p np) "LUNMP"); #endif } +#ifdef __amd64__ + if (np->target) + sym_mfree_dma(np->target, + SYM_CONF_MAX_TARGET * sizeof(*(np->target)), "TARGET"); +#endif if (np->targtbl) sym_mfree_dma(np->targtbl, 256, "TARGTBL"); if (np->data_dmat) |