setup code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,
      somebody please help me understanding the following code. since
this code is referenced from setup.c how does the compiler put in
the physical address of the machine descriptor in r5 ? also this address
i dont understand why it is metioned as physical !!!
  
  
  
  /*
* Lookup machine architecture in the linker-build list of
architectures.
* Note that we can't use the absolute addresses for the __arch_info
* lists since we aren't running with the MMU on (and therefore, we are
* not in the correct address space).  We have to calculate the offset.
*
*  r1 = machine architecture number
* Returns:
*  r3, r4, r6 corrupted
*  r5 = mach_info pointer in physical address space
*/
        .type   __lookup_machine_type, %function
__lookup_machine_type:
        adr     r3, 3b
        ldmia   r3, {r4, r5, r6}
        sub     r3, r3, r4                      @ get offset between
virt&phys
        add     r5, r5, r3                      @ convert virt
addresses to
        add     r6, r6, r3                      @ physical address
space
        rsb     r3, r5, r6                      @ number of machine
types
        teq     r3, #SIZEOF_MACHINE_DESC        @ only one?
        ldreq   r1, [r5]                        @ if so do not bother
with r1
        beq     2f                              @ ...and be happy.
1:      ldr     r3, [r5]                        @ get machine type
        teq     r3, r1                          @ matches loader
number?
        beq     2f                              @ found
        add     r5, r5, #SIZEOF_MACHINE_DESC    @ next machine_desc
        cmp     r5, r6
        blt     1b
        mov     r5, #0                          @ unknown machine
2:      mov     pc, lr
  
  TIA
  regards
  Srinivas Bakki

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux