Lines Matching refs:ps

68 static Bool fnEPPRead  ( pScanData ps, pUChar pBuffer, ULong ulSize );
69 static Bool fnSPPRead ( pScanData ps, pUChar pBuffer, ULong ulSize );
70 static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize );
92 static Byte ioDataFromSPPFast( pScanData ps )
97 if( _FALSE == ps->f97003 ) {
98 _OUTB_CTRL( ps, ps->CtrlReadHighNibble );
103 bData = _INB_STATUS( ps );
106 _OUTB_CTRL( ps, ps->CtrlReadLowNibble );
110 tmp = _INB_STATUS( ps );
115 _OUTB_CTRL( ps, _CTRL_GENSIGNAL );
121 static Byte ioDataFromSPPMiddle( pScanData ps )
126 if( _FALSE == ps->f97003 ) {
127 _OUTB_CTRL( ps, ps->CtrlReadHighNibble );
132 _INB_STATUS( ps );
133 bData = _INB_STATUS( ps );
136 _OUTB_CTRL( ps, ps->CtrlReadLowNibble );
140 _INB_STATUS( ps );
141 tmp = _INB_STATUS( ps );
146 _OUTB_CTRL( ps, _CTRL_GENSIGNAL );
152 static UChar ioDataFromSPPSlow( pScanData ps )
157 if( _FALSE == ps->f97003 ) {
158 _OUTB_CTRL( ps, ps->CtrlReadHighNibble );
163 _INB_STATUS( ps );
164 _INB_STATUS( ps );
165 bData = _INB_STATUS( ps );
168 _OUTB_CTRL( ps, ps->CtrlReadLowNibble );
172 _INB_STATUS( ps );
173 _INB_STATUS( ps );
174 tmp = _INB_STATUS( ps );
179 _OUTB_CTRL( ps, _CTRL_GENSIGNAL );
185 static UChar ioDataFromSPPSlowest( pScanData ps )
190 if( _FALSE == ps->f97003 ) {
191 _OUTB_CTRL( ps, ps->CtrlReadHighNibble );
196 _INB_STATUS( ps );
197 _INB_STATUS( ps );
198 _INB_STATUS( ps );
199 bData = _INB_STATUS( ps );
202 _OUTB_CTRL( ps, ps->CtrlReadLowNibble );
206 _INB_STATUS( ps );
207 _INB_STATUS( ps );
208 _INB_STATUS( ps );
209 tmp = _INB_STATUS( ps );
214 _OUTB_CTRL( ps, _CTRL_GENSIGNAL );
223 static Bool fnSPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
225 switch( ps->IO.delay ) {
229 *pBuffer = ioDataFromSPPFast( ps );
234 *pBuffer = ioDataFromSPPMiddle( ps );
239 *pBuffer = ioDataFromSPPSlow( ps );
244 *pBuffer = ioDataFromSPPSlowest( ps );
254 static Bool fnEPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
258 if( _IS_ASIC98(ps->sCaps.AsicID)) {
260 sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN );
262 pBuffer[i] = _INB_EPPDATA( ps );
264 sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT );
268 pBuffer[i] = _INB_EPPDATA( ps );
276 static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize )
283 sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN );
290 switch( ps->IO.delay ) {
294 _OUTB_CTRL( ps, start );
295 *pBuffer = _INB_DATA( ps );
296 _OUTB_CTRL( ps, end );
303 _OUTB_CTRL( ps, start );
306 *pBuffer = _INB_DATA( ps );
308 _OUTB_CTRL( ps, end );
316 _OUTB_CTRL( ps, start );
319 *pBuffer = _INB_DATA( ps );
321 _OUTB_CTRL( ps, end );
328 sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT );
334 static void ioSwitchToSPPMode( pScanData ps )
338 ps->IO.bOldControlValue = _INB_CTRL( ps );
339 ps->IO.bOldDataValue = _INB_DATA( ps );
341 _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); /* 0xc4 */
347 static void ioRestoreParallelMode( pScanData ps )
349 _OUTB_CTRL( ps, ps->IO.bOldControlValue & 0x3f );
352 _OUTB_DATA( ps, ps->IO.bOldDataValue );
358 _LOC void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime )
360 _OUTB_DATA( ps, _ID_TO_PRINTER );
363 _OUTB_DATA( ps, _ID1ST );
366 _OUTB_DATA( ps, _ID2ND );
369 _OUTB_DATA( ps, _ID3RD );
372 _OUTB_DATA( ps, _ID4TH );
378 static void ioP98003EstablishScannerConnection( pScanData ps, ULong delTime )
380 _OUTB_DATA( ps, _ID1ST );
383 _OUTB_DATA( ps, _ID2ND );
386 _OUTB_DATA( ps, _ID3RD );
389 _OUTB_DATA( ps, _ID4TH );
395 static Bool ioP96OpenScanPath( pScanData ps )
397 if( 0 == ps->IO.bOpenCount ) {
400 ioSwitchToSPPMode( ps );
403 ioP98001EstablishScannerConnection( ps, 5 );
407 DBG( DBG_IO, "!!!! Path already open (%u)!!!!\n", ps->IO.bOpenCount );
410 ps->IO.bOpenCount++; /* increment the opened count */
415 ps->IO.useEPPCmdMode = _FALSE;
421 static Bool ioP98OpenScanPath( pScanData ps )
427 if( 0 == ps->IO.bOpenCount ) {
430 ioSwitchToSPPMode( ps );
437 if( _ASIC_IS_98001 == ps->sCaps.AsicID ) {
438 ioP98001EstablishScannerConnection( ps, dw );
440 ioP98001EstablishScannerConnection( ps, dw );
441 ioP98001EstablishScannerConnection( ps, dw );
444 ioP98003EstablishScannerConnection( ps, dw );
447 _INB_STATUS( ps );
448 tmp = _INB_STATUS( ps );
452 ps->IO.bOpenCount = 1;
454 if( ps->sCaps.AsicID == IODataFromRegister(ps, ps->RegAsicID)) {
457 ps->IO.bOpenCount = 0;
467 DBG( DBG_IO, "!!!! Path already open (%u)!!!!\n", ps->IO.bOpenCount );
470 ps->IO.bOpenCount++; /* increment the opened count */
477 static void ioCloseScanPath( pScanData ps )
479 if( ps->IO.bOpenCount && !(--ps->IO.bOpenCount)) {
482 ps->IO.bOpenCount = 1;
484 IORegisterToScanner( ps, 0xff );
489 IORegisterToScanner( ps, ps->RegSwitchBus );
491 ps->IO.bOpenCount = 0;
493 ps->IO.useEPPCmdMode = _FALSE;
495 ioRestoreParallelMode( ps );
502 static int ioP98ReadWriteTest( pScanData ps )
520 ps->OpenScanPath(ps);
523 tmp = ps->bLastLampStatus + _SCAN_BYTEMODE;
524 IODataToRegister( ps, ps->RegScanControl, tmp );
526 IODataToRegister( ps, ps->RegModelControl, (_LED_ACTIVITY | _LED_CONTROL));
528 IODataToRegister( ps, ps->RegModeControl, _ModeMappingMem );
529 IODataToRegister( ps, ps->RegMemoryLow, 0 );
530 IODataToRegister( ps, ps->RegMemoryHigh, 0 );
533 IOMoveDataToScanner( ps, buffer, _MEMTEST_SIZE );
535 IODataToRegister( ps, ps->RegModeControl, _ModeMappingMem );
536 IODataToRegister( ps, ps->RegMemoryLow, 0 );
537 IODataToRegister( ps, ps->RegMemoryHigh, 0 );
538 IODataToRegister( ps, ps->RegWidthPixelsLow, 0 );
539 IODataToRegister( ps, ps->RegWidthPixelsHigh, 5 );
541 ps->AsicReg.RD_ModeControl = _ModeReadMappingMem;
543 if( _ASIC_IS_98001 == ps->sCaps.AsicID )
544 ps->CloseScanPath( ps );
546 IOReadScannerImageData( ps, buffer + _MEMTEST_SIZE, _MEMTEST_SIZE );
548 if( _ASIC_IS_98003 == ps->sCaps.AsicID )
549 ps->CloseScanPath( ps );
569 static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
572 size, ps->IO.delay );
573 switch( ps->IO.delay ) {
577 _OUTB_DATA( ps, *pBuffer );
578 _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
579 _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
586 _OUTB_DATA( ps, *pBuffer );
588 _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
590 _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
597 _OUTB_DATA( ps, *pBuffer );
599 _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
601 _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
611 static void ioEnterReadMode( pScanData ps )
613 if( ps->IO.portMode != _PORT_SPP ) {
616 IORegisterToScanner( ps, ps->RegEPPEnable );
618 if( _IS_ASIC98( ps->sCaps.AsicID ))
619 ps->IO.useEPPCmdMode = _TRUE;
622 if( _ASIC_IS_98003 == ps->sCaps.AsicID )
623 ps->IO.bOldControlValue = _INB_CTRL( ps );
626 IORegisterToScanner( ps, ps->RegReadDataMode );
633 _LOC int IOInitialize( pScanData ps )
637 if( NULL == ps )
640 if( _IS_ASIC98(ps->sCaps.AsicID)) {
642 ps->OpenScanPath = ioP98OpenScanPath;
643 ps->ReadWriteTest = ioP98ReadWriteTest;
645 } else if( _IS_ASIC96(ps->sCaps.AsicID)) {
647 ps->OpenScanPath = ioP96OpenScanPath;
655 ps->CloseScanPath = ioCloseScanPath;
656 ps->Device.ReadData = ioReadFunc[ps->IO.portMode].func;
658 ioReadFunc[ps->IO.portMode].name );
665 _LOC void IOMoveDataToScanner( pScanData ps, pUChar pBuffer, ULong size )
668 if( 0 == ps->IO.bOpenCount )
672 IORegisterToScanner( ps, ps->RegInitDataFifo );
673 IORegisterToScanner( ps, ps->RegWriteDataMode );
675 ioSPPWrite( ps, pBuffer, size );
681 _LOC void IODownloadScanStates( pScanData ps )
685 if( 0 == ps->IO.bOpenCount )
689 IORegisterToScanner( ps, ps->RegScanStateControl );
691 ioSPPWrite( ps, ps->a_nbNewAdrPointer, _SCANSTATE_BYTES );
693 if( ps->Scan.fRefreshState ) {
695 IORegisterToScanner( ps, ps->RegRefreshScanState );
700 if (!( IOGetScanState( ps, _TRUE) & _SCANSTATE_STOP))
710 _LOC void IODataToScanner( pScanData ps, Byte bValue )
715 if( 0 == ps->IO.bOpenCount )
719 if( ps->IO.delay < 2 )
723 _OUTB_DATA( ps, bValue );
727 _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
731 _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
738 _LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData )
741 if( 0 == ps->IO.bOpenCount )
746 IORegisterToScanner( ps, bReg );
749 IODataToScanner( ps, bData );
755 _LOC Byte IODataFromRegister( pScanData ps, Byte bReg )
757 IORegisterToScanner( ps, bReg );
759 if( 0 == ps->IO.delay )
760 return ioDataFromSPPFast( ps );
761 else if( 1 == ps->IO.delay )
762 return ioDataFromSPPMiddle( ps );
763 else if( 2 == ps->IO.delay )
764 return ioDataFromSPPSlow( ps );
766 return ioDataFromSPPSlowest( ps );
772 _LOC void IORegisterToScanner( pScanData ps, Byte bReg )
775 if( 0 == ps->IO.bOpenCount )
782 _OUTB_DATA( ps, bReg );
787 if( ps->IO.useEPPCmdMode ) {
791 _OUTB_CTRL( ps, _CTRL_EPPSIGNAL_WRITE); /* 0xc5 */
794 _OUTB_CTRL( ps, _CTRL_EPPTRIG_REGWRITE);/* 0xcd */
797 _OUTB_CTRL( ps, _CTRL_EPPSIGNAL_WRITE); /* 0xc5 */
800 _OUTB_CTRL( ps, _CTRL_END_REGWRITE); /* 0xc4 */
803 if( ps->IO.delay < 2 ) {
806 _OUTB_CTRL( ps, _CTRL_START_REGWRITE);
808 _OUTB_CTRL( ps, _CTRL_END_REGWRITE);
812 _OUTB_CTRL( ps, _CTRL_START_REGWRITE);
814 _OUTB_CTRL( ps, _CTRL_END_REGWRITE);
822 _LOC void IODataRegisterToDAC( pScanData ps, Byte bReg, Byte bData )
826 IODataToRegister( ps, ps->RegADCAddress, bReg );
827 IODataToRegister( ps, ps->RegADCData, bData );
828 IODataToRegister( ps, ps->RegADCSerialOutStr, bData );
835 _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
837 _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
845 _LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg )
849 ps->OpenScanPath( ps );
850 bData = IODataFromRegister( ps, bReg );
851 ps->CloseScanPath( ps );
859 _LOC void IOCmdRegisterToScanner( pScanData ps, Byte bReg, Byte bData )
861 ps->OpenScanPath( ps );
862 IODataToRegister( ps, bReg, bData );
863 ps->CloseScanPath( ps );
869 _LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg )
871 ps->OpenScanPath( ps ); /* establish the connection */
872 IORegisterToScanner( ps, bReg ); /* write register to asic */
873 ps->CloseScanPath( ps ); /* disconnect */
878 _LOC void IOSoftwareReset( pScanData ps )
880 if( _ASIC_IS_98003 != ps->sCaps.AsicID )
883 ps->OpenScanPath( ps );
885 IODataToRegister( ps, ps->RegTestMode, _SW_TESTMODE );
887 ioSwitchToSPPMode( ps );
889 _OUTB_DATA( ps, _RESET1ST );
892 _OUTB_DATA( ps, _RESET2ND );
895 _OUTB_DATA( ps, _RESET3RD );
898 _OUTB_DATA( ps, _RESET4TH );
901 ioRestoreParallelMode( ps );
904 IODataToRegister( ps, ps->RegTestMode, 0 );
905 IODataToRegister( ps, ps->RegScanControl, ps->AsicReg.RD_ScanControl );
907 ps->CloseScanPath( ps );
913 _LOC void IOReadScannerImageData( pScanData ps, pUChar pBuf, ULong size )
915 if( _ASIC_IS_98003 != ps->sCaps.AsicID )
916 ps->OpenScanPath( ps);
918 if( _IS_ASIC98( ps->sCaps.AsicID))
919 IODataToRegister( ps, ps->RegModeControl, ps->AsicReg.RD_ModeControl );
922 ioEnterReadMode( ps );
925 ps->Device.ReadData( ps, pBuf, size );
928 ps->CloseScanPath( ps );
930 if( _ASIC_IS_98003 == ps->sCaps.AsicID )
931 ps->OpenScanPath( ps );