diff options
author | Leonid Ravich <lravich@gmail.com> | 2019-02-12 23:09:28 +0300 |
---|---|---|
committer | Jon Mason <jdmason@kudzu.us> | 2019-02-13 19:03:18 +0300 |
commit | ebb09b33c60c46fd4f7ffa0af9e693eebe765d1b (patch) | |
tree | d41b706a6f27e5b4d9270cf3e62b6a4249037ab3 /drivers/ntb/hw/mscc | |
parent | c59666bb32b91da84b1d3df0e88789de9e827f61 (diff) | |
download | linux-ebb09b33c60c46fd4f7ffa0af9e693eebe765d1b.tar.xz |
NTB: add new parameter to peer_db_addr() db_bit and db_data
NTB door bell usage depends on NTB hardware.
ex: intel NTB gen1 has one peer door bell register which can be controlled
by the bitmap writen to it, while Intel NTB gen3 has a registers
per door bell and the data trigering the each door bell is always 1.
therefore exposing only peer door bell address forcing the user
to be aware of such low level details
Signed-off-by: Leonid Ravich <Leonid.Ravich@emc.com>
Acked-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Acked-by: Allen Hubbe <allenbh@gmail.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
Diffstat (limited to 'drivers/ntb/hw/mscc')
-rw-r--r-- | drivers/ntb/hw/mscc/ntb_hw_switchtec.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c b/drivers/ntb/hw/mscc/ntb_hw_switchtec.c index f6f00354047b..9ae944597708 100644 --- a/drivers/ntb/hw/mscc/ntb_hw_switchtec.c +++ b/drivers/ntb/hw/mscc/ntb_hw_switchtec.c @@ -710,11 +710,16 @@ static u64 switchtec_ntb_db_read_mask(struct ntb_dev *ntb) static int switchtec_ntb_peer_db_addr(struct ntb_dev *ntb, phys_addr_t *db_addr, - resource_size_t *db_size) + resource_size_t *db_size, + u64 *db_data, + int db_bit) { struct switchtec_ntb *sndev = ntb_sndev(ntb); unsigned long offset; + if (unlikely(db_bit >= BITS_PER_LONG_LONG)) + return -EINVAL; + offset = (unsigned long)sndev->mmio_peer_dbmsg->odb - (unsigned long)sndev->stdev->mmio; @@ -724,6 +729,8 @@ static int switchtec_ntb_peer_db_addr(struct ntb_dev *ntb, *db_addr = pci_resource_start(ntb->pdev, 0) + offset; if (db_size) *db_size = sizeof(u32); + if (db_data) + *db_data = BIT_ULL(db_bit) << sndev->db_peer_shift; return 0; } |