/* 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