1*c2e0c6b5SAndroid Build Coastguard Worker /*
2*c2e0c6b5SAndroid Build Coastguard Worker * The PCI Library -- ID to Name Translation
3*c2e0c6b5SAndroid Build Coastguard Worker *
4*c2e0c6b5SAndroid Build Coastguard Worker * Copyright (c) 1997--2014 Martin Mares <[email protected]>
5*c2e0c6b5SAndroid Build Coastguard Worker *
6*c2e0c6b5SAndroid Build Coastguard Worker * Can be freely distributed and used under the terms of the GNU GPL v2+
7*c2e0c6b5SAndroid Build Coastguard Worker *
8*c2e0c6b5SAndroid Build Coastguard Worker * SPDX-License-Identifier: GPL-2.0-or-later
9*c2e0c6b5SAndroid Build Coastguard Worker */
10*c2e0c6b5SAndroid Build Coastguard Worker
11*c2e0c6b5SAndroid Build Coastguard Worker #define MAX_LINE 1024
12*c2e0c6b5SAndroid Build Coastguard Worker
13*c2e0c6b5SAndroid Build Coastguard Worker /* names-hash.c */
14*c2e0c6b5SAndroid Build Coastguard Worker
15*c2e0c6b5SAndroid Build Coastguard Worker struct id_entry {
16*c2e0c6b5SAndroid Build Coastguard Worker struct id_entry *next;
17*c2e0c6b5SAndroid Build Coastguard Worker u32 id12, id34;
18*c2e0c6b5SAndroid Build Coastguard Worker byte cat;
19*c2e0c6b5SAndroid Build Coastguard Worker byte src;
20*c2e0c6b5SAndroid Build Coastguard Worker char name[1];
21*c2e0c6b5SAndroid Build Coastguard Worker };
22*c2e0c6b5SAndroid Build Coastguard Worker
23*c2e0c6b5SAndroid Build Coastguard Worker enum id_entry_type {
24*c2e0c6b5SAndroid Build Coastguard Worker ID_UNKNOWN,
25*c2e0c6b5SAndroid Build Coastguard Worker ID_VENDOR,
26*c2e0c6b5SAndroid Build Coastguard Worker ID_DEVICE,
27*c2e0c6b5SAndroid Build Coastguard Worker ID_SUBSYSTEM,
28*c2e0c6b5SAndroid Build Coastguard Worker ID_GEN_SUBSYSTEM,
29*c2e0c6b5SAndroid Build Coastguard Worker ID_CLASS,
30*c2e0c6b5SAndroid Build Coastguard Worker ID_SUBCLASS,
31*c2e0c6b5SAndroid Build Coastguard Worker ID_PROGIF
32*c2e0c6b5SAndroid Build Coastguard Worker };
33*c2e0c6b5SAndroid Build Coastguard Worker
34*c2e0c6b5SAndroid Build Coastguard Worker enum id_entry_src {
35*c2e0c6b5SAndroid Build Coastguard Worker SRC_UNKNOWN,
36*c2e0c6b5SAndroid Build Coastguard Worker SRC_CACHE,
37*c2e0c6b5SAndroid Build Coastguard Worker SRC_NET,
38*c2e0c6b5SAndroid Build Coastguard Worker SRC_HWDB,
39*c2e0c6b5SAndroid Build Coastguard Worker SRC_LOCAL,
40*c2e0c6b5SAndroid Build Coastguard Worker };
41*c2e0c6b5SAndroid Build Coastguard Worker
42*c2e0c6b5SAndroid Build Coastguard Worker #define BUCKET_SIZE 8192
43*c2e0c6b5SAndroid Build Coastguard Worker #define HASH_SIZE 4099
44*c2e0c6b5SAndroid Build Coastguard Worker
id_pair(unsigned int x,unsigned int y)45*c2e0c6b5SAndroid Build Coastguard Worker static inline u32 id_pair(unsigned int x, unsigned int y)
46*c2e0c6b5SAndroid Build Coastguard Worker {
47*c2e0c6b5SAndroid Build Coastguard Worker return ((x << 16) | y);
48*c2e0c6b5SAndroid Build Coastguard Worker }
49*c2e0c6b5SAndroid Build Coastguard Worker
pair_first(unsigned int x)50*c2e0c6b5SAndroid Build Coastguard Worker static inline unsigned int pair_first(unsigned int x)
51*c2e0c6b5SAndroid Build Coastguard Worker {
52*c2e0c6b5SAndroid Build Coastguard Worker return (x >> 16) & 0xffff;
53*c2e0c6b5SAndroid Build Coastguard Worker }
54*c2e0c6b5SAndroid Build Coastguard Worker
pair_second(unsigned int x)55*c2e0c6b5SAndroid Build Coastguard Worker static inline unsigned int pair_second(unsigned int x)
56*c2e0c6b5SAndroid Build Coastguard Worker {
57*c2e0c6b5SAndroid Build Coastguard Worker return x & 0xffff;
58*c2e0c6b5SAndroid Build Coastguard Worker }
59*c2e0c6b5SAndroid Build Coastguard Worker
60*c2e0c6b5SAndroid Build Coastguard Worker int pci_id_insert(struct pci_access *a, int cat, int id1, int id2, int id3, int id4, char *text, enum id_entry_src src);
61*c2e0c6b5SAndroid Build Coastguard Worker char *pci_id_lookup(struct pci_access *a, int flags, int cat, int id1, int id2, int id3, int id4);
62*c2e0c6b5SAndroid Build Coastguard Worker
63*c2e0c6b5SAndroid Build Coastguard Worker /* names-cache.c */
64*c2e0c6b5SAndroid Build Coastguard Worker
65*c2e0c6b5SAndroid Build Coastguard Worker int pci_id_cache_load(struct pci_access *a, int flags);
66*c2e0c6b5SAndroid Build Coastguard Worker void pci_id_cache_dirty(struct pci_access *a);
67*c2e0c6b5SAndroid Build Coastguard Worker void pci_id_cache_flush(struct pci_access *a);
68*c2e0c6b5SAndroid Build Coastguard Worker void pci_id_hash_free(struct pci_access *a);
69*c2e0c6b5SAndroid Build Coastguard Worker
70*c2e0c6b5SAndroid Build Coastguard Worker /* names-dns.c */
71*c2e0c6b5SAndroid Build Coastguard Worker
72*c2e0c6b5SAndroid Build Coastguard Worker char *pci_id_net_lookup(struct pci_access *a, int cat, int id1, int id2, int id3, int id4);
73*c2e0c6b5SAndroid Build Coastguard Worker
74*c2e0c6b5SAndroid Build Coastguard Worker /* names-hwdb.c */
75*c2e0c6b5SAndroid Build Coastguard Worker
76*c2e0c6b5SAndroid Build Coastguard Worker char *pci_id_hwdb_lookup(struct pci_access *a, int cat, int id1, int id2, int id3, int id4);
77*c2e0c6b5SAndroid Build Coastguard Worker void pci_id_hwdb_free(struct pci_access *a);
78