Subversion Repositories HelenOS

Rev

Rev 4743 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2009 Lukas Mejdrech
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /** @addtogroup dp8390
  30.  *  @{
  31.  */
  32.  
  33. /** @file
  34.  *  DP8390 network interface types and structures ports.
  35.  */
  36.  
  37. #ifndef __NET_NETIF_DP8390_PORT_H__
  38. #define __NET_NETIF_DP8390_PORT_H__
  39.  
  40. #include <errno.h>
  41. #include <mem.h>
  42. #include <stdio.h>
  43. #include <libarch/ddi.h>
  44. #include <sys/types.h>
  45.  
  46. /** Macro for difining functions.
  47.  *  @param[in] function The function type and name definition.
  48.  *  @param[in] params The function parameters definition.
  49.  */
  50. #define _PROTOTYPE( function, params ) function params
  51.  
  52. /** Success error code.
  53.  */
  54. #define OK  EOK
  55.  
  56. /** Type definition of the unsigned byte.
  57.  */
  58. typedef uint8_t u8_t;
  59.  
  60. /** Type definition of the unsigned short.
  61.  */
  62. typedef uint16_t u16_t;
  63.  
  64. /** Compares two memory blocks.
  65.  *  @param[in] first The first memory block.
  66.  *  @param[in] second The second memory block.
  67.  *  @param[in] size The blocks size in bytes.
  68.  *  @returns 0 if equeal.
  69.  *  @returns -1 if the first is greater than the second.
  70.  *  @returns 1 if the second is greater than the first.
  71.  */
  72. #define memcmp( first, second, size )   bcmp(( char * ) ( first ), ( char * ) ( second ), ( size ))
  73.  
  74. /** Reads 1 byte.
  75.  *  @param[in] port The address to be read.
  76.  *  @returns The read value.
  77.  */
  78. #define inb( port ) pio_read_8(( ioport8_t * ) ( port ))
  79.  
  80. /** Reads 1 word (2 bytes).
  81.  *  @param[in] port The address to be read.
  82.  *  @returns The read value.
  83.  */
  84. #define inw( port ) pio_read_16(( ioport16_t * ) ( port ))
  85.  
  86. /** Writes 1 byte.
  87.  *  @param[in] port The address to be written.
  88.  *  @param[in] value The value to be written.
  89.  */
  90. #define outb( port, value ) pio_write_8(( ioport8_t * ) ( port ), ( value ))
  91.  
  92. /** Writes 1 word (2 bytes).
  93.  *  @param[in] port The address to be written.
  94.  *  @param[in] value The value to be written.
  95.  */
  96. #define outw( port, value ) pio_write_16(( ioport16_t * ) ( port ), ( value ))
  97.  
  98. /** Prints out the driver critical error.
  99.  *  Does not call the system panic().
  100.  */
  101. #define panic( ... )    printf( "%s%s%d", __VA_ARGS__ )
  102.  
  103. /** Copies a memory block.
  104.  *  @param proc The source process. Ignored parameter.
  105.  *  @param src_s Ignored parameter.
  106.  *  @param[in] src The source address.
  107.  *  @param me The current proces. Ignored parameter.
  108.  *  @param dst_s Ignored parameter.
  109.  *  @param[in] dst The destination address.
  110.  *  @param[in] bytes The block size in bytes.
  111.  *  @returns EOK.
  112.  */
  113. #define sys_vircopy( proc, src_s, src, me, dst_s, dst, bytes )  ({ memcpy(( void * )( dst ), ( void * )( src ), ( bytes )); EOK; })
  114.  
  115. /** Reads a memory block byte by byte.
  116.  *  @param[in] port The address to be written.
  117.  *  @param proc The source process. Ignored parameter.
  118.  *  @param[in] dst The destination address.
  119.  *  @param[in] bytes The block size in bytes.
  120.  */
  121. #define do_vir_insb( port, proc, dst, bytes )   insb(( port ), ( void * )( dst ), ( bytes ))
  122.  
  123. /** Reads a memory block word by word (2 bytes).
  124.  *  @param[in] port The address to be written.
  125.  *  @param proc The source process. Ignored parameter.
  126.  *  @param[in] dst The destination address.
  127.  *  @param[in] bytes The block size in bytes.
  128.  */
  129. #define do_vir_insw( port, proc, dst, bytes )   insw(( port ), ( void * )( dst ), ( bytes ))
  130.  
  131. /** Writes a memory block byte by byte.
  132.  *  @param[in] port The address to be written.
  133.  *  @param proc The source process. Ignored parameter.
  134.  *  @param[in] src The source address.
  135.  *  @param[in] bytes The block size in bytes.
  136.  */
  137. #define do_vir_outsb( port, proc, src, bytes )  outsb(( port ), ( void * )( src ), ( bytes ))
  138.  
  139. /** Writes a memory block word by word (2 bytes).
  140.  *  @param[in] port The address to be written.
  141.  *  @param proc The source process. Ignored parameter.
  142.  *  @param[in] src The source address.
  143.  *  @param[in] bytes The block size in bytes.
  144.  */
  145. #define do_vir_outsw( port, proc, src, bytes )  outsw(( port ), ( void * )( src ), ( bytes ))
  146.  
  147. /* com.h */
  148. /* Bits in 'DL_MODE' field of DL requests. */
  149. #  define DL_NOMODE     0x0
  150. #  define DL_PROMISC_REQ    0x2
  151. #  define DL_MULTI_REQ      0x4
  152. #  define DL_BROAD_REQ      0x8
  153.  
  154. /* const.h */
  155. /** True value.
  156.  */
  157. #define TRUE               1    /* used for turning integers into Booleans */
  158.  
  159. /** False value.
  160.  */
  161. #define FALSE              0    /* used for turning integers into Booleans */
  162.  
  163. /** No number value.
  164.  */
  165. #define NO_NUM        0x8000    /* used as numerical argument to panic() */
  166.  
  167. /* devio.h */
  168. //typedef u16_t port_t;
  169. /** Type definition of a port.
  170.  */
  171. typedef int port_t;
  172.  
  173. /* dl_eth.h */
  174. /** Ethernet statistics.
  175.  */
  176. typedef struct eth_stat
  177. {
  178.     /** Number of receive errors.
  179.      */
  180.     unsigned long ets_recvErr;
  181.     /** Number of send error.
  182.      */
  183.     unsigned long ets_sendErr;
  184.     /** Number of buffer overwrite warnings.
  185.      */
  186.     unsigned long ets_OVW;
  187.     /** Number of crc errors of read.
  188.      */
  189.     unsigned long ets_CRCerr;
  190.     /** Number of frames not alligned (number of bits % 8 != 0).
  191.      */
  192.     unsigned long ets_frameAll;
  193.     /** Number of packets missed due to slow processing.
  194.      */
  195.     unsigned long ets_missedP;
  196.     /** Number of packets received.
  197.      */
  198.     unsigned long ets_packetR;
  199.     /** Number of packets transmitted.
  200.      */
  201.     unsigned long ets_packetT;
  202.     /** Number of transmission defered (Tx was busy).
  203.      */
  204.     unsigned long ets_transDef;
  205.     /** Number of collissions.
  206.      */
  207.     unsigned long ets_collision;
  208.     /** Number of Tx aborted due to excess collisions.
  209.      */
  210.     unsigned long ets_transAb;
  211.     /** Number of carrier sense lost.
  212.      */
  213.     unsigned long ets_carrSense;
  214.     /** Number of FIFO underruns (processor too busy).
  215.      */
  216.     unsigned long ets_fifoUnder;
  217.     /** Number of FIFO overruns (processor too busy).
  218.      */
  219.     unsigned long ets_fifoOver;
  220.     /** Number of times unable to transmit collision sig.
  221.      */
  222.     unsigned long ets_CDheartbeat;
  223.     /** Number of times out of window collision.
  224.      */
  225.     unsigned long ets_OWC;
  226. } eth_stat_t;
  227.  
  228. /* errno.h */
  229. /** Generic error.
  230.  */
  231. #define EGENERIC     EINVAL
  232.  
  233. /* ether.h */
  234. /** Minimum Ethernet packet size in bytes.
  235.  */
  236. #define ETH_MIN_PACK_SIZE         60
  237.  
  238. /** Maximum Ethernet packet size in bytes.
  239.  */
  240. #define ETH_MAX_PACK_SIZE_TAGGED    1518
  241.  
  242. /** Ethernet address type definition.
  243.  */
  244. typedef struct ether_addr
  245. {
  246.     /** Address data.
  247.      */
  248.     u8_t ea_addr[6];
  249. } ether_addr_t;
  250.  
  251. /* type.h */
  252. /** Type definition of the physical addresses and lengths in bytes.
  253.  */
  254. typedef unsigned long phys_bytes;
  255.  
  256. /** Type definition of the virtual addresses and lengths in bytes.
  257.  */
  258. typedef unsigned int vir_bytes;
  259.  
  260. /** Type definition of the input/output vector.
  261.  */
  262. typedef struct {
  263.     /** Address of an I/O buffer.
  264.      */
  265.     vir_bytes iov_addr;
  266.     /** Sizeof an I/O buffer.
  267.      */
  268.     vir_bytes iov_size;
  269. } iovec_t;
  270.  
  271. #endif
  272.  
  273. /** @}
  274.  */
  275.