; ; Copyright (c) 2019, RISC OS Open Ltd ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the distribution. ; * Neither the name of RISC OS Open Ltd nor the names of its contributors ; may be used to endorse or promote products derived from this software ; without specific prior written permission. ; ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ; POSSIBILITY OF SUCH DAMAGE. ; GET Hdr:ListOpts GET Hdr:Macros GET Hdr:System GET hdr.BCM2835 GET hdr.StaticWS GET hdr.CastleMacros AREA |ARM$$Code|, CODE, READONLY, PIC EXPORT EtherNIC_InitDevices IMPORT memcpy ; Initialise our HAL devices EtherNIC_InitDevices ROUT CPUDetect a1 MOVLS pc, lr Push "lr" ADRL a1, EtherNICDevice ADR a2, EtherNICTemplate MOV a3, #HALDeviceSize BL memcpy LDR a2, PeriBase2 ADD a2, a2, #GENET_Base STR a2, [a1, #HALDevice_Address] MOV a2, a1 MOV a1, #0 ; No flags CallOS OS_AddDevice Pull "pc" MACRO $class HALDeviceField $field, $value LCLS myvalue [ "$value" = "" myvalue SETS "$field" | myvalue SETS "$value" ] ASSERT . - %A0 = HALDevice_$class$field [ ?HALDevice_$class$field = 2 DCW $myvalue ELIF ?HALDevice_$class$field = 4 DCD $myvalue | % ?HALDevice_$class$field ] MEND EtherNICTemplate 0 HALDeviceField Type, HALDeviceType_Comms + HALDeviceComms_EtherNIC HALDeviceField ID, HALDeviceID_EtherNIC_BCMGENET HALDeviceField Location, HALDeviceBus_Sys + HALDeviceSysBus_AHB HALDeviceField Version, 0 HALDeviceField Description, EtherNICDevice_Description HALDeviceField Address, 0 ; Filled later HALDeviceField Reserved1, 0 HALDeviceField Activate, EtherNICDevice_Activate HALDeviceField Deactivate, EtherNICDevice_Deactivate HALDeviceField Reset, EtherNICDevice_Reset HALDeviceField Sleep, EtherNICDevice_Sleep HALDeviceField Device, iDev_Ext_Genet_A ; (+1 other) HALDeviceField TestIRQ, 0 HALDeviceField ClearIRQ, 0 HALDeviceField Reserved2, 0 ASSERT . - %A0 = HALDeviceSize EtherNICDevice_Description DCB "Broadcom GENET", 0 ALIGN EtherNICDevice_Activate MOV a1, #1 EtherNICDevice_Deactivate EtherNICDevice_Reset MOV pc, lr EtherNICDevice_Sleep MOV a1, #0 MOV pc, lr END