125 lines
3 KiB
C
125 lines
3 KiB
C
|
/* 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
|