linux/arch/powerpc/platforms/pseries/firmware.c
<<
>>
Prefs
   1/*
   2 *  pSeries firmware setup code.
   3 *
   4 *  Portions from arch/powerpc/platforms/pseries/setup.c:
   5 *   Copyright (C) 1995  Linus Torvalds
   6 *   Adapted from 'alpha' version by Gary Thomas
   7 *   Modified by Cort Dougan (cort@cs.nmt.edu)
   8 *   Modified by PPC64 Team, IBM Corp
   9 *
  10 *  Portions from arch/powerpc/kernel/firmware.c
  11 *   Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
  12 *   Modifications for ppc64:
  13 *    Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
  14 *    Copyright (C) 2005 Stephen Rothwell, IBM Corporation
  15 *
  16 *  Copyright 2006 IBM Corporation.
  17 *
  18 * This program is free software; you can redistribute it and/or
  19 * modify it under the terms of the GNU General Public License
  20 * as published by the Free Software Foundation; either version
  21 * 2 of the License, or (at your option) any later version.
  22 */
  23
  24
  25#include <asm/firmware.h>
  26#include <asm/prom.h>
  27#include <asm/udbg.h>
  28
  29#include "pseries.h"
  30
  31typedef struct {
  32    unsigned long val;
  33    char * name;
  34} firmware_feature_t;
  35
  36static __initdata firmware_feature_t
  37firmware_features_table[FIRMWARE_MAX_FEATURES] = {
  38        {FW_FEATURE_PFT,                "hcall-pft"},
  39        {FW_FEATURE_TCE,                "hcall-tce"},
  40        {FW_FEATURE_SPRG0,              "hcall-sprg0"},
  41        {FW_FEATURE_DABR,               "hcall-dabr"},
  42        {FW_FEATURE_COPY,               "hcall-copy"},
  43        {FW_FEATURE_ASR,                "hcall-asr"},
  44        {FW_FEATURE_DEBUG,              "hcall-debug"},
  45        {FW_FEATURE_PERF,               "hcall-perf"},
  46        {FW_FEATURE_DUMP,               "hcall-dump"},
  47        {FW_FEATURE_INTERRUPT,          "hcall-interrupt"},
  48        {FW_FEATURE_MIGRATE,            "hcall-migrate"},
  49        {FW_FEATURE_PERFMON,            "hcall-perfmon"},
  50        {FW_FEATURE_CRQ,                "hcall-crq"},
  51        {FW_FEATURE_VIO,                "hcall-vio"},
  52        {FW_FEATURE_RDMA,               "hcall-rdma"},
  53        {FW_FEATURE_LLAN,               "hcall-lLAN"},
  54        {FW_FEATURE_BULK_REMOVE,        "hcall-bulk"},
  55        {FW_FEATURE_XDABR,              "hcall-xdabr"},
  56        {FW_FEATURE_MULTITCE,           "hcall-multi-tce"},
  57        {FW_FEATURE_SPLPAR,             "hcall-splpar"},
  58        {FW_FEATURE_VPHN,               "hcall-vphn"},
  59};
  60
  61/* Build up the firmware features bitmask using the contents of
  62 * device-tree/ibm,hypertas-functions.  Ultimately this functionality may
  63 * be moved into prom.c prom_init().
  64 */
  65void __init fw_feature_init(const char *hypertas, unsigned long len)
  66{
  67        const char *s;
  68        int i;
  69
  70        pr_debug(" -> fw_feature_init()\n");
  71
  72        for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) {
  73                for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) {
  74                        /* check value against table of strings */
  75                        if (!firmware_features_table[i].name ||
  76                            strcmp(firmware_features_table[i].name, s))
  77                                continue;
  78
  79                        /* we have a match */
  80                        powerpc_firmware_features |=
  81                                firmware_features_table[i].val;
  82                        break;
  83                }
  84        }
  85
  86        pr_debug(" <- fw_feature_init()\n");
  87}
  88