etc.h
上传用户:yuanda199
上传日期:2022-06-26
资源大小:412k
文件大小:8k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.     Copyright 2001, Broadcom Corporation
  3.     All Rights Reserved.
  4.     
  5.     This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
  6.     the contents of this file may not be disclosed to third parties, copied or
  7.     duplicated in any form, in whole or in part, without the prior written
  8.     permission of Broadcom Corporation.
  9. */
  10. /*
  11.  * Common [OS-independent] header file for
  12.  * Broadcom BCM44XX 10/100Mbps Ethernet Device Driver
  13.  *
  14.  * Copyright(c) 2000 Broadcom, Inc.
  15.  *
  16.  * $Id: etc.h,v 1.1 Broadcom SDK $
  17.  */
  18. #ifndef _etc_h_
  19. #define _etc_h_
  20. #define MAXMULTILIST 32
  21. #ifndef ch_t
  22. #define ch_t void
  23. #endif
  24. struct etc_info; /* forward declaration */
  25. /* each chip type (4413, 47xx) supports a set of chip-type-specific ops */
  26. struct chops {
  27. bool (*id)(uint vendor, uint device); /* return true if match */
  28. void *(*attach)(struct etc_info *etc, void *dev, void *regs);
  29. void (*detach)(ch_t *ch); /* free chip private state */
  30. void (*reset)(ch_t *ch); /* chip reset */
  31. void (*init)(ch_t *ch, bool full); /* chip init */
  32. void (*tx)(ch_t *ch, void *p); /* transmit frame */
  33. void *(*rx)(ch_t *ch); /* receive frame */
  34. void (*rxfill)(ch_t *ch); /* post dma rx buffers */
  35. int (*getintrevents)(ch_t *ch); /* return intr events */
  36. bool (*errors)(ch_t *ch); /* handle chip errors */
  37. void (*intrson)(ch_t *ch); /* enable chip interrupts */
  38. void (*intrsoff)(ch_t *ch); /* disable chip interrupts */
  39. void (*txreclaim)(ch_t *ch, bool all); /* reclaim transmit resources */
  40. void (*rxreclaim)(ch_t *ch); /* reclaim receive resources */
  41. void (*statsupd)(ch_t *ch); /* update sw stat counters */
  42. void (*enablepme)(ch_t *ch); /* enable PME */
  43. void (*disablepme)(ch_t *ch); /* disable PME */
  44. void (*phyreset)(ch_t *ch, uint phyaddr); /* reset phy */
  45. uint16 (*phyrd)(ch_t *ch, uint phyaddr, uint reg); /* read phy register */
  46. void (*phywr)(ch_t *ch, uint phyaddr, uint reg, uint16 val); /* write phy register */
  47. void (*dump)(ch_t *ch, char *buf); /* debugging output */
  48. void (*longname)(ch_t *ch, char *buf, uint bufsize); /* return descriptive name */
  49. void (*duplexupd)(ch_t *ch); /* keep mac duplex consistent */
  50. };
  51. /*
  52.  * "Common" os-independent software state structure.
  53.  */
  54. typedef struct etc_info {
  55. void *et; /* pointer to os-specific private state */
  56. uint unit; /* device instance number */
  57. bool up; /* interface up and running */
  58. bool promisc; /* promiscuous destination address */
  59. bool loopbk; /* loopback override mode */
  60. int forcespeed; /* disable autonegotiation and force speed/duplex */
  61. uint advertise; /* control speed/duplex advertised capability bits */
  62. bool needautoneg; /* request restart autonegotiation */
  63. int speed; /* current speed: 10, 100 */
  64. int duplex; /* current duplex: 0=half, 1=full */
  65. bool piomode; /* enable programmed io (!dma) */
  66. void *pioactive; /* points to pio packet being transmitted */
  67. volatile uint *txavail; /* dma: # tx descriptors available */
  68. uint16 vendorid; /* pci function vendor id */
  69. uint16 deviceid; /* pci function device id */
  70. uint chip; /* chip number */
  71. uint chiprev; /* chip revision */
  72. bool nicmode; /* is this core using its own pci i/f */
  73. struct chops *chops; /* pointer to chip-specific opsvec */
  74. void *ch; /* pointer to chip-specific state */
  75. uint coreunit; /* sb chips: chip enet instance # */
  76. uint phyaddr; /* sb chips: mdio 5-bit phy address */
  77. uint mdcport; /* sb chips: which mii to use (enet core #) to access our phy */
  78. struct ether_addr cur_etheraddr; /* our local ethernet address */
  79. struct ether_addr perm_etheraddr; /* original sprom local ethernet address */
  80. struct ether_addr multicast[MAXMULTILIST];
  81. uint nmulticast;
  82. bool allmulti; /* enable all multicasts */
  83. bool linkstate; /* link integrity state */
  84. bool pm_modechange; /* true if mode change is to due pm */
  85. uint32 now; /* elapsed seconds */
  86. /* chip-maintained plus a few sw-maintained stat counters */
  87. bcmenetmib_t mib; /* mib statistic counters */
  88. uint32 txframe; /* transmitted frames */
  89. uint32 txbyte; /* transmitted bytes */
  90. uint32 rxframe; /* received frames */
  91. uint32 rxbyte; /* received bytes */
  92. uint32 txerror; /* total tx errors */
  93. uint32 txnobuf; /* tx out-of-buffer errors */
  94. uint32 rxerror; /* total rx errors */
  95. uint32 rxnobuf; /* rx out-of-buffer errors */
  96. uint32 reset; /* reset count */
  97. uint32 dmade; /* pci descriptor errors */
  98. uint32 dmada; /* pci data errors */
  99. uint32 dmape; /* descriptor protocol error */
  100. uint32 rxdmauflo; /* receive descriptor underflow */
  101. uint32 rxoflo; /* receive fifo overflow */
  102. uint32 txuflo; /* transmit fifo underflow */
  103. uint32 rxbadlen; /* 802.3 len field != read length */
  104. } etc_info_t;
  105. /* interrupt event bitvec */
  106. #define INTR_TX 0x1
  107. #define INTR_RX 0x2
  108. #define INTR_ERROR 0x4
  109. #define INTR_TO 0x8
  110. #define INTR_NEW 0x10
  111. /* special phyaddr values */
  112. #define PHY_NOMDC 30 /* phy is really another mac w/no mdc */
  113. #define PHY_NONE 31 /* no phy present */
  114. /* forcespeed values */
  115. #define ET_AUTO -1
  116. #define ET_10HALF 0
  117. #define ET_10FULL 1
  118. #define ET_100HALF 2
  119. #define ET_100FULL 3
  120. /* a few misc mii/mdio definitions */
  121. #define CTL_RESET (1 << 15) /* reset */
  122. #define CTL_LOOP (1 << 14) /* loopback */
  123. #define CTL_SPEED (1 << 13) /* speed selection 0=10, 1=100 */
  124. #define CTL_ANENAB (1 << 12) /* autonegotiation enable */
  125. #define CTL_RESTART (1 << 9) /* restart autonegotiation */
  126. #define CTL_DUPLEX (1 << 8) /* duplex mode 0=half, 1=full */
  127. #define ADV_10FULL (1 << 6) /* autonegotiate advertise 10full capability */
  128. #define ADV_10HALF (1 << 5) /* autonegotiate advertise 10half capability */
  129. #define ADV_100FULL (1 << 8) /* autonegotiate advertise 100full capability */
  130. #define ADV_100HALF (1 << 7) /* autonegotiate advertise 100half capability */
  131. /* Link partner ability register. */
  132. #define LPA_SLCT                0x001f  /* Same as advertise selector  */
  133. #define LPA_10HALF              0x0020  /* Can do 10mbps half-duplex   */
  134. #define LPA_10FULL              0x0040  /* Can do 10mbps full-duplex   */
  135. #define LPA_100HALF             0x0080  /* Can do 100mbps half-duplex  */
  136. #define LPA_100FULL             0x0100  /* Can do 100mbps full-duplex  */
  137. #define LPA_100BASE4            0x0200  /* Can do 100mbps 4k packets   */
  138. #define LPA_RESV                0x1c00  /* Unused...                   */
  139. #define LPA_RFAULT              0x2000  /* Link partner faulted        */
  140. #define LPA_LPACK               0x4000  /* Link partner acked us       */
  141. #define LPA_NPAGE               0x8000  /* Next page bit               */
  142. #define LPA_DUPLEX (LPA_10FULL | LPA_100FULL)
  143. #define LPA_100 (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
  144. #define STAT_REMFAULT (1 << 4) /* remote fault */
  145. #define STAT_LINK (1 << 2) /* link status */
  146. #define STAT_JAB (1 << 1) /* jabber detected */
  147. #define AUX_FORCED (1 << 2) /* forced 10/100 */
  148. #define AUX_SPEED (1 << 1) /* speed 0=10mbps 1=100mbps */
  149. #define AUX_DUPLEX (1 << 0) /* duplex 0=half 1=full */
  150. /* common ioctl definitions */
  151. #define ETCUP 0
  152. #define ETCDOWN 1
  153. #define ETCLOOP 2
  154. #define ETCDUMP 3
  155. #define ETCSETMSGLEVEL 4
  156. #define ETCPROMISC 5
  157. #define ETCRESV1 6
  158. #define ETCSPEED 7
  159. #define ETCPHYRD 9
  160. #define ETCPHYWR 10
  161. /*
  162.  * Least-common denominator rxbuf start-of-data offset:
  163.  * Must be >= size of largest rxhdr
  164.  * Must be 2-mod-4 aligned so IP is 0-mod-4
  165.  */
  166. #define HWRXOFF 30
  167. /* exported prototypes */
  168. extern struct chops *etc_chipmatch(uint vendor, uint device);
  169. extern void *etc_attach(void *et, uint vendor, uint device, uint unit, void *dev, void *regsva);
  170. extern void etc_detach(etc_info_t *etc);
  171. extern void etc_reset(etc_info_t *etc);
  172. extern void etc_init(etc_info_t *etc);
  173. extern void etc_up(etc_info_t *etc);
  174. extern uint etc_down(etc_info_t *etc, int reset);
  175. extern int etc_ioctl(etc_info_t *etc, int cmd, void *arg);
  176. extern void etc_promisc(etc_info_t *etc, uint on);
  177. extern void etc_dump(etc_info_t *etc, uchar *buf, int size);
  178. extern void etc_log(uint cycles, uint instr, char *fmt, ulong a1);
  179. extern void etc_dumplog(uchar *buf);
  180. extern void etc_watchdog(etc_info_t *etc);
  181. extern uint etc_totlen(etc_info_t *etc, void *p);
  182. #endif /* _etc_h_ */