pci_clp.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _ASM_S390_PCI_CLP_H
  3. #define _ASM_S390_PCI_CLP_H
  4. #include <asm/clp.h>
  5. /*
  6. * Call Logical Processor - Command Codes
  7. */
  8. #define CLP_SLPC 0x0001
  9. #define CLP_LIST_PCI 0x0002
  10. #define CLP_QUERY_PCI_FN 0x0003
  11. #define CLP_QUERY_PCI_FNGRP 0x0004
  12. #define CLP_SET_PCI_FN 0x0005
  13. /* PCI function handle list entry */
  14. struct clp_fh_list_entry {
  15. u16 device_id;
  16. u16 vendor_id;
  17. u32 config_state : 1;
  18. u32 : 31;
  19. u32 fid; /* PCI function id */
  20. u32 fh; /* PCI function handle */
  21. } __packed;
  22. #define CLP_RC_SETPCIFN_FH 0x0101 /* Invalid PCI fn handle */
  23. #define CLP_RC_SETPCIFN_FHOP 0x0102 /* Fn handle not valid for op */
  24. #define CLP_RC_SETPCIFN_DMAAS 0x0103 /* Invalid DMA addr space */
  25. #define CLP_RC_SETPCIFN_RES 0x0104 /* Insufficient resources */
  26. #define CLP_RC_SETPCIFN_ALRDY 0x0105 /* Fn already in requested state */
  27. #define CLP_RC_SETPCIFN_ERR 0x0106 /* Fn in permanent error state */
  28. #define CLP_RC_SETPCIFN_RECPND 0x0107 /* Error recovery pending */
  29. #define CLP_RC_SETPCIFN_BUSY 0x0108 /* Fn busy */
  30. #define CLP_RC_LISTPCI_BADRT 0x010a /* Resume token not recognized */
  31. #define CLP_RC_QUERYPCIFG_PFGID 0x010b /* Unrecognized PFGID */
  32. /* request or response block header length */
  33. #define LIST_PCI_HDR_LEN 32
  34. /* Number of function handles fitting in response block */
  35. #define CLP_FH_LIST_NR_ENTRIES \
  36. ((CLP_BLK_SIZE - 2 * LIST_PCI_HDR_LEN) \
  37. / sizeof(struct clp_fh_list_entry))
  38. #define CLP_SET_ENABLE_PCI_FN 0 /* Yes, 0 enables it */
  39. #define CLP_SET_DISABLE_PCI_FN 1 /* Yes, 1 disables it */
  40. #define CLP_SET_ENABLE_MIO 2
  41. #define CLP_SET_DISABLE_MIO 3
  42. #define CLP_UTIL_STR_LEN 64
  43. #define CLP_PFIP_NR_SEGMENTS 4
  44. /* PCI function type numbers */
  45. #define PCI_FUNC_TYPE_ISM 0x5 /* ISM device */
  46. extern bool zpci_unique_uid;
  47. struct clp_rsp_slpc_pci {
  48. struct clp_rsp_hdr hdr;
  49. u32 reserved2[4];
  50. u32 lpif[8];
  51. u32 reserved3[4];
  52. u32 vwb : 1;
  53. u32 : 1;
  54. u32 mio_wb : 6;
  55. u32 : 24;
  56. u32 reserved5[3];
  57. u32 lpic[8];
  58. } __packed;
  59. /* List PCI functions request */
  60. struct clp_req_list_pci {
  61. struct clp_req_hdr hdr;
  62. u64 resume_token;
  63. u64 reserved2;
  64. } __packed;
  65. /* List PCI functions response */
  66. struct clp_rsp_list_pci {
  67. struct clp_rsp_hdr hdr;
  68. u64 resume_token;
  69. u32 reserved2;
  70. u16 max_fn;
  71. u8 : 7;
  72. u8 uid_checking : 1;
  73. u8 entry_size;
  74. struct clp_fh_list_entry fh_list[CLP_FH_LIST_NR_ENTRIES];
  75. } __packed;
  76. struct mio_info {
  77. u32 valid : 6;
  78. u32 : 26;
  79. u32 : 32;
  80. struct {
  81. u64 wb;
  82. u64 wt;
  83. } addr[PCI_STD_NUM_BARS];
  84. u32 reserved[6];
  85. } __packed;
  86. /* Query PCI function request */
  87. struct clp_req_query_pci {
  88. struct clp_req_hdr hdr;
  89. u32 fh; /* function handle */
  90. u32 reserved2;
  91. u64 reserved3;
  92. } __packed;
  93. /* Query PCI function response */
  94. struct clp_rsp_query_pci {
  95. struct clp_rsp_hdr hdr;
  96. u16 vfn; /* virtual fn number */
  97. u16 : 2;
  98. u16 tid_avail : 1;
  99. u16 rid_avail : 1;
  100. u16 is_physfn : 1;
  101. u16 reserved1 : 1;
  102. u16 mio_addr_avail : 1;
  103. u16 util_str_avail : 1; /* utility string available? */
  104. u16 pfgid : 8; /* pci function group id */
  105. u32 fid; /* pci function id */
  106. u8 bar_size[PCI_STD_NUM_BARS];
  107. u16 pchid;
  108. __le32 bar[PCI_STD_NUM_BARS];
  109. u8 pfip[CLP_PFIP_NR_SEGMENTS]; /* pci function internal path */
  110. u8 fidparm;
  111. u8 reserved3 : 4;
  112. u8 port : 4;
  113. u8 fmb_len;
  114. u8 pft; /* pci function type */
  115. u64 sdma; /* start dma as */
  116. u64 edma; /* end dma as */
  117. #define ZPCI_RID_MASK_DEVFN 0x00ff
  118. u16 rid; /* BUS/DEVFN PCI address */
  119. u32 reserved0;
  120. u16 tid;
  121. u32 reserved[9];
  122. u32 uid; /* user defined id */
  123. u8 util_str[CLP_UTIL_STR_LEN]; /* utility string */
  124. u32 reserved2[16];
  125. struct mio_info mio;
  126. } __packed;
  127. /* Query PCI function group request */
  128. struct clp_req_query_pci_grp {
  129. struct clp_req_hdr hdr;
  130. u32 reserved2 : 24;
  131. u32 pfgid : 8; /* function group id */
  132. u32 reserved3;
  133. u64 reserved4;
  134. } __packed;
  135. /* Query PCI function group response */
  136. struct clp_rsp_query_pci_grp {
  137. struct clp_rsp_hdr hdr;
  138. u16 : 4;
  139. u16 noi : 12; /* number of interrupts */
  140. u8 version;
  141. u8 : 2;
  142. u8 rtr : 1; /* Relaxed translation requirement */
  143. u8 : 3;
  144. u8 frame : 1;
  145. u8 refresh : 1; /* TLB refresh mode */
  146. u16 : 3;
  147. u16 maxstbl : 13; /* Maximum store block size */
  148. u16 mui;
  149. u8 dtsm; /* Supported DT mask */
  150. u8 reserved3;
  151. u16 maxfaal;
  152. u16 : 4;
  153. u16 dnoi : 12;
  154. u16 maxcpu;
  155. u64 dasm; /* dma address space mask */
  156. u64 msia; /* MSI address */
  157. u64 reserved4;
  158. u64 reserved5;
  159. } __packed;
  160. /* Set PCI function request */
  161. struct clp_req_set_pci {
  162. struct clp_req_hdr hdr;
  163. u32 fh; /* function handle */
  164. u16 reserved2;
  165. u8 oc; /* operation controls */
  166. u8 ndas; /* number of dma spaces */
  167. u32 reserved3;
  168. u32 gisa; /* GISA designation */
  169. } __packed;
  170. /* Set PCI function response */
  171. struct clp_rsp_set_pci {
  172. struct clp_rsp_hdr hdr;
  173. u32 fh; /* function handle */
  174. u32 reserved1;
  175. u64 reserved2;
  176. struct mio_info mio;
  177. } __packed;
  178. /* Combined request/response block structures used by clp insn */
  179. struct clp_req_rsp_slpc_pci {
  180. struct clp_req_slpc request;
  181. struct clp_rsp_slpc_pci response;
  182. } __packed;
  183. struct clp_req_rsp_list_pci {
  184. struct clp_req_list_pci request;
  185. struct clp_rsp_list_pci response;
  186. } __packed;
  187. struct clp_req_rsp_set_pci {
  188. struct clp_req_set_pci request;
  189. struct clp_rsp_set_pci response;
  190. } __packed;
  191. struct clp_req_rsp_query_pci {
  192. struct clp_req_query_pci request;
  193. struct clp_rsp_query_pci response;
  194. } __packed;
  195. struct clp_req_rsp_query_pci_grp {
  196. struct clp_req_query_pci_grp request;
  197. struct clp_rsp_query_pci_grp response;
  198. } __packed;
  199. #endif