mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
PCI/DOE: Make asynchronous API private
A synchronous API for DOE has just been introduced. CXL (the only in-tree DOE user so far) was converted to use it instead of the asynchronous API. Consequently, pci_doe_submit_task() as well as the pci_doe_task struct are only used internally, so make them private. Tested-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Lukas Wunner <lukas@wunner.de> Reviewed-by: Ming Li <ming4.li@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/cc19544068483681e91dfe27545c2180cd09f931.1678543498.git.lukas@wunner.de Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
committed by
Dan Williams
parent
58709b924e
commit
0821ff8ed0
@@ -56,6 +56,47 @@ struct pci_doe_mb {
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct pci_doe_protocol {
|
||||||
|
u16 vid;
|
||||||
|
u8 type;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct pci_doe_task - represents a single query/response
|
||||||
|
*
|
||||||
|
* @prot: DOE Protocol
|
||||||
|
* @request_pl: The request payload
|
||||||
|
* @request_pl_sz: Size of the request payload (bytes)
|
||||||
|
* @response_pl: The response payload
|
||||||
|
* @response_pl_sz: Size of the response payload (bytes)
|
||||||
|
* @rv: Return value. Length of received response or error (bytes)
|
||||||
|
* @complete: Called when task is complete
|
||||||
|
* @private: Private data for the consumer
|
||||||
|
* @work: Used internally by the mailbox
|
||||||
|
* @doe_mb: Used internally by the mailbox
|
||||||
|
*
|
||||||
|
* The payload sizes and rv are specified in bytes with the following
|
||||||
|
* restrictions concerning the protocol.
|
||||||
|
*
|
||||||
|
* 1) The request_pl_sz must be a multiple of double words (4 bytes)
|
||||||
|
* 2) The response_pl_sz must be >= a single double word (4 bytes)
|
||||||
|
* 3) rv is returned as bytes but it will be a multiple of double words
|
||||||
|
*/
|
||||||
|
struct pci_doe_task {
|
||||||
|
struct pci_doe_protocol prot;
|
||||||
|
const __le32 *request_pl;
|
||||||
|
size_t request_pl_sz;
|
||||||
|
__le32 *response_pl;
|
||||||
|
size_t response_pl_sz;
|
||||||
|
int rv;
|
||||||
|
void (*complete)(struct pci_doe_task *task);
|
||||||
|
void *private;
|
||||||
|
|
||||||
|
/* initialized by pci_doe_submit_task() */
|
||||||
|
struct work_struct work;
|
||||||
|
struct pci_doe_mb *doe_mb;
|
||||||
|
};
|
||||||
|
|
||||||
static int pci_doe_wait(struct pci_doe_mb *doe_mb, unsigned long timeout)
|
static int pci_doe_wait(struct pci_doe_mb *doe_mb, unsigned long timeout)
|
||||||
{
|
{
|
||||||
if (wait_event_timeout(doe_mb->wq,
|
if (wait_event_timeout(doe_mb->wq,
|
||||||
@@ -519,7 +560,8 @@ EXPORT_SYMBOL_GPL(pci_doe_supports_prot);
|
|||||||
*
|
*
|
||||||
* RETURNS: 0 when task has been successfully queued, -ERRNO on error
|
* RETURNS: 0 when task has been successfully queued, -ERRNO on error
|
||||||
*/
|
*/
|
||||||
int pci_doe_submit_task(struct pci_doe_mb *doe_mb, struct pci_doe_task *task)
|
static int pci_doe_submit_task(struct pci_doe_mb *doe_mb,
|
||||||
|
struct pci_doe_task *task)
|
||||||
{
|
{
|
||||||
if (!pci_doe_supports_prot(doe_mb, task->prot.vid, task->prot.type))
|
if (!pci_doe_supports_prot(doe_mb, task->prot.vid, task->prot.type))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -540,7 +582,6 @@ int pci_doe_submit_task(struct pci_doe_mb *doe_mb, struct pci_doe_task *task)
|
|||||||
queue_work(doe_mb->work_queue, &task->work);
|
queue_work(doe_mb->work_queue, &task->work);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pci_doe_submit_task);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pci_doe() - Perform Data Object Exchange
|
* pci_doe() - Perform Data Object Exchange
|
||||||
|
|||||||
@@ -13,55 +13,8 @@
|
|||||||
#ifndef LINUX_PCI_DOE_H
|
#ifndef LINUX_PCI_DOE_H
|
||||||
#define LINUX_PCI_DOE_H
|
#define LINUX_PCI_DOE_H
|
||||||
|
|
||||||
struct pci_doe_protocol {
|
|
||||||
u16 vid;
|
|
||||||
u8 type;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct pci_doe_mb;
|
struct pci_doe_mb;
|
||||||
|
|
||||||
/**
|
|
||||||
* struct pci_doe_task - represents a single query/response
|
|
||||||
*
|
|
||||||
* @prot: DOE Protocol
|
|
||||||
* @request_pl: The request payload
|
|
||||||
* @request_pl_sz: Size of the request payload (bytes)
|
|
||||||
* @response_pl: The response payload
|
|
||||||
* @response_pl_sz: Size of the response payload (bytes)
|
|
||||||
* @rv: Return value. Length of received response or error (bytes)
|
|
||||||
* @complete: Called when task is complete
|
|
||||||
* @private: Private data for the consumer
|
|
||||||
* @work: Used internally by the mailbox
|
|
||||||
* @doe_mb: Used internally by the mailbox
|
|
||||||
*
|
|
||||||
* Payloads are treated as opaque byte streams which are transmitted verbatim,
|
|
||||||
* without byte-swapping. If payloads contain little-endian register values,
|
|
||||||
* the caller is responsible for conversion with cpu_to_le32() / le32_to_cpu().
|
|
||||||
*
|
|
||||||
* The payload sizes and rv are specified in bytes with the following
|
|
||||||
* restrictions concerning the protocol.
|
|
||||||
*
|
|
||||||
* 1) The request_pl_sz must be a multiple of double words (4 bytes)
|
|
||||||
* 2) The response_pl_sz must be >= a single double word (4 bytes)
|
|
||||||
* 3) rv is returned as bytes but it will be a multiple of double words
|
|
||||||
*
|
|
||||||
* NOTE there is no need for the caller to initialize work or doe_mb.
|
|
||||||
*/
|
|
||||||
struct pci_doe_task {
|
|
||||||
struct pci_doe_protocol prot;
|
|
||||||
const __le32 *request_pl;
|
|
||||||
size_t request_pl_sz;
|
|
||||||
__le32 *response_pl;
|
|
||||||
size_t response_pl_sz;
|
|
||||||
int rv;
|
|
||||||
void (*complete)(struct pci_doe_task *task);
|
|
||||||
void *private;
|
|
||||||
|
|
||||||
/* No need for the user to initialize these fields */
|
|
||||||
struct work_struct work;
|
|
||||||
struct pci_doe_mb *doe_mb;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pci_doe_for_each_off - Iterate each DOE capability
|
* pci_doe_for_each_off - Iterate each DOE capability
|
||||||
* @pdev: struct pci_dev to iterate
|
* @pdev: struct pci_dev to iterate
|
||||||
@@ -76,7 +29,6 @@ struct pci_doe_task {
|
|||||||
|
|
||||||
struct pci_doe_mb *pcim_doe_create_mb(struct pci_dev *pdev, u16 cap_offset);
|
struct pci_doe_mb *pcim_doe_create_mb(struct pci_dev *pdev, u16 cap_offset);
|
||||||
bool pci_doe_supports_prot(struct pci_doe_mb *doe_mb, u16 vid, u8 type);
|
bool pci_doe_supports_prot(struct pci_doe_mb *doe_mb, u16 vid, u8 type);
|
||||||
int pci_doe_submit_task(struct pci_doe_mb *doe_mb, struct pci_doe_task *task);
|
|
||||||
|
|
||||||
int pci_doe(struct pci_doe_mb *doe_mb, u16 vendor, u8 type,
|
int pci_doe(struct pci_doe_mb *doe_mb, u16 vendor, u8 type,
|
||||||
const void *request, size_t request_sz,
|
const void *request, size_t request_sz,
|
||||||
|
|||||||
Reference in New Issue
Block a user