The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/iwlwifi/fw/img.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
    2 /*
    3  * Copyright(c) 2019 - 2021 Intel Corporation
    4  */
    5 #include <fw/api/commands.h>
    6 #include "img.h"
    7 
    8 u8 iwl_fw_lookup_cmd_ver(const struct iwl_fw *fw, u32 cmd_id, u8 def)
    9 {
   10         const struct iwl_fw_cmd_version *entry;
   11         unsigned int i;
   12         /* prior to LONG_GROUP, we never used this CMD version API */
   13         u8 grp = iwl_cmd_groupid(cmd_id) ?: LONG_GROUP;
   14         u8 cmd = iwl_cmd_opcode(cmd_id);
   15 
   16         if (!fw->ucode_capa.cmd_versions ||
   17             !fw->ucode_capa.n_cmd_versions)
   18                 return def;
   19 
   20         entry = fw->ucode_capa.cmd_versions;
   21         for (i = 0; i < fw->ucode_capa.n_cmd_versions; i++, entry++) {
   22                 if (entry->group == grp && entry->cmd == cmd) {
   23                         if (entry->cmd_ver == IWL_FW_CMD_VER_UNKNOWN)
   24                                 return def;
   25                         return entry->cmd_ver;
   26                 }
   27         }
   28 
   29         return def;
   30 }
   31 EXPORT_SYMBOL_GPL(iwl_fw_lookup_cmd_ver);
   32 
   33 u8 iwl_fw_lookup_notif_ver(const struct iwl_fw *fw, u8 grp, u8 cmd, u8 def)
   34 {
   35         const struct iwl_fw_cmd_version *entry;
   36         unsigned int i;
   37 
   38         if (!fw->ucode_capa.cmd_versions ||
   39             !fw->ucode_capa.n_cmd_versions)
   40                 return def;
   41 
   42         entry = fw->ucode_capa.cmd_versions;
   43         for (i = 0; i < fw->ucode_capa.n_cmd_versions; i++, entry++) {
   44                 if (entry->group == grp && entry->cmd == cmd) {
   45                         if (entry->notif_ver == IWL_FW_CMD_VER_UNKNOWN)
   46                                 return def;
   47                         return entry->notif_ver;
   48                 }
   49         }
   50 
   51         return def;
   52 }
   53 EXPORT_SYMBOL_GPL(iwl_fw_lookup_notif_ver);
   54 
   55 static const struct {
   56         const char *name;
   57         u32 num;
   58 } advanced_lookup[] = {
   59         { "NMI_INTERRUPT_WDG", 0x34 },
   60         { "SYSASSERT", 0x35 },
   61         { "UCODE_VERSION_MISMATCH", 0x37 },
   62         { "BAD_COMMAND", 0x38 },
   63         { "BAD_COMMAND", 0x39 },
   64         { "NMI_INTERRUPT_DATA_ACTION_PT", 0x3C },
   65         { "FATAL_ERROR", 0x3D },
   66         { "NMI_TRM_HW_ERR", 0x46 },
   67         { "NMI_INTERRUPT_TRM", 0x4C },
   68         { "NMI_INTERRUPT_BREAK_POINT", 0x54 },
   69         { "NMI_INTERRUPT_WDG_RXF_FULL", 0x5C },
   70         { "NMI_INTERRUPT_WDG_NO_RBD_RXF_FULL", 0x64 },
   71         { "NMI_INTERRUPT_HOST", 0x66 },
   72         { "NMI_INTERRUPT_LMAC_FATAL", 0x70 },
   73         { "NMI_INTERRUPT_UMAC_FATAL", 0x71 },
   74         { "NMI_INTERRUPT_OTHER_LMAC_FATAL", 0x73 },
   75         { "NMI_INTERRUPT_ACTION_PT", 0x7C },
   76         { "NMI_INTERRUPT_UNKNOWN", 0x84 },
   77         { "NMI_INTERRUPT_INST_ACTION_PT", 0x86 },
   78         { "PNVM_MISSING", FW_SYSASSERT_PNVM_MISSING },
   79         { "ADVANCED_SYSASSERT", 0 },
   80 };
   81 
   82 const char *iwl_fw_lookup_assert_desc(u32 num)
   83 {
   84         int i;
   85 
   86         for (i = 0; i < ARRAY_SIZE(advanced_lookup) - 1; i++)
   87                 if (advanced_lookup[i].num == (num & ~FW_SYSASSERT_CPU_MASK))
   88                         return advanced_lookup[i].name;
   89 
   90         /* No entry matches 'num', so it is the last: ADVANCED_SYSASSERT */
   91         return advanced_lookup[i].name;
   92 }
   93 EXPORT_SYMBOL_GPL(iwl_fw_lookup_assert_desc);

Cache object: 2637db831378f9f70e46f33cd2d97eb5


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.