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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* -*- linux-c -*- */
  2. /* 
  3.  * Copyright (C) 2001 By Joachim Martillo, Telford Tools, Inc.
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version
  8.  * 2 of the License, or (at your option) any later version.
  9.  *
  10.  **/
  11. /* These structures and symbols are less related to the ESCC2s and ESCC8s per se and more to */
  12. /* the architecture of Aurora cards or to the logic of the driver */
  13. #ifndef _ATICNTRL_H_
  14. #define _ATICNTRL_H_
  15. #include <linux/ioport.h>
  16. #include <linux/pci.h>
  17. #include <linux/netdevice.h>
  18. #include <linux/autoconf.h>
  19. #include <asm/page.h>
  20. #include "Reg9050.h"
  21. #include "8253x.h"
  22. #define FALSE 0
  23. #define TRUE 1
  24. #define NUMINTS 32
  25. /* The following are suggested by serial.h -- all not currently used */
  26. #define FLAG8253X_HUP_NOTIFY 0x0001 /* Notify getty on hangups and closes 
  27.   on the callout port */ 
  28. #define FLAG8253X_FOURPORT 0x0002 /* Set OU1, OUT2 per AST Fourport settings */
  29. #define FLAG8253X_SAK 0x0004 /* Secure Attention Key (Orange book) */
  30. #define FLAG8253X_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */
  31. #define FLAG8253X_SPD_MASK 0x1030
  32. #define FLAG8253X_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */
  33. #define FLAG8253X_SPD_VHI 0x0020  /* Use 115200 instead of 38400 bps */
  34. #define FLAG8253X_SPD_CUST 0x0030  /* Use user-specified divisor */
  35. #define FLAG8253X_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */
  36. #define FLAG8253X_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */
  37. #define FLAG8253X_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */
  38. #define FLAG8253X_PGRP_LOCKOUT    0x0200 /* Lock out cua opens based on pgrp */
  39. #define FLAG8253X_CALLOUT_NOHUP   0x0400 /* Don't do hangups for cua device */
  40. #define FLAG8253X_HARDPPS_CD 0x0800 /* Call hardpps when CD goes high  */
  41. #define FLAG8253X_SPD_SHI 0x1000 /* Use 230400 instead of 38400 bps */
  42. #define FLAG8253X_SPD_WARP 0x1010 /* Use 460800 instead of 38400 bps */
  43. #define FLAG8253X_LOW_LATENCY 0x2000 /* Request low latency behaviour */
  44. #define FLAG8253X_BUGGY_UART 0x4000 /* This is a buggy UART, skip some safety
  45. * checks.  Note: can be dangerous! */
  46. #define FLAG8253X_AUTOPROBE 0x8000 /* Port was autoprobed by PCI or PNP code */
  47. #define FLAG8253X_FLAGS 0x7FFF /* Possible legal async flags */
  48. #define FLAG8253X_USR_MASK 0x3430 /* Legal flags that non-privileged
  49.  * users can set or reset */
  50. /* Internal flags used only by the 8253x driver */
  51. #define FLAG8253X_INITIALIZED 0x80000000 /* Serial port was initialized */
  52. #define FLAG8253X_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */
  53. #define FLAG8253X_NORMAL_ACTIVE 0x20000000 /* Normal device is active */
  54. #define FLAG8253X_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */
  55. #define FLAG8253X_CLOSING 0x08000000 /* Serial port is closing */
  56. #define FLAG8253X_CTS_FLOW 0x04000000 /* Do CTS flow control */
  57. #define FLAG8253X_CHECK_CD 0x02000000 /* i.e., CLOCAL */
  58. #define FLAG8253X_NETWORK 0x01000000 /* the logic of callout
  59.     * and reconnect works differently
  60.     * for network ports*/
  61. #define FLAG8253X_CONS_FLOW 0x00800000 /* flow control for console  */
  62. #define FLAG8253X_INTERNAL_FLAGS 0xFF800000 /* Internal flags */
  63. #define SAB8253X_CLOSING_WAIT_INF 0
  64. #define SAB8253X_CLOSING_WAIT_NONE 65535
  65. #define SAB8253X_EVENT_WRITE_WAKEUP 0
  66. typedef struct AuraXX20params
  67. {
  68. unsigned debug; /* lots of kernel warnings */
  69. unsigned listsize; /* size of descriptor list */
  70. } AURAXX20PARAMS;
  71. /* initialization functions */
  72. extern unsigned int
  73. plx9050_eprom_read(unsigned int* eprom_ctl, unsigned short *ptr, unsigned char addr, unsigned short len);
  74. extern unsigned int 
  75. plx9050_eprom_cmd(unsigned int* eprom_ctl, unsigned char cmd, unsigned char addr, unsigned short data);
  76. extern void dump_ati_adapter_registers(unsigned int *addr, int len);
  77. /* common routine */
  78. extern void sab8253x_interrupt(int irq, void *dev_id, struct pt_regs *regs);
  79. /* net device functions */
  80. extern int Sab8253xInitDescriptors2(SAB_PORT *priv, int listsize, int rbufsize);
  81. extern int sab8253xn_init(struct net_device *dev); /* called by registration */
  82. extern int sab8253xn_write2(struct sk_buff *skb, struct net_device *dev); 
  83. /* hard_start_xmit */
  84. extern int sab8253xn_ioctl(struct net_device *dev, struct ifreq *ifr,
  85.    int cmd); 
  86. /* interrupt handler */
  87. extern void sab8253xn_handler2(int irq, void *devidp, struct pt_regs* ptregsp);
  88. extern int sab8253xn_open(struct net_device *dev);
  89. extern int sab8253xn_release(struct net_device *dev); /* stop */
  90. extern struct net_device_stats *sab8253xn_stats(struct net_device *dev);
  91. extern struct net_device *Sab8253xRoot;
  92. extern struct net_device auraXX20n_prototype;
  93. extern SAB_PORT *current_sab_port;
  94. extern int sab8253xn_listsize;
  95. extern int sab8253xn_rbufsize;
  96. extern int sab8253xt_listsize;
  97. extern int sab8253xt_rbufsize;
  98. extern int sab8253xs_listsize;
  99. extern int sab8253xs_rbufsize;
  100. extern int sab8253xc_listsize;
  101. extern int sab8253xc_rbufsize;
  102. /* character device functions */
  103. extern int 
  104. sab8253xc_read(struct file *filep, char *cptr, size_t cnt, loff_t *loffp);
  105. extern int sab8253xc_write(struct file *filep, const char *cptr, size_t cnt, loff_t *loffp);
  106. extern int sab8253xc_open(struct inode *inodep, struct file *filep);
  107. extern int sab8253xc_release(struct inode *inodep, struct file *filep);
  108. extern unsigned int sab8253xc_poll(struct file *, struct poll_table_struct *);
  109. extern int sab8253xc_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
  110. extern int sab8253xc_fasync(int, struct file *, int);
  111. /* number of characters left in xmit buffer before we ask for more */
  112. #define WAKEUP_CHARS 256
  113. #define SERIAL_PARANOIA_CHECK
  114. #define SERIAL_DO_RESTART
  115. /* sync tty functions */
  116. /* general macros */
  117. #define DEBUGPRINT(arg) if(DRIVER_DEBUG()) printk arg
  118. #define MIN(a,b) (((a)<(b))?(a):(b))
  119. #define MAX(a,b) (((a)>(b))?(a):(b))
  120. extern AURAXX20PARAMS AuraXX20DriverParams;
  121. #define DRIVER_DEBUG() (AuraXX20DriverParams.debug)
  122. #define DRIVER_LISTSIZE() (AuraXX20DriverParams.listsize)
  123. #define XSETDRIVER_LISTSIZE(arg) (AuraXX20DriverParams.listsize = (arg))
  124. #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
  125. #define net_device_stats enet_statistics
  126. #define net_device device
  127. #define pci_base_address(p, n)  (p)->base_address[n]
  128. #define dev_kfree_skb_irq(s) dev_kfree_skb((s))
  129. #define dev_kfree_skb_any(s) dev_kfree_skb((s))
  130. #else  /* LINUX_VERSION_CODE */
  131. #define NETSTATS_VER2
  132. #define pci_base_address(p, n) pci_resource_start((p), (n))
  133. #endif /* LINUX_VERSION_CODE */
  134. /* The sample LINUX driver */
  135. /* uses these no reason not */
  136. /* to be more dynamic.*/
  137. /* Below are things that should be placed in <linux/pci_ids.h> */
  138. #ifndef PCI_VENDOR_ID_AURORATECH
  139. #define PCI_VENDOR_ID_AURORATECH 0x125c
  140.                                   /* Saturn and Apollo boards */ 
  141. #define PCI_DEVICE_ID_AURORATECH_MULTI   0x0101 
  142.                                   /* WAN/LAN Multiservers */
  143. #define PCI_DEVICE_ID_AURORATECH_WANMS   0x0102  
  144.                                   /* Comnpact PCI boards */
  145. #define PCI_DEVICE_ID_AURORATECH_CPCI    0x0103  
  146. #endif /* PCI_VENDOR_ID_AURORATECH */
  147. extern int sab8253x_vendor_id;
  148. extern int sab8253x_cpci_device_id;
  149. extern int sab8253x_wmcs_device_id;
  150. extern int sab8253x_mpac_device_id;
  151. #define PCIMEMVALIDMULTI ((sab8253x_vendor_id << 16) | sab8253x_mpac_device_id)
  152. #define PCIMEMVALIDCPCI ((sab8253x_vendor_id << 16) | sab8253x_cpci_device_id)
  153. #define PCIMEMVALIDWMCS (sab8253x_vendor_id | (sab8253x_wmcs_device_id << 16))
  154. /* 
  155.  * Some values defining boards
  156.  *
  157.  * First 1, 2, 4 and 8 ports Multiports
  158.  */
  159. #define AURORA_8X20_CHIP_NPORTS      8
  160. #define AURORA_4X20_CHIP_NPORTS      2 /* uses two ESCC2s */
  161. #define AURORA_2X20_CHIP_NPORTS      2
  162. #define AURORA_1X20_CHIP_NPORTS      1
  163. /* sizes of PLX9050 address space */
  164. #define AURORA_4X20_SIZE 0x800 
  165. #define AURORA_4X20_CHIP_OFFSET           0x400
  166. #define AURORA_8X20_SIZE 0x200
  167. #define AURORA_8X20_CHIP_OFFSET           0x0
  168. #define AURORA_2X20_SIZE 0x80 /* This looks wrong probably las0 size */
  169. #define AURORA_2X20_CHIP_OFFSET           0x0
  170. #define AURORA_MULTI_1PORTBIT PLX_CTRL_USERIO3DATA
  171. #define AURORA_MULTI_SYNCBIT PLX_CTRL_USERIO3DIR
  172. #define AURORA_MULTI_CLKSPEED ((unsigned long) 29491200) /* 29.4912 MHz */
  173. #define SUN_SE_CLKSPEED         ((unsigned long) 29491200) /* 29.4912 MHz */
  174. /*
  175.  * Per-CIM structure
  176.  */
  177. #define CIM_SEPLEN 128 /* serial EPROM length on a CIM */
  178. #define CIM_REVLEN 17
  179. #define CIM_SNLEN 17
  180. #define CIM_MFGLOCLEN 17
  181. #define CIM_MFGDATELEN 33
  182. /* CIM types: */
  183. #define CIM_UNKNOWN 0
  184. #define CIM_RS232 1 /* RS-232 only CIM */
  185. #define CIM_SP502 2 /* SP502 multi-mode CIM */
  186. /* CIM flags: */
  187. #define CIM_SYNC 0x0000001 /* sync allowed */
  188. #define CIM_PROTOTYPE 0x0000002 /* prototype */
  189. #define CIM_LAST 0x0000100 /* the last CIM */
  190. typedef struct aura_cim 
  191. {
  192. int ci_type; /* CIM type */
  193. unsigned long   ci_flags; /* CIM flags */
  194. int ci_num; /* the canonical number of this CIM */
  195. int ci_port0lbl; /* what's the label on port 0 */
  196. unsigned int   ci_nports; /* the number of ports on this CIM */
  197. struct sab_board *ci_board; /* pointer back to the board */
  198. struct sab_chip *ci_chipbase; /* first chip */
  199. struct sab_port *ci_portbase; /* first port */
  200. unsigned long   ci_clkspeed; /* the clock speed */
  201. unsigned int ci_clkspdsrc;
  202. int ci_spdgrd; /* chip speed grade */
  203. unsigned int ci_spdgrdsrc;
  204. unsigned char   ci_sep[CIM_SEPLEN];
  205. unsigned char   ci_rev[CIM_REVLEN]; /* revision information */
  206. unsigned char   ci_sn[CIM_SNLEN]; /* serial number */
  207. unsigned char   ci_mfgdate[CIM_MFGDATELEN];
  208. unsigned char   ci_mfgloc[CIM_MFGLOCLEN];
  209. struct aura_cim *next;
  210. struct aura_cim *next_by_mcs;
  211. } aura_cim_t, AURA_CIM;
  212. /*
  213.  * Board structure
  214.  */
  215. typedef struct sab_board 
  216. {
  217. struct sab_board  *nextboard;
  218. struct sab_board *next_on_interrupt;
  219. struct sab_chip *board_chipbase; /* chip list for this board */
  220. struct sab_port *board_portbase; /* port list for this board */
  221. unsigned int board_number;
  222. #define BD_1020P 1
  223. #define BD_1520P 2
  224. #define BD_2020P 3
  225. #define BD_2520P 4
  226. #define BD_4020P 5
  227. #define BD_4520P 6
  228. #define BD_8020P 7
  229. #define BD_8520P 8
  230. #define BD_SUNSE 9 /* Sun's built-in 82532 -- not supported by this driver*/
  231. #define BD_WANMCS 10
  232. #define BD_1020CP 11 /* CPCI start here */
  233. #define BD_1520CP 12
  234. #define BD_2020CP 13
  235. #define BD_2520CP 14
  236. #define BD_4020CP 15
  237. #define BD_4520CP 16
  238. #define BD_8020CP 17
  239. #define BD_8520CP 18
  240. #define BD_ISCPCI(x) ((x) == BD_1020CP || (x) == BD_1520CP
  241.  || (x) == BD_2020CP || (x) == BD_2520CP
  242.  || (x) == BD_4020CP || (x) == BD_4520CP
  243.  || (x) == BD_8020CP || (x) == BD_8520CP)
  244. unsigned char b_type;
  245. unsigned char b_nchips; /* num chips for this board */
  246. unsigned char b_nports; /* num ports for this board */
  247. unsigned char b_flags; /* flags: */
  248. #define BD_SYNC 0x01 /* sync is allowed on this board */
  249. #define BD_INTRHI 0x02 /* intr is hi level (SPARC only) */
  250. struct pci_dev       b_dev;         /* what does PCI knows about us */
  251. int                   b_irq;           /* For faster access */
  252. unsigned char *b_chipregbase; /* chip register io */
  253. long   b_clkspeed; /* the clock speed */
  254. int b_spdgrd; /* chip speed grade */
  255. unsigned short b_intrmask; /* wanmcs interrupt mask */
  256. unsigned char* virtbaseaddress0;
  257. unsigned int length0;
  258. unsigned char* virtbaseaddress1;
  259. unsigned int length1;
  260. unsigned char* virtbaseaddress2;
  261. unsigned int length2;
  262. unsigned char* virtbaseaddress3;
  263. unsigned int length3;
  264.   
  265.   /*
  266.    * Pointer to hardware-specific electrical interface code.  This
  267.    *  routine will set the electrical interface to whatever is in
  268.    *  the given interface/txena pair.
  269.    * Returns 0 if it could not set the value, non-zero otherwise.
  270.    */
  271. int (*b_setif)(struct sab_port *line,
  272.    int interface, int txena);
  273. /*
  274.  * hardware mapping
  275.  */
  276. unsigned int   b_eprom[64]; /* serial EPROM contents */
  277. AURA_CIM *b_cimbase; /* CIM information */
  278. PLX9050 *b_bridge; /* PCI bridge ctlr. regs. */
  279. } sab_board_t, SAB_BOARD; /* really hate the _t convention */
  280. #define SEPROM 1 /* driver got clock speed from SEPROM */
  281. #define SAB8253X_XMIT_SIZE PAGE_SIZE
  282. extern char *aura_functionality[];
  283. #endif /* _ATICNTRL_H_ */