xref: /openbmc/linux/drivers/media/usb/pwc/pwc-dec23.h (revision 1a59d1b8)
11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
20c0d06caSMauro Carvalho Chehab /* Linux driver for Philips webcam
30c0d06caSMauro Carvalho Chehab    (C) 2004-2006 Luc Saillard (luc@saillard.org)
40c0d06caSMauro Carvalho Chehab 
50c0d06caSMauro Carvalho Chehab    NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx
60c0d06caSMauro Carvalho Chehab    driver and thus may have bugs that are not present in the original version.
70c0d06caSMauro Carvalho Chehab    Please send bug reports and support requests to <luc@saillard.org>.
80c0d06caSMauro Carvalho Chehab    The decompression routines have been implemented by reverse-engineering the
90c0d06caSMauro Carvalho Chehab    Nemosoft binary pwcx module. Caveat emptor.
100c0d06caSMauro Carvalho Chehab 
110c0d06caSMauro Carvalho Chehab */
120c0d06caSMauro Carvalho Chehab 
130c0d06caSMauro Carvalho Chehab #ifndef PWC_DEC23_H
140c0d06caSMauro Carvalho Chehab #define PWC_DEC23_H
150c0d06caSMauro Carvalho Chehab 
160c0d06caSMauro Carvalho Chehab struct pwc_device;
170c0d06caSMauro Carvalho Chehab 
180c0d06caSMauro Carvalho Chehab struct pwc_dec23_private
190c0d06caSMauro Carvalho Chehab {
200c0d06caSMauro Carvalho Chehab 	struct mutex lock;
210c0d06caSMauro Carvalho Chehab 
220c0d06caSMauro Carvalho Chehab 	unsigned char last_cmd, last_cmd_valid;
230c0d06caSMauro Carvalho Chehab 
240c0d06caSMauro Carvalho Chehab   unsigned int scalebits;
250c0d06caSMauro Carvalho Chehab   unsigned int nbitsmask, nbits; /* Number of bits of a color in the compressed stream */
260c0d06caSMauro Carvalho Chehab 
270c0d06caSMauro Carvalho Chehab   unsigned int reservoir;
280c0d06caSMauro Carvalho Chehab   unsigned int nbits_in_reservoir;
290c0d06caSMauro Carvalho Chehab 
300c0d06caSMauro Carvalho Chehab   const unsigned char *stream;
310c0d06caSMauro Carvalho Chehab   int temp_colors[16];
320c0d06caSMauro Carvalho Chehab 
330c0d06caSMauro Carvalho Chehab   unsigned char table_0004_pass1[16][1024];
340c0d06caSMauro Carvalho Chehab   unsigned char table_0004_pass2[16][1024];
350c0d06caSMauro Carvalho Chehab   unsigned char table_8004_pass1[16][256];
360c0d06caSMauro Carvalho Chehab   unsigned char table_8004_pass2[16][256];
370c0d06caSMauro Carvalho Chehab   unsigned int  table_subblock[256][12];
380c0d06caSMauro Carvalho Chehab 
390c0d06caSMauro Carvalho Chehab   unsigned char table_bitpowermask[8][256];
400c0d06caSMauro Carvalho Chehab   unsigned int  table_d800[256];
410c0d06caSMauro Carvalho Chehab   unsigned int  table_dc00[256];
420c0d06caSMauro Carvalho Chehab 
430c0d06caSMauro Carvalho Chehab };
440c0d06caSMauro Carvalho Chehab 
450c0d06caSMauro Carvalho Chehab void pwc_dec23_init(struct pwc_device *pdev, const unsigned char *cmd);
460c0d06caSMauro Carvalho Chehab void pwc_dec23_decompress(struct pwc_device *pdev,
470c0d06caSMauro Carvalho Chehab 			  const void *src,
480c0d06caSMauro Carvalho Chehab 			  void *dst);
490c0d06caSMauro Carvalho Chehab #endif
50