📄 hwdrv_apci3200.c
字号:
i_err++; }//if(data[2]!=0 && data[2]!=1) if(data[3]!=0) { printk("\nThe selection of offset range is in error\n"); i_err++; }// if(data[3]!=0) if(data[4]!=0 && data[4]!=1) { printk("\nThe selection of coupling is in error\n"); i_err++; }//if(data[4]!=0 && data[4]!=1) if(data[5]!=0 && data[5]!=1) { printk("\nThe selection of single/differential mode is in error\n"); i_err++; }//if(data[5]!=0 && data[5]!=1) if(data[8]!=0 && data[8]!=1 && data[2]!=2) { printk("\nError in selection of functionality\n"); }//if(data[8]!=0 && data[8]!=1 && data[2]!=2) if(data[12]==0 || data[12]==1) { if (data[6]!=20 && data[6]!=40 && data[6]!=80 && data[6]!=160 ) { printk("\nThe selection of conversion time reload value is in error\n"); i_err++; }// if (data[6]!=20 && data[6]!=40 && data[6]!=80 && data[6]!=160 ) if(data[7]!=2) { printk("\nThe selection of conversion time unit is in error\n"); i_err++; }// if(data[7]!=2) } if(data[9]!=0 && data[9]!=1) { printk("\nThe selection of interrupt enable is in error\n"); i_err++; }//if(data[9]!=0 && data[9]!=1) if(data[11] < 0 || data[11] > 4) { printk("\nThe selection of module is in error\n"); i_err++; }//if(data[11] <0 || data[11]>1) if(data[12] < 0 || data[12] > 3) { printk("\nThe selection of singlechannel/scan selection is in error\n"); i_err++; }//if(data[12] < 0 || data[12]> 3) if(data[13] <0 ||data[13] >16) { printk("\nThe selection of number of channels is in error\n"); i_err++; }// if(data[13] <0 ||data[13] >15) //BEGIN JK 06.07.04: Management of sevrals boards /* i_ChannelCount=data[13]; i_ScanType=data[12]; i_ADDIDATAPolarity = data[2]; i_ADDIDATAGain=data[1]; i_ADDIDATAConversionTime=data[6]; i_ADDIDATAConversionTimeUnit=data[7]; i_ADDIDATAType=data[0]; */ // Save acquisition configuration for the actual board s_BoardInfos [dev->minor].i_ChannelCount=data[13]; s_BoardInfos [dev->minor].i_ScanType=data[12]; s_BoardInfos [dev->minor].i_ADDIDATAPolarity = data[2]; s_BoardInfos [dev->minor].i_ADDIDATAGain=data[1]; s_BoardInfos [dev->minor].i_ADDIDATAConversionTime=data[6]; s_BoardInfos [dev->minor].i_ADDIDATAConversionTimeUnit=data[7]; s_BoardInfos [dev->minor].i_ADDIDATAType=data[0]; //Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 s_BoardInfos [dev->minor].i_ConnectionType=data[5]; //End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 //END JK 06.07.04: Management of sevrals boards //Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 memset (s_BoardInfos [dev->minor].ui_ScanValueArray, 0, (7+12)*sizeof (lsampl_t)); // 7 is the maximal number of channels //End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 //BEGIN JK 02.07.04 : This while can't be do, it block the process when using severals boards //while(i_InterruptFlag==1) while(s_BoardInfos [dev->minor].i_InterruptFlag==1) {#ifndef MSXBOX udelay(1);#else // In the case where the driver is compiled for the MSX-Box // we used a printk to have a little delay because udelay // seems to be broken under the MSX-Box. // This solution hat to be studied. printk("");#endif } //END JK 02.07.04 : This while can't be do, it block the process when using severals boards ui_ChannelNo = CR_CHAN(insn->chanspec); // get the channel //BEGIN JK 06.07.04: Management of sevrals boards //i_ChannelNo=ui_ChannelNo; //ui_Channel_num =ui_ChannelNo; s_BoardInfos [dev->minor].i_ChannelNo=ui_ChannelNo; s_BoardInfos [dev->minor].ui_Channel_num=ui_ChannelNo; //END JK 06.07.04: Management of sevrals boards if(data[5]==0) { if(ui_ChannelNo<0 || ui_ChannelNo>15) { printk("\nThe Selection of the channel is in error\n"); i_err++; }// if(ui_ChannelNo<0 || ui_ChannelNo>15) }//if(data[5]==0) else { if(data[14]==2) { if(ui_ChannelNo<0 || ui_ChannelNo>3) { printk("\nThe Selection of the channel is in error\n"); i_err++; }// if(ui_ChannelNo<0 || ui_ChannelNo>3) }//if(data[14]==2) else { if(ui_ChannelNo<0 || ui_ChannelNo>7) { printk("\nThe Selection of the channel is in error\n"); i_err++; }// if(ui_ChannelNo<0 || ui_ChannelNo>7) }//elseif(data[14]==2) }//elseif(data[5]==0) if(data[12]==0 || data[12]==1) { switch(data[5]) { case 0: if(ui_ChannelNo >=0 && ui_ChannelNo <=3) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=0; s_BoardInfos [dev->minor].i_Offset=0; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo >=0 && ui_ChannelNo <=3) if(ui_ChannelNo >=4 && ui_ChannelNo <=7) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=64; s_BoardInfos [dev->minor].i_Offset=64; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo >=4 && ui_ChannelNo <=7) if(ui_ChannelNo >=8 && ui_ChannelNo <=11) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=128; s_BoardInfos [dev->minor].i_Offset=128; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo >=8 && ui_ChannelNo <=11) if(ui_ChannelNo >=12 && ui_ChannelNo <=15) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=192; s_BoardInfos [dev->minor].i_Offset=192; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo >=12 && ui_ChannelNo <=15) break; case 1: if(data[14]==2) { if(ui_ChannelNo ==0 ) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=0; s_BoardInfos [dev->minor].i_Offset=0; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo ==0 ) if(ui_ChannelNo ==1) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=0; s_BoardInfos [dev->minor].i_Offset=64; //END JK 06.07.04: Management of sevrals boards }// if(ui_ChannelNo ==1) if(ui_ChannelNo ==2 ) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=128; s_BoardInfos [dev->minor].i_Offset=128; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo ==2 ) if(ui_ChannelNo ==3) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=192; s_BoardInfos [dev->minor].i_Offset=192; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo ==3) //BEGIN JK 06.07.04: Management of sevrals boards //i_ChannelNo=0; s_BoardInfos [dev->minor].i_ChannelNo=0; //END JK 06.07.04: Management of sevrals boards ui_ChannelNo=0; break; }//if(data[14]==2) if(ui_ChannelNo >=0 && ui_ChannelNo <=1) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=0; s_BoardInfos [dev->minor].i_Offset=0; //END JK 06.07.04: Management of sevrals boards }//if(ui_ChannelNo >=0 && ui_ChannelNo <=1) if(ui_ChannelNo >=2 && ui_ChannelNo <=3) { //BEGIN JK 06.07.04: Management of sevrals boards //i_ChannelNo=i_ChannelNo-2; //i_Offset=64; s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-2; s_BoardInfos [dev->minor].i_Offset=64; //END JK 06.07.04: Management of sevrals boards ui_ChannelNo=ui_ChannelNo-2; }//if(ui_ChannelNo >=2 && ui_ChannelNo <=3) if(ui_ChannelNo >=4 && ui_ChannelNo <=5) { //BEGIN JK 06.07.04: Management of sevrals boards //i_ChannelNo=i_ChannelNo-4; //i_Offset=128; s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-4; s_BoardInfos [dev->minor].i_Offset=128; //END JK 06.07.04: Management of sevrals boards ui_ChannelNo=ui_ChannelNo-4; }//if(ui_ChannelNo >=4 && ui_ChannelNo <=5) if(ui_ChannelNo >=6 && ui_ChannelNo <=7) { //BEGIN JK 06.07.04: Management of sevrals boards //i_ChannelNo=i_ChannelNo-6; //i_Offset=192; s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-6; s_BoardInfos [dev->minor].i_Offset=192; //END JK 06.07.04: Management of sevrals boards ui_ChannelNo=ui_ChannelNo-6; }//if(ui_ChannelNo >=6 && ui_ChannelNo <=7) break; default: printk("\n This selection of polarity does not exist\n"); i_err++; }//switch(data[2]) }//if(data[12]==0 || data[12]==1) else { switch(data[11]) { case 1: //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=0; s_BoardInfos [dev->minor].i_Offset=0; //END JK 06.07.04: Management of sevrals boards break; case 2: //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=64; s_BoardInfos [dev->minor].i_Offset=64; //END JK 06.07.04: Management of sevrals boards break; case 3: //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=128; s_BoardInfos [dev->minor].i_Offset=128; //END JK 06.07.04: Management of sevrals boards break; case 4: //BEGIN JK 06.07.04: Management of sevrals boards //i_Offset=192; s_BoardInfos [dev->minor].i_Offset=192; //END JK 06.07.04: Management of sevrals boards break; default: printk("\nError in module selection\n"); i_err++; }// switch(data[11]) }// elseif(data[12]==0 || data[12]==1) if(i_err) { i_APCI3200_Reset(dev); return -EINVAL; } //if(i_ScanType!=1) if(s_BoardInfos [dev->minor].i_ScanType!=1) { //BEGIN JK 06.07.04: Management of sevrals boards //i_Count=0; //i_Sum=0; s_BoardInfos [dev->minor].i_Count=0; s_BoardInfos [dev->minor].i_Sum=0; //END JK 06.07.04: Management of sevrals boards }//if(i_ScanType!=1) ul_Config = data[1] |(data[2] << 6) |(data[5]<< 7) |(data[3] << 8) |(data[4] << 9); //BEGIN JK 06.07.04: Management of sevrals boards //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1); while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1); //END JK 06.07.04: Management of sevrals boards /*********************************/ /* Write the channel to configure*/ /*********************************/ //BEGIN JK 06.07.04: Management of sevrals boards //outl(0 | ui_ChannelNo , devpriv->iobase+i_Offset + 0x4); outl(0 | ui_ChannelNo , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x4); //END JK 06.07.04: Management of sevrals boards //BEGIN JK 06.07.04: Management of sevrals boards //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1); while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1); //END JK 06.07.04: Management of sevrals boards /**************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -