Commit da331764 authored by Mikhail Karpenko's avatar Mikhail Karpenko
Browse files

Fix formatting in framepars.c

parent 2d6d6e98
Loading
Loading
Loading
Loading
+974 −929
Original line number Original line Diff line number Diff line
@@ -320,7 +320,8 @@ struct framepars_pd {
/**
/**
 * @brief assign non-static pointers to static data to be used as extern
 * @brief assign non-static pointers to static data to be used as extern
 */
 */
void init_framepars_ptr(void) {
void init_framepars_ptr(void)
{
	frameparsall =      &sFrameParsAll; /// - will be mmap-ed
	frameparsall =      &sFrameParsAll; /// - will be mmap-ed
	framepars =         sFrameParsAll.framePars;
	framepars =         sFrameParsAll.framePars;
	pastpars =          sFrameParsAll.pastPars;
	pastpars =          sFrameParsAll.pastPars;
@@ -340,8 +341,10 @@ int framepars_mmap (struct file *file, struct vm_area_struct *vma);
/**
/**
 * @brief Reset hardware sequencers (i2c, command) and initialize framepars structure
 * @brief Reset hardware sequencers (i2c, command) and initialize framepars structure
 */
 */
void initSequencers(void) {
void initSequencers(void)
{
	unsigned long flags;
	unsigned long flags;

	MDF2(printk("\n"));
	MDF2(printk("\n"));
	printk("initSequencers:resetting both sequencers\n");
	printk("initSequencers:resetting both sequencers\n");
#ifdef TEST_DISABLE_CODE
#ifdef TEST_DISABLE_CODE
@@ -356,8 +359,10 @@ void initSequencers(void) {
/**
/**
 * @brief reset absolute frame number \b thisFrameNumber to \b frame8
 * @brief reset absolute frame number \b thisFrameNumber to \b frame8
 */
 */
void resetFrameNumber(void) {
void resetFrameNumber(void)
{
	int i;
	int i;

#ifdef TEST_DISABLE_CODE
#ifdef TEST_DISABLE_CODE
	thisFrameNumber = X3X3_I2C_FRAME;
	thisFrameNumber = X3X3_I2C_FRAME;
#endif
#endif
@@ -370,8 +375,10 @@ void resetFrameNumber(void) {
/**
/**
 * @brief initialize all parameters, set \b thisFrameNumber to \b frame number read from hardware hardware ( 0 after resetting i2c and cmd_seq)
 * @brief initialize all parameters, set \b thisFrameNumber to \b frame number read from hardware hardware ( 0 after resetting i2c and cmd_seq)
 */
 */
void initFramePars(void) {
void initFramePars(void)
{
	int i;
	int i;

	memset(framepars, 0, sizeof(framepars));
	memset(framepars, 0, sizeof(framepars));
	resetFrameNumber();
	resetFrameNumber();
/// initialize frameParsDeps.pars masks:
/// initialize frameParsDeps.pars masks:
@@ -390,7 +397,8 @@ void initFramePars(void) {
/**
/**
 * @brief reset all global parameters, set default for debug mask (if ELPHEL_DEBUG)
 * @brief reset all global parameters, set default for debug mask (if ELPHEL_DEBUG)
 */
 */
void initGlobalPars(void) {
void initGlobalPars(void)
{
	memset(&globalPars[GLOBALS_PRESERVE], 0, sizeof(globalPars) - GLOBALS_PRESERVE * sizeof(globalPars[0]));
	memset(&globalPars[GLOBALS_PRESERVE], 0, sizeof(globalPars) - GLOBALS_PRESERVE * sizeof(globalPars[0]));
///   MDF(GLOBALPARS(G_DEBUG) = ELPHEL_DEBUG_STARTUP;// removed - add write to fpga init script
///   MDF(GLOBALPARS(G_DEBUG) = ELPHEL_DEBUG_STARTUP;// removed - add write to fpga init script
	MDF(printk("GLOBALPARS(G_DEBUG)=%lx\n", GLOBALPARS(G_DEBUG)));
	MDF(printk("GLOBALPARS(G_DEBUG)=%lx\n", GLOBALPARS(G_DEBUG)));
@@ -400,10 +408,12 @@ void initGlobalPars(void) {
 * @brief initialize structures for individual per-sensor parameters. Now only works for sensor registers using G_MULTI_REGSM. Should be called after/during sensor detection
 * @brief initialize structures for individual per-sensor parameters. Now only works for sensor registers using G_MULTI_REGSM. Should be called after/during sensor detection
 * @return number of multi-regs
 * @return number of multi-regs
 */
 */
int initMultiPars(void) {
int initMultiPars(void)
{
	int i, j, n;
	int i, j, n;
	int ireg = P_MULTI_REGS; /// multi-reg shadows start index
	int ireg = P_MULTI_REGS; /// multi-reg shadows start index
	unsigned long m;
	unsigned long m;

	memset(multiSensIndex, 0, sizeof(multiSensIndex));
	memset(multiSensIndex, 0, sizeof(multiSensIndex));
	memset(multiSensRvrsIndex, 0, sizeof(multiSensRvrsIndex));
	memset(multiSensRvrsIndex, 0, sizeof(multiSensRvrsIndex));
	GLOBALPARS(G_MULTI_NUM) = 0;
	GLOBALPARS(G_MULTI_NUM) = 0;
@@ -432,7 +442,8 @@ int initMultiPars(void) {
 * @param n number of a parameter to read
 * @param n number of a parameter to read
 * @return parameter value (unsigned long)
 * @return parameter value (unsigned long)
 */
 */
inline unsigned long get_imageParamsThis    (int n) {
inline unsigned long get_imageParamsThis(int n)
{
	return framepars[thisFrameNumber & PARS_FRAMES_MASK].pars[n];
	return framepars[thisFrameNumber & PARS_FRAMES_MASK].pars[n];
}
}
//EXPORT_SYMBOL_GPL(get_imageParamsThis);
//EXPORT_SYMBOL_GPL(get_imageParamsThis);
@@ -442,7 +453,8 @@ inline unsigned long get_imageParamsThis (int n) {
 * @param n number of a parameter to read
 * @param n number of a parameter to read
 * @return parameter value (unsigned long)
 * @return parameter value (unsigned long)
 */
 */
inline unsigned long get_imageParamsPrev    (int n) {
inline unsigned long get_imageParamsPrev(int n)
{
	return framepars[(thisFrameNumber - 1) & PARS_FRAMES_MASK].pars[n];
	return framepars[(thisFrameNumber - 1) & PARS_FRAMES_MASK].pars[n];
}
}


@@ -453,7 +465,8 @@ inline unsigned long get_imageParamsPrev (int n) {
 * @param d data to write to the selected parameter
 * @param d data to write to the selected parameter
 */
 */


inline void set_imageParamsThis    (int n,unsigned long d) {
inline void set_imageParamsThis(int n, unsigned long d)
{
	framepars[thisFrameNumber & PARS_FRAMES_MASK].pars[n] = d;
	framepars[thisFrameNumber & PARS_FRAMES_MASK].pars[n] = d;
}
}


@@ -462,7 +475,8 @@ inline void set_imageParamsThis (int n,unsigned long d) {
 * @param n number of a parameter to read (numbers start from FRAMEPAR_GLOBALS)
 * @param n number of a parameter to read (numbers start from FRAMEPAR_GLOBALS)
 * @return parameter value (unsigned long)
 * @return parameter value (unsigned long)
 */
 */
inline unsigned long get_globalParam  (int n) {
inline unsigned long get_globalParam(int n)
{
	return GLOBALPARS(n);
	return GLOBALPARS(n);
}
}
//EXPORT_SYMBOL_GPL(get_globalParam);
//EXPORT_SYMBOL_GPL(get_globalParam);
@@ -472,7 +486,8 @@ inline unsigned long get_globalParam (int n) {
 * @param d data to write to the selected parameter
 * @param d data to write to the selected parameter
 */
 */


inline void          set_globalParam   (int n, unsigned long d) {
inline void          set_globalParam(int n, unsigned long d)
{
	GLOBALPARS(n) = d;
	GLOBALPARS(n) = d;
}
}
//EXPORT_SYMBOL_GPL(set_globalParam);
//EXPORT_SYMBOL_GPL(set_globalParam);
@@ -483,8 +498,10 @@ inline void set_globalParam (int n, unsigned long d) {
 * @param n number of a parameter to set
 * @param n number of a parameter to set
 * @param d data to write to the selected parameter
 * @param d data to write to the selected parameter
 */
 */
inline void          set_imageParamsR_all(int n, unsigned long d) {
inline void          set_imageParamsR_all(int n, unsigned long d)
{
	int i;
	int i;

	for (i = 0; i < PARS_FRAMES; i++) framepars[i].pars[n] = d;
	for (i = 0; i < PARS_FRAMES; i++) framepars[i].pars[n] = d;
}
}


@@ -499,11 +516,13 @@ inline void set_imageParamsR_all(int n, unsigned long d) {
 * @param interframe_pars pointer to structure (between frames in the frame buffer) to save a pointer to past parameters
 * @param interframe_pars pointer to structure (between frames in the frame buffer) to save a pointer to past parameters
 *                   pass NULL if compressor was off (or no time to copy?)
 *                   pass NULL if compressor was off (or no time to copy?)
 */
 */
void updateFramePars(int frame8, struct interframe_params_t * interframe_pars) {
void updateFramePars(int frame8, struct interframe_params_t * interframe_pars)
{
	int findex_this, findex_prev, findex_future, findex_next;
	int findex_this, findex_prev, findex_future, findex_next;
	int index, index32;
	int index, index32;
	unsigned long bmask, bmask32;
	unsigned long bmask, bmask32;
	int pastParsIndex;
	int pastParsIndex;

/// If interrupt was from compression done (circbuf advanced, interframe_pars!=null), the frame8 (hardware) maybe not yet advanced
/// If interrupt was from compression done (circbuf advanced, interframe_pars!=null), the frame8 (hardware) maybe not yet advanced
/// We can fix it here, but it will not work if some frames were not processed in time
/// We can fix it here, but it will not work if some frames were not processed in time
	if ((interframe_pars != NULL) && (((frame8 ^ thisFrameNumber) & PARS_FRAMES_MASK) == 0)) {
	if ((interframe_pars != NULL) && (((frame8 ^ thisFrameNumber) & PARS_FRAMES_MASK) == 0)) {
@@ -588,7 +607,8 @@ void update_frame_pars(void)
 * @param sensorproc
 * @param sensorproc
 * @param frame8
 * @param frame8
 */
 */
inline void processParsASAP (struct sensorproc_t * sensorproc, int frame8) {
inline void processParsASAP(struct sensorproc_t * sensorproc, int frame8)
{
	unsigned long todo, mask, remain;
	unsigned long todo, mask, remain;
	int pars_ahead;                 /// considering parameter "pars_ahead" of the (frame8+job_ahead) mod 8
	int pars_ahead;                 /// considering parameter "pars_ahead" of the (frame8+job_ahead) mod 8
	int frame_proc;                 /// current frame for which parameters are considered
	int frame_proc;                 /// current frame for which parameters are considered
@@ -597,6 +617,7 @@ inline void processParsASAP (struct sensorproc_t * sensorproc, int frame8) {
	unsigned long * p_nasap = &GLOBALPARS(G_CALLNASAP);
	unsigned long * p_nasap = &GLOBALPARS(G_CALLNASAP);
	int i;
	int i;
	int rslt;
	int rslt;

#if ELPHEL_DEBUG
#if ELPHEL_DEBUG
	unsigned long allfunctions = framepars[0].functions  | framepars[1].functions | framepars[2].functions | framepars[3].functions |
	unsigned long allfunctions = framepars[0].functions  | framepars[1].functions | framepars[2].functions | framepars[3].functions |
				     framepars[4].functions | framepars[5].functions | framepars[6].functions | framepars[7].functions;
				     framepars[4].functions | framepars[5].functions | framepars[6].functions | framepars[7].functions;
@@ -650,7 +671,8 @@ inline void processParsASAP (struct sensorproc_t * sensorproc, int frame8) {
//#define G_CALLNEXT4      123 // bitmask of actions to be four  or more frames ahead of the programmed one
//#define G_CALLNEXT4      123 // bitmask of actions to be four  or more frames ahead of the programmed one




inline void processParsSeq (struct sensorproc_t * sensorproc, int frame8, int maxahead) {
inline void processParsSeq(struct sensorproc_t * sensorproc, int frame8, int maxahead)
{
	unsigned long todo, mask, remain;
	unsigned long todo, mask, remain;
	int job_ahead;                  /// doing job "job_ahead" ahead of needed
	int job_ahead;                  /// doing job "job_ahead" ahead of needed
	int pars_ahead;                 /// considering parameter "pars_ahead" of the (frame8+job_ahead) mod 8
	int pars_ahead;                 /// considering parameter "pars_ahead" of the (frame8+job_ahead) mod 8
@@ -663,6 +685,7 @@ inline void processParsSeq (struct sensorproc_t * sensorproc, int frame8, int ma
	int rslt;
	int rslt;
	int max_par_ahead;
	int max_par_ahead;
	int this_ahead;
	int this_ahead;

	if (maxahead > (PARS_FRAMES - 3)) maxahead = PARS_FRAMES - 3;  /// use 5 if maxahead >5
	if (maxahead > (PARS_FRAMES - 3)) maxahead = PARS_FRAMES - 3;  /// use 5 if maxahead >5
/// commands that use FPGA queues for the i2c/sequencer commands, executed at frame syncs
/// commands that use FPGA queues for the i2c/sequencer commands, executed at frame syncs
/// Modifying - as soon as found the frame to process with non-zero masked .functions - process all functions for that
/// Modifying - as soon as found the frame to process with non-zero masked .functions - process all functions for that
@@ -731,7 +754,8 @@ inline void processParsSeq (struct sensorproc_t * sensorproc, int frame8, int ma
//TODO: "Do it later" should be the only reason not to erase todo bit
//TODO: "Do it later" should be the only reason not to erase todo bit
//#define P_CALLASAP       107 // bitmask - what functions work only in the current frame (ASAP) mode
//#define P_CALLASAP       107 // bitmask - what functions work only in the current frame (ASAP) mode


void processPars (struct sensorproc_t * sensorproc, int frame8, int maxahead) {
void processPars(struct sensorproc_t * sensorproc, int frame8, int maxahead)
{
	frame8 &= PARS_FRAMES_MASK;
	frame8 &= PARS_FRAMES_MASK;
/// first - do all ASAP tasks (they should not be done ahead of the corresponding interrupt!)
/// first - do all ASAP tasks (they should not be done ahead of the corresponding interrupt!)
//   MDF6(printk("before first processParsASAP\n"));
//   MDF6(printk("before first processParsASAP\n"));
@@ -750,7 +774,8 @@ void processPars (struct sensorproc_t * sensorproc, int frame8, int maxahead) {
 * @param frame8 frame number (3-bit) to schedule a function for
 * @param frame8 frame number (3-bit) to schedule a function for
 * @param func_num function number to schedule
 * @param func_num function number to schedule
 */
 */
void schedule_pgm_func(int frame8, int func_num) {
void schedule_pgm_func(int frame8, int func_num)
{
	MDF1(printk(" frame8=%d, func_num=%d\n", frame8, func_num));
	MDF1(printk(" frame8=%d, func_num=%d\n", frame8, func_num));
	framepars[frame8 & PARS_FRAMES_MASK].functions |= 1 << func_num;
	framepars[frame8 & PARS_FRAMES_MASK].functions |= 1 << func_num;
}
}
@@ -760,8 +785,10 @@ void schedule_pgm_func(int frame8, int func_num) {
 * @param this_framepars pointer to frame parameters structure
 * @param this_framepars pointer to frame parameters structure
 * @param func_num number of function to schedule
 * @param func_num number of function to schedule
 */
 */
void schedule_this_pgm_func(struct framepars_t * this_framepars, int func_num) {
void schedule_this_pgm_func(struct framepars_t * this_framepars, int func_num)
{
	int frame8 = this_framepars->pars[P_FRAME] & PARS_FRAMES_MASK;
	int frame8 = this_framepars->pars[P_FRAME] & PARS_FRAMES_MASK;

	MDF1(printk(" frame8=%d, func_num=%d\n", frame8, func_num));
	MDF1(printk(" frame8=%d, func_num=%d\n", frame8, func_num));
	framepars[frame8].functions |= 1 << func_num;
	framepars[frame8].functions |= 1 << func_num;
}
}
@@ -771,7 +798,8 @@ void schedule_this_pgm_func(struct framepars_t * this_framepars, int func_num) {
 * @brief just return current thisFrameNumber
 * @brief just return current thisFrameNumber
 * @return current value of thisFrameNumber
 * @return current value of thisFrameNumber
 */
 */
unsigned long getThisFrameNumber(void) { 
unsigned long getThisFrameNumber(void)
{
	return thisFrameNumber;
	return thisFrameNumber;
}
}


@@ -782,8 +810,10 @@ unsigned long getThisFrameNumber(void) {
 * @param pars array of parameters (number/value pairs)
 * @param pars array of parameters (number/value pairs)
 * @return always 0
 * @return always 0
 */
 */
int setFrameParsStatic(int numPars, struct frameparspair_t * pars) { 
int setFrameParsStatic(int numPars, struct frameparspair_t * pars)
{
	int npar, nframe, index;
	int npar, nframe, index;

	for (npar = 0; npar < numPars; npar++) {
	for (npar = 0; npar < numPars; npar++) {
		index = pars[npar].num;
		index = pars[npar].num;
		if (index > P_MAX_PAR) return -ERR_FRAMEPARS_BADINDEX;
		if (index > P_MAX_PAR) return -ERR_FRAMEPARS_BADINDEX;
@@ -804,11 +834,13 @@ int setFrameParsStatic(int numPars, struct frameparspair_t * pars) {
 * @return 0 - OK, -ERR_FRAMEPARS_TOOEARLY, -ERR_FRAMEPARS_TOOLATE
 * @return 0 - OK, -ERR_FRAMEPARS_TOOEARLY, -ERR_FRAMEPARS_TOOLATE
 */
 */
///TODO: Check that writes never to the future or past frame (only 6 of 8 are allowed). Have seen just_this to flood all
///TODO: Check that writes never to the future or past frame (only 6 of 8 are allowed). Have seen just_this to flood all
int setFrameParsAtomic(unsigned long frameno, int maxLatency, int numPars, struct frameparspair_t * pars) {
int setFrameParsAtomic(unsigned long frameno, int maxLatency, int numPars, struct frameparspair_t * pars)
{
	unsigned long flags;
	unsigned long flags;
	int npar, nframe;
	int npar, nframe;
	unsigned long val, bmask, bmask32;
	unsigned long val, bmask, bmask32;
	int index, bindex;
	int index, bindex;

	if (!frameParsInitialized) {
	if (!frameParsInitialized) {
		initSequencers(); /// Will call  initFramePars(); and initialize functions
		initSequencers(); /// Will call  initFramePars(); and initialize functions
	}
	}
@@ -824,8 +856,7 @@ int setFrameParsAtomic(unsigned long frameno, int maxLatency, int numPars, struc
		if (frameno <= (thisFrameNumber + maxLatency)) {
		if (frameno <= (thisFrameNumber + maxLatency)) {
			D1I(local_irq_restore(flags));
			D1I(local_irq_restore(flags));
			return -ERR_FRAMEPARS_TOOLATE;
			return -ERR_FRAMEPARS_TOOLATE;
    }
		}else if (frameno >= (thisFrameNumber + (PARS_FRAMES - 1))) {
    else if (frameno >= (thisFrameNumber+ (PARS_FRAMES-1))) {
			D1I(local_irq_restore(flags));
			D1I(local_irq_restore(flags));
			return -ERR_FRAMEPARS_TOOEARLY;
			return -ERR_FRAMEPARS_TOOEARLY;
		}
		}
@@ -913,7 +944,8 @@ int setFrameParsAtomic(unsigned long frameno, int maxLatency, int numPars, struc
 * @param val parameter value to set
 * @param val parameter value to set
 * @return 0 - OK, -ERR_FRAMEPARS_BADINDEX
 * @return 0 - OK, -ERR_FRAMEPARS_BADINDEX
 */
 */
int setFramePar(struct framepars_t * this_framepars, unsigned long mindex, unsigned long val) {
int setFramePar(struct framepars_t * this_framepars, unsigned long mindex, unsigned long val)
{
	int frame8 =  (this_framepars->pars[P_FRAME]) & PARS_FRAMES_MASK;
	int frame8 =  (this_framepars->pars[P_FRAME]) & PARS_FRAMES_MASK;
	unsigned long flags;
	unsigned long flags;
	int nframe;
	int nframe;
@@ -922,6 +954,7 @@ int setFramePar(struct framepars_t * this_framepars, unsigned long mindex, unsig
	int findex_prev = (findex_this - 1)  & PARS_FRAMES_MASK;
	int findex_prev = (findex_this - 1)  & PARS_FRAMES_MASK;
	int findex_future = (findex_this - 2)  & PARS_FRAMES_MASK;
	int findex_future = (findex_this - 2)  & PARS_FRAMES_MASK;
	int index =    mindex & 0xffff;
	int index =    mindex & 0xffff;

	MDF8(printk(": thisFrameNumber=0x%lx frame8=%d index= %d (0x%lx), val=0x%lx\n", thisFrameNumber, frame8, index, mindex, val));
	MDF8(printk(": thisFrameNumber=0x%lx frame8=%d index= %d (0x%lx), val=0x%lx\n", thisFrameNumber, frame8, index, mindex, val));
	D1I(local_irq_save(flags));
	D1I(local_irq_save(flags));
//  if (index > P_MAX_PAR) {
//  if (index > P_MAX_PAR) {
@@ -993,7 +1026,8 @@ int setFramePar(struct framepars_t * this_framepars, unsigned long mindex, unsig
 * @param pars  array of parameters (number/value pairs). Parameter numbers accept modifiers
 * @param pars  array of parameters (number/value pairs). Parameter numbers accept modifiers
 * @return  0 - OK, -ERR_FRAMEPARS_BADINDEX
 * @return  0 - OK, -ERR_FRAMEPARS_BADINDEX
 */
 */
int setFramePars(struct framepars_t * this_framepars, int numPars, struct frameparspair_t * pars) {
int setFramePars(struct framepars_t * this_framepars, int numPars, struct frameparspair_t * pars)
{
	int frame8;
	int frame8;
	unsigned long flags;
	unsigned long flags;
	int npar, nframe;
	int npar, nframe;
@@ -1002,6 +1036,7 @@ int setFramePars(struct framepars_t * this_framepars, int numPars, struct framep
	int findex_this =  thisFrameNumber & PARS_FRAMES_MASK;
	int findex_this =  thisFrameNumber & PARS_FRAMES_MASK;
	int findex_prev = (findex_this - 1)  & PARS_FRAMES_MASK;
	int findex_prev = (findex_this - 1)  & PARS_FRAMES_MASK;
	int findex_future = (findex_this - 2)  & PARS_FRAMES_MASK;
	int findex_future = (findex_this - 2)  & PARS_FRAMES_MASK;

	MDF8(printk(": this_framepars=0x%x numPars=%d\n", (int)this_framepars, numPars));
	MDF8(printk(": this_framepars=0x%x numPars=%d\n", (int)this_framepars, numPars));
	D1I(local_irq_save(flags));
	D1I(local_irq_save(flags));
	for (npar = 0; npar < numPars; npar++) {
	for (npar = 0; npar < numPars; npar++) {
@@ -1095,9 +1130,11 @@ static struct file_operations framepars_fops = {
 * @param filp   file pointer
 * @param filp   file pointer
 * @return OK - 0, -EINVAL for wrong minor
 * @return OK - 0, -EINVAL for wrong minor
 */
 */
int framepars_open(struct inode *inode, struct file *filp) {
int framepars_open(struct inode *inode, struct file *filp)
{
	int res;
	int res;
	struct framepars_pd * privData;
	struct framepars_pd * privData;

	privData = (struct framepars_pd*)kmalloc(sizeof(struct framepars_pd), GFP_KERNEL);
	privData = (struct framepars_pd*)kmalloc(sizeof(struct framepars_pd), GFP_KERNEL);
	if (!privData) return -ENOMEM;
	if (!privData) return -ENOMEM;
	filp->private_data = privData;
	filp->private_data = privData;
@@ -1120,9 +1157,11 @@ int framepars_open(struct inode *inode, struct file *filp) {
 * @param filp   file pointer
 * @param filp   file pointer
 * @return OK - 0, -EINVAL for wrong minor
 * @return OK - 0, -EINVAL for wrong minor
 */
 */
int framepars_release(struct inode *inode, struct file *filp) {
int framepars_release(struct inode *inode, struct file *filp)
{
	int res = 0;
	int res = 0;
	int p = MINOR(inode->i_rdev);
	int p = MINOR(inode->i_rdev);

	MDF1(printk(": minor=0x%x\n", p));
	MDF1(printk(": minor=0x%x\n", p));
	switch ( p ) {
	switch ( p ) {
	case  CMOSCAM_MINOR_FRAMEPARS:
	case  CMOSCAM_MINOR_FRAMEPARS:
@@ -1147,8 +1186,10 @@ int framepars_release(struct inode *inode, struct file *filp) {
 * @param orig SEEK_SET, SEEK_CUR or SEEK_SET END
 * @param orig SEEK_SET, SEEK_CUR or SEEK_SET END
 * @return file position (absolute frame number)
 * @return file position (absolute frame number)
 */
 */
loff_t framepars_lseek (struct file * file, loff_t offset, int orig) {
loff_t framepars_lseek(struct file * file, loff_t offset, int orig)
{
	unsigned long target_frame;
	unsigned long target_frame;

	MDF1(printk(" offset=0x%x, orig=0x%x\n", (int)offset, (int)orig));
	MDF1(printk(" offset=0x%x, orig=0x%x\n", (int)offset, (int)orig));
	switch (orig) {
	switch (orig) {
	case SEEK_SET:
	case SEEK_SET:
@@ -1239,7 +1280,8 @@ loff_t framepars_lseek (struct file * file, loff_t offset, int orig) {
 * @param off
 * @param off
 * @return OK - number of bytes written, negative - errors
 * @return OK - number of bytes written, negative - errors
 */
 */
ssize_t framepars_write(struct file * file, const char * buf, size_t count, loff_t *off) {
ssize_t framepars_write(struct file * file, const char * buf, size_t count, loff_t *off)
{
	struct frameparspair_t pars_static[256]; /// will be sufficient for most calls
	struct frameparspair_t pars_static[256]; /// will be sufficient for most calls
	struct frameparspair_t * pars = pars_static;
	struct frameparspair_t * pars = pars_static;
	struct framepars_pd * privData = (struct framepars_pd*)file->private_data;
	struct framepars_pd * privData = (struct framepars_pd*)file->private_data;
@@ -1248,6 +1290,7 @@ ssize_t framepars_write(struct file * file, const char * buf, size_t count, loff
	int first = 0;
	int first = 0;
	int last;
	int last;
	int result;
	int result;

	MDF1(printk(": file->f_pos=0x%x, *off=0x%x, count=0x%x\n", (int)file->f_pos, (int)*off, (int)count));
	MDF1(printk(": file->f_pos=0x%x, *off=0x%x, count=0x%x\n", (int)file->f_pos, (int)*off, (int)count));
	count &= ~7; /// sizeof (struct frameparspair_t)==8
	count &= ~7; /// sizeof (struct frameparspair_t)==8
	switch (privData->minor) {
	switch (privData->minor) {
@@ -1309,9 +1352,11 @@ ssize_t framepars_write(struct file * file, const char * buf, size_t count, loff
 * @param vma
 * @param vma
 * @return OK - 0, negative - errors
 * @return OK - 0, negative - errors
 */
 */
int framepars_mmap (struct file *file, struct vm_area_struct *vma) {
int framepars_mmap(struct file *file, struct vm_area_struct *vma)
{
	int result;
	int result;
	struct framepars_pd * privData = (struct framepars_pd*)file->private_data;
	struct framepars_pd * privData = (struct framepars_pd*)file->private_data;

	MDF1(printk(": minor=0x%x\n", privData->minor));
	MDF1(printk(": minor=0x%x\n", privData->minor));
	switch (privData->minor) {
	switch (privData->minor) {
	case  CMOSCAM_MINOR_FRAMEPARS:
	case  CMOSCAM_MINOR_FRAMEPARS: