You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mc_driver_pcol.h 96KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281
  1. /****************************************************************************
  2. * Driver for Solarflare network controllers and boards
  3. * Copyright 2012-2017 Solarflare Communications Inc.
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of the
  8. * License, or any later version.
  9. *
  10. * You can also choose to distribute this program under the terms of
  11. * the Unmodified Binary Distribution Licence (as given in the file
  12. * COPYING.UBDL), provided that you have satisfied its requirements.
  13. */
  14. #ifndef SFC_MCDI_PCOL_H
  15. #define SFC_MCDI_PCOL_H
  16. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  17. /** \file mc_driver_pcol.h
  18. * This file is a subset of the MCDI headers generated from the yml files.
  19. */
  20. /* The current version of the MCDI protocol.
  21. *
  22. * Note that the ROM burnt into the card only talks V0, so at the very
  23. * least every driver must support version 0 and MCDI_PCOL_VERSION
  24. */
  25. #ifdef WITH_MCDI_V2
  26. #define MCDI_PCOL_VERSION 2
  27. #else
  28. #define MCDI_PCOL_VERSION 1
  29. #endif
  30. /* Unused commands: 0x23, 0x27, 0x30, 0x31 */
  31. /* MCDI version 1
  32. *
  33. * Each MCDI request starts with an MCDI_HEADER, which is a 32bit
  34. * structure, filled in by the client.
  35. *
  36. * 0 7 8 16 20 22 23 24 31
  37. * | CODE | R | LEN | SEQ | Rsvd | E | R | XFLAGS |
  38. * | | |
  39. * | | \--- Response
  40. * | \------- Error
  41. * \------------------------------ Resync (always set)
  42. *
  43. * The client writes it's request into MC shared memory, and rings the
  44. * doorbell. Each request is completed by either by the MC writing
  45. * back into shared memory, or by writing out an event.
  46. *
  47. * All MCDI commands support completion by shared memory response. Each
  48. * request may also contain additional data (accounted for by HEADER.LEN),
  49. * and some response's may also contain additional data (again, accounted
  50. * for by HEADER.LEN).
  51. *
  52. * Some MCDI commands support completion by event, in which any associated
  53. * response data is included in the event.
  54. *
  55. * The protocol requires one response to be delivered for every request, a
  56. * request should not be sent unless the response for the previous request
  57. * has been received (either by polling shared memory, or by receiving
  58. * an event).
  59. */
  60. /** Request/Response structure */
  61. #define MCDI_HEADER_OFST 0
  62. #define MCDI_HEADER_CODE_LBN 0
  63. #define MCDI_HEADER_CODE_WIDTH 7
  64. #define MCDI_HEADER_RESYNC_LBN 7
  65. #define MCDI_HEADER_RESYNC_WIDTH 1
  66. #define MCDI_HEADER_DATALEN_LBN 8
  67. #define MCDI_HEADER_DATALEN_WIDTH 8
  68. #define MCDI_HEADER_SEQ_LBN 16
  69. #define MCDI_HEADER_SEQ_WIDTH 4
  70. #define MCDI_HEADER_RSVD_LBN 20
  71. #define MCDI_HEADER_RSVD_WIDTH 1
  72. #define MCDI_HEADER_NOT_EPOCH_LBN 21
  73. #define MCDI_HEADER_NOT_EPOCH_WIDTH 1
  74. #define MCDI_HEADER_ERROR_LBN 22
  75. #define MCDI_HEADER_ERROR_WIDTH 1
  76. #define MCDI_HEADER_RESPONSE_LBN 23
  77. #define MCDI_HEADER_RESPONSE_WIDTH 1
  78. #define MCDI_HEADER_XFLAGS_LBN 24
  79. #define MCDI_HEADER_XFLAGS_WIDTH 8
  80. /* Request response using event */
  81. #define MCDI_HEADER_XFLAGS_EVREQ 0x01
  82. /* Request (and signal) early doorbell return */
  83. #define MCDI_HEADER_XFLAGS_DBRET 0x02
  84. /* Maximum number of payload bytes */
  85. #define MCDI_CTL_SDU_LEN_MAX_V1 0xfc
  86. #define MCDI_CTL_SDU_LEN_MAX_V2 0x400
  87. #ifdef WITH_MCDI_V2
  88. #define MCDI_CTL_SDU_LEN_MAX MCDI_CTL_SDU_LEN_MAX_V2
  89. #else
  90. #define MCDI_CTL_SDU_LEN_MAX MCDI_CTL_SDU_LEN_MAX_V1
  91. #endif
  92. /* The MC can generate events for two reasons:
  93. * - To advance a shared memory request if XFLAGS_EVREQ was set
  94. * - As a notification (link state, i2c event), controlled
  95. * via MC_CMD_LOG_CTRL
  96. *
  97. * Both events share a common structure:
  98. *
  99. * 0 32 33 36 44 52 60
  100. * | Data | Cont | Level | Src | Code | Rsvd |
  101. * |
  102. * \ There is another event pending in this notification
  103. *
  104. * If Code==CMDDONE, then the fields are further interpreted as:
  105. *
  106. * - LEVEL==INFO Command succeeded
  107. * - LEVEL==ERR Command failed
  108. *
  109. * 0 8 16 24 32
  110. * | Seq | Datalen | Errno | Rsvd |
  111. *
  112. * These fields are taken directly out of the standard MCDI header, i.e.,
  113. * LEVEL==ERR, Datalen == 0 => Reboot
  114. *
  115. * Events can be squirted out of the UART (using LOG_CTRL) without a
  116. * MCDI header. An event can be distinguished from a MCDI response by
  117. * examining the first byte which is 0xc0. This corresponds to the
  118. * non-existent MCDI command MC_CMD_DEBUG_LOG.
  119. *
  120. * 0 7 8
  121. * | command | Resync | = 0xc0
  122. *
  123. * Since the event is written in big-endian byte order, this works
  124. * providing bits 56-63 of the event are 0xc0.
  125. *
  126. * 56 60 63
  127. * | Rsvd | Code | = 0xc0
  128. *
  129. * Which means for convenience the event code is 0xc for all MC
  130. * generated events.
  131. */
  132. #define FSE_AZ_EV_CODE_MCDI_EVRESPONSE 0xc
  133. /* Operation not permitted. */
  134. #define MC_CMD_ERR_EPERM 1
  135. /* Non-existent command target */
  136. #define MC_CMD_ERR_ENOENT 2
  137. /* assert() has killed the MC */
  138. #define MC_CMD_ERR_EINTR 4
  139. /* I/O failure */
  140. #define MC_CMD_ERR_EIO 5
  141. /* Already exists */
  142. #define MC_CMD_ERR_EEXIST 6
  143. /* Try again */
  144. #define MC_CMD_ERR_EAGAIN 11
  145. /* Out of memory */
  146. #define MC_CMD_ERR_ENOMEM 12
  147. /* Caller does not hold required locks */
  148. #define MC_CMD_ERR_EACCES 13
  149. /* Resource is currently unavailable (e.g. lock contention) */
  150. #define MC_CMD_ERR_EBUSY 16
  151. /* No such device */
  152. #define MC_CMD_ERR_ENODEV 19
  153. /* Invalid argument to target */
  154. #define MC_CMD_ERR_EINVAL 22
  155. /* Broken pipe */
  156. #define MC_CMD_ERR_EPIPE 32
  157. /* Read-only */
  158. #define MC_CMD_ERR_EROFS 30
  159. /* Out of range */
  160. #define MC_CMD_ERR_ERANGE 34
  161. /* Non-recursive resource is already acquired */
  162. #define MC_CMD_ERR_EDEADLK 35
  163. /* Operation not implemented */
  164. #define MC_CMD_ERR_ENOSYS 38
  165. /* Operation timed out */
  166. #define MC_CMD_ERR_ETIME 62
  167. /* Link has been severed */
  168. #define MC_CMD_ERR_ENOLINK 67
  169. /* Protocol error */
  170. #define MC_CMD_ERR_EPROTO 71
  171. /* Operation not supported */
  172. #define MC_CMD_ERR_ENOTSUP 95
  173. /* Address not available */
  174. #define MC_CMD_ERR_EADDRNOTAVAIL 99
  175. /* Not connected */
  176. #define MC_CMD_ERR_ENOTCONN 107
  177. /* Operation already in progress */
  178. #define MC_CMD_ERR_EALREADY 114
  179. /* Resource allocation failed. */
  180. #define MC_CMD_ERR_ALLOC_FAIL 0x1000
  181. /* V-adaptor not found. */
  182. #define MC_CMD_ERR_NO_VADAPTOR 0x1001
  183. /* EVB port not found. */
  184. #define MC_CMD_ERR_NO_EVB_PORT 0x1002
  185. /* V-switch not found. */
  186. #define MC_CMD_ERR_NO_VSWITCH 0x1003
  187. /* Too many VLAN tags. */
  188. #define MC_CMD_ERR_VLAN_LIMIT 0x1004
  189. /* Bad PCI function number. */
  190. #define MC_CMD_ERR_BAD_PCI_FUNC 0x1005
  191. /* Invalid VLAN mode. */
  192. #define MC_CMD_ERR_BAD_VLAN_MODE 0x1006
  193. /* Invalid v-switch type. */
  194. #define MC_CMD_ERR_BAD_VSWITCH_TYPE 0x1007
  195. /* Invalid v-port type. */
  196. #define MC_CMD_ERR_BAD_VPORT_TYPE 0x1008
  197. /* MAC address exists. */
  198. #define MC_CMD_ERR_MAC_EXIST 0x1009
  199. /* Slave core not present */
  200. #define MC_CMD_ERR_SLAVE_NOT_PRESENT 0x100a
  201. /* The datapath is disabled. */
  202. #define MC_CMD_ERR_DATAPATH_DISABLED 0x100b
  203. /* The requesting client is not a function */
  204. #define MC_CMD_ERR_CLIENT_NOT_FN 0x100c
  205. /* The requested operation might require the
  206. * command to be passed between MCs, and the
  207. * transport doesn't support that. Should
  208. * only ever been seen over the UART.
  209. */
  210. #define MC_CMD_ERR_TRANSPORT_NOPROXY 0x100d
  211. /* VLAN tag(s) exists */
  212. #define MC_CMD_ERR_VLAN_EXIST 0x100e
  213. /* No MAC address assigned to an EVB port */
  214. #define MC_CMD_ERR_NO_MAC_ADDR 0x100f
  215. /* Notifies the driver that the request has been relayed
  216. * to an admin function for authorization. The driver should
  217. * wait for a PROXY_RESPONSE event and then resend its request.
  218. * This error code is followed by a 32-bit handle that
  219. * helps matching it with the respective PROXY_RESPONSE event.
  220. */
  221. #define MC_CMD_ERR_PROXY_PENDING 0x1010
  222. #define MC_CMD_ERR_PROXY_PENDING_HANDLE_OFST 4
  223. /* The request cannot be passed for authorization because
  224. * another request from the same function is currently being
  225. * authorized. The drvier should try again later.
  226. */
  227. #define MC_CMD_ERR_PROXY_INPROGRESS 0x1011
  228. /* Returned by MC_CMD_PROXY_COMPLETE if the caller is not the function
  229. * that has enabled proxying or BLOCK_INDEX points to a function that
  230. * doesn't await an authorization.
  231. */
  232. #define MC_CMD_ERR_PROXY_UNEXPECTED 0x1012
  233. /* This code is currently only used internally in FW. Its meaning is that
  234. * an operation failed due to lack of SR-IOV privilege.
  235. * Normally it is translated to EPERM by send_cmd_err(),
  236. * but it may also be used to trigger some special mechanism
  237. * for handling such case, e.g. to relay the failed request
  238. * to a designated admin function for authorization.
  239. */
  240. #define MC_CMD_ERR_NO_PRIVILEGE 0x1013
  241. /* Workaround 26807 could not be turned on/off because some functions
  242. * have already installed filters. See the comment at
  243. * MC_CMD_WORKAROUND_BUG26807.
  244. */
  245. #define MC_CMD_ERR_FILTERS_PRESENT 0x1014
  246. /* The clock whose frequency you've attempted to set set
  247. * doesn't exist on this NIC
  248. */
  249. #define MC_CMD_ERR_NO_CLOCK 0x1015
  250. /* Returned by MC_CMD_TESTASSERT if the action that should
  251. * have caused an assertion failed to do so.
  252. */
  253. #define MC_CMD_ERR_UNREACHABLE 0x1016
  254. /* This command needs to be processed in the background but there were no
  255. * resources to do so. Send it again after a command has completed.
  256. */
  257. #define MC_CMD_ERR_QUEUE_FULL 0x1017
  258. #define MC_CMD_ERR_CODE_OFST 0
  259. #ifdef WITH_MCDI_V2
  260. /* Version 2 adds an optional argument to error returns: the errno value
  261. * may be followed by the (0-based) number of the first argument that
  262. * could not be processed.
  263. */
  264. #define MC_CMD_ERR_ARG_OFST 4
  265. /* No space */
  266. #define MC_CMD_ERR_ENOSPC 28
  267. #endif
  268. /* MCDI_EVENT structuredef */
  269. #define MCDI_EVENT_LEN 8
  270. #define MCDI_EVENT_CONT_LBN 32
  271. #define MCDI_EVENT_CONT_WIDTH 1
  272. #define MCDI_EVENT_LEVEL_LBN 33
  273. #define MCDI_EVENT_LEVEL_WIDTH 3
  274. /* enum: Info. */
  275. #define MCDI_EVENT_LEVEL_INFO 0x0
  276. /* enum: Warning. */
  277. #define MCDI_EVENT_LEVEL_WARN 0x1
  278. /* enum: Error. */
  279. #define MCDI_EVENT_LEVEL_ERR 0x2
  280. /* enum: Fatal. */
  281. #define MCDI_EVENT_LEVEL_FATAL 0x3
  282. #define MCDI_EVENT_DATA_OFST 0
  283. #define MCDI_EVENT_CMDDONE_SEQ_LBN 0
  284. #define MCDI_EVENT_CMDDONE_SEQ_WIDTH 8
  285. #define MCDI_EVENT_CMDDONE_DATALEN_LBN 8
  286. #define MCDI_EVENT_CMDDONE_DATALEN_WIDTH 8
  287. #define MCDI_EVENT_CMDDONE_ERRNO_LBN 16
  288. #define MCDI_EVENT_CMDDONE_ERRNO_WIDTH 8
  289. #define MCDI_EVENT_LINKCHANGE_LP_CAP_LBN 0
  290. #define MCDI_EVENT_LINKCHANGE_LP_CAP_WIDTH 16
  291. #define MCDI_EVENT_LINKCHANGE_SPEED_LBN 16
  292. #define MCDI_EVENT_LINKCHANGE_SPEED_WIDTH 4
  293. /* enum: 100Mbs */
  294. #define MCDI_EVENT_LINKCHANGE_SPEED_100M 0x1
  295. /* enum: 1Gbs */
  296. #define MCDI_EVENT_LINKCHANGE_SPEED_1G 0x2
  297. /* enum: 10Gbs */
  298. #define MCDI_EVENT_LINKCHANGE_SPEED_10G 0x3
  299. /* enum: 40Gbs */
  300. #define MCDI_EVENT_LINKCHANGE_SPEED_40G 0x4
  301. #define MCDI_EVENT_LINKCHANGE_FCNTL_LBN 20
  302. #define MCDI_EVENT_LINKCHANGE_FCNTL_WIDTH 4
  303. #define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_LBN 24
  304. #define MCDI_EVENT_LINKCHANGE_LINK_FLAGS_WIDTH 8
  305. #define MCDI_EVENT_SENSOREVT_MONITOR_LBN 0
  306. #define MCDI_EVENT_SENSOREVT_MONITOR_WIDTH 8
  307. #define MCDI_EVENT_SENSOREVT_STATE_LBN 8
  308. #define MCDI_EVENT_SENSOREVT_STATE_WIDTH 8
  309. #define MCDI_EVENT_SENSOREVT_VALUE_LBN 16
  310. #define MCDI_EVENT_SENSOREVT_VALUE_WIDTH 16
  311. #define MCDI_EVENT_FWALERT_DATA_LBN 8
  312. #define MCDI_EVENT_FWALERT_DATA_WIDTH 24
  313. #define MCDI_EVENT_FWALERT_REASON_LBN 0
  314. #define MCDI_EVENT_FWALERT_REASON_WIDTH 8
  315. /* enum: SRAM Access. */
  316. #define MCDI_EVENT_FWALERT_REASON_SRAM_ACCESS 0x1
  317. #define MCDI_EVENT_FLR_VF_LBN 0
  318. #define MCDI_EVENT_FLR_VF_WIDTH 8
  319. #define MCDI_EVENT_TX_ERR_TXQ_LBN 0
  320. #define MCDI_EVENT_TX_ERR_TXQ_WIDTH 12
  321. #define MCDI_EVENT_TX_ERR_TYPE_LBN 12
  322. #define MCDI_EVENT_TX_ERR_TYPE_WIDTH 4
  323. /* enum: Descriptor loader reported failure */
  324. #define MCDI_EVENT_TX_ERR_DL_FAIL 0x1
  325. /* enum: Descriptor ring empty and no EOP seen for packet */
  326. #define MCDI_EVENT_TX_ERR_NO_EOP 0x2
  327. /* enum: Overlength packet */
  328. #define MCDI_EVENT_TX_ERR_2BIG 0x3
  329. /* enum: Malformed option descriptor */
  330. #define MCDI_EVENT_TX_BAD_OPTDESC 0x5
  331. /* enum: Option descriptor part way through a packet */
  332. #define MCDI_EVENT_TX_OPT_IN_PKT 0x8
  333. /* enum: DMA or PIO data access error */
  334. #define MCDI_EVENT_TX_ERR_BAD_DMA_OR_PIO 0x9
  335. #define MCDI_EVENT_TX_ERR_INFO_LBN 16
  336. #define MCDI_EVENT_TX_ERR_INFO_WIDTH 16
  337. #define MCDI_EVENT_TX_FLUSH_TO_DRIVER_LBN 12
  338. #define MCDI_EVENT_TX_FLUSH_TO_DRIVER_WIDTH 1
  339. #define MCDI_EVENT_TX_FLUSH_TXQ_LBN 0
  340. #define MCDI_EVENT_TX_FLUSH_TXQ_WIDTH 12
  341. #define MCDI_EVENT_PTP_ERR_TYPE_LBN 0
  342. #define MCDI_EVENT_PTP_ERR_TYPE_WIDTH 8
  343. /* enum: PLL lost lock */
  344. #define MCDI_EVENT_PTP_ERR_PLL_LOST 0x1
  345. /* enum: Filter overflow (PDMA) */
  346. #define MCDI_EVENT_PTP_ERR_FILTER 0x2
  347. /* enum: FIFO overflow (FPGA) */
  348. #define MCDI_EVENT_PTP_ERR_FIFO 0x3
  349. /* enum: Merge queue overflow */
  350. #define MCDI_EVENT_PTP_ERR_QUEUE 0x4
  351. #define MCDI_EVENT_AOE_ERR_TYPE_LBN 0
  352. #define MCDI_EVENT_AOE_ERR_TYPE_WIDTH 8
  353. /* enum: AOE failed to load - no valid image? */
  354. #define MCDI_EVENT_AOE_NO_LOAD 0x1
  355. /* enum: AOE FC reported an exception */
  356. #define MCDI_EVENT_AOE_FC_ASSERT 0x2
  357. /* enum: AOE FC watchdogged */
  358. #define MCDI_EVENT_AOE_FC_WATCHDOG 0x3
  359. /* enum: AOE FC failed to start */
  360. #define MCDI_EVENT_AOE_FC_NO_START 0x4
  361. /* enum: Generic AOE fault - likely to have been reported via other means too
  362. * but intended for use by aoex driver.
  363. */
  364. #define MCDI_EVENT_AOE_FAULT 0x5
  365. /* enum: Results of reprogramming the CPLD (status in AOE_ERR_DATA) */
  366. #define MCDI_EVENT_AOE_CPLD_REPROGRAMMED 0x6
  367. /* enum: AOE loaded successfully */
  368. #define MCDI_EVENT_AOE_LOAD 0x7
  369. /* enum: AOE DMA operation completed (LSB of HOST_HANDLE in AOE_ERR_DATA) */
  370. #define MCDI_EVENT_AOE_DMA 0x8
  371. /* enum: AOE byteblaster connected/disconnected (Connection status in
  372. * AOE_ERR_DATA)
  373. */
  374. #define MCDI_EVENT_AOE_BYTEBLASTER 0x9
  375. /* enum: DDR ECC status update */
  376. #define MCDI_EVENT_AOE_DDR_ECC_STATUS 0xa
  377. /* enum: PTP status update */
  378. #define MCDI_EVENT_AOE_PTP_STATUS 0xb
  379. /* enum: FPGA header incorrect */
  380. #define MCDI_EVENT_AOE_FPGA_LOAD_HEADER_ERR 0xc
  381. /* enum: FPGA Powered Off due to error in powering up FPGA */
  382. #define MCDI_EVENT_AOE_FPGA_POWER_OFF 0xd
  383. /* enum: AOE FPGA load failed due to MC to MUM communication failure */
  384. #define MCDI_EVENT_AOE_FPGA_LOAD_FAILED 0xe
  385. /* enum: Notify that invalid flash type detected */
  386. #define MCDI_EVENT_AOE_INVALID_FPGA_FLASH_TYPE 0xf
  387. /* enum: Notify that the attempt to run FPGA Controller firmware timedout */
  388. #define MCDI_EVENT_AOE_FC_RUN_TIMEDOUT 0x10
  389. /* enum: Failure to probe one or more FPGA boot flash chips */
  390. #define MCDI_EVENT_AOE_FPGA_BOOT_FLASH_INVALID 0x11
  391. /* enum: FPGA boot-flash contains an invalid image header */
  392. #define MCDI_EVENT_AOE_FPGA_BOOT_FLASH_HDR_INVALID 0x12
  393. /* enum: Failed to program clocks required by the FPGA */
  394. #define MCDI_EVENT_AOE_FPGA_CLOCKS_PROGRAM_FAILED 0x13
  395. /* enum: Notify that FPGA Controller is alive to serve MCDI requests */
  396. #define MCDI_EVENT_AOE_FC_RUNNING 0x14
  397. #define MCDI_EVENT_AOE_ERR_DATA_LBN 8
  398. #define MCDI_EVENT_AOE_ERR_DATA_WIDTH 8
  399. #define MCDI_EVENT_AOE_ERR_FC_ASSERT_INFO_LBN 8
  400. #define MCDI_EVENT_AOE_ERR_FC_ASSERT_INFO_WIDTH 8
  401. /* enum: FC Assert happened, but the register information is not available */
  402. #define MCDI_EVENT_AOE_ERR_FC_ASSERT_SEEN 0x0
  403. /* enum: The register information for FC Assert is ready for readinng by driver
  404. */
  405. #define MCDI_EVENT_AOE_ERR_FC_ASSERT_DATA_READY 0x1
  406. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_HEADER_VERIFY_FAILED_LBN 8
  407. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_HEADER_VERIFY_FAILED_WIDTH 8
  408. /* enum: Reading from NV failed */
  409. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_NV_READ_FAIL 0x0
  410. /* enum: Invalid Magic Number if FPGA header */
  411. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_MAGIC_FAIL 0x1
  412. /* enum: Invalid Silicon type detected in header */
  413. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_SILICON_TYPE 0x2
  414. /* enum: Unsupported VRatio */
  415. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_VRATIO 0x3
  416. /* enum: Unsupported DDR Type */
  417. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_TYPE 0x4
  418. /* enum: DDR Voltage out of supported range */
  419. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_VOLTAGE 0x5
  420. /* enum: Unsupported DDR speed */
  421. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_SPEED 0x6
  422. /* enum: Unsupported DDR size */
  423. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_SIZE 0x7
  424. /* enum: Unsupported DDR rank */
  425. #define MCDI_EVENT_AOE_ERR_FPGA_HEADER_DDR_RANK 0x8
  426. #define MCDI_EVENT_AOE_ERR_CODE_INVALID_FPGA_FLASH_TYPE_INFO_LBN 8
  427. #define MCDI_EVENT_AOE_ERR_CODE_INVALID_FPGA_FLASH_TYPE_INFO_WIDTH 8
  428. /* enum: Primary boot flash */
  429. #define MCDI_EVENT_AOE_FLASH_TYPE_BOOT_PRIMARY 0x0
  430. /* enum: Secondary boot flash */
  431. #define MCDI_EVENT_AOE_FLASH_TYPE_BOOT_SECONDARY 0x1
  432. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_POWER_OFF_LBN 8
  433. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_POWER_OFF_WIDTH 8
  434. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_LOAD_FAILED_LBN 8
  435. #define MCDI_EVENT_AOE_ERR_CODE_FPGA_LOAD_FAILED_WIDTH 8
  436. #define MCDI_EVENT_RX_ERR_RXQ_LBN 0
  437. #define MCDI_EVENT_RX_ERR_RXQ_WIDTH 12
  438. #define MCDI_EVENT_RX_ERR_TYPE_LBN 12
  439. #define MCDI_EVENT_RX_ERR_TYPE_WIDTH 4
  440. #define MCDI_EVENT_RX_ERR_INFO_LBN 16
  441. #define MCDI_EVENT_RX_ERR_INFO_WIDTH 16
  442. #define MCDI_EVENT_RX_FLUSH_TO_DRIVER_LBN 12
  443. #define MCDI_EVENT_RX_FLUSH_TO_DRIVER_WIDTH 1
  444. #define MCDI_EVENT_RX_FLUSH_RXQ_LBN 0
  445. #define MCDI_EVENT_RX_FLUSH_RXQ_WIDTH 12
  446. #define MCDI_EVENT_MC_REBOOT_COUNT_LBN 0
  447. #define MCDI_EVENT_MC_REBOOT_COUNT_WIDTH 16
  448. #define MCDI_EVENT_MUM_ERR_TYPE_LBN 0
  449. #define MCDI_EVENT_MUM_ERR_TYPE_WIDTH 8
  450. /* enum: MUM failed to load - no valid image? */
  451. #define MCDI_EVENT_MUM_NO_LOAD 0x1
  452. /* enum: MUM f/w reported an exception */
  453. #define MCDI_EVENT_MUM_ASSERT 0x2
  454. /* enum: MUM not kicking watchdog */
  455. #define MCDI_EVENT_MUM_WATCHDOG 0x3
  456. #define MCDI_EVENT_MUM_ERR_DATA_LBN 8
  457. #define MCDI_EVENT_MUM_ERR_DATA_WIDTH 8
  458. #define MCDI_EVENT_DATA_LBN 0
  459. #define MCDI_EVENT_DATA_WIDTH 32
  460. #define MCDI_EVENT_SRC_LBN 36
  461. #define MCDI_EVENT_SRC_WIDTH 8
  462. #define MCDI_EVENT_EV_CODE_LBN 60
  463. #define MCDI_EVENT_EV_CODE_WIDTH 4
  464. #define MCDI_EVENT_CODE_LBN 44
  465. #define MCDI_EVENT_CODE_WIDTH 8
  466. /* enum: Event generated by host software */
  467. #define MCDI_EVENT_SW_EVENT 0x0
  468. /* enum: Bad assert. */
  469. #define MCDI_EVENT_CODE_BADSSERT 0x1
  470. /* enum: PM Notice. */
  471. #define MCDI_EVENT_CODE_PMNOTICE 0x2
  472. /* enum: Command done. */
  473. #define MCDI_EVENT_CODE_CMDDONE 0x3
  474. /* enum: Link change. */
  475. #define MCDI_EVENT_CODE_LINKCHANGE 0x4
  476. /* enum: Sensor Event. */
  477. #define MCDI_EVENT_CODE_SENSOREVT 0x5
  478. /* enum: Schedule error. */
  479. #define MCDI_EVENT_CODE_SCHEDERR 0x6
  480. /* enum: Reboot. */
  481. #define MCDI_EVENT_CODE_REBOOT 0x7
  482. /* enum: Mac stats DMA. */
  483. #define MCDI_EVENT_CODE_MAC_STATS_DMA 0x8
  484. /* enum: Firmware alert. */
  485. #define MCDI_EVENT_CODE_FWALERT 0x9
  486. /* enum: Function level reset. */
  487. #define MCDI_EVENT_CODE_FLR 0xa
  488. /* enum: Transmit error */
  489. #define MCDI_EVENT_CODE_TX_ERR 0xb
  490. /* enum: Tx flush has completed */
  491. #define MCDI_EVENT_CODE_TX_FLUSH 0xc
  492. /* enum: PTP packet received timestamp */
  493. #define MCDI_EVENT_CODE_PTP_RX 0xd
  494. /* enum: PTP NIC failure */
  495. #define MCDI_EVENT_CODE_PTP_FAULT 0xe
  496. /* enum: PTP PPS event */
  497. #define MCDI_EVENT_CODE_PTP_PPS 0xf
  498. /* enum: Rx flush has completed */
  499. #define MCDI_EVENT_CODE_RX_FLUSH 0x10
  500. /* enum: Receive error */
  501. #define MCDI_EVENT_CODE_RX_ERR 0x11
  502. /* enum: AOE fault */
  503. #define MCDI_EVENT_CODE_AOE 0x12
  504. /* enum: Network port calibration failed (VCAL). */
  505. #define MCDI_EVENT_CODE_VCAL_FAIL 0x13
  506. /* enum: HW PPS event */
  507. #define MCDI_EVENT_CODE_HW_PPS 0x14
  508. /* enum: The MC has rebooted (huntington and later, siena uses CODE_REBOOT and
  509. * a different format)
  510. */
  511. #define MCDI_EVENT_CODE_MC_REBOOT 0x15
  512. /* enum: the MC has detected a parity error */
  513. #define MCDI_EVENT_CODE_PAR_ERR 0x16
  514. /* enum: the MC has detected a correctable error */
  515. #define MCDI_EVENT_CODE_ECC_CORR_ERR 0x17
  516. /* enum: the MC has detected an uncorrectable error */
  517. #define MCDI_EVENT_CODE_ECC_FATAL_ERR 0x18
  518. /* enum: The MC has entered offline BIST mode */
  519. #define MCDI_EVENT_CODE_MC_BIST 0x19
  520. /* enum: PTP tick event providing current NIC time */
  521. #define MCDI_EVENT_CODE_PTP_TIME 0x1a
  522. /* enum: MUM fault */
  523. #define MCDI_EVENT_CODE_MUM 0x1b
  524. /* enum: notify the designated PF of a new authorization request */
  525. #define MCDI_EVENT_CODE_PROXY_REQUEST 0x1c
  526. /* enum: notify a function that awaits an authorization that its request has
  527. * been processed and it may now resend the command
  528. */
  529. #define MCDI_EVENT_CODE_PROXY_RESPONSE 0x1d
  530. /* enum: Artificial event generated by host and posted via MC for test
  531. * purposes.
  532. */
  533. #define MCDI_EVENT_CODE_TESTGEN 0xfa
  534. #define MCDI_EVENT_CMDDONE_DATA_OFST 0
  535. #define MCDI_EVENT_CMDDONE_DATA_LBN 0
  536. #define MCDI_EVENT_CMDDONE_DATA_WIDTH 32
  537. #define MCDI_EVENT_LINKCHANGE_DATA_OFST 0
  538. #define MCDI_EVENT_LINKCHANGE_DATA_LBN 0
  539. #define MCDI_EVENT_LINKCHANGE_DATA_WIDTH 32
  540. #define MCDI_EVENT_SENSOREVT_DATA_OFST 0
  541. #define MCDI_EVENT_SENSOREVT_DATA_LBN 0
  542. #define MCDI_EVENT_SENSOREVT_DATA_WIDTH 32
  543. #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_OFST 0
  544. #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_LBN 0
  545. #define MCDI_EVENT_MAC_STATS_DMA_GENERATION_WIDTH 32
  546. #define MCDI_EVENT_TX_ERR_DATA_OFST 0
  547. #define MCDI_EVENT_TX_ERR_DATA_LBN 0
  548. #define MCDI_EVENT_TX_ERR_DATA_WIDTH 32
  549. /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the seconds field of
  550. * timestamp
  551. */
  552. #define MCDI_EVENT_PTP_SECONDS_OFST 0
  553. #define MCDI_EVENT_PTP_SECONDS_LBN 0
  554. #define MCDI_EVENT_PTP_SECONDS_WIDTH 32
  555. /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the major field of
  556. * timestamp
  557. */
  558. #define MCDI_EVENT_PTP_MAJOR_OFST 0
  559. #define MCDI_EVENT_PTP_MAJOR_LBN 0
  560. #define MCDI_EVENT_PTP_MAJOR_WIDTH 32
  561. /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the nanoseconds field
  562. * of timestamp
  563. */
  564. #define MCDI_EVENT_PTP_NANOSECONDS_OFST 0
  565. #define MCDI_EVENT_PTP_NANOSECONDS_LBN 0
  566. #define MCDI_EVENT_PTP_NANOSECONDS_WIDTH 32
  567. /* For CODE_PTP_RX, CODE_PTP_PPS and CODE_HW_PPS events the minor field of
  568. * timestamp
  569. */
  570. #define MCDI_EVENT_PTP_MINOR_OFST 0
  571. #define MCDI_EVENT_PTP_MINOR_LBN 0
  572. #define MCDI_EVENT_PTP_MINOR_WIDTH 32
  573. /* For CODE_PTP_RX events, the lowest four bytes of sourceUUID from PTP packet
  574. */
  575. #define MCDI_EVENT_PTP_UUID_OFST 0
  576. #define MCDI_EVENT_PTP_UUID_LBN 0
  577. #define MCDI_EVENT_PTP_UUID_WIDTH 32
  578. #define MCDI_EVENT_RX_ERR_DATA_OFST 0
  579. #define MCDI_EVENT_RX_ERR_DATA_LBN 0
  580. #define MCDI_EVENT_RX_ERR_DATA_WIDTH 32
  581. #define MCDI_EVENT_PAR_ERR_DATA_OFST 0
  582. #define MCDI_EVENT_PAR_ERR_DATA_LBN 0
  583. #define MCDI_EVENT_PAR_ERR_DATA_WIDTH 32
  584. #define MCDI_EVENT_ECC_CORR_ERR_DATA_OFST 0
  585. #define MCDI_EVENT_ECC_CORR_ERR_DATA_LBN 0
  586. #define MCDI_EVENT_ECC_CORR_ERR_DATA_WIDTH 32
  587. #define MCDI_EVENT_ECC_FATAL_ERR_DATA_OFST 0
  588. #define MCDI_EVENT_ECC_FATAL_ERR_DATA_LBN 0
  589. #define MCDI_EVENT_ECC_FATAL_ERR_DATA_WIDTH 32
  590. /* For CODE_PTP_TIME events, the major value of the PTP clock */
  591. #define MCDI_EVENT_PTP_TIME_MAJOR_OFST 0
  592. #define MCDI_EVENT_PTP_TIME_MAJOR_LBN 0
  593. #define MCDI_EVENT_PTP_TIME_MAJOR_WIDTH 32
  594. /* For CODE_PTP_TIME events, bits 19-26 of the minor value of the PTP clock */
  595. #define MCDI_EVENT_PTP_TIME_MINOR_26_19_LBN 36
  596. #define MCDI_EVENT_PTP_TIME_MINOR_26_19_WIDTH 8
  597. /* For CODE_PTP_TIME events where report sync status is enabled, indicates
  598. * whether the NIC clock has ever been set
  599. */
  600. #define MCDI_EVENT_PTP_TIME_NIC_CLOCK_VALID_LBN 36
  601. #define MCDI_EVENT_PTP_TIME_NIC_CLOCK_VALID_WIDTH 1
  602. /* For CODE_PTP_TIME events where report sync status is enabled, indicates
  603. * whether the NIC and System clocks are in sync
  604. */
  605. #define MCDI_EVENT_PTP_TIME_HOST_NIC_IN_SYNC_LBN 37
  606. #define MCDI_EVENT_PTP_TIME_HOST_NIC_IN_SYNC_WIDTH 1
  607. /* For CODE_PTP_TIME events where report sync status is enabled, bits 21-26 of
  608. * the minor value of the PTP clock
  609. */
  610. #define MCDI_EVENT_PTP_TIME_MINOR_26_21_LBN 38
  611. #define MCDI_EVENT_PTP_TIME_MINOR_26_21_WIDTH 6
  612. #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_OFST 0
  613. #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_LBN 0
  614. #define MCDI_EVENT_PROXY_REQUEST_BUFF_INDEX_WIDTH 32
  615. #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_OFST 0
  616. #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_LBN 0
  617. #define MCDI_EVENT_PROXY_RESPONSE_HANDLE_WIDTH 32
  618. /* Zero means that the request has been completed or authorized, and the driver
  619. * should resend it. A non-zero value means that the authorization has been
  620. * denied, and gives the reason. Typically it will be EPERM.
  621. */
  622. #define MCDI_EVENT_PROXY_RESPONSE_RC_LBN 36
  623. #define MCDI_EVENT_PROXY_RESPONSE_RC_WIDTH 8
  624. /* EVB_PORT_ID structuredef */
  625. #define EVB_PORT_ID_LEN 4
  626. #define EVB_PORT_ID_PORT_ID_OFST 0
  627. /* enum: An invalid port handle. */
  628. #define EVB_PORT_ID_NULL 0x0
  629. /* enum: The port assigned to this function.. */
  630. #define EVB_PORT_ID_ASSIGNED 0x1000000
  631. /* enum: External network port 0 */
  632. #define EVB_PORT_ID_MAC0 0x2000000
  633. /* enum: External network port 1 */
  634. #define EVB_PORT_ID_MAC1 0x2000001
  635. /* enum: External network port 2 */
  636. #define EVB_PORT_ID_MAC2 0x2000002
  637. /* enum: External network port 3 */
  638. #define EVB_PORT_ID_MAC3 0x2000003
  639. #define EVB_PORT_ID_PORT_ID_LBN 0
  640. #define EVB_PORT_ID_PORT_ID_WIDTH 32
  641. /***********************************/
  642. /* MC_CMD_DRV_ATTACH
  643. * Inform MCPU that this port is managed on the host (i.e. driver active). For
  644. * Huntington, also request the preferred datapath firmware to use if possible
  645. * (it may not be possible for this request to be fulfilled; the driver must
  646. * issue a subsequent MC_CMD_GET_CAPABILITIES command to determine which
  647. * features are actually available). The FIRMWARE_ID field is ignored by older
  648. * platforms.
  649. */
  650. #define MC_CMD_DRV_ATTACH 0x1c
  651. #undef MC_CMD_0x1c_PRIVILEGE_CTG
  652. #define MC_CMD_0x1c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  653. /* MC_CMD_DRV_ATTACH_IN msgrequest */
  654. #define MC_CMD_DRV_ATTACH_IN_LEN 12
  655. /* new state to set if UPDATE=1 */
  656. #define MC_CMD_DRV_ATTACH_IN_NEW_STATE_OFST 0
  657. #define MC_CMD_DRV_ATTACH_LBN 0
  658. #define MC_CMD_DRV_ATTACH_WIDTH 1
  659. #define MC_CMD_DRV_PREBOOT_LBN 1
  660. #define MC_CMD_DRV_PREBOOT_WIDTH 1
  661. /* 1 to set new state, or 0 to just report the existing state */
  662. #define MC_CMD_DRV_ATTACH_IN_UPDATE_OFST 4
  663. /* preferred datapath firmware (for Huntington; ignored for Siena) */
  664. #define MC_CMD_DRV_ATTACH_IN_FIRMWARE_ID_OFST 8
  665. /* enum: Prefer to use full featured firmware */
  666. #define MC_CMD_FW_FULL_FEATURED 0x0
  667. /* enum: Prefer to use firmware with fewer features but lower latency */
  668. #define MC_CMD_FW_LOW_LATENCY 0x1
  669. /* enum: Prefer to use firmware for SolarCapture packed stream mode */
  670. #define MC_CMD_FW_PACKED_STREAM 0x2
  671. /* enum: Prefer to use firmware with fewer features and simpler TX event
  672. * batching but higher TX packet rate
  673. */
  674. #define MC_CMD_FW_HIGH_TX_RATE 0x3
  675. /* enum: Reserved value */
  676. #define MC_CMD_FW_PACKED_STREAM_HASH_MODE_1 0x4
  677. /* enum: Prefer to use firmware with additional "rules engine" filtering
  678. * support
  679. */
  680. #define MC_CMD_FW_RULES_ENGINE 0x5
  681. /* enum: Only this option is allowed for non-admin functions */
  682. #define MC_CMD_FW_DONT_CARE 0xffffffff
  683. /* MC_CMD_DRV_ATTACH_OUT msgresponse */
  684. #define MC_CMD_DRV_ATTACH_OUT_LEN 4
  685. /* previous or existing state, see the bitmask at NEW_STATE */
  686. #define MC_CMD_DRV_ATTACH_OUT_OLD_STATE_OFST 0
  687. /* MC_CMD_DRV_ATTACH_EXT_OUT msgresponse */
  688. #define MC_CMD_DRV_ATTACH_EXT_OUT_LEN 8
  689. /* previous or existing state, see the bitmask at NEW_STATE */
  690. #define MC_CMD_DRV_ATTACH_EXT_OUT_OLD_STATE_OFST 0
  691. /* Flags associated with this function */
  692. #define MC_CMD_DRV_ATTACH_EXT_OUT_FUNC_FLAGS_OFST 4
  693. /* enum: Labels the lowest-numbered function visible to the OS */
  694. #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_PRIMARY 0x0
  695. /* enum: The function can control the link state of the physical port it is
  696. * bound to.
  697. */
  698. #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_LINKCTRL 0x1
  699. /* enum: The function can perform privileged operations */
  700. #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_TRUSTED 0x2
  701. /* enum: The function does not have an active port associated with it. The port
  702. * refers to the Sorrento external FPGA port.
  703. */
  704. #define MC_CMD_DRV_ATTACH_EXT_OUT_FLAG_NO_ACTIVE_PORT 0x3
  705. /***********************************/
  706. /* MC_CMD_ENTITY_RESET
  707. * Generic per-resource reset. There is no equivalent for per-board reset.
  708. * Locks required: None; Return code: 0, ETIME. NOTE: This command is an
  709. * extended version of the deprecated MC_CMD_PORT_RESET with added fields.
  710. */
  711. #define MC_CMD_ENTITY_RESET 0x20
  712. /* MC_CMD_0x20_PRIVILEGE_CTG SRIOV_CTG_GENERAL */
  713. /* MC_CMD_ENTITY_RESET_IN msgrequest */
  714. #define MC_CMD_ENTITY_RESET_IN_LEN 4
  715. /* Optional flags field. Omitting this will perform a "legacy" reset action
  716. * (TBD).
  717. */
  718. #define MC_CMD_ENTITY_RESET_IN_FLAG_OFST 0
  719. #define MC_CMD_ENTITY_RESET_IN_FUNCTION_RESOURCE_RESET_LBN 0
  720. #define MC_CMD_ENTITY_RESET_IN_FUNCTION_RESOURCE_RESET_WIDTH 1
  721. /* MC_CMD_ENTITY_RESET_OUT msgresponse */
  722. #define MC_CMD_ENTITY_RESET_OUT_LEN 0
  723. /***********************************/
  724. /* MC_CMD_GET_PHY_CFG
  725. * Report PHY configuration. This guarantees to succeed even if the PHY is in a
  726. * 'zombie' state. Locks required: None
  727. */
  728. #define MC_CMD_GET_PHY_CFG 0x24
  729. #undef MC_CMD_0x24_PRIVILEGE_CTG
  730. #define MC_CMD_0x24_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  731. /* MC_CMD_GET_PHY_CFG_IN msgrequest */
  732. #define MC_CMD_GET_PHY_CFG_IN_LEN 0
  733. /* MC_CMD_GET_PHY_CFG_OUT msgresponse */
  734. #define MC_CMD_GET_PHY_CFG_OUT_LEN 72
  735. /* flags */
  736. #define MC_CMD_GET_PHY_CFG_OUT_FLAGS_OFST 0
  737. #define MC_CMD_GET_PHY_CFG_OUT_PRESENT_LBN 0
  738. #define MC_CMD_GET_PHY_CFG_OUT_PRESENT_WIDTH 1
  739. #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_SHORT_LBN 1
  740. #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_SHORT_WIDTH 1
  741. #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_LONG_LBN 2
  742. #define MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_LONG_WIDTH 1
  743. #define MC_CMD_GET_PHY_CFG_OUT_LOWPOWER_LBN 3
  744. #define MC_CMD_GET_PHY_CFG_OUT_LOWPOWER_WIDTH 1
  745. #define MC_CMD_GET_PHY_CFG_OUT_POWEROFF_LBN 4
  746. #define MC_CMD_GET_PHY_CFG_OUT_POWEROFF_WIDTH 1
  747. #define MC_CMD_GET_PHY_CFG_OUT_TXDIS_LBN 5
  748. #define MC_CMD_GET_PHY_CFG_OUT_TXDIS_WIDTH 1
  749. #define MC_CMD_GET_PHY_CFG_OUT_BIST_LBN 6
  750. #define MC_CMD_GET_PHY_CFG_OUT_BIST_WIDTH 1
  751. /* ?? */
  752. #define MC_CMD_GET_PHY_CFG_OUT_TYPE_OFST 4
  753. /* Bitmask of supported capabilities */
  754. #define MC_CMD_GET_PHY_CFG_OUT_SUPPORTED_CAP_OFST 8
  755. #define MC_CMD_PHY_CAP_10HDX_LBN 1
  756. #define MC_CMD_PHY_CAP_10HDX_WIDTH 1
  757. #define MC_CMD_PHY_CAP_10FDX_LBN 2
  758. #define MC_CMD_PHY_CAP_10FDX_WIDTH 1
  759. #define MC_CMD_PHY_CAP_100HDX_LBN 3
  760. #define MC_CMD_PHY_CAP_100HDX_WIDTH 1
  761. #define MC_CMD_PHY_CAP_100FDX_LBN 4
  762. #define MC_CMD_PHY_CAP_100FDX_WIDTH 1
  763. #define MC_CMD_PHY_CAP_1000HDX_LBN 5
  764. #define MC_CMD_PHY_CAP_1000HDX_WIDTH 1
  765. #define MC_CMD_PHY_CAP_1000FDX_LBN 6
  766. #define MC_CMD_PHY_CAP_1000FDX_WIDTH 1
  767. #define MC_CMD_PHY_CAP_10000FDX_LBN 7
  768. #define MC_CMD_PHY_CAP_10000FDX_WIDTH 1
  769. #define MC_CMD_PHY_CAP_PAUSE_LBN 8
  770. #define MC_CMD_PHY_CAP_PAUSE_WIDTH 1
  771. #define MC_CMD_PHY_CAP_ASYM_LBN 9
  772. #define MC_CMD_PHY_CAP_ASYM_WIDTH 1
  773. #define MC_CMD_PHY_CAP_AN_LBN 10
  774. #define MC_CMD_PHY_CAP_AN_WIDTH 1
  775. #define MC_CMD_PHY_CAP_40000FDX_LBN 11
  776. #define MC_CMD_PHY_CAP_40000FDX_WIDTH 1
  777. #define MC_CMD_PHY_CAP_DDM_LBN 12
  778. #define MC_CMD_PHY_CAP_DDM_WIDTH 1
  779. #define MC_CMD_PHY_CAP_100000FDX_LBN 13
  780. #define MC_CMD_PHY_CAP_100000FDX_WIDTH 1
  781. #define MC_CMD_PHY_CAP_25000FDX_LBN 14
  782. #define MC_CMD_PHY_CAP_25000FDX_WIDTH 1
  783. #define MC_CMD_PHY_CAP_50000FDX_LBN 15
  784. #define MC_CMD_PHY_CAP_50000FDX_WIDTH 1
  785. #define MC_CMD_PHY_CAP_BASER_FEC_LBN 16
  786. #define MC_CMD_PHY_CAP_BASER_FEC_WIDTH 1
  787. #define MC_CMD_PHY_CAP_BASER_FEC_REQ_LBN 17
  788. #define MC_CMD_PHY_CAP_BASER_FEC_REQ_WIDTH 1
  789. #define MC_CMD_PHY_CAP_RS_FEC_LBN 17
  790. #define MC_CMD_PHY_CAP_RS_FEC_WIDTH 1
  791. #define MC_CMD_PHY_CAP_RS_FEC_REQ_LBN 18
  792. #define MC_CMD_PHY_CAP_RS_FEC_REQ_WIDTH 1
  793. /* ?? */
  794. #define MC_CMD_GET_PHY_CFG_OUT_CHANNEL_OFST 12
  795. /* ?? */
  796. #define MC_CMD_GET_PHY_CFG_OUT_PRT_OFST 16
  797. /* ?? */
  798. #define MC_CMD_GET_PHY_CFG_OUT_STATS_MASK_OFST 20
  799. /* ?? */
  800. #define MC_CMD_GET_PHY_CFG_OUT_NAME_OFST 24
  801. #define MC_CMD_GET_PHY_CFG_OUT_NAME_LEN 20
  802. /* ?? */
  803. #define MC_CMD_GET_PHY_CFG_OUT_MEDIA_TYPE_OFST 44
  804. /* enum: Xaui. */
  805. #define MC_CMD_MEDIA_XAUI 0x1
  806. /* enum: CX4. */
  807. #define MC_CMD_MEDIA_CX4 0x2
  808. /* enum: KX4. */
  809. #define MC_CMD_MEDIA_KX4 0x3
  810. /* enum: XFP Far. */
  811. #define MC_CMD_MEDIA_XFP 0x4
  812. /* enum: SFP+. */
  813. #define MC_CMD_MEDIA_SFP_PLUS 0x5
  814. /* enum: 10GBaseT. */
  815. #define MC_CMD_MEDIA_BASE_T 0x6
  816. /* enum: QSFP+. */
  817. #define MC_CMD_MEDIA_QSFP_PLUS 0x7
  818. #define MC_CMD_GET_PHY_CFG_OUT_MMD_MASK_OFST 48
  819. /* enum: Native clause 22 */
  820. #define MC_CMD_MMD_CLAUSE22 0x0
  821. #define MC_CMD_MMD_CLAUSE45_PMAPMD 0x1 /* enum */
  822. #define MC_CMD_MMD_CLAUSE45_WIS 0x2 /* enum */
  823. #define MC_CMD_MMD_CLAUSE45_PCS 0x3 /* enum */
  824. #define MC_CMD_MMD_CLAUSE45_PHYXS 0x4 /* enum */
  825. #define MC_CMD_MMD_CLAUSE45_DTEXS 0x5 /* enum */
  826. #define MC_CMD_MMD_CLAUSE45_TC 0x6 /* enum */
  827. #define MC_CMD_MMD_CLAUSE45_AN 0x7 /* enum */
  828. /* enum: Clause22 proxied over clause45 by PHY. */
  829. #define MC_CMD_MMD_CLAUSE45_C22EXT 0x1d
  830. #define MC_CMD_MMD_CLAUSE45_VEND1 0x1e /* enum */
  831. #define MC_CMD_MMD_CLAUSE45_VEND2 0x1f /* enum */
  832. #define MC_CMD_GET_PHY_CFG_OUT_REVISION_OFST 52
  833. #define MC_CMD_GET_PHY_CFG_OUT_REVISION_LEN 20
  834. /***********************************/
  835. /* MC_CMD_GET_LINK
  836. * Read the unified MAC/PHY link state. Locks required: None Return code: 0,
  837. * ETIME.
  838. */
  839. #define MC_CMD_GET_LINK 0x29
  840. #undef MC_CMD_0x29_PRIVILEGE_CTG
  841. #define MC_CMD_0x29_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  842. /* MC_CMD_GET_LINK_IN msgrequest */
  843. #define MC_CMD_GET_LINK_IN_LEN 0
  844. /* MC_CMD_GET_LINK_OUT msgresponse */
  845. #define MC_CMD_GET_LINK_OUT_LEN 28
  846. /* near-side advertised capabilities */
  847. #define MC_CMD_GET_LINK_OUT_CAP_OFST 0
  848. /* link-partner advertised capabilities */
  849. #define MC_CMD_GET_LINK_OUT_LP_CAP_OFST 4
  850. /* Autonegotiated speed in mbit/s. The link may still be down even if this
  851. * reads non-zero.
  852. */
  853. #define MC_CMD_GET_LINK_OUT_LINK_SPEED_OFST 8
  854. /* Current loopback setting. */
  855. #define MC_CMD_GET_LINK_OUT_LOOPBACK_MODE_OFST 12
  856. /* Enum values, see field(s): */
  857. /* MC_CMD_GET_LOOPBACK_MODES/MC_CMD_GET_LOOPBACK_MODES_OUT/100M */
  858. #define MC_CMD_GET_LINK_OUT_FLAGS_OFST 16
  859. #define MC_CMD_GET_LINK_OUT_LINK_UP_LBN 0
  860. #define MC_CMD_GET_LINK_OUT_LINK_UP_WIDTH 1
  861. #define MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN 1
  862. #define MC_CMD_GET_LINK_OUT_FULL_DUPLEX_WIDTH 1
  863. #define MC_CMD_GET_LINK_OUT_BPX_LINK_LBN 2
  864. #define MC_CMD_GET_LINK_OUT_BPX_LINK_WIDTH 1
  865. #define MC_CMD_GET_LINK_OUT_PHY_LINK_LBN 3
  866. #define MC_CMD_GET_LINK_OUT_PHY_LINK_WIDTH 1
  867. #define MC_CMD_GET_LINK_OUT_LINK_FAULT_RX_LBN 6
  868. #define MC_CMD_GET_LINK_OUT_LINK_FAULT_RX_WIDTH 1
  869. #define MC_CMD_GET_LINK_OUT_LINK_FAULT_TX_LBN 7
  870. #define MC_CMD_GET_LINK_OUT_LINK_FAULT_TX_WIDTH 1
  871. /* This returns the negotiated flow control value. */
  872. #define MC_CMD_GET_LINK_OUT_FCNTL_OFST 20
  873. /* Enum values, see field(s): */
  874. /* MC_CMD_SET_MAC/MC_CMD_SET_MAC_IN/FCNTL */
  875. #define MC_CMD_GET_LINK_OUT_MAC_FAULT_OFST 24
  876. #define MC_CMD_MAC_FAULT_XGMII_LOCAL_LBN 0
  877. #define MC_CMD_MAC_FAULT_XGMII_LOCAL_WIDTH 1
  878. #define MC_CMD_MAC_FAULT_XGMII_REMOTE_LBN 1
  879. #define MC_CMD_MAC_FAULT_XGMII_REMOTE_WIDTH 1
  880. #define MC_CMD_MAC_FAULT_SGMII_REMOTE_LBN 2
  881. #define MC_CMD_MAC_FAULT_SGMII_REMOTE_WIDTH 1
  882. #define MC_CMD_MAC_FAULT_PENDING_RECONFIG_LBN 3
  883. #define MC_CMD_MAC_FAULT_PENDING_RECONFIG_WIDTH 1
  884. /***********************************/
  885. /* MC_CMD_SET_MAC
  886. * Set MAC configuration. Locks required: None. Return code: 0, EINVAL
  887. */
  888. #define MC_CMD_SET_MAC 0x2c
  889. #undef MC_CMD_0x2c_PRIVILEGE_CTG
  890. #define MC_CMD_0x2c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  891. /* MC_CMD_SET_MAC_IN msgrequest */
  892. #define MC_CMD_SET_MAC_IN_LEN 28
  893. /* The MTU is the MTU programmed directly into the XMAC/GMAC (inclusive of
  894. * EtherII, VLAN, bug16011 padding).
  895. */
  896. #define MC_CMD_SET_MAC_IN_MTU_OFST 0
  897. #define MC_CMD_SET_MAC_IN_DRAIN_OFST 4
  898. #define MC_CMD_SET_MAC_IN_ADDR_OFST 8
  899. #define MC_CMD_SET_MAC_IN_ADDR_LEN 8
  900. #define MC_CMD_SET_MAC_IN_ADDR_LO_OFST 8
  901. #define MC_CMD_SET_MAC_IN_ADDR_HI_OFST 12
  902. #define MC_CMD_SET_MAC_IN_REJECT_OFST 16
  903. #define MC_CMD_SET_MAC_IN_REJECT_UNCST_LBN 0
  904. #define MC_CMD_SET_MAC_IN_REJECT_UNCST_WIDTH 1
  905. #define MC_CMD_SET_MAC_IN_REJECT_BRDCST_LBN 1
  906. #define MC_CMD_SET_MAC_IN_REJECT_BRDCST_WIDTH 1
  907. #define MC_CMD_SET_MAC_IN_FCNTL_OFST 20
  908. /* enum: Flow control is off. */
  909. #define MC_CMD_FCNTL_OFF 0x0
  910. /* enum: Respond to flow control. */
  911. #define MC_CMD_FCNTL_RESPOND 0x1
  912. /* enum: Respond to and Issue flow control. */
  913. #define MC_CMD_FCNTL_BIDIR 0x2
  914. /* enum: Auto neg flow control. */
  915. #define MC_CMD_FCNTL_AUTO 0x3
  916. /* enum: Priority flow control (eftest builds only). */
  917. #define MC_CMD_FCNTL_QBB 0x4
  918. /* enum: Issue flow control. */
  919. #define MC_CMD_FCNTL_GENERATE 0x5
  920. #define MC_CMD_SET_MAC_IN_FLAGS_OFST 24
  921. #define MC_CMD_SET_MAC_IN_FLAG_INCLUDE_FCS_LBN 0
  922. #define MC_CMD_SET_MAC_IN_FLAG_INCLUDE_FCS_WIDTH 1
  923. /* MC_CMD_SET_MAC_EXT_IN msgrequest */
  924. #define MC_CMD_SET_MAC_EXT_IN_LEN 32
  925. /* The MTU is the MTU programmed directly into the XMAC/GMAC (inclusive of
  926. * EtherII, VLAN, bug16011 padding).
  927. */
  928. #define MC_CMD_SET_MAC_EXT_IN_MTU_OFST 0
  929. #define MC_CMD_SET_MAC_EXT_IN_DRAIN_OFST 4
  930. #define MC_CMD_SET_MAC_EXT_IN_ADDR_OFST 8
  931. #define MC_CMD_SET_MAC_EXT_IN_ADDR_LEN 8
  932. #define MC_CMD_SET_MAC_EXT_IN_ADDR_LO_OFST 8
  933. #define MC_CMD_SET_MAC_EXT_IN_ADDR_HI_OFST 12
  934. #define MC_CMD_SET_MAC_EXT_IN_REJECT_OFST 16
  935. #define MC_CMD_SET_MAC_EXT_IN_REJECT_UNCST_LBN 0
  936. #define MC_CMD_SET_MAC_EXT_IN_REJECT_UNCST_WIDTH 1
  937. #define MC_CMD_SET_MAC_EXT_IN_REJECT_BRDCST_LBN 1
  938. #define MC_CMD_SET_MAC_EXT_IN_REJECT_BRDCST_WIDTH 1
  939. #define MC_CMD_SET_MAC_EXT_IN_FCNTL_OFST 20
  940. /* enum: Flow control is off. */
  941. /* MC_CMD_FCNTL_OFF 0x0 */
  942. /* enum: Respond to flow control. */
  943. /* MC_CMD_FCNTL_RESPOND 0x1 */
  944. /* enum: Respond to and Issue flow control. */
  945. /* MC_CMD_FCNTL_BIDIR 0x2 */
  946. /* enum: Auto neg flow control. */
  947. /* MC_CMD_FCNTL_AUTO 0x3 */
  948. /* enum: Priority flow control (eftest builds only). */
  949. /* MC_CMD_FCNTL_QBB 0x4 */
  950. /* enum: Issue flow control. */
  951. /* MC_CMD_FCNTL_GENERATE 0x5 */
  952. #define MC_CMD_SET_MAC_EXT_IN_FLAGS_OFST 24
  953. #define MC_CMD_SET_MAC_EXT_IN_FLAG_INCLUDE_FCS_LBN 0
  954. #define MC_CMD_SET_MAC_EXT_IN_FLAG_INCLUDE_FCS_WIDTH 1
  955. /* Select which parameters to configure. A parameter will only be modified if
  956. * the corresponding control flag is set. If SET_MAC_ENHANCED is not set in
  957. * capabilities then this field is ignored (and all flags are assumed to be
  958. * set).
  959. */
  960. #define MC_CMD_SET_MAC_EXT_IN_CONTROL_OFST 28
  961. #define MC_CMD_SET_MAC_EXT_IN_CFG_MTU_LBN 0
  962. #define MC_CMD_SET_MAC_EXT_IN_CFG_MTU_WIDTH 1
  963. #define MC_CMD_SET_MAC_EXT_IN_CFG_DRAIN_LBN 1
  964. #define MC_CMD_SET_MAC_EXT_IN_CFG_DRAIN_WIDTH 1
  965. #define MC_CMD_SET_MAC_EXT_IN_CFG_REJECT_LBN 2
  966. #define MC_CMD_SET_MAC_EXT_IN_CFG_REJECT_WIDTH 1
  967. #define MC_CMD_SET_MAC_EXT_IN_CFG_FCNTL_LBN 3
  968. #define MC_CMD_SET_MAC_EXT_IN_CFG_FCNTL_WIDTH 1
  969. #define MC_CMD_SET_MAC_EXT_IN_CFG_FCS_LBN 4
  970. #define MC_CMD_SET_MAC_EXT_IN_CFG_FCS_WIDTH 1
  971. /* MC_CMD_SET_MAC_OUT msgresponse */
  972. #define MC_CMD_SET_MAC_OUT_LEN 0
  973. /* MC_CMD_SET_MAC_V2_OUT msgresponse */
  974. #define MC_CMD_SET_MAC_V2_OUT_LEN 4
  975. /* MTU as configured after processing the request. See comment at
  976. * MC_CMD_SET_MAC_IN/MTU. To query MTU without doing any changes, set CONTROL
  977. * to 0.
  978. */
  979. #define MC_CMD_SET_MAC_V2_OUT_MTU_OFST 0
  980. /***********************************/
  981. /* MC_CMD_REBOOT
  982. * Reboot the MC.
  983. *
  984. * The AFTER_ASSERTION flag is intended to be used when the driver notices an
  985. * assertion failure (at which point it is expected to perform a complete tear
  986. * down and reinitialise), to allow both ports to reset the MC once in an
  987. * atomic fashion.
  988. *
  989. * Production mc firmwares are generally compiled with REBOOT_ON_ASSERT=1,
  990. * which means that they will automatically reboot out of the assertion
  991. * handler, so this is in practise an optional operation. It is still
  992. * recommended that drivers execute this to support custom firmwares with
  993. * REBOOT_ON_ASSERT=0.
  994. *
  995. * Locks required: NONE Returns: Nothing. You get back a response with ERR=1,
  996. * DATALEN=0
  997. */
  998. #define MC_CMD_REBOOT 0x3d
  999. #undef MC_CMD_0x3d_PRIVILEGE_CTG
  1000. #define MC_CMD_0x3d_PRIVILEGE_CTG SRIOV_CTG_ADMIN
  1001. /* MC_CMD_REBOOT_IN msgrequest */
  1002. #define MC_CMD_REBOOT_IN_LEN 4
  1003. #define MC_CMD_REBOOT_IN_FLAGS_OFST 0
  1004. #define MC_CMD_REBOOT_FLAGS_AFTER_ASSERTION 0x1 /* enum */
  1005. /* MC_CMD_REBOOT_OUT msgresponse */
  1006. #define MC_CMD_REBOOT_OUT_LEN 0
  1007. /***********************************/
  1008. /* MC_CMD_REBOOT_MODE
  1009. * Set the mode for the next MC reboot. Locks required: NONE. Sets the reboot
  1010. * mode to the specified value. Returns the old mode.
  1011. */
  1012. #define MC_CMD_REBOOT_MODE 0x3f
  1013. #undef MC_CMD_0x3f_PRIVILEGE_CTG
  1014. #define MC_CMD_0x3f_PRIVILEGE_CTG SRIOV_CTG_ADMIN
  1015. /* MC_CMD_REBOOT_MODE_IN msgrequest */
  1016. #define MC_CMD_REBOOT_MODE_IN_LEN 4
  1017. #define MC_CMD_REBOOT_MODE_IN_VALUE_OFST 0
  1018. /* enum: Normal. */
  1019. #define MC_CMD_REBOOT_MODE_NORMAL 0x0
  1020. /* enum: Power-on Reset. */
  1021. #define MC_CMD_REBOOT_MODE_POR 0x2
  1022. /* enum: Snapper. */
  1023. #define MC_CMD_REBOOT_MODE_SNAPPER 0x3
  1024. /* enum: snapper fake POR */
  1025. #define MC_CMD_REBOOT_MODE_SNAPPER_POR 0x4
  1026. #define MC_CMD_REBOOT_MODE_IN_FAKE_LBN 7
  1027. #define MC_CMD_REBOOT_MODE_IN_FAKE_WIDTH 1
  1028. /* MC_CMD_REBOOT_MODE_OUT msgresponse */
  1029. #define MC_CMD_REBOOT_MODE_OUT_LEN 4
  1030. #define MC_CMD_REBOOT_MODE_OUT_VALUE_OFST 0
  1031. /***********************************/
  1032. /* MC_CMD_WORKAROUND
  1033. * Enable/Disable a given workaround. The mcfw will return EINVAL if it doesn't
  1034. * understand the given workaround number - which should not be treated as a
  1035. * hard error by client code. This op does not imply any semantics about each
  1036. * workaround, that's between the driver and the mcfw on a per-workaround
  1037. * basis. Locks required: None. Returns: 0, EINVAL .
  1038. */
  1039. #define MC_CMD_WORKAROUND 0x4a
  1040. #undef MC_CMD_0x4a_PRIVILEGE_CTG
  1041. #define MC_CMD_0x4a_PRIVILEGE_CTG SRIOV_CTG_ADMIN
  1042. /* MC_CMD_WORKAROUND_IN msgrequest */
  1043. #define MC_CMD_WORKAROUND_IN_LEN 8
  1044. /* The enums here must correspond with those in MC_CMD_GET_WORKAROUND. */
  1045. #define MC_CMD_WORKAROUND_IN_TYPE_OFST 0
  1046. /* enum: Bug 17230 work around. */
  1047. #define MC_CMD_WORKAROUND_BUG17230 0x1
  1048. /* enum: Bug 35388 work around (unsafe EVQ writes). */
  1049. #define MC_CMD_WORKAROUND_BUG35388 0x2
  1050. /* enum: Bug35017 workaround (A64 tables must be identity map) */
  1051. #define MC_CMD_WORKAROUND_BUG35017 0x3
  1052. /* enum: Bug 41750 present (MC_CMD_TRIGGER_INTERRUPT won't work) */
  1053. #define MC_CMD_WORKAROUND_BUG41750 0x4
  1054. /* enum: Bug 42008 present (Interrupts can overtake associated events). Caution
  1055. * - before adding code that queries this workaround, remember that there's
  1056. * released Monza firmware that doesn't understand MC_CMD_WORKAROUND_BUG42008,
  1057. * and will hence (incorrectly) report that the bug doesn't exist.
  1058. */
  1059. #define MC_CMD_WORKAROUND_BUG42008 0x5
  1060. /* enum: Bug 26807 features present in firmware (multicast filter chaining)
  1061. * This feature cannot be turned on/off while there are any filters already
  1062. * present. The behaviour in such case depends on the acting client's privilege
  1063. * level. If the client has the admin privilege, then all functions that have
  1064. * filters installed will be FLRed and the FLR_DONE flag will be set. Otherwise
  1065. * the command will fail with MC_CMD_ERR_FILTERS_PRESENT.
  1066. */
  1067. #define MC_CMD_WORKAROUND_BUG26807 0x6
  1068. /* enum: Bug 61265 work around (broken EVQ TMR writes). */
  1069. #define MC_CMD_WORKAROUND_BUG61265 0x7
  1070. /* 0 = disable the workaround indicated by TYPE; any non-zero value = enable
  1071. * the workaround
  1072. */
  1073. #define MC_CMD_WORKAROUND_IN_ENABLED_OFST 4
  1074. /* MC_CMD_WORKAROUND_OUT msgresponse */
  1075. #define MC_CMD_WORKAROUND_OUT_LEN 0
  1076. /* MC_CMD_WORKAROUND_EXT_OUT msgresponse: This response format will be used
  1077. * when (TYPE == MC_CMD_WORKAROUND_BUG26807)
  1078. */
  1079. #define MC_CMD_WORKAROUND_EXT_OUT_LEN 4
  1080. #define MC_CMD_WORKAROUND_EXT_OUT_FLAGS_OFST 0
  1081. #define MC_CMD_WORKAROUND_EXT_OUT_FLR_DONE_LBN 0
  1082. #define MC_CMD_WORKAROUND_EXT_OUT_FLR_DONE_WIDTH 1
  1083. /***********************************/
  1084. /* MC_CMD_GET_MAC_ADDRESSES
  1085. * Returns the base MAC, count and stride for the requesting function
  1086. */
  1087. #define MC_CMD_GET_MAC_ADDRESSES 0x55
  1088. #undef MC_CMD_0x55_PRIVILEGE_CTG
  1089. #define MC_CMD_0x55_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1090. /* MC_CMD_GET_MAC_ADDRESSES_IN msgrequest */
  1091. #define MC_CMD_GET_MAC_ADDRESSES_IN_LEN 0
  1092. /* MC_CMD_GET_MAC_ADDRESSES_OUT msgresponse */
  1093. #define MC_CMD_GET_MAC_ADDRESSES_OUT_LEN 16
  1094. /* Base MAC address */
  1095. #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_ADDR_BASE_OFST 0
  1096. #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_ADDR_BASE_LEN 6
  1097. /* Padding */
  1098. #define MC_CMD_GET_MAC_ADDRESSES_OUT_RESERVED_OFST 6
  1099. #define MC_CMD_GET_MAC_ADDRESSES_OUT_RESERVED_LEN 2
  1100. /* Number of allocated MAC addresses */
  1101. #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_COUNT_OFST 8
  1102. /* Spacing of allocated MAC addresses */
  1103. #define MC_CMD_GET_MAC_ADDRESSES_OUT_MAC_STRIDE_OFST 12
  1104. /***********************************/
  1105. /* MC_CMD_GET_WORKAROUNDS
  1106. * Read the list of all implemented and all currently enabled workarounds. The
  1107. * enums here must correspond with those in MC_CMD_WORKAROUND.
  1108. */
  1109. #define MC_CMD_GET_WORKAROUNDS 0x59
  1110. #undef MC_CMD_0x59_PRIVILEGE_CTG
  1111. #define MC_CMD_0x59_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1112. /* MC_CMD_GET_WORKAROUNDS_OUT msgresponse */
  1113. #define MC_CMD_GET_WORKAROUNDS_OUT_LEN 8
  1114. /* Each workaround is represented by a single bit according to the enums below.
  1115. */
  1116. #define MC_CMD_GET_WORKAROUNDS_OUT_IMPLEMENTED_OFST 0
  1117. #define MC_CMD_GET_WORKAROUNDS_OUT_ENABLED_OFST 4
  1118. /* enum: Bug 17230 work around. */
  1119. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG17230 0x2
  1120. /* enum: Bug 35388 work around (unsafe EVQ writes). */
  1121. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG35388 0x4
  1122. /* enum: Bug35017 workaround (A64 tables must be identity map) */
  1123. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG35017 0x8
  1124. /* enum: Bug 41750 present (MC_CMD_TRIGGER_INTERRUPT won't work) */
  1125. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG41750 0x10
  1126. /* enum: Bug 42008 present (Interrupts can overtake associated events). Caution
  1127. * - before adding code that queries this workaround, remember that there's
  1128. * released Monza firmware that doesn't understand MC_CMD_WORKAROUND_BUG42008,
  1129. * and will hence (incorrectly) report that the bug doesn't exist.
  1130. */
  1131. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG42008 0x20
  1132. /* enum: Bug 26807 features present in firmware (multicast filter chaining) */
  1133. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG26807 0x40
  1134. /* enum: Bug 61265 work around (broken EVQ TMR writes). */
  1135. #define MC_CMD_GET_WORKAROUNDS_OUT_BUG61265 0x80
  1136. /***********************************/
  1137. /* MC_CMD_V2_EXTN
  1138. * Encapsulation for a v2 extended command
  1139. */
  1140. #define MC_CMD_V2_EXTN 0x7f
  1141. /* MC_CMD_V2_EXTN_IN msgrequest */
  1142. #define MC_CMD_V2_EXTN_IN_LEN 4
  1143. /* the extended command number */
  1144. #define MC_CMD_V2_EXTN_IN_EXTENDED_CMD_LBN 0
  1145. #define MC_CMD_V2_EXTN_IN_EXTENDED_CMD_WIDTH 15
  1146. #define MC_CMD_V2_EXTN_IN_UNUSED_LBN 15
  1147. #define MC_CMD_V2_EXTN_IN_UNUSED_WIDTH 1
  1148. /* the actual length of the encapsulated command (which is not in the v1
  1149. * header)
  1150. */
  1151. #define MC_CMD_V2_EXTN_IN_ACTUAL_LEN_LBN 16
  1152. #define MC_CMD_V2_EXTN_IN_ACTUAL_LEN_WIDTH 10
  1153. #define MC_CMD_V2_EXTN_IN_UNUSED2_LBN 26
  1154. #define MC_CMD_V2_EXTN_IN_UNUSED2_WIDTH 2
  1155. /* Type of command/response */
  1156. #define MC_CMD_V2_EXTN_IN_MESSAGE_TYPE_LBN 28
  1157. #define MC_CMD_V2_EXTN_IN_MESSAGE_TYPE_WIDTH 4
  1158. /* enum: MCDI command directed to or response originating from the MC. */
  1159. #define MC_CMD_V2_EXTN_IN_MCDI_MESSAGE_TYPE_MC 0x0
  1160. /* enum: MCDI command directed to a TSA controller. MCDI responses of this type
  1161. * are not defined.
  1162. */
  1163. #define MC_CMD_V2_EXTN_IN_MCDI_MESSAGE_TYPE_TSA 0x1
  1164. /***********************************/
  1165. /* MC_CMD_INIT_EVQ
  1166. * Set up an event queue according to the supplied parameters. The IN arguments
  1167. * end with an address for each 4k of host memory required to back the EVQ.
  1168. */
  1169. #define MC_CMD_INIT_EVQ 0x80
  1170. #undef MC_CMD_0x80_PRIVILEGE_CTG
  1171. #define MC_CMD_0x80_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1172. /* MC_CMD_INIT_EVQ_IN msgrequest */
  1173. #define MC_CMD_INIT_EVQ_IN_LENMIN 44
  1174. #define MC_CMD_INIT_EVQ_IN_LENMAX 548
  1175. #define MC_CMD_INIT_EVQ_IN_LEN(num) (36+8*(num))
  1176. /* Size, in entries */
  1177. #define MC_CMD_INIT_EVQ_IN_SIZE_OFST 0
  1178. /* Desired instance. Must be set to a specific instance, which is a function
  1179. * local queue index.
  1180. */
  1181. #define MC_CMD_INIT_EVQ_IN_INSTANCE_OFST 4
  1182. /* The initial timer value. The load value is ignored if the timer mode is DIS.
  1183. */
  1184. #define MC_CMD_INIT_EVQ_IN_TMR_LOAD_OFST 8
  1185. /* The reload value is ignored in one-shot modes */
  1186. #define MC_CMD_INIT_EVQ_IN_TMR_RELOAD_OFST 12
  1187. /* tbd */
  1188. #define MC_CMD_INIT_EVQ_IN_FLAGS_OFST 16
  1189. #define MC_CMD_INIT_EVQ_IN_FLAG_INTERRUPTING_LBN 0
  1190. #define MC_CMD_INIT_EVQ_IN_FLAG_INTERRUPTING_WIDTH 1
  1191. #define MC_CMD_INIT_EVQ_IN_FLAG_RPTR_DOS_LBN 1
  1192. #define MC_CMD_INIT_EVQ_IN_FLAG_RPTR_DOS_WIDTH 1
  1193. #define MC_CMD_INIT_EVQ_IN_FLAG_INT_ARMD_LBN 2
  1194. #define MC_CMD_INIT_EVQ_IN_FLAG_INT_ARMD_WIDTH 1
  1195. #define MC_CMD_INIT_EVQ_IN_FLAG_CUT_THRU_LBN 3
  1196. #define MC_CMD_INIT_EVQ_IN_FLAG_CUT_THRU_WIDTH 1
  1197. #define MC_CMD_INIT_EVQ_IN_FLAG_RX_MERGE_LBN 4
  1198. #define MC_CMD_INIT_EVQ_IN_FLAG_RX_MERGE_WIDTH 1
  1199. #define MC_CMD_INIT_EVQ_IN_FLAG_TX_MERGE_LBN 5
  1200. #define MC_CMD_INIT_EVQ_IN_FLAG_TX_MERGE_WIDTH 1
  1201. #define MC_CMD_INIT_EVQ_IN_FLAG_USE_TIMER_LBN 6
  1202. #define MC_CMD_INIT_EVQ_IN_FLAG_USE_TIMER_WIDTH 1
  1203. #define MC_CMD_INIT_EVQ_IN_TMR_MODE_OFST 20
  1204. /* enum: Disabled */
  1205. #define MC_CMD_INIT_EVQ_IN_TMR_MODE_DIS 0x0
  1206. /* enum: Immediate */
  1207. #define MC_CMD_INIT_EVQ_IN_TMR_IMMED_START 0x1
  1208. /* enum: Triggered */
  1209. #define MC_CMD_INIT_EVQ_IN_TMR_TRIG_START 0x2
  1210. /* enum: Hold-off */
  1211. #define MC_CMD_INIT_EVQ_IN_TMR_INT_HLDOFF 0x3
  1212. /* Target EVQ for wakeups if in wakeup mode. */
  1213. #define MC_CMD_INIT_EVQ_IN_TARGET_EVQ_OFST 24
  1214. /* Target interrupt if in interrupting mode (note union with target EVQ). Use
  1215. * MC_CMD_RESOURCE_INSTANCE_ANY unless a specific one required for test
  1216. * purposes.
  1217. */
  1218. #define MC_CMD_INIT_EVQ_IN_IRQ_NUM_OFST 24
  1219. /* Event Counter Mode. */
  1220. #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_OFST 28
  1221. /* enum: Disabled */
  1222. #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_DIS 0x0
  1223. /* enum: Disabled */
  1224. #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_RX 0x1
  1225. /* enum: Disabled */
  1226. #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_TX 0x2
  1227. /* enum: Disabled */
  1228. #define MC_CMD_INIT_EVQ_IN_COUNT_MODE_RXTX 0x3
  1229. /* Event queue packet count threshold. */
  1230. #define MC_CMD_INIT_EVQ_IN_COUNT_THRSHLD_OFST 32
  1231. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1232. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_OFST 36
  1233. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_LEN 8
  1234. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_LO_OFST 36
  1235. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_HI_OFST 40
  1236. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_MINNUM 1
  1237. #define MC_CMD_INIT_EVQ_IN_DMA_ADDR_MAXNUM 64
  1238. /* MC_CMD_INIT_EVQ_OUT msgresponse */
  1239. #define MC_CMD_INIT_EVQ_OUT_LEN 4
  1240. /* Only valid if INTRFLAG was true */
  1241. #define MC_CMD_INIT_EVQ_OUT_IRQ_OFST 0
  1242. /* MC_CMD_INIT_EVQ_V2_IN msgrequest */
  1243. #define MC_CMD_INIT_EVQ_V2_IN_LENMIN 44
  1244. #define MC_CMD_INIT_EVQ_V2_IN_LENMAX 548
  1245. #define MC_CMD_INIT_EVQ_V2_IN_LEN(num) (36+8*(num))
  1246. /* Size, in entries */
  1247. #define MC_CMD_INIT_EVQ_V2_IN_SIZE_OFST 0
  1248. /* Desired instance. Must be set to a specific instance, which is a function
  1249. * local queue index.
  1250. */
  1251. #define MC_CMD_INIT_EVQ_V2_IN_INSTANCE_OFST 4
  1252. /* The initial timer value. The load value is ignored if the timer mode is DIS.
  1253. */
  1254. #define MC_CMD_INIT_EVQ_V2_IN_TMR_LOAD_OFST 8
  1255. /* The reload value is ignored in one-shot modes */
  1256. #define MC_CMD_INIT_EVQ_V2_IN_TMR_RELOAD_OFST 12
  1257. /* tbd */
  1258. #define MC_CMD_INIT_EVQ_V2_IN_FLAGS_OFST 16
  1259. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INTERRUPTING_LBN 0
  1260. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INTERRUPTING_WIDTH 1
  1261. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RPTR_DOS_LBN 1
  1262. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RPTR_DOS_WIDTH 1
  1263. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INT_ARMD_LBN 2
  1264. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_INT_ARMD_WIDTH 1
  1265. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_CUT_THRU_LBN 3
  1266. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_CUT_THRU_WIDTH 1
  1267. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RX_MERGE_LBN 4
  1268. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_RX_MERGE_WIDTH 1
  1269. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TX_MERGE_LBN 5
  1270. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TX_MERGE_WIDTH 1
  1271. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_USE_TIMER_LBN 6
  1272. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_USE_TIMER_WIDTH 1
  1273. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_LBN 7
  1274. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_WIDTH 4
  1275. /* enum: All initialisation flags specified by host. */
  1276. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_MANUAL 0x0
  1277. /* enum: MEDFORD only. Certain initialisation flags specified by host may be
  1278. * over-ridden by firmware based on licenses and firmware variant in order to
  1279. * provide the lowest latency achievable. See
  1280. * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
  1281. */
  1282. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_LOW_LATENCY 0x1
  1283. /* enum: MEDFORD only. Certain initialisation flags specified by host may be
  1284. * over-ridden by firmware based on licenses and firmware variant in order to
  1285. * provide the best throughput achievable. See
  1286. * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
  1287. */
  1288. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_THROUGHPUT 0x2
  1289. /* enum: MEDFORD only. Certain initialisation flags may be over-ridden by
  1290. * firmware based on licenses and firmware variant. See
  1291. * MC_CMD_INIT_EVQ_V2/MC_CMD_INIT_EVQ_V2_OUT/FLAGS for list of affected flags.
  1292. */
  1293. #define MC_CMD_INIT_EVQ_V2_IN_FLAG_TYPE_AUTO 0x3
  1294. #define MC_CMD_INIT_EVQ_V2_IN_TMR_MODE_OFST 20
  1295. /* enum: Disabled */
  1296. #define MC_CMD_INIT_EVQ_V2_IN_TMR_MODE_DIS 0x0
  1297. /* enum: Immediate */
  1298. #define MC_CMD_INIT_EVQ_V2_IN_TMR_IMMED_START 0x1
  1299. /* enum: Triggered */
  1300. #define MC_CMD_INIT_EVQ_V2_IN_TMR_TRIG_START 0x2
  1301. /* enum: Hold-off */
  1302. #define MC_CMD_INIT_EVQ_V2_IN_TMR_INT_HLDOFF 0x3
  1303. /* Target EVQ for wakeups if in wakeup mode. */
  1304. #define MC_CMD_INIT_EVQ_V2_IN_TARGET_EVQ_OFST 24
  1305. /* Target interrupt if in interrupting mode (note union with target EVQ). Use
  1306. * MC_CMD_RESOURCE_INSTANCE_ANY unless a specific one required for test
  1307. * purposes.
  1308. */
  1309. #define MC_CMD_INIT_EVQ_V2_IN_IRQ_NUM_OFST 24
  1310. /* Event Counter Mode. */
  1311. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_OFST 28
  1312. /* enum: Disabled */
  1313. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_DIS 0x0
  1314. /* enum: Disabled */
  1315. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_RX 0x1
  1316. /* enum: Disabled */
  1317. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_TX 0x2
  1318. /* enum: Disabled */
  1319. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_MODE_RXTX 0x3
  1320. /* Event queue packet count threshold. */
  1321. #define MC_CMD_INIT_EVQ_V2_IN_COUNT_THRSHLD_OFST 32
  1322. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1323. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_OFST 36
  1324. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_LEN 8
  1325. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_LO_OFST 36
  1326. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_HI_OFST 40
  1327. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_MINNUM 1
  1328. #define MC_CMD_INIT_EVQ_V2_IN_DMA_ADDR_MAXNUM 64
  1329. /* MC_CMD_INIT_EVQ_V2_OUT msgresponse */
  1330. #define MC_CMD_INIT_EVQ_V2_OUT_LEN 8
  1331. /* Only valid if INTRFLAG was true */
  1332. #define MC_CMD_INIT_EVQ_V2_OUT_IRQ_OFST 0
  1333. /* Actual configuration applied on the card */
  1334. #define MC_CMD_INIT_EVQ_V2_OUT_FLAGS_OFST 4
  1335. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_CUT_THRU_LBN 0
  1336. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_CUT_THRU_WIDTH 1
  1337. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RX_MERGE_LBN 1
  1338. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RX_MERGE_WIDTH 1
  1339. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_TX_MERGE_LBN 2
  1340. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_TX_MERGE_WIDTH 1
  1341. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RXQ_FORCE_EV_MERGING_LBN 3
  1342. #define MC_CMD_INIT_EVQ_V2_OUT_FLAG_RXQ_FORCE_EV_MERGING_WIDTH 1
  1343. /* QUEUE_CRC_MODE structuredef */
  1344. #define QUEUE_CRC_MODE_LEN 1
  1345. #define QUEUE_CRC_MODE_MODE_LBN 0
  1346. #define QUEUE_CRC_MODE_MODE_WIDTH 4
  1347. /* enum: No CRC. */
  1348. #define QUEUE_CRC_MODE_NONE 0x0
  1349. /* enum: CRC Fiber channel over ethernet. */
  1350. #define QUEUE_CRC_MODE_FCOE 0x1
  1351. /* enum: CRC (digest) iSCSI header only. */
  1352. #define QUEUE_CRC_MODE_ISCSI_HDR 0x2
  1353. /* enum: CRC (digest) iSCSI header and payload. */
  1354. #define QUEUE_CRC_MODE_ISCSI 0x3
  1355. /* enum: CRC Fiber channel over IP over ethernet. */
  1356. #define QUEUE_CRC_MODE_FCOIPOE 0x4
  1357. /* enum: CRC MPA. */
  1358. #define QUEUE_CRC_MODE_MPA 0x5
  1359. #define QUEUE_CRC_MODE_SPARE_LBN 4
  1360. #define QUEUE_CRC_MODE_SPARE_WIDTH 4
  1361. /***********************************/
  1362. /* MC_CMD_INIT_RXQ
  1363. * set up a receive queue according to the supplied parameters. The IN
  1364. * arguments end with an address for each 4k of host memory required to back
  1365. * the RXQ.
  1366. */
  1367. #define MC_CMD_INIT_RXQ 0x81
  1368. #undef MC_CMD_0x81_PRIVILEGE_CTG
  1369. #define MC_CMD_0x81_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1370. /* MC_CMD_INIT_RXQ_IN msgrequest: Legacy RXQ_INIT request. Use extended version
  1371. * in new code.
  1372. */
  1373. #define MC_CMD_INIT_RXQ_IN_LENMIN 36
  1374. #define MC_CMD_INIT_RXQ_IN_LENMAX 252
  1375. #define MC_CMD_INIT_RXQ_IN_LEN(num) (28+8*(num))
  1376. /* Size, in entries */
  1377. #define MC_CMD_INIT_RXQ_IN_SIZE_OFST 0
  1378. /* The EVQ to send events to. This is an index originally specified to INIT_EVQ
  1379. */
  1380. #define MC_CMD_INIT_RXQ_IN_TARGET_EVQ_OFST 4
  1381. /* The value to put in the event data. Check hardware spec. for valid range. */
  1382. #define MC_CMD_INIT_RXQ_IN_LABEL_OFST 8
  1383. /* Desired instance. Must be set to a specific instance, which is a function
  1384. * local queue index.
  1385. */
  1386. #define MC_CMD_INIT_RXQ_IN_INSTANCE_OFST 12
  1387. /* There will be more flags here. */
  1388. #define MC_CMD_INIT_RXQ_IN_FLAGS_OFST 16
  1389. #define MC_CMD_INIT_RXQ_IN_FLAG_BUFF_MODE_LBN 0
  1390. #define MC_CMD_INIT_RXQ_IN_FLAG_BUFF_MODE_WIDTH 1
  1391. #define MC_CMD_INIT_RXQ_IN_FLAG_HDR_SPLIT_LBN 1
  1392. #define MC_CMD_INIT_RXQ_IN_FLAG_HDR_SPLIT_WIDTH 1
  1393. #define MC_CMD_INIT_RXQ_IN_FLAG_TIMESTAMP_LBN 2
  1394. #define MC_CMD_INIT_RXQ_IN_FLAG_TIMESTAMP_WIDTH 1
  1395. #define MC_CMD_INIT_RXQ_IN_CRC_MODE_LBN 3
  1396. #define MC_CMD_INIT_RXQ_IN_CRC_MODE_WIDTH 4
  1397. #define MC_CMD_INIT_RXQ_IN_FLAG_CHAIN_LBN 7
  1398. #define MC_CMD_INIT_RXQ_IN_FLAG_CHAIN_WIDTH 1
  1399. #define MC_CMD_INIT_RXQ_IN_FLAG_PREFIX_LBN 8
  1400. #define MC_CMD_INIT_RXQ_IN_FLAG_PREFIX_WIDTH 1
  1401. #define MC_CMD_INIT_RXQ_IN_FLAG_DISABLE_SCATTER_LBN 9
  1402. #define MC_CMD_INIT_RXQ_IN_FLAG_DISABLE_SCATTER_WIDTH 1
  1403. #define MC_CMD_INIT_RXQ_IN_UNUSED_LBN 10
  1404. #define MC_CMD_INIT_RXQ_IN_UNUSED_WIDTH 1
  1405. /* Owner ID to use if in buffer mode (zero if physical) */
  1406. #define MC_CMD_INIT_RXQ_IN_OWNER_ID_OFST 20
  1407. /* The port ID associated with the v-adaptor which should contain this DMAQ. */
  1408. #define MC_CMD_INIT_RXQ_IN_PORT_ID_OFST 24
  1409. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1410. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_OFST 28
  1411. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_LEN 8
  1412. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_LO_OFST 28
  1413. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_HI_OFST 32
  1414. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_MINNUM 1
  1415. #define MC_CMD_INIT_RXQ_IN_DMA_ADDR_MAXNUM 28
  1416. /* MC_CMD_INIT_RXQ_EXT_IN msgrequest: Extended RXQ_INIT with additional mode
  1417. * flags
  1418. */
  1419. #define MC_CMD_INIT_RXQ_EXT_IN_LEN 544
  1420. /* Size, in entries */
  1421. #define MC_CMD_INIT_RXQ_EXT_IN_SIZE_OFST 0
  1422. /* The EVQ to send events to. This is an index originally specified to INIT_EVQ
  1423. */
  1424. #define MC_CMD_INIT_RXQ_EXT_IN_TARGET_EVQ_OFST 4
  1425. /* The value to put in the event data. Check hardware spec. for valid range. */
  1426. #define MC_CMD_INIT_RXQ_EXT_IN_LABEL_OFST 8
  1427. /* Desired instance. Must be set to a specific instance, which is a function
  1428. * local queue index.
  1429. */
  1430. #define MC_CMD_INIT_RXQ_EXT_IN_INSTANCE_OFST 12
  1431. /* There will be more flags here. */
  1432. #define MC_CMD_INIT_RXQ_EXT_IN_FLAGS_OFST 16
  1433. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_BUFF_MODE_LBN 0
  1434. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_BUFF_MODE_WIDTH 1
  1435. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT_LBN 1
  1436. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_HDR_SPLIT_WIDTH 1
  1437. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_TIMESTAMP_LBN 2
  1438. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_TIMESTAMP_WIDTH 1
  1439. #define MC_CMD_INIT_RXQ_EXT_IN_CRC_MODE_LBN 3
  1440. #define MC_CMD_INIT_RXQ_EXT_IN_CRC_MODE_WIDTH 4
  1441. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_CHAIN_LBN 7
  1442. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_CHAIN_WIDTH 1
  1443. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_PREFIX_LBN 8
  1444. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_PREFIX_WIDTH 1
  1445. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_DISABLE_SCATTER_LBN 9
  1446. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_DISABLE_SCATTER_WIDTH 1
  1447. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_MODE_LBN 10
  1448. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_MODE_WIDTH 4
  1449. /* enum: One packet per descriptor (for normal networking) */
  1450. #define MC_CMD_INIT_RXQ_EXT_IN_SINGLE_PACKET 0x0
  1451. /* enum: Pack multiple packets into large descriptors (for SolarCapture) */
  1452. #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM 0x1
  1453. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_SNAPSHOT_MODE_LBN 14
  1454. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_SNAPSHOT_MODE_WIDTH 1
  1455. #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE_LBN 15
  1456. #define MC_CMD_INIT_RXQ_EXT_IN_PACKED_STREAM_BUFF_SIZE_WIDTH 3
  1457. #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M 0x0 /* enum */
  1458. #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_512K 0x1 /* enum */
  1459. #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_256K 0x2 /* enum */
  1460. #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_128K 0x3 /* enum */
  1461. #define MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_64K 0x4 /* enum */
  1462. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES_LBN 18
  1463. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_WANT_OUTER_CLASSES_WIDTH 1
  1464. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_FORCE_EV_MERGING_LBN 19
  1465. #define MC_CMD_INIT_RXQ_EXT_IN_FLAG_FORCE_EV_MERGING_WIDTH 1
  1466. /* Owner ID to use if in buffer mode (zero if physical) */
  1467. #define MC_CMD_INIT_RXQ_EXT_IN_OWNER_ID_OFST 20
  1468. /* The port ID associated with the v-adaptor which should contain this DMAQ. */
  1469. #define MC_CMD_INIT_RXQ_EXT_IN_PORT_ID_OFST 24
  1470. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1471. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_OFST 28
  1472. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_LEN 8
  1473. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_LO_OFST 28
  1474. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_HI_OFST 32
  1475. #define MC_CMD_INIT_RXQ_EXT_IN_DMA_ADDR_NUM 64
  1476. /* Maximum length of packet to receive, if SNAPSHOT_MODE flag is set */
  1477. #define MC_CMD_INIT_RXQ_EXT_IN_SNAPSHOT_LENGTH_OFST 540
  1478. /* MC_CMD_INIT_RXQ_OUT msgresponse */
  1479. #define MC_CMD_INIT_RXQ_OUT_LEN 0
  1480. /* MC_CMD_INIT_RXQ_EXT_OUT msgresponse */
  1481. #define MC_CMD_INIT_RXQ_EXT_OUT_LEN 0
  1482. /***********************************/
  1483. /* MC_CMD_INIT_TXQ
  1484. */
  1485. #define MC_CMD_INIT_TXQ 0x82
  1486. #undef MC_CMD_0x82_PRIVILEGE_CTG
  1487. #define MC_CMD_0x82_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1488. /* MC_CMD_INIT_TXQ_IN msgrequest: Legacy INIT_TXQ request. Use extended version
  1489. * in new code.
  1490. */
  1491. #define MC_CMD_INIT_TXQ_IN_LENMIN 36
  1492. #define MC_CMD_INIT_TXQ_IN_LENMAX 252
  1493. #define MC_CMD_INIT_TXQ_IN_LEN(num) (28+8*(num))
  1494. /* Size, in entries */
  1495. #define MC_CMD_INIT_TXQ_IN_SIZE_OFST 0
  1496. /* The EVQ to send events to. This is an index originally specified to
  1497. * INIT_EVQ.
  1498. */
  1499. #define MC_CMD_INIT_TXQ_IN_TARGET_EVQ_OFST 4
  1500. /* The value to put in the event data. Check hardware spec. for valid range. */
  1501. #define MC_CMD_INIT_TXQ_IN_LABEL_OFST 8
  1502. /* Desired instance. Must be set to a specific instance, which is a function
  1503. * local queue index.
  1504. */
  1505. #define MC_CMD_INIT_TXQ_IN_INSTANCE_OFST 12
  1506. /* There will be more flags here. */
  1507. #define MC_CMD_INIT_TXQ_IN_FLAGS_OFST 16
  1508. #define MC_CMD_INIT_TXQ_IN_FLAG_BUFF_MODE_LBN 0
  1509. #define MC_CMD_INIT_TXQ_IN_FLAG_BUFF_MODE_WIDTH 1
  1510. #define MC_CMD_INIT_TXQ_IN_FLAG_IP_CSUM_DIS_LBN 1
  1511. #define MC_CMD_INIT_TXQ_IN_FLAG_IP_CSUM_DIS_WIDTH 1
  1512. #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_CSUM_DIS_LBN 2
  1513. #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_CSUM_DIS_WIDTH 1
  1514. #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_UDP_ONLY_LBN 3
  1515. #define MC_CMD_INIT_TXQ_IN_FLAG_TCP_UDP_ONLY_WIDTH 1
  1516. #define MC_CMD_INIT_TXQ_IN_CRC_MODE_LBN 4
  1517. #define MC_CMD_INIT_TXQ_IN_CRC_MODE_WIDTH 4
  1518. #define MC_CMD_INIT_TXQ_IN_FLAG_TIMESTAMP_LBN 8
  1519. #define MC_CMD_INIT_TXQ_IN_FLAG_TIMESTAMP_WIDTH 1
  1520. #define MC_CMD_INIT_TXQ_IN_FLAG_PACER_BYPASS_LBN 9
  1521. #define MC_CMD_INIT_TXQ_IN_FLAG_PACER_BYPASS_WIDTH 1
  1522. #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_IP_CSUM_EN_LBN 10
  1523. #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_IP_CSUM_EN_WIDTH 1
  1524. #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_TCP_CSUM_EN_LBN 11
  1525. #define MC_CMD_INIT_TXQ_IN_FLAG_INNER_TCP_CSUM_EN_WIDTH 1
  1526. /* Owner ID to use if in buffer mode (zero if physical) */
  1527. #define MC_CMD_INIT_TXQ_IN_OWNER_ID_OFST 20
  1528. /* The port ID associated with the v-adaptor which should contain this DMAQ. */
  1529. #define MC_CMD_INIT_TXQ_IN_PORT_ID_OFST 24
  1530. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1531. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_OFST 28
  1532. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_LEN 8
  1533. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_LO_OFST 28
  1534. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_HI_OFST 32
  1535. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_MINNUM 1
  1536. #define MC_CMD_INIT_TXQ_IN_DMA_ADDR_MAXNUM 28
  1537. /* MC_CMD_INIT_TXQ_EXT_IN msgrequest: Extended INIT_TXQ with additional mode
  1538. * flags
  1539. */
  1540. #define MC_CMD_INIT_TXQ_EXT_IN_LEN 544
  1541. /* Size, in entries */
  1542. #define MC_CMD_INIT_TXQ_EXT_IN_SIZE_OFST 0
  1543. /* The EVQ to send events to. This is an index originally specified to
  1544. * INIT_EVQ.
  1545. */
  1546. #define MC_CMD_INIT_TXQ_EXT_IN_TARGET_EVQ_OFST 4
  1547. /* The value to put in the event data. Check hardware spec. for valid range. */
  1548. #define MC_CMD_INIT_TXQ_EXT_IN_LABEL_OFST 8
  1549. /* Desired instance. Must be set to a specific instance, which is a function
  1550. * local queue index.
  1551. */
  1552. #define MC_CMD_INIT_TXQ_EXT_IN_INSTANCE_OFST 12
  1553. /* There will be more flags here. */
  1554. #define MC_CMD_INIT_TXQ_EXT_IN_FLAGS_OFST 16
  1555. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_BUFF_MODE_LBN 0
  1556. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_BUFF_MODE_WIDTH 1
  1557. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_IP_CSUM_DIS_LBN 1
  1558. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_IP_CSUM_DIS_WIDTH 1
  1559. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_CSUM_DIS_LBN 2
  1560. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_CSUM_DIS_WIDTH 1
  1561. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_UDP_ONLY_LBN 3
  1562. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TCP_UDP_ONLY_WIDTH 1
  1563. #define MC_CMD_INIT_TXQ_EXT_IN_CRC_MODE_LBN 4
  1564. #define MC_CMD_INIT_TXQ_EXT_IN_CRC_MODE_WIDTH 4
  1565. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TIMESTAMP_LBN 8
  1566. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TIMESTAMP_WIDTH 1
  1567. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_PACER_BYPASS_LBN 9
  1568. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_PACER_BYPASS_WIDTH 1
  1569. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_IP_CSUM_EN_LBN 10
  1570. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_IP_CSUM_EN_WIDTH 1
  1571. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_TCP_CSUM_EN_LBN 11
  1572. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_INNER_TCP_CSUM_EN_WIDTH 1
  1573. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TSOV2_EN_LBN 12
  1574. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_TSOV2_EN_WIDTH 1
  1575. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_CTPIO_LBN 13
  1576. #define MC_CMD_INIT_TXQ_EXT_IN_FLAG_CTPIO_WIDTH 1
  1577. /* Owner ID to use if in buffer mode (zero if physical) */
  1578. #define MC_CMD_INIT_TXQ_EXT_IN_OWNER_ID_OFST 20
  1579. /* The port ID associated with the v-adaptor which should contain this DMAQ. */
  1580. #define MC_CMD_INIT_TXQ_EXT_IN_PORT_ID_OFST 24
  1581. /* 64-bit address of 4k of 4k-aligned host memory buffer */
  1582. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_OFST 28
  1583. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_LEN 8
  1584. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_LO_OFST 28
  1585. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_HI_OFST 32
  1586. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_MINNUM 1
  1587. #define MC_CMD_INIT_TXQ_EXT_IN_DMA_ADDR_MAXNUM 64
  1588. /* Flags related to Qbb flow control mode. */
  1589. #define MC_CMD_INIT_TXQ_EXT_IN_QBB_FLAGS_OFST 540
  1590. #define MC_CMD_INIT_TXQ_EXT_IN_QBB_ENABLE_LBN 0
  1591. #define MC_CMD_INIT_TXQ_EXT_IN_QBB_ENABLE_WIDTH 1
  1592. #define MC_CMD_INIT_TXQ_EXT_IN_QBB_PRIORITY_LBN 1
  1593. #define MC_CMD_INIT_TXQ_EXT_IN_QBB_PRIORITY_WIDTH 3
  1594. /* MC_CMD_INIT_TXQ_OUT msgresponse */
  1595. #define MC_CMD_INIT_TXQ_OUT_LEN 0
  1596. /***********************************/
  1597. /* MC_CMD_FINI_EVQ
  1598. * Teardown an EVQ.
  1599. *
  1600. * All DMAQs or EVQs that point to the EVQ to tear down must be torn down first
  1601. * or the operation will fail with EBUSY
  1602. */
  1603. #define MC_CMD_FINI_EVQ 0x83
  1604. #undef MC_CMD_0x83_PRIVILEGE_CTG
  1605. #define MC_CMD_0x83_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1606. /* MC_CMD_FINI_EVQ_IN msgrequest */
  1607. #define MC_CMD_FINI_EVQ_IN_LEN 4
  1608. /* Instance of EVQ to destroy. Should be the same instance as that previously
  1609. * passed to INIT_EVQ
  1610. */
  1611. #define MC_CMD_FINI_EVQ_IN_INSTANCE_OFST 0
  1612. /* MC_CMD_FINI_EVQ_OUT msgresponse */
  1613. #define MC_CMD_FINI_EVQ_OUT_LEN 0
  1614. /***********************************/
  1615. /* MC_CMD_FINI_RXQ
  1616. * Teardown a RXQ.
  1617. */
  1618. #define MC_CMD_FINI_RXQ 0x84
  1619. #undef MC_CMD_0x84_PRIVILEGE_CTG
  1620. #define MC_CMD_0x84_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1621. /* MC_CMD_FINI_RXQ_IN msgrequest */
  1622. #define MC_CMD_FINI_RXQ_IN_LEN 4
  1623. /* Instance of RXQ to destroy */
  1624. #define MC_CMD_FINI_RXQ_IN_INSTANCE_OFST 0
  1625. /* MC_CMD_FINI_RXQ_OUT msgresponse */
  1626. #define MC_CMD_FINI_RXQ_OUT_LEN 0
  1627. /***********************************/
  1628. /* MC_CMD_FINI_TXQ
  1629. * Teardown a TXQ.
  1630. */
  1631. #define MC_CMD_FINI_TXQ 0x85
  1632. #undef MC_CMD_0x85_PRIVILEGE_CTG
  1633. #define MC_CMD_0x85_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1634. /* MC_CMD_FINI_TXQ_IN msgrequest */
  1635. #define MC_CMD_FINI_TXQ_IN_LEN 4
  1636. /* Instance of TXQ to destroy */
  1637. #define MC_CMD_FINI_TXQ_IN_INSTANCE_OFST 0
  1638. /* MC_CMD_FINI_TXQ_OUT msgresponse */
  1639. #define MC_CMD_FINI_TXQ_OUT_LEN 0
  1640. /***********************************/
  1641. /* MC_CMD_FILTER_OP
  1642. * Multiplexed MCDI call for filter operations
  1643. */
  1644. #define MC_CMD_FILTER_OP 0x8a
  1645. #undef MC_CMD_0x8a_PRIVILEGE_CTG
  1646. #define MC_CMD_0x8a_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  1647. /* MC_CMD_FILTER_OP_IN msgrequest */
  1648. #define MC_CMD_FILTER_OP_IN_LEN 108
  1649. /* identifies the type of operation requested */
  1650. #define MC_CMD_FILTER_OP_IN_OP_OFST 0
  1651. /* enum: single-recipient filter insert */
  1652. #define MC_CMD_FILTER_OP_IN_OP_INSERT 0x0
  1653. /* enum: single-recipient filter remove */
  1654. #define MC_CMD_FILTER_OP_IN_OP_REMOVE 0x1
  1655. /* enum: multi-recipient filter subscribe */
  1656. #define MC_CMD_FILTER_OP_IN_OP_SUBSCRIBE 0x2
  1657. /* enum: multi-recipient filter unsubscribe */
  1658. #define MC_CMD_FILTER_OP_IN_OP_UNSUBSCRIBE 0x3
  1659. /* enum: replace one recipient with another (warning - the filter handle may
  1660. * change)
  1661. */
  1662. #define MC_CMD_FILTER_OP_IN_OP_REPLACE 0x4
  1663. /* filter handle (for remove / unsubscribe operations) */
  1664. #define MC_CMD_FILTER_OP_IN_HANDLE_OFST 4
  1665. #define MC_CMD_FILTER_OP_IN_HANDLE_LEN 8
  1666. #define MC_CMD_FILTER_OP_IN_HANDLE_LO_OFST 4
  1667. #define MC_CMD_FILTER_OP_IN_HANDLE_HI_OFST 8
  1668. /* The port ID associated with the v-adaptor which should contain this filter.
  1669. */
  1670. #define MC_CMD_FILTER_OP_IN_PORT_ID_OFST 12
  1671. /* fields to include in match criteria */
  1672. #define MC_CMD_FILTER_OP_IN_MATCH_FIELDS_OFST 16
  1673. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_IP_LBN 0
  1674. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_IP_WIDTH 1
  1675. #define MC_CMD_FILTER_OP_IN_MATCH_DST_IP_LBN 1
  1676. #define MC_CMD_FILTER_OP_IN_MATCH_DST_IP_WIDTH 1
  1677. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_MAC_LBN 2
  1678. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_MAC_WIDTH 1
  1679. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_PORT_LBN 3
  1680. #define MC_CMD_FILTER_OP_IN_MATCH_SRC_PORT_WIDTH 1
  1681. #define MC_CMD_FILTER_OP_IN_MATCH_DST_MAC_LBN 4
  1682. #define MC_CMD_FILTER_OP_IN_MATCH_DST_MAC_WIDTH 1
  1683. #define MC_CMD_FILTER_OP_IN_MATCH_DST_PORT_LBN 5
  1684. #define MC_CMD_FILTER_OP_IN_MATCH_DST_PORT_WIDTH 1
  1685. #define MC_CMD_FILTER_OP_IN_MATCH_ETHER_TYPE_LBN 6
  1686. #define MC_CMD_FILTER_OP_IN_MATCH_ETHER_TYPE_WIDTH 1
  1687. #define MC_CMD_FILTER_OP_IN_MATCH_INNER_VLAN_LBN 7
  1688. #define MC_CMD_FILTER_OP_IN_MATCH_INNER_VLAN_WIDTH 1
  1689. #define MC_CMD_FILTER_OP_IN_MATCH_OUTER_VLAN_LBN 8
  1690. #define MC_CMD_FILTER_OP_IN_MATCH_OUTER_VLAN_WIDTH 1
  1691. #define MC_CMD_FILTER_OP_IN_MATCH_IP_PROTO_LBN 9
  1692. #define MC_CMD_FILTER_OP_IN_MATCH_IP_PROTO_WIDTH 1
  1693. #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF0_LBN 10
  1694. #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF0_WIDTH 1
  1695. #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF1_LBN 11
  1696. #define MC_CMD_FILTER_OP_IN_MATCH_FWDEF1_WIDTH 1
  1697. #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_MCAST_DST_LBN 30
  1698. #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_MCAST_DST_WIDTH 1
  1699. #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_UCAST_DST_LBN 31
  1700. #define MC_CMD_FILTER_OP_IN_MATCH_UNKNOWN_UCAST_DST_WIDTH 1
  1701. /* receive destination */
  1702. #define MC_CMD_FILTER_OP_IN_RX_DEST_OFST 20
  1703. /* enum: drop packets */
  1704. #define MC_CMD_FILTER_OP_IN_RX_DEST_DROP 0x0
  1705. /* enum: receive to host */
  1706. #define MC_CMD_FILTER_OP_IN_RX_DEST_HOST 0x1
  1707. /* enum: receive to MC */
  1708. #define MC_CMD_FILTER_OP_IN_RX_DEST_MC 0x2
  1709. /* enum: loop back to TXDP 0 */
  1710. #define MC_CMD_FILTER_OP_IN_RX_DEST_TX0 0x3
  1711. /* enum: loop back to TXDP 1 */
  1712. #define MC_CMD_FILTER_OP_IN_RX_DEST_TX1 0x4
  1713. /* receive queue handle (for multiple queue modes, this is the base queue) */
  1714. #define MC_CMD_FILTER_OP_IN_RX_QUEUE_OFST 24
  1715. /* receive mode */
  1716. #define MC_CMD_FILTER_OP_IN_RX_MODE_OFST 28
  1717. /* enum: receive to just the specified queue */
  1718. #define MC_CMD_FILTER_OP_IN_RX_MODE_SIMPLE 0x0
  1719. /* enum: receive to multiple queues using RSS context */
  1720. #define MC_CMD_FILTER_OP_IN_RX_MODE_RSS 0x1
  1721. /* enum: receive to multiple queues using .1p mapping */
  1722. #define MC_CMD_FILTER_OP_IN_RX_MODE_DOT1P_MAPPING 0x2
  1723. /* enum: install a filter entry that will never match; for test purposes only
  1724. */
  1725. #define MC_CMD_FILTER_OP_IN_RX_MODE_TEST_NEVER_MATCH 0x80000000
  1726. /* RSS context (for RX_MODE_RSS) or .1p mapping handle (for
  1727. * RX_MODE_DOT1P_MAPPING), as returned by MC_CMD_RSS_CONTEXT_ALLOC or
  1728. * MC_CMD_DOT1P_MAPPING_ALLOC.
  1729. */
  1730. #define MC_CMD_FILTER_OP_IN_RX_CONTEXT_OFST 32
  1731. /* transmit domain (reserved; set to 0) */
  1732. #define MC_CMD_FILTER_OP_IN_TX_DOMAIN_OFST 36
  1733. /* transmit destination (either set the MAC and/or PM bits for explicit
  1734. * control, or set this field to TX_DEST_DEFAULT for sensible default
  1735. * behaviour)
  1736. */
  1737. #define MC_CMD_FILTER_OP_IN_TX_DEST_OFST 40
  1738. /* enum: request default behaviour (based on filter type) */
  1739. #define MC_CMD_FILTER_OP_IN_TX_DEST_DEFAULT 0xffffffff
  1740. #define MC_CMD_FILTER_OP_IN_TX_DEST_MAC_LBN 0
  1741. #define MC_CMD_FILTER_OP_IN_TX_DEST_MAC_WIDTH 1
  1742. #define MC_CMD_FILTER_OP_IN_TX_DEST_PM_LBN 1
  1743. #define MC_CMD_FILTER_OP_IN_TX_DEST_PM_WIDTH 1
  1744. /* source MAC address to match (as bytes in network order) */
  1745. #define MC_CMD_FILTER_OP_IN_SRC_MAC_OFST 44
  1746. #define MC_CMD_FILTER_OP_IN_SRC_MAC_LEN 6
  1747. /* source port to match (as bytes in network order) */
  1748. #define MC_CMD_FILTER_OP_IN_SRC_PORT_OFST 50
  1749. #define MC_CMD_FILTER_OP_IN_SRC_PORT_LEN 2
  1750. /* destination MAC address to match (as bytes in network order) */
  1751. #define MC_CMD_FILTER_OP_IN_DST_MAC_OFST 52
  1752. #define MC_CMD_FILTER_OP_IN_DST_MAC_LEN 6
  1753. /* destination port to match (as bytes in network order) */
  1754. #define MC_CMD_FILTER_OP_IN_DST_PORT_OFST 58
  1755. #define MC_CMD_FILTER_OP_IN_DST_PORT_LEN 2
  1756. /* Ethernet type to match (as bytes in network order) */
  1757. #define MC_CMD_FILTER_OP_IN_ETHER_TYPE_OFST 60
  1758. #define MC_CMD_FILTER_OP_IN_ETHER_TYPE_LEN 2
  1759. /* Inner VLAN tag to match (as bytes in network order) */
  1760. #define MC_CMD_FILTER_OP_IN_INNER_VLAN_OFST 62
  1761. #define MC_CMD_FILTER_OP_IN_INNER_VLAN_LEN 2
  1762. /* Outer VLAN tag to match (as bytes in network order) */
  1763. #define MC_CMD_FILTER_OP_IN_OUTER_VLAN_OFST 64
  1764. #define MC_CMD_FILTER_OP_IN_OUTER_VLAN_LEN 2
  1765. /* IP protocol to match (in low byte; set high byte to 0) */
  1766. #define MC_CMD_FILTER_OP_IN_IP_PROTO_OFST 66
  1767. #define MC_CMD_FILTER_OP_IN_IP_PROTO_LEN 2
  1768. /* Firmware defined register 0 to match (reserved; set to 0) */
  1769. #define MC_CMD_FILTER_OP_IN_FWDEF0_OFST 68
  1770. /* Firmware defined register 1 to match (reserved; set to 0) */
  1771. #define MC_CMD_FILTER_OP_IN_FWDEF1_OFST 72
  1772. /* source IP address to match (as bytes in network order; set last 12 bytes to
  1773. * 0 for IPv4 address)
  1774. */
  1775. #define MC_CMD_FILTER_OP_IN_SRC_IP_OFST 76
  1776. #define MC_CMD_FILTER_OP_IN_SRC_IP_LEN 16
  1777. /* destination IP address to match (as bytes in network order; set last 12
  1778. * bytes to 0 for IPv4 address)
  1779. */
  1780. #define MC_CMD_FILTER_OP_IN_DST_IP_OFST 92
  1781. #define MC_CMD_FILTER_OP_IN_DST_IP_LEN 16
  1782. /* MC_CMD_FILTER_OP_EXT_IN msgrequest: Extension to MC_CMD_FILTER_OP_IN to
  1783. * include handling of VXLAN/NVGRE encapsulated frame filtering (which is
  1784. * supported on Medford only).
  1785. */
  1786. #define MC_CMD_FILTER_OP_EXT_IN_LEN 172
  1787. /* identifies the type of operation requested */
  1788. #define MC_CMD_FILTER_OP_EXT_IN_OP_OFST 0
  1789. /* Enum values, see field(s): */
  1790. /* MC_CMD_FILTER_OP_IN/OP */
  1791. /* filter handle (for remove / unsubscribe operations) */
  1792. #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_OFST 4
  1793. #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_LEN 8
  1794. #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_LO_OFST 4
  1795. #define MC_CMD_FILTER_OP_EXT_IN_HANDLE_HI_OFST 8
  1796. /* The port ID associated with the v-adaptor which should contain this filter.
  1797. */
  1798. #define MC_CMD_FILTER_OP_EXT_IN_PORT_ID_OFST 12
  1799. /* fields to include in match criteria */
  1800. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FIELDS_OFST 16
  1801. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_IP_LBN 0
  1802. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_IP_WIDTH 1
  1803. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_IP_LBN 1
  1804. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_IP_WIDTH 1
  1805. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_MAC_LBN 2
  1806. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_MAC_WIDTH 1
  1807. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_PORT_LBN 3
  1808. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_SRC_PORT_WIDTH 1
  1809. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_MAC_LBN 4
  1810. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_MAC_WIDTH 1
  1811. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_PORT_LBN 5
  1812. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_DST_PORT_WIDTH 1
  1813. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_ETHER_TYPE_LBN 6
  1814. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_ETHER_TYPE_WIDTH 1
  1815. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_INNER_VLAN_LBN 7
  1816. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_INNER_VLAN_WIDTH 1
  1817. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_OUTER_VLAN_LBN 8
  1818. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_OUTER_VLAN_WIDTH 1
  1819. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IP_PROTO_LBN 9
  1820. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IP_PROTO_WIDTH 1
  1821. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FWDEF0_LBN 10
  1822. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_FWDEF0_WIDTH 1
  1823. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_VNI_OR_VSID_LBN 11
  1824. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_VNI_OR_VSID_WIDTH 1
  1825. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_IP_LBN 12
  1826. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_IP_WIDTH 1
  1827. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_IP_LBN 13
  1828. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_IP_WIDTH 1
  1829. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_MAC_LBN 14
  1830. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_MAC_WIDTH 1
  1831. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_PORT_LBN 15
  1832. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_SRC_PORT_WIDTH 1
  1833. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_MAC_LBN 16
  1834. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_MAC_WIDTH 1
  1835. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_PORT_LBN 17
  1836. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_DST_PORT_WIDTH 1
  1837. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_ETHER_TYPE_LBN 18
  1838. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_ETHER_TYPE_WIDTH 1
  1839. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_INNER_VLAN_LBN 19
  1840. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_INNER_VLAN_WIDTH 1
  1841. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_OUTER_VLAN_LBN 20
  1842. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_OUTER_VLAN_WIDTH 1
  1843. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_IP_PROTO_LBN 21
  1844. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_IP_PROTO_WIDTH 1
  1845. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF0_LBN 22
  1846. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF0_WIDTH 1
  1847. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF1_LBN 23
  1848. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_FWDEF1_WIDTH 1
  1849. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_MCAST_DST_LBN 24
  1850. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_MCAST_DST_WIDTH 1
  1851. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_UCAST_DST_LBN 25
  1852. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_IFRM_UNKNOWN_UCAST_DST_WIDTH 1
  1853. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_MCAST_DST_LBN 30
  1854. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_MCAST_DST_WIDTH 1
  1855. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_UCAST_DST_LBN 31
  1856. #define MC_CMD_FILTER_OP_EXT_IN_MATCH_UNKNOWN_UCAST_DST_WIDTH 1
  1857. /* receive destination */
  1858. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_OFST 20
  1859. /* enum: drop packets */
  1860. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_DROP 0x0
  1861. /* enum: receive to host */
  1862. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_HOST 0x1
  1863. /* enum: receive to MC */
  1864. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_MC 0x2
  1865. /* enum: loop back to TXDP 0 */
  1866. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_TX0 0x3
  1867. /* enum: loop back to TXDP 1 */
  1868. #define MC_CMD_FILTER_OP_EXT_IN_RX_DEST_TX1 0x4
  1869. /* receive queue handle (for multiple queue modes, this is the base queue) */
  1870. #define MC_CMD_FILTER_OP_EXT_IN_RX_QUEUE_OFST 24
  1871. /* receive mode */
  1872. #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_OFST 28
  1873. /* enum: receive to just the specified queue */
  1874. #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_SIMPLE 0x0
  1875. /* enum: receive to multiple queues using RSS context */
  1876. #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_RSS 0x1
  1877. /* enum: receive to multiple queues using .1p mapping */
  1878. #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_DOT1P_MAPPING 0x2
  1879. /* enum: install a filter entry that will never match; for test purposes only
  1880. */
  1881. #define MC_CMD_FILTER_OP_EXT_IN_RX_MODE_TEST_NEVER_MATCH 0x80000000
  1882. /* RSS context (for RX_MODE_RSS) or .1p mapping handle (for
  1883. * RX_MODE_DOT1P_MAPPING), as returned by MC_CMD_RSS_CONTEXT_ALLOC or
  1884. * MC_CMD_DOT1P_MAPPING_ALLOC.
  1885. */
  1886. #define MC_CMD_FILTER_OP_EXT_IN_RX_CONTEXT_OFST 32
  1887. /* transmit domain (reserved; set to 0) */
  1888. #define MC_CMD_FILTER_OP_EXT_IN_TX_DOMAIN_OFST 36
  1889. /* transmit destination (either set the MAC and/or PM bits for explicit
  1890. * control, or set this field to TX_DEST_DEFAULT for sensible default
  1891. * behaviour)
  1892. */
  1893. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_OFST 40
  1894. /* enum: request default behaviour (based on filter type) */
  1895. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_DEFAULT 0xffffffff
  1896. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_MAC_LBN 0
  1897. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_MAC_WIDTH 1
  1898. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_PM_LBN 1
  1899. #define MC_CMD_FILTER_OP_EXT_IN_TX_DEST_PM_WIDTH 1
  1900. /* source MAC address to match (as bytes in network order) */
  1901. #define MC_CMD_FILTER_OP_EXT_IN_SRC_MAC_OFST 44
  1902. #define MC_CMD_FILTER_OP_EXT_IN_SRC_MAC_LEN 6
  1903. /* source port to match (as bytes in network order) */
  1904. #define MC_CMD_FILTER_OP_EXT_IN_SRC_PORT_OFST 50
  1905. #define MC_CMD_FILTER_OP_EXT_IN_SRC_PORT_LEN 2
  1906. /* destination MAC address to match (as bytes in network order) */
  1907. #define MC_CMD_FILTER_OP_EXT_IN_DST_MAC_OFST 52
  1908. #define MC_CMD_FILTER_OP_EXT_IN_DST_MAC_LEN 6
  1909. /* destination port to match (as bytes in network order) */
  1910. #define MC_CMD_FILTER_OP_EXT_IN_DST_PORT_OFST 58
  1911. #define MC_CMD_FILTER_OP_EXT_IN_DST_PORT_LEN 2
  1912. /* Ethernet type to match (as bytes in network order) */
  1913. #define MC_CMD_FILTER_OP_EXT_IN_ETHER_TYPE_OFST 60
  1914. #define MC_CMD_FILTER_OP_EXT_IN_ETHER_TYPE_LEN 2
  1915. /* Inner VLAN tag to match (as bytes in network order) */
  1916. #define MC_CMD_FILTER_OP_EXT_IN_INNER_VLAN_OFST 62
  1917. #define MC_CMD_FILTER_OP_EXT_IN_INNER_VLAN_LEN 2
  1918. /* Outer VLAN tag to match (as bytes in network order) */
  1919. #define MC_CMD_FILTER_OP_EXT_IN_OUTER_VLAN_OFST 64
  1920. #define MC_CMD_FILTER_OP_EXT_IN_OUTER_VLAN_LEN 2
  1921. /* IP protocol to match (in low byte; set high byte to 0) */
  1922. #define MC_CMD_FILTER_OP_EXT_IN_IP_PROTO_OFST 66
  1923. #define MC_CMD_FILTER_OP_EXT_IN_IP_PROTO_LEN 2
  1924. /* Firmware defined register 0 to match (reserved; set to 0) */
  1925. #define MC_CMD_FILTER_OP_EXT_IN_FWDEF0_OFST 68
  1926. /* VNI (for VXLAN/Geneve, when IP protocol is UDP) or VSID (for NVGRE, when IP
  1927. * protocol is GRE) to match (as bytes in network order; set last byte to 0 for
  1928. * VXLAN/NVGRE, or 1 for Geneve)
  1929. */
  1930. #define MC_CMD_FILTER_OP_EXT_IN_VNI_OR_VSID_OFST 72
  1931. #define MC_CMD_FILTER_OP_EXT_IN_VNI_VALUE_LBN 0
  1932. #define MC_CMD_FILTER_OP_EXT_IN_VNI_VALUE_WIDTH 24
  1933. #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_LBN 24
  1934. #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_WIDTH 8
  1935. /* enum: Match VXLAN traffic with this VNI */
  1936. #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_VXLAN 0x0
  1937. /* enum: Match Geneve traffic with this VNI */
  1938. #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_GENEVE 0x1
  1939. /* enum: Reserved for experimental development use */
  1940. #define MC_CMD_FILTER_OP_EXT_IN_VNI_TYPE_EXPERIMENTAL 0xfe
  1941. #define MC_CMD_FILTER_OP_EXT_IN_VSID_VALUE_LBN 0
  1942. #define MC_CMD_FILTER_OP_EXT_IN_VSID_VALUE_WIDTH 24
  1943. #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_LBN 24
  1944. #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_WIDTH 8
  1945. /* enum: Match NVGRE traffic with this VSID */
  1946. #define MC_CMD_FILTER_OP_EXT_IN_VSID_TYPE_NVGRE 0x0
  1947. /* source IP address to match (as bytes in network order; set last 12 bytes to
  1948. * 0 for IPv4 address)
  1949. */
  1950. #define MC_CMD_FILTER_OP_EXT_IN_SRC_IP_OFST 76
  1951. #define MC_CMD_FILTER_OP_EXT_IN_SRC_IP_LEN 16
  1952. /* destination IP address to match (as bytes in network order; set last 12
  1953. * bytes to 0 for IPv4 address)
  1954. */
  1955. #define MC_CMD_FILTER_OP_EXT_IN_DST_IP_OFST 92
  1956. #define MC_CMD_FILTER_OP_EXT_IN_DST_IP_LEN 16
  1957. /* VXLAN/NVGRE inner frame source MAC address to match (as bytes in network
  1958. * order)
  1959. */
  1960. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_MAC_OFST 108
  1961. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_MAC_LEN 6
  1962. /* VXLAN/NVGRE inner frame source port to match (as bytes in network order) */
  1963. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_PORT_OFST 114
  1964. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_PORT_LEN 2
  1965. /* VXLAN/NVGRE inner frame destination MAC address to match (as bytes in
  1966. * network order)
  1967. */
  1968. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_MAC_OFST 116
  1969. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_MAC_LEN 6
  1970. /* VXLAN/NVGRE inner frame destination port to match (as bytes in network
  1971. * order)
  1972. */
  1973. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_PORT_OFST 122
  1974. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_PORT_LEN 2
  1975. /* VXLAN/NVGRE inner frame Ethernet type to match (as bytes in network order)
  1976. */
  1977. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_ETHER_TYPE_OFST 124
  1978. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_ETHER_TYPE_LEN 2
  1979. /* VXLAN/NVGRE inner frame Inner VLAN tag to match (as bytes in network order)
  1980. */
  1981. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_INNER_VLAN_OFST 126
  1982. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_INNER_VLAN_LEN 2
  1983. /* VXLAN/NVGRE inner frame Outer VLAN tag to match (as bytes in network order)
  1984. */
  1985. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_OUTER_VLAN_OFST 128
  1986. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_OUTER_VLAN_LEN 2
  1987. /* VXLAN/NVGRE inner frame IP protocol to match (in low byte; set high byte to
  1988. * 0)
  1989. */
  1990. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_IP_PROTO_OFST 130
  1991. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_IP_PROTO_LEN 2
  1992. /* VXLAN/NVGRE inner frame Firmware defined register 0 to match (reserved; set
  1993. * to 0)
  1994. */
  1995. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_FWDEF0_OFST 132
  1996. /* VXLAN/NVGRE inner frame Firmware defined register 1 to match (reserved; set
  1997. * to 0)
  1998. */
  1999. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_FWDEF1_OFST 136
  2000. /* VXLAN/NVGRE inner frame source IP address to match (as bytes in network
  2001. * order; set last 12 bytes to 0 for IPv4 address)
  2002. */
  2003. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_IP_OFST 140
  2004. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_SRC_IP_LEN 16
  2005. /* VXLAN/NVGRE inner frame destination IP address to match (as bytes in network
  2006. * order; set last 12 bytes to 0 for IPv4 address)
  2007. */
  2008. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_IP_OFST 156
  2009. #define MC_CMD_FILTER_OP_EXT_IN_IFRM_DST_IP_LEN 16
  2010. /* MC_CMD_FILTER_OP_OUT msgresponse */
  2011. #define MC_CMD_FILTER_OP_OUT_LEN 12
  2012. /* identifies the type of operation requested */
  2013. #define MC_CMD_FILTER_OP_OUT_OP_OFST 0
  2014. /* Enum values, see field(s): */
  2015. /* MC_CMD_FILTER_OP_IN/OP */
  2016. /* Returned filter handle (for insert / subscribe operations). Note that these
  2017. * handles should be considered opaque to the host, although a value of
  2018. * 0xFFFFFFFF_FFFFFFFF is guaranteed never to be a valid handle.
  2019. */
  2020. #define MC_CMD_FILTER_OP_OUT_HANDLE_OFST 4
  2021. #define MC_CMD_FILTER_OP_OUT_HANDLE_LEN 8
  2022. #define MC_CMD_FILTER_OP_OUT_HANDLE_LO_OFST 4
  2023. #define MC_CMD_FILTER_OP_OUT_HANDLE_HI_OFST 8
  2024. /* enum: guaranteed invalid filter handle (low 32 bits) */
  2025. #define MC_CMD_FILTER_OP_OUT_HANDLE_LO_INVALID 0xffffffff
  2026. /* enum: guaranteed invalid filter handle (high 32 bits) */
  2027. #define MC_CMD_FILTER_OP_OUT_HANDLE_HI_INVALID 0xffffffff
  2028. /* MC_CMD_FILTER_OP_EXT_OUT msgresponse */
  2029. #define MC_CMD_FILTER_OP_EXT_OUT_LEN 12
  2030. /* identifies the type of operation requested */
  2031. #define MC_CMD_FILTER_OP_EXT_OUT_OP_OFST 0
  2032. /* Enum values, see field(s): */
  2033. /* MC_CMD_FILTER_OP_EXT_IN/OP */
  2034. /* Returned filter handle (for insert / subscribe operations). Note that these
  2035. * handles should be considered opaque to the host, although a value of
  2036. * 0xFFFFFFFF_FFFFFFFF is guaranteed never to be a valid handle.
  2037. */
  2038. #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_OFST 4
  2039. #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_LEN 8
  2040. #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_LO_OFST 4
  2041. #define MC_CMD_FILTER_OP_EXT_OUT_HANDLE_HI_OFST 8
  2042. /* Enum values, see field(s): */
  2043. /* MC_CMD_FILTER_OP_OUT/HANDLE */
  2044. /***********************************/
  2045. /* MC_CMD_ALLOC_VIS
  2046. * Allocate VIs for current PCI function.
  2047. */
  2048. #define MC_CMD_ALLOC_VIS 0x8b
  2049. #undef MC_CMD_0x8b_PRIVILEGE_CTG
  2050. #define MC_CMD_0x8b_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  2051. /* MC_CMD_ALLOC_VIS_IN msgrequest */
  2052. #define MC_CMD_ALLOC_VIS_IN_LEN 8
  2053. /* The minimum number of VIs that is acceptable */
  2054. #define MC_CMD_ALLOC_VIS_IN_MIN_VI_COUNT_OFST 0
  2055. /* The maximum number of VIs that would be useful */
  2056. #define MC_CMD_ALLOC_VIS_IN_MAX_VI_COUNT_OFST 4
  2057. /* MC_CMD_ALLOC_VIS_OUT msgresponse: Huntington-compatible VI_ALLOC request.
  2058. * Use extended version in new code.
  2059. */
  2060. #define MC_CMD_ALLOC_VIS_OUT_LEN 8
  2061. /* The number of VIs allocated on this function */
  2062. #define MC_CMD_ALLOC_VIS_OUT_VI_COUNT_OFST 0
  2063. /* The base absolute VI number allocated to this function. Required to
  2064. * correctly interpret wakeup events.
  2065. */
  2066. #define MC_CMD_ALLOC_VIS_OUT_VI_BASE_OFST 4
  2067. /* MC_CMD_ALLOC_VIS_EXT_OUT msgresponse */
  2068. #define MC_CMD_ALLOC_VIS_EXT_OUT_LEN 12
  2069. /* The number of VIs allocated on this function */
  2070. #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_COUNT_OFST 0
  2071. /* The base absolute VI number allocated to this function. Required to
  2072. * correctly interpret wakeup events.
  2073. */
  2074. #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_BASE_OFST 4
  2075. /* Function's port vi_shift value (always 0 on Huntington) */
  2076. #define MC_CMD_ALLOC_VIS_EXT_OUT_VI_SHIFT_OFST 8
  2077. /***********************************/
  2078. /* MC_CMD_FREE_VIS
  2079. * Free VIs for current PCI function. Any linked PIO buffers will be unlinked,
  2080. * but not freed.
  2081. */
  2082. #define MC_CMD_FREE_VIS 0x8c
  2083. #undef MC_CMD_0x8c_PRIVILEGE_CTG
  2084. #define MC_CMD_0x8c_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  2085. /* MC_CMD_FREE_VIS_IN msgrequest */
  2086. #define MC_CMD_FREE_VIS_IN_LEN 0
  2087. /* MC_CMD_FREE_VIS_OUT msgresponse */
  2088. #define MC_CMD_FREE_VIS_OUT_LEN 0
  2089. /***********************************/
  2090. /* MC_CMD_GET_PORT_ASSIGNMENT
  2091. * Get port assignment for current PCI function.
  2092. */
  2093. #define MC_CMD_GET_PORT_ASSIGNMENT 0xb8
  2094. #undef MC_CMD_0xb8_PRIVILEGE_CTG
  2095. #define MC_CMD_0xb8_PRIVILEGE_CTG SRIOV_CTG_GENERAL
  2096. /* MC_CMD_GET_PORT_ASSIGNMENT_IN msgrequest */
  2097. #define MC_CMD_GET_PORT_ASSIGNMENT_IN_LEN 0
  2098. /* MC_CMD_GET_PORT_ASSIGNMENT_OUT msgresponse */
  2099. #define MC_CMD_GET_PORT_ASSIGNMENT_OUT_LEN 4
  2100. /* Identifies the port assignment for this function. */
  2101. #define MC_CMD_GET_PORT_ASSIGNMENT_OUT_PORT_OFST 0
  2102. /***********************************/
  2103. /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS
  2104. * Configure UDP ports for tunnel encapsulation hardware acceleration. The
  2105. * parser-dispatcher will attempt to parse traffic on these ports as tunnel
  2106. * encapsulation PDUs and filter them using the tunnel encapsulation filter
  2107. * chain rather than the standard filter chain. Note that this command can
  2108. * cause all functions to see a reset. (Available on Medford only.)
  2109. */
  2110. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS 0x117
  2111. #undef MC_CMD_0x117_PRIVILEGE_CTG
  2112. #define MC_CMD_0x117_PRIVILEGE_CTG SRIOV_CTG_ADMIN
  2113. /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN msgrequest */
  2114. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LENMIN 4
  2115. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LENMAX 68
  2116. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_LEN(num) (4+4*(num))
  2117. /* Flags */
  2118. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_FLAGS_OFST 0
  2119. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_FLAGS_LEN 2
  2120. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_UNLOADING_LBN 0
  2121. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_UNLOADING_WIDTH 1
  2122. /* The number of entries in the ENTRIES array */
  2123. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_NUM_ENTRIES_OFST 2
  2124. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_NUM_ENTRIES_LEN 2
  2125. /* Entries defining the UDP port to protocol mapping, each laid out as a
  2126. * TUNNEL_ENCAP_UDP_PORT_ENTRY
  2127. */
  2128. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_OFST 4
  2129. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_LEN 4
  2130. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_MINNUM 0
  2131. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_IN_ENTRIES_MAXNUM 16
  2132. /* MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT msgresponse */
  2133. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_LEN 2
  2134. /* Flags */
  2135. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_FLAGS_OFST 0
  2136. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_FLAGS_LEN 2
  2137. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_RESETTING_LBN 0
  2138. #define MC_CMD_SET_TUNNEL_ENCAP_UDP_PORTS_OUT_RESETTING_WIDTH 1
  2139. #endif /* SFC_MCDI_PCOL_H */