pas16.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This driver adapted from Drew Eckhardt's Trantor T128 driver
  3.  *
  4.  * Copyright 1993, Drew Eckhardt
  5.  * Visionary Computing
  6.  * (Unix and Linux consulting and custom programming)
  7.  * drew@colorado.edu
  8.  *      +1 (303) 666-5836
  9.  *
  10.  *  ( Based on T128 - DISTRIBUTION RELEASE 3. ) 
  11.  *
  12.  * Modified to work with the Pro Audio Spectrum/Studio 16
  13.  * by John Weidman.
  14.  *
  15.  *
  16.  * For more information, please consult 
  17.  *
  18.  * Media Vision
  19.  * (510) 770-8600
  20.  * (800) 348-7116
  21.  * 
  22.  * and 
  23.  *
  24.  * NCR 5380 Family
  25.  * SCSI Protocol Controller
  26.  * Databook
  27.  *
  28.  * NCR Microelectronics
  29.  * 1635 Aeroplaza Drive
  30.  * Colorado Springs, CO 80916
  31.  * 1+ (719) 578-3400
  32.  * 1+ (800) 334-5454
  33.  */
  34. #ifndef PAS16_H
  35. #define PAS16_H
  36. #define PAS16_PUBLIC_RELEASE 3
  37. #define PDEBUG_INIT 0x1
  38. #define PDEBUG_TRANSFER 0x2
  39. #define PAS16_DEFAULT_BASE_1  0x388
  40. #define PAS16_DEFAULT_BASE_2  0x384
  41. #define PAS16_DEFAULT_BASE_3  0x38c
  42. #define PAS16_DEFAULT_BASE_4  0x288
  43. #define PAS16_DEFAULT_BOARD_1_IRQ 10
  44. #define PAS16_DEFAULT_BOARD_2_IRQ 12
  45. #define PAS16_DEFAULT_BOARD_3_IRQ 14
  46. #define PAS16_DEFAULT_BOARD_4_IRQ 15
  47. /*
  48.  * The Pro Audio Spectrum boards are I/O mapped. They use a Zilog 5380
  49.  * SCSI controller, which is the equivalent of NCR's 5380.  "Pseudo-DMA"
  50.  * architecture is used, where a PAL drives the DMA signals on the 5380
  51.  * allowing fast, blind transfers with proper handshaking. 
  52.  */
  53. /* The Time-out Counter register is used to safe-guard against a stuck
  54.  * bus (in the case of RDY driven handshake) or a stuck byte (if 16-Bit
  55.  * DMA conversion is used).  The counter uses a 28.224MHz clock
  56.  * divided by 14 as its clock source.  In the case of a stuck byte in
  57.  * the holding register, an interrupt is generated (and mixed with the
  58.  * one with the drive) using the CD-ROM interrupt pointer.
  59.  */
  60.  
  61. #define P_TIMEOUT_COUNTER_REG 0x4000
  62. #define P_TC_DISABLE 0x80 /* Set to 0 to enable timeout int. */
  63. /* Bits D6-D0 contain timeout count */
  64. #define P_TIMEOUT_STATUS_REG_OFFSET 0x4001
  65. #define P_TS_TIM 0x80 /* check timeout status */
  66. /* Bits D6-D4 N/U */
  67. #define P_TS_ARM_DRQ_INT 0x08 /* Arm DRQ Int.  When set high,
  68.  * the next rising edge will
  69.  * cause a CD-ROM interrupt.
  70.  * When set low, the interrupt
  71.  * will be cleared.  There is
  72.  * no status available for
  73.  * this interrupt.
  74.  */
  75. #define P_TS_ENABLE_TO_ERR_INTERRUPT /* Enable timeout error int. */
  76. #define P_TS_ENABLE_WAIT /* Enable Wait */
  77. #define P_TS_CT 0x01 /* clear timeout. Note: writing
  78.  * to this register clears the
  79.  * timeout error int. or status
  80.  */
  81. /*
  82.  * The data register reads/writes to/from the 5380 in pseudo-DMA mode
  83.  */ 
  84. #define P_DATA_REG_OFFSET 0x5c00 /* rw */
  85. #define P_STATUS_REG_OFFSET 0x5c01 /* ro */
  86. #define P_ST_RDY 0x80 /* 5380 DDRQ Status */
  87. #define P_IRQ_STATUS 0x5c03
  88. #define P_IS_IRQ 0x80 /* DIRQ status */
  89. #define PCB_CONFIG 0x803
  90. #define MASTER_ADDRESS_PTR 0x9a01  /* Fixed position - no relo */
  91. #define SYS_CONFIG_4 0x8003
  92. #define WAIT_STATE 0xbc00
  93. #define OPERATION_MODE_1 0xec03
  94. #define IO_CONFIG_3 0xf002
  95. #ifndef ASM
  96. int pas16_abort(Scsi_Cmnd *);
  97. int pas16_biosparam(Disk *, kdev_t, int*);
  98. int pas16_detect(Scsi_Host_Template *);
  99. int pas16_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
  100. int pas16_reset(Scsi_Cmnd *, unsigned int);
  101. int pas16_proc_info (char *buffer ,char **start, off_t offset,
  102.      int length, int hostno, int inout);
  103. #ifndef NULL
  104. #define NULL 0
  105. #endif
  106. #ifndef CMD_PER_LUN
  107. #define CMD_PER_LUN 2
  108. #endif
  109. #ifndef CAN_QUEUE
  110. #define CAN_QUEUE 32 
  111. #endif
  112. /* 
  113.  * I hadn't thought of this with the earlier drivers - but to prevent
  114.  * macro definition conflicts, we shouldn't define all of the internal
  115.  * macros when this is being used solely for the host stub.
  116.  */
  117. #define MV_PAS16 {
  118. name:           "Pro Audio Spectrum-16 SCSI", 
  119. detect:         pas16_detect, 
  120. queuecommand:   pas16_queue_command,
  121. abort:          pas16_abort,
  122. reset:          pas16_reset,
  123. bios_param:     pas16_biosparam, 
  124. can_queue:      CAN_QUEUE,
  125. this_id:        7,
  126. sg_tablesize:   SG_ALL,
  127. cmd_per_lun:    CMD_PER_LUN ,
  128. use_clustering: DISABLE_CLUSTERING}
  129. #ifndef HOSTS_C
  130. #define NCR5380_implementation_fields 
  131.     volatile unsigned short io_port
  132. #define NCR5380_local_declare() 
  133.     volatile unsigned short io_port
  134. #define NCR5380_setup(instance) 
  135.     io_port = (instance)->io_port
  136. #define PAS16_io_port(reg) ( io_port + pas16_offset[(reg)] )
  137. #if !(PDEBUG & PDEBUG_TRANSFER) 
  138. #define NCR5380_read(reg) ( inb(PAS16_io_port(reg)) )
  139. #define NCR5380_write(reg, value) ( outb((value),PAS16_io_port(reg)) )
  140. #else
  141. #define NCR5380_read(reg)
  142.     (((unsigned char) printk("scsi%d : read register %d at io_port %04xn"
  143.     , instance->hostno, (reg), PAS16_io_port(reg))), inb( PAS16_io_port(reg)) )
  144. #define NCR5380_write(reg, value) 
  145.     (printk("scsi%d : write %02x to register %d at io_port %04xn", 
  146.     instance->hostno, (value), (reg), PAS16_io_port(reg)),
  147.     outb( (value),PAS16_io_port(reg) ) )
  148. #endif
  149. #define NCR5380_intr pas16_intr
  150. #define do_NCR5380_intr do_pas16_intr
  151. #define NCR5380_queue_command pas16_queue_command
  152. #define NCR5380_abort pas16_abort
  153. #define NCR5380_reset pas16_reset
  154. #define NCR5380_proc_info pas16_proc_info
  155. /* 15 14 12 10 7 5 3 
  156.    1101 0100 1010 1000 */
  157.    
  158. #define PAS16_IRQS 0xd4a8 
  159. #endif /* else def HOSTS_C */
  160. #endif /* ndef ASM */
  161. #endif /* PAS16_H */