Commit 246a42c5 authored by Logan Gunthorpe's avatar Logan Gunthorpe Committed by Jon Mason

NTB: Introduce helper functions to calculate logical port number

This patch introduces the "Logical Port Number" which is similar to the
"Port Number" in that it enumerates the ports in the system.

The original (or Physical) "Port Number" can be any number used by the
hardware to uniquely identify a port in the system. The "Logical Port
Number" enumerates all ports in the system from 0 to the number of
ports minus one.

For example a system with 5 ports might have the following port numbers
which would be enumerated thusly:

Port Number:           1  2  5  7  116
Logical Port Number:   0  1  2  3  4

The logical port number is useful when calculating which resources
to use for which peers. So we thus define two helper functions:
ntb_logical_port_number() and ntb_peer_logical_port_number() which
provide the "Logical Port Number" for the local port and any peer
respectively.
Signed-off-by: default avatarLogan Gunthorpe <logang@deltatee.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Allen Hubbe <allenbh@gmail.com>
Cc: Serge Semin <fancer.lancer@gmail.com>
Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
parent fcdf8e95
...@@ -616,7 +616,6 @@ static inline int ntb_port_number(struct ntb_dev *ntb) ...@@ -616,7 +616,6 @@ static inline int ntb_port_number(struct ntb_dev *ntb)
return ntb->ops->port_number(ntb); return ntb->ops->port_number(ntb);
} }
/** /**
* ntb_peer_port_count() - get the number of peer device ports * ntb_peer_port_count() - get the number of peer device ports
* @ntb: NTB device context. * @ntb: NTB device context.
...@@ -653,6 +652,58 @@ static inline int ntb_peer_port_number(struct ntb_dev *ntb, int pidx) ...@@ -653,6 +652,58 @@ static inline int ntb_peer_port_number(struct ntb_dev *ntb, int pidx)
return ntb->ops->peer_port_number(ntb, pidx); return ntb->ops->peer_port_number(ntb, pidx);
} }
/**
* ntb_logical_port_number() - get the logical port number of the local port
* @ntb: NTB device context.
*
* The Logical Port Number is defined to be a unique number for each
* port starting from zero through to the number of ports minus one.
* This is in contrast to the Port Number where each port can be assigned
* any unique physical number by the hardware.
*
* The logical port number is useful for calculating the resource indexes
* used by peers.
*
* Return: the logical port number or negative value indicating an error
*/
static inline int ntb_logical_port_number(struct ntb_dev *ntb)
{
int lport = ntb_port_number(ntb);
int pidx;
if (lport < 0)
return lport;
for (pidx = 0; pidx < ntb_peer_port_count(ntb); pidx++)
if (lport <= ntb_peer_port_number(ntb, pidx))
return pidx;
return pidx;
}
/**
* ntb_peer_logical_port_number() - get the logical peer port by given index
* @ntb: NTB device context.
* @pidx: Peer port index.
*
* The Logical Port Number is defined to be a unique number for each
* port starting from zero through to the number of ports minus one.
* This is in contrast to the Port Number where each port can be assigned
* any unique physical number by the hardware.
*
* The logical port number is useful for calculating the resource indexes
* used by peers.
*
* Return: the peer's logical port number or negative value indicating an error
*/
static inline int ntb_peer_logical_port_number(struct ntb_dev *ntb, int pidx)
{
if (ntb_peer_port_number(ntb, pidx) < ntb_port_number(ntb))
return pidx;
else
return pidx + 1;
}
/** /**
* ntb_peer_port_idx() - get the peer device port index by given port number * ntb_peer_port_idx() - get the peer device port index by given port number
* @ntb: NTB device context. * @ntb: NTB device context.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment