forked from mirrors/linux
		
	tty: esp: remove broken driver
The ESP driver has been marked broken for years. It's an old ISA device that clearly nobody cares about any more. Remove it Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
							parent
							
								
									1cceefd3a2
								
							
						
					
					
						commit
						f53a2ade0b
					
				
					 6 changed files with 0 additions and 2816 deletions
				
			
		| 
						 | 
				
			
			@ -1,154 +0,0 @@
 | 
			
		|||
HAYES ESP DRIVER VERSION 2.1
 | 
			
		||||
 | 
			
		||||
A big thanks to the people at Hayes, especially Alan Adamson.  Their support
 | 
			
		||||
has enabled me to provide enhancements to the driver.
 | 
			
		||||
 | 
			
		||||
Please report your experiences with this driver to me (arobinso@nyx.net).  I
 | 
			
		||||
am looking for both positive and negative feedback.
 | 
			
		||||
 | 
			
		||||
*** IMPORTANT CHANGES FOR 2.1 ***
 | 
			
		||||
Support for PIO mode.  Five situations will cause PIO mode to be used:
 | 
			
		||||
1) A multiport card is detected.  PIO mode will always be used.  (8 port cards
 | 
			
		||||
do not support DMA).
 | 
			
		||||
2) The DMA channel is set to an invalid value (anything other than 1 or 3).
 | 
			
		||||
3) The DMA buffer/channel could not be allocated.  The port will revert to PIO
 | 
			
		||||
mode until it is reopened.
 | 
			
		||||
4) Less than a specified number of bytes need to be transferred to/from the
 | 
			
		||||
FIFOs.  PIO mode will be used for that transfer only.
 | 
			
		||||
5) A port needs to do a DMA transfer and another port is already using the
 | 
			
		||||
DMA channel.  PIO mode will be used for that transfer only.
 | 
			
		||||
 | 
			
		||||
Since the Hayes ESP seems to conflict with other cards (notably sound cards)
 | 
			
		||||
when using DMA, DMA is turned off by default.  To use DMA, it must be turned
 | 
			
		||||
on explicitly, either with the "dma=" option described below or with
 | 
			
		||||
setserial.  A multiport card can be forced into DMA mode by using setserial;
 | 
			
		||||
however, most multiport cards don't support DMA.
 | 
			
		||||
 | 
			
		||||
The latest version of setserial allows the enhanced configuration of the ESP
 | 
			
		||||
card to be viewed and modified.
 | 
			
		||||
***
 | 
			
		||||
 | 
			
		||||
This package contains the files needed to compile a module to support the Hayes
 | 
			
		||||
ESP card.  The drivers are basically a modified version of the serial drivers.
 | 
			
		||||
 | 
			
		||||
Features:
 | 
			
		||||
 | 
			
		||||
- Uses the enhanced mode of the ESP card, allowing a wider range of
 | 
			
		||||
  interrupts and features than compatibility mode
 | 
			
		||||
- Uses DMA and 16 bit PIO mode to transfer data to and from the ESP's FIFOs,
 | 
			
		||||
  reducing CPU load
 | 
			
		||||
- Supports primary and secondary ports
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
If the driver is compiled as a module, the IRQs to use can be specified by
 | 
			
		||||
using the irq= option.  The format is:
 | 
			
		||||
 | 
			
		||||
irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380]
 | 
			
		||||
 | 
			
		||||
The address in brackets is the base address of the card.  The IRQ of
 | 
			
		||||
nonexistent cards can be set to 0.  If an IRQ of a card that does exist is set
 | 
			
		||||
to 0, the driver will attempt to guess at the correct IRQ.  For example, to set
 | 
			
		||||
the IRQ of the card at address 0x300 to 12, the insmod command would be:
 | 
			
		||||
 | 
			
		||||
insmod esp irq=0,0,0,0,0,0,12,0
 | 
			
		||||
 | 
			
		||||
The custom divisor can be set by using the divisor= option.  The format is the
 | 
			
		||||
same as for the irq= option.  Each divisor value is a series of hex digits,
 | 
			
		||||
with each digit representing the divisor to use for a corresponding port.  The
 | 
			
		||||
divisor value is constructed RIGHT TO LEFT.  Specifying a nonzero divisor value
 | 
			
		||||
will automatically set the spd_cust flag.  To calculate the divisor to use for
 | 
			
		||||
a certain baud rate, divide the port's base baud (generally 921600) by the
 | 
			
		||||
desired rate.  For example, to set the divisor of the primary port at 0x300 to
 | 
			
		||||
4 and the divisor of the secondary port at 0x308 to 8, the insmod command would
 | 
			
		||||
be:
 | 
			
		||||
 | 
			
		||||
insmod esp divisor=0,0,0,0,0,0,0x84,0
 | 
			
		||||
 | 
			
		||||
The dma= option can be used to set the DMA channel.  The channel can be either
 | 
			
		||||
1 or 3.  Specifying any other value will force the driver to use PIO mode.
 | 
			
		||||
For example, to set the DMA channel to 3, the insmod command would be:
 | 
			
		||||
 | 
			
		||||
insmod esp dma=3
 | 
			
		||||
 | 
			
		||||
The rx_trigger= and tx_trigger= options can be used to set the FIFO trigger
 | 
			
		||||
levels.  They specify when the ESP card should send an interrupt.  Larger
 | 
			
		||||
values will decrease the number of interrupts; however, a value too high may
 | 
			
		||||
result in data loss.  Valid values are 1 through 1023, with 768 being the
 | 
			
		||||
default.  For example, to set the receive trigger level to 512 bytes and the
 | 
			
		||||
transmit trigger level to 700 bytes, the insmod command would be:
 | 
			
		||||
 | 
			
		||||
insmod esp rx_trigger=512 tx_trigger=700
 | 
			
		||||
 | 
			
		||||
The flow_off= and flow_on= options can be used to set the hardware flow off/
 | 
			
		||||
flow on levels.  The flow on level must be lower than the flow off level, and
 | 
			
		||||
the flow off level should be higher than rx_trigger.  Valid values are 1
 | 
			
		||||
through 1023, with 1016 being the default flow off level and 944 being the
 | 
			
		||||
default flow on level.  For example, to set the flow off level to 1000 bytes
 | 
			
		||||
and the flow on level to 935 bytes, the insmod command would be:
 | 
			
		||||
 | 
			
		||||
insmod esp flow_off=1000 flow_on=935
 | 
			
		||||
 | 
			
		||||
The rx_timeout= option can be used to set the receive timeout value.  This
 | 
			
		||||
value indicates how long after receiving the last character that the ESP card
 | 
			
		||||
should wait before signalling an interrupt.  Valid values are 0 though 255,
 | 
			
		||||
with 128 being the default.  A value too high will increase latency, and a
 | 
			
		||||
value too low will cause unnecessary interrupts.  For example, to set the
 | 
			
		||||
receive timeout to 255, the insmod command would be:
 | 
			
		||||
 | 
			
		||||
insmod esp rx_timeout=255
 | 
			
		||||
 | 
			
		||||
The pio_threshold= option sets the threshold (in number of characters) for
 | 
			
		||||
using PIO mode instead of DMA mode.  For example, if this value is 32,
 | 
			
		||||
transfers of 32 bytes or less will always use PIO mode.
 | 
			
		||||
 | 
			
		||||
insmod esp pio_threshold=32
 | 
			
		||||
 | 
			
		||||
Multiple options can be listed on the insmod command line by separating each
 | 
			
		||||
option with a space.  For example:
 | 
			
		||||
 | 
			
		||||
insmod esp dma=3 trigger=512
 | 
			
		||||
 | 
			
		||||
The esp module can be automatically loaded when needed.  To cause this to
 | 
			
		||||
happen, add the following lines to /etc/modprobe.conf (replacing the last line
 | 
			
		||||
with options for your configuration):
 | 
			
		||||
 | 
			
		||||
alias char-major-57 esp
 | 
			
		||||
alias char-major-58 esp
 | 
			
		||||
options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0
 | 
			
		||||
 | 
			
		||||
You may also need to run 'depmod -a'.
 | 
			
		||||
 | 
			
		||||
Devices must be created manually.  To create the devices, note the output from
 | 
			
		||||
the module after it is inserted.  The output will appear in the location where
 | 
			
		||||
kernel messages usually appear (usually /var/adm/messages).  Create two devices
 | 
			
		||||
for each 'tty' mentioned, one with major of 57 and the other with major of 58.
 | 
			
		||||
The minor number should be the same as the tty number reported.  The commands
 | 
			
		||||
would be (replace ? with the tty number):
 | 
			
		||||
 | 
			
		||||
mknod /dev/ttyP? c 57 ?
 | 
			
		||||
mknod /dev/cup? c 58 ?
 | 
			
		||||
 | 
			
		||||
For example, if the following line appears:
 | 
			
		||||
 | 
			
		||||
Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port
 | 
			
		||||
 | 
			
		||||
...two devices should be created:
 | 
			
		||||
 | 
			
		||||
mknod /dev/ttyP8 c 57 8
 | 
			
		||||
mknod /dev/cup8 c 58 8
 | 
			
		||||
 | 
			
		||||
You may need to set the permissions on the devices:
 | 
			
		||||
 | 
			
		||||
chmod 666 /dev/ttyP*
 | 
			
		||||
chmod 666 /dev/cup*
 | 
			
		||||
 | 
			
		||||
The ESP module and the serial module should not conflict (they can be used at
 | 
			
		||||
the same time).  After the ESP module has been loaded the ports on the ESP card
 | 
			
		||||
will no longer be accessible by the serial driver.
 | 
			
		||||
 | 
			
		||||
If I/O errors are experienced when accessing the port, check for IRQ and DMA
 | 
			
		||||
conflicts ('cat /proc/interrupts' and 'cat /proc/dma' for a list of IRQs and
 | 
			
		||||
DMAs currently in use).
 | 
			
		||||
 | 
			
		||||
Enjoy!
 | 
			
		||||
Andrew J. Robinson <arobinso@nyx.net>
 | 
			
		||||
| 
						 | 
				
			
			@ -201,19 +201,6 @@ config DIGIEPCA
 | 
			
		|||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called epca.
 | 
			
		||||
 | 
			
		||||
config ESPSERIAL
 | 
			
		||||
	tristate "Hayes ESP serial port support"
 | 
			
		||||
	depends on SERIAL_NONSTANDARD && ISA && ISA_DMA_API && BROKEN
 | 
			
		||||
	help
 | 
			
		||||
	  This is a driver which supports Hayes ESP serial ports.  Both single
 | 
			
		||||
	  port cards and multiport cards are supported.  Make sure to read
 | 
			
		||||
	  <file:Documentation/hayes-esp.txt>.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called esp.
 | 
			
		||||
 | 
			
		||||
	  If unsure, say N.
 | 
			
		||||
 | 
			
		||||
config MOXA_INTELLIO
 | 
			
		||||
	tristate "Moxa Intellio support"
 | 
			
		||||
	depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,6 @@ obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o
 | 
			
		|||
obj-$(CONFIG_HW_CONSOLE)	+= vt.o defkeymap.o
 | 
			
		||||
obj-$(CONFIG_AUDIT)		+= tty_audit.o
 | 
			
		||||
obj-$(CONFIG_MAGIC_SYSRQ)	+= sysrq.o
 | 
			
		||||
obj-$(CONFIG_ESPSERIAL)		+= esp.o
 | 
			
		||||
obj-$(CONFIG_MVME147_SCC)	+= generic_serial.o vme_scc.o
 | 
			
		||||
obj-$(CONFIG_MVME162_SCC)	+= generic_serial.o vme_scc.o
 | 
			
		||||
obj-$(CONFIG_BVME6000_SCC)	+= generic_serial.o vme_scc.o
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2533
									
								
								drivers/char/esp.c
									
									
									
									
									
								
							
							
						
						
									
										2533
									
								
								drivers/char/esp.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -214,7 +214,6 @@ unifdef-y += futex.h
 | 
			
		|||
unifdef-y += fs.h
 | 
			
		||||
unifdef-y += gameport.h
 | 
			
		||||
unifdef-y += generic_serial.h
 | 
			
		||||
unifdef-y += hayesesp.h
 | 
			
		||||
unifdef-y += hdlcdrv.h
 | 
			
		||||
unifdef-y += hdlc.h
 | 
			
		||||
unifdef-y += hdreg.h
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,114 +0,0 @@
 | 
			
		|||
#ifndef HAYESESP_H
 | 
			
		||||
#define HAYESESP_H
 | 
			
		||||
 | 
			
		||||
struct hayes_esp_config {
 | 
			
		||||
	short flow_on;
 | 
			
		||||
	short flow_off;
 | 
			
		||||
	short rx_trigger;
 | 
			
		||||
	short tx_trigger;
 | 
			
		||||
	short pio_threshold;
 | 
			
		||||
	unsigned char rx_timeout;
 | 
			
		||||
	char dma_channel;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
 | 
			
		||||
#define ESP_DMA_CHANNEL   0
 | 
			
		||||
#define ESP_RX_TRIGGER    768
 | 
			
		||||
#define ESP_TX_TRIGGER    768
 | 
			
		||||
#define ESP_FLOW_OFF      1016
 | 
			
		||||
#define ESP_FLOW_ON       944
 | 
			
		||||
#define ESP_RX_TMOUT      128
 | 
			
		||||
#define ESP_PIO_THRESHOLD 32
 | 
			
		||||
 | 
			
		||||
#define ESP_IN_MAJOR	57	/* major dev # for dial in */
 | 
			
		||||
#define ESP_OUT_MAJOR	58	/* major dev # for dial out */
 | 
			
		||||
#define ESPC_SCALE 	3
 | 
			
		||||
#define UART_ESI_BASE	0x00
 | 
			
		||||
#define UART_ESI_SID	0x01
 | 
			
		||||
#define UART_ESI_RX	0x02
 | 
			
		||||
#define UART_ESI_TX	0x02
 | 
			
		||||
#define UART_ESI_CMD1	0x04
 | 
			
		||||
#define UART_ESI_CMD2	0x05
 | 
			
		||||
#define UART_ESI_STAT1	0x04
 | 
			
		||||
#define UART_ESI_STAT2	0x05
 | 
			
		||||
#define UART_ESI_RWS	0x07
 | 
			
		||||
 | 
			
		||||
#define UART_IER_DMA_TMOUT	0x80
 | 
			
		||||
#define UART_IER_DMA_TC		0x08
 | 
			
		||||
 | 
			
		||||
#define ESI_SET_IRQ		0x04
 | 
			
		||||
#define ESI_SET_DMA_TMOUT	0x05
 | 
			
		||||
#define ESI_SET_SRV_MASK	0x06
 | 
			
		||||
#define ESI_SET_ERR_MASK	0x07
 | 
			
		||||
#define ESI_SET_FLOW_CNTL	0x08
 | 
			
		||||
#define ESI_SET_FLOW_CHARS	0x09
 | 
			
		||||
#define ESI_SET_FLOW_LVL	0x0a
 | 
			
		||||
#define ESI_SET_TRIGGER		0x0b
 | 
			
		||||
#define ESI_SET_RX_TIMEOUT	0x0c
 | 
			
		||||
#define ESI_SET_FLOW_TMOUT	0x0d
 | 
			
		||||
#define ESI_WRITE_UART		0x0e
 | 
			
		||||
#define ESI_READ_UART		0x0f
 | 
			
		||||
#define ESI_SET_MODE		0x10
 | 
			
		||||
#define ESI_GET_ERR_STAT	0x12
 | 
			
		||||
#define ESI_GET_UART_STAT	0x13
 | 
			
		||||
#define ESI_GET_RX_AVAIL	0x14
 | 
			
		||||
#define ESI_GET_TX_AVAIL	0x15
 | 
			
		||||
#define ESI_START_DMA_RX	0x16
 | 
			
		||||
#define ESI_START_DMA_TX	0x17
 | 
			
		||||
#define ESI_ISSUE_BREAK		0x1a
 | 
			
		||||
#define ESI_FLUSH_RX		0x1b
 | 
			
		||||
#define ESI_FLUSH_TX		0x1c
 | 
			
		||||
#define ESI_SET_BAUD		0x1d
 | 
			
		||||
#define ESI_SET_ENH_IRQ		0x1f
 | 
			
		||||
#define ESI_SET_REINTR		0x20
 | 
			
		||||
#define ESI_SET_PRESCALAR	0x23
 | 
			
		||||
#define ESI_NO_COMMAND		0xff
 | 
			
		||||
 | 
			
		||||
#define ESP_STAT_RX_TIMEOUT	0x01
 | 
			
		||||
#define ESP_STAT_DMA_RX		0x02
 | 
			
		||||
#define ESP_STAT_DMA_TX		0x04
 | 
			
		||||
#define ESP_STAT_NEVER_DMA      0x08
 | 
			
		||||
#define ESP_STAT_USE_PIO        0x10
 | 
			
		||||
 | 
			
		||||
#define ESP_MAGIC		0x53ee
 | 
			
		||||
#define ESP_XMIT_SIZE		4096
 | 
			
		||||
 | 
			
		||||
struct esp_struct {
 | 
			
		||||
	int			magic;
 | 
			
		||||
	struct tty_port		port;
 | 
			
		||||
	spinlock_t		lock;
 | 
			
		||||
	int			io_port;
 | 
			
		||||
	int			irq;
 | 
			
		||||
	int			read_status_mask;
 | 
			
		||||
	int			ignore_status_mask;
 | 
			
		||||
	int			timeout;
 | 
			
		||||
	int			stat_flags;
 | 
			
		||||
	int			custom_divisor;
 | 
			
		||||
	int			close_delay;
 | 
			
		||||
	unsigned short		closing_wait;
 | 
			
		||||
	unsigned short		closing_wait2;
 | 
			
		||||
	int			IER; 	/* Interrupt Enable Register */
 | 
			
		||||
	int			MCR; 	/* Modem control register */
 | 
			
		||||
	unsigned long		last_active;
 | 
			
		||||
	int			line;
 | 
			
		||||
	unsigned char 		*xmit_buf;
 | 
			
		||||
	int			xmit_head;
 | 
			
		||||
	int			xmit_tail;
 | 
			
		||||
	int			xmit_cnt;
 | 
			
		||||
	wait_queue_head_t	break_wait;
 | 
			
		||||
	struct async_icount	icount;	/* kernel counters for the 4 input interrupts */
 | 
			
		||||
	struct hayes_esp_config config; /* port configuration */
 | 
			
		||||
	struct esp_struct	*next_port; /* For the linked list */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct esp_pio_buffer {
 | 
			
		||||
	unsigned char data[1024];
 | 
			
		||||
	struct esp_pio_buffer *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* __KERNEL__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* ESP_H */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in a new issue