mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
scsi: cxlflash: Introduce object handle fop
OCXL requires that AFUs use an opaque object handle to represent an AFU interrupt. The specification does not provide a common means to communicate the object handle to the AFU - each AFU must define this within the AFU specification. To support this model, the object handle must be passed back to the core driver as it manages the AFU specification (SISLite) for cxlflash. Note that for Power systems, the object handle is the effective address of the trigger page. Signed-off-by: Uma Krishnan <ukrishn@linux.vnet.ibm.com> Acked-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
e117c3c731
commit
402a55ea47
@ -23,6 +23,7 @@ struct cxlflash_backend_ops {
|
|||||||
int (*map_afu_irq)(void *ctx_cookie, int num, irq_handler_t handler,
|
int (*map_afu_irq)(void *ctx_cookie, int num, irq_handler_t handler,
|
||||||
void *cookie, char *name);
|
void *cookie, char *name);
|
||||||
void (*unmap_afu_irq)(void *ctx_cookie, int num, void *cookie);
|
void (*unmap_afu_irq)(void *ctx_cookie, int num, void *cookie);
|
||||||
|
u64 (*get_irq_objhndl)(void *ctx_cookie, int irq);
|
||||||
int (*start_context)(void *ctx_cookie);
|
int (*start_context)(void *ctx_cookie);
|
||||||
int (*stop_context)(void *ctx_cookie);
|
int (*stop_context)(void *ctx_cookie);
|
||||||
int (*afu_reset)(void *ctx_cookie);
|
int (*afu_reset)(void *ctx_cookie);
|
||||||
|
@ -49,6 +49,12 @@ static void cxlflash_unmap_afu_irq(void *ctx_cookie, int num, void *cookie)
|
|||||||
cxl_unmap_afu_irq(ctx_cookie, num, cookie);
|
cxl_unmap_afu_irq(ctx_cookie, num, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u64 cxlflash_get_irq_objhndl(void *ctx_cookie, int irq)
|
||||||
|
{
|
||||||
|
/* Dummy fop for cxl */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int cxlflash_start_context(void *ctx_cookie)
|
static int cxlflash_start_context(void *ctx_cookie)
|
||||||
{
|
{
|
||||||
return cxl_start_context(ctx_cookie, 0, NULL);
|
return cxl_start_context(ctx_cookie, 0, NULL);
|
||||||
@ -153,6 +159,7 @@ const struct cxlflash_backend_ops cxlflash_cxl_ops = {
|
|||||||
.process_element = cxlflash_process_element,
|
.process_element = cxlflash_process_element,
|
||||||
.map_afu_irq = cxlflash_map_afu_irq,
|
.map_afu_irq = cxlflash_map_afu_irq,
|
||||||
.unmap_afu_irq = cxlflash_unmap_afu_irq,
|
.unmap_afu_irq = cxlflash_unmap_afu_irq,
|
||||||
|
.get_irq_objhndl = cxlflash_get_irq_objhndl,
|
||||||
.start_context = cxlflash_start_context,
|
.start_context = cxlflash_start_context,
|
||||||
.stop_context = cxlflash_stop_context,
|
.stop_context = cxlflash_stop_context,
|
||||||
.afu_reset = cxlflash_afu_reset,
|
.afu_reset = cxlflash_afu_reset,
|
||||||
|
@ -307,6 +307,23 @@ static void ocxlflash_unmap_afu_irq(void *ctx_cookie, int num, void *cookie)
|
|||||||
return afu_unmap_irq(0, ctx_cookie, num, cookie);
|
return afu_unmap_irq(0, ctx_cookie, num, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ocxlflash_get_irq_objhndl() - get the object handle for an interrupt
|
||||||
|
* @ctx_cookie: Context associated with the interrupt.
|
||||||
|
* @irq: Interrupt number.
|
||||||
|
*
|
||||||
|
* Return: effective address of the mapped region
|
||||||
|
*/
|
||||||
|
static u64 ocxlflash_get_irq_objhndl(void *ctx_cookie, int irq)
|
||||||
|
{
|
||||||
|
struct ocxlflash_context *ctx = ctx_cookie;
|
||||||
|
|
||||||
|
if (irq < 0 || irq >= ctx->num_irqs)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (__force u64)ctx->irqs[irq].vtrig;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* start_context() - local routine to start a context
|
* start_context() - local routine to start a context
|
||||||
* @ctx: Adapter context to be started.
|
* @ctx: Adapter context to be started.
|
||||||
@ -1301,6 +1318,7 @@ const struct cxlflash_backend_ops cxlflash_ocxl_ops = {
|
|||||||
.process_element = ocxlflash_process_element,
|
.process_element = ocxlflash_process_element,
|
||||||
.map_afu_irq = ocxlflash_map_afu_irq,
|
.map_afu_irq = ocxlflash_map_afu_irq,
|
||||||
.unmap_afu_irq = ocxlflash_unmap_afu_irq,
|
.unmap_afu_irq = ocxlflash_unmap_afu_irq,
|
||||||
|
.get_irq_objhndl = ocxlflash_get_irq_objhndl,
|
||||||
.start_context = ocxlflash_start_context,
|
.start_context = ocxlflash_start_context,
|
||||||
.stop_context = ocxlflash_stop_context,
|
.stop_context = ocxlflash_stop_context,
|
||||||
.set_master = ocxlflash_set_master,
|
.set_master = ocxlflash_set_master,
|
||||||
|
Loading…
Reference in New Issue
Block a user