1/* 2 * Copyright (C) 2018 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23#include "intel_chipset.h" 24 25#include <inttypes.h> 26#include <stdbool.h> 27 28#include "i915_pciids.h" 29 30#undef INTEL_VGA_DEVICE 31#define INTEL_VGA_DEVICE(id, gen) { id, gen } 32 33static const struct pci_device { 34 uint16_t device; 35 uint16_t gen; 36} pciids[] = { 37 /* Keep ids sorted by gen; latest gen first */ 38 INTEL_ADLN_IDS(12), 39 INTEL_RPLP_IDS(12), 40 INTEL_ADLP_IDS(12), 41 INTEL_RPLS_IDS(12), 42 INTEL_ADLS_IDS(12), 43 INTEL_RKL_IDS(12), 44 INTEL_DG1_IDS(12), 45 INTEL_TGL_12_IDS(12), 46 INTEL_JSL_IDS(11), 47 INTEL_EHL_IDS(11), 48 INTEL_ICL_11_IDS(11), 49 INTEL_CNL_IDS(10), 50 INTEL_CFL_IDS(9), 51 INTEL_GLK_IDS(9), 52 INTEL_KBL_IDS(9), 53 INTEL_BXT_IDS(9), 54 INTEL_SKL_IDS(9), 55}; 56 57drm_private bool intel_is_genx(unsigned int devid, int gen) 58{ 59 const struct pci_device *p, 60 *pend = pciids + sizeof(pciids) / sizeof(pciids[0]); 61 62 for (p = pciids; p < pend; p++) { 63 /* PCI IDs are sorted */ 64 if (p->gen < gen) 65 break; 66 67 if (p->device != devid) 68 continue; 69 70 if (gen == p->gen) 71 return true; 72 73 break; 74 } 75 76 return false; 77} 78 79drm_private bool intel_get_genx(unsigned int devid, int *gen) 80{ 81 const struct pci_device *p, 82 *pend = pciids + sizeof(pciids) / sizeof(pciids[0]); 83 84 for (p = pciids; p < pend; p++) { 85 if (p->device != devid) 86 continue; 87 88 if (gen) 89 *gen = p->gen; 90 91 return true; 92 } 93 94 return false; 95} 96