2 * Hyper Operating System Application Framework
5 * @brief %jp{LAN9000シリーズ用ハードウェアアクセス層}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #include "system/sysapi/sysapi.h"
13 #include "lan9000hal_local.h"
17 int Lan9000Hal_Send(C_LAN9000HAL *self, const void *pData, int iSize)
19 unsigned short uhData;
20 unsigned char *pubData;
23 pubData = (unsigned char *)pData;
26 /* バッファ割り当て未完了ならリターン */
27 if ( !(LAN9000HAL_REG_READ(self, LAN9000HAL_B2_INTERRUPT) & LAN9000HAL_ISTATUS_ALLOCINT) )
32 /* Write allocated packet number, setup the write pointer */
33 uhData = LAN9000HAL_REG_READ(self, LAN9000HAL_B2_PNR) & 0x3f;
34 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_PNR, uhData << 8);
35 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_POINTER, 0x4000);
37 /* Write the packet buffer Status word/Byte count (Status + Byte count + pktsize + Control) */
38 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_DATA1, 0x0000);
39 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_DATA1, ((iSize+6) & ~1));
41 /* Write the packet buffer Address/Size/Data */
42 for ( i= 0; i < iSize / 2; i++ )
45 uhData |= (*pubData++) << 8;
46 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_DATA1, uhData);
58 /* Write Control word (Even data, No CRC) */
59 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_DATA1, uhData);
61 /* Queue the packet */
62 LAN9000HAL_REG_WRITE(self, LAN9000HAL_BANK, 2);
63 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_MMU_COMMAND, 0x00c0);
66 LAN9000HAL_REG_WRITE(self, LAN9000HAL_BANK, 2);
67 LAN9000HAL_REG_WRITE(self, LAN9000HAL_B2_MMU_COMMAND, 0x0020);