On Tue, 24 Aug 2021 09:06:52 -0700 Dan Williams <[email protected]> wrote:
> In preparation for implementing a unit test backend transport for ioctl > operations, and making the mailbox available to the cxl/pmem > infrastructure, move the existing PCI specific portion of mailbox handling > to an "mbox_send" operation. > > With this split all the PCI-specific transport details are comprehended > by a single operation and the rest of the mailbox infrastructure is > 'struct cxl_mem' and 'struct cxl_memdev' generic. > > Acked-by: Ben Widawsky <[email protected]> > Signed-off-by: Dan Williams <[email protected]> > --- > drivers/cxl/cxlmem.h | 42 ++++++++++++++++++++++++++++ > drivers/cxl/pci.c | 76 > ++++++++++++++------------------------------------ > 2 files changed, 63 insertions(+), 55 deletions(-) > > diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h > index 8397daea9d9b..a56d8f26a157 100644 > --- a/drivers/cxl/cxlmem.h > +++ b/drivers/cxl/cxlmem.h > @@ -66,6 +66,45 @@ struct cxl_memdev * > devm_cxl_add_memdev(struct device *host, struct cxl_mem *cxlm, > const struct cdevm_file_operations *cdevm_fops); > > +/** > + * struct mbox_cmd - A command to be submitted to hardware. struct cxl_mbox_cmd > + * @opcode: (input) The command set and command submitted to hardware. > + * @payload_in: (input) Pointer to the input payload. > + * @payload_out: (output) Pointer to the output payload. Must be allocated by > + * the caller. > + * @size_in: (input) Number of bytes to load from @payload_in. > + * @size_out: (input) Max number of bytes loaded into @payload_out. > + * (output) Number of bytes generated by the device. For fixed > size > + * outputs commands this is always expected to be deterministic. > For > + * variable sized output commands, it tells the exact number of > bytes > + * written. > + * @return_code: (output) Error code returned from hardware. > + * > + * This is the primary mechanism used to send commands to the hardware. > + * All the fields except @payload_* correspond exactly to the fields > described in > + * Command Register section of the CXL 2.0 8.2.8.4.5. @payload_in and > + * @payload_out are written to, and read from the Command Payload Registers > + * defined in CXL 2.0 8.2.8.4.8. > + */ > +struct cxl_mbox_cmd { > + u16 opcode; > + void *payload_in; > + void *payload_out; > + size_t size_in; > + size_t size_out; > + u16 return_code; > +#define CXL_MBOX_SUCCESS 0 > +};
