[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: hpcfbio.h



----- Original Message -----
From: "Takao Shinohara" <shin@sm.sony.co.jp>
To: "TAKEMURA, Shin" <takemura@netbsd.org>
Cc: "port-hpcmips-jp ML" <port-hpcmips-ja@jp.netbsd.org>
Sent: Friday, February 25, 2000 5:29 PM
Subject: Re: hpcfbio.h


> "TAKEMURA, Shin" <takemura@netbsd.org> writes:
> > そもそもこうのようなインターフェースが必要かどうかを含めて、
> > なるべく多くの方の意見をお願いします。
>
> HPCFB_ACCESS_xxxはアクセス方法の制限を意味していると思うのですが、MIPSアー
> キテクチャの場合、3バイトとか、5〜7バイトなどの半端なサイズのアクセスを
> 行なうことができます(lwl,lwr,ldl,ldr命令)。
>
> したがって、切りのいいサイズだけでなく、半端なサイズのアクセスができるか
> どうかも記述できたほうがいいと思います。

これは一般的にはどのように記述すればよいのでしょうか。
MIPS の l[wd][lr] 命令が使用可能かどうかとしか書きようがないのでしょうか。
通常のアクセスとシフトをやっているだけのような気がするのですが、

> ちなみに、VR41xxのLCD空間は3バイトアクセスはできないと書いてあります。

LCD が 3 バイトアクセスできないとなると、通常のアクセスとは異なるので
しょうか。まあ、ハードの細かい実装のことはわかりませんね。

とりあえず単純に 1〜16バイトまでそれぞれのフラグを持たせることに
しましょう。CPU によって意味が異なるような場合は、コンパイル時や
実行時にデバイスの側でなんとかするようにしましょう。

バイトオーダーに関連するフラグは、アクセス幅に関係なく、big endian に
対して順序が異なる場合にセットするように変更します。

> 同様に、アクセス方法がcachedを許すかどうかも記述できたほうがいいでしょう。
> 通常はuncachedだと思いますが、特にbcopy()などの場合に性能を上げるために
> cachedでアクセスしたくなることがあります。しかし、I/Oに対してcachedアク
> セスができるかどうかはシステムに依存します。VR41xxのLCD空間はuncachedで
> アクセスしろと書いてあります。

user land のプログラムは mmap で使うので通常は問題ないですか?
kernel 内部で上位のドライバが参照するかも知れません。
一応、cacheable というフラグを設けることにします。

Takemura

#define HPCFB_ACCESS_CACHEABLE  (1<<0) /* cacheable                     */
#define HPCFB_ACCESS_BYTE       (1<<1)  /* permit 8 bit access          */
#define HPCFB_ACCESS_WORD       (1<<2)  /* permit 16 bit access         */
#define HPCFB_ACCESS_3BYTE      (1<<3)  /* permit 3 bytes access        */
#define HPCFB_ACCESS_DWORD      (1<<4)  /* permit 32 bit access         */
#define HPCFB_ACCESS_5BYTE      (1<<5)  /* permit 5 bytes access        */
#define HPCFB_ACCESS_6BYTE      (1<<6)  /* permit 6 bytes access        */
#define HPCFB_ACCESS_7BYTE      (1<<7)  /* permit 7 bytes access        */
#define HPCFB_ACCESS_QWORD      (1<<8)  /* permit 64 bit access         */
#define HPCFB_ACCESS_9BYTE      (1<<9)  /* permit 9 bytes access        */
#define HPCFB_ACCESS_10BYTE     (1<<10) /* permit 10 bytes access       */
#define HPCFB_ACCESS_11BYTE     (1<<11) /* permit 11 bytes access       */
#define HPCFB_ACCESS_12BYTE     (1<<12) /* permit 12 bytes access       */
#define HPCFB_ACCESS_13BYTE     (1<<13) /* permit 13 bytes access       */
#define HPCFB_ACCESS_14BYTE     (1<<14) /* permit 14 bytes access       */
#define HPCFB_ACCESS_15BYTE     (1<<15) /* permit 15 bytes access       */
#define HPCFB_ACCESS_OWORD      (1<<16) /* permit 128 bit access        */

#define HPCFB_ACCESS_LSB_TO_MSB (1<<17) /* first pixel is at LSB side   */
#define HPCFB_ACCESS_R_TO_L     (1<<18) /* pixel order is right to left */
#define HPCFB_ACCESS_B_TO_T     (1<<19) /* pixel order is bottom to top */
#define HPCFB_ACCESS_Y_TO_X     (1<<20) /* pixel ordef is Y to X        */
#define HPCFB_ACCESS_STATIC     (1<<21) /* no translation table         */
#define HPCFB_ACCESS_REVERSE    (1<<22) /* value 0 means white          */
#define HPCFB_ACCESS_PACK_BLANK (1<<23) /* pack has a blank at MSB      */
#define HPCFB_ACCESS_PIXEL_BLANK (1<<24)/* pixel has a blank at MSB     */
#define HPCFB_ACCESS_ALPHA_REVERSE (1<<25) /* alpha value 0 means thick */

#define HPCFB_SWAP_BYTE         (1<<0)
#define HPCFB_SWAP_WORD         (1<<1)
#define HPCFB_SWAP_DWORD        (1<<2)
#define HPCFB_SWAP_QWORD        (1<<3)