[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
mbuf allocation and data alignment
筒井です。
通常 kernel 内で MGETHDR() + MCLGET() で mbuf を確保すると
m_data のアドレスは MCLBYTES (==2048byte) 境界に取られると
思うんですが、これを 4kbyte 境界に来るように mbuf を確保する
方法ってないもんでしょうか?
O2 の内蔵 Ethernet のドライバをへろへろと書いているのですが、
こいつの受信の DMA の際には受信バッファのアドレスが
4kbyte 境界にないといけないという制限があるようなんです。
現状はあきらめて bus_dmamem_alloc() で固定バッファを取って
そこに DMA してから受信割り込みルーチンで別の mbuf を確保して
memcpy() してるのですが、せっかく書いた direct DMA のコードを
捨てるのがもったいなくて……
現状のドライバは
http://www.ceres.dti.ne.jp/~tsutsui/netbsd/if_mec-20040709.tar.gz
に置いてあります。一応それなりに動いているようなので
これはこれでそのうち commit します。
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp