OSDN Git Service

(none)
authorryuz <ryuz>
Sun, 16 Dec 2007 04:12:25 +0000 (04:12 +0000)
committerryuz <ryuz>
Sun, 16 Dec 2007 04:12:25 +0000 (04:12 +0000)
aplfw/build/common/gmake/aplfwdep.inc
aplfw/build/common/gmake/aplfwsrc.inc
aplfw/build/common/nmake/aplfwdep.inc
aplfw/build/common/nmake/aplfwsrc.inc
aplfw/build/common/tmp_mkinc/mk_inc.pl
aplfw/driver/ether/lan9118/lan9118drv_getmacaddress.c
aplfw/driver/ether/lan9118/lan9118drv_local.h
aplfw/driver/ether/lan9118/lan9118drv_open.c
aplfw/driver/ether/lan9118/lan9118drv_read.c
aplfw/sample/arm/utb_arm7at91/boot_task.c

index 8f1af32..9e495c1 100755 (executable)
@@ -204,6 +204,11 @@ $(OBJS_DIR)/lan9118drv_read.$(EXT_OBJ):    $(LAN9118_DIR)/lan9118drv_read.c        $(COMMO
 $(OBJS_DIR)/lan9118drv_write.$(EXT_OBJ):       $(LAN9118_DIR)/lan9118drv_write.c       $(COMMON_HEADERS)
 $(OBJS_DIR)/lan9118drv_flush.$(EXT_OBJ):       $(LAN9118_DIR)/lan9118drv_flush.c       $(COMMON_HEADERS)
 $(OBJS_DIR)/lan9118drv_isr.$(EXT_OBJ): $(LAN9118_DIR)/lan9118drv_isr.c $(COMMON_HEADERS)
+$(OBJS_DIR)/lan9118drv_getmacaddress.$(EXT_OBJ):       $(LAN9118_DIR)/lan9118drv_getmacaddress.c       $(COMMON_HEADERS)
+$(OBJS_DIR)/lan9118drv_csrregread.$(EXT_OBJ):  $(LAN9118_DIR)/lan9118drv_csrregread.c  $(COMMON_HEADERS)
+$(OBJS_DIR)/lan9118drv_csrregwrite.$(EXT_OBJ): $(LAN9118_DIR)/lan9118drv_csrregwrite.c $(COMMON_HEADERS)
+$(OBJS_DIR)/lan9118drv_phyregread.$(EXT_OBJ):  $(LAN9118_DIR)/lan9118drv_phyregread.c  $(COMMON_HEADERS)
+$(OBJS_DIR)/lan9118drv_phyregwrite.$(EXT_OBJ): $(LAN9118_DIR)/lan9118drv_phyregwrite.c $(COMMON_HEADERS)
 $(OBJS_DIR)/pc16550drv_create.$(EXT_OBJ):      $(PC16550_DIR)/pc16550drv_create.c      $(COMMON_HEADERS)
 $(OBJS_DIR)/pc16550drv_delete.$(EXT_OBJ):      $(PC16550_DIR)/pc16550drv_delete.c      $(COMMON_HEADERS)
 $(OBJS_DIR)/pc16550drv_open.$(EXT_OBJ):        $(PC16550_DIR)/pc16550drv_open.c        $(COMMON_HEADERS)
index 278d645..f528eda 100755 (executable)
@@ -439,6 +439,11 @@ CSRCS += $(LAN9118_DIR)/lan9118drv_read.c
 CSRCS += $(LAN9118_DIR)/lan9118drv_write.c
 CSRCS += $(LAN9118_DIR)/lan9118drv_flush.c
 CSRCS += $(LAN9118_DIR)/lan9118drv_isr.c
+CSRCS += $(LAN9118_DIR)/lan9118drv_getmacaddress.c
+CSRCS += $(LAN9118_DIR)/lan9118drv_csrregread.c
+CSRCS += $(LAN9118_DIR)/lan9118drv_csrregwrite.c
+CSRCS += $(LAN9118_DIR)/lan9118drv_phyregread.c
+CSRCS += $(LAN9118_DIR)/lan9118drv_phyregwrite.c
 endif
 
 
index 253221e..dc66002 100755 (executable)
@@ -277,6 +277,11 @@ $(OBJS_DIR)\lan9118drv_read.$(EXT_OBJ):    $(OBJS_DIR)\lan9118drv_read.c   $(COMMON_H
 $(OBJS_DIR)\lan9118drv_write.$(EXT_OBJ):       $(OBJS_DIR)\lan9118drv_write.c  $(COMMON_HEADERS)
 $(OBJS_DIR)\lan9118drv_flush.$(EXT_OBJ):       $(OBJS_DIR)\lan9118drv_flush.c  $(COMMON_HEADERS)
 $(OBJS_DIR)\lan9118drv_isr.$(EXT_OBJ): $(OBJS_DIR)\lan9118drv_isr.c    $(COMMON_HEADERS)
+$(OBJS_DIR)\lan9118drv_getmacaddress.$(EXT_OBJ):       $(OBJS_DIR)\lan9118drv_getmacaddress.c  $(COMMON_HEADERS)
+$(OBJS_DIR)\lan9118drv_csrregread.$(EXT_OBJ):  $(OBJS_DIR)\lan9118drv_csrregread.c     $(COMMON_HEADERS)
+$(OBJS_DIR)\lan9118drv_csrregwrite.$(EXT_OBJ): $(OBJS_DIR)\lan9118drv_csrregwrite.c    $(COMMON_HEADERS)
+$(OBJS_DIR)\lan9118drv_phyregread.$(EXT_OBJ):  $(OBJS_DIR)\lan9118drv_phyregread.c     $(COMMON_HEADERS)
+$(OBJS_DIR)\lan9118drv_phyregwrite.$(EXT_OBJ): $(OBJS_DIR)\lan9118drv_phyregwrite.c    $(COMMON_HEADERS)
 
 $(OBJS_DIR)\pc16550drv_create.$(EXT_OBJ):      $(OBJS_DIR)\pc16550drv_create.c $(COMMON_HEADERS)
 $(OBJS_DIR)\pc16550drv_delete.$(EXT_OBJ):      $(OBJS_DIR)\pc16550drv_delete.c $(COMMON_HEADERS)
index a7f134c..bbb5ea6 100755 (executable)
@@ -647,6 +647,16 @@ CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_flush.c
 OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_flush.$(EXT_OBJ)
 CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_isr.c
 OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_isr.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_getmacaddress.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_getmacaddress.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_csrregread.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_csrregread.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_csrregwrite.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_csrregwrite.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_phyregread.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_phyregread.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(LAN9118_DIR)\lan9118drv_phyregwrite.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\lan9118drv_phyregwrite.$(EXT_OBJ)
 
 
 # 16550A
index ed171e4..bfb0792 100755 (executable)
                        "lan9118drv_write.c",
                        "lan9118drv_flush.c",
                        "lan9118drv_isr.c",
+                       "lan9118drv_getmacaddress.c",
+                       "lan9118drv_csrregread.c",
+                       "lan9118drv_csrregwrite.c",
+                       "lan9118drv_phyregread.c",
+                       "lan9118drv_phyregwrite.c",
                ],
                [
                        "16550A",
index 78065bb..7ba574c 100755 (executable)
@@ -23,12 +23,12 @@ void Lan9118Drv_GetMacAddress(C_LAN9118DRV *self, unsigned char ubAddr[6])
        ulLow = Lan9118Drv_CsrRegRead(self, 3);
        
        /* 格納 */
-       ubAddr[0] = ((ulHi  >>  8) & 0xff);
-       ubAddr[1] = ((ulHi  >>  0) & 0xff);
-       ubAddr[2] = ((ulLow >> 24) & 0xff);
-       ubAddr[3] = ((ulLow >> 16) & 0xff);
-       ubAddr[4] = ((ulLow >>  8) & 0xff);
-       ubAddr[5] = ((ulLow >>  0) & 0xff);
+       ubAddr[0] = ((ulLow >>  0) & 0xff);
+       ubAddr[1] = ((ulLow >>  8) & 0xff);
+       ubAddr[2] = ((ulLow >> 16) & 0xff);
+       ubAddr[3] = ((ulLow >> 24) & 0xff);
+       ubAddr[4] = ((ulHi  >>  0) & 0xff);
+       ubAddr[5] = ((ulHi  >>  8) & 0xff);
 }
 
 
index dcd04bc..6dc13d9 100755 (executable)
 
 #include "lan9118drv.h"
 
+#define LAN9118_RX_DATA_FIFO   0x00
+#define LAN9118_TX_DATA_FIFO   0x20
+#define LAN9118_RX_STATUS_FIFO 0x40
+#define LAN9118_TX_STATUS_FIFO 0x48
 
 #define LAN9118_ID_REV                 0x50
 #define LAN9118_IRQ_CFG                        0x54
@@ -56,6 +60,7 @@
 
 
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
index ad78432..8877920 100755 (executable)
@@ -17,6 +17,7 @@ HANDLE Lan9118Drv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
 {
        C_LAN9118DRV    *self;
        C_CHRFILE               *pFile;
+       unsigned short  uhStatus;
        int                             i;
        
        /* upper cast */
@@ -67,8 +68,24 @@ HANDLE Lan9118Drv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
                Lan9118Drv_PhyRegWrite(self, 0, 0x1200);        /* ネゴシエーション開始 */
                SysTim_Wait(3000);
                
-       /*      Lan9118Drv_PhyRegRead();        */
+               /* ゴシエーション完了チェック */
+               if ( !(Lan9118Drv_PhyRegRead(self, 1) & 0x0020) )
+               {
+                       return HANDLE_NULL;
+               }
                
+               uhStatus = Lan9118Drv_PhyRegRead(self, 31) & 0x00ff;
+
+               if ( ((uhStatus & 0x0058) == 0x0058) || ((uhStatus & 0x0048) == 0x0048))
+               {
+                       /* Full Duplex */
+                       Lan9118Drv_CsrRegWrite(self, 1, Lan9118Drv_CsrRegRead(self, 1) | 0x00900000 );
+               }
+               else
+               {
+                       /* Half Duplex */
+                       Lan9118Drv_CsrRegWrite(self, 1, Lan9118Drv_CsrRegRead(self, 1) & ~0x00100000 );
+               }
                
                SysInt_Enable(self->iIntNum);
        }
@@ -87,4 +104,5 @@ HANDLE Lan9118Drv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
 }
 
 
+
 /* end of file */
index 33fb672..22400ba 100755 (executable)
@@ -18,8 +18,10 @@ FILE_SIZE Lan9118Drv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FI
        C_LAN9118DRV    *self;
        C_CHRFILE               *pFile;
        unsigned char   *pubBuf;
+       unsigned long   uwData;
+       int                             iSize;
        FILE_SIZE               i;
-       int                             c;
+       
        
        /* upper cast */
        self  = (C_LAN9118DRV *)pDrvObj;
@@ -30,10 +32,51 @@ FILE_SIZE Lan9118Drv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FI
        /* クリティカルセクションに入る */
        SysMtx_Lock(self->hMtxRecv);
        
+       /* 受信チェック */
+       if ( !(Lan9118Drv_RegRead(self, LAN9118_INT_STS) & 0x00000008) )
+       {
+               /* ブロッキングなら受信イベントを待つ */
+               SysMtx_Unlock(self->hMtxRecv);
+               if ( ChrDrv_WaitReadSignal(&self->ChrDrv, pFile) != FILE_ERR_OK )
+               {
+                       return 0;
+               }
+               SysMtx_Lock(self->hMtxRecv);
+       }
+       
+       /* 受信サイズ取得 */
+       uwData = Lan9118Drv_RegRead(self, LAN9118_RX_STATUS_FIFO);
+       iSize  = (uwData >> 16);
+       
+       /* 受信エラーチェック */
+       if ( uwData & 0x00008000 )
+       {
+               Lan9118Drv_RegWrite(self, LAN9118_RX_DP_CTL, 0x80000000);
+               while ( (Lan9118Drv_RegRead(self, LAN9118_RX_DP_CTL) & 0x80000000) != 0 )
+                       ;
+
+               SysMtx_Unlock(self->hMtxRecv);  /* クリティカルセクションを出る */
+               return 0;
+       }
+       
+       /* データ受信 */
+       for( i = 0; i < (iSize + 5) / 4; i++ )
+       {
+               uwData = Lan9118Drv_RegRead(self, LAN9118_RX_DATA_FIFO);
+               
+               *pubBuf++ = ((uwData >>  0) & 0xff);
+               *pubBuf++ = ((uwData >>  8) & 0xff);
+               *pubBuf++ = ((uwData >> 16) & 0xff);
+               *pubBuf++ = ((uwData >> 24) & 0xff);
+       }
+       
+       /* 受信ステータス割込み要因をクリア */
+       Lan9118Drv_RegWrite(self, LAN9118_INT_STS, 0x00000008);
+       
        /* クリティカルセクションを出る */
        SysMtx_Unlock(self->hMtxRecv);
-
-       return i;
+       
+       return iSize;
 }
 
 
index 83c2c5b..4b594d9 100755 (executable)
@@ -80,7 +80,7 @@ void Boot_Task(VP_INT exinf)
        /*   デバイスドライバ    */
        /*************************/
        
-#if 0
+#if 1
        /* LAN9118デバドラ生成 (/dev/eth0 に登録) */
        Lan9118Drv_Create(&g_Lan9118Drv[0], (void *)0x40000000, 24);
        File_AddDevice("eth0", (C_DRVOBJ *)&g_Lan9118Drv[0]);