ref: a6e5d4bae6075c741a39fcba62a365d9dffaed93
dir: /sys/src/9/pc/devlml.h/
/* Lml 22 driver */
#define MJPG_VERSION "LML33 v0.2"
#define NLML 2
/*
 * The following values can be modified to tune/set default behaviour of the
 * driver.
 */
/* The number of uS delay in I2C state transitions (probably >= 10) */
#define I2C_DELAY 50
/* The amount of spinning to do before the I2C bus is timed out */
#define I2C_TIMEOUT 10000000
/* The amount of spinning to do before the guest bus is timed out */
#define GUEST_TIMEOUT 10000000
/*
 * The amount of spinning to do before the polling of the still
 * transfer port is aborted.
 */
#define STILL_TIMEOUT 1000000
/*
 * The following number is the maximum number of cards permited. Each
 * card found is mapped to a device minor number starting from 0.
 */
#define MAX_CARDS 1
/* The following are the datastructures needed by the device. */
#define I2C_BUS		0x044
/* which bit of I2C_BUS is which */
#define I2C_SCL		1
#define I2C_SDA		2
#define INTR_JPEGREP	0x08000000
#define INTR_GIRQ0	0x20000000
#define INTR_STAT	0x03c
/* A Device records the properties of the various card types supported. */
typedef struct {
	int	number;		/* The H33_CARDTYPE_ assigned */
	char	*card_name;	/* A string name */
	int	zr060addr;	/* Which guest bus address for the ZR36060 */
} Device;
/*
 * The remainder of the #defs are constants which should not need changing.
 *
 * The PCI vendor and device ids of the zoran chipset on the dc30.
 * these really belong in pci.h.
 */
#define VENDOR_ZORAN		0x11de
#define ZORAN_36057		0x6057
#define ZORAN_36067		ZORAN_36057
#define BT819Addr 0x8a
#define BT856Addr 0x88
#define NBUF 4
#define FRAGM_FINAL_B 1
#define STAT_BIT 1
typedef struct	HdrFragment		HdrFragment;
typedef struct	FrameHeader		FrameHeader;
typedef union	Fragment		Fragment;
typedef struct	FragmentTable		FragmentTable;
typedef struct	CodeData		CodeData;
/* If we're on a little endian architecture, then 0xFF, 0xD8 byte sequence is */
#define MRK_SOI		0xD8FF
#define MRK_APP3	0xE3FF
#define APP_NAME	"LML"
struct FrameHeader {		/* Don't modify this struct, used by h/w */
	ushort	mrkSOI;
	ushort	mrkAPP3;
	ushort	lenAPP3;
	char	nm[4];
	ushort	frameNo;
	vlong	ftime;
	ulong	frameSize;
	ushort	frameSeqNo;
	ushort	SOIfiller;
};
#define FRAGSIZE (128*1024)
union Fragment {
	FrameHeader fh;
	char	fb[FRAGSIZE];
};
struct HdrFragment {
	uchar	hdr[sizeof(FrameHeader)];
	Fragment;
};
struct FragmentTable {		/* Don't modify this struct, used by h/w */
	ulong	addr;		/* Physical address */
	ulong	leng;
};
struct CodeData {		/* Don't modify this struct, used by h/w */
	ulong	pamjpg;		/* Physical addr of statCom[0] */
	ulong	pagrab;		/* Physical addr of grab buffer */
	ulong	statCom[4];	/* Physical addresses of fragdescs */
	FragmentTable fragdesc[4];
	HdrFragment frag[4];
};
enum{
	Codedatasize = (sizeof(CodeData) + BY2PG - 1) & ~(BY2PG - 1),
	Grabdatasize = (730 * 568 * 2 * 2 + BY2PG - 1) & ~(BY2PG - 1),
};
#define POST_OFFICE		0x200
#define POST_PEND		0x02000000
#define POST_TIME		0x01000000
#define POST_DIR		0x00800000
#define GID060	0