xref: /plan9/sys/src/9/pc/devlml.h (revision 41dd6b4775bcffc7275c15aee7294944759a2ea7)
1*41dd6b47SDavid du Colombier /* Lml 22 driver */
23ff48bf5SDavid du Colombier 
33ff48bf5SDavid du Colombier #define MJPG_VERSION "LML33 v0.2"
43ff48bf5SDavid du Colombier #define NLML 2
53ff48bf5SDavid du Colombier 
6*41dd6b47SDavid du Colombier /*
7*41dd6b47SDavid du Colombier  * The following values can be modified to tune/set default behaviour of the
8*41dd6b47SDavid du Colombier  * driver.
9*41dd6b47SDavid du Colombier  */
103ff48bf5SDavid du Colombier 
11*41dd6b47SDavid du Colombier /* The number of uS delay in I2C state transitions (probably >= 10) */
123ff48bf5SDavid du Colombier #define I2C_DELAY 50
133ff48bf5SDavid du Colombier 
14*41dd6b47SDavid du Colombier /* The amount of spinning to do before the I2C bus is timed out */
153ff48bf5SDavid du Colombier #define I2C_TIMEOUT 10000000
163ff48bf5SDavid du Colombier 
17*41dd6b47SDavid du Colombier /* The amount of spinning to do before the guest bus is timed out */
183ff48bf5SDavid du Colombier #define GUEST_TIMEOUT 10000000
193ff48bf5SDavid du Colombier 
20*41dd6b47SDavid du Colombier /*
21*41dd6b47SDavid du Colombier  * The amount of spinning to do before the polling of the still
22*41dd6b47SDavid du Colombier  * transfer port is aborted.
23*41dd6b47SDavid du Colombier  */
243ff48bf5SDavid du Colombier #define STILL_TIMEOUT 1000000
253ff48bf5SDavid du Colombier 
26*41dd6b47SDavid du Colombier /*
27*41dd6b47SDavid du Colombier  * The following number is the maximum number of cards permited. Each
28*41dd6b47SDavid du Colombier  * card found is mapped to a device minor number starting from 0.
29*41dd6b47SDavid du Colombier  */
303ff48bf5SDavid du Colombier #define MAX_CARDS 1
313ff48bf5SDavid du Colombier 
32*41dd6b47SDavid du Colombier /* The following are the datastructures needed by the device. */
333ff48bf5SDavid du Colombier #define I2C_BUS		0x044
34*41dd6b47SDavid du Colombier /* which bit of I2C_BUS is which */
353ff48bf5SDavid du Colombier #define I2C_SCL		1
363ff48bf5SDavid du Colombier #define I2C_SDA		2
373ff48bf5SDavid du Colombier #define INTR_JPEGREP	0x08000000
383ff48bf5SDavid du Colombier #define INTR_GIRQ0	0x20000000
393ff48bf5SDavid du Colombier #define INTR_STAT	0x03c
403ff48bf5SDavid du Colombier 
41*41dd6b47SDavid du Colombier /* A Device records the properties of the various card types supported. */
423ff48bf5SDavid du Colombier typedef struct {
43*41dd6b47SDavid du Colombier 	int	number;		/* The H33_CARDTYPE_ assigned */
44*41dd6b47SDavid du Colombier 	char	*card_name;	/* A string name */
45*41dd6b47SDavid du Colombier 	int	zr060addr;	/* Which guest bus address for the ZR36060 */
463ff48bf5SDavid du Colombier } Device;
473ff48bf5SDavid du Colombier 
48*41dd6b47SDavid du Colombier /*
49*41dd6b47SDavid du Colombier  * The remainder of the #defs are constants which should not need changing.
50*41dd6b47SDavid du Colombier  *
51*41dd6b47SDavid du Colombier  * The PCI vendor and device ids of the zoran chipset on the dc30.
52*41dd6b47SDavid du Colombier  * these really belong in pci.h.
53*41dd6b47SDavid du Colombier  */
543ff48bf5SDavid du Colombier #define VENDOR_ZORAN		0x11de
553ff48bf5SDavid du Colombier #define ZORAN_36057		0x6057
563ff48bf5SDavid du Colombier #define ZORAN_36067		ZORAN_36057
573ff48bf5SDavid du Colombier 
583ff48bf5SDavid du Colombier #define BT819Addr 0x8a
593ff48bf5SDavid du Colombier #define BT856Addr 0x88
603ff48bf5SDavid du Colombier 
613ff48bf5SDavid du Colombier #define NBUF 4
623ff48bf5SDavid du Colombier 
633ff48bf5SDavid du Colombier #define FRAGM_FINAL_B 1
643ff48bf5SDavid du Colombier #define STAT_BIT 1
653ff48bf5SDavid du Colombier 
663ff48bf5SDavid du Colombier typedef struct	HdrFragment		HdrFragment;
673ff48bf5SDavid du Colombier typedef struct	FrameHeader		FrameHeader;
683ff48bf5SDavid du Colombier typedef union	Fragment		Fragment;
693ff48bf5SDavid du Colombier typedef struct	FragmentTable		FragmentTable;
703ff48bf5SDavid du Colombier typedef struct	CodeData		CodeData;
713ff48bf5SDavid du Colombier 
72*41dd6b47SDavid du Colombier /* If we're on a little endian architecture, then 0xFF, 0xD8 byte sequence is */
733ff48bf5SDavid du Colombier #define MRK_SOI		0xD8FF
743ff48bf5SDavid du Colombier #define MRK_APP3	0xE3FF
753ff48bf5SDavid du Colombier #define APP_NAME	"LML"
763ff48bf5SDavid du Colombier 
77*41dd6b47SDavid du Colombier struct FrameHeader {		/* Don't modify this struct, used by h/w */
783ff48bf5SDavid du Colombier 	ushort	mrkSOI;
793ff48bf5SDavid du Colombier 	ushort	mrkAPP3;
803ff48bf5SDavid du Colombier 	ushort	lenAPP3;
813ff48bf5SDavid du Colombier 	char	nm[4];
823ff48bf5SDavid du Colombier 	ushort	frameNo;
833ff48bf5SDavid du Colombier 	vlong	ftime;
843ff48bf5SDavid du Colombier 	ulong	frameSize;
853ff48bf5SDavid du Colombier 	ushort	frameSeqNo;
863ff48bf5SDavid du Colombier 	ushort	SOIfiller;
873ff48bf5SDavid du Colombier };
883ff48bf5SDavid du Colombier 
893ff48bf5SDavid du Colombier #define FRAGSIZE (128*1024)
903ff48bf5SDavid du Colombier 
913ff48bf5SDavid du Colombier union Fragment {
923ff48bf5SDavid du Colombier 	FrameHeader fh;
933ff48bf5SDavid du Colombier 	char	fb[FRAGSIZE];
943ff48bf5SDavid du Colombier };
953ff48bf5SDavid du Colombier 
963ff48bf5SDavid du Colombier struct HdrFragment {
973ff48bf5SDavid du Colombier 	uchar	hdr[sizeof(FrameHeader)];
983ff48bf5SDavid du Colombier 	Fragment;
993ff48bf5SDavid du Colombier };
1003ff48bf5SDavid du Colombier 
101*41dd6b47SDavid du Colombier struct FragmentTable {		/* Don't modify this struct, used by h/w */
102*41dd6b47SDavid du Colombier 	ulong	addr;		/* Physical address */
1033ff48bf5SDavid du Colombier 	ulong	leng;
1043ff48bf5SDavid du Colombier };
1053ff48bf5SDavid du Colombier 
106*41dd6b47SDavid du Colombier struct CodeData {		/* Don't modify this struct, used by h/w */
107*41dd6b47SDavid du Colombier 	ulong	pamjpg;		/* Physical addr of statCom[0] */
108*41dd6b47SDavid du Colombier 	ulong	pagrab;		/* Physical addr of grab buffer */
109*41dd6b47SDavid du Colombier 	ulong	statCom[4];	/* Physical addresses of fragdescs */
1103ff48bf5SDavid du Colombier 	FragmentTable fragdesc[4];
1113ff48bf5SDavid du Colombier 	HdrFragment frag[4];
1123ff48bf5SDavid du Colombier };
1133ff48bf5SDavid du Colombier 
1143ff48bf5SDavid du Colombier enum{
1153ff48bf5SDavid du Colombier 	Codedatasize = (sizeof(CodeData) + BY2PG - 1) & ~(BY2PG - 1),
1163ff48bf5SDavid du Colombier 	Grabdatasize = (730 * 568 * 2 * 2 + BY2PG - 1) & ~(BY2PG - 1),
1173ff48bf5SDavid du Colombier };
1183ff48bf5SDavid du Colombier 
1193ff48bf5SDavid du Colombier #define POST_OFFICE		0x200
1203ff48bf5SDavid du Colombier #define POST_PEND		0x02000000
1213ff48bf5SDavid du Colombier #define POST_TIME		0x01000000
1223ff48bf5SDavid du Colombier #define POST_DIR		0x00800000
1233ff48bf5SDavid du Colombier 
1243ff48bf5SDavid du Colombier #define GID060	0
125