#ifndef _SYS_AV_IEC61883_H
#define _SYS_AV_IEC61883_H
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IEC61883_IMPL_MKVER(major, minor) (((major) << 8) | (minor))
#define IEC61883_IMPL_VER_MAJOR(ver) (((ver) >> 8) & 0xff)
#define IEC61883_IMPL_VER_MINOR(ver) ((ver) & 0xff)
#define IEC61883_V1_0 IEC61883_IMPL_MKVER(1, 0)
typedef struct iec61883_arq {
int arq_type;
int arq_len;
union {
uint32_t quadlet;
uint64_t octlet;
uint8_t buf[8];
} arq_data;
} iec61883_arq_t;
enum {
IEC61883_ARQ_FCP_CMD,
IEC61883_ARQ_FCP_RESP,
IEC61883_ARQ_BUS_RESET
};
typedef struct iec61883_isoch_init {
int ii_version;
int ii_pkt_size;
int ii_frame_size;
int ii_frame_cnt;
int ii_direction;
int ii_bus_speed;
uint64_t ii_channel;
int ii_dbs;
int ii_fn;
int ii_rate_n;
int ii_rate_d;
int ii_ts_mode;
int ii_flags;
int ii_handle;
int ii_frame_rcnt;
off_t ii_mmap_off;
int ii_rchannel;
int ii_error;
} iec61883_isoch_init_t;
enum {
IEC61883_DIR_RECV,
IEC61883_DIR_XMIT
};
enum {
IEC61883_S100,
IEC61883_S200,
IEC61883_S400
};
#define IEC61883_RATE_N_DV_NTSC 1
#define IEC61883_RATE_D_DV_NTSC 0
#define IEC61883_RATE_N_DV_PAL 2
#define IEC61883_RATE_D_DV_PAL 0
enum {
IEC61883_TS_NONE = 0,
IEC61883_TS_SYT = 0x0206
};
enum {
IEC61883_ERR_NOMEM = 1,
IEC61883_ERR_NOCHANNEL,
IEC61883_ERR_PKT_SIZE,
IEC61883_ERR_VERSION,
IEC61883_ERR_INVAL,
IEC61883_ERR_OTHER
};
typedef struct iec61883_xfer {
int xf_empty_idx;
int xf_empty_cnt;
int xf_full_idx;
int xf_full_cnt;
int xf_error;
} iec61883_xfer_t;
typedef struct iec61883_recv {
int rx_handle;
int rx_flags;
iec61883_xfer_t rx_xfer;
} iec61883_recv_t;
typedef struct iec61883_xmit {
int tx_handle;
int tx_flags;
iec61883_xfer_t tx_xfer;
int tx_miss_cnt;
} iec61883_xmit_t;
typedef struct iec61883_plug_init {
int pi_ver;
int pi_loc;
int pi_type;
int pi_num;
int pi_flags;
int pi_handle;
int pi_rnum;
} iec61883_plug_init_t;
enum {
IEC61883_LOC_LOCAL,
IEC61883_LOC_REMOTE
};
enum {
IEC61883_PLUG_IN,
IEC61883_PLUG_OUT,
IEC61883_PLUG_MASTER_IN,
IEC61883_PLUG_MASTER_OUT
};
enum {
IEC61883_PLUG_ANY = -1
};
typedef struct iec61883_plug_reg_val {
int pr_handle;
uint32_t pr_val;
} iec61883_plug_reg_val_t;
typedef struct iec61883_plug_reg_lock {
int pl_handle;
uint32_t pl_arg;
uint32_t pl_data;
uint32_t pl_old;
} iec61883_plug_reg_lock_t;
typedef struct iec61883_node_text_leaf {
int tl_parent;
int tl_num;
int tl_len;
uint32_t *tl_data;
int tl_cnt;
int tl_rlen;
uint32_t tl_spec;
uint32_t tl_lang_id;
uint32_t tl_desc_entry;
} iec61883_node_text_leaf_t;
enum {
IEC61883_ROM_ROOT,
IEC61883_ROM_UNIT
};
#define IEC61883_IMPL_IOC ('i' << 8)
#define IEC61883_IMPL_MKIOC(c) (c | IEC61883_IMPL_IOC)
#define IEC61883_ISOCH_INIT IEC61883_IMPL_MKIOC(0x01)
#define IEC61883_ISOCH_FINI IEC61883_IMPL_MKIOC(0x02)
#define IEC61883_START IEC61883_IMPL_MKIOC(0x03)
#define IEC61883_STOP IEC61883_IMPL_MKIOC(0x04)
#define IEC61883_RECV IEC61883_IMPL_MKIOC(0x05)
#define IEC61883_XMIT IEC61883_IMPL_MKIOC(0x06)
#define IEC61883_PLUG_INIT IEC61883_IMPL_MKIOC(0x07)
#define IEC61883_PLUG_FINI IEC61883_IMPL_MKIOC(0x08)
#define IEC61883_PLUG_REG_READ IEC61883_IMPL_MKIOC(0x09)
#define IEC61883_PLUG_REG_CAS IEC61883_IMPL_MKIOC(0x0A)
#define IEC61883_ARQ_GET_IBUF_SIZE IEC61883_IMPL_MKIOC(0x0B)
#define IEC61883_ARQ_SET_IBUF_SIZE IEC61883_IMPL_MKIOC(0x0C)
#define IEC61883_NODE_GET_BUS_NAME IEC61883_IMPL_MKIOC(0x0D)
#define IEC61883_NODE_GET_UID IEC61883_IMPL_MKIOC(0x0E)
#define IEC61883_NODE_GET_TEXT_LEAF IEC61883_IMPL_MKIOC(0x0F)
#ifdef _KERNEL
typedef struct iec61883_isoch_init32 {
int ii_version;
int ii_pkt_size;
int ii_frame_size;
int ii_frame_cnt;
int ii_direction;
int ii_bus_speed;
uint64_t ii_channel;
int ii_dbs;
int ii_fn;
int ii_rate_n;
int ii_rate_d;
int ii_ts_mode;
int ii_flags;
int ii_handle;
int ii_frame_rcnt;
int32_t ii_mmap_off;
int ii_rchannel;
int ii_error;
} iec61883_isoch_init32_t;
typedef struct iec61883_node_text_leaf32 {
int tl_parent;
int tl_num;
int tl_len;
caddr32_t tl_data;
int tl_cnt;
int tl_rlen;
uint32_t tl_spec;
uint32_t tl_lang_id;
uint32_t tl_desc_entry;
} iec61883_node_text_leaf32_t;
#endif
#ifdef __cplusplus
}
#endif
#endif