diff options
-rw-r--r-- | drivers/soc/aspeed/aspeed-mctp.c | 22 | ||||
-rw-r--r-- | include/linux/aspeed-mctp.h | 14 |
2 files changed, 36 insertions, 0 deletions
diff --git a/drivers/soc/aspeed/aspeed-mctp.c b/drivers/soc/aspeed/aspeed-mctp.c index 2fa1dcfc37e3..5073f0e14dc3 100644 --- a/drivers/soc/aspeed/aspeed-mctp.c +++ b/drivers/soc/aspeed/aspeed-mctp.c @@ -1083,6 +1083,28 @@ int aspeed_mctp_get_eid_bdf(struct mctp_client *client, u8 eid, u16 *bdf) } EXPORT_SYMBOL_GPL(aspeed_mctp_get_eid_bdf); +int aspeed_mctp_get_eid(struct mctp_client *client, u16 bdf, + u8 domain_id, u8 *eid) +{ + struct aspeed_mctp_endpoint *endpoint; + int ret = -ENOENT; + + mutex_lock(&client->priv->endpoints_lock); + + list_for_each_entry(endpoint, &client->priv->endpoints, link) { + if (endpoint->data.eid_ext_info.domain_id == domain_id && + endpoint->data.eid_ext_info.bdf == bdf) { + *eid = endpoint->data.eid_ext_info.eid; + ret = 0; + break; + } + } + + mutex_unlock(&client->priv->endpoints_lock); + return ret; +} +EXPORT_SYMBOL_GPL(aspeed_mctp_get_eid); + static int aspeed_mctp_get_eid_info(struct aspeed_mctp *priv, void __user *userbuf, enum mctp_address_type addr_format) diff --git a/include/linux/aspeed-mctp.h b/include/linux/aspeed-mctp.h index d56dceaf146d..d286060a79ee 100644 --- a/include/linux/aspeed-mctp.h +++ b/include/linux/aspeed-mctp.h @@ -129,6 +129,20 @@ void aspeed_mctp_flush_rx_queue(struct mctp_client *client); */ int aspeed_mctp_get_eid_bdf(struct mctp_client *client, u8 eid, u16 *bdf); +/** + * aspeed_mctp_get_eid() - return EID for requested BDF and domainId. + * @client: pointer to existing mctp_client context + * @bdf: requested BDF value + * @domain_id: requested domainId + * @eid: pointer to store EID value + * + * Return: + * * 0 - success, + * * -ENOENT - there is no record for requested bdf/domainId. + */ +int aspeed_mctp_get_eid(struct mctp_client *client, u16 bdf, + u8 domain_id, u8 *eid); + void *aspeed_mctp_packet_alloc(gfp_t flags); void aspeed_mctp_packet_free(void *packet); |