[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