I tried to bind an buffer with len of 62268 to a dma handle, but
unfortunately failed.
ddi_dma_addr_bind_handle returns value: DDI_DMA_TOOBIG. The solaris is
snv_93 x86.

status = ddi_dma_addr_bind_handle(tcb->tx_dma_handle,
NULL,(caddr_t)mp->b_rptr, len,
DDI_DMA_WRITE | DDI_DMA_STREAMING, DDI_DMA_DONTWAIT, 0, &dma_cookie,
&ncookies);

tx_dma_handle is allocated using the following attr.
90 DMA_ATTR_V0, /* version number */
91 0x0000000000000000ull, /* low address */
92 0xFFFFFFFFFFFFFFFFull, /* high address */
93 0x00000000FFFFFFFFull, /* dma counter max */
94 1, /* alignment */
95 0x00000FFF, /* burst sizes */
96 0x00000001, /* minimum transfer size */
97 0x00000000FFFFFFFFull, /* maximum transfer size */
98 0xFFFFFFFFFFFFFFFFull, /* maximum segment size */
99 16, /* scatter/gather list length */
100 0x00000001, /* granularity */
101 DDI_DMA_FLAGERR /* DMA flags */

60+ kB is not a large buffer, and sgl 16 is not small, I do not know
why ddi_dma_addr_bind_handle still fails with DDI_DMA_TOOBIG? Anyone knows
why?

console output:
coding error detected, the driver is using ddi_dma_attr(9S) incorrectly.
There is a small risk of data corruption in particular with large I/Os.
The driver should be replaced with a corrected version for proper system
operation. To disable this warning, add 'set
rootnex:rootnex_bind_warn=0' to /etc/system(4).

The related stack:
0 22495 rootnex_bind_slowpath:entry
rootnex`rootnex_dma_bindhdl+0x29c
genunix`ddi_dma_addr_bind_handle+0x83


Thanks in advance.

_______________________________________________
driver-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to