111 static MR_LD_SPAN *MR_LdSpanPtrGet(U32 ld, U32 span, MR_FW_RAID_MAP_ALL *map)
112 {
113 return (&map->raidMap.ldSpanMap[ld].spanBlock[span].span);
114 }
115
116 /*
117 * This function will validate Map info data provided by FW
118 */
119 U8 MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo)
120 {
121 MR_FW_RAID_MAP *pFwRaidMap = &map->raidMap;
122
123
124 if (pFwRaidMap->totalSize !=
125 (sizeof (MR_FW_RAID_MAP) - sizeof (MR_LD_SPAN_MAP) +
126 (sizeof (MR_LD_SPAN_MAP) * pFwRaidMap->ldCount))) {
127
128 con_log(CL_ANN1, (CE_NOTE,\
129 "map info structure size 0x%x\
130 is not matching with ld count\n",\
131 ((sizeof (MR_FW_RAID_MAP) - sizeof (MR_LD_SPAN_MAP)) +\
132 (sizeof (MR_LD_SPAN_MAP) * pFwRaidMap->ldCount))));
133
134 con_log(CL_ANN1, (CE_NOTE, "span map 0x%x total size 0x%x\n",\
135 sizeof (MR_LD_SPAN_MAP), pFwRaidMap->totalSize));
136
137 return (0);
138 }
139
140 mr_update_load_balance_params(map, lbInfo);
141
142 return (1);
143 }
144
145 U32
146 MR_GetSpanBlock(U32 ld, U64 row, U64 *span_blk, MR_FW_RAID_MAP_ALL *map, int *div_error)
147 {
148 MR_SPAN_BLOCK_INFO *pSpanBlock = MR_LdSpanInfoGet(ld, map);
149 MR_QUAD_ELEMENT *quad;
150 MR_LD_RAID *raid = MR_LdRaidGet(ld, map);
151 U32 span, j;
152
153 for (span = 0; span < raid->spanDepth; span++, pSpanBlock++) {
154 for (j = 0; j < pSpanBlock->block_span_info.noElements; j++) {
155 quad = &pSpanBlock->block_span_info.quad[j];
|
111 static MR_LD_SPAN *MR_LdSpanPtrGet(U32 ld, U32 span, MR_FW_RAID_MAP_ALL *map)
112 {
113 return (&map->raidMap.ldSpanMap[ld].spanBlock[span].span);
114 }
115
116 /*
117 * This function will validate Map info data provided by FW
118 */
119 U8 MR_ValidateMapInfo(MR_FW_RAID_MAP_ALL *map, PLD_LOAD_BALANCE_INFO lbInfo)
120 {
121 MR_FW_RAID_MAP *pFwRaidMap = &map->raidMap;
122
123
124 if (pFwRaidMap->totalSize !=
125 (sizeof (MR_FW_RAID_MAP) - sizeof (MR_LD_SPAN_MAP) +
126 (sizeof (MR_LD_SPAN_MAP) * pFwRaidMap->ldCount))) {
127
128 con_log(CL_ANN1, (CE_NOTE,\
129 "map info structure size 0x%x\
130 is not matching with ld count\n",\
131 (int)((sizeof (MR_FW_RAID_MAP) - sizeof (MR_LD_SPAN_MAP)) +\
132 (sizeof (MR_LD_SPAN_MAP) * pFwRaidMap->ldCount))));
133
134 con_log(CL_ANN1, (CE_NOTE, "span map 0x%x total size 0x%x\n",\
135 (int)sizeof (MR_LD_SPAN_MAP), pFwRaidMap->totalSize));
136
137 return (0);
138 }
139
140 mr_update_load_balance_params(map, lbInfo);
141
142 return (1);
143 }
144
145 U32
146 MR_GetSpanBlock(U32 ld, U64 row, U64 *span_blk, MR_FW_RAID_MAP_ALL *map, int *div_error)
147 {
148 MR_SPAN_BLOCK_INFO *pSpanBlock = MR_LdSpanInfoGet(ld, map);
149 MR_QUAD_ELEMENT *quad;
150 MR_LD_RAID *raid = MR_LdRaidGet(ld, map);
151 U32 span, j;
152
153 for (span = 0; span < raid->spanDepth; span++, pSpanBlock++) {
154 for (j = 0; j < pSpanBlock->block_span_info.noElements; j++) {
155 quad = &pSpanBlock->block_span_info.quad[j];
|