OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / driver / ether / lan9000 / lan9000hal_mii.c
1 /**
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  lan9000hal.h
5  * @brief %jp{LAN9000シリーズ用ハードウェアアクセス層}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include "system/sysapi/sysapi.h"
13 #include "lan9000hal_local.h"
14
15
16 /* MIIに0を書き込む */
17 void Lan9000Hal_Mii0(C_LAN9000HAL *self)
18 {
19         unsigned short uhMask;
20         
21         uhMask = LAN9000HAL_REG_READ(self, LAN9000HAL_B3_MGMT) & 0xfff0;
22         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x0008);
23         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x000c);
24         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x0008);        
25 }
26
27 /* MIIに1を書き込む */
28 void Lan9000Hal_Mii1(C_LAN9000HAL *self)
29 {
30         unsigned short uhMask;
31         
32         uhMask = LAN9000HAL_REG_READ(self, LAN9000HAL_B3_MGMT) & 0xfff0;
33         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x0009);
34         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x000d);
35         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x0009);        
36 }
37
38 /* MIIからビットデータを読み込む */
39 int Lan9000Hal_MiiIn(C_LAN9000HAL *self)
40 {
41         unsigned short uhMask;
42         int            iData;
43
44         uhMask = LAN9000HAL_REG_READ(self, LAN9000HAL_B3_MGMT) & 0xfff0;
45         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask);
46         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x0040);
47         iData = ((LAN9000HAL_REG_READ(self, LAN9000HAL_B3_MGMT) >> 1) & 1);
48         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask);
49         
50         return iData;
51 }
52
53 /* MIIをhigh-Zをにする */
54 void Lan9000Hal_MiiZ(C_LAN9000HAL *self)
55 {
56         unsigned short uhMask;
57
58         uhMask = LAN9000HAL_REG_READ(self, LAN9000HAL_B3_MGMT) & 0xfff0;
59         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask);
60         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask | 0x000c);
61         LAN9000HAL_REG_WRITE(self, LAN9000HAL_B3_MGMT, uhMask); 
62 }
63
64
65
66
67 /* endof file */