linux/arch/arm/include/asm/firmware.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2012 Samsung Electronics.
   3 * Kyungmin Park <kyungmin.park@samsung.com>
   4 * Tomasz Figa <t.figa@samsung.com>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#ifndef __ASM_ARM_FIRMWARE_H
  12#define __ASM_ARM_FIRMWARE_H
  13
  14#include <linux/bug.h>
  15
  16/*
  17 * struct firmware_ops
  18 *
  19 * A structure to specify available firmware operations.
  20 *
  21 * A filled up structure can be registered with register_firmware_ops().
  22 */
  23struct firmware_ops {
  24        /*
  25         * Inform the firmware we intend to enter CPU idle mode
  26         */
  27        int (*prepare_idle)(void);
  28        /*
  29         * Enters CPU idle mode
  30         */
  31        int (*do_idle)(unsigned long mode);
  32        /*
  33         * Sets boot address of specified physical CPU
  34         */
  35        int (*set_cpu_boot_addr)(int cpu, unsigned long boot_addr);
  36        /*
  37         * Gets boot address of specified physical CPU
  38         */
  39        int (*get_cpu_boot_addr)(int cpu, unsigned long *boot_addr);
  40        /*
  41         * Boots specified physical CPU
  42         */
  43        int (*cpu_boot)(int cpu);
  44        /*
  45         * Initializes L2 cache
  46         */
  47        int (*l2x0_init)(void);
  48        /*
  49         * Enter system-wide suspend.
  50         */
  51        int (*suspend)(void);
  52        /*
  53         * Restore state of privileged hardware after system-wide suspend.
  54         */
  55        int (*resume)(void);
  56};
  57
  58/* Global pointer for current firmware_ops structure, can't be NULL. */
  59extern const struct firmware_ops *firmware_ops;
  60
  61/*
  62 * call_firmware_op(op, ...)
  63 *
  64 * Checks if firmware operation is present and calls it,
  65 * otherwise returns -ENOSYS
  66 */
  67#define call_firmware_op(op, ...)                                       \
  68        ((firmware_ops->op) ? firmware_ops->op(__VA_ARGS__) : (-ENOSYS))
  69
  70/*
  71 * register_firmware_ops(ops)
  72 *
  73 * A function to register platform firmware_ops struct.
  74 */
  75static inline void register_firmware_ops(const struct firmware_ops *ops)
  76{
  77        BUG_ON(!ops);
  78
  79        firmware_ops = ops;
  80}
  81
  82#endif
  83