xref: /aosp_15_r20/external/mesa3d/src/nouveau/headers/nv_device_info.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 #ifndef NV_DEVINFO_H
2 #define NV_DEVINFO_H
3 
4 #include <stdbool.h>
5 #include <string.h>
6 
7 #include "util/macros.h"
8 
9 #define NVIDIA_VENDOR_ID 0x10de
10 
11 enum ENUM_PACKED nv_device_type {
12    NV_DEVICE_TYPE_IGP,
13    NV_DEVICE_TYPE_DIS,
14    NV_DEVICE_TYPE_SOC,
15 };
16 
17 struct nv_device_info {
18    enum nv_device_type type;
19 
20    uint16_t device_id;
21    uint16_t chipset;
22 
23    char device_name[64];
24    char chipset_name[16];
25 
26    /* Populated if type != NV_DEVICE_TYPE_SOC */
27    struct {
28       uint16_t domain;
29       uint8_t bus;
30       uint8_t dev;
31       uint8_t func;
32       uint8_t revision_id;
33    } pci;
34 
35    uint8_t sm; /**< Shader model */
36 
37    uint8_t gpc_count;
38    uint16_t tpc_count;
39    uint8_t mp_per_tpc;
40    uint8_t max_warps_per_mp;
41 
42    uint16_t cls_copy;
43    uint16_t cls_eng2d;
44    uint16_t cls_eng3d;
45    uint16_t cls_m2mf;
46    uint16_t cls_compute;
47 
48    uint64_t vram_size_B;
49    uint64_t bar_size_B;
50 };
51 
52 static inline void
nv_device_uuid(const struct nv_device_info * info,uint8_t * uuid,size_t len,bool vm_bind)53 nv_device_uuid(const struct nv_device_info *info, uint8_t *uuid, size_t len, bool vm_bind)
54 {
55    uint16_t vendor_id = NVIDIA_VENDOR_ID;
56 
57    assert(len >= 16);
58 
59    memset(uuid, 0, len);
60    memcpy(&uuid[0], &info->chipset, 2);
61    memcpy(&uuid[2], &vendor_id, 2);
62    memcpy(&uuid[4], &info->device_id, 2);
63 
64    if (info->type != NV_DEVICE_TYPE_SOC) {
65       memcpy(&uuid[6], &info->pci.domain, 2);
66       uuid[8]  = info->pci.bus;
67       uuid[9]  = info->pci.dev;
68       uuid[10] = info->pci.func;
69    }
70    uuid[11] = vm_bind;
71 }
72 
73 #endif /* NV_DEVINFO_H */
74