アットウィキロゴ

get_uos_reserved_size

名称

get_uos_reserved_size - uOS 用の予約領域サイズを取得する

書式

int
get_uos_reserved_size(
    uint8_t *  mmio_va,
    uint32_t   adapter_memsize,
    uint32_t * uos_reserve_size);

引数

mmio_va
予約領域が存在するカードのMMIOの仮想アドレス
adapter_memsize
カードのメモリサイズ
uos_reserve_size
取得したサイズを格納する領域へのポインタ

説明

uOS 用の予約領域サイズを返す。
とはいうものの、予約領域が何なのかわからない。
この値の分が uOS が自由に使える領域で、残りは Windows とかの host OS が使うとか?

adapter_memsize の UOS_RESERVE_PERCENT パーセントを reserve size とする。
ただし、adapter_memsize のうち少なくとも OS_RESERVE_SIZE_MIN を、非 reserve size として残す。
reserve size は、UOS_RESERVE_SIZE_MIN 以上 UOS_RESERVE_SIZE_MAX 以下。この範囲を超える場合は、もっとも近い限界に丸める。
reserve size のうち 4Ki 未満の部分は切り捨てる。

戻り値

取得に成功した場合、引数 uos_reserve_size が示す領域に取得したサイズを格納して、0 を返す。
そうでない場合、0 以外の値を返す。

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

参照

  • UOS_RESERVE_PERCENT (= 50)
  • OS_RESERVE_SIZE_MIN (= 32Mi)
  • UOS_RESERVE_SIZE_MAX (= 4Gi-4Ki)
  • UOS_RESERVE_SIZE_MIN (= 128Mi)

実装

host/driver/uos_download.c
261 /*
262   DESCRIPTION:: gets reserved size for uos
263   PARAMETERS::
264         [out]uint32_t *uos_reserve_size - reserved uos size
265   RETURN_VALUE:: 0 if successful, non-zero if failure
266 */
267 int
268 get_uos_reserved_size(uint8_t* mmio_va, uint32_t adapter_memsize, uint32_t *uos_reserve_size)
269 {
270         int status = 0;
271         uint32_t reserve_size = 0;
272
273         // Only calculate if not explicitly specified by the user
274         reserve_size = (uint32_t)(adapter_memsize * UOS_RESERVE_PERCENT / 100);
275
276         // Make sure there is at least WINDOWS_RESERVE_SIZE_MIN bytes
277         reserve_size = GET_MIN(reserve_size, adapter_memsize - OS_RESERVE_SIZE_MIN);
278
279         // Keep in mind maximum uos reserve size is uint32_t, so we never overflow
280         reserve_size = GET_MIN(reserve_size, UOS_RESERVE_SIZE_MAX);
281         reserve_size = GET_MAX(reserve_size, UOS_RESERVE_SIZE_MIN);
282
283         // Always align uos reserve size to a page
284         reserve_size = AlignLow(reserve_size, ((4) * 1024));
285
286         *uos_reserve_size = reserve_size;
287         return status;
288 }
最終更新:2012年11月18日 03:21