typedef struct tag_object  kobj_t;
typedef struct tag_display display_t;


struct tag_object
{
    uint32_t   magic;
    void      *destroy;
    kobj_t    *fd;
    kobj_t    *bk;
    uint32_t   pid;
};

typedef struct
{
    kobj_t   header;

    u32     handle;
    char   *uaddr;

    u32     pitch;
    u32     gaddr;

    u32     width;
    u32     height;
    u32     max_width;
    u32     max_height;
    u32     page_count;
    u32     max_count;

    u32     format;
    struct radeon_bo  *obj;
}bitmap_t;


struct  io_call_10         /*     SRV_CREATE_SURFACE    */
{
    u32     handle;       // ignored
    void   *data;         // ignored

    u32     width;
    u32     height;
    u32     pitch;        // ignored

    u32     max_width;
    u32     max_height;
    u32     format;       // reserved mbz
};

struct  io_call_12         /*     SRV_LOCK_SURFACE    */
{
    u32     handle;
    void   *data;
    u32     pitch;
};

struct  io_call_14         /*     SRV_RESIZE_SURFACE    */
{
    u32     handle;
    void   *data;
    u32     new_width;
    u32     new_height;
    u32     pitch;
};

typedef struct
{
    uint32_t  idx;
    union
    {
        uint32_t opt[2];
        struct {
            uint32_t max_tex_width;
            uint32_t max_tex_height;
        }cap1;
    };
}hwcaps_t;

#define HW_BIT_BLIT         (1<<0)      /* BGRX blitter             */
#define HW_TEX_BLIT         (1<<1)      /* stretch blit             */
#define HW_VID_BLIT         (1<<2)      /* planar and packed video  */
                                        /*  3 - 63 reserved         */
struct context
{
    kobj_t   header;

    struct radeon_ib ib;

    u32       cmd_buffer;
    u32       cmd_offset;

    bitmap_t *mask;
    u32       seqno;
    int       slot;

};

int get_driver_caps(hwcaps_t *caps);
int create_surface(struct drm_device *dev, struct io_call_10 *pbitmap);
int lock_surface(struct io_call_12 *pbitmap);
int resize_surface(struct io_call_14 *pbitmap);

struct context *get_context(struct drm_device *dev);

int init_bitmaps();