summaryrefslogtreecommitdiffstats
path: root/src/drivers/net
diff options
context:
space:
mode:
authorMichael Brown2007-09-18 03:05:25 +0200
committerMichael Brown2007-09-18 03:05:25 +0200
commitf20cd6f721fa5f3b0c639a76a9269c409c611ef7 (patch)
tree1836c2758bfe89a1d3c91978187d4a6e0861017c /src/drivers/net
parentStarted with the ICM partitioning code. (diff)
downloadipxe-f20cd6f721fa5f3b0c639a76a9269c409c611ef7.tar.gz
ipxe-f20cd6f721fa5f3b0c639a76a9269c409c611ef7.tar.xz
ipxe-f20cd6f721fa5f3b0c639a76a9269c409c611ef7.zip
ICM allocation code *should* now be complete.
Diffstat (limited to 'src/drivers/net')
-rw-r--r--src/drivers/net/mlx_ipoib/arbel.h32
-rw-r--r--src/drivers/net/mlx_ipoib/mt25218.c32
2 files changed, 54 insertions, 10 deletions
diff --git a/src/drivers/net/mlx_ipoib/arbel.h b/src/drivers/net/mlx_ipoib/arbel.h
index adcab36c..02632f28 100644
--- a/src/drivers/net/mlx_ipoib/arbel.h
+++ b/src/drivers/net/mlx_ipoib/arbel.h
@@ -160,15 +160,37 @@ union arbelprm_mad {
struct arbel_dev_limits {
/** Number of reserved QPs */
unsigned int reserved_qps;
+ /** QP context entry size */
+ size_t qpc_entry_size;
+ /** Extended QP context entry size */
+ size_t eqpc_entry_size;
+ /** Number of reserved SRQs */
+ unsigned int reserved_srqs;
+ /** SRQ context entry size */
+ size_t srqc_entry_size;
/** Number of reserved EEs */
unsigned int reserved_ees;
- /** Number of reserved MTTs */
- unsigned int reserved_mtts;
+ /** EE context entry size */
+ size_t eec_entry_size;
+ /** Extended EE context entry size */
+ size_t eeec_entry_size;
/** Number of reserved CQs */
unsigned int reserved_cqs;
- /** Number of reserved SRQs */
- unsigned int reserved_srqs;
- /** Number of reserver UARs */
+ /** CQ context entry size */
+ size_t cqc_entry_size;
+ /** Number of reserved MTTs */
+ unsigned int reserved_mtts;
+ /** MTT entry size */
+ size_t mtt_entry_size;
+ /** Number of reserved MRWs */
+ unsigned int reserved_mrws;
+ /** MPT entry size */
+ size_t mpt_entry_size;
+ /** Number of reserved RDBs */
+ unsigned int reserved_rdbs;
+ /** EQ context entry size */
+ size_t eqc_entry_size;
+ /** Number of reserved UARs */
unsigned int reserved_uars;
};
diff --git a/src/drivers/net/mlx_ipoib/mt25218.c b/src/drivers/net/mlx_ipoib/mt25218.c
index da77a03d..b1e34151 100644
--- a/src/drivers/net/mlx_ipoib/mt25218.c
+++ b/src/drivers/net/mlx_ipoib/mt25218.c
@@ -1494,14 +1494,27 @@ static int arbel_get_limits ( struct arbel *arbel ) {
arbel->limits.reserved_qps =
( 1 << MLX_GET ( &dev_lim, log2_rsvd_qps ) );
+ arbel->limits.qpc_entry_size = MLX_GET ( &dev_lim, qpc_entry_sz );
+ arbel->limits.eqpc_entry_size = MLX_GET ( &dev_lim, eqpc_entry_sz );
+ arbel->limits.reserved_srqs =
+ ( 1 << MLX_GET ( &dev_lim, log2_rsvd_srqs ) );
+ arbel->limits.srqc_entry_size = MLX_GET ( &dev_lim, srq_entry_sz );
arbel->limits.reserved_ees =
( 1 << MLX_GET ( &dev_lim, log2_rsvd_ees ) );
- arbel->limits.reserved_mtts =
- ( 1 << MLX_GET ( &dev_lim, log2_rsvd_mtts ) );
+ arbel->limits.eec_entry_size = MLX_GET ( &dev_lim, eec_entry_sz );
+ arbel->limits.eeec_entry_size = MLX_GET ( &dev_lim, eeec_entry_sz );
arbel->limits.reserved_cqs =
( 1 << MLX_GET ( &dev_lim, log2_rsvd_cqs ) );
- arbel->limits.reserved_srqs =
- ( 1 << MLX_GET ( &dev_lim, log2_rsvd_srqs ) );
+ arbel->limits.cqc_entry_size = MLX_GET ( &dev_lim, cqc_entry_sz );
+ arbel->limits.reserved_mtts =
+ ( 1 << MLX_GET ( &dev_lim, log2_rsvd_mtts ) );
+ arbel->limits.mtt_entry_size = MLX_GET ( &dev_lim, mtt_entry_sz );
+ arbel->limits.reserved_mrws =
+ ( 1 << MLX_GET ( &dev_lim, log2_rsvd_mrws ) );
+ arbel->limits.mpt_entry_size = MLX_GET ( &dev_lim, mpt_entry_sz );
+ arbel->limits.reserved_rdbs =
+ ( 1 << MLX_GET ( &dev_lim, log2_rsvd_rdbs ) );
+ arbel->limits.eqc_entry_size = MLX_GET ( &dev_lim, eqc_entry_sz );
arbel->limits.reserved_uars = MLX_GET ( &dev_lim, num_rsvd_uars );
return 0;
@@ -1616,7 +1629,16 @@ static int arbel_alloc_icm ( struct arbel *arbel ) {
icm_offset += ( ( 1 << log_num_eqs ) * arbel->limits.eqc_entry_size );
/* Multicast table */
-
+ MLX_FILL_1 ( &init_hca, 49,
+ multicast_parameters.mc_base_addr_l, icm_offset );
+ MLX_FILL_1 ( &init_hca, 52,
+ multicast_parameters.log_mc_table_entry_sz,
+ fls ( sizeof ( struct arbelprm_mgm_entry ) - 1 ) );
+ MLX_FILL_1 ( &init_hca, 53,
+ multicast_parameters.mc_table_hash_sz, 8 );
+ MLX_FILL_1 ( &init_hca, 54,
+ multicast_parameters.log_mc_table_sz, 3 );
+ icm_offset += ( 8 * sizeof ( struct arbelprm_mgm_entry ) );
return 0;
}