pci_clp.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #ifndef _ASM_S390_PCI_CLP_H
  2. #define _ASM_S390_PCI_CLP_H
  3. #include <asm/clp.h>
  4. /*
  5. * Call Logical Processor - Command Codes
  6. */
  7. #define CLP_LIST_PCI 0x0002
  8. #define CLP_QUERY_PCI_FN 0x0003
  9. #define CLP_QUERY_PCI_FNGRP 0x0004
  10. #define CLP_SET_PCI_FN 0x0005
  11. /* PCI function handle list entry */
  12. struct clp_fh_list_entry {
  13. u16 device_id;
  14. u16 vendor_id;
  15. u32 config_state : 1;
  16. u32 : 31;
  17. u32 fid; /* PCI function id */
  18. u32 fh; /* PCI function handle */
  19. } __packed;
  20. #define CLP_RC_SETPCIFN_FH 0x0101 /* Invalid PCI fn handle */
  21. #define CLP_RC_SETPCIFN_FHOP 0x0102 /* Fn handle not valid for op */
  22. #define CLP_RC_SETPCIFN_DMAAS 0x0103 /* Invalid DMA addr space */
  23. #define CLP_RC_SETPCIFN_RES 0x0104 /* Insufficient resources */
  24. #define CLP_RC_SETPCIFN_ALRDY 0x0105 /* Fn already in requested state */
  25. #define CLP_RC_SETPCIFN_ERR 0x0106 /* Fn in permanent error state */
  26. #define CLP_RC_SETPCIFN_RECPND 0x0107 /* Error recovery pending */
  27. #define CLP_RC_SETPCIFN_BUSY 0x0108 /* Fn busy */
  28. #define CLP_RC_LISTPCI_BADRT 0x010a /* Resume token not recognized */
  29. #define CLP_RC_QUERYPCIFG_PFGID 0x010b /* Unrecognized PFGID */
  30. /* request or response block header length */
  31. #define LIST_PCI_HDR_LEN 32
  32. /* Number of function handles fitting in response block */
  33. #define CLP_FH_LIST_NR_ENTRIES \
  34. ((CLP_BLK_SIZE - 2 * LIST_PCI_HDR_LEN) \
  35. / sizeof(struct clp_fh_list_entry))
  36. #define CLP_SET_ENABLE_PCI_FN 0 /* Yes, 0 enables it */
  37. #define CLP_SET_DISABLE_PCI_FN 1 /* Yes, 1 disables it */
  38. #define CLP_UTIL_STR_LEN 64
  39. #define CLP_PFIP_NR_SEGMENTS 4
  40. /* List PCI functions request */
  41. struct clp_req_list_pci {
  42. struct clp_req_hdr hdr;
  43. u32 fmt : 4; /* cmd request block format */
  44. u32 : 28;
  45. u64 reserved1;
  46. u64 resume_token;
  47. u64 reserved2;
  48. } __packed;
  49. /* List PCI functions response */
  50. struct clp_rsp_list_pci {
  51. struct clp_rsp_hdr hdr;
  52. u32 fmt : 4; /* cmd request block format */
  53. u32 : 28;
  54. u64 reserved1;
  55. u64 resume_token;
  56. u32 reserved2;
  57. u16 max_fn;
  58. u8 reserved3;
  59. u8 entry_size;
  60. struct clp_fh_list_entry fh_list[CLP_FH_LIST_NR_ENTRIES];
  61. } __packed;
  62. /* Query PCI function request */
  63. struct clp_req_query_pci {
  64. struct clp_req_hdr hdr;
  65. u32 fmt : 4; /* cmd request block format */
  66. u32 : 28;
  67. u64 reserved1;
  68. u32 fh; /* function handle */
  69. u32 reserved2;
  70. u64 reserved3;
  71. } __packed;
  72. /* Query PCI function response */
  73. struct clp_rsp_query_pci {
  74. struct clp_rsp_hdr hdr;
  75. u32 fmt : 4; /* cmd request block format */
  76. u32 : 28;
  77. u64 : 64;
  78. u16 vfn; /* virtual fn number */
  79. u16 : 7;
  80. u16 util_str_avail : 1; /* utility string available? */
  81. u16 pfgid : 8; /* pci function group id */
  82. u32 fid; /* pci function id */
  83. u8 bar_size[PCI_BAR_COUNT];
  84. u16 pchid;
  85. u32 bar[PCI_BAR_COUNT];
  86. u8 pfip[CLP_PFIP_NR_SEGMENTS]; /* pci function internal path */
  87. u32 : 24;
  88. u8 pft; /* pci function type */
  89. u64 sdma; /* start dma as */
  90. u64 edma; /* end dma as */
  91. u32 reserved[11];
  92. u32 uid; /* user defined id */
  93. u8 util_str[CLP_UTIL_STR_LEN]; /* utility string */
  94. } __packed;
  95. /* Query PCI function group request */
  96. struct clp_req_query_pci_grp {
  97. struct clp_req_hdr hdr;
  98. u32 fmt : 4; /* cmd request block format */
  99. u32 : 28;
  100. u64 reserved1;
  101. u32 : 24;
  102. u32 pfgid : 8; /* function group id */
  103. u32 reserved2;
  104. u64 reserved3;
  105. } __packed;
  106. /* Query PCI function group response */
  107. struct clp_rsp_query_pci_grp {
  108. struct clp_rsp_hdr hdr;
  109. u32 fmt : 4; /* cmd request block format */
  110. u32 : 28;
  111. u64 reserved1;
  112. u16 : 4;
  113. u16 noi : 12; /* number of interrupts */
  114. u8 version;
  115. u8 : 6;
  116. u8 frame : 1;
  117. u8 refresh : 1; /* TLB refresh mode */
  118. u16 reserved2;
  119. u16 mui;
  120. u64 reserved3;
  121. u64 dasm; /* dma address space mask */
  122. u64 msia; /* MSI address */
  123. u64 reserved4;
  124. u64 reserved5;
  125. } __packed;
  126. /* Set PCI function request */
  127. struct clp_req_set_pci {
  128. struct clp_req_hdr hdr;
  129. u32 fmt : 4; /* cmd request block format */
  130. u32 : 28;
  131. u64 reserved1;
  132. u32 fh; /* function handle */
  133. u16 reserved2;
  134. u8 oc; /* operation controls */
  135. u8 ndas; /* number of dma spaces */
  136. u64 reserved3;
  137. } __packed;
  138. /* Set PCI function response */
  139. struct clp_rsp_set_pci {
  140. struct clp_rsp_hdr hdr;
  141. u32 fmt : 4; /* cmd request block format */
  142. u32 : 28;
  143. u64 reserved1;
  144. u32 fh; /* function handle */
  145. u32 reserved3;
  146. u64 reserved4;
  147. } __packed;
  148. /* Combined request/response block structures used by clp insn */
  149. struct clp_req_rsp_list_pci {
  150. struct clp_req_list_pci request;
  151. struct clp_rsp_list_pci response;
  152. } __packed;
  153. struct clp_req_rsp_set_pci {
  154. struct clp_req_set_pci request;
  155. struct clp_rsp_set_pci response;
  156. } __packed;
  157. struct clp_req_rsp_query_pci {
  158. struct clp_req_query_pci request;
  159. struct clp_rsp_query_pci response;
  160. } __packed;
  161. struct clp_req_rsp_query_pci_grp {
  162. struct clp_req_query_pci_grp request;
  163. struct clp_rsp_query_pci_grp response;
  164. } __packed;
  165. #endif