bnx2x_hsi.h 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176
  1. /* bnx2x_hsi.h: Broadcom Everest network driver.
  2. *
  3. * Copyright (c) 2007 Broadcom Corporation
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation.
  8. */
  9. #define FUNC_0 0
  10. #define FUNC_1 1
  11. #define FUNC_MAX 2
  12. /* This value (in milliseconds) determines the frequency of the driver
  13. * issuing the PULSE message code. The firmware monitors this periodic
  14. * pulse to determine when to switch to an OS-absent mode. */
  15. #define DRV_PULSE_PERIOD_MS 250
  16. /* This value (in milliseconds) determines how long the driver should
  17. * wait for an acknowledgement from the firmware before timing out. Once
  18. * the firmware has timed out, the driver will assume there is no firmware
  19. * running and there won't be any firmware-driver synchronization during a
  20. * driver reset. */
  21. #define FW_ACK_TIME_OUT_MS 5000
  22. #define FW_ACK_POLL_TIME_MS 1
  23. #define FW_ACK_NUM_OF_POLL (FW_ACK_TIME_OUT_MS/FW_ACK_POLL_TIME_MS)
  24. /* LED Blink rate that will achieve ~15.9Hz */
  25. #define LED_BLINK_RATE_VAL 480
  26. /****************************************************************************
  27. * Driver <-> FW Mailbox *
  28. ****************************************************************************/
  29. struct drv_fw_mb {
  30. u32 drv_mb_header;
  31. #define DRV_MSG_CODE_MASK 0xffff0000
  32. #define DRV_MSG_CODE_LOAD_REQ 0x10000000
  33. #define DRV_MSG_CODE_LOAD_DONE 0x11000000
  34. #define DRV_MSG_CODE_UNLOAD_REQ_WOL_EN 0x20000000
  35. #define DRV_MSG_CODE_UNLOAD_REQ_WOL_DIS 0x20010000
  36. #define DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP 0x20020000
  37. #define DRV_MSG_CODE_UNLOAD_DONE 0x21000000
  38. #define DRV_MSG_CODE_DIAG_ENTER_REQ 0x50000000
  39. #define DRV_MSG_CODE_DIAG_EXIT_REQ 0x60000000
  40. #define DRV_MSG_CODE_VALIDATE_KEY 0x70000000
  41. #define DRV_MSG_CODE_GET_CURR_KEY 0x80000000
  42. #define DRV_MSG_CODE_GET_UPGRADE_KEY 0x81000000
  43. #define DRV_MSG_CODE_GET_MANUF_KEY 0x82000000
  44. #define DRV_MSG_CODE_LOAD_L2B_PRAM 0x90000000
  45. #define DRV_MSG_SEQ_NUMBER_MASK 0x0000ffff
  46. u32 drv_mb_param;
  47. u32 fw_mb_header;
  48. #define FW_MSG_CODE_MASK 0xffff0000
  49. #define FW_MSG_CODE_DRV_LOAD_COMMON 0x11000000
  50. #define FW_MSG_CODE_DRV_LOAD_PORT 0x12000000
  51. #define FW_MSG_CODE_DRV_LOAD_REFUSED 0x13000000
  52. #define FW_MSG_CODE_DRV_LOAD_DONE 0x14000000
  53. #define FW_MSG_CODE_DRV_UNLOAD_COMMON 0x21000000
  54. #define FW_MSG_CODE_DRV_UNLOAD_PORT 0x22000000
  55. #define FW_MSG_CODE_DRV_UNLOAD_DONE 0x23000000
  56. #define FW_MSG_CODE_DIAG_ENTER_DONE 0x50000000
  57. #define FW_MSG_CODE_DIAG_REFUSE 0x51000000
  58. #define FW_MSG_CODE_VALIDATE_KEY_SUCCESS 0x70000000
  59. #define FW_MSG_CODE_VALIDATE_KEY_FAILURE 0x71000000
  60. #define FW_MSG_CODE_GET_KEY_DONE 0x80000000
  61. #define FW_MSG_CODE_NO_KEY 0x8f000000
  62. #define FW_MSG_CODE_LIC_INFO_NOT_READY 0x8f800000
  63. #define FW_MSG_CODE_L2B_PRAM_LOADED 0x90000000
  64. #define FW_MSG_CODE_L2B_PRAM_T_LOAD_FAILURE 0x91000000
  65. #define FW_MSG_CODE_L2B_PRAM_C_LOAD_FAILURE 0x92000000
  66. #define FW_MSG_CODE_L2B_PRAM_X_LOAD_FAILURE 0x93000000
  67. #define FW_MSG_CODE_L2B_PRAM_U_LOAD_FAILURE 0x94000000
  68. #define FW_MSG_SEQ_NUMBER_MASK 0x0000ffff
  69. u32 fw_mb_param;
  70. u32 link_status;
  71. /* Driver should update this field on any link change event */
  72. #define LINK_STATUS_LINK_FLAG_MASK 0x00000001
  73. #define LINK_STATUS_LINK_UP 0x00000001
  74. #define LINK_STATUS_SPEED_AND_DUPLEX_MASK 0x0000001E
  75. #define LINK_STATUS_SPEED_AND_DUPLEX_AN_NOT_COMPLETE (0<<1)
  76. #define LINK_STATUS_SPEED_AND_DUPLEX_10THD (1<<1)
  77. #define LINK_STATUS_SPEED_AND_DUPLEX_10TFD (2<<1)
  78. #define LINK_STATUS_SPEED_AND_DUPLEX_100TXHD (3<<1)
  79. #define LINK_STATUS_SPEED_AND_DUPLEX_100T4 (4<<1)
  80. #define LINK_STATUS_SPEED_AND_DUPLEX_100TXFD (5<<1)
  81. #define LINK_STATUS_SPEED_AND_DUPLEX_1000THD (6<<1)
  82. #define LINK_STATUS_SPEED_AND_DUPLEX_1000TFD (7<<1)
  83. #define LINK_STATUS_SPEED_AND_DUPLEX_1000XFD (7<<1)
  84. #define LINK_STATUS_SPEED_AND_DUPLEX_2500THD (8<<1)
  85. #define LINK_STATUS_SPEED_AND_DUPLEX_2500TFD (9<<1)
  86. #define LINK_STATUS_SPEED_AND_DUPLEX_2500XFD (9<<1)
  87. #define LINK_STATUS_SPEED_AND_DUPLEX_10GTFD (10<<1)
  88. #define LINK_STATUS_SPEED_AND_DUPLEX_10GXFD (10<<1)
  89. #define LINK_STATUS_SPEED_AND_DUPLEX_12GTFD (11<<1)
  90. #define LINK_STATUS_SPEED_AND_DUPLEX_12GXFD (11<<1)
  91. #define LINK_STATUS_SPEED_AND_DUPLEX_12_5GTFD (12<<1)
  92. #define LINK_STATUS_SPEED_AND_DUPLEX_12_5GXFD (12<<1)
  93. #define LINK_STATUS_SPEED_AND_DUPLEX_13GTFD (13<<1)
  94. #define LINK_STATUS_SPEED_AND_DUPLEX_13GXFD (13<<1)
  95. #define LINK_STATUS_SPEED_AND_DUPLEX_15GTFD (14<<1)
  96. #define LINK_STATUS_SPEED_AND_DUPLEX_15GXFD (14<<1)
  97. #define LINK_STATUS_SPEED_AND_DUPLEX_16GTFD (15<<1)
  98. #define LINK_STATUS_SPEED_AND_DUPLEX_16GXFD (15<<1)
  99. #define LINK_STATUS_AUTO_NEGOTIATE_FLAG_MASK 0x00000020
  100. #define LINK_STATUS_AUTO_NEGOTIATE_ENABLED 0x00000020
  101. #define LINK_STATUS_AUTO_NEGOTIATE_COMPLETE 0x00000040
  102. #define LINK_STATUS_PARALLEL_DETECTION_FLAG_MASK 0x00000080
  103. #define LINK_STATUS_PARALLEL_DETECTION_USED 0x00000080
  104. #define LINK_STATUS_LINK_PARTNER_1000TFD_CAPABLE 0x00000200
  105. #define LINK_STATUS_LINK_PARTNER_1000THD_CAPABLE 0x00000400
  106. #define LINK_STATUS_LINK_PARTNER_100T4_CAPABLE 0x00000800
  107. #define LINK_STATUS_LINK_PARTNER_100TXFD_CAPABLE 0x00001000
  108. #define LINK_STATUS_LINK_PARTNER_100TXHD_CAPABLE 0x00002000
  109. #define LINK_STATUS_LINK_PARTNER_10TFD_CAPABLE 0x00004000
  110. #define LINK_STATUS_LINK_PARTNER_10THD_CAPABLE 0x00008000
  111. #define LINK_STATUS_TX_FLOW_CONTROL_FLAG_MASK 0x00010000
  112. #define LINK_STATUS_TX_FLOW_CONTROL_ENABLED 0x00010000
  113. #define LINK_STATUS_RX_FLOW_CONTROL_FLAG_MASK 0x00020000
  114. #define LINK_STATUS_RX_FLOW_CONTROL_ENABLED 0x00020000
  115. #define LINK_STATUS_LINK_PARTNER_FLOW_CONTROL_MASK 0x000C0000
  116. #define LINK_STATUS_LINK_PARTNER_NOT_PAUSE_CAPABLE (0<<18)
  117. #define LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE (1<<18)
  118. #define LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE (2<<18)
  119. #define LINK_STATUS_LINK_PARTNER_BOTH_PAUSE (3<<18)
  120. #define LINK_STATUS_SERDES_LINK 0x00100000
  121. #define LINK_STATUS_LINK_PARTNER_2500XFD_CAPABLE 0x00200000
  122. #define LINK_STATUS_LINK_PARTNER_2500XHD_CAPABLE 0x00400000
  123. #define LINK_STATUS_LINK_PARTNER_10GXFD_CAPABLE 0x00800000
  124. #define LINK_STATUS_LINK_PARTNER_12GXFD_CAPABLE 0x01000000
  125. #define LINK_STATUS_LINK_PARTNER_12_5GXFD_CAPABLE 0x02000000
  126. #define LINK_STATUS_LINK_PARTNER_13GXFD_CAPABLE 0x04000000
  127. #define LINK_STATUS_LINK_PARTNER_15GXFD_CAPABLE 0x08000000
  128. #define LINK_STATUS_LINK_PARTNER_16GXFD_CAPABLE 0x10000000
  129. u32 drv_pulse_mb;
  130. #define DRV_PULSE_SEQ_MASK 0x00007fff
  131. #define DRV_PULSE_SYSTEM_TIME_MASK 0xffff0000
  132. /* The system time is in the format of
  133. * (year-2001)*12*32 + month*32 + day. */
  134. #define DRV_PULSE_ALWAYS_ALIVE 0x00008000
  135. /* Indicate to the firmware not to go into the
  136. * OS-absent when it is not getting driver pulse.
  137. * This is used for debugging as well for PXE(MBA). */
  138. u32 mcp_pulse_mb;
  139. #define MCP_PULSE_SEQ_MASK 0x00007fff
  140. #define MCP_PULSE_ALWAYS_ALIVE 0x00008000
  141. /* Indicates to the driver not to assert due to lack
  142. * of MCP response */
  143. #define MCP_EVENT_MASK 0xffff0000
  144. #define MCP_EVENT_OTHER_DRIVER_RESET_REQ 0x00010000
  145. };
  146. /****************************************************************************
  147. * Shared HW configuration *
  148. ****************************************************************************/
  149. struct shared_hw_cfg { /* NVRAM Offset */
  150. /* Up to 16 bytes of NULL-terminated string */
  151. u8 part_num[16]; /* 0x104 */
  152. u32 config; /* 0x114 */
  153. #define SHARED_HW_CFG_MDIO_VOLTAGE_MASK 0x00000001
  154. #define SHARED_HW_CFG_MDIO_VOLTAGE_SHIFT 0
  155. #define SHARED_HW_CFG_MDIO_VOLTAGE_1_2V 0x00000000
  156. #define SHARED_HW_CFG_MDIO_VOLTAGE_2_5V 0x00000001
  157. #define SHARED_HW_CFG_MCP_RST_ON_CORE_RST_EN 0x00000002
  158. #define SHARED_HW_CFG_PORT_SWAP 0x00000004
  159. #define SHARED_HW_CFG_BEACON_WOL_EN 0x00000008
  160. #define SHARED_HW_CFG_MFW_SELECT_MASK 0x00000700
  161. #define SHARED_HW_CFG_MFW_SELECT_SHIFT 8
  162. /* Whatever MFW found in NVM
  163. (if multiple found, priority order is: NC-SI, UMP, IPMI) */
  164. #define SHARED_HW_CFG_MFW_SELECT_DEFAULT 0x00000000
  165. #define SHARED_HW_CFG_MFW_SELECT_NC_SI 0x00000100
  166. #define SHARED_HW_CFG_MFW_SELECT_UMP 0x00000200
  167. #define SHARED_HW_CFG_MFW_SELECT_IPMI 0x00000300
  168. /* Use SPIO4 as an arbiter between: 0-NC_SI, 1-IPMI
  169. (can only be used when an add-in board, not BMC, pulls-down SPIO4) */
  170. #define SHARED_HW_CFG_MFW_SELECT_SPIO4_NC_SI_IPMI 0x00000400
  171. /* Use SPIO4 as an arbiter between: 0-UMP, 1-IPMI
  172. (can only be used when an add-in board, not BMC, pulls-down SPIO4) */
  173. #define SHARED_HW_CFG_MFW_SELECT_SPIO4_UMP_IPMI 0x00000500
  174. /* Use SPIO4 as an arbiter between: 0-NC-SI, 1-UMP
  175. (can only be used when an add-in board, not BMC, pulls-down SPIO4) */
  176. #define SHARED_HW_CFG_MFW_SELECT_SPIO4_NC_SI_UMP 0x00000600
  177. #define SHARED_HW_CFG_LED_MODE_MASK 0x000f0000
  178. #define SHARED_HW_CFG_LED_MODE_SHIFT 16
  179. #define SHARED_HW_CFG_LED_MAC1 0x00000000
  180. #define SHARED_HW_CFG_LED_PHY1 0x00010000
  181. #define SHARED_HW_CFG_LED_PHY2 0x00020000
  182. #define SHARED_HW_CFG_LED_PHY3 0x00030000
  183. #define SHARED_HW_CFG_LED_MAC2 0x00040000
  184. #define SHARED_HW_CFG_LED_PHY4 0x00050000
  185. #define SHARED_HW_CFG_LED_PHY5 0x00060000
  186. #define SHARED_HW_CFG_LED_PHY6 0x00070000
  187. #define SHARED_HW_CFG_LED_MAC3 0x00080000
  188. #define SHARED_HW_CFG_LED_PHY7 0x00090000
  189. #define SHARED_HW_CFG_LED_PHY9 0x000a0000
  190. #define SHARED_HW_CFG_LED_PHY11 0x000b0000
  191. #define SHARED_HW_CFG_LED_MAC4 0x000c0000
  192. #define SHARED_HW_CFG_LED_PHY8 0x000d0000
  193. #define SHARED_HW_CFG_AN_ENABLE_MASK 0x3f000000
  194. #define SHARED_HW_CFG_AN_ENABLE_SHIFT 24
  195. #define SHARED_HW_CFG_AN_ENABLE_CL37 0x01000000
  196. #define SHARED_HW_CFG_AN_ENABLE_CL73 0x02000000
  197. #define SHARED_HW_CFG_AN_ENABLE_BAM 0x04000000
  198. #define SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION 0x08000000
  199. #define SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT 0x10000000
  200. #define SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY 0x20000000
  201. u32 config2; /* 0x118 */
  202. /* one time auto detect grace period (in sec) */
  203. #define SHARED_HW_CFG_GRACE_PERIOD_MASK 0x000000ff
  204. #define SHARED_HW_CFG_GRACE_PERIOD_SHIFT 0
  205. #define SHARED_HW_CFG_PCIE_GEN2_ENABLED 0x00000100
  206. /* The default value for the core clock is 250MHz and it is
  207. achieved by setting the clock change to 4 */
  208. #define SHARED_HW_CFG_CLOCK_CHANGE_MASK 0x00000e00
  209. #define SHARED_HW_CFG_CLOCK_CHANGE_SHIFT 9
  210. #define SHARED_HW_CFG_SMBUS_TIMING_100KHZ 0x00000000
  211. #define SHARED_HW_CFG_SMBUS_TIMING_400KHZ 0x00001000
  212. #define SHARED_HW_CFG_HIDE_FUNC1 0x00002000
  213. u32 power_dissipated; /* 0x11c */
  214. #define SHARED_HW_CFG_POWER_DIS_CMN_MASK 0xff000000
  215. #define SHARED_HW_CFG_POWER_DIS_CMN_SHIFT 24
  216. #define SHARED_HW_CFG_POWER_MGNT_SCALE_MASK 0x00ff0000
  217. #define SHARED_HW_CFG_POWER_MGNT_SCALE_SHIFT 16
  218. #define SHARED_HW_CFG_POWER_MGNT_UNKNOWN_SCALE 0x00000000
  219. #define SHARED_HW_CFG_POWER_MGNT_DOT_1_WATT 0x00010000
  220. #define SHARED_HW_CFG_POWER_MGNT_DOT_01_WATT 0x00020000
  221. #define SHARED_HW_CFG_POWER_MGNT_DOT_001_WATT 0x00030000
  222. u32 ump_nc_si_config; /* 0x120 */
  223. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MASK 0x00000003
  224. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_SHIFT 0
  225. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MAC 0x00000000
  226. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_PHY 0x00000001
  227. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_MII 0x00000000
  228. #define SHARED_HW_CFG_UMP_NC_SI_MII_MODE_RMII 0x00000002
  229. #define SHARED_HW_CFG_UMP_NC_SI_NUM_DEVS_MASK 0x00000f00
  230. #define SHARED_HW_CFG_UMP_NC_SI_NUM_DEVS_SHIFT 8
  231. #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_MASK 0x00ff0000
  232. #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_SHIFT 16
  233. #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_NONE 0x00000000
  234. #define SHARED_HW_CFG_UMP_NC_SI_EXT_PHY_TYPE_BCM5221 0x00010000
  235. u32 board; /* 0x124 */
  236. #define SHARED_HW_CFG_BOARD_TYPE_MASK 0x0000ffff
  237. #define SHARED_HW_CFG_BOARD_TYPE_SHIFT 0
  238. #define SHARED_HW_CFG_BOARD_TYPE_NONE 0x00000000
  239. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1000 0x00000001
  240. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1001 0x00000002
  241. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1002G 0x00000003
  242. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1004G 0x00000004
  243. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1007G 0x00000005
  244. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1015G 0x00000006
  245. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710A1020G 0x00000007
  246. #define SHARED_HW_CFG_BOARD_TYPE_BCM957710T1003G 0x00000008
  247. #define SHARED_HW_CFG_BOARD_VER_MASK 0xffff0000
  248. #define SHARED_HW_CFG_BOARD_VER_SHIFT 16
  249. #define SHARED_HW_CFG_BOARD_MAJOR_VER_MASK 0xf0000000
  250. #define SHARED_HW_CFG_BOARD_MAJOR_VER_SHIFT 28
  251. #define SHARED_HW_CFG_BOARD_MINOR_VER_MASK 0x0f000000
  252. #define SHARED_HW_CFG_BOARD_MINOR_VER_SHIFT 24
  253. #define SHARED_HW_CFG_BOARD_REV_MASK 0x00ff0000
  254. #define SHARED_HW_CFG_BOARD_REV_SHIFT 16
  255. u32 reserved; /* 0x128 */
  256. };
  257. /****************************************************************************
  258. * Port HW configuration *
  259. ****************************************************************************/
  260. struct port_hw_cfg { /* function 0: 0x12c-0x2bb, function 1: 0x2bc-0x44b */
  261. /* Fields below are port specific (in anticipation of dual port
  262. devices */
  263. u32 pci_id;
  264. #define PORT_HW_CFG_PCI_VENDOR_ID_MASK 0xffff0000
  265. #define PORT_HW_CFG_PCI_DEVICE_ID_MASK 0x0000ffff
  266. u32 pci_sub_id;
  267. #define PORT_HW_CFG_PCI_SUBSYS_DEVICE_ID_MASK 0xffff0000
  268. #define PORT_HW_CFG_PCI_SUBSYS_VENDOR_ID_MASK 0x0000ffff
  269. u32 power_dissipated;
  270. #define PORT_HW_CFG_POWER_DIS_D3_MASK 0xff000000
  271. #define PORT_HW_CFG_POWER_DIS_D3_SHIFT 24
  272. #define PORT_HW_CFG_POWER_DIS_D2_MASK 0x00ff0000
  273. #define PORT_HW_CFG_POWER_DIS_D2_SHIFT 16
  274. #define PORT_HW_CFG_POWER_DIS_D1_MASK 0x0000ff00
  275. #define PORT_HW_CFG_POWER_DIS_D1_SHIFT 8
  276. #define PORT_HW_CFG_POWER_DIS_D0_MASK 0x000000ff
  277. #define PORT_HW_CFG_POWER_DIS_D0_SHIFT 0
  278. u32 power_consumed;
  279. #define PORT_HW_CFG_POWER_CONS_D3_MASK 0xff000000
  280. #define PORT_HW_CFG_POWER_CONS_D3_SHIFT 24
  281. #define PORT_HW_CFG_POWER_CONS_D2_MASK 0x00ff0000
  282. #define PORT_HW_CFG_POWER_CONS_D2_SHIFT 16
  283. #define PORT_HW_CFG_POWER_CONS_D1_MASK 0x0000ff00
  284. #define PORT_HW_CFG_POWER_CONS_D1_SHIFT 8
  285. #define PORT_HW_CFG_POWER_CONS_D0_MASK 0x000000ff
  286. #define PORT_HW_CFG_POWER_CONS_D0_SHIFT 0
  287. u32 mac_upper;
  288. #define PORT_HW_CFG_UPPERMAC_MASK 0x0000ffff
  289. #define PORT_HW_CFG_UPPERMAC_SHIFT 0
  290. u32 mac_lower;
  291. u32 iscsi_mac_upper; /* Upper 16 bits are always zeroes */
  292. u32 iscsi_mac_lower;
  293. u32 rdma_mac_upper; /* Upper 16 bits are always zeroes */
  294. u32 rdma_mac_lower;
  295. u32 serdes_config;
  296. /* for external PHY, or forced mode or during AN */
  297. #define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_MASK 0xffff0000
  298. #define PORT_HW_CFG_SERDES_TX_DRV_PRE_EMPHASIS_SHIFT 16
  299. #define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_MASK 0x0000ffff
  300. #define PORT_HW_CFG_SERDES_RX_DRV_EQUALIZER_SHIFT 0
  301. u16 serdes_tx_driver_pre_emphasis[16];
  302. u16 serdes_rx_driver_equalizer[16];
  303. u32 xgxs_config_lane0;
  304. u32 xgxs_config_lane1;
  305. u32 xgxs_config_lane2;
  306. u32 xgxs_config_lane3;
  307. /* for external PHY, or forced mode or during AN */
  308. #define PORT_HW_CFG_XGXS_TX_DRV_PRE_EMPHASIS_MASK 0xffff0000
  309. #define PORT_HW_CFG_XGXS_TX_DRV_PRE_EMPHASIS_SHIFT 16
  310. #define PORT_HW_CFG_XGXS_RX_DRV_EQUALIZER_MASK 0x0000ffff
  311. #define PORT_HW_CFG_XGXS_RX_DRV_EQUALIZER_SHIFT 0
  312. u16 xgxs_tx_driver_pre_emphasis_lane0[16];
  313. u16 xgxs_tx_driver_pre_emphasis_lane1[16];
  314. u16 xgxs_tx_driver_pre_emphasis_lane2[16];
  315. u16 xgxs_tx_driver_pre_emphasis_lane3[16];
  316. u16 xgxs_rx_driver_equalizer_lane0[16];
  317. u16 xgxs_rx_driver_equalizer_lane1[16];
  318. u16 xgxs_rx_driver_equalizer_lane2[16];
  319. u16 xgxs_rx_driver_equalizer_lane3[16];
  320. u32 lane_config;
  321. #define PORT_HW_CFG_LANE_SWAP_CFG_MASK 0x0000ffff
  322. #define PORT_HW_CFG_LANE_SWAP_CFG_SHIFT 0
  323. #define PORT_HW_CFG_LANE_SWAP_CFG_TX_MASK 0x000000ff
  324. #define PORT_HW_CFG_LANE_SWAP_CFG_TX_SHIFT 0
  325. #define PORT_HW_CFG_LANE_SWAP_CFG_RX_MASK 0x0000ff00
  326. #define PORT_HW_CFG_LANE_SWAP_CFG_RX_SHIFT 8
  327. #define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_MASK 0x0000c000
  328. #define PORT_HW_CFG_LANE_SWAP_CFG_MASTER_SHIFT 14
  329. /* AN and forced */
  330. #define PORT_HW_CFG_LANE_SWAP_CFG_01230123 0x00001b1b
  331. /* forced only */
  332. #define PORT_HW_CFG_LANE_SWAP_CFG_01233210 0x00001be4
  333. /* forced only */
  334. #define PORT_HW_CFG_LANE_SWAP_CFG_31203120 0x0000d8d8
  335. /* forced only */
  336. #define PORT_HW_CFG_LANE_SWAP_CFG_32103210 0x0000e4e4
  337. u32 external_phy_config;
  338. #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK 0xff000000
  339. #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_SHIFT 24
  340. #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_DIRECT 0x00000000
  341. #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482 0x01000000
  342. #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_NOT_CONN 0xff000000
  343. #define PORT_HW_CFG_SERDES_EXT_PHY_ADDR_MASK 0x00ff0000
  344. #define PORT_HW_CFG_SERDES_EXT_PHY_ADDR_SHIFT 16
  345. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK 0x0000ff00
  346. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SHIFT 8
  347. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT 0x00000000
  348. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8071 0x00000100
  349. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072 0x00000200
  350. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073 0x00000300
  351. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705 0x00000400
  352. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8706 0x00000500
  353. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8276 0x00000600
  354. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481 0x00000700
  355. #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN 0x0000ff00
  356. #define PORT_HW_CFG_XGXS_EXT_PHY_ADDR_MASK 0x000000ff
  357. #define PORT_HW_CFG_XGXS_EXT_PHY_ADDR_SHIFT 0
  358. u32 speed_capability_mask;
  359. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_MASK 0xffff0000
  360. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_SHIFT 16
  361. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_FULL 0x00010000
  362. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10M_HALF 0x00020000
  363. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_HALF 0x00040000
  364. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_100M_FULL 0x00080000
  365. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_1G 0x00100000
  366. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G 0x00200000
  367. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_10G 0x00400000
  368. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_12G 0x00800000
  369. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_12_5G 0x01000000
  370. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_13G 0x02000000
  371. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_15G 0x04000000
  372. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_16G 0x08000000
  373. #define PORT_HW_CFG_SPEED_CAPABILITY_D0_RESERVED 0xf0000000
  374. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_MASK 0x0000ffff
  375. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_SHIFT 0
  376. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10M_FULL 0x00000001
  377. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10M_HALF 0x00000002
  378. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_100M_HALF 0x00000004
  379. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_100M_FULL 0x00000008
  380. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_1G 0x00000010
  381. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_2_5G 0x00000020
  382. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_10G 0x00000040
  383. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_12G 0x00000080
  384. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_12_5G 0x00000100
  385. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_13G 0x00000200
  386. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_15G 0x00000400
  387. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_16G 0x00000800
  388. #define PORT_HW_CFG_SPEED_CAPABILITY_D3_RESERVED 0x0000f000
  389. u32 reserved[2];
  390. };
  391. /****************************************************************************
  392. * Shared Feature configuration *
  393. ****************************************************************************/
  394. struct shared_feat_cfg { /* NVRAM Offset */
  395. u32 bmc_common; /* 0x450 */
  396. #define SHARED_FEATURE_BMC_ECHO_MODE_EN 0x00000001
  397. };
  398. /****************************************************************************
  399. * Port Feature configuration *
  400. ****************************************************************************/
  401. struct port_feat_cfg { /* function 0: 0x454-0x4c7, function 1: 0x4c8-0x53b */
  402. u32 config;
  403. #define PORT_FEATURE_BAR1_SIZE_MASK 0x0000000f
  404. #define PORT_FEATURE_BAR1_SIZE_SHIFT 0
  405. #define PORT_FEATURE_BAR1_SIZE_DISABLED 0x00000000
  406. #define PORT_FEATURE_BAR1_SIZE_64K 0x00000001
  407. #define PORT_FEATURE_BAR1_SIZE_128K 0x00000002
  408. #define PORT_FEATURE_BAR1_SIZE_256K 0x00000003
  409. #define PORT_FEATURE_BAR1_SIZE_512K 0x00000004
  410. #define PORT_FEATURE_BAR1_SIZE_1M 0x00000005
  411. #define PORT_FEATURE_BAR1_SIZE_2M 0x00000006
  412. #define PORT_FEATURE_BAR1_SIZE_4M 0x00000007
  413. #define PORT_FEATURE_BAR1_SIZE_8M 0x00000008
  414. #define PORT_FEATURE_BAR1_SIZE_16M 0x00000009
  415. #define PORT_FEATURE_BAR1_SIZE_32M 0x0000000a
  416. #define PORT_FEATURE_BAR1_SIZE_64M 0x0000000b
  417. #define PORT_FEATURE_BAR1_SIZE_128M 0x0000000c
  418. #define PORT_FEATURE_BAR1_SIZE_256M 0x0000000d
  419. #define PORT_FEATURE_BAR1_SIZE_512M 0x0000000e
  420. #define PORT_FEATURE_BAR1_SIZE_1G 0x0000000f
  421. #define PORT_FEATURE_BAR2_SIZE_MASK 0x000000f0
  422. #define PORT_FEATURE_BAR2_SIZE_SHIFT 4
  423. #define PORT_FEATURE_BAR2_SIZE_DISABLED 0x00000000
  424. #define PORT_FEATURE_BAR2_SIZE_64K 0x00000010
  425. #define PORT_FEATURE_BAR2_SIZE_128K 0x00000020
  426. #define PORT_FEATURE_BAR2_SIZE_256K 0x00000030
  427. #define PORT_FEATURE_BAR2_SIZE_512K 0x00000040
  428. #define PORT_FEATURE_BAR2_SIZE_1M 0x00000050
  429. #define PORT_FEATURE_BAR2_SIZE_2M 0x00000060
  430. #define PORT_FEATURE_BAR2_SIZE_4M 0x00000070
  431. #define PORT_FEATURE_BAR2_SIZE_8M 0x00000080
  432. #define PORT_FEATURE_BAR2_SIZE_16M 0x00000090
  433. #define PORT_FEATURE_BAR2_SIZE_32M 0x000000a0
  434. #define PORT_FEATURE_BAR2_SIZE_64M 0x000000b0
  435. #define PORT_FEATURE_BAR2_SIZE_128M 0x000000c0
  436. #define PORT_FEATURE_BAR2_SIZE_256M 0x000000d0
  437. #define PORT_FEATURE_BAR2_SIZE_512M 0x000000e0
  438. #define PORT_FEATURE_BAR2_SIZE_1G 0x000000f0
  439. #define PORT_FEATURE_EN_SIZE_MASK 0x07000000
  440. #define PORT_FEATURE_EN_SIZE_SHIFT 24
  441. #define PORT_FEATURE_WOL_ENABLED 0x01000000
  442. #define PORT_FEATURE_MBA_ENABLED 0x02000000
  443. #define PORT_FEATURE_MFW_ENABLED 0x04000000
  444. u32 wol_config;
  445. /* Default is used when driver sets to "auto" mode */
  446. #define PORT_FEATURE_WOL_DEFAULT_MASK 0x00000003
  447. #define PORT_FEATURE_WOL_DEFAULT_SHIFT 0
  448. #define PORT_FEATURE_WOL_DEFAULT_DISABLE 0x00000000
  449. #define PORT_FEATURE_WOL_DEFAULT_MAGIC 0x00000001
  450. #define PORT_FEATURE_WOL_DEFAULT_ACPI 0x00000002
  451. #define PORT_FEATURE_WOL_DEFAULT_MAGIC_AND_ACPI 0x00000003
  452. #define PORT_FEATURE_WOL_RES_PAUSE_CAP 0x00000004
  453. #define PORT_FEATURE_WOL_RES_ASYM_PAUSE_CAP 0x00000008
  454. #define PORT_FEATURE_WOL_ACPI_UPON_MGMT 0x00000010
  455. u32 mba_config;
  456. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK 0x00000003
  457. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_SHIFT 0
  458. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_PXE 0x00000000
  459. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_RPL 0x00000001
  460. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_BOOTP 0x00000002
  461. #define PORT_FEATURE_MBA_BOOT_AGENT_TYPE_ISCSIB 0x00000003
  462. #define PORT_FEATURE_MBA_RES_PAUSE_CAP 0x00000100
  463. #define PORT_FEATURE_MBA_RES_ASYM_PAUSE_CAP 0x00000200
  464. #define PORT_FEATURE_MBA_SETUP_PROMPT_ENABLE 0x00000400
  465. #define PORT_FEATURE_MBA_HOTKEY_CTRL_S 0x00000000
  466. #define PORT_FEATURE_MBA_HOTKEY_CTRL_B 0x00000800
  467. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_MASK 0x000ff000
  468. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_SHIFT 12
  469. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_DISABLED 0x00000000
  470. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_2K 0x00001000
  471. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_4K 0x00002000
  472. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_8K 0x00003000
  473. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_16K 0x00004000
  474. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_32K 0x00005000
  475. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_64K 0x00006000
  476. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_128K 0x00007000
  477. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_256K 0x00008000
  478. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_512K 0x00009000
  479. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_1M 0x0000a000
  480. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_2M 0x0000b000
  481. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_4M 0x0000c000
  482. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_8M 0x0000d000
  483. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_16M 0x0000e000
  484. #define PORT_FEATURE_MBA_EXP_ROM_SIZE_32M 0x0000f000
  485. #define PORT_FEATURE_MBA_MSG_TIMEOUT_MASK 0x00f00000
  486. #define PORT_FEATURE_MBA_MSG_TIMEOUT_SHIFT 20
  487. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_MASK 0x03000000
  488. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_SHIFT 24
  489. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_AUTO 0x00000000
  490. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_BBS 0x01000000
  491. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_INT18H 0x02000000
  492. #define PORT_FEATURE_MBA_BIOS_BOOTSTRAP_INT19H 0x03000000
  493. #define PORT_FEATURE_MBA_LINK_SPEED_MASK 0x3c000000
  494. #define PORT_FEATURE_MBA_LINK_SPEED_SHIFT 26
  495. #define PORT_FEATURE_MBA_LINK_SPEED_AUTO 0x00000000
  496. #define PORT_FEATURE_MBA_LINK_SPEED_10HD 0x04000000
  497. #define PORT_FEATURE_MBA_LINK_SPEED_10FD 0x08000000
  498. #define PORT_FEATURE_MBA_LINK_SPEED_100HD 0x0c000000
  499. #define PORT_FEATURE_MBA_LINK_SPEED_100FD 0x10000000
  500. #define PORT_FEATURE_MBA_LINK_SPEED_1GBPS 0x14000000
  501. #define PORT_FEATURE_MBA_LINK_SPEED_2_5GBPS 0x18000000
  502. #define PORT_FEATURE_MBA_LINK_SPEED_10GBPS_CX4 0x1c000000
  503. #define PORT_FEATURE_MBA_LINK_SPEED_10GBPS_KX4 0x20000000
  504. #define PORT_FEATURE_MBA_LINK_SPEED_10GBPS_KR 0x24000000
  505. #define PORT_FEATURE_MBA_LINK_SPEED_12GBPS 0x28000000
  506. #define PORT_FEATURE_MBA_LINK_SPEED_12_5GBPS 0x2c000000
  507. #define PORT_FEATURE_MBA_LINK_SPEED_13GBPS 0x30000000
  508. #define PORT_FEATURE_MBA_LINK_SPEED_15GBPS 0x34000000
  509. #define PORT_FEATURE_MBA_LINK_SPEED_16GBPS 0x38000000
  510. u32 bmc_config;
  511. #define PORT_FEATURE_BMC_LINK_OVERRIDE_DEFAULT 0x00000000
  512. #define PORT_FEATURE_BMC_LINK_OVERRIDE_EN 0x00000001
  513. u32 mba_vlan_cfg;
  514. #define PORT_FEATURE_MBA_VLAN_TAG_MASK 0x0000ffff
  515. #define PORT_FEATURE_MBA_VLAN_TAG_SHIFT 0
  516. #define PORT_FEATURE_MBA_VLAN_EN 0x00010000
  517. u32 resource_cfg;
  518. #define PORT_FEATURE_RESOURCE_CFG_VALID 0x00000001
  519. #define PORT_FEATURE_RESOURCE_CFG_DIAG 0x00000002
  520. #define PORT_FEATURE_RESOURCE_CFG_L2 0x00000004
  521. #define PORT_FEATURE_RESOURCE_CFG_ISCSI 0x00000008
  522. #define PORT_FEATURE_RESOURCE_CFG_RDMA 0x00000010
  523. u32 smbus_config;
  524. /* Obsolete */
  525. #define PORT_FEATURE_SMBUS_EN 0x00000001
  526. #define PORT_FEATURE_SMBUS_ADDR_MASK 0x000000fe
  527. #define PORT_FEATURE_SMBUS_ADDR_SHIFT 1
  528. u32 iscsib_boot_cfg;
  529. #define PORT_FEATURE_ISCSIB_SKIP_TARGET_BOOT 0x00000001
  530. u32 link_config; /* Used as HW defaults for the driver */
  531. #define PORT_FEATURE_CONNECTED_SWITCH_MASK 0x03000000
  532. #define PORT_FEATURE_CONNECTED_SWITCH_SHIFT 24
  533. /* (forced) low speed switch (< 10G) */
  534. #define PORT_FEATURE_CON_SWITCH_1G_SWITCH 0x00000000
  535. /* (forced) high speed switch (>= 10G) */
  536. #define PORT_FEATURE_CON_SWITCH_10G_SWITCH 0x01000000
  537. #define PORT_FEATURE_CON_SWITCH_AUTO_DETECT 0x02000000
  538. #define PORT_FEATURE_CON_SWITCH_ONE_TIME_DETECT 0x03000000
  539. #define PORT_FEATURE_LINK_SPEED_MASK 0x000f0000
  540. #define PORT_FEATURE_LINK_SPEED_SHIFT 16
  541. #define PORT_FEATURE_LINK_SPEED_AUTO 0x00000000
  542. #define PORT_FEATURE_LINK_SPEED_10M_FULL 0x00010000
  543. #define PORT_FEATURE_LINK_SPEED_10M_HALF 0x00020000
  544. #define PORT_FEATURE_LINK_SPEED_100M_HALF 0x00030000
  545. #define PORT_FEATURE_LINK_SPEED_100M_FULL 0x00040000
  546. #define PORT_FEATURE_LINK_SPEED_1G 0x00050000
  547. #define PORT_FEATURE_LINK_SPEED_2_5G 0x00060000
  548. #define PORT_FEATURE_LINK_SPEED_10G_CX4 0x00070000
  549. #define PORT_FEATURE_LINK_SPEED_10G_KX4 0x00080000
  550. #define PORT_FEATURE_LINK_SPEED_10G_KR 0x00090000
  551. #define PORT_FEATURE_LINK_SPEED_12G 0x000a0000
  552. #define PORT_FEATURE_LINK_SPEED_12_5G 0x000b0000
  553. #define PORT_FEATURE_LINK_SPEED_13G 0x000c0000
  554. #define PORT_FEATURE_LINK_SPEED_15G 0x000d0000
  555. #define PORT_FEATURE_LINK_SPEED_16G 0x000e0000
  556. #define PORT_FEATURE_FLOW_CONTROL_MASK 0x00000700
  557. #define PORT_FEATURE_FLOW_CONTROL_SHIFT 8
  558. #define PORT_FEATURE_FLOW_CONTROL_AUTO 0x00000000
  559. #define PORT_FEATURE_FLOW_CONTROL_TX 0x00000100
  560. #define PORT_FEATURE_FLOW_CONTROL_RX 0x00000200
  561. #define PORT_FEATURE_FLOW_CONTROL_BOTH 0x00000300
  562. #define PORT_FEATURE_FLOW_CONTROL_NONE 0x00000400
  563. /* The default for MCP link configuration,
  564. uses the same defines as link_config */
  565. u32 mfw_wol_link_cfg;
  566. u32 reserved[19];
  567. };
  568. /****************************************************************************
  569. * Device Information *
  570. ****************************************************************************/
  571. struct dev_info { /* size */
  572. u32 bc_rev; /* 8 bits each: major, minor, build */ /* 4 */
  573. struct shared_hw_cfg shared_hw_config; /* 40 */
  574. struct port_hw_cfg port_hw_config[FUNC_MAX]; /* 400*2=800 */
  575. struct shared_feat_cfg shared_feature_config; /* 4 */
  576. struct port_feat_cfg port_feature_config[FUNC_MAX];/* 116*2=232 */
  577. };
  578. /****************************************************************************
  579. * Management firmware state *
  580. ****************************************************************************/
  581. /* Allocate 320 bytes for management firmware: still not known exactly
  582. * how much IMD needs. */
  583. #define MGMTFW_STATE_WORD_SIZE 80
  584. struct mgmtfw_state {
  585. u32 opaque[MGMTFW_STATE_WORD_SIZE];
  586. };
  587. /****************************************************************************
  588. * Shared Memory Region *
  589. ****************************************************************************/
  590. struct shmem_region { /* SharedMem Offset (size) */
  591. u32 validity_map[FUNC_MAX]; /* 0x0 (4 * 2 = 0x8) */
  592. #define SHR_MEM_VALIDITY_PCI_CFG 0x00000001
  593. #define SHR_MEM_VALIDITY_MB 0x00000002
  594. #define SHR_MEM_VALIDITY_DEV_INFO 0x00000004
  595. /* One licensing bit should be set */
  596. #define SHR_MEM_VALIDITY_LIC_KEY_IN_EFFECT_MASK 0x00000038
  597. #define SHR_MEM_VALIDITY_LIC_MANUF_KEY_IN_EFFECT 0x00000008
  598. #define SHR_MEM_VALIDITY_LIC_UPGRADE_KEY_IN_EFFECT 0x00000010
  599. #define SHR_MEM_VALIDITY_LIC_NO_KEY_IN_EFFECT 0x00000020
  600. struct drv_fw_mb drv_fw_mb[FUNC_MAX]; /* 0x8 (28 * 2 = 0x38) */
  601. struct dev_info dev_info; /* 0x40 (0x438) */
  602. #ifdef _LICENSE_H
  603. license_key_t drv_lic_key[FUNC_MAX]; /* 0x478 (52 * 2 = 0x68) */
  604. #else /* Linux! */
  605. u8 reserved[52*FUNC_MAX];
  606. #endif
  607. /* FW information (for internal FW use) */
  608. u32 fw_info_fio_offset; /* 0x4e0 (0x4) */
  609. struct mgmtfw_state mgmtfw_state; /* 0x4e4 (0x140) */
  610. }; /* 0x624 */
  611. #define BCM_5710_FW_MAJOR_VERSION 4
  612. #define BCM_5710_FW_MINOR_VERSION 0
  613. #define BCM_5710_FW_REVISION_VERSION 14
  614. #define BCM_5710_FW_COMPILE_FLAGS 1
  615. /*
  616. * attention bits
  617. */
  618. struct atten_def_status_block {
  619. u32 attn_bits;
  620. u32 attn_bits_ack;
  621. #if defined(__BIG_ENDIAN)
  622. u16 attn_bits_index;
  623. u8 reserved0;
  624. u8 status_block_id;
  625. #elif defined(__LITTLE_ENDIAN)
  626. u8 status_block_id;
  627. u8 reserved0;
  628. u16 attn_bits_index;
  629. #endif
  630. u32 reserved1;
  631. };
  632. /*
  633. * common data for all protocols
  634. */
  635. struct doorbell_hdr {
  636. u8 header;
  637. #define DOORBELL_HDR_RX (0x1<<0)
  638. #define DOORBELL_HDR_RX_SHIFT 0
  639. #define DOORBELL_HDR_DB_TYPE (0x1<<1)
  640. #define DOORBELL_HDR_DB_TYPE_SHIFT 1
  641. #define DOORBELL_HDR_DPM_SIZE (0x3<<2)
  642. #define DOORBELL_HDR_DPM_SIZE_SHIFT 2
  643. #define DOORBELL_HDR_CONN_TYPE (0xF<<4)
  644. #define DOORBELL_HDR_CONN_TYPE_SHIFT 4
  645. };
  646. /*
  647. * doorbell message send to the chip
  648. */
  649. struct doorbell {
  650. #if defined(__BIG_ENDIAN)
  651. u16 zero_fill2;
  652. u8 zero_fill1;
  653. struct doorbell_hdr header;
  654. #elif defined(__LITTLE_ENDIAN)
  655. struct doorbell_hdr header;
  656. u8 zero_fill1;
  657. u16 zero_fill2;
  658. #endif
  659. };
  660. /*
  661. * IGU driver acknowlegement register
  662. */
  663. struct igu_ack_register {
  664. #if defined(__BIG_ENDIAN)
  665. u16 sb_id_and_flags;
  666. #define IGU_ACK_REGISTER_STATUS_BLOCK_ID (0x1F<<0)
  667. #define IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT 0
  668. #define IGU_ACK_REGISTER_STORM_ID (0x7<<5)
  669. #define IGU_ACK_REGISTER_STORM_ID_SHIFT 5
  670. #define IGU_ACK_REGISTER_UPDATE_INDEX (0x1<<8)
  671. #define IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT 8
  672. #define IGU_ACK_REGISTER_INTERRUPT_MODE (0x3<<9)
  673. #define IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT 9
  674. #define IGU_ACK_REGISTER_RESERVED (0x1F<<11)
  675. #define IGU_ACK_REGISTER_RESERVED_SHIFT 11
  676. u16 status_block_index;
  677. #elif defined(__LITTLE_ENDIAN)
  678. u16 status_block_index;
  679. u16 sb_id_and_flags;
  680. #define IGU_ACK_REGISTER_STATUS_BLOCK_ID (0x1F<<0)
  681. #define IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT 0
  682. #define IGU_ACK_REGISTER_STORM_ID (0x7<<5)
  683. #define IGU_ACK_REGISTER_STORM_ID_SHIFT 5
  684. #define IGU_ACK_REGISTER_UPDATE_INDEX (0x1<<8)
  685. #define IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT 8
  686. #define IGU_ACK_REGISTER_INTERRUPT_MODE (0x3<<9)
  687. #define IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT 9
  688. #define IGU_ACK_REGISTER_RESERVED (0x1F<<11)
  689. #define IGU_ACK_REGISTER_RESERVED_SHIFT 11
  690. #endif
  691. };
  692. /*
  693. * Parser parsing flags field
  694. */
  695. struct parsing_flags {
  696. u16 flags;
  697. #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE (0x1<<0)
  698. #define PARSING_FLAGS_ETHERNET_ADDRESS_TYPE_SHIFT 0
  699. #define PARSING_FLAGS_NUMBER_OF_NESTED_VLANS (0x3<<1)
  700. #define PARSING_FLAGS_NUMBER_OF_NESTED_VLANS_SHIFT 1
  701. #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL (0x3<<3)
  702. #define PARSING_FLAGS_OVER_ETHERNET_PROTOCOL_SHIFT 3
  703. #define PARSING_FLAGS_IP_OPTIONS (0x1<<5)
  704. #define PARSING_FLAGS_IP_OPTIONS_SHIFT 5
  705. #define PARSING_FLAGS_FRAGMENTATION_STATUS (0x1<<6)
  706. #define PARSING_FLAGS_FRAGMENTATION_STATUS_SHIFT 6
  707. #define PARSING_FLAGS_OVER_IP_PROTOCOL (0x3<<7)
  708. #define PARSING_FLAGS_OVER_IP_PROTOCOL_SHIFT 7
  709. #define PARSING_FLAGS_PURE_ACK_INDICATION (0x1<<9)
  710. #define PARSING_FLAGS_PURE_ACK_INDICATION_SHIFT 9
  711. #define PARSING_FLAGS_TCP_OPTIONS_EXIST (0x1<<10)
  712. #define PARSING_FLAGS_TCP_OPTIONS_EXIST_SHIFT 10
  713. #define PARSING_FLAGS_TIME_STAMP_EXIST_FLAG (0x1<<11)
  714. #define PARSING_FLAGS_TIME_STAMP_EXIST_FLAG_SHIFT 11
  715. #define PARSING_FLAGS_CONNECTION_MATCH (0x1<<12)
  716. #define PARSING_FLAGS_CONNECTION_MATCH_SHIFT 12
  717. #define PARSING_FLAGS_LLC_SNAP (0x1<<13)
  718. #define PARSING_FLAGS_LLC_SNAP_SHIFT 13
  719. #define PARSING_FLAGS_RESERVED0 (0x3<<14)
  720. #define PARSING_FLAGS_RESERVED0_SHIFT 14
  721. };
  722. /*
  723. * dmae command structure
  724. */
  725. struct dmae_command {
  726. u32 opcode;
  727. #define DMAE_COMMAND_SRC (0x1<<0)
  728. #define DMAE_COMMAND_SRC_SHIFT 0
  729. #define DMAE_COMMAND_DST (0x3<<1)
  730. #define DMAE_COMMAND_DST_SHIFT 1
  731. #define DMAE_COMMAND_C_DST (0x1<<3)
  732. #define DMAE_COMMAND_C_DST_SHIFT 3
  733. #define DMAE_COMMAND_C_TYPE_ENABLE (0x1<<4)
  734. #define DMAE_COMMAND_C_TYPE_ENABLE_SHIFT 4
  735. #define DMAE_COMMAND_C_TYPE_CRC_ENABLE (0x1<<5)
  736. #define DMAE_COMMAND_C_TYPE_CRC_ENABLE_SHIFT 5
  737. #define DMAE_COMMAND_C_TYPE_CRC_OFFSET (0x7<<6)
  738. #define DMAE_COMMAND_C_TYPE_CRC_OFFSET_SHIFT 6
  739. #define DMAE_COMMAND_ENDIANITY (0x3<<9)
  740. #define DMAE_COMMAND_ENDIANITY_SHIFT 9
  741. #define DMAE_COMMAND_PORT (0x1<<11)
  742. #define DMAE_COMMAND_PORT_SHIFT 11
  743. #define DMAE_COMMAND_CRC_RESET (0x1<<12)
  744. #define DMAE_COMMAND_CRC_RESET_SHIFT 12
  745. #define DMAE_COMMAND_SRC_RESET (0x1<<13)
  746. #define DMAE_COMMAND_SRC_RESET_SHIFT 13
  747. #define DMAE_COMMAND_DST_RESET (0x1<<14)
  748. #define DMAE_COMMAND_DST_RESET_SHIFT 14
  749. #define DMAE_COMMAND_RESERVED0 (0x1FFFF<<15)
  750. #define DMAE_COMMAND_RESERVED0_SHIFT 15
  751. u32 src_addr_lo;
  752. u32 src_addr_hi;
  753. u32 dst_addr_lo;
  754. u32 dst_addr_hi;
  755. #if defined(__BIG_ENDIAN)
  756. u16 reserved1;
  757. u16 len;
  758. #elif defined(__LITTLE_ENDIAN)
  759. u16 len;
  760. u16 reserved1;
  761. #endif
  762. u32 comp_addr_lo;
  763. u32 comp_addr_hi;
  764. u32 comp_val;
  765. u32 crc32;
  766. u32 crc32_c;
  767. #if defined(__BIG_ENDIAN)
  768. u16 crc16_c;
  769. u16 crc16;
  770. #elif defined(__LITTLE_ENDIAN)
  771. u16 crc16;
  772. u16 crc16_c;
  773. #endif
  774. #if defined(__BIG_ENDIAN)
  775. u16 reserved2;
  776. u16 crc_t10;
  777. #elif defined(__LITTLE_ENDIAN)
  778. u16 crc_t10;
  779. u16 reserved2;
  780. #endif
  781. #if defined(__BIG_ENDIAN)
  782. u16 xsum8;
  783. u16 xsum16;
  784. #elif defined(__LITTLE_ENDIAN)
  785. u16 xsum16;
  786. u16 xsum8;
  787. #endif
  788. };
  789. struct double_regpair {
  790. u32 regpair0_lo;
  791. u32 regpair0_hi;
  792. u32 regpair1_lo;
  793. u32 regpair1_hi;
  794. };
  795. /*
  796. * The eth Rx Buffer Descriptor
  797. */
  798. struct eth_rx_bd {
  799. u32 addr_lo;
  800. u32 addr_hi;
  801. };
  802. /*
  803. * The eth storm context of Ustorm
  804. */
  805. struct ustorm_eth_st_context {
  806. #if defined(__BIG_ENDIAN)
  807. u8 sb_index_number;
  808. u8 status_block_id;
  809. u8 __local_rx_bd_cons;
  810. u8 __local_rx_bd_prod;
  811. #elif defined(__LITTLE_ENDIAN)
  812. u8 __local_rx_bd_prod;
  813. u8 __local_rx_bd_cons;
  814. u8 status_block_id;
  815. u8 sb_index_number;
  816. #endif
  817. #if defined(__BIG_ENDIAN)
  818. u16 rcq_cons;
  819. u16 rx_bd_cons;
  820. #elif defined(__LITTLE_ENDIAN)
  821. u16 rx_bd_cons;
  822. u16 rcq_cons;
  823. #endif
  824. u32 rx_bd_page_base_lo;
  825. u32 rx_bd_page_base_hi;
  826. u32 rcq_base_address_lo;
  827. u32 rcq_base_address_hi;
  828. #if defined(__BIG_ENDIAN)
  829. u16 __num_of_returned_cqes;
  830. u8 num_rss;
  831. u8 flags;
  832. #define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT (0x1<<0)
  833. #define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT_SHIFT 0
  834. #define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC (0x1<<1)
  835. #define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC_SHIFT 1
  836. #define USTORM_ETH_ST_CONTEXT_ENABLE_TPA (0x1<<2)
  837. #define USTORM_ETH_ST_CONTEXT_ENABLE_TPA_SHIFT 2
  838. #define __USTORM_ETH_ST_CONTEXT_RESERVED0 (0x1F<<3)
  839. #define __USTORM_ETH_ST_CONTEXT_RESERVED0_SHIFT 3
  840. #elif defined(__LITTLE_ENDIAN)
  841. u8 flags;
  842. #define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT (0x1<<0)
  843. #define USTORM_ETH_ST_CONTEXT_ENABLE_MC_ALIGNMENT_SHIFT 0
  844. #define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC (0x1<<1)
  845. #define USTORM_ETH_ST_CONTEXT_ENABLE_DYNAMIC_HC_SHIFT 1
  846. #define USTORM_ETH_ST_CONTEXT_ENABLE_TPA (0x1<<2)
  847. #define USTORM_ETH_ST_CONTEXT_ENABLE_TPA_SHIFT 2
  848. #define __USTORM_ETH_ST_CONTEXT_RESERVED0 (0x1F<<3)
  849. #define __USTORM_ETH_ST_CONTEXT_RESERVED0_SHIFT 3
  850. u8 num_rss;
  851. u16 __num_of_returned_cqes;
  852. #endif
  853. #if defined(__BIG_ENDIAN)
  854. u16 mc_alignment_size;
  855. u16 agg_threshold;
  856. #elif defined(__LITTLE_ENDIAN)
  857. u16 agg_threshold;
  858. u16 mc_alignment_size;
  859. #endif
  860. struct eth_rx_bd __local_bd_ring[16];
  861. };
  862. /*
  863. * The eth storm context of Tstorm
  864. */
  865. struct tstorm_eth_st_context {
  866. u32 __reserved0[28];
  867. };
  868. /*
  869. * The eth aggregative context section of Xstorm
  870. */
  871. struct xstorm_eth_extra_ag_context_section {
  872. #if defined(__BIG_ENDIAN)
  873. u8 __tcp_agg_vars1;
  874. u8 __reserved50;
  875. u16 __mss;
  876. #elif defined(__LITTLE_ENDIAN)
  877. u16 __mss;
  878. u8 __reserved50;
  879. u8 __tcp_agg_vars1;
  880. #endif
  881. u32 __snd_nxt;
  882. u32 __tx_wnd;
  883. u32 __snd_una;
  884. u32 __reserved53;
  885. #if defined(__BIG_ENDIAN)
  886. u8 __agg_val8_th;
  887. u8 __agg_val8;
  888. u16 __tcp_agg_vars2;
  889. #elif defined(__LITTLE_ENDIAN)
  890. u16 __tcp_agg_vars2;
  891. u8 __agg_val8;
  892. u8 __agg_val8_th;
  893. #endif
  894. u32 __reserved58;
  895. u32 __reserved59;
  896. u32 __reserved60;
  897. u32 __reserved61;
  898. #if defined(__BIG_ENDIAN)
  899. u16 __agg_val7_th;
  900. u16 __agg_val7;
  901. #elif defined(__LITTLE_ENDIAN)
  902. u16 __agg_val7;
  903. u16 __agg_val7_th;
  904. #endif
  905. #if defined(__BIG_ENDIAN)
  906. u8 __tcp_agg_vars5;
  907. u8 __tcp_agg_vars4;
  908. u8 __tcp_agg_vars3;
  909. u8 __reserved62;
  910. #elif defined(__LITTLE_ENDIAN)
  911. u8 __reserved62;
  912. u8 __tcp_agg_vars3;
  913. u8 __tcp_agg_vars4;
  914. u8 __tcp_agg_vars5;
  915. #endif
  916. u32 __tcp_agg_vars6;
  917. #if defined(__BIG_ENDIAN)
  918. u16 __agg_misc6;
  919. u16 __tcp_agg_vars7;
  920. #elif defined(__LITTLE_ENDIAN)
  921. u16 __tcp_agg_vars7;
  922. u16 __agg_misc6;
  923. #endif
  924. u32 __agg_val10;
  925. u32 __agg_val10_th;
  926. #if defined(__BIG_ENDIAN)
  927. u16 __reserved3;
  928. u8 __reserved2;
  929. u8 __agg_misc7;
  930. #elif defined(__LITTLE_ENDIAN)
  931. u8 __agg_misc7;
  932. u8 __reserved2;
  933. u16 __reserved3;
  934. #endif
  935. };
  936. /*
  937. * The eth aggregative context of Xstorm
  938. */
  939. struct xstorm_eth_ag_context {
  940. #if defined(__BIG_ENDIAN)
  941. u16 __bd_prod;
  942. u8 __agg_vars1;
  943. u8 __state;
  944. #elif defined(__LITTLE_ENDIAN)
  945. u8 __state;
  946. u8 __agg_vars1;
  947. u16 __bd_prod;
  948. #endif
  949. #if defined(__BIG_ENDIAN)
  950. u8 cdu_reserved;
  951. u8 __agg_vars4;
  952. u8 __agg_vars3;
  953. u8 __agg_vars2;
  954. #elif defined(__LITTLE_ENDIAN)
  955. u8 __agg_vars2;
  956. u8 __agg_vars3;
  957. u8 __agg_vars4;
  958. u8 cdu_reserved;
  959. #endif
  960. u32 __more_packets_to_send;
  961. #if defined(__BIG_ENDIAN)
  962. u16 __agg_vars5;
  963. u16 __agg_val4_th;
  964. #elif defined(__LITTLE_ENDIAN)
  965. u16 __agg_val4_th;
  966. u16 __agg_vars5;
  967. #endif
  968. struct xstorm_eth_extra_ag_context_section __extra_section;
  969. #if defined(__BIG_ENDIAN)
  970. u16 __agg_vars7;
  971. u8 __agg_val3_th;
  972. u8 __agg_vars6;
  973. #elif defined(__LITTLE_ENDIAN)
  974. u8 __agg_vars6;
  975. u8 __agg_val3_th;
  976. u16 __agg_vars7;
  977. #endif
  978. #if defined(__BIG_ENDIAN)
  979. u16 __agg_val11_th;
  980. u16 __agg_val11;
  981. #elif defined(__LITTLE_ENDIAN)
  982. u16 __agg_val11;
  983. u16 __agg_val11_th;
  984. #endif
  985. #if defined(__BIG_ENDIAN)
  986. u8 __reserved1;
  987. u8 __agg_val6_th;
  988. u16 __agg_val9;
  989. #elif defined(__LITTLE_ENDIAN)
  990. u16 __agg_val9;
  991. u8 __agg_val6_th;
  992. u8 __reserved1;
  993. #endif
  994. #if defined(__BIG_ENDIAN)
  995. u16 __agg_val2_th;
  996. u16 __agg_val2;
  997. #elif defined(__LITTLE_ENDIAN)
  998. u16 __agg_val2;
  999. u16 __agg_val2_th;
  1000. #endif
  1001. u32 __agg_vars8;
  1002. #if defined(__BIG_ENDIAN)
  1003. u16 __agg_misc0;
  1004. u16 __agg_val4;
  1005. #elif defined(__LITTLE_ENDIAN)
  1006. u16 __agg_val4;
  1007. u16 __agg_misc0;
  1008. #endif
  1009. #if defined(__BIG_ENDIAN)
  1010. u8 __agg_val3;
  1011. u8 __agg_val6;
  1012. u8 __agg_val5_th;
  1013. u8 __agg_val5;
  1014. #elif defined(__LITTLE_ENDIAN)
  1015. u8 __agg_val5;
  1016. u8 __agg_val5_th;
  1017. u8 __agg_val6;
  1018. u8 __agg_val3;
  1019. #endif
  1020. #if defined(__BIG_ENDIAN)
  1021. u16 __agg_misc1;
  1022. u16 __bd_ind_max_val;
  1023. #elif defined(__LITTLE_ENDIAN)
  1024. u16 __bd_ind_max_val;
  1025. u16 __agg_misc1;
  1026. #endif
  1027. u32 __reserved57;
  1028. u32 __agg_misc4;
  1029. u32 __agg_misc5;
  1030. };
  1031. /*
  1032. * The eth aggregative context section of Tstorm
  1033. */
  1034. struct tstorm_eth_extra_ag_context_section {
  1035. u32 __agg_val1;
  1036. #if defined(__BIG_ENDIAN)
  1037. u8 __tcp_agg_vars2;
  1038. u8 __agg_val3;
  1039. u16 __agg_val2;
  1040. #elif defined(__LITTLE_ENDIAN)
  1041. u16 __agg_val2;
  1042. u8 __agg_val3;
  1043. u8 __tcp_agg_vars2;
  1044. #endif
  1045. #if defined(__BIG_ENDIAN)
  1046. u16 __agg_val5;
  1047. u8 __agg_val6;
  1048. u8 __tcp_agg_vars3;
  1049. #elif defined(__LITTLE_ENDIAN)
  1050. u8 __tcp_agg_vars3;
  1051. u8 __agg_val6;
  1052. u16 __agg_val5;
  1053. #endif
  1054. u32 __reserved63;
  1055. u32 __reserved64;
  1056. u32 __reserved65;
  1057. u32 __reserved66;
  1058. u32 __reserved67;
  1059. u32 __tcp_agg_vars1;
  1060. u32 __reserved61;
  1061. u32 __reserved62;
  1062. u32 __reserved2;
  1063. };
  1064. /*
  1065. * The eth aggregative context of Tstorm
  1066. */
  1067. struct tstorm_eth_ag_context {
  1068. #if defined(__BIG_ENDIAN)
  1069. u16 __reserved54;
  1070. u8 __agg_vars1;
  1071. u8 __state;
  1072. #elif defined(__LITTLE_ENDIAN)
  1073. u8 __state;
  1074. u8 __agg_vars1;
  1075. u16 __reserved54;
  1076. #endif
  1077. #if defined(__BIG_ENDIAN)
  1078. u16 __agg_val4;
  1079. u16 __agg_vars2;
  1080. #elif defined(__LITTLE_ENDIAN)
  1081. u16 __agg_vars2;
  1082. u16 __agg_val4;
  1083. #endif
  1084. struct tstorm_eth_extra_ag_context_section __extra_section;
  1085. };
  1086. /*
  1087. * The eth aggregative context of Cstorm
  1088. */
  1089. struct cstorm_eth_ag_context {
  1090. u32 __agg_vars1;
  1091. #if defined(__BIG_ENDIAN)
  1092. u8 __aux1_th;
  1093. u8 __aux1_val;
  1094. u16 __agg_vars2;
  1095. #elif defined(__LITTLE_ENDIAN)
  1096. u16 __agg_vars2;
  1097. u8 __aux1_val;
  1098. u8 __aux1_th;
  1099. #endif
  1100. u32 __num_of_treated_packet;
  1101. u32 __last_packet_treated;
  1102. #if defined(__BIG_ENDIAN)
  1103. u16 __reserved58;
  1104. u16 __reserved57;
  1105. #elif defined(__LITTLE_ENDIAN)
  1106. u16 __reserved57;
  1107. u16 __reserved58;
  1108. #endif
  1109. #if defined(__BIG_ENDIAN)
  1110. u8 __reserved62;
  1111. u8 __reserved61;
  1112. u8 __reserved60;
  1113. u8 __reserved59;
  1114. #elif defined(__LITTLE_ENDIAN)
  1115. u8 __reserved59;
  1116. u8 __reserved60;
  1117. u8 __reserved61;
  1118. u8 __reserved62;
  1119. #endif
  1120. #if defined(__BIG_ENDIAN)
  1121. u16 __reserved64;
  1122. u16 __reserved63;
  1123. #elif defined(__LITTLE_ENDIAN)
  1124. u16 __reserved63;
  1125. u16 __reserved64;
  1126. #endif
  1127. u32 __reserved65;
  1128. #if defined(__BIG_ENDIAN)
  1129. u16 __agg_vars3;
  1130. u16 __rq_inv_cnt;
  1131. #elif defined(__LITTLE_ENDIAN)
  1132. u16 __rq_inv_cnt;
  1133. u16 __agg_vars3;
  1134. #endif
  1135. #if defined(__BIG_ENDIAN)
  1136. u16 __packet_index_th;
  1137. u16 __packet_index;
  1138. #elif defined(__LITTLE_ENDIAN)
  1139. u16 __packet_index;
  1140. u16 __packet_index_th;
  1141. #endif
  1142. };
  1143. /*
  1144. * The eth aggregative context of Ustorm
  1145. */
  1146. struct ustorm_eth_ag_context {
  1147. #if defined(__BIG_ENDIAN)
  1148. u8 __aux_counter_flags;
  1149. u8 __agg_vars2;
  1150. u8 __agg_vars1;
  1151. u8 __state;
  1152. #elif defined(__LITTLE_ENDIAN)
  1153. u8 __state;
  1154. u8 __agg_vars1;
  1155. u8 __agg_vars2;
  1156. u8 __aux_counter_flags;
  1157. #endif
  1158. #if defined(__BIG_ENDIAN)
  1159. u8 cdu_usage;
  1160. u8 __agg_misc2;
  1161. u16 __agg_misc1;
  1162. #elif defined(__LITTLE_ENDIAN)
  1163. u16 __agg_misc1;
  1164. u8 __agg_misc2;
  1165. u8 cdu_usage;
  1166. #endif
  1167. u32 __agg_misc4;
  1168. #if defined(__BIG_ENDIAN)
  1169. u8 __agg_val3_th;
  1170. u8 __agg_val3;
  1171. u16 __agg_misc3;
  1172. #elif defined(__LITTLE_ENDIAN)
  1173. u16 __agg_misc3;
  1174. u8 __agg_val3;
  1175. u8 __agg_val3_th;
  1176. #endif
  1177. u32 __agg_val1;
  1178. u32 __agg_misc4_th;
  1179. #if defined(__BIG_ENDIAN)
  1180. u16 __agg_val2_th;
  1181. u16 __agg_val2;
  1182. #elif defined(__LITTLE_ENDIAN)
  1183. u16 __agg_val2;
  1184. u16 __agg_val2_th;
  1185. #endif
  1186. #if defined(__BIG_ENDIAN)
  1187. u16 __reserved2;
  1188. u8 __decision_rules;
  1189. u8 __decision_rule_enable_bits;
  1190. #elif defined(__LITTLE_ENDIAN)
  1191. u8 __decision_rule_enable_bits;
  1192. u8 __decision_rules;
  1193. u16 __reserved2;
  1194. #endif
  1195. };
  1196. /*
  1197. * Timers connection context
  1198. */
  1199. struct timers_block_context {
  1200. u32 __reserved_0;
  1201. u32 __reserved_1;
  1202. u32 __reserved_2;
  1203. u32 __reserved_flags;
  1204. };
  1205. /*
  1206. * structure for easy accessability to assembler
  1207. */
  1208. struct eth_tx_bd_flags {
  1209. u8 as_bitfield;
  1210. #define ETH_TX_BD_FLAGS_VLAN_TAG (0x1<<0)
  1211. #define ETH_TX_BD_FLAGS_VLAN_TAG_SHIFT 0
  1212. #define ETH_TX_BD_FLAGS_IP_CSUM (0x1<<1)
  1213. #define ETH_TX_BD_FLAGS_IP_CSUM_SHIFT 1
  1214. #define ETH_TX_BD_FLAGS_TCP_CSUM (0x1<<2)
  1215. #define ETH_TX_BD_FLAGS_TCP_CSUM_SHIFT 2
  1216. #define ETH_TX_BD_FLAGS_END_BD (0x1<<3)
  1217. #define ETH_TX_BD_FLAGS_END_BD_SHIFT 3
  1218. #define ETH_TX_BD_FLAGS_START_BD (0x1<<4)
  1219. #define ETH_TX_BD_FLAGS_START_BD_SHIFT 4
  1220. #define ETH_TX_BD_FLAGS_HDR_POOL (0x1<<5)
  1221. #define ETH_TX_BD_FLAGS_HDR_POOL_SHIFT 5
  1222. #define ETH_TX_BD_FLAGS_SW_LSO (0x1<<6)
  1223. #define ETH_TX_BD_FLAGS_SW_LSO_SHIFT 6
  1224. #define ETH_TX_BD_FLAGS_IPV6 (0x1<<7)
  1225. #define ETH_TX_BD_FLAGS_IPV6_SHIFT 7
  1226. };
  1227. /*
  1228. * The eth Tx Buffer Descriptor
  1229. */
  1230. struct eth_tx_bd {
  1231. u32 addr_lo;
  1232. u32 addr_hi;
  1233. u16 nbd;
  1234. u16 nbytes;
  1235. u16 vlan;
  1236. struct eth_tx_bd_flags bd_flags;
  1237. u8 general_data;
  1238. #define ETH_TX_BD_HDR_NBDS (0x3F<<0)
  1239. #define ETH_TX_BD_HDR_NBDS_SHIFT 0
  1240. #define ETH_TX_BD_ETH_ADDR_TYPE (0x3<<6)
  1241. #define ETH_TX_BD_ETH_ADDR_TYPE_SHIFT 6
  1242. };
  1243. /*
  1244. * Tx parsing BD structure for ETH,Relevant in START
  1245. */
  1246. struct eth_tx_parse_bd {
  1247. u8 global_data;
  1248. #define ETH_TX_PARSE_BD_IP_HDR_START_OFFSET (0xF<<0)
  1249. #define ETH_TX_PARSE_BD_IP_HDR_START_OFFSET_SHIFT 0
  1250. #define ETH_TX_PARSE_BD_CS_ANY_FLG (0x1<<4)
  1251. #define ETH_TX_PARSE_BD_CS_ANY_FLG_SHIFT 4
  1252. #define ETH_TX_PARSE_BD_PSEUDO_CS_WITHOUT_LEN (0x1<<5)
  1253. #define ETH_TX_PARSE_BD_PSEUDO_CS_WITHOUT_LEN_SHIFT 5
  1254. #define ETH_TX_PARSE_BD_LLC_SNAP_EN (0x1<<6)
  1255. #define ETH_TX_PARSE_BD_LLC_SNAP_EN_SHIFT 6
  1256. #define ETH_TX_PARSE_BD_NS_FLG (0x1<<7)
  1257. #define ETH_TX_PARSE_BD_NS_FLG_SHIFT 7
  1258. u8 tcp_flags;
  1259. #define ETH_TX_PARSE_BD_FIN_FLG (0x1<<0)
  1260. #define ETH_TX_PARSE_BD_FIN_FLG_SHIFT 0
  1261. #define ETH_TX_PARSE_BD_SYN_FLG (0x1<<1)
  1262. #define ETH_TX_PARSE_BD_SYN_FLG_SHIFT 1
  1263. #define ETH_TX_PARSE_BD_RST_FLG (0x1<<2)
  1264. #define ETH_TX_PARSE_BD_RST_FLG_SHIFT 2
  1265. #define ETH_TX_PARSE_BD_PSH_FLG (0x1<<3)
  1266. #define ETH_TX_PARSE_BD_PSH_FLG_SHIFT 3
  1267. #define ETH_TX_PARSE_BD_ACK_FLG (0x1<<4)
  1268. #define ETH_TX_PARSE_BD_ACK_FLG_SHIFT 4
  1269. #define ETH_TX_PARSE_BD_URG_FLG (0x1<<5)
  1270. #define ETH_TX_PARSE_BD_URG_FLG_SHIFT 5
  1271. #define ETH_TX_PARSE_BD_ECE_FLG (0x1<<6)
  1272. #define ETH_TX_PARSE_BD_ECE_FLG_SHIFT 6
  1273. #define ETH_TX_PARSE_BD_CWR_FLG (0x1<<7)
  1274. #define ETH_TX_PARSE_BD_CWR_FLG_SHIFT 7
  1275. u8 ip_hlen;
  1276. s8 cs_offset;
  1277. u16 total_hlen;
  1278. u16 lso_mss;
  1279. u16 tcp_pseudo_csum;
  1280. u16 ip_id;
  1281. u32 tcp_send_seq;
  1282. };
  1283. /*
  1284. * The last BD in the BD memory will hold a pointer to the next BD memory
  1285. */
  1286. struct eth_tx_next_bd {
  1287. u32 addr_lo;
  1288. u32 addr_hi;
  1289. u8 reserved[8];
  1290. };
  1291. /*
  1292. * union for 3 Bd types
  1293. */
  1294. union eth_tx_bd_types {
  1295. struct eth_tx_bd reg_bd;
  1296. struct eth_tx_parse_bd parse_bd;
  1297. struct eth_tx_next_bd next_bd;
  1298. };
  1299. /*
  1300. * The eth storm context of Xstorm
  1301. */
  1302. struct xstorm_eth_st_context {
  1303. u32 tx_bd_page_base_lo;
  1304. u32 tx_bd_page_base_hi;
  1305. #if defined(__BIG_ENDIAN)
  1306. u16 tx_bd_cons;
  1307. u8 __reserved0;
  1308. u8 __local_tx_bd_prod;
  1309. #elif defined(__LITTLE_ENDIAN)
  1310. u8 __local_tx_bd_prod;
  1311. u8 __reserved0;
  1312. u16 tx_bd_cons;
  1313. #endif
  1314. u32 db_data_addr_lo;
  1315. u32 db_data_addr_hi;
  1316. u32 __pkt_cons;
  1317. u32 __gso_next;
  1318. u32 is_eth_conn_1b;
  1319. union eth_tx_bd_types __bds[13];
  1320. };
  1321. /*
  1322. * The eth storm context of Cstorm
  1323. */
  1324. struct cstorm_eth_st_context {
  1325. #if defined(__BIG_ENDIAN)
  1326. u16 __reserved0;
  1327. u8 sb_index_number;
  1328. u8 status_block_id;
  1329. #elif defined(__LITTLE_ENDIAN)
  1330. u8 status_block_id;
  1331. u8 sb_index_number;
  1332. u16 __reserved0;
  1333. #endif
  1334. u32 __reserved1[3];
  1335. };
  1336. /*
  1337. * Ethernet connection context
  1338. */
  1339. struct eth_context {
  1340. struct ustorm_eth_st_context ustorm_st_context;
  1341. struct tstorm_eth_st_context tstorm_st_context;
  1342. struct xstorm_eth_ag_context xstorm_ag_context;
  1343. struct tstorm_eth_ag_context tstorm_ag_context;
  1344. struct cstorm_eth_ag_context cstorm_ag_context;
  1345. struct ustorm_eth_ag_context ustorm_ag_context;
  1346. struct timers_block_context timers_context;
  1347. struct xstorm_eth_st_context xstorm_st_context;
  1348. struct cstorm_eth_st_context cstorm_st_context;
  1349. };
  1350. /*
  1351. * ethernet doorbell
  1352. */
  1353. struct eth_tx_doorbell {
  1354. #if defined(__BIG_ENDIAN)
  1355. u16 npackets;
  1356. u8 params;
  1357. #define ETH_TX_DOORBELL_NUM_BDS (0x3F<<0)
  1358. #define ETH_TX_DOORBELL_NUM_BDS_SHIFT 0
  1359. #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG (0x1<<6)
  1360. #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG_SHIFT 6
  1361. #define ETH_TX_DOORBELL_SPARE (0x1<<7)
  1362. #define ETH_TX_DOORBELL_SPARE_SHIFT 7
  1363. struct doorbell_hdr hdr;
  1364. #elif defined(__LITTLE_ENDIAN)
  1365. struct doorbell_hdr hdr;
  1366. u8 params;
  1367. #define ETH_TX_DOORBELL_NUM_BDS (0x3F<<0)
  1368. #define ETH_TX_DOORBELL_NUM_BDS_SHIFT 0
  1369. #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG (0x1<<6)
  1370. #define ETH_TX_DOORBELL_RESERVED_TX_FIN_FLAG_SHIFT 6
  1371. #define ETH_TX_DOORBELL_SPARE (0x1<<7)
  1372. #define ETH_TX_DOORBELL_SPARE_SHIFT 7
  1373. u16 npackets;
  1374. #endif
  1375. };
  1376. /*
  1377. * ustorm status block
  1378. */
  1379. struct ustorm_def_status_block {
  1380. u16 index_values[HC_USTORM_DEF_SB_NUM_INDICES];
  1381. u16 status_block_index;
  1382. u8 reserved0;
  1383. u8 status_block_id;
  1384. u32 __flags;
  1385. };
  1386. /*
  1387. * cstorm status block
  1388. */
  1389. struct cstorm_def_status_block {
  1390. u16 index_values[HC_CSTORM_DEF_SB_NUM_INDICES];
  1391. u16 status_block_index;
  1392. u8 reserved0;
  1393. u8 status_block_id;
  1394. u32 __flags;
  1395. };
  1396. /*
  1397. * xstorm status block
  1398. */
  1399. struct xstorm_def_status_block {
  1400. u16 index_values[HC_XSTORM_DEF_SB_NUM_INDICES];
  1401. u16 status_block_index;
  1402. u8 reserved0;
  1403. u8 status_block_id;
  1404. u32 __flags;
  1405. };
  1406. /*
  1407. * tstorm status block
  1408. */
  1409. struct tstorm_def_status_block {
  1410. u16 index_values[HC_TSTORM_DEF_SB_NUM_INDICES];
  1411. u16 status_block_index;
  1412. u8 reserved0;
  1413. u8 status_block_id;
  1414. u32 __flags;
  1415. };
  1416. /*
  1417. * host status block
  1418. */
  1419. struct host_def_status_block {
  1420. struct atten_def_status_block atten_status_block;
  1421. struct ustorm_def_status_block u_def_status_block;
  1422. struct cstorm_def_status_block c_def_status_block;
  1423. struct xstorm_def_status_block x_def_status_block;
  1424. struct tstorm_def_status_block t_def_status_block;
  1425. };
  1426. /*
  1427. * ustorm status block
  1428. */
  1429. struct ustorm_status_block {
  1430. u16 index_values[HC_USTORM_SB_NUM_INDICES];
  1431. u16 status_block_index;
  1432. u8 reserved0;
  1433. u8 status_block_id;
  1434. u32 __flags;
  1435. };
  1436. /*
  1437. * cstorm status block
  1438. */
  1439. struct cstorm_status_block {
  1440. u16 index_values[HC_CSTORM_SB_NUM_INDICES];
  1441. u16 status_block_index;
  1442. u8 reserved0;
  1443. u8 status_block_id;
  1444. u32 __flags;
  1445. };
  1446. /*
  1447. * host status block
  1448. */
  1449. struct host_status_block {
  1450. struct ustorm_status_block u_status_block;
  1451. struct cstorm_status_block c_status_block;
  1452. };
  1453. /*
  1454. * The data for RSS setup ramrod
  1455. */
  1456. struct eth_client_setup_ramrod_data {
  1457. u32 client_id_5b;
  1458. u8 is_rdma_1b;
  1459. u8 reserved0;
  1460. u16 reserved1;
  1461. };
  1462. /*
  1463. * L2 dynamic host coalescing init parameters
  1464. */
  1465. struct eth_dynamic_hc_config {
  1466. u32 threshold[3];
  1467. u8 hc_timeout[4];
  1468. };
  1469. /*
  1470. * regular eth FP CQE parameters struct
  1471. */
  1472. struct eth_fast_path_rx_cqe {
  1473. u8 type;
  1474. u8 error_type_flags;
  1475. #define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG (0x1<<0)
  1476. #define ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG_SHIFT 0
  1477. #define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG (0x1<<1)
  1478. #define ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG_SHIFT 1
  1479. #define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG (0x1<<2)
  1480. #define ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG_SHIFT 2
  1481. #define ETH_FAST_PATH_RX_CQE_START_FLG (0x1<<3)
  1482. #define ETH_FAST_PATH_RX_CQE_START_FLG_SHIFT 3
  1483. #define ETH_FAST_PATH_RX_CQE_END_FLG (0x1<<4)
  1484. #define ETH_FAST_PATH_RX_CQE_END_FLG_SHIFT 4
  1485. #define ETH_FAST_PATH_RX_CQE_RESERVED0 (0x7<<5)
  1486. #define ETH_FAST_PATH_RX_CQE_RESERVED0_SHIFT 5
  1487. u8 status_flags;
  1488. #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE (0x7<<0)
  1489. #define ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE_SHIFT 0
  1490. #define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG (0x1<<3)
  1491. #define ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG_SHIFT 3
  1492. #define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG (0x1<<4)
  1493. #define ETH_FAST_PATH_RX_CQE_BROADCAST_FLG_SHIFT 4
  1494. #define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG (0x1<<5)
  1495. #define ETH_FAST_PATH_RX_CQE_MAC_MATCH_FLG_SHIFT 5
  1496. #define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG (0x1<<6)
  1497. #define ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG_SHIFT 6
  1498. #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG (0x1<<7)
  1499. #define ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG_SHIFT 7
  1500. u8 placement_offset;
  1501. u32 rss_hash_result;
  1502. u16 vlan_tag;
  1503. u16 pkt_len;
  1504. u16 queue_index;
  1505. struct parsing_flags pars_flags;
  1506. };
  1507. /*
  1508. * The data for RSS setup ramrod
  1509. */
  1510. struct eth_halt_ramrod_data {
  1511. u32 client_id_5b;
  1512. u32 reserved0;
  1513. };
  1514. /*
  1515. * Place holder for ramrods protocol specific data
  1516. */
  1517. struct ramrod_data {
  1518. u32 data_lo;
  1519. u32 data_hi;
  1520. };
  1521. /*
  1522. * union for ramrod data for ethernet protocol (CQE) (force size of 16 bits)
  1523. */
  1524. union eth_ramrod_data {
  1525. struct ramrod_data general;
  1526. };
  1527. /*
  1528. * Rx Last BD in page (in ETH)
  1529. */
  1530. struct eth_rx_bd_next_page {
  1531. u32 addr_lo;
  1532. u32 addr_hi;
  1533. u8 reserved[8];
  1534. };
  1535. /*
  1536. * Eth Rx Cqe structure- general structure for ramrods
  1537. */
  1538. struct common_ramrod_eth_rx_cqe {
  1539. u8 type;
  1540. u8 conn_type_3b;
  1541. u16 reserved;
  1542. u32 conn_and_cmd_data;
  1543. #define COMMON_RAMROD_ETH_RX_CQE_CID (0xFFFFFF<<0)
  1544. #define COMMON_RAMROD_ETH_RX_CQE_CID_SHIFT 0
  1545. #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID (0xFF<<24)
  1546. #define COMMON_RAMROD_ETH_RX_CQE_CMD_ID_SHIFT 24
  1547. struct ramrod_data protocol_data;
  1548. };
  1549. /*
  1550. * Rx Last CQE in page (in ETH)
  1551. */
  1552. struct eth_rx_cqe_next_page {
  1553. u32 addr_lo;
  1554. u32 addr_hi;
  1555. u32 reserved0;
  1556. u32 reserved1;
  1557. };
  1558. /*
  1559. * union for all eth rx cqe types (fix their sizes)
  1560. */
  1561. union eth_rx_cqe {
  1562. struct eth_fast_path_rx_cqe fast_path_cqe;
  1563. struct common_ramrod_eth_rx_cqe ramrod_cqe;
  1564. struct eth_rx_cqe_next_page next_page_cqe;
  1565. };
  1566. /*
  1567. * common data for all protocols
  1568. */
  1569. struct spe_hdr {
  1570. u32 conn_and_cmd_data;
  1571. #define SPE_HDR_CID (0xFFFFFF<<0)
  1572. #define SPE_HDR_CID_SHIFT 0
  1573. #define SPE_HDR_CMD_ID (0xFF<<24)
  1574. #define SPE_HDR_CMD_ID_SHIFT 24
  1575. u16 type;
  1576. #define SPE_HDR_CONN_TYPE (0xFF<<0)
  1577. #define SPE_HDR_CONN_TYPE_SHIFT 0
  1578. #define SPE_HDR_COMMON_RAMROD (0xFF<<8)
  1579. #define SPE_HDR_COMMON_RAMROD_SHIFT 8
  1580. u16 reserved;
  1581. };
  1582. struct regpair {
  1583. u32 lo;
  1584. u32 hi;
  1585. };
  1586. /*
  1587. * ethernet slow path element
  1588. */
  1589. union eth_specific_data {
  1590. u8 protocol_data[8];
  1591. struct regpair mac_config_addr;
  1592. struct eth_client_setup_ramrod_data client_setup_ramrod_data;
  1593. struct eth_halt_ramrod_data halt_ramrod_data;
  1594. struct regpair leading_cqe_addr;
  1595. struct regpair update_data_addr;
  1596. };
  1597. /*
  1598. * ethernet slow path element
  1599. */
  1600. struct eth_spe {
  1601. struct spe_hdr hdr;
  1602. union eth_specific_data data;
  1603. };
  1604. /*
  1605. * doorbell data in host memory
  1606. */
  1607. struct eth_tx_db_data {
  1608. u32 packets_prod;
  1609. u16 bds_prod;
  1610. u16 reserved;
  1611. };
  1612. /*
  1613. * Common configuration parameters per port in Tstorm
  1614. */
  1615. struct tstorm_eth_function_common_config {
  1616. u32 config_flags;
  1617. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY (0x1<<0)
  1618. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_CAPABILITY_SHIFT 0
  1619. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY (0x1<<1)
  1620. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV4_TCP_CAPABILITY_SHIFT 1
  1621. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY (0x1<<2)
  1622. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_CAPABILITY_SHIFT 2
  1623. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY (0x1<<3)
  1624. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_IPV6_TCP_CAPABILITY_SHIFT 3
  1625. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_ENABLE (0x1<<4)
  1626. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_RSS_ENABLE_SHIFT 4
  1627. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE (0x1<<5)
  1628. #define TSTORM_ETH_FUNCTION_COMMON_CONFIG_DEFAULT_ENABLE_SHIFT 5
  1629. #define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0 (0x3FFFFFF<<6)
  1630. #define __TSTORM_ETH_FUNCTION_COMMON_CONFIG_RESERVED0_SHIFT 6
  1631. #if defined(__BIG_ENDIAN)
  1632. u16 __secondary_vlan_id;
  1633. u8 leading_client_id;
  1634. u8 rss_result_mask;
  1635. #elif defined(__LITTLE_ENDIAN)
  1636. u8 rss_result_mask;
  1637. u8 leading_client_id;
  1638. u16 __secondary_vlan_id;
  1639. #endif
  1640. };
  1641. /*
  1642. * parameters for eth update ramrod
  1643. */
  1644. struct eth_update_ramrod_data {
  1645. struct tstorm_eth_function_common_config func_config;
  1646. u8 indirectionTable[128];
  1647. };
  1648. /*
  1649. * MAC filtering configuration command header
  1650. */
  1651. struct mac_configuration_hdr {
  1652. u8 length_6b;
  1653. u8 offset;
  1654. u16 reserved0;
  1655. u32 reserved1;
  1656. };
  1657. /*
  1658. * MAC address in list for ramrod
  1659. */
  1660. struct tstorm_cam_entry {
  1661. u16 lsb_mac_addr;
  1662. u16 middle_mac_addr;
  1663. u16 msb_mac_addr;
  1664. u16 flags;
  1665. #define TSTORM_CAM_ENTRY_PORT_ID (0x1<<0)
  1666. #define TSTORM_CAM_ENTRY_PORT_ID_SHIFT 0
  1667. #define TSTORM_CAM_ENTRY_RSRVVAL0 (0x7<<1)
  1668. #define TSTORM_CAM_ENTRY_RSRVVAL0_SHIFT 1
  1669. #define TSTORM_CAM_ENTRY_RESERVED0 (0xFFF<<4)
  1670. #define TSTORM_CAM_ENTRY_RESERVED0_SHIFT 4
  1671. };
  1672. /*
  1673. * MAC filtering: CAM target table entry
  1674. */
  1675. struct tstorm_cam_target_table_entry {
  1676. u8 flags;
  1677. #define TSTORM_CAM_TARGET_TABLE_ENTRY_BROADCAST (0x1<<0)
  1678. #define TSTORM_CAM_TARGET_TABLE_ENTRY_BROADCAST_SHIFT 0
  1679. #define TSTORM_CAM_TARGET_TABLE_ENTRY_OVERRIDE_VLAN_REMOVAL (0x1<<1)
  1680. #define TSTORM_CAM_TARGET_TABLE_ENTRY_OVERRIDE_VLAN_REMOVAL_SHIFT 1
  1681. #define TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE (0x1<<2)
  1682. #define TSTORM_CAM_TARGET_TABLE_ENTRY_ACTION_TYPE_SHIFT 2
  1683. #define TSTORM_CAM_TARGET_TABLE_ENTRY_RDMA_MAC (0x1<<3)
  1684. #define TSTORM_CAM_TARGET_TABLE_ENTRY_RDMA_MAC_SHIFT 3
  1685. #define TSTORM_CAM_TARGET_TABLE_ENTRY_RESERVED0 (0xF<<4)
  1686. #define TSTORM_CAM_TARGET_TABLE_ENTRY_RESERVED0_SHIFT 4
  1687. u8 client_id;
  1688. u16 vlan_id;
  1689. };
  1690. /*
  1691. * MAC address in list for ramrod
  1692. */
  1693. struct mac_configuration_entry {
  1694. struct tstorm_cam_entry cam_entry;
  1695. struct tstorm_cam_target_table_entry target_table_entry;
  1696. };
  1697. /*
  1698. * MAC filtering configuration command
  1699. */
  1700. struct mac_configuration_cmd {
  1701. struct mac_configuration_hdr hdr;
  1702. struct mac_configuration_entry config_table[64];
  1703. };
  1704. /*
  1705. * Configuration parameters per client in Tstorm
  1706. */
  1707. struct tstorm_eth_client_config {
  1708. #if defined(__BIG_ENDIAN)
  1709. u16 statistics_counter_id;
  1710. u16 mtu;
  1711. #elif defined(__LITTLE_ENDIAN)
  1712. u16 mtu;
  1713. u16 statistics_counter_id;
  1714. #endif
  1715. #if defined(__BIG_ENDIAN)
  1716. u16 drop_flags;
  1717. #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR (0x1<<0)
  1718. #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR_SHIFT 0
  1719. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR (0x1<<1)
  1720. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR_SHIFT 1
  1721. #define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR (0x1<<2)
  1722. #define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR_SHIFT 2
  1723. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<3)
  1724. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 3
  1725. #define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<4)
  1726. #define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 4
  1727. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0x7FF<<5)
  1728. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 5
  1729. u16 config_flags;
  1730. #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE (0x1<<0)
  1731. #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE_SHIFT 0
  1732. #define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<1)
  1733. #define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 1
  1734. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0x3FFF<<2)
  1735. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 2
  1736. #elif defined(__LITTLE_ENDIAN)
  1737. u16 config_flags;
  1738. #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE (0x1<<0)
  1739. #define TSTORM_ETH_CLIENT_CONFIG_VLAN_REMOVAL_ENABLE_SHIFT 0
  1740. #define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE (0x1<<1)
  1741. #define TSTORM_ETH_CLIENT_CONFIG_STATSITICS_ENABLE_SHIFT 1
  1742. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0 (0x3FFF<<2)
  1743. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED0_SHIFT 2
  1744. u16 drop_flags;
  1745. #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR (0x1<<0)
  1746. #define TSTORM_ETH_CLIENT_CONFIG_DROP_IP_CS_ERR_SHIFT 0
  1747. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR (0x1<<1)
  1748. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TCP_CS_ERR_SHIFT 1
  1749. #define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR (0x1<<2)
  1750. #define TSTORM_ETH_CLIENT_CONFIG_DROP_MAC_ERR_SHIFT 2
  1751. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0 (0x1<<3)
  1752. #define TSTORM_ETH_CLIENT_CONFIG_DROP_TTL0_SHIFT 3
  1753. #define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR (0x1<<4)
  1754. #define TSTORM_ETH_CLIENT_CONFIG_DROP_UDP_CS_ERR_SHIFT 4
  1755. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1 (0x7FF<<5)
  1756. #define __TSTORM_ETH_CLIENT_CONFIG_RESERVED1_SHIFT 5
  1757. #endif
  1758. };
  1759. /*
  1760. * MAC filtering configuration parameters per port in Tstorm
  1761. */
  1762. struct tstorm_eth_mac_filter_config {
  1763. u32 ucast_drop_all;
  1764. u32 ucast_accept_all;
  1765. u32 mcast_drop_all;
  1766. u32 mcast_accept_all;
  1767. u32 bcast_drop_all;
  1768. u32 bcast_accept_all;
  1769. u32 strict_vlan;
  1770. u32 __secondary_vlan_clients;
  1771. };
  1772. struct rate_shaping_per_protocol {
  1773. #if defined(__BIG_ENDIAN)
  1774. u16 reserved0;
  1775. u16 protocol_rate;
  1776. #elif defined(__LITTLE_ENDIAN)
  1777. u16 protocol_rate;
  1778. u16 reserved0;
  1779. #endif
  1780. u32 protocol_quota;
  1781. s32 current_credit;
  1782. u32 reserved;
  1783. };
  1784. struct rate_shaping_vars {
  1785. struct rate_shaping_per_protocol protocol_vars[NUM_OF_PROTOCOLS];
  1786. u32 pause_mask;
  1787. u32 periodic_stop;
  1788. u32 rs_periodic_timeout;
  1789. u32 rs_threshold;
  1790. u32 last_periodic_time;
  1791. u32 reserved;
  1792. };
  1793. struct fairness_per_protocol {
  1794. u32 credit_delta;
  1795. s32 fair_credit;
  1796. #if defined(__BIG_ENDIAN)
  1797. u16 reserved0;
  1798. u8 state;
  1799. u8 weight;
  1800. #elif defined(__LITTLE_ENDIAN)
  1801. u8 weight;
  1802. u8 state;
  1803. u16 reserved0;
  1804. #endif
  1805. u32 reserved1;
  1806. };
  1807. struct fairness_vars {
  1808. struct fairness_per_protocol protocol_vars[NUM_OF_PROTOCOLS];
  1809. u32 upper_bound;
  1810. u32 port_rate;
  1811. u32 pause_mask;
  1812. u32 fair_threshold;
  1813. };
  1814. struct safc_struct {
  1815. u32 cur_pause_mask;
  1816. u32 expire_time;
  1817. #if defined(__BIG_ENDIAN)
  1818. u16 reserved0;
  1819. u8 cur_cos_types;
  1820. u8 safc_timeout_usec;
  1821. #elif defined(__LITTLE_ENDIAN)
  1822. u8 safc_timeout_usec;
  1823. u8 cur_cos_types;
  1824. u16 reserved0;
  1825. #endif
  1826. u32 reserved1;
  1827. };
  1828. struct demo_struct {
  1829. u8 con_number[NUM_OF_PROTOCOLS];
  1830. #if defined(__BIG_ENDIAN)
  1831. u8 reserved1;
  1832. u8 fairness_enable;
  1833. u8 rate_shaping_enable;
  1834. u8 cmng_enable;
  1835. #elif defined(__LITTLE_ENDIAN)
  1836. u8 cmng_enable;
  1837. u8 rate_shaping_enable;
  1838. u8 fairness_enable;
  1839. u8 reserved1;
  1840. #endif
  1841. };
  1842. struct cmng_struct {
  1843. struct rate_shaping_vars rs_vars;
  1844. struct fairness_vars fair_vars;
  1845. struct safc_struct safc_vars;
  1846. struct demo_struct demo_vars;
  1847. };
  1848. struct cos_to_protocol {
  1849. u8 mask[MAX_COS_NUMBER];
  1850. };
  1851. /*
  1852. * Common statistics collected by the Xstorm (per port)
  1853. */
  1854. struct xstorm_common_stats {
  1855. struct regpair total_sent_bytes;
  1856. u32 total_sent_pkts;
  1857. u32 unicast_pkts_sent;
  1858. struct regpair unicast_bytes_sent;
  1859. struct regpair multicast_bytes_sent;
  1860. u32 multicast_pkts_sent;
  1861. u32 broadcast_pkts_sent;
  1862. struct regpair broadcast_bytes_sent;
  1863. struct regpair done;
  1864. };
  1865. /*
  1866. * Protocol-common statistics collected by the Tstorm (per client)
  1867. */
  1868. struct tstorm_per_client_stats {
  1869. struct regpair total_rcv_bytes;
  1870. struct regpair rcv_unicast_bytes;
  1871. struct regpair rcv_broadcast_bytes;
  1872. struct regpair rcv_multicast_bytes;
  1873. struct regpair rcv_error_bytes;
  1874. u32 checksum_discard;
  1875. u32 packets_too_big_discard;
  1876. u32 total_rcv_pkts;
  1877. u32 rcv_unicast_pkts;
  1878. u32 rcv_broadcast_pkts;
  1879. u32 rcv_multicast_pkts;
  1880. u32 no_buff_discard;
  1881. u32 ttl0_discard;
  1882. u32 mac_discard;
  1883. u32 reserved;
  1884. };
  1885. /*
  1886. * Protocol-common statistics collected by the Tstorm (per port)
  1887. */
  1888. struct tstorm_common_stats {
  1889. struct tstorm_per_client_stats client_statistics[MAX_T_STAT_COUNTER_ID];
  1890. u32 mac_filter_discard;
  1891. u32 xxoverflow_discard;
  1892. u32 brb_truncate_discard;
  1893. u32 reserved;
  1894. struct regpair done;
  1895. };
  1896. /*
  1897. * Eth statistics query sturcture for the eth_stats_quesry ramrod
  1898. */
  1899. struct eth_stats_query {
  1900. struct xstorm_common_stats xstorm_common;
  1901. struct tstorm_common_stats tstorm_common;
  1902. };
  1903. /*
  1904. * FW version stored in the Xstorm RAM
  1905. */
  1906. struct fw_version {
  1907. #if defined(__BIG_ENDIAN)
  1908. u16 patch;
  1909. u8 primary;
  1910. u8 client;
  1911. #elif defined(__LITTLE_ENDIAN)
  1912. u8 client;
  1913. u8 primary;
  1914. u16 patch;
  1915. #endif
  1916. u32 flags;
  1917. #define FW_VERSION_OPTIMIZED (0x1<<0)
  1918. #define FW_VERSION_OPTIMIZED_SHIFT 0
  1919. #define FW_VERSION_BIG_ENDIEN (0x1<<1)
  1920. #define FW_VERSION_BIG_ENDIEN_SHIFT 1
  1921. #define __FW_VERSION_RESERVED (0x3FFFFFFF<<2)
  1922. #define __FW_VERSION_RESERVED_SHIFT 2
  1923. };
  1924. /*
  1925. * FW version stored in first line of pram
  1926. */
  1927. struct pram_fw_version {
  1928. #if defined(__BIG_ENDIAN)
  1929. u16 patch;
  1930. u8 primary;
  1931. u8 client;
  1932. #elif defined(__LITTLE_ENDIAN)
  1933. u8 client;
  1934. u8 primary;
  1935. u16 patch;
  1936. #endif
  1937. u8 flags;
  1938. #define PRAM_FW_VERSION_OPTIMIZED (0x1<<0)
  1939. #define PRAM_FW_VERSION_OPTIMIZED_SHIFT 0
  1940. #define PRAM_FW_VERSION_STORM_ID (0x3<<1)
  1941. #define PRAM_FW_VERSION_STORM_ID_SHIFT 1
  1942. #define PRAM_FW_VERSION_BIG_ENDIEN (0x1<<3)
  1943. #define PRAM_FW_VERSION_BIG_ENDIEN_SHIFT 3
  1944. #define __PRAM_FW_VERSION_RESERVED0 (0xF<<4)
  1945. #define __PRAM_FW_VERSION_RESERVED0_SHIFT 4
  1946. };
  1947. /*
  1948. * The send queue element
  1949. */
  1950. struct slow_path_element {
  1951. struct spe_hdr hdr;
  1952. u8 protocol_data[8];
  1953. };
  1954. /*
  1955. * eth/toe flags that indicate if to query
  1956. */
  1957. struct stats_indication_flags {
  1958. u32 collect_eth;
  1959. u32 collect_toe;
  1960. };