]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: cxlflash: Introduce object handle fop
authorUma Krishnan <ukrishn@linux.vnet.ibm.com>
Mon, 26 Mar 2018 16:34:35 +0000 (11:34 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 18 Apr 2018 23:32:50 +0000 (19:32 -0400)
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>
drivers/scsi/cxlflash/backend.h
drivers/scsi/cxlflash/cxl_hw.c
drivers/scsi/cxlflash/ocxl_hw.c

index f675bcb4f1535ea38a895604cc55b74f1b5b3473..bcd8a6c588d377331826d8185718b43b7bce6ef9 100644 (file)
@@ -23,6 +23,7 @@ struct cxlflash_backend_ops {
        int (*map_afu_irq)(void *ctx_cookie, int num, irq_handler_t handler,
                           void *cookie, char *name);
        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 (*stop_context)(void *ctx_cookie);
        int (*afu_reset)(void *ctx_cookie);
index a1d6d12090d3ff35ef76ac7079c8e4702ed59d61..b42da88386bddf9260bd778b90b0a19638a3b29d 100644 (file)
@@ -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);
 }
 
+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)
 {
        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,
        .map_afu_irq            = cxlflash_map_afu_irq,
        .unmap_afu_irq          = cxlflash_unmap_afu_irq,
+       .get_irq_objhndl        = cxlflash_get_irq_objhndl,
        .start_context          = cxlflash_start_context,
        .stop_context           = cxlflash_stop_context,
        .afu_reset              = cxlflash_afu_reset,
index 4bbc1d197a627eb13b87123ab93d783d5773d623..f77f4d7f6a34f76b7c651ae22ccd21452736c962 100644 (file)
@@ -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);
 }
 
+/**
+ * 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
  * @ctx:       Adapter context to be started.
@@ -1301,6 +1318,7 @@ const struct cxlflash_backend_ops cxlflash_ocxl_ops = {
        .process_element        = ocxlflash_process_element,
        .map_afu_irq            = ocxlflash_map_afu_irq,
        .unmap_afu_irq          = ocxlflash_unmap_afu_irq,
+       .get_irq_objhndl        = ocxlflash_get_irq_objhndl,
        .start_context          = ocxlflash_start_context,
        .stop_context           = ocxlflash_stop_context,
        .set_master             = ocxlflash_set_master,