📄 cs8950.cod
字号:
; 895 : PCD pCD;
; 896 : BOOL Result;
; 897 : union
; 898 : {
; 899 : WORD Word[2];
; 900 : DWORD DWord;
; 901 : } PHYID;
; 902 :
; 903 : pCD = (PCD)pChip->pData;
00010 e59d3020 ldr r3, [sp, #0x20]
00014 e283300c add r3, r3, #0xC
00018 e5933000 ldr r3, [r3]
0001c e58d3008 str r3, [sp, #8]
; 904 :
; 905 : /* Read PHY ID register 1 */
; 906 : Result = ReadPHY( pChip, PHYAddress, PHYReg_PHYIDR1, &PHYID.Word[1] );
00020 e28d3000 add r3, sp, #0
00024 e2833002 add r3, r3, #2
00028 e3a02002 mov r2, #2
0002c e1dd12b4 ldrh r1, [sp, #0x24]
00030 e59d0020 ldr r0, [sp, #0x20]
00034 eb000000 bl ReadPHY
00038 e58d0010 str r0, [sp, #0x10]
0003c e59d3010 ldr r3, [sp, #0x10]
00040 e58d3004 str r3, [sp, #4]
; 907 : if ( Result != TRUE )
00044 e59d3004 ldr r3, [sp, #4]
00048 e3530001 cmp r3, #1
0004c 0a000002 beq |$L15630|
; 908 : {
; 909 : return FALSE;
00050 e3a03000 mov r3, #0
00054 e58d300c str r3, [sp, #0xC]
00058 ea000091 b |$L15622|
0005c |$L15630|
; 910 : }
; 911 :
; 912 : /* Read PHY ID register 2 */
; 913 : Result = ReadPHY( pChip, PHYAddress, PHYReg_PHYIDR2, &PHYID.Word[0] );
0005c e28d3000 add r3, sp, #0
00060 e3a02003 mov r2, #3
00064 e1dd12b4 ldrh r1, [sp, #0x24]
00068 e59d0020 ldr r0, [sp, #0x20]
0006c eb000000 bl ReadPHY
00070 e58d0014 str r0, [sp, #0x14]
00074 e59d3014 ldr r3, [sp, #0x14]
00078 e58d3004 str r3, [sp, #4]
; 914 : if ( Result != TRUE )
0007c e59d3004 ldr r3, [sp, #4]
00080 e3530001 cmp r3, #1
00084 0a000002 beq |$L15631|
; 915 : {
; 916 : return FALSE;
00088 e3a03000 mov r3, #0
0008c e58d300c str r3, [sp, #0xC]
00090 ea000083 b |$L15622|
00094 |$L15631|
; 917 : }
; 918 :
; 919 : /* Not a Valid PhyID */
; 920 : if (PHYID.DWord == 0xffffffff || PHYID.DWord == 0x0)
00094 e59d3000 ldr r3, [sp]
00098 e3730001 cmn r3, #1
0009c 0a000002 beq |$L15633|
000a0 e59d3000 ldr r3, [sp]
000a4 e3530000 cmp r3, #0
000a8 1a000002 bne |$L15632|
000ac |$L15633|
; 921 : {
; 922 : return FALSE;
000ac e3a03000 mov r3, #0
000b0 e58d300c str r3, [sp, #0xC]
000b4 ea00007a b |$L15622|
000b8 |$L15632|
; 923 : }
; 924 :
; 925 : /* Check if it is a PHY that we know about */
; 926 : if ( ((PHYID.DWord & PHYID_OUI_Mask) == PHYID_OUI_National) &&
; 927 : ((PHYID.DWord & PHYID_Model_Mask) == PHYID_Model_DP83840) )
000b8 e59d2000 ldr r2, [sp]
000bc e3a03101 mov r3, #1, 2
000c0 e2433b01 sub r3, r3, #1, 22
000c4 e0022003 and r2, r2, r3
000c8 e3a03202 mov r3, #2, 4
000cc e3833b17 orr r3, r3, #0x17, 22
000d0 e1520003 cmp r2, r3
000d4 1a000007 bne |$L15634|
000d8 e59d3000 ldr r3, [sp]
000dc e3130e3f tst r3, #0x3F, 28
000e0 1a000004 bne |$L15634|
; 928 : {
; 929 : pCD->PHYType = PHY_TYPE_NATIONAL;
000e4 e59d3008 ldr r3, [sp, #8]
000e8 e2832f72 add r2, r3, #0x72, 30
000ec e3a03001 mov r3, #1
000f0 e5c23000 strb r3, [r2]
; 930 : DEBUGMSG(ZONE_INIT,(TEXT("Detected National PHY at address: %x\r\n"), PHYAddress) );
; 931 : }
; 932 : else if ( ((PHYID.DWord & PHYID_OUI_Mask) == PHYID_OUI_Crystal) &&
000f4 ea00005c b |$L15636|
000f8 |$L15634|
; 933 : ((PHYID.DWord & PHYID_Model_Mask) == PHYID_Model_CS8952) )
000f8 e59d2000 ldr r2, [sp]
000fc e3a03101 mov r3, #1, 2
00100 e2433b01 sub r3, r3, #1, 22
00104 e0022003 and r2, r2, r3
00108 e3a0381a mov r3, #0x1A, 16
0010c e3833a02 orr r3, r3, #2, 20
00110 e1520003 cmp r2, r3
00114 1a000008 bne |$L15637|
00118 e59d3000 ldr r3, [sp]
0011c e2033e3f and r3, r3, #0x3F, 28
00120 e3530c02 cmp r3, #2, 24
00124 1a000004 bne |$L15637|
; 934 : {
; 935 : pCD->PHYType = PHY_TYPE_CRYSTAL;
00128 e59d3008 ldr r3, [sp, #8]
0012c e2832f72 add r2, r3, #0x72, 30
00130 e3a03002 mov r3, #2
00134 e5c23000 strb r3, [r2]
; 936 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Crystal PHY at address: %x\r\n"), PHYAddress) );
; 937 : }
; 938 : else if ( ((PHYID.DWord & PHYID_OUI_Mask) == PHYID_OUI_ICS) &&
00138 ea00004b b |$L15639|
0013c |$L15637|
; 939 : ((PHYID.DWord & PHYID_Model_Mask) == PHYID_Model_ICS1890) )
0013c e59d2000 ldr r2, [sp]
00140 e3a03101 mov r3, #1, 2
00144 e2433b01 sub r3, r3, #1, 22
00148 e0022003 and r2, r2, r3
0014c e3a03957 mov r3, #0x57, 18
00150 e3833b0d orr r3, r3, #0xD, 22
00154 e1520003 cmp r2, r3
00158 1a000008 bne |$L15640|
0015c e59d3000 ldr r3, [sp]
00160 e2033e3f and r3, r3, #0x3F, 28
00164 e3530020 cmp r3, #0x20
00168 1a000004 bne |$L15640|
; 940 : {
; 941 : pCD->PHYType = PHY_TYPE_ICS;
0016c e59d3008 ldr r3, [sp, #8]
00170 e2832f72 add r2, r3, #0x72, 30
00174 e3a03003 mov r3, #3
00178 e5c23000 strb r3, [r2]
; 942 : DEBUGMSG(ZONE_INIT,(TEXT("Detected ICS1890 PHY at address: %x\r\n"), PHYAddress) );
; 943 : }
; 944 : else if ( ((PHYID.DWord & PHYID_OUI_Mask) == PHYID_OUI_BROADCOM) &&
0017c ea00003a b |$L15642|
00180 |$L15640|
; 945 : ((PHYID.DWord & PHYID_Model_Mask) == PHYID_Model_BCM5201) )
00180 e59d2000 ldr r2, [sp]
00184 e3a03101 mov r3, #1, 2
00188 e2433b01 sub r3, r3, #1, 22
0018c e0022003 and r2, r2, r3
00190 e3a03501 mov r3, #1, 10
00194 e3833a06 orr r3, r3, #6, 20
00198 e1520003 cmp r2, r3
0019c 1a00000a bne |$L15643|
001a0 e59d3000 ldr r3, [sp]
001a4 e2032e3f and r2, r3, #0x3F, 28
001a8 e3a03e21 mov r3, #0x21, 28
001ac e3833002 orr r3, r3, #2
001b0 e1520003 cmp r2, r3
001b4 1a000004 bne |$L15643|
; 946 : {
; 947 : pCD->PHYType = PHY_TYPE_BROADCOM;
001b8 e59d3008 ldr r3, [sp, #8]
001bc e2832f72 add r2, r3, #0x72, 30
001c0 e3a03004 mov r3, #4
001c4 e5c23000 strb r3, [r2]
; 948 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Broadcom PHY at address: %x\r\n"), PHYAddress) );
; 949 : }
; 950 : else if ( ((PHYID.DWord & PHYID_OUI_Mask) == PHYID_OUI_MICREL) &&
001c8 ea000027 b |$L15645|
001cc |$L15643|
; 951 : ((PHYID.DWord & PHYID_Model_Mask) == PHYID_Model_KS8721BL) )
001cc e59d2000 ldr r2, [sp]
001d0 e3a03101 mov r3, #1, 2
001d4 e2433b01 sub r3, r3, #1, 22
001d8 e0022003 and r2, r2, r3
001dc e3a03822 mov r3, #0x22, 16
001e0 e3833b05 orr r3, r3, #5, 22
001e4 e1520003 cmp r2, r3
001e8 1a000008 bne |$L15646|
001ec e59d3000 ldr r3, [sp]
001f0 e2033e3f and r3, r3, #0x3F, 28
001f4 e3530e21 cmp r3, #0x21, 28
001f8 1a000004 bne |$L15646|
; 952 : {
; 953 : pCD->PHYType = PHY_TYPE_MICREL_8721BL;
001fc e59d3008 ldr r3, [sp, #8]
00200 e2832f72 add r2, r3, #0x72, 30
00204 e3a03006 mov r3, #6
00208 e5c23000 strb r3, [r2]
; 954 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Micrel KS8721BL PHY at address: %x\r\n"), PHYAddress ));
; 955 : }
; 956 : else if (PHYID.DWord == 0x00406212)
0020c ea000016 b |$L15648|
00210 |$L15646|
00210 e59d2000 ldr r2, [sp]
00214 e59f3098 ldr r3, [pc, #0x98]
00218 e1520003 cmp r2, r3
0021c 1a000004 bne |$L15649|
; 957 : {
; 958 : pCD->PHYType = PHY_TYPE_BROADCOM;
00220 e59d3008 ldr r3, [sp, #8]
00224 e2832f72 add r2, r3, #0x72, 30
00228 e3a03004 mov r3, #4
0022c e5c23000 strb r3, [r2]
; 959 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Broadcom PHY at address: %x\r\n"), PHYAddress) );
; 960 : }
; 961 : else if (PHYID.DWord == 0x78100003)
00230 ea00000d b |$L15651|
00234 |$L15649|
00234 e59d2000 ldr r2, [sp]
00238 e3a0310e mov r3, #0xE, 2
0023c e243367f sub r3, r3, #0x7F, 12
00240 e1520003 cmp r2, r3
00244 1a000004 bne |$L15652|
; 962 : {
; 963 : pCD->PHYType = PHY_TYPE_LEVEL1; /* clc */
00248 e59d3008 ldr r3, [sp, #8]
0024c e2832f72 add r2, r3, #0x72, 30
00250 e3a03005 mov r3, #5
00254 e5c23000 strb r3, [r2]
; 964 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Level1 PHY at address: %x\r\n"), PHYAddress) );
; 965 : } else
00258 ea000003 b |$L15654|
0025c |$L15652|
; 966 : {
; 967 : pCD->PHYType = PHY_TYPE_UNKNOWN;
0025c e59d3008 ldr r3, [sp, #8]
00260 e2832f72 add r2, r3, #0x72, 30
00264 e3a030ff mov r3, #0xFF
00268 e5c23000 strb r3, [r2]
0026c |$L15654|
0026c |$L15651|
0026c |$L15648|
0026c |$L15645|
0026c |$L15642|
0026c |$L15639|
0026c |$L15636|
; 968 : DEBUGMSG(ZONE_INIT,(TEXT("Detected Unknown PHY at address: %x\r\n"), PHYAddress) );
; 969 : }
; 970 :
; 971 : /* Save the address of the PHY */
; 972 : pCD->PHYAddress = PHYAddress;
0026c e59d3008 ldr r3, [sp, #8]
00270 e2833c01 add r3, r3, #1, 24
00274 e28320ca add r2, r3, #0xCA
00278 e1dd32b4 ldrh r3, [sp, #0x24]
0027c e1c230b0 strh r3, [r2]
; 973 :
; 974 : /* Get the PHY revision level */
; 975 : pCD->PHYRevision = (BYTE)(PHYID.DWord & PHYID_Revision_Mask);
00280 e59d3000 ldr r3, [sp]
00284 e203300f and r3, r3, #0xF
00288 e20320ff and r2, r3, #0xFF
0028c e59d3008 ldr r3, [sp, #8]
00290 e2833c01 add r3, r3, #1, 24
00294 e28330c9 add r3, r3, #0xC9
00298 e5c32000 strb r2, [r3]
; 976 :
; 977 : return TRUE;
0029c e3a03001 mov r3, #1
002a0 e58d300c str r3, [sp, #0xC]
002a4 |$L15622|
; 908 : {
; 909 : return FALSE;
002a4 e59d000c ldr r0, [sp, #0xC]
; 978 : }
002a8 e28dd018 add sp, sp, #0x18
002ac e89d6000 ldmia sp, {sp, lr}
002b0 e12fff1e bx lr
002b4 |$L16285|
002b4 00406212 DCD 0x406212
002b8 |$M16281|
ENDP ; |Check_PHY_ID_Type|
EXPORT |??_C@_1FE@NCFENECG@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?3?$AA?5?$AAE?$AAt?$AAh?$AAe?$AAr?$AAn?$AAe?$AAt?$AAM?$AAA?$AAC?$AA?3?$AA?5@| [ DATA ] ; `string'
IMPORT |NKDbgPrintfW|
00000 AREA |.text| { |FindPHYType| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FindPHYType|, PDATA, SELECTION=5, ASSOC=|.text| { |FindPHYType| } ; comdat associative
|$T16292| DCD |$L16291|
DCD 0x40003304
00000 AREA |.rdata| { |??_C@_1FE@NCFENECG@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?3?$AA?5?$AAE?$AAt?$AAh?$AAe?$AAr?$AAn?$AAe?$AAt?$AAM?$AAA?$AAC?$AA?3?$AA?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FE@NCFENECG@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?3?$AA?5?$AAE?$AAt?$AAh?$AAe?$AAr?$AAn?$AAe?$AAt?$AAM?$AAA?$AAC?$AA?3?$AA?5@| DCB "E"
DCB 0x0, "r", 0x0, "r", 0x0, "o", 0x0, "r", 0x0, ":", 0x0, " "
DCB 0x0, "E", 0x0, "t", 0x0, "h", 0x0, "e", 0x0, "r", 0x0, "n"
DCB 0x0, "e", 0x0, "t", 0x0, "M", 0x0, "A", 0x0, "C", 0x0, ":"
DCB 0x0, " ", 0x0, "A", 0x0, " ", 0x0, "P", 0x0, "H", 0x0, "Y"
DCB 0x0, " ", 0x0, "i", 0x0, "s", 0x0, " ", 0x0, "n", 0x0, "o"
DCB 0x0, "t", 0x0, " ", 0x0, "f", 0x0, "o", 0x0, "u", 0x0, "n"
DCB 0x0, "d", 0x0, "!", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |FindPHYType| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FindPHYType| PROC
; 986 : {
00000 |$L16291|
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd018 sub sp, sp, #0x18
00010 |$M16289|
; 987 : PCD pCD;
; 988 : WORD PHYAddress;
; 989 : BOOL IsPHYFound;
; 990 :
; 991 : pCD = (PCD)pChip->pData;
00010 e59d3020 ldr r3, [sp, #0x20]
00014 e283300c add r3, r3, #0xC
00018 e5933000 ldr r3, [r3]
0001c e58d3008 str r3, [sp, #8]
; 992 :
; 993 : /* Search for a known type of PHY */
; 994 : for ( PHYAddress=1; PHYAddress<=31; PHYAddress++ )
00020 e3a03001 mov r3, #1
00024 e1cd30b0 strh r3, [sp]
00028 ea000004 b |$L15664|
0002c |$L15665|
0002c e1dd30b0 ldrh r3, [sp]
00030 e2833001 add r3, r3, #1
00034 e1a03803 mov r3, r3, lsl #16
00038 e1a03823 mov r3, r3, lsr #16
0003c e1cd30b0 strh r3, [sp]
00040 |$L15664|
00040 e1dd30b0 ldrh r3, [sp]
00044 e353001f cmp r3, #0x1F
00048 ca00000a bgt |$L15666|
; 995 : {
; 996 : IsPHYFound=Check_PHY_ID_Type(pChip, PHYAddress);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -