mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 01:24:43 +00:00 
			
		
		
		
	 6a878184c2
			
		
	
	
		6a878184c2
		
	
	
	
	
		
			
			Since version 4.1 the gcc is warning about ignored attributes. This patch is
using the equivalent attribute on the struct instead of on each of the
structure or union members.
GCC Manual:
  "Specifying Attributes of Types
   packed
    This attribute, attached to struct or union type definition, specifies
    that
    each member of the structure or union is placed to minimize the memory
    required. When attached to an enum definition, it indicates that the
    smallest integral type should be used.
    Specifying this attribute for struct and union types is equivalent to
    specifying the packed attribute on each of the structure or union
    members."
Signed-off-by: Jan Blunck <jblunck@suse.de>
Cc: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
	
			
		
			
				
	
	
		
			340 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * INET		An implementation of the TCP/IP protocol suite for the LINUX
 | |
|  *		operating system.  INET is implemented using the  BSD Socket
 | |
|  *		interface as the means of communication with the user level.
 | |
|  *
 | |
|  *		Global definitions for the Frame relay interface.
 | |
|  *
 | |
|  * Version:	@(#)if_ifrad.h	0.20	13 Apr 96
 | |
|  *
 | |
|  * Author:	Mike McLagan <mike.mclagan@linux.org>
 | |
|  *
 | |
|  * Changes:
 | |
|  *		0.15	Mike McLagan	Structure packing
 | |
|  *
 | |
|  *		0.20	Mike McLagan	New flags for S508 buffer handling
 | |
|  *
 | |
|  *		This program is free software; you can redistribute it and/or
 | |
|  *		modify it under the terms of the GNU General Public License
 | |
|  *		as published by the Free Software Foundation; either version
 | |
|  *		2 of the License, or (at your option) any later version.
 | |
|  */
 | |
| 
 | |
| #ifndef SDLA_H
 | |
| #define SDLA_H
 | |
| 
 | |
| /* adapter type */
 | |
| #define SDLA_TYPES
 | |
| #define SDLA_S502A			5020
 | |
| #define SDLA_S502E			5021
 | |
| #define SDLA_S503			5030
 | |
| #define SDLA_S507			5070
 | |
| #define SDLA_S508			5080
 | |
| #define SDLA_S509			5090
 | |
| #define SDLA_UNKNOWN			-1
 | |
| 
 | |
| /* port selection flags for the S508 */
 | |
| #define SDLA_S508_PORT_V35		0x00
 | |
| #define SDLA_S508_PORT_RS232		0x02
 | |
| 
 | |
| /* Z80 CPU speeds */
 | |
| #define SDLA_CPU_3M			0x00
 | |
| #define SDLA_CPU_5M			0x01
 | |
| #define SDLA_CPU_7M			0x02
 | |
| #define SDLA_CPU_8M			0x03
 | |
| #define SDLA_CPU_10M			0x04
 | |
| #define SDLA_CPU_16M			0x05
 | |
| #define SDLA_CPU_12M			0x06
 | |
| 
 | |
| /* some private IOCTLs */
 | |
| #define SDLA_IDENTIFY			(FRAD_LAST_IOCTL + 1)
 | |
| #define SDLA_CPUSPEED			(FRAD_LAST_IOCTL + 2)
 | |
| #define SDLA_PROTOCOL			(FRAD_LAST_IOCTL + 3)
 | |
| 
 | |
| #define SDLA_CLEARMEM			(FRAD_LAST_IOCTL + 4)
 | |
| #define SDLA_WRITEMEM			(FRAD_LAST_IOCTL + 5)
 | |
| #define SDLA_READMEM			(FRAD_LAST_IOCTL + 6)
 | |
| 
 | |
| struct sdla_mem {
 | |
|    int  addr;
 | |
|    int  len;
 | |
|    void __user *data;
 | |
| };
 | |
| 
 | |
| #define SDLA_START			(FRAD_LAST_IOCTL + 7)
 | |
| #define SDLA_STOP			(FRAD_LAST_IOCTL + 8)
 | |
| 
 | |
| /* some offsets in the Z80's memory space */
 | |
| #define SDLA_NMIADDR			0x0000
 | |
| #define SDLA_CONF_ADDR			0x0010
 | |
| #define SDLA_S502A_NMIADDR		0x0066
 | |
| #define SDLA_CODE_BASEADDR		0x0100
 | |
| #define SDLA_WINDOW_SIZE		0x2000
 | |
| #define SDLA_ADDR_MASK			0x1FFF
 | |
| 
 | |
| /* largest handleable block of data */
 | |
| #define SDLA_MAX_DATA			4080
 | |
| #define SDLA_MAX_MTU			4072	/* MAX_DATA - sizeof(fradhdr) */
 | |
| #define SDLA_MAX_DLCI			24
 | |
| 
 | |
| /* this should be the same as frad_conf */
 | |
| struct sdla_conf {
 | |
|    short station;
 | |
|    short config;
 | |
|    short kbaud;
 | |
|    short clocking;
 | |
|    short max_frm;
 | |
|    short T391;
 | |
|    short T392;
 | |
|    short N391;
 | |
|    short N392;
 | |
|    short N393;
 | |
|    short CIR_fwd;
 | |
|    short Bc_fwd;
 | |
|    short Be_fwd;
 | |
|    short CIR_bwd;
 | |
|    short Bc_bwd;
 | |
|    short Be_bwd;
 | |
| };
 | |
| 
 | |
| /* this should be the same as dlci_conf */
 | |
| struct sdla_dlci_conf {
 | |
|    short config;
 | |
|    short CIR_fwd;
 | |
|    short Bc_fwd;
 | |
|    short Be_fwd;
 | |
|    short CIR_bwd;
 | |
|    short Bc_bwd;
 | |
|    short Be_bwd; 
 | |
|    short Tc_fwd;
 | |
|    short Tc_bwd;
 | |
|    short Tf_max;
 | |
|    short Tb_max;
 | |
| };
 | |
| 
 | |
| #ifndef __KERNEL__
 | |
| 
 | |
| void sdla(void *cfg_info, char *dev, struct frad_conf *conf, int quiet);
 | |
| 
 | |
| #else
 | |
| 
 | |
| /* important Z80 window addresses */
 | |
| #define SDLA_CONTROL_WND		0xE000
 | |
| 
 | |
| #define SDLA_502_CMD_BUF		0xEF60
 | |
| #define SDLA_502_RCV_BUF		0xA900
 | |
| #define	SDLA_502_TXN_AVAIL		0xFFF1
 | |
| #define SDLA_502_RCV_AVAIL		0xFFF2
 | |
| #define SDLA_502_EVENT_FLAGS		0xFFF3
 | |
| #define SDLA_502_MDM_STATUS		0xFFF4
 | |
| #define SDLA_502_IRQ_INTERFACE		0xFFFD
 | |
| #define SDLA_502_IRQ_PERMISSION		0xFFFE
 | |
| #define SDLA_502_DATA_OFS		0x0010
 | |
| 
 | |
| #define SDLA_508_CMD_BUF		0xE000
 | |
| #define SDLA_508_TXBUF_INFO		0xF100
 | |
| #define SDLA_508_RXBUF_INFO		0xF120
 | |
| #define SDLA_508_EVENT_FLAGS		0xF003
 | |
| #define SDLA_508_MDM_STATUS		0xF004
 | |
| #define SDLA_508_IRQ_INTERFACE		0xF010
 | |
| #define SDLA_508_IRQ_PERMISSION		0xF011
 | |
| #define SDLA_508_TSE_OFFSET		0xF012
 | |
| 
 | |
| /* Event flags */
 | |
| #define SDLA_EVENT_STATUS		0x01
 | |
| #define SDLA_EVENT_DLCI_STATUS		0x02
 | |
| #define SDLA_EVENT_BAD_DLCI		0x04
 | |
| #define SDLA_EVENT_LINK_DOWN		0x40
 | |
| 
 | |
| /* IRQ Trigger flags */
 | |
| #define SDLA_INTR_RX			0x01
 | |
| #define SDLA_INTR_TX			0x02
 | |
| #define SDLA_INTR_MODEM			0x04
 | |
| #define SDLA_INTR_COMPLETE		0x08
 | |
| #define SDLA_INTR_STATUS		0x10
 | |
| #define SDLA_INTR_TIMER			0x20
 | |
| 
 | |
| /* DLCI status bits */
 | |
| #define SDLA_DLCI_DELETED		0x01
 | |
| #define SDLA_DLCI_ACTIVE		0x02
 | |
| #define SDLA_DLCI_WAITING		0x04
 | |
| #define SDLA_DLCI_NEW			0x08
 | |
| #define SDLA_DLCI_INCLUDED		0x40
 | |
| 
 | |
| /* valid command codes */
 | |
| #define	SDLA_INFORMATION_WRITE		0x01
 | |
| #define	SDLA_INFORMATION_READ		0x02
 | |
| #define SDLA_ISSUE_IN_CHANNEL_SIGNAL	0x03
 | |
| #define	SDLA_SET_DLCI_CONFIGURATION	0x10
 | |
| #define	SDLA_READ_DLCI_CONFIGURATION	0x11
 | |
| #define	SDLA_DISABLE_COMMUNICATIONS	0x12
 | |
| #define	SDLA_ENABLE_COMMUNICATIONS	0x13
 | |
| #define	SDLA_READ_DLC_STATUS		0x14
 | |
| #define	SDLA_READ_DLC_STATISTICS	0x15
 | |
| #define	SDLA_FLUSH_DLC_STATISTICS	0x16
 | |
| #define	SDLA_LIST_ACTIVE_DLCI		0x17
 | |
| #define	SDLA_FLUSH_INFORMATION_BUFFERS	0x18
 | |
| #define	SDLA_ADD_DLCI			0x20
 | |
| #define	SDLA_DELETE_DLCI		0x21
 | |
| #define	SDLA_ACTIVATE_DLCI		0x22
 | |
| #define	SDLA_DEACTIVATE_DLCI		0x23
 | |
| #define	SDLA_READ_MODEM_STATUS		0x30
 | |
| #define	SDLA_SET_MODEM_STATUS		0x31
 | |
| #define	SDLA_READ_COMMS_ERR_STATS	0x32
 | |
| #define SDLA_FLUSH_COMMS_ERR_STATS	0x33
 | |
| #define	SDLA_READ_CODE_VERSION		0x40
 | |
| #define SDLA_SET_IRQ_TRIGGER		0x50
 | |
| #define SDLA_GET_IRQ_TRIGGER		0x51
 | |
| 
 | |
| /* In channel signal types */
 | |
| #define SDLA_ICS_LINK_VERIFY		0x02
 | |
| #define SDLA_ICS_STATUS_ENQ		0x03
 | |
| 
 | |
| /* modem status flags */
 | |
| #define SDLA_MODEM_DTR_HIGH		0x01
 | |
| #define SDLA_MODEM_RTS_HIGH		0x02
 | |
| #define SDLA_MODEM_DCD_HIGH		0x08
 | |
| #define SDLA_MODEM_CTS_HIGH		0x20
 | |
| 
 | |
| /* used for RET_MODEM interpretation */
 | |
| #define SDLA_MODEM_DCD_LOW		0x01
 | |
| #define SDLA_MODEM_CTS_LOW		0x02
 | |
| 
 | |
| /* return codes */
 | |
| #define SDLA_RET_OK			0x00
 | |
| #define SDLA_RET_COMMUNICATIONS		0x01
 | |
| #define SDLA_RET_CHANNEL_INACTIVE	0x02
 | |
| #define SDLA_RET_DLCI_INACTIVE		0x03
 | |
| #define SDLA_RET_DLCI_CONFIG		0x04
 | |
| #define SDLA_RET_BUF_TOO_BIG		0x05
 | |
| #define SDLA_RET_NO_DATA		0x05
 | |
| #define SDLA_RET_BUF_OVERSIZE		0x06
 | |
| #define SDLA_RET_CIR_OVERFLOW		0x07
 | |
| #define SDLA_RET_NO_BUFS		0x08
 | |
| #define SDLA_RET_TIMEOUT		0x0A
 | |
| #define SDLA_RET_MODEM			0x10
 | |
| #define SDLA_RET_CHANNEL_OFF		0x11
 | |
| #define SDLA_RET_CHANNEL_ON		0x12
 | |
| #define SDLA_RET_DLCI_STATUS		0x13
 | |
| #define SDLA_RET_DLCI_UNKNOWN       	0x14
 | |
| #define SDLA_RET_COMMAND_INVALID    	0x1F
 | |
| 
 | |
| /* Configuration flags */
 | |
| #define SDLA_DIRECT_RECV		0x0080
 | |
| #define SDLA_TX_NO_EXCEPT		0x0020
 | |
| #define SDLA_NO_ICF_MSGS		0x1000
 | |
| #define SDLA_TX50_RX50			0x0000
 | |
| #define SDLA_TX70_RX30			0x2000
 | |
| #define SDLA_TX30_RX70			0x4000
 | |
| 
 | |
| /* IRQ selection flags */
 | |
| #define SDLA_IRQ_RECEIVE		0x01
 | |
| #define SDLA_IRQ_TRANSMIT		0x02
 | |
| #define SDLA_IRQ_MODEM_STAT		0x04
 | |
| #define SDLA_IRQ_COMMAND		0x08
 | |
| #define SDLA_IRQ_CHANNEL		0x10
 | |
| #define SDLA_IRQ_TIMER			0x20
 | |
| 
 | |
| /* definitions for PC memory mapping */
 | |
| #define SDLA_8K_WINDOW			0x01
 | |
| #define SDLA_S502_SEG_A			0x10
 | |
| #define SDLA_S502_SEG_C			0x20
 | |
| #define SDLA_S502_SEG_D			0x00
 | |
| #define SDLA_S502_SEG_E			0x30
 | |
| #define SDLA_S507_SEG_A			0x00
 | |
| #define SDLA_S507_SEG_B			0x40
 | |
| #define SDLA_S507_SEG_C			0x80
 | |
| #define SDLA_S507_SEG_E			0xC0
 | |
| #define SDLA_S508_SEG_A			0x00
 | |
| #define SDLA_S508_SEG_C			0x10
 | |
| #define SDLA_S508_SEG_D			0x08
 | |
| #define SDLA_S508_SEG_E			0x18
 | |
| 
 | |
| /* SDLA adapter port constants */
 | |
| #define SDLA_IO_EXTENTS			0x04
 | |
| 	
 | |
| #define SDLA_REG_CONTROL		0x00
 | |
| #define SDLA_REG_PC_WINDOW		0x01	/* offset for PC window select latch */
 | |
| #define SDLA_REG_Z80_WINDOW 		0x02	/* offset for Z80 window select latch */
 | |
| #define SDLA_REG_Z80_CONTROL		0x03	/* offset for Z80 control latch */
 | |
| 	
 | |
| #define SDLA_S502_STS			0x00	/* status reg for 502, 502E, 507 */
 | |
| #define SDLA_S508_GNRL			0x00	/* general purp. reg for 508 */
 | |
| #define SDLA_S508_STS			0x01	/* status reg for 508 */
 | |
| #define SDLA_S508_IDR			0x02	/* ID reg for 508 */
 | |
| 	
 | |
| /* control register flags */
 | |
| #define SDLA_S502A_START		0x00	/* start the CPU */
 | |
| #define SDLA_S502A_INTREQ		0x02
 | |
| #define SDLA_S502A_INTEN		0x04
 | |
| #define SDLA_S502A_HALT			0x08	/* halt the CPU */	
 | |
| #define SDLA_S502A_NMI			0x10	/* issue an NMI to the CPU */
 | |
| 
 | |
| #define SDLA_S502E_CPUEN		0x01
 | |
| #define SDLA_S502E_ENABLE		0x02
 | |
| #define SDLA_S502E_INTACK		0x04
 | |
| 	
 | |
| #define SDLA_S507_ENABLE		0x01
 | |
| #define SDLA_S507_IRQ3			0x00
 | |
| #define SDLA_S507_IRQ4			0x20
 | |
| #define SDLA_S507_IRQ5			0x40
 | |
| #define SDLA_S507_IRQ7			0x60
 | |
| #define SDLA_S507_IRQ10			0x80
 | |
| #define SDLA_S507_IRQ11			0xA0
 | |
| #define SDLA_S507_IRQ12			0xC0
 | |
| #define SDLA_S507_IRQ15			0xE0
 | |
| 	
 | |
| #define SDLA_HALT			0x00
 | |
| #define SDLA_CPUEN			0x02
 | |
| #define SDLA_MEMEN			0x04
 | |
| #define SDLA_S507_EPROMWR		0x08
 | |
| #define SDLA_S507_EPROMCLK		0x10
 | |
| #define SDLA_S508_INTRQ			0x08
 | |
| #define SDLA_S508_INTEN			0x10
 | |
| 
 | |
| struct sdla_cmd {
 | |
|    char  opp_flag;
 | |
|    char  cmd;
 | |
|    short length;
 | |
|    char  retval;
 | |
|    short dlci;
 | |
|    char  flags;
 | |
|    short rxlost_int;
 | |
|    long  rxlost_app;
 | |
|    char  reserve[2];
 | |
|    char  data[SDLA_MAX_DATA];	/* transfer data buffer */
 | |
| } __attribute__((packed));
 | |
| 
 | |
| struct intr_info {
 | |
|    char  flags;
 | |
|    short txlen;
 | |
|    char  irq;
 | |
|    char  flags2;
 | |
|    short timeout;
 | |
| } __attribute__((packed));
 | |
| 
 | |
| /* found in the 508's control window at RXBUF_INFO */
 | |
| struct buf_info {
 | |
|    unsigned short rse_num;
 | |
|    unsigned long  rse_base;
 | |
|    unsigned long  rse_next;
 | |
|    unsigned long  buf_base;
 | |
|    unsigned short reserved;
 | |
|    unsigned long  buf_top;
 | |
| } __attribute__((packed));
 | |
| 
 | |
| /* structure pointed to by rse_base in RXBUF_INFO struct */
 | |
| struct buf_entry {
 | |
|    char  opp_flag;
 | |
|    short length;
 | |
|    short dlci;
 | |
|    char  flags;
 | |
|    short timestamp;
 | |
|    short reserved[2];
 | |
|    long  buf_addr;
 | |
| } __attribute__((packed));
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif
 |