get_adapter_memsize

名称

get_adapter_memsize - アダプタのメモリサイズを取得する

書式

int
get_adapter_memsize(
    uint8_t *  mmio_va,
    uint32_t * adapter_mem_size);

引数

mmio_va
メモリサイズを取得するアダプタのMMIOの仮想アドレス
adapter_mem_size
メモリサイズを受け取る領域

説明

引数mmio_vaでしていされたアダプタのメモリサイズを取得する。
取得したメモリサイズは、引数adapter_mem_sizeが示す領域に格納する。値の単位はバイト。
実装されているメモリサイズではなく、空きメモリサイズを返すらしい。
返す値はページサイズの整数倍にならないことがある。

メモリサイズの取得には、SBOX_SCRATCH0レジスタを使用する。

戻り値

処理に成功した場合、引数adapter_mem_sizeが示す領域に値を設定し、0を返す。
そうでない場合、0以外の値を返す。

とはいうものの、失敗するケースはない。

参照


実装

host/driver/uos_download.c
198 /*
199   DESCRIPTION::gets adapter memory size. calculates size based on scratch register 0
200   PARAMETERS::
201         [in]void *mmio_va - virtual address to access MMIO registers
202         [out]uint32_t *adapter_mem_size - adapter memory size
203   RETURN_VALUE:: 0 if successful, non-zero if failure
204 */
205 int
206 get_adapter_memsize(uint8_t *mmio_va, uint32_t *adapter_mem_size)
207 {
208         int status = 0;
209         uint32_t memsize = 0;
210         uint32_t scratch0 = {0};
211
212         scratch0 = SBOX_READ(mmio_va, SBOX_SCRATCH0);
213         memsize = SCRATCH0_MEM_SIZE_KB(scratch0) * ((1) * 1024);
214
215         // Adjust the memory size based on the memory usage
216         switch (SCRATCH0_MEM_USAGE(scratch0)) {
217         case SCR0_MEM_ALL:
218                 // Do nothing
219                 break;
220
221         case SCR0_MEM_HALF:
222                 memsize /= 2;
223                 break;
224
225         case SCR0_MEM_THIRD:
226                 memsize /= 3;
227                 break;
228
229         case SCR0_MEM_FOURTH:
230                 memsize /= 4;
231                 break;
232
233         default:
234                 // DBG_ASSERT_MSG(false, "Invalid memory usage specified by the bootstrap.\n");
235                 break;
236         }
237
238         *adapter_mem_size = memsize;
239
240         return status;
241 }
最終更新:2012年11月10日 23:38