pci.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __ASM_S390_PCI_H
  3. #define __ASM_S390_PCI_H
  4. #include <linux/pci.h>
  5. #include <linux/mutex.h>
  6. #include <linux/iommu.h>
  7. #include <linux/pci_hotplug.h>
  8. #include <asm/pci_clp.h>
  9. #include <asm/pci_debug.h>
  10. #include <asm/pci_insn.h>
  11. #include <asm/sclp.h>
  12. #define PCIBIOS_MIN_IO 0x1000
  13. #define PCIBIOS_MIN_MEM 0x10000000
  14. #define pcibios_assign_all_busses() (0)
  15. void __iomem *pci_iomap(struct pci_dev *, int, unsigned long);
  16. void pci_iounmap(struct pci_dev *, void __iomem *);
  17. int pci_domain_nr(struct pci_bus *);
  18. int pci_proc_domain(struct pci_bus *);
  19. #define ZPCI_BUS_NR 0 /* default bus number */
  20. #define ZPCI_NR_DMA_SPACES 1
  21. #define ZPCI_NR_DEVICES CONFIG_PCI_NR_FUNCTIONS
  22. #define ZPCI_DOMAIN_BITMAP_SIZE (1 << 16)
  23. #ifdef PCI
  24. #if (ZPCI_NR_DEVICES > ZPCI_DOMAIN_BITMAP_SIZE)
  25. # error ZPCI_NR_DEVICES can not be bigger than ZPCI_DOMAIN_BITMAP_SIZE
  26. #endif
  27. #endif /* PCI */
  28. /* PCI Function Controls */
  29. #define ZPCI_FC_FN_ENABLED 0x80
  30. #define ZPCI_FC_ERROR 0x40
  31. #define ZPCI_FC_BLOCKED 0x20
  32. #define ZPCI_FC_DMA_ENABLED 0x10
  33. #define ZPCI_FMB_DMA_COUNTER_VALID (1 << 23)
  34. struct zpci_fmb_fmt0 {
  35. u64 dma_rbytes;
  36. u64 dma_wbytes;
  37. };
  38. struct zpci_fmb_fmt1 {
  39. u64 rx_bytes;
  40. u64 rx_packets;
  41. u64 tx_bytes;
  42. u64 tx_packets;
  43. };
  44. struct zpci_fmb_fmt2 {
  45. u64 consumed_work_units;
  46. u64 max_work_units;
  47. };
  48. struct zpci_fmb_fmt3 {
  49. u64 tx_bytes;
  50. };
  51. struct zpci_fmb {
  52. u32 format : 8;
  53. u32 fmt_ind : 24;
  54. u32 samples;
  55. u64 last_update;
  56. /* common counters */
  57. u64 ld_ops;
  58. u64 st_ops;
  59. u64 stb_ops;
  60. u64 rpcit_ops;
  61. /* format specific counters */
  62. union {
  63. struct zpci_fmb_fmt0 fmt0;
  64. struct zpci_fmb_fmt1 fmt1;
  65. struct zpci_fmb_fmt2 fmt2;
  66. struct zpci_fmb_fmt3 fmt3;
  67. };
  68. } __packed __aligned(128);
  69. enum zpci_state {
  70. ZPCI_FN_STATE_STANDBY = 0,
  71. ZPCI_FN_STATE_CONFIGURED = 1,
  72. ZPCI_FN_STATE_RESERVED = 2,
  73. };
  74. struct zpci_bar_struct {
  75. struct resource *res; /* bus resource */
  76. void __iomem *mio_wb;
  77. void __iomem *mio_wt;
  78. u32 val; /* bar start & 3 flag bits */
  79. u16 map_idx; /* index into bar mapping array */
  80. u8 size; /* order 2 exponent */
  81. };
  82. struct s390_domain;
  83. struct kvm_zdev;
  84. #define ZPCI_FUNCTIONS_PER_BUS 256
  85. struct zpci_bus {
  86. struct kref kref;
  87. struct pci_bus *bus;
  88. struct zpci_dev *function[ZPCI_FUNCTIONS_PER_BUS];
  89. struct list_head resources;
  90. struct list_head bus_next;
  91. struct resource bus_resource;
  92. int pchid;
  93. int domain_nr;
  94. bool multifunction;
  95. enum pci_bus_speed max_bus_speed;
  96. };
  97. /* Private data per function */
  98. struct zpci_dev {
  99. struct zpci_bus *zbus;
  100. struct list_head entry; /* list of all zpci_devices, needed for hotplug, etc. */
  101. struct kref kref;
  102. struct hotplug_slot hotplug_slot;
  103. enum zpci_state state;
  104. u32 fid; /* function ID, used by sclp */
  105. u32 fh; /* function handle, used by insn's */
  106. u32 gisa; /* GISA designation for passthrough */
  107. u16 vfn; /* virtual function number */
  108. u16 pchid; /* physical channel ID */
  109. u16 maxstbl; /* Maximum store block size */
  110. u8 pfgid; /* function group ID */
  111. u8 pft; /* pci function type */
  112. u8 port;
  113. u8 dtsm; /* Supported DT mask */
  114. u8 rid_available : 1;
  115. u8 has_hp_slot : 1;
  116. u8 has_resources : 1;
  117. u8 is_physfn : 1;
  118. u8 util_str_avail : 1;
  119. u8 irqs_registered : 1;
  120. u8 reserved : 2;
  121. unsigned int devfn; /* DEVFN part of the RID*/
  122. struct mutex lock;
  123. u8 pfip[CLP_PFIP_NR_SEGMENTS]; /* pci function internal path */
  124. u32 uid; /* user defined id */
  125. u8 util_str[CLP_UTIL_STR_LEN]; /* utility string */
  126. /* IRQ stuff */
  127. u64 msi_addr; /* MSI address */
  128. unsigned int max_msi; /* maximum number of MSI's */
  129. unsigned int msi_first_bit;
  130. unsigned int msi_nr_irqs;
  131. struct airq_iv *aibv; /* adapter interrupt bit vector */
  132. unsigned long aisb; /* number of the summary bit */
  133. /* DMA stuff */
  134. unsigned long *dma_table;
  135. spinlock_t dma_table_lock;
  136. int tlb_refresh;
  137. spinlock_t iommu_bitmap_lock;
  138. unsigned long *iommu_bitmap;
  139. unsigned long *lazy_bitmap;
  140. unsigned long iommu_size;
  141. unsigned long iommu_pages;
  142. unsigned int next_bit;
  143. struct iommu_device iommu_dev; /* IOMMU core handle */
  144. char res_name[16];
  145. bool mio_capable;
  146. struct zpci_bar_struct bars[PCI_STD_NUM_BARS];
  147. u64 start_dma; /* Start of available DMA addresses */
  148. u64 end_dma; /* End of available DMA addresses */
  149. u64 dma_mask; /* DMA address space mask */
  150. /* Function measurement block */
  151. struct zpci_fmb *fmb;
  152. u16 fmb_update; /* update interval */
  153. u16 fmb_length;
  154. /* software counters */
  155. atomic64_t allocated_pages;
  156. atomic64_t mapped_pages;
  157. atomic64_t unmapped_pages;
  158. u8 version;
  159. enum pci_bus_speed max_bus_speed;
  160. struct dentry *debugfs_dev;
  161. /* IOMMU and passthrough */
  162. struct s390_domain *s390_domain; /* s390 IOMMU domain data */
  163. struct kvm_zdev *kzdev;
  164. struct mutex kzdev_lock;
  165. };
  166. static inline bool zdev_enabled(struct zpci_dev *zdev)
  167. {
  168. return (zdev->fh & (1UL << 31)) ? true : false;
  169. }
  170. extern const struct attribute_group *zpci_attr_groups[];
  171. extern unsigned int s390_pci_force_floating __initdata;
  172. extern unsigned int s390_pci_no_rid;
  173. extern union zpci_sic_iib *zpci_aipb;
  174. extern struct airq_iv *zpci_aif_sbv;
  175. /* -----------------------------------------------------------------------------
  176. Prototypes
  177. ----------------------------------------------------------------------------- */
  178. /* Base stuff */
  179. struct zpci_dev *zpci_create_device(u32 fid, u32 fh, enum zpci_state state);
  180. int zpci_enable_device(struct zpci_dev *);
  181. int zpci_disable_device(struct zpci_dev *);
  182. int zpci_scan_configured_device(struct zpci_dev *zdev, u32 fh);
  183. int zpci_deconfigure_device(struct zpci_dev *zdev);
  184. void zpci_device_reserved(struct zpci_dev *zdev);
  185. bool zpci_is_device_configured(struct zpci_dev *zdev);
  186. int zpci_hot_reset_device(struct zpci_dev *zdev);
  187. int zpci_register_ioat(struct zpci_dev *, u8, u64, u64, u64);
  188. int zpci_unregister_ioat(struct zpci_dev *, u8);
  189. void zpci_remove_reserved_devices(void);
  190. void zpci_update_fh(struct zpci_dev *zdev, u32 fh);
  191. /* CLP */
  192. int clp_setup_writeback_mio(void);
  193. int clp_scan_pci_devices(void);
  194. int clp_query_pci_fn(struct zpci_dev *zdev);
  195. int clp_enable_fh(struct zpci_dev *zdev, u32 *fh, u8 nr_dma_as);
  196. int clp_disable_fh(struct zpci_dev *zdev, u32 *fh);
  197. int clp_get_state(u32 fid, enum zpci_state *state);
  198. int clp_refresh_fh(u32 fid, u32 *fh);
  199. /* UID */
  200. void update_uid_checking(bool new);
  201. /* IOMMU Interface */
  202. int zpci_init_iommu(struct zpci_dev *zdev);
  203. void zpci_destroy_iommu(struct zpci_dev *zdev);
  204. #ifdef CONFIG_PCI
  205. static inline bool zpci_use_mio(struct zpci_dev *zdev)
  206. {
  207. return static_branch_likely(&have_mio) && zdev->mio_capable;
  208. }
  209. /* Error handling and recovery */
  210. void zpci_event_error(void *);
  211. void zpci_event_availability(void *);
  212. bool zpci_is_enabled(void);
  213. #else /* CONFIG_PCI */
  214. static inline void zpci_event_error(void *e) {}
  215. static inline void zpci_event_availability(void *e) {}
  216. #endif /* CONFIG_PCI */
  217. #ifdef CONFIG_HOTPLUG_PCI_S390
  218. int zpci_init_slot(struct zpci_dev *);
  219. void zpci_exit_slot(struct zpci_dev *);
  220. #else /* CONFIG_HOTPLUG_PCI_S390 */
  221. static inline int zpci_init_slot(struct zpci_dev *zdev)
  222. {
  223. return 0;
  224. }
  225. static inline void zpci_exit_slot(struct zpci_dev *zdev) {}
  226. #endif /* CONFIG_HOTPLUG_PCI_S390 */
  227. /* Helpers */
  228. static inline struct zpci_dev *to_zpci(struct pci_dev *pdev)
  229. {
  230. struct zpci_bus *zbus = pdev->sysdata;
  231. return zbus->function[pdev->devfn];
  232. }
  233. static inline struct zpci_dev *to_zpci_dev(struct device *dev)
  234. {
  235. return to_zpci(to_pci_dev(dev));
  236. }
  237. struct zpci_dev *get_zdev_by_fid(u32);
  238. /* DMA */
  239. int zpci_dma_init(void);
  240. void zpci_dma_exit(void);
  241. int zpci_dma_init_device(struct zpci_dev *zdev);
  242. int zpci_dma_exit_device(struct zpci_dev *zdev);
  243. /* IRQ */
  244. int __init zpci_irq_init(void);
  245. void __init zpci_irq_exit(void);
  246. /* FMB */
  247. int zpci_fmb_enable_device(struct zpci_dev *);
  248. int zpci_fmb_disable_device(struct zpci_dev *);
  249. /* Debug */
  250. int zpci_debug_init(void);
  251. void zpci_debug_exit(void);
  252. void zpci_debug_init_device(struct zpci_dev *, const char *);
  253. void zpci_debug_exit_device(struct zpci_dev *);
  254. /* Error handling */
  255. int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *);
  256. int zpci_clear_error_state(struct zpci_dev *zdev);
  257. int zpci_reset_load_store_blocked(struct zpci_dev *zdev);
  258. #ifdef CONFIG_NUMA
  259. /* Returns the node based on PCI bus */
  260. static inline int __pcibus_to_node(const struct pci_bus *bus)
  261. {
  262. return NUMA_NO_NODE;
  263. }
  264. static inline const struct cpumask *
  265. cpumask_of_pcibus(const struct pci_bus *bus)
  266. {
  267. return cpu_online_mask;
  268. }
  269. #endif /* CONFIG_NUMA */
  270. #endif