[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: fxp at pci on arm32 and bus_dmamap_sync()



<200007191359.e6JDxj902648@mirage.ceres.dti.ne.jp>の記事において
私は書きました。

> 探すと i82596 のマニュアルには一応それらしい内容が載っていました。
> ftp://download.intel.co.jp/design/network/datashts/29021906.pdf

これをぱらぱらとながめていたら、 RECEIVE UNIT (RU) のところに
次のような記述がありました。

---
In order to avoid asynchronous race conditions, the following
guidelines are recommended to the 82596 programmer:

o If the RU is already in the Ready state, and a new RFA is
  required to be started, it is unwise to immediately issue
  another RU Start command. If the new RFA needs to be started,
  first issue an RU Suspend command, wait for the RU to become
  Suspended, then issue the new RU Start. This will insure that
  all incoming frames are received correctly.
---

つまり RU_START を発行する前には race condition を避けるために
SUSPEND のコマンドを発行しろというわけですが、いかんせん
i82557 では SUSPEND のコマンドが削除されてしまっています。

#以前のパッチではかわりに ABORT を発行する形になってたわけですが……

あるいは FXP_INIT_RFABUF() で FXP_RFA_CONTROL_S の suspend bit
もたてて最後のバッファまで使ってしまったら自動的に suspend する
ようにすればよい?

--- i82557var.h.orig	Mon Jul 24 21:15:35 2000
+++ i82557var.h	Mon Jul 24 21:16:52 2000
@@ -283,7 +283,8 @@
 	__rfa->size = htole16(FXP_RXBUFSIZE((m)));			\
 	/* BIG_ENDIAN: no need to swap to store 0 */			\
 	__rfa->rfa_status = 0;						\
-	__rfa->rfa_control = htole16(FXP_RFA_CONTROL_EL);		\
+	__rfa->rfa_control =						\
+	    htole16(FXP_RFA_CONTROL_EL|FXP_RFA_CONTROL_S);		\
 	/* BIG_ENDIAN: no need to swap to store 0 */			\
 	__rfa->actual_size = 0;						\
 									\
@@ -306,7 +307,8 @@
 		    BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);	\
 		memcpy((void *)&__p_rfa->link_addr, &__v,		\
 		    sizeof(__v));					\
-		__p_rfa->rfa_control &= htole16(~FXP_RFA_CONTROL_EL);	\
+		__p_rfa->rfa_control &=					\
+		    htole16(~(FXP_RFA_CONTROL_EL|FXP_RFA_CONTROL_S));	\
 		FXP_RFASYNC((sc), __p_m,				\
 		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);		\
 	}								\

いずれにせよやはり i82557 の user manual を探すのが先ですね。
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp