z8530book.tmpl
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:15k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[]>
  2. <book id="Z85230Guide">
  3.  <bookinfo>
  4.   <title>Z8530 Programming Guide</title>
  5.   
  6.   <authorgroup>
  7.    <author>
  8.     <firstname>Alan</firstname>
  9.     <surname>Cox</surname>
  10.     <affiliation>
  11.      <address>
  12.       <email>alan@redhat.com</email>
  13.      </address>
  14.     </affiliation>
  15.    </author>
  16.   </authorgroup>
  17.   <copyright>
  18.    <year>2000</year>
  19.    <holder>Alan Cox</holder>
  20.   </copyright>
  21.   <legalnotice>
  22.    <para>
  23.      This documentation is free software; you can redistribute
  24.      it and/or modify it under the terms of the GNU General Public
  25.      License as published by the Free Software Foundation; either
  26.      version 2 of the License, or (at your option) any later
  27.      version.
  28.    </para>
  29.       
  30.    <para>
  31.      This program is distributed in the hope that it will be
  32.      useful, but WITHOUT ANY WARRANTY; without even the implied
  33.      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  34.      See the GNU General Public License for more details.
  35.    </para>
  36.       
  37.    <para>
  38.      You should have received a copy of the GNU General Public
  39.      License along with this program; if not, write to the Free
  40.      Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  41.      MA 02111-1307 USA
  42.    </para>
  43.       
  44.    <para>
  45.      For more details see the file COPYING in the source
  46.      distribution of Linux.
  47.    </para>
  48.   </legalnotice>
  49.  </bookinfo>
  50. <toc></toc>
  51.   <chapter id="intro">
  52.       <title>Introduction</title>
  53.   <para>
  54. The Z85x30 family synchronous/asynchronous controller chips are
  55. used on a large number of cheap network interface cards. The
  56. kernel provides a core interface layer that is designed to make
  57. it easy to provide WAN services using this chip.
  58.   </para>
  59.   <para>
  60. The current driver only support synchronous operation. Merging the
  61. asynchronous driver support into this code to allow any Z85x30
  62. device to be used as both a tty interface and as a synchronous 
  63. controller is a project for Linux post the 2.4 release
  64.   </para>
  65.   <para>
  66. The support code handles most common card configurations and
  67. supports running both Cisco HDLC and Synchronous PPP. With extra
  68. glue the frame relay and X.25 protocols can also be used with this
  69. driver.
  70.   </para>
  71.   </chapter>
  72.   
  73.   <chapter>
  74.   <title>Driver Modes</title>
  75.   <para>
  76. The Z85230 driver layer can drive Z8530, Z85C30 and Z85230 devices
  77. in three different modes. Each mode can be applied to an individual
  78. channel on the chip (each chip has two channels).
  79.   </para>
  80.   <para>
  81. The PIO synchronous mode supports the most common Z8530 wiring. Here
  82. the chip is interface to the I/O and interrupt facilities of the
  83. host machine but not to the DMA subsystem. When running PIO the
  84. Z8530 has extremely tight timing requirements. Doing high speeds,
  85. even with a Z85230 will be tricky. Typically you should expect to
  86. achieve at best 9600 baud with a Z8C530 and 64Kbits with a Z85230.
  87.   </para>
  88.   <para>
  89. The DMA mode supports the chip when it is configured to use dual DMA
  90. channels on an ISA bus. The better cards tend to support this mode
  91. of operation for a single channel. With DMA running the Z85230 tops
  92. out when it starts to hit ISA DMA constraints at about 512Kbits. It
  93. is worth noting here that many PC machines hang or crash when the
  94. chip is driven fast enough to hold the ISA bus solid.
  95.   </para>
  96.   <para>
  97. Transmit DMA mode uses a single DMA channel. The DMA channel is used
  98. for transmission as the transmit FIFO is smaller than the receive
  99. FIFO. it gives better performance than pure PIO mode but is nowhere
  100. near as ideal as pure DMA mode. 
  101.   </para>
  102.   </chapter>
  103.   <chapter>
  104.   <title>Using the Z85230 driver</title>
  105.   <para>
  106. The Z85230 driver provides the back end interface to your board. To
  107. configure a Z8530 interface you need to detect the board and to 
  108. identify its ports and interrupt resources. It is also your problem
  109. to verify the resources are available.
  110.   </para>
  111.   <para>
  112. Having identified the chip you need to fill in a struct z8530_dev,
  113. which describes each chip. This object must exist until you finally
  114. shutdown the board. Firstly zero the active field. This ensures 
  115. nothing goes off without you intending it. The irq field should
  116. be set to the interrupt number of the chip. (Each chip has a single
  117. interrupt source rather than each channel). You are responsible
  118. for allocating the interrupt line. The interrupt handler should be
  119. set to <function>z8530_interrupt</function>. The device id should
  120. be set to the z8530_dev structure pointer. Whether the interrupt can
  121. be shared or not is board dependent, and up to you to initialise.
  122.   </para>
  123.   <para>
  124. The structure holds two channel structures. 
  125. Initialise chanA.ctrlio and chanA.dataio with the address of the
  126. control and data ports. You can or this with Z8530_PORT_SLEEP to
  127. indicate your interface needs the 5uS delay for chip settling done
  128. in software. The PORT_SLEEP option is architecture specific. Other
  129. flags may become available on future platforms, eg for MMIO.
  130. Initialise the chanA.irqs to &amp;z8530_nop to start the chip up
  131. as disabled and discarding interrupt events. This ensures that
  132. stray interrupts will be mopped up and not hang the bus. Set
  133. chanA.dev to point to the device structure itself. The
  134. private and name field you may use as you wish. The private field
  135. is unused by the Z85230 layer. The name is used for error reporting
  136. and it may thus make sense to make it match the network name.
  137.   </para>
  138.   <para>
  139. Repeat the same operation with the B channel if your chip has
  140. both channels wired to something useful. This isn't always the
  141. case. If it is not wired then the I/O values do not matter, but
  142. you must initialise chanB.dev.
  143.   </para>
  144.   <para>
  145. If your board has DMA facilities then initialise the txdma and
  146. rxdma fields for the relevant channels. You must also allocate the
  147. ISA DMA channels and do any necessary board level initialisation
  148. to configure them. The low level driver will do the Z8530 and
  149. DMA controller programming but not board specific magic.
  150.   </para>
  151.   <para>
  152. Having initialised the device you can then call
  153. <function>z8530_init</function>. This will probe the chip and 
  154. reset it into a known state. An identification sequence is then
  155. run to identify the chip type. If the checks fail to pass the
  156. function returns a non zero error code. Typically this indicates
  157. that the port given is not valid. After this call the
  158. type field of the z8530_dev structure is initialised to either
  159. Z8530, Z85C30 or Z85230 according to the chip found.
  160.   </para>
  161.   <para>
  162. Once you have called z8530_init you can also make use of the utility
  163. function <function>z8530_describe</function>. This provides a 
  164. consistent reporting format for the Z8530 devices, and allows all
  165. the drivers to provide consistent reporting.
  166.   </para>
  167.   </chapter>
  168.   <chapter>
  169.   <title>Attaching Network Interfaces</title>
  170.   <para>
  171. If you wish to use the network interface facilities of the driver,
  172. then you need to attach a network device to each channel that is
  173. present and in use. In addition to use the SyncPPP and Cisco HDLC
  174. you need to follow some additional plumbing rules. They may seem 
  175. complex but a look at the example hostess_sv11 driver should
  176. reassure you.
  177.   </para>
  178.   <para>
  179. The network device used for each channel should be pointed to by
  180. the netdevice field of each channel. The dev-&gt; priv field of the
  181. network device points to your private data - you will need to be
  182. able to find your ppp device from this. In addition to use the
  183. sync ppp layer the private data must start with a void * pointer
  184. to the syncppp structures.
  185.   </para>
  186.   <para>
  187. The way most drivers approach this particular problem is to
  188. create a structure holding the Z8530 device definition and
  189. put that and the syncppp pointer into the private field of
  190. the network device. The network device fields of the channels
  191. then point back to the network devices. The ppp_device can also
  192. be put in the private structure conveniently.
  193.   </para>
  194.   <para>
  195. If you wish to use the synchronous ppp then you need to attach
  196. the syncppp layer to the network device. You should do this before
  197. you register the network device. The
  198. <function>sppp_attach</function> requires that the first void *
  199. pointer in your private data is pointing to an empty struct
  200. ppp_device. The function fills in the initial data for the
  201. ppp/hdlc layer.
  202.   </para>
  203.   <para>
  204. Before you register your network device you will also need to
  205. provide suitable handlers for most of the network device callbacks. 
  206. See the network device documentation for more details on this.
  207.   </para>
  208.   </chapter>
  209.   <chapter>
  210.   <title>Configuring And Activating The Port</title>
  211.   <para>
  212. The Z85230 driver provides helper functions and tables to load the
  213. port registers on the Z8530 chips. When programming the register
  214. settings for a channel be aware that the documentation recommends
  215. initialisation orders. Strange things happen when these are not
  216. followed. 
  217.   </para>
  218.   <para>
  219. <function>z8530_channel_load</function> takes an array of
  220. pairs of initialisation values in an array of u8 type. The first
  221. value is the Z8530 register number. Add 16 to indicate the alternate
  222. register bank on the later chips. The array is terminated by a 255.
  223.   </para>
  224.   <para>
  225. The driver provides a pair of public tables. The
  226. z8530_hdlc_kilostream table is for the UK 'Kilostream' service and
  227. also happens to cover most other end host configurations. The
  228. z8530_hdlc_kilostream_85230 table is the same configuration using
  229. the enhancements of the 85230 chip. The configuration loaded is
  230. standard NRZ encoded synchronous data with HDLC bitstuffing. All
  231. of the timing is taken from the other end of the link.
  232.   </para>
  233.   <para>
  234. When writing your own tables be aware that the driver internally
  235. tracks register values. It may need to reload values. You should
  236. therefore be sure to set registers 1-7, 9-11, 14 and 15 in all
  237. configurations. Where the register settings depend on DMA selection
  238. the driver will update the bits itself when you open or close.
  239. Loading a new table with the interface open is not recommended.
  240.   </para>
  241.   <para>
  242. There are three standard configurations supported by the core
  243. code. In PIO mode the interface is programmed up to use
  244. interrupt driven PIO. This places high demands on the host processor
  245. to avoid latency. The driver is written to take account of latency
  246. issues but it cannot avoid latencies caused by other drivers,
  247. notably IDE in PIO mode. Because the drivers allocate buffers you
  248. must also prevent MTU changes while the port is open.
  249.   </para>
  250.   <para>
  251. Once the port is open it will call the rx_function of each channel
  252. whenever a completed packet arrived. This is invoked from
  253. interrupt context and passes you the channel and a network
  254. buffer (struct sk_buff) holding the data. The data includes
  255. the CRC bytes so most users will want to trim the last two
  256. bytes before processing the data. This function is very timing
  257. critical. When you wish to simply discard data the support
  258. code provides the function <function>z8530_null_rx</function>
  259. to discard the data.
  260.   </para>
  261.   <para>
  262. To active PIO mode sending and receiving the <function>
  263. z8530_sync_open</function> is called. This expects to be passed
  264. the network device and the channel. Typically this is called from
  265. your network device open callback. On a failure a non zero error
  266. status is returned. The <function>z8530_sync_close</function> 
  267. function shuts down a PIO channel. This must be done before the 
  268. channel is opened again and before the driver shuts down 
  269. and unloads.
  270.   </para>
  271.   <para>
  272. The ideal mode of operation is dual channel DMA mode. Here the
  273. kernel driver will configure the board for DMA in both directions.
  274. The driver also handles ISA DMA issues such as controller
  275. programming and the memory range limit for you. This mode is
  276. activated by calling the <function>z8530_sync_dma_open</function>
  277. function. On failure a non zero error value is returned.
  278. Once this mode is activated it can be shut down by calling the
  279. <function>z8530_sync_dma_close</function>. You must call the close
  280. function matching the open mode you used.
  281.   </para>
  282.   <para>
  283. The final supported mode uses a single DMA channel to drive the
  284. transmit side. As the Z85C30 has a larger FIFO on the receive
  285. channel this tends to increase the maximum speed a little. 
  286. This is activated by calling the <function>z8530_sync_txdma_open
  287. </function>. This returns a non zero error code on failure. The
  288. <function>z8530_sync_txdma_close</function> function closes down
  289. the Z8530 interface from this mode.
  290.   </para>
  291.   </chapter>
  292.   <chapter>
  293.   <title>Network Layer Functions</title>
  294.   <para>
  295. The Z8530 layer provides functions to queue packets for
  296. transmission. The driver internally buffers the frame currently
  297. being transmitted and one further frame (in order to keep back
  298. to back transmission running). Any further buffering is up to
  299. the caller.
  300.   </para>
  301.   <para>
  302. The function <function>z8530_queue_xmit</function> takes a network
  303. buffer in sk_buff format and queues it for transmission. The
  304. caller must provide the entire packet with the exception of the
  305. bitstuffing and CRC. This is normally done by the caller via
  306. the syncppp interface layer. It returns 0 if the buffer has been 
  307.         queued and non zero values  for queue full. If the function accepts 
  308. the buffer it becomes property of the Z8530 layer and the caller 
  309. should not free it. 
  310.   </para>
  311.   <para>
  312. The function <function>z8530_get_stats</function> returns a pointer
  313. to an internally maintained per interface statistics block. This
  314. provides most of the interface code needed to implement the network
  315. layer get_stats callback.
  316.   </para>
  317.   </chapter>
  318.   <chapter>
  319.      <title>Porting The Z8530 Driver</title>
  320.   <para>
  321. The Z8530 driver is written to be portable. In DMA mode it makes
  322. assumptions about the use of ISA DMA. These are probably warranted
  323. in most cases as the Z85230 in particular was designed to glue to PC
  324. type machines. The PIO mode makes no real assumptions.
  325.   </para>
  326.   <para>
  327. Should you need to retarget the Z8530 driver to another architecture
  328. the only code that should need changing are the port I/O functions.
  329. At the moment these assume PC I/O port accesses. This may not be
  330. appropriate for all platforms. Replacing 
  331. <function>z8530_read_port</function> and <function>z8530_write_port
  332. </function> is intended to be all that is required to port this
  333. driver layer.
  334.   </para>
  335.   </chapter>
  336.   <chapter id="bugs">
  337.      <title>Known Bugs And Assumptions</title>
  338.   <para>
  339.   <variablelist>
  340.     <varlistentry><term>Interrupt Locking</term>
  341.     <listitem>
  342.     <para>
  343. The locking in the driver is done via the global cli/sti lock. This
  344. makes for relatively poor SMP performance. Switching this to use a
  345. per device spin lock would probably materially improve performance.
  346.     </para>
  347.     </listitem></varlistentry>
  348.     <varlistentry><term>Occasional Failures</term>
  349.     <listitem>
  350.     <para>
  351. We have reports of occasional failures when run for very long
  352. periods of time and the driver starts to receive junk frames. At
  353. the moment the cause of this is not clear.
  354.     </para>
  355.     </listitem></varlistentry>
  356.   </variablelist>
  357.   </para>
  358.   </chapter>
  359.   <chapter id="pubfunctions">
  360.      <title>Public Functions Provided</title>
  361. !Edrivers/net/wan/z85230.c
  362.   </chapter>
  363.   <chapter id="intfunctions">
  364.      <title>Internal Functions</title>
  365. !Idrivers/net/wan/z85230.c
  366.   </chapter>
  367. </book>