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 8enum nvkm_pcie_speed { 9 NVKM_PCIE_SPEED_2_5, 10 NVKM_PCIE_SPEED_5_0, 11 NVKM_PCIE_SPEED_8_0, 12}; 13 14struct 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 43u32 nvkm_pci_rd32(struct nvkm_pci *, u16 addr); 44void nvkm_pci_wr08(struct nvkm_pci *, u16 addr, u8 data); 45void nvkm_pci_wr32(struct nvkm_pci *, u16 addr, u32 data); 46u32 nvkm_pci_mask(struct nvkm_pci *, u16 addr, u32 mask, u32 value); 47void nvkm_pci_rom_shadow(struct nvkm_pci *, bool shadow); 48 49int nv04_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 50int nv40_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 51int nv46_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 52int nv4c_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 53int g84_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 54int g92_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 55int g94_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 56int gf100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 57int gf106_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 58int gk104_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 59int gp100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); 60 61/* pcie functions */ 62int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); 63#endif 64