ICM allocation code *should* now be complete.
authorMichael Brown <mcb30@etherboot.org>
Tue, 18 Sep 2007 01:05:25 +0000 (02:05 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 18 Sep 2007 01:05:25 +0000 (02:05 +0100)
src/drivers/net/mlx_ipoib/arbel.h
src/drivers/net/mlx_ipoib/mt25218.c

index adcab36..02632f2 100644 (file)
@@ -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;
 };
 
index da77a03..b1e3415 100644 (file)
@@ -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;
 }