* Install

 # insmod bvdd.o vram_size=[vram_size]
 # mknod /dev/bvdd c 240 0

* API

** struct bvdd_vram_plane_t

<code>
 typedef struct {
     bvdd_addr_t addr;
     uint32_t size;
     int8_t area_type;
     int8_t id;
 } bvdd_vram_plane_t;
</code>

 id:
  プレーンのIDです。BVDD_IOCTL_ALLOC_PLANEではbvddが設定します。

 area_type:
  プレーンの置かれているメモリ領域の種類です。ユーザーが設定します。

 size:
  プレーンのサイズです。ユーザーが設定します。

 addr:
  プレーンのアドレス情報です。bvddが設定します。
 
** struct bvdd_frame_t

<code>
 typedef struct {
     uint8_t format;
     int8_t plane_id;
     int8_t plane_id_u;
     int8_t plane_id_v;
     uint16_t width;
     uint16_t height;
     uint16_t x;
     uint16_t y;
 } bvdd_frame_t;
</code>

 format:
  フレームのピクセルフォーマットを指定します。

 plane_id, plane_id_u, plane_id_v;
  フレームバッファとなるプレーンのIDを指定します。
  _u,_vは設定先がOVERLAY2かつピクセルフォーマットがYUV420である場合以外は無視されます。

 width:
 height:
  フレームの幅と高さを指定します。

 x:
 y:
  フレームの表示位置を指定します。

** open

** close

** mmap

<code>
 bvdd_vram_plane_t *vp = &some_allocated_plane;
 vp->addr.virt = mmap(0, vp->size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, vp->addr.phys);
 if (vp->addr.virt == MAP_FAILED)
     return -1;
</code>

プレーンをプロセスのメモリ空間にマップします。
mmapシステムコールのoffset引数は、BVDD_IOCTL_ALLOC_PLANEでプレーンを確保したと
きに返される addr.phys フィールドの値を渡してください。

** ioctl

*** BVDD_IOCTL_SETUP_BASE_FRAME, BVDD_IOCTL_SETUP_OVERLAY1_FRAME, BVDD_IOCTL_SETUP_OVERLAY2_FRAME



*** BVDD_IOCTL_BRANCH_BASE_FRAME, BVDD_IOCTL_BRANCH_OVERLAY1_FRAME, BVDD_IOCTL_BRANCH_OVERLAY2_FRAME

*** BVDD_IOCTL_ALLOC_PLANE

<code>
 bvdd_vram_plane_t vp;
 vp.area_type = BVDD_VRAM_AREA_BVDD;
 vp.size = 640 * 480 * 2;
 ioctl(fd, BVDD_IOCTL_ALLOC_PLANE, &vp);
</code>

bvdd_vram_plane_t構造体にプレーンを確保する領域の種類とプレーンのサイズ(バイト単位)を
代入して呼び出します。

area_typeには以下の3種類が定義されています。

 BVDD_VRAM_AREA_SRAM:
  PXA27x内蔵SRAMのメモリ領域。256KBytes
   注) まだ上手く動きません

 BVDD_VRAM_AREA_PXAFB:
  標準のフレームバッファドライバ SHARPSL_PXAFB が確保しているメモリ領域。640 * 480 * 2 Bytes
   注) まだ上手く動きません

 BVDD_VRAM_AREA_BVDD:
  bvddモジュールが確保したメモリ領域。

プレーンの確保に成功した場合は、構造体のidとaddr.physフィールドにプレーンの情報が入ります。

*** BVDD_IOCTL_GET_VRAM_AREA_INFO

*** BVDD_IOCTL_GET_VRAM_PLANE_INFO

* Memo

- Do not change resolution (VGA, QVGA) while bvdd device opened. (TODO)
- open()するときとclose()するときの解像度が同じでないといけません。
  状態が違ったときの動作は未保証です。
