1 /* $NetBSD: pci.h,v 1.3 2021/12/18 23:45:33 riastradh Exp $ */ 2 3 /* SPDX-License-Identifier: MIT */ 4 #ifndef __NVKM_PCI_H__ 5 #define __NVKM_PCI_H__ 6 #include <core/subdev.h> 7 8 enum nvkm_pcie_speed { 9 NVKM_PCIE_SPEED_2_5, 10 NVKM_PCIE_SPEED_5_0, 11 NVKM_PCIE_SPEED_8_0, 12 }; 13 14 struct nvkm_pci { 15 const struct nvkm_pci_func *func; 16 struct nvkm_subdev subdev; 17 struct pci_dev *pdev; 18 #ifdef __NetBSD__ 19 pci_intr_handle_t *pci_ihp; 20 void *pci_intrcookie; 21 #else 22 int irq; 23 #endif 24 25 struct { 26 struct agp_bridge_data *bridge; 27 u32 mode; 28 u64 base; 29 u64 size; 30 int mtrr; 31 bool cma; 32 bool acquired; 33 } agp; 34 35 struct { 36 enum nvkm_pcie_speed speed; 37 u8 width; 38 } pcie; 39 40 bool msi; 41 }; 42 43 u32 nvkm_pci_rd32(struct nvkm_pci *, u16 addr); 44 void nvkm_pci_wr08(struct nvkm_pci *, u16 addr, u8 data); 45 void nvkm_pci_wr32(struct nvkm_pci *, u16 addr, u32 data); 46 u32 nvkm_pci_mask(struct nvkm_pci *, u16 addr, u32 mask, u32 value); 47 void nvkm_pci_rom_shadow(struct nvkm_pci *, bool shadow); 48 49 int nv04_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 50 int nv40_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 51 int nv46_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 52 int nv4c_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 53 int g84_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 54 int g92_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 55 int g94_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 56 int gf100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 57 int gf106_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 58 int gk104_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 59 int gp100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 60 61 /* pcie functions */ 62 int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); 63 #endif 64