You've already forked slimbootloader
mirror of
https://github.com/Dasharo/slimbootloader.git
synced 2026-03-06 15:26:20 -08:00
Convert the line endings stored for all text files in the repository to LF. The majority previously used DOS-style CRLF line endings. Add a .gitattributes file to enforce this and treat certain extensions as never being text files. Update PatchCheck.py to insist on LF line endings rather than CRLF. However, its other checks fail on this commit due to lots of pre-existing complaints that it only notices because the line endings have changed. Silicon/QemuSocPkg/FspBin/Patches/0001-Build-QEMU-FSP-2.0-binaries.patch needs to be treated as binary since it contains a mixture of line endings. This change has implications depending on the client platform you are using the repository from: * Windows The usual configuration for Git on Windows means that text files will be checked out to the work tree with DOS-style CRLF line endings. If that's not the case then you can configure Git to do so for the entire machine with: git config --global core.autocrlf true or for just the repository with: git config core.autocrlf true Line endings will be normalised to LF when they are committed to the repository. If you commit a text file with only LF line endings then it will be converted to CRLF line endings in your work tree. * Linux, MacOS and other Unices The usual configuration for Git on such platforms is to check files out of the repository with LF line endings. This is probably the right thing for you. In the unlikely even that you are using Git on Unix but editing or compiling on Windows for some reason then you may need to tweak your configuration to force the use of CRLF line endings as described above. * General For more information see https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings . Fixes: https://github.com/slimbootloader/slimbootloader/issues/1400 Signed-off-by: Mike Crowe <mac@mcrowe.com>
1769 lines
26 KiB
C
1769 lines
26 KiB
C
/** @file
|
|
Utility functions for the `pci` shell command.
|
|
|
|
Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>
|
|
(C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
|
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#include "CmdPciUtil.h"
|
|
|
|
//
|
|
// a structure holding a single entry, which also points to its lower level
|
|
// class
|
|
//
|
|
typedef struct PCI_CLASS_ENTRY_TAG {
|
|
UINT8 Code; // Class, subclass or I/F code
|
|
CHAR16 *DescText; // Description string
|
|
struct PCI_CLASS_ENTRY_TAG *LowerLevelClass; // Subclass or I/F if any
|
|
} PCI_CLASS_ENTRY;
|
|
|
|
//
|
|
// Declarations of entries which contain printable strings for class codes
|
|
// in PCI configuration space
|
|
//
|
|
PCI_CLASS_ENTRY PCIBlankEntry[];
|
|
PCI_CLASS_ENTRY PCISubClass_00[];
|
|
PCI_CLASS_ENTRY PCISubClass_01[];
|
|
PCI_CLASS_ENTRY PCISubClass_02[];
|
|
PCI_CLASS_ENTRY PCISubClass_03[];
|
|
PCI_CLASS_ENTRY PCISubClass_04[];
|
|
PCI_CLASS_ENTRY PCISubClass_05[];
|
|
PCI_CLASS_ENTRY PCISubClass_06[];
|
|
PCI_CLASS_ENTRY PCISubClass_07[];
|
|
PCI_CLASS_ENTRY PCISubClass_08[];
|
|
PCI_CLASS_ENTRY PCISubClass_09[];
|
|
PCI_CLASS_ENTRY PCISubClass_0a[];
|
|
PCI_CLASS_ENTRY PCISubClass_0b[];
|
|
PCI_CLASS_ENTRY PCISubClass_0c[];
|
|
PCI_CLASS_ENTRY PCISubClass_0d[];
|
|
PCI_CLASS_ENTRY PCISubClass_0e[];
|
|
PCI_CLASS_ENTRY PCISubClass_0f[];
|
|
PCI_CLASS_ENTRY PCISubClass_10[];
|
|
PCI_CLASS_ENTRY PCISubClass_11[];
|
|
PCI_CLASS_ENTRY PCISubClass_12[];
|
|
PCI_CLASS_ENTRY PCISubClass_13[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0100[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0101[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0105[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0106[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0107[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0108[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0109[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0300[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0604[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0609[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_060b[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0700[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0701[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0703[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0800[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0801[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0802[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0803[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0904[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c00[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c03[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c07[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0d01[];
|
|
PCI_CLASS_ENTRY PCIPIFClass_0e00[];
|
|
|
|
//
|
|
// Base class strings entries
|
|
//
|
|
PCI_CLASS_ENTRY gClassStringList[] = {
|
|
{
|
|
0x00,
|
|
L"Pre 2.0 device",
|
|
PCISubClass_00
|
|
},
|
|
{
|
|
0x01,
|
|
L"Mass Storage Controller",
|
|
PCISubClass_01
|
|
},
|
|
{
|
|
0x02,
|
|
L"Network Controller",
|
|
PCISubClass_02
|
|
},
|
|
{
|
|
0x03,
|
|
L"Display Controller",
|
|
PCISubClass_03
|
|
},
|
|
{
|
|
0x04,
|
|
L"Multimedia Device",
|
|
PCISubClass_04
|
|
},
|
|
{
|
|
0x05,
|
|
L"Memory Controller",
|
|
PCISubClass_05
|
|
},
|
|
{
|
|
0x06,
|
|
L"Bridge Device",
|
|
PCISubClass_06
|
|
},
|
|
{
|
|
0x07,
|
|
L"Simple Communications Controllers",
|
|
PCISubClass_07
|
|
},
|
|
{
|
|
0x08,
|
|
L"Base System Peripherals",
|
|
PCISubClass_08
|
|
},
|
|
{
|
|
0x09,
|
|
L"Input Devices",
|
|
PCISubClass_09
|
|
},
|
|
{
|
|
0x0a,
|
|
L"Docking Stations",
|
|
PCISubClass_0a
|
|
},
|
|
{
|
|
0x0b,
|
|
L"Processors",
|
|
PCISubClass_0b
|
|
},
|
|
{
|
|
0x0c,
|
|
L"Serial Bus Controllers",
|
|
PCISubClass_0c
|
|
},
|
|
{
|
|
0x0d,
|
|
L"Wireless Controllers",
|
|
PCISubClass_0d
|
|
},
|
|
{
|
|
0x0e,
|
|
L"Intelligent IO Controllers",
|
|
PCISubClass_0e
|
|
},
|
|
{
|
|
0x0f,
|
|
L"Satellite Communications Controllers",
|
|
PCISubClass_0f
|
|
},
|
|
{
|
|
0x10,
|
|
L"Encryption/Decryption Controllers",
|
|
PCISubClass_10
|
|
},
|
|
{
|
|
0x11,
|
|
L"Data Acquisition & Signal Processing Controllers",
|
|
PCISubClass_11
|
|
},
|
|
{
|
|
0x12,
|
|
L"Processing Accelerators",
|
|
PCISubClass_12
|
|
},
|
|
{
|
|
0x13,
|
|
L"Non-Essential Instrumentation",
|
|
PCISubClass_13
|
|
},
|
|
{
|
|
0xff,
|
|
L"Device does not fit in any defined classes",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
//
|
|
// Subclass strings entries
|
|
//
|
|
PCI_CLASS_ENTRY PCIBlankEntry[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_00[] = {
|
|
{
|
|
0x00,
|
|
L"All devices other than VGA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"VGA-compatible devices",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_01[] = {
|
|
{
|
|
0x00,
|
|
L"SCSI",
|
|
PCIPIFClass_0100
|
|
},
|
|
{
|
|
0x01,
|
|
L"IDE controller",
|
|
PCIPIFClass_0101
|
|
},
|
|
{
|
|
0x02,
|
|
L"Floppy disk controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"IPI controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"RAID controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"ATA controller with ADMA interface",
|
|
PCIPIFClass_0105
|
|
},
|
|
{
|
|
0x06,
|
|
L"Serial ATA controller",
|
|
PCIPIFClass_0106
|
|
},
|
|
{
|
|
0x07,
|
|
L"Serial Attached SCSI (SAS) controller ",
|
|
PCIPIFClass_0107
|
|
},
|
|
{
|
|
0x08,
|
|
L"Non-volatile memory subsystem",
|
|
PCIPIFClass_0108
|
|
},
|
|
{
|
|
0x09,
|
|
L"Universal Flash Storage (UFS) controller ",
|
|
PCIPIFClass_0109
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other mass storage controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_02[] = {
|
|
{
|
|
0x00,
|
|
L"Ethernet controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Token ring controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"FDDI controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"ATM controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"ISDN controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"WorldFip controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"PICMG 2.14 Multi Computing",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x07,
|
|
L"InfiniBand controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other network controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_03[] = {
|
|
{
|
|
0x00,
|
|
L"VGA/8514 controller",
|
|
PCIPIFClass_0300
|
|
},
|
|
{
|
|
0x01,
|
|
L"XGA controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"3D controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other display controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */PCIBlankEntry
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_04[] = {
|
|
{
|
|
0x00,
|
|
L"Video device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Audio device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Computer Telephony device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"Mixed mode device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other multimedia device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_05[] = {
|
|
{
|
|
0x00,
|
|
L"RAM memory controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Flash memory controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other memory controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_06[] = {
|
|
{
|
|
0x00,
|
|
L"Host/PCI bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"PCI/ISA bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"PCI/EISA bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"PCI/Micro Channel bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"PCI/PCI bridge",
|
|
PCIPIFClass_0604
|
|
},
|
|
{
|
|
0x05,
|
|
L"PCI/PCMCIA bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"NuBus bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x07,
|
|
L"CardBus bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x08,
|
|
L"RACEway bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x09,
|
|
L"Semi-transparent PCI-to-PCI bridge",
|
|
PCIPIFClass_0609
|
|
},
|
|
{
|
|
0x0A,
|
|
L"InfiniBand-to-PCI host bridge",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0B,
|
|
L"Advanced Switching to PCI host bridge",
|
|
PCIPIFClass_060b
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other bridge type",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_07[] = {
|
|
{
|
|
0x00,
|
|
L"Serial controller",
|
|
PCIPIFClass_0700
|
|
},
|
|
{
|
|
0x01,
|
|
L"Parallel port",
|
|
PCIPIFClass_0701
|
|
},
|
|
{
|
|
0x02,
|
|
L"Multiport serial controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"Modem",
|
|
PCIPIFClass_0703
|
|
},
|
|
{
|
|
0x04,
|
|
L"GPIB (IEEE 488.1/2) controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"Smart Card",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other communication device",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_08[] = {
|
|
{
|
|
0x00,
|
|
L"PIC",
|
|
PCIPIFClass_0800
|
|
},
|
|
{
|
|
0x01,
|
|
L"DMA controller",
|
|
PCIPIFClass_0801
|
|
},
|
|
{
|
|
0x02,
|
|
L"System timer",
|
|
PCIPIFClass_0802
|
|
},
|
|
{
|
|
0x03,
|
|
L"RTC controller",
|
|
PCIPIFClass_0803
|
|
},
|
|
{
|
|
0x04,
|
|
L"Generic PCI Hot-Plug controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"SD Host controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"IOMMU",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x07,
|
|
L"Root Complex Event Collector",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other system peripheral",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_09[] = {
|
|
{
|
|
0x00,
|
|
L"Keyboard controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Digitizer (pen)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Mouse controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"Scanner controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"Gameport controller",
|
|
PCIPIFClass_0904
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other input controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0a[] = {
|
|
{
|
|
0x00,
|
|
L"Generic docking station",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other type of docking station",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0b[] = {
|
|
{
|
|
0x00,
|
|
L"386",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"486",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Pentium",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"Alpha",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x20,
|
|
L"PowerPC",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x30,
|
|
L"MIPS",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x40,
|
|
L"Co-processor",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other processor",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0c[] = {
|
|
{
|
|
0x00,
|
|
L"IEEE 1394",
|
|
PCIPIFClass_0c00
|
|
},
|
|
{
|
|
0x01,
|
|
L"ACCESS.bus",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"SSA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"USB",
|
|
PCIPIFClass_0c03
|
|
},
|
|
{
|
|
0x04,
|
|
L"Fibre Channel",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"System Management Bus",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"InfiniBand",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x07,
|
|
L"IPMI",
|
|
PCIPIFClass_0c07
|
|
},
|
|
{
|
|
0x08,
|
|
L"SERCOS Interface Standard (IEC 61491)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x09,
|
|
L"CANbus",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other bus type",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0d[] = {
|
|
{
|
|
0x00,
|
|
L"iRDA compatible controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"",
|
|
PCIPIFClass_0d01
|
|
},
|
|
{
|
|
0x10,
|
|
L"RF controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x11,
|
|
L"Bluetooth",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x12,
|
|
L"Broadband",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x20,
|
|
L"Ethernet (802.11a - 5 GHz)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x21,
|
|
L"Ethernet (802.11b - 2.4 GHz)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other type of wireless controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0e[] = {
|
|
{
|
|
0x00,
|
|
L"I2O Architecture",
|
|
PCIPIFClass_0e00
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_0f[] = {
|
|
{
|
|
0x01,
|
|
L"TV",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Audio",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"Voice",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"Data",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other satellite communication controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_10[] = {
|
|
{
|
|
0x00,
|
|
L"Network & computing Encrypt/Decrypt",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Entertainment Encrypt/Decrypt",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other Encrypt/Decrypt",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_11[] = {
|
|
{
|
|
0x00,
|
|
L"DPIO modules",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Performance Counters",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"Communications synchronization plus time and frequency test/measurement ",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x20,
|
|
L"Management card",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Other DAQ & SP controllers",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_12[] = {
|
|
{
|
|
0x00,
|
|
L"Processing Accelerator",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCISubClass_13[] = {
|
|
{
|
|
0x00,
|
|
L"Non-Essential Instrumentation Function",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
//
|
|
// Programming Interface entries
|
|
//
|
|
PCI_CLASS_ENTRY PCIPIFClass_0100[] = {
|
|
{
|
|
0x00,
|
|
L"SCSI controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x11,
|
|
L"SCSI storage device SOP using PQI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x12,
|
|
L"SCSI controller SOP using PQI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x13,
|
|
L"SCSI storage device and controller SOP using PQI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x21,
|
|
L"SCSI storage device SOP using NVMe",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0101[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"OM-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"PI-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"OM/PI-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"OM-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"PI-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x07,
|
|
L"OM/PI-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x08,
|
|
L"OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x09,
|
|
L"OM-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0a,
|
|
L"PI-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0b,
|
|
L"OM/PI-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0c,
|
|
L"OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0d,
|
|
L"OM-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0e,
|
|
L"PI-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x0f,
|
|
L"OM/PI-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Master",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x81,
|
|
L"Master, OM-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x82,
|
|
L"Master, PI-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x83,
|
|
L"Master, OM/PI-primary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x84,
|
|
L"Master, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x85,
|
|
L"Master, OM-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x86,
|
|
L"Master, PI-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x87,
|
|
L"Master, OM/PI-primary, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x88,
|
|
L"Master, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x89,
|
|
L"Master, OM-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8a,
|
|
L"Master, PI-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8b,
|
|
L"Master, OM/PI-primary, PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8c,
|
|
L"Master, OM-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8d,
|
|
L"Master, OM-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8e,
|
|
L"Master, PI-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x8f,
|
|
L"Master, OM/PI-primary, OM/PI-secondary",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0105[] = {
|
|
{
|
|
0x20,
|
|
L"Single stepping",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x30,
|
|
L"Continuous operation",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0106[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"AHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Serial Storage Bus",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0107[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Obsolete",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0108[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"NVMHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"NVM Express",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0109[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"UFSHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0300[] = {
|
|
{
|
|
0x00,
|
|
L"VGA compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"8514 compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0604[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Subtractive decode",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0609[] = {
|
|
{
|
|
0x40,
|
|
L"Primary PCI bus side facing the system host processor",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"Secondary PCI bus side facing the system host processor",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_060b[] = {
|
|
{
|
|
0x00,
|
|
L"Custom",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"ASI-SIG Defined Portal",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0700[] = {
|
|
{
|
|
0x00,
|
|
L"Generic XT-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"16450-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"16550-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"16650-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"16750-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x05,
|
|
L"16850-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x06,
|
|
L"16950-compatible",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0701[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Bi-directional",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"ECP 1.X-compliant",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"IEEE 1284",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0xfe,
|
|
L"IEEE 1284 target (not a controller)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0703[] = {
|
|
{
|
|
0x00,
|
|
L"Generic",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Hayes-compatible 16450",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Hayes-compatible 16550",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x03,
|
|
L"Hayes-compatible 16650",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x04,
|
|
L"Hayes-compatible 16750",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0800[] = {
|
|
{
|
|
0x00,
|
|
L"Generic 8259",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"ISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"EISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"IO APIC",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x20,
|
|
L"IO(x) APIC interrupt controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0801[] = {
|
|
{
|
|
0x00,
|
|
L"Generic 8237",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"ISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"EISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0802[] = {
|
|
{
|
|
0x00,
|
|
L"Generic 8254",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"ISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"EISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0803[] = {
|
|
{
|
|
0x00,
|
|
L"Generic",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"ISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"EISA",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0904[] = {
|
|
{
|
|
0x00,
|
|
L"Generic",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c00[] = {
|
|
{
|
|
0x00,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"Using 1394 OpenHCI spec",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c03[] = {
|
|
{
|
|
0x00,
|
|
L"UHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"OHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x20,
|
|
L"EHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x30,
|
|
L"xHCI",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x80,
|
|
L"No specific programming interface",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0xfe,
|
|
L"(Not Host Controller)",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0c07[] = {
|
|
{
|
|
0x00,
|
|
L"SMIC",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"Keyboard Controller Style",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x02,
|
|
L"Block Transfer",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0d01[] = {
|
|
{
|
|
0x00,
|
|
L"Consumer IR controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x10,
|
|
L"UWB Radio controller",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
PCI_CLASS_ENTRY PCIPIFClass_0e00[] = {
|
|
{
|
|
0x00,
|
|
L"Message FIFO at offset 40h",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x01,
|
|
L"",
|
|
PCIBlankEntry
|
|
},
|
|
{
|
|
0x00,
|
|
NULL,
|
|
/* null string ends the list */NULL
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
Generates printable Unicode strings that represent PCI device class,
|
|
subclass and programmed I/F based on a value passed to the function.
|
|
|
|
@param[in] ClassCode Value representing the PCI "Class Code" register read from a
|
|
PCI device. The encodings are:
|
|
bits 23:16 - Base Class Code
|
|
bits 15:8 - Sub-Class Code
|
|
bits 7:0 - Programming Interface
|
|
@param[in, out] ClassStrings Pointer of PCI_CLASS_STRINGS structure, which contains
|
|
printable class strings corresponding to ClassCode. The
|
|
caller must not modify the strings that are pointed by
|
|
the fields in ClassStrings.
|
|
**/
|
|
VOID
|
|
PciGetClassStrings (
|
|
IN UINT32 ClassCode,
|
|
IN OUT PCI_CLASS_STRINGS *ClassStrings
|
|
)
|
|
{
|
|
INTN Index;
|
|
UINT8 Code;
|
|
PCI_CLASS_ENTRY *CurrentClass;
|
|
|
|
//
|
|
// Assume no strings found
|
|
//
|
|
ClassStrings->BaseClass = L"UNDEFINED";
|
|
ClassStrings->SubClass = L"UNDEFINED";
|
|
ClassStrings->PIFClass = L"UNDEFINED";
|
|
|
|
CurrentClass = gClassStringList;
|
|
Code = (UINT8) (ClassCode >> 16);
|
|
Index = 0;
|
|
|
|
//
|
|
// Go through all entries of the base class, until the entry with a matching
|
|
// base class code is found. If reaches an entry with a null description
|
|
// text, the last entry is met, which means no text for the base class was
|
|
// found, so no more action is needed.
|
|
//
|
|
while (Code != CurrentClass[Index].Code) {
|
|
if (NULL == CurrentClass[Index].DescText) {
|
|
return ;
|
|
}
|
|
|
|
Index++;
|
|
}
|
|
//
|
|
// A base class was found. Assign description, and check if this class has
|
|
// sub-class defined. If sub-class defined, no more action is needed,
|
|
// otherwise, continue to find description for the sub-class code.
|
|
//
|
|
ClassStrings->BaseClass = CurrentClass[Index].DescText;
|
|
if (NULL == CurrentClass[Index].LowerLevelClass) {
|
|
return ;
|
|
}
|
|
//
|
|
// find Subclass entry
|
|
//
|
|
CurrentClass = CurrentClass[Index].LowerLevelClass;
|
|
Code = (UINT8) (ClassCode >> 8);
|
|
Index = 0;
|
|
|
|
//
|
|
// Go through all entries of the sub-class, until the entry with a matching
|
|
// sub-class code is found. If reaches an entry with a null description
|
|
// text, the last entry is met, which means no text for the sub-class was
|
|
// found, so no more action is needed.
|
|
//
|
|
while (Code != CurrentClass[Index].Code) {
|
|
if (NULL == CurrentClass[Index].DescText) {
|
|
return ;
|
|
}
|
|
|
|
Index++;
|
|
}
|
|
//
|
|
// A class was found for the sub-class code. Assign description, and check if
|
|
// this sub-class has programming interface defined. If no, no more action is
|
|
// needed, otherwise, continue to find description for the programming
|
|
// interface.
|
|
//
|
|
ClassStrings->SubClass = CurrentClass[Index].DescText;
|
|
if (NULL == CurrentClass[Index].LowerLevelClass) {
|
|
return ;
|
|
}
|
|
//
|
|
// Find programming interface entry
|
|
//
|
|
CurrentClass = CurrentClass[Index].LowerLevelClass;
|
|
Code = (UINT8) ClassCode;
|
|
Index = 0;
|
|
|
|
//
|
|
// Go through all entries of the I/F entries, until the entry with a
|
|
// matching I/F code is found. If reaches an entry with a null description
|
|
// text, the last entry is met, which means no text was found, so no more
|
|
// action is needed.
|
|
//
|
|
while (Code != CurrentClass[Index].Code) {
|
|
if (NULL == CurrentClass[Index].DescText) {
|
|
return ;
|
|
}
|
|
|
|
Index++;
|
|
}
|
|
//
|
|
// A class was found for the I/F code. Assign description, done!
|
|
//
|
|
ClassStrings->PIFClass = CurrentClass[Index].DescText;
|
|
return ;
|
|
}
|