@@ -953,6 +953,7 @@ TGENETStatus64 = record
953953
954954{ ==============================================================================}
955955{ Initialization Functions}
956+ procedure GENETInit ;{ $IFDEF API_EXPORT_GENET} stdcall; public name ' genet_init' ;{ $ENDIF}
956957
957958{ ==============================================================================}
958959{ GENET Functions}
@@ -1029,8 +1030,9 @@ implementation
10291030
10301031{ ==============================================================================}
10311032{ ==============================================================================}
1032- { var}
1033+ var
10331034 { GENET specific variables}
1035+ GENETInitialized:Boolean;
10341036
10351037{ ==============================================================================}
10361038{ ==============================================================================}
@@ -1162,6 +1164,38 @@ procedure _UniMACMDIOWrite(Network:PGENETNetwork;Offset,Value:LongWord); forward
11621164{ ==============================================================================}
11631165{ ==============================================================================}
11641166{ Initialization Functions}
1167+ procedure GENETInit ;{ $IFDEF API_EXPORT_GENET} stdcall;{ $ENDIF}
1168+ { Initialize the GENET unit and parameters}
1169+
1170+ { Note: Called internally by other functions}
1171+ var
1172+ WorkInt:LongWord;
1173+ WorkBool:LongBool;
1174+ WorkBuffer:String;
1175+ begin
1176+ {}
1177+ { Check Initialized}
1178+ if GENETInitialized then Exit;
1179+
1180+ { Check Environment Variables}
1181+ { GENET_PHY_MODE}
1182+ WorkBuffer:=EnvironmentGet(' GENET_PHY_MODE' );
1183+ if Length(WorkBuffer) > 0 then GENET_PHY_MODE:=WorkBuffer;
1184+
1185+ { GENET_PHY_ADDR}
1186+ WorkInt:=StrToIntDef(EnvironmentGet(' GENET_PHY_ADDR' ),GENET_PHY_ADDR);
1187+ if WorkInt <> GENET_PHY_ADDR then GENET_PHY_ADDR:=WorkInt;
1188+
1189+ { GENET_SKIP_UMAC_RESET}
1190+ WorkBool:=StrToBoolDef(EnvironmentGet(' GENET_SKIP_UMAC_RESET' ),GENET_SKIP_UMAC_RESET);
1191+ if WorkBool <> GENET_SKIP_UMAC_RESET then GENET_SKIP_UMAC_RESET:=WorkBool;
1192+
1193+ { GENET_NO_PHY_INTERRUPT}
1194+ WorkBool:=StrToBoolDef(EnvironmentGet(' GENET_NO_PHY_INTERRUPT' ),GENET_NO_PHY_INTERRUPT);
1195+ if WorkBool <> GENET_NO_PHY_INTERRUPT then GENET_NO_PHY_INTERRUPT:=WorkBool;
1196+
1197+ GENETInitialized:=True;
1198+ end ;
11651199
11661200{ ==============================================================================}
11671201{ ==============================================================================}
@@ -1175,13 +1209,14 @@ function GENETNetworkCreate(Address:PtrUInt;MDIOOffset:LongWord;IRQ0,IRQ1:LongWo
11751209{ Return: Pointer to the new Network device or nil if the Network device could not be created}
11761210var
11771211 Status:LongWord;
1178- WorkInt:LongWord;
1179- WorkBuffer:String;
11801212 GENETNetwork:PGENETNetwork;
11811213begin
11821214 {}
11831215 Result:=nil ;
11841216
1217+ { Initialize}
1218+ GENETInit;
1219+
11851220 { $IF DEFINED(GENET_DEBUG) or DEFINED(NETWORK_DEBUG)}
11861221 if NETWORK_LOG_ENABLED then NetworkLogDebug(nil ,' GENET: Network Create (Address=' + AddrToHex(Address) + ' MDIOOffset=' + IntToHex(MDIOOffset,8 ) + ' IRQ0=' + IntToStr(IRQ0) + ' IRQ1=' + IntToStr(IRQ1) + ' )' );
11871222 { $ENDIF}
@@ -1195,23 +1230,6 @@ function GENETNetworkCreate(Address:PtrUInt;MDIOOffset:LongWord;IRQ0,IRQ1:LongWo
11951230 { Check IRQ1}
11961231 { if IRQ1 = 0 then Exit;} { IRQ 0 is valid}
11971232
1198- { Check Environment Variables}
1199- { GENET_PHY_MODE}
1200- WorkBuffer:=EnvironmentGet(' GENET_PHY_MODE' );
1201- if Length(WorkBuffer) <> 0 then GENET_PHY_MODE:=WorkBuffer;
1202-
1203- { GENET_PHY_ADDR}
1204- WorkInt:=StrToIntDef(EnvironmentGet(' GENET_PHY_ADDR' ),GENET_PHY_ADDR);
1205- if WorkInt <> GENET_PHY_ADDR then GENET_PHY_ADDR:=WorkInt;
1206-
1207- { GENET_SKIP_UMAC_RESET}
1208- WorkInt:=StrToIntDef(EnvironmentGet(' GENET_SKIP_UMAC_RESET' ),0 );
1209- if WorkInt <> 0 then GENET_SKIP_UMAC_RESET:=True;
1210-
1211- { GENET_NO_PHY_INTERRUPT}
1212- WorkInt:=StrToIntDef(EnvironmentGet(' GENET_NO_PHY_INTERRUPT' ),0 );
1213- if WorkInt <> 0 then GENET_NO_PHY_INTERRUPT:=True;
1214-
12151233 { Create Network}
12161234 GENETNetwork:=PGENETNetwork(NetworkDeviceCreateEx(SizeOf(TGENETNetwork)));
12171235 if GENETNetwork <> nil then
0 commit comments