root/arch/arm/include/asm/mach/arch.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  *  arch/arm/include/asm/mach/arch.h
   4  *
   5  *  Copyright (C) 2000 Russell King
   6  */
   7 
   8 #include <linux/types.h>
   9 
  10 #ifndef __ASSEMBLY__
  11 #include <linux/reboot.h>
  12 
  13 struct tag;
  14 struct pt_regs;
  15 struct smp_operations;
  16 #ifdef CONFIG_SMP
  17 #define smp_ops(ops) (&(ops))
  18 #define smp_init_ops(ops) (&(ops))
  19 #else
  20 #define smp_ops(ops) (struct smp_operations *)NULL
  21 #define smp_init_ops(ops) (bool (*)(void))NULL
  22 #endif
  23 
  24 struct machine_desc {
  25         unsigned int            nr;             /* architecture number  */
  26         const char              *name;          /* architecture name    */
  27         unsigned long           atag_offset;    /* tagged list (relative) */
  28         const char *const       *dt_compat;     /* array of device tree
  29                                                  * 'compatible' strings */
  30 
  31         unsigned int            nr_irqs;        /* number of IRQs */
  32 
  33 #ifdef CONFIG_ZONE_DMA
  34         phys_addr_t             dma_zone_size;  /* size of DMA-able area */
  35 #endif
  36 
  37         unsigned int            video_start;    /* start of video RAM   */
  38         unsigned int            video_end;      /* end of video RAM     */
  39 
  40         unsigned char           reserve_lp0 :1; /* never has lp0        */
  41         unsigned char           reserve_lp1 :1; /* never has lp1        */
  42         unsigned char           reserve_lp2 :1; /* never has lp2        */
  43         enum reboot_mode        reboot_mode;    /* default restart mode */
  44         unsigned                l2c_aux_val;    /* L2 cache aux value   */
  45         unsigned                l2c_aux_mask;   /* L2 cache aux mask    */
  46         void                    (*l2c_write_sec)(unsigned long, unsigned);
  47         const struct smp_operations     *smp;   /* SMP operations       */
  48         bool                    (*smp_init)(void);
  49         void                    (*fixup)(struct tag *, char **);
  50         void                    (*dt_fixup)(void);
  51         long long               (*pv_fixup)(void);
  52         void                    (*reserve)(void);/* reserve mem blocks  */
  53         void                    (*map_io)(void);/* IO mapping function  */
  54         void                    (*init_early)(void);
  55         void                    (*init_irq)(void);
  56         void                    (*init_time)(void);
  57         void                    (*init_machine)(void);
  58         void                    (*init_late)(void);
  59 #ifdef CONFIG_GENERIC_IRQ_MULTI_HANDLER
  60         void                    (*handle_irq)(struct pt_regs *);
  61 #endif
  62         void                    (*restart)(enum reboot_mode, const char *);
  63 };
  64 
  65 /*
  66  * Current machine - only accessible during boot.
  67  */
  68 extern const struct machine_desc *machine_desc;
  69 
  70 /*
  71  * Machine type table - also only accessible during boot
  72  */
  73 extern const struct machine_desc __arch_info_begin[], __arch_info_end[];
  74 #define for_each_machine_desc(p)                        \
  75         for (p = __arch_info_begin; p < __arch_info_end; p++)
  76 
  77 /*
  78  * Set of macros to define architecture features.  This is built into
  79  * a table by the linker.
  80  */
  81 #define MACHINE_START(_type,_name)                      \
  82 static const struct machine_desc __mach_desc_##_type    \
  83  __used                                                 \
  84  __attribute__((__section__(".arch.info.init"))) = {    \
  85         .nr             = MACH_TYPE_##_type,            \
  86         .name           = _name,
  87 
  88 #define MACHINE_END                             \
  89 };
  90 
  91 #define DT_MACHINE_START(_name, _namestr)               \
  92 static const struct machine_desc __mach_desc_##_name    \
  93  __used                                                 \
  94  __attribute__((__section__(".arch.info.init"))) = {    \
  95         .nr             = ~0,                           \
  96         .name           = _namestr,
  97 
  98 #endif

/* [<][>][^][v][top][bottom][index][help] */