Annotation of Gnu-Mach/linux/src/drivers/scsi/ppa.h, revision 1.1

1.1     ! root        1: /*  Driver for the PPA3 parallel port SCSI HBA embedded in 
        !             2:  * the Iomega ZIP drive
        !             3:  * 
        !             4:  * (c) 1996     Grant R. Guenther  [email protected]
        !             5:  *             David Campbell     [email protected]
        !             6:  *
        !             7:  *     All comments to David.
        !             8:  */
        !             9: 
        !            10: #include <linux/config.h> /* CONFIG_SCSI_PPA_HAVE_PEDANTIC */
        !            11: #ifndef _PPA_H
        !            12: #define _PPA_H
        !            13: 
        !            14: #define   PPA_VERSION   "1.42"
        !            15: 
        !            16: #if 0
        !            17: /* Use the following to enable certain chipset support
        !            18:  * Default is PEDANTIC = 3
        !            19:  */
        !            20: #ifndef CONFIG_SCSI_PPA_HAVE_PEDANTIC
        !            21: #define CONFIG_SCSI_PPA_HAVE_PEDANTIC  3
        !            22: #endif
        !            23: #endif
        !            24: 
        !            25: /* 
        !            26:  * this driver has been hacked by Matteo Frigo ([email protected])
        !            27:  * to support EPP and scatter-gather.                        [0.26-athena]
        !            28:  *
        !            29:  * additional hacks by David Campbell
        !            30:  * in response to this driver "mis-behaving" on his machine.
        !            31:  *      Fixed EPP to handle "software" changing of EPP port data direction.
        !            32:  *      Chased down EPP timeouts
        !            33:  *      Made this driver "kernel version friendly"           [0.28-athena]
        !            34:  *
        !            35:  * [ Stuff removed ]
        !            36:  *
        !            37:  * Compiled against 2.1.53.
        !            38:  *     Rebuilt ppa_abort() function, should handle unplugged cable.
        !            39:  *                                                     [1.35s]
        !            40:  *
        !            41:  * PPA now auto probes for EPP on base address which are aligned on
        !            42:  * 8 byte boundaries (0x278 & 0x378) using the attached devices.
        !            43:  * This hopefully avoids the nasty problem of trying to detect EPP.
        !            44:  *     Tested on 2.1.53                                [1.36]
        !            45:  *
        !            46:  * The id_probe utility no longer performs read/write tests.
        !            47:  * Additional code included for checking the Intel ECP bug
        !            48:  * (Bit 0 of STR stuck low which fools the EPP detection routine)
        !            49:  *                                                     [1.37]
        !            50:  *
        !            51:  * Oops! Got the bit sign mixed up for the Intel bug check.
        !            52:  * Found that an additional delay is required during SCSI resets
        !            53:  * to allow devices to settle down.
        !            54:  *                                                     [1.38]
        !            55:  *
        !            56:  * Fixed all problems in the parport sharing scheme. Now ppa can be safe
        !            57:  * used with lp or other parport devices on the same parallel port.
        !            58:  *             1997 by Andrea Arcangeli
        !            59:  *                                                     [1.39]
        !            60:  *
        !            61:  * Little fix in ppa engine to ensure that ppa don' t release parport
        !            62:  * or disconnect in wrong cases.
        !            63:  *             1997 by Andrea Arcangeli
        !            64:  *                                                     [1.40]
        !            65:  *
        !            66:  * Corrected ppa.h for 2.1.x kernels (>=2.1.85)
        !            67:  * Modified "Nat Semi Kludge" for extended chipsets
        !            68:  *                                                     [1.41]
        !            69:  *
        !            70:  * Fixed id_probe for EPP 1.9 chipsets (misdetected as EPP 1.7)
        !            71:  *                                                     [1.42]
        !            72:  */
        !            73: /* ------ END OF USER CONFIGURABLE PARAMETERS ----- */
        !            74: 
        !            75: #ifdef PPA_CODE
        !            76: #include  <linux/stddef.h>
        !            77: #include  <linux/module.h>
        !            78: #include  <linux/kernel.h>
        !            79: #include  <linux/tqueue.h>
        !            80: #include  <linux/ioport.h>
        !            81: #include  <linux/delay.h>
        !            82: #include  <linux/proc_fs.h>
        !            83: #include  <linux/stat.h>
        !            84: #include  <linux/blk.h>
        !            85: #include  <linux/sched.h>
        !            86: #include  <linux/interrupt.h>
        !            87: 
        !            88: #include  <asm/io.h>
        !            89: #include  "sd.h"
        !            90: #include  "hosts.h"
        !            91: /* batteries not included :-) */
        !            92: 
        !            93: /*
        !            94:  * modes in which the driver can operate 
        !            95:  */
        !            96: #define   PPA_AUTODETECT        0      /* Autodetect mode                */
        !            97: #define   PPA_NIBBLE            1      /* work in standard 4 bit mode    */
        !            98: #define   PPA_PS2               2      /* PS/2 byte mode         */
        !            99: #define   PPA_EPP_8             3      /* EPP mode, 8 bit                */
        !           100: #define   PPA_EPP_16            4      /* EPP mode, 16 bit               */
        !           101: #define   PPA_EPP_32            5      /* EPP mode, 32 bit               */
        !           102: #define   PPA_UNKNOWN           6      /* Just in case...                */
        !           103: 
        !           104: static char *PPA_MODE_STRING[] =
        !           105: {
        !           106:     "Autodetect",
        !           107:     "SPP",
        !           108:     "PS/2",
        !           109:     "EPP 8 bit",
        !           110:     "EPP 16 bit",
        !           111:     "EPP 32 bit",
        !           112:     "Unknown"};
        !           113: 
        !           114: /* This is a global option */
        !           115: int ppa_sg = SG_ALL;           /* enable/disable scatter-gather. */
        !           116: 
        !           117: /* other options */
        !           118: #define PPA_CAN_QUEUE   1      /* use "queueing" interface */
        !           119: #define PPA_BURST_SIZE 512     /* data burst size */
        !           120: #define PPA_SELECT_TMO  5000   /* how long to wait for target ? */
        !           121: #define PPA_SPIN_TMO    50000  /* ppa_wait loop limiter */
        !           122: #define PPA_DEBUG      0       /* debuging option */
        !           123: #define IN_EPP_MODE(x) (x == PPA_EPP_8 || x == PPA_EPP_16 || x == PPA_EPP_32)
        !           124: 
        !           125: /* args to ppa_connect */
        !           126: #define CONNECT_EPP_MAYBE 1
        !           127: #define CONNECT_NORMAL  0
        !           128: 
        !           129: #define r_dtr(x)        (unsigned char)inb((x))
        !           130: #define r_str(x)        (unsigned char)inb((x)+1)
        !           131: #define r_ctr(x)        (unsigned char)inb((x)+2)
        !           132: #define r_epp(x)        (unsigned char)inb((x)+4)
        !           133: #define r_fifo(x)       (unsigned char)inb((x)+0x400)
        !           134: #define r_ecr(x)        (unsigned char)inb((x)+0x402)
        !           135: 
        !           136: #define w_dtr(x,y)      outb(y, (x))
        !           137: #define w_str(x,y)      outb(y, (x)+1)
        !           138: #define w_ctr(x,y)      outb(y, (x)+2)
        !           139: #define w_epp(x,y)      outb(y, (x)+4)
        !           140: #define w_fifo(x,y)     outb(y, (x)+0x400)
        !           141: #define w_ecr(x,y)      outb(y, (x)+0x402)
        !           142: 
        !           143: static int ppa_engine(ppa_struct *, Scsi_Cmnd *);
        !           144: static int ppa_in(int, char *, int);
        !           145: static int ppa_init(int);
        !           146: static void ppa_interrupt(void *);
        !           147: static int ppa_out(int, char *, int);
        !           148: 
        !           149: struct proc_dir_entry proc_scsi_ppa =
        !           150: {PROC_SCSI_PPA, 3, "ppa", S_IFDIR | S_IRUGO | S_IXUGO, 2};
        !           151: #else
        !           152: extern struct proc_dir_entry proc_scsi_ppa;
        !           153: #endif
        !           154: 
        !           155: int ppa_detect(Scsi_Host_Template *);
        !           156: const char *ppa_info(struct Scsi_Host *);
        !           157: int ppa_queuecommand(Scsi_Cmnd *, void (*done) (Scsi_Cmnd *));
        !           158: int ppa_abort(Scsi_Cmnd *);
        !           159: int ppa_reset(Scsi_Cmnd *, unsigned int);
        !           160: int ppa_proc_info(char *, char **, off_t, int, int, int);
        !           161: int ppa_biosparam(Disk *, kdev_t, int *);
        !           162: 
        !           163: #define PPA {  proc_dir:               &proc_scsi_ppa,                 \
        !           164:                proc_info:              ppa_proc_info,                  \
        !           165:                name:                   "Iomega parport ZIP drive",     \
        !           166:                detect:                 ppa_detect,                     \
        !           167:                queuecommand:           ppa_queuecommand,               \
        !           168:                abort:                  ppa_abort,                      \
        !           169:                reset:                  ppa_reset,                      \
        !           170:                bios_param:             ppa_biosparam,                  \
        !           171:                this_id:                -1,                             \
        !           172:                sg_tablesize:           SG_ALL,                         \
        !           173:                cmd_per_lun:            1,                              \
        !           174:                use_clustering:         ENABLE_CLUSTERING               \
        !           175: }
        !           176: #endif                         /* _PPA_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.