linux/arch/arm/include/asm/mach/arch.h
<<
>>
Prefs
   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
  13struct tag;
  14struct pt_regs;
  15struct 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
  24struct 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 */
  68extern const struct machine_desc *machine_desc;
  69
  70/*
  71 * Machine type table - also only accessible during boot
  72 */
  73extern 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)                      \
  82static 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)               \
  92static const struct machine_desc __mach_desc_##_name    \
  93 __used                                                 \
  94 __attribute__((__section__(".arch.info.init"))) = {    \
  95        .nr             = ~0,                           \
  96        .name           = _namestr,
  97
  98#endif
  99