.. | .. |
---|
16 | 16 | |
---|
17 | 17 | #define OCXL_AFU_NAME_SZ (24+1) /* add 1 for NULL termination */ |
---|
18 | 18 | |
---|
19 | | -/* |
---|
20 | | - * The following 2 structures are a fairly generic way of representing |
---|
21 | | - * the configuration data for a function and AFU, as read from the |
---|
22 | | - * configuration space. |
---|
23 | | - */ |
---|
| 19 | + |
---|
24 | 20 | struct ocxl_afu_config { |
---|
25 | 21 | u8 idx; |
---|
26 | 22 | int dvsec_afu_control_pos; /* offset of AFU control DVSEC */ |
---|
.. | .. |
---|
36 | 32 | u8 pp_mmio_bar; /* per-process MMIO area */ |
---|
37 | 33 | u64 pp_mmio_offset; |
---|
38 | 34 | u32 pp_mmio_stride; |
---|
39 | | - u8 log_mem_size; |
---|
| 35 | + u64 lpc_mem_offset; |
---|
| 36 | + u64 lpc_mem_size; |
---|
| 37 | + u64 special_purpose_mem_offset; |
---|
| 38 | + u64 special_purpose_mem_size; |
---|
40 | 39 | u8 pasid_supported_log; |
---|
41 | 40 | u16 actag_supported; |
---|
42 | 41 | }; |
---|
.. | .. |
---|
49 | 48 | s8 max_afu_index; |
---|
50 | 49 | }; |
---|
51 | 50 | |
---|
52 | | -/* |
---|
53 | | - * Read the configuration space of a function and fill in a |
---|
54 | | - * ocxl_fn_config structure with all the function details |
---|
55 | | - */ |
---|
56 | | -extern int ocxl_config_read_function(struct pci_dev *dev, |
---|
57 | | - struct ocxl_fn_config *fn); |
---|
| 51 | +enum ocxl_endian { |
---|
| 52 | + OCXL_BIG_ENDIAN = 0, /**< AFU data is big-endian */ |
---|
| 53 | + OCXL_LITTLE_ENDIAN = 1, /**< AFU data is little-endian */ |
---|
| 54 | + OCXL_HOST_ENDIAN = 2, /**< AFU data is the same endianness as the host */ |
---|
| 55 | +}; |
---|
58 | 56 | |
---|
59 | | -/* |
---|
60 | | - * Check if an AFU index is valid for the given function. |
---|
| 57 | +// These are opaque outside the ocxl driver |
---|
| 58 | +struct ocxl_afu; |
---|
| 59 | +struct ocxl_fn; |
---|
| 60 | +struct ocxl_context; |
---|
| 61 | + |
---|
| 62 | +// Device detection & initialisation |
---|
| 63 | + |
---|
| 64 | +/** |
---|
| 65 | + * ocxl_function_open() - Open an OpenCAPI function on an OpenCAPI device |
---|
| 66 | + * @dev: The PCI device that contains the function |
---|
61 | 67 | * |
---|
62 | | - * AFU indexes can be sparse, so a driver should check all indexes up |
---|
63 | | - * to the maximum found in the function description |
---|
| 68 | + * Returns an opaque pointer to the function, or an error pointer (check with IS_ERR) |
---|
64 | 69 | */ |
---|
65 | | -extern int ocxl_config_check_afu_index(struct pci_dev *dev, |
---|
66 | | - struct ocxl_fn_config *fn, int afu_idx); |
---|
| 70 | +struct ocxl_fn *ocxl_function_open(struct pci_dev *dev); |
---|
| 71 | + |
---|
| 72 | +/** |
---|
| 73 | + * ocxl_function_afu_list() - Get the list of AFUs associated with a PCI function device |
---|
| 74 | + * Returns a list of struct ocxl_afu * |
---|
| 75 | + * |
---|
| 76 | + * @fn: The OpenCAPI function containing the AFUs |
---|
| 77 | + */ |
---|
| 78 | +struct list_head *ocxl_function_afu_list(struct ocxl_fn *fn); |
---|
| 79 | + |
---|
| 80 | +/** |
---|
| 81 | + * ocxl_function_fetch_afu() - Fetch an AFU instance from an OpenCAPI function |
---|
| 82 | + * @fn: The OpenCAPI function to get the AFU from |
---|
| 83 | + * @afu_idx: The index of the AFU to get |
---|
| 84 | + * |
---|
| 85 | + * If successful, the AFU should be released with ocxl_afu_put() |
---|
| 86 | + * |
---|
| 87 | + * Returns a pointer to the AFU, or NULL on error |
---|
| 88 | + */ |
---|
| 89 | +struct ocxl_afu *ocxl_function_fetch_afu(struct ocxl_fn *fn, u8 afu_idx); |
---|
| 90 | + |
---|
| 91 | +/** |
---|
| 92 | + * ocxl_afu_get() - Take a reference to an AFU |
---|
| 93 | + * @afu: The AFU to increment the reference count on |
---|
| 94 | + */ |
---|
| 95 | +void ocxl_afu_get(struct ocxl_afu *afu); |
---|
| 96 | + |
---|
| 97 | +/** |
---|
| 98 | + * ocxl_afu_put() - Release a reference to an AFU |
---|
| 99 | + * @afu: The AFU to decrement the reference count on |
---|
| 100 | + */ |
---|
| 101 | +void ocxl_afu_put(struct ocxl_afu *afu); |
---|
| 102 | + |
---|
| 103 | + |
---|
| 104 | +/** |
---|
| 105 | + * ocxl_function_config() - Get the configuration information for an OpenCAPI function |
---|
| 106 | + * @fn: The OpenCAPI function to get the config for |
---|
| 107 | + * |
---|
| 108 | + * Returns the function config, or NULL on error |
---|
| 109 | + */ |
---|
| 110 | +const struct ocxl_fn_config *ocxl_function_config(struct ocxl_fn *fn); |
---|
| 111 | + |
---|
| 112 | +/** |
---|
| 113 | + * ocxl_function_close() - Close an OpenCAPI function |
---|
| 114 | + * This will free any AFUs previously retrieved from the function, and |
---|
| 115 | + * detach and associated contexts. The contexts must by freed by the caller. |
---|
| 116 | + * |
---|
| 117 | + * @fn: The OpenCAPI function to close |
---|
| 118 | + * |
---|
| 119 | + */ |
---|
| 120 | +void ocxl_function_close(struct ocxl_fn *fn); |
---|
| 121 | + |
---|
| 122 | +// Context allocation |
---|
| 123 | + |
---|
| 124 | +/** |
---|
| 125 | + * ocxl_context_alloc() - Allocate an OpenCAPI context |
---|
| 126 | + * @context: The OpenCAPI context to allocate, must be freed with ocxl_context_free |
---|
| 127 | + * @afu: The AFU the context belongs to |
---|
| 128 | + * @mapping: The mapping to unmap when the context is closed (may be NULL) |
---|
| 129 | + */ |
---|
| 130 | +int ocxl_context_alloc(struct ocxl_context **context, struct ocxl_afu *afu, |
---|
| 131 | + struct address_space *mapping); |
---|
| 132 | + |
---|
| 133 | +/** |
---|
| 134 | + * ocxl_context_free() - Free an OpenCAPI context |
---|
| 135 | + * @ctx: The OpenCAPI context to free |
---|
| 136 | + */ |
---|
| 137 | +void ocxl_context_free(struct ocxl_context *ctx); |
---|
| 138 | + |
---|
| 139 | +/** |
---|
| 140 | + * ocxl_context_attach() - Grant access to an MM to an OpenCAPI context |
---|
| 141 | + * @ctx: The OpenCAPI context to attach |
---|
| 142 | + * @amr: The value of the AMR register to restrict access |
---|
| 143 | + * @mm: The mm to attach to the context |
---|
| 144 | + * |
---|
| 145 | + * Returns 0 on success, negative on failure |
---|
| 146 | + */ |
---|
| 147 | +int ocxl_context_attach(struct ocxl_context *ctx, u64 amr, |
---|
| 148 | + struct mm_struct *mm); |
---|
| 149 | + |
---|
| 150 | +/** |
---|
| 151 | + * ocxl_context_detach() - Detach an MM from an OpenCAPI context |
---|
| 152 | + * @ctx: The OpenCAPI context to attach |
---|
| 153 | + * |
---|
| 154 | + * Returns 0 on success, negative on failure |
---|
| 155 | + */ |
---|
| 156 | +int ocxl_context_detach(struct ocxl_context *ctx); |
---|
| 157 | + |
---|
| 158 | +// AFU IRQs |
---|
| 159 | + |
---|
| 160 | +/** |
---|
| 161 | + * ocxl_afu_irq_alloc() - Allocate an IRQ associated with an AFU context |
---|
| 162 | + * @ctx: the AFU context |
---|
| 163 | + * @irq_id: out, the IRQ ID |
---|
| 164 | + * |
---|
| 165 | + * Returns 0 on success, negative on failure |
---|
| 166 | + */ |
---|
| 167 | +int ocxl_afu_irq_alloc(struct ocxl_context *ctx, int *irq_id); |
---|
| 168 | + |
---|
| 169 | +/** |
---|
| 170 | + * ocxl_afu_irq_free() - Frees an IRQ associated with an AFU context |
---|
| 171 | + * @ctx: the AFU context |
---|
| 172 | + * @irq_id: the IRQ ID |
---|
| 173 | + * |
---|
| 174 | + * Returns 0 on success, negative on failure |
---|
| 175 | + */ |
---|
| 176 | +int ocxl_afu_irq_free(struct ocxl_context *ctx, int irq_id); |
---|
| 177 | + |
---|
| 178 | +/** |
---|
| 179 | + * ocxl_afu_irq_get_addr() - Gets the address of the trigger page for an IRQ |
---|
| 180 | + * This can then be provided to an AFU which will write to that |
---|
| 181 | + * page to trigger the IRQ. |
---|
| 182 | + * @ctx: The AFU context that the IRQ is associated with |
---|
| 183 | + * @irq_id: The IRQ ID |
---|
| 184 | + * |
---|
| 185 | + * returns the trigger page address, or 0 if the IRQ is not valid |
---|
| 186 | + */ |
---|
| 187 | +u64 ocxl_afu_irq_get_addr(struct ocxl_context *ctx, int irq_id); |
---|
| 188 | + |
---|
| 189 | +/** |
---|
| 190 | + * ocxl_irq_set_handler() - Provide a callback to be called when an IRQ is triggered |
---|
| 191 | + * @ctx: The AFU context that the IRQ is associated with |
---|
| 192 | + * @irq_id: The IRQ ID |
---|
| 193 | + * @handler: the callback to be called when the IRQ is triggered |
---|
| 194 | + * @free_private: the callback to be called when the IRQ is freed (may be NULL) |
---|
| 195 | + * @private: Private data to be passed to the callbacks |
---|
| 196 | + * |
---|
| 197 | + * Returns 0 on success, negative on failure |
---|
| 198 | + */ |
---|
| 199 | +int ocxl_irq_set_handler(struct ocxl_context *ctx, int irq_id, |
---|
| 200 | + irqreturn_t (*handler)(void *private), |
---|
| 201 | + void (*free_private)(void *private), |
---|
| 202 | + void *private); |
---|
| 203 | + |
---|
| 204 | +// AFU Metadata |
---|
| 205 | + |
---|
| 206 | +/** |
---|
| 207 | + * ocxl_afu_config() - Get a pointer to the config for an AFU |
---|
| 208 | + * @afu: a pointer to the AFU to get the config for |
---|
| 209 | + * |
---|
| 210 | + * Returns a pointer to the AFU config |
---|
| 211 | + */ |
---|
| 212 | +struct ocxl_afu_config *ocxl_afu_config(struct ocxl_afu *afu); |
---|
| 213 | + |
---|
| 214 | +/** |
---|
| 215 | + * ocxl_afu_set_private() - Assign opaque hardware specific information to an OpenCAPI AFU. |
---|
| 216 | + * @afu: The OpenCAPI AFU |
---|
| 217 | + * @private: the opaque hardware specific information to assign to the driver |
---|
| 218 | + */ |
---|
| 219 | +void ocxl_afu_set_private(struct ocxl_afu *afu, void *private); |
---|
| 220 | + |
---|
| 221 | +/** |
---|
| 222 | + * ocxl_afu_get_private() - Fetch the hardware specific information associated with |
---|
| 223 | + * an external OpenCAPI AFU. This may be consumed by an external OpenCAPI driver. |
---|
| 224 | + * @afu: The OpenCAPI AFU |
---|
| 225 | + * |
---|
| 226 | + * Returns the opaque pointer associated with the device, or NULL if not set |
---|
| 227 | + */ |
---|
| 228 | +void *ocxl_afu_get_private(struct ocxl_afu *afu); |
---|
| 229 | + |
---|
| 230 | +// Global MMIO |
---|
| 231 | +/** |
---|
| 232 | + * ocxl_global_mmio_read32() - Read a 32 bit value from global MMIO |
---|
| 233 | + * @afu: The AFU |
---|
| 234 | + * @offset: The Offset from the start of MMIO |
---|
| 235 | + * @endian: the endianness that the MMIO data is in |
---|
| 236 | + * @val: returns the value |
---|
| 237 | + * |
---|
| 238 | + * Returns 0 for success, negative on error |
---|
| 239 | + */ |
---|
| 240 | +int ocxl_global_mmio_read32(struct ocxl_afu *afu, size_t offset, |
---|
| 241 | + enum ocxl_endian endian, u32 *val); |
---|
| 242 | + |
---|
| 243 | +/** |
---|
| 244 | + * ocxl_global_mmio_read64() - Read a 64 bit value from global MMIO |
---|
| 245 | + * @afu: The AFU |
---|
| 246 | + * @offset: The Offset from the start of MMIO |
---|
| 247 | + * @endian: the endianness that the MMIO data is in |
---|
| 248 | + * @val: returns the value |
---|
| 249 | + * |
---|
| 250 | + * Returns 0 for success, negative on error |
---|
| 251 | + */ |
---|
| 252 | +int ocxl_global_mmio_read64(struct ocxl_afu *afu, size_t offset, |
---|
| 253 | + enum ocxl_endian endian, u64 *val); |
---|
| 254 | + |
---|
| 255 | +/** |
---|
| 256 | + * ocxl_global_mmio_write32() - Write a 32 bit value to global MMIO |
---|
| 257 | + * @afu: The AFU |
---|
| 258 | + * @offset: The Offset from the start of MMIO |
---|
| 259 | + * @endian: the endianness that the MMIO data is in |
---|
| 260 | + * @val: The value to write |
---|
| 261 | + * |
---|
| 262 | + * Returns 0 for success, negative on error |
---|
| 263 | + */ |
---|
| 264 | +int ocxl_global_mmio_write32(struct ocxl_afu *afu, size_t offset, |
---|
| 265 | + enum ocxl_endian endian, u32 val); |
---|
| 266 | + |
---|
| 267 | +/** |
---|
| 268 | + * ocxl_global_mmio_write64() - Write a 64 bit value to global MMIO |
---|
| 269 | + * @afu: The AFU |
---|
| 270 | + * @offset: The Offset from the start of MMIO |
---|
| 271 | + * @endian: the endianness that the MMIO data is in |
---|
| 272 | + * @val: The value to write |
---|
| 273 | + * |
---|
| 274 | + * Returns 0 for success, negative on error |
---|
| 275 | + */ |
---|
| 276 | +int ocxl_global_mmio_write64(struct ocxl_afu *afu, size_t offset, |
---|
| 277 | + enum ocxl_endian endian, u64 val); |
---|
| 278 | + |
---|
| 279 | +/** |
---|
| 280 | + * ocxl_global_mmio_set32() - Set bits in a 32 bit global MMIO register |
---|
| 281 | + * @afu: The AFU |
---|
| 282 | + * @offset: The Offset from the start of MMIO |
---|
| 283 | + * @endian: the endianness that the MMIO data is in |
---|
| 284 | + * @mask: a mask of the bits to set |
---|
| 285 | + * |
---|
| 286 | + * Returns 0 for success, negative on error |
---|
| 287 | + */ |
---|
| 288 | +int ocxl_global_mmio_set32(struct ocxl_afu *afu, size_t offset, |
---|
| 289 | + enum ocxl_endian endian, u32 mask); |
---|
| 290 | + |
---|
| 291 | +/** |
---|
| 292 | + * ocxl_global_mmio_set64() - Set bits in a 64 bit global MMIO register |
---|
| 293 | + * @afu: The AFU |
---|
| 294 | + * @offset: The Offset from the start of MMIO |
---|
| 295 | + * @endian: the endianness that the MMIO data is in |
---|
| 296 | + * @mask: a mask of the bits to set |
---|
| 297 | + * |
---|
| 298 | + * Returns 0 for success, negative on error |
---|
| 299 | + */ |
---|
| 300 | +int ocxl_global_mmio_set64(struct ocxl_afu *afu, size_t offset, |
---|
| 301 | + enum ocxl_endian endian, u64 mask); |
---|
| 302 | + |
---|
| 303 | +/** |
---|
| 304 | + * ocxl_global_mmio_clear32() - Set bits in a 32 bit global MMIO register |
---|
| 305 | + * @afu: The AFU |
---|
| 306 | + * @offset: The Offset from the start of MMIO |
---|
| 307 | + * @endian: the endianness that the MMIO data is in |
---|
| 308 | + * @mask: a mask of the bits to set |
---|
| 309 | + * |
---|
| 310 | + * Returns 0 for success, negative on error |
---|
| 311 | + */ |
---|
| 312 | +int ocxl_global_mmio_clear32(struct ocxl_afu *afu, size_t offset, |
---|
| 313 | + enum ocxl_endian endian, u32 mask); |
---|
| 314 | + |
---|
| 315 | +/** |
---|
| 316 | + * ocxl_global_mmio_clear64() - Set bits in a 64 bit global MMIO register |
---|
| 317 | + * @afu: The AFU |
---|
| 318 | + * @offset: The Offset from the start of MMIO |
---|
| 319 | + * @endian: the endianness that the MMIO data is in |
---|
| 320 | + * @mask: a mask of the bits to set |
---|
| 321 | + * |
---|
| 322 | + * Returns 0 for success, negative on error |
---|
| 323 | + */ |
---|
| 324 | +int ocxl_global_mmio_clear64(struct ocxl_afu *afu, size_t offset, |
---|
| 325 | + enum ocxl_endian endian, u64 mask); |
---|
| 326 | + |
---|
| 327 | +// Functions left here are for compatibility with the cxlflash driver |
---|
67 | 328 | |
---|
68 | 329 | /* |
---|
69 | 330 | * Read the configuration space of a function for the AFU specified by |
---|
70 | 331 | * the index 'afu_idx'. Fills in a ocxl_afu_config structure |
---|
71 | 332 | */ |
---|
72 | | -extern int ocxl_config_read_afu(struct pci_dev *dev, |
---|
| 333 | +int ocxl_config_read_afu(struct pci_dev *dev, |
---|
73 | 334 | struct ocxl_fn_config *fn, |
---|
74 | 335 | struct ocxl_afu_config *afu, |
---|
75 | 336 | u8 afu_idx); |
---|
76 | | - |
---|
77 | | -/* |
---|
78 | | - * Get the max PASID value that can be used by the function |
---|
79 | | - */ |
---|
80 | | -extern int ocxl_config_get_pasid_info(struct pci_dev *dev, int *count); |
---|
81 | 337 | |
---|
82 | 338 | /* |
---|
83 | 339 | * Tell an AFU, by writing in the configuration space, the PASIDs that |
---|
.. | .. |
---|
87 | 343 | * 'afu_control_offset' is the offset of the AFU control DVSEC which |
---|
88 | 344 | * can be found in the function configuration |
---|
89 | 345 | */ |
---|
90 | | -extern void ocxl_config_set_afu_pasid(struct pci_dev *dev, |
---|
| 346 | +void ocxl_config_set_afu_pasid(struct pci_dev *dev, |
---|
91 | 347 | int afu_control_offset, |
---|
92 | 348 | int pasid_base, u32 pasid_count_log); |
---|
93 | 349 | |
---|
.. | .. |
---|
98 | 354 | * 'supported' is the total number of actags desired by all the AFUs |
---|
99 | 355 | * of the function. |
---|
100 | 356 | */ |
---|
101 | | -extern int ocxl_config_get_actag_info(struct pci_dev *dev, |
---|
| 357 | +int ocxl_config_get_actag_info(struct pci_dev *dev, |
---|
102 | 358 | u16 *base, u16 *enabled, u16 *supported); |
---|
103 | 359 | |
---|
104 | 360 | /* |
---|
.. | .. |
---|
108 | 364 | * 'func_offset' is the offset of the Function DVSEC that can found in |
---|
109 | 365 | * the function configuration |
---|
110 | 366 | */ |
---|
111 | | -extern void ocxl_config_set_actag(struct pci_dev *dev, int func_offset, |
---|
| 367 | +void ocxl_config_set_actag(struct pci_dev *dev, int func_offset, |
---|
112 | 368 | u32 actag_base, u32 actag_count); |
---|
113 | 369 | |
---|
114 | 370 | /* |
---|
.. | .. |
---|
118 | 374 | * 'afu_control_offset' is the offset of the AFU control DVSEC for the |
---|
119 | 375 | * desired AFU. It can be found in the AFU configuration |
---|
120 | 376 | */ |
---|
121 | | -extern void ocxl_config_set_afu_actag(struct pci_dev *dev, |
---|
| 377 | +void ocxl_config_set_afu_actag(struct pci_dev *dev, |
---|
122 | 378 | int afu_control_offset, |
---|
123 | 379 | int actag_base, int actag_count); |
---|
124 | 380 | |
---|
.. | .. |
---|
128 | 384 | * 'afu_control_offset' is the offset of the AFU control DVSEC for the |
---|
129 | 385 | * desired AFU. It can be found in the AFU configuration |
---|
130 | 386 | */ |
---|
131 | | -extern void ocxl_config_set_afu_state(struct pci_dev *dev, |
---|
| 387 | +void ocxl_config_set_afu_state(struct pci_dev *dev, |
---|
132 | 388 | int afu_control_offset, int enable); |
---|
133 | 389 | |
---|
134 | 390 | /* |
---|
.. | .. |
---|
139 | 395 | * between the host and device, and set the Transaction Layer on both |
---|
140 | 396 | * accordingly. |
---|
141 | 397 | */ |
---|
142 | | -extern int ocxl_config_set_TL(struct pci_dev *dev, int tl_dvsec); |
---|
| 398 | +int ocxl_config_set_TL(struct pci_dev *dev, int tl_dvsec); |
---|
143 | 399 | |
---|
144 | 400 | /* |
---|
145 | 401 | * Request an AFU to terminate a PASID. |
---|
.. | .. |
---|
152 | 408 | * 'afu_control_offset' is the offset of the AFU control DVSEC for the |
---|
153 | 409 | * desired AFU. It can be found in the AFU configuration |
---|
154 | 410 | */ |
---|
155 | | -extern int ocxl_config_terminate_pasid(struct pci_dev *dev, |
---|
| 411 | +int ocxl_config_terminate_pasid(struct pci_dev *dev, |
---|
156 | 412 | int afu_control_offset, int pasid); |
---|
| 413 | + |
---|
| 414 | +/* |
---|
| 415 | + * Read the configuration space of a function and fill in a |
---|
| 416 | + * ocxl_fn_config structure with all the function details |
---|
| 417 | + */ |
---|
| 418 | +int ocxl_config_read_function(struct pci_dev *dev, |
---|
| 419 | + struct ocxl_fn_config *fn); |
---|
157 | 420 | |
---|
158 | 421 | /* |
---|
159 | 422 | * Set up the opencapi link for the function. |
---|
.. | .. |
---|
165 | 428 | * Returns a 'link handle' that should be used for further calls for |
---|
166 | 429 | * the link |
---|
167 | 430 | */ |
---|
168 | | -extern int ocxl_link_setup(struct pci_dev *dev, int PE_mask, |
---|
| 431 | +int ocxl_link_setup(struct pci_dev *dev, int PE_mask, |
---|
169 | 432 | void **link_handle); |
---|
170 | 433 | |
---|
171 | 434 | /* |
---|
172 | 435 | * Remove the association between the function and its link. |
---|
173 | 436 | */ |
---|
174 | | -extern void ocxl_link_release(struct pci_dev *dev, void *link_handle); |
---|
| 437 | +void ocxl_link_release(struct pci_dev *dev, void *link_handle); |
---|
175 | 438 | |
---|
176 | 439 | /* |
---|
177 | 440 | * Add a Process Element to the Shared Process Area for a link. |
---|
.. | .. |
---|
183 | 446 | * 'xsl_err_data' is an argument passed to the above callback, if |
---|
184 | 447 | * defined |
---|
185 | 448 | */ |
---|
186 | | -extern int ocxl_link_add_pe(void *link_handle, int pasid, u32 pidr, u32 tidr, |
---|
| 449 | +int ocxl_link_add_pe(void *link_handle, int pasid, u32 pidr, u32 tidr, |
---|
187 | 450 | u64 amr, struct mm_struct *mm, |
---|
188 | 451 | void (*xsl_err_cb)(void *data, u64 addr, u64 dsisr), |
---|
189 | 452 | void *xsl_err_data); |
---|
190 | 453 | |
---|
191 | | -/** |
---|
192 | | - * Update values within a Process Element |
---|
193 | | - * |
---|
194 | | - * link_handle: the link handle associated with the process element |
---|
195 | | - * pasid: the PASID for the AFU context |
---|
196 | | - * tid: the new thread id for the process element |
---|
197 | | - */ |
---|
198 | | -extern int ocxl_link_update_pe(void *link_handle, int pasid, __u16 tid); |
---|
199 | | - |
---|
200 | 454 | /* |
---|
201 | 455 | * Remove a Process Element from the Shared Process Area for a link |
---|
202 | 456 | */ |
---|
203 | | -extern int ocxl_link_remove_pe(void *link_handle, int pasid); |
---|
| 457 | +int ocxl_link_remove_pe(void *link_handle, int pasid); |
---|
204 | 458 | |
---|
205 | 459 | /* |
---|
206 | 460 | * Allocate an AFU interrupt associated to the link. |
---|
207 | 461 | * |
---|
208 | 462 | * 'hw_irq' is the hardware interrupt number |
---|
209 | | - * 'obj_handle' is the 64-bit object handle to be passed to the AFU to |
---|
210 | | - * trigger the interrupt. |
---|
211 | | - * On P9, 'obj_handle' is an address, which, if written, triggers the |
---|
212 | | - * interrupt. It is an MMIO address which needs to be remapped (one |
---|
213 | | - * page). |
---|
214 | 463 | */ |
---|
215 | | -extern int ocxl_link_irq_alloc(void *link_handle, int *hw_irq, |
---|
216 | | - u64 *obj_handle); |
---|
| 464 | +int ocxl_link_irq_alloc(void *link_handle, int *hw_irq); |
---|
217 | 465 | |
---|
218 | 466 | /* |
---|
219 | 467 | * Free a previously allocated AFU interrupt |
---|
220 | 468 | */ |
---|
221 | | -extern void ocxl_link_free_irq(void *link_handle, int hw_irq); |
---|
| 469 | +void ocxl_link_free_irq(void *link_handle, int hw_irq); |
---|
222 | 470 | |
---|
223 | 471 | #endif /* _MISC_OCXL_H_ */ |
---|