| .. | .. |
|---|
| 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_ */ |
|---|