1/*
2 * Copyright (c) 2007, 2008, 2009, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#ifndef MCDI_RPC_H_
11#define MCDI_RPC_H_
12
13// MCDI Constant Offsets
14#define MCDI_REBOOT_OFFSET(a) (a? 0x7fc/4 :0x7f8/4)
15#define MCDI_PDU(a) (a? 0x108/4 : 0x008/4)
16#define MCDI_DORBELL(a) (a? 0x004/4: 0x000)
17#define MCDI_MAC_PORT_OFFSET(a) (a? 50 : 44)
18// CMD for getting assertions
19#define CMD_GET_ASSERTS 0x6
20#define CMD_GET_ASSERTS_IN_LEN 4
21#define CMD_GET_ASSERTS_IN_CLEAR_OFFSET 0
22#define CMD_GET_ASSERTS_OUT_LEN 140
23#define CMD_GET_ASSERTS_FLAG_THR_FAIL 0x2
24#define CMD_GET_ASSERTS_FLAG_SYS_FAIL 0x3
25#define CMD_GET_ASSERTS_FLAG_WDOG_FAIL 0x4
26// CMD for Driver attaching
27#define CMD_DRV_ATTACH 0x1c
28#define CMD_DRV_ATTACH_IN_LEN 8
29#define CMD_DRV_ATTACH_OUT_LEN 4
30// CMD for Reboot
31#define CMD_REBOOT 0x3d
32#define CMD_REBOOT_IN_LEN 4
33// CMD fetting firmware version
34#define CMD_GET_VERSION 0x8
35#define CMD_GET_VERSION_OUT_LEN 32
36// CMD for Port reset
37#define CMD_PORT_RESET 0x20
38// CMD for WoL Filter get
39#define CMD_WOL_FILTER_GET 0x45
40#define CMD_WOL_FILTER_RESET 0x34
41#define CMD_WOL_FILTER_GET_OUT_LEN 4
42// CMD for getting Board config
43#define CMD_GET_BOARD_CONFIG 0x18
44#define CMD_GET_BOARD_CONFIG_OUT_LEN 136
45#define CMD_GET_BOARD_CONFIG_OUT_CAPABILITIES(a) (a? 40: 36)
46// CMD SRIOV
47#define SRIOV_BASE 0x40
48#define CMD_SRIOV 0x30
49#define CMD_SRIOV_IN_LEN 12
50#define CMD_SRIOV_OUT_LEN 8
51// CMD PTP
52#define CMD_PTP 0xb
53#define CMD_PTP_IN_LEN 4
54#define PTP_DISABLE 0x2
55// CMD get resource limits
56#define CMD_GET_RESOURCE_LIMITS 0x4f
57#define CMD_GET_RESOURCE_LIMITS_OUT_LEN 16
58// CMD for ports setup
59#define CMD_GET_LINK 0x29
60#define CMD_GET_LINK_OUT_LEN 28
61#define CMD_GET_LINK_OUT_SPEED_OFFSET 8
62#define CMD_GET_LINK_OUT_FLAGS_OFFSET 16
63#define CMD_GET_LINK_OUT_FCNTL_OFFSET 20
64#define CMD_GET_LINK_OUT_MAC_FAULT_OFFSET 24
65
66#define CMD_GET_LOOPBACK_MODES 0x28
67#define CMD_GET_LOOPBACK_MODES_OUT_LEN 32
68#define CMD_GET_LOOPBACK_MODES_SUGGESTED_OFFSET 24
69// CMD for setting link
70#define CMD_SET_LINK 0x2a
71#define CMD_SET_LINK_IN_LEN 16
72#define CMD_SET_LINK_IN_CAP_OFFSET 0
73#define CMD_SET_LINK_IN_FLAGS_OFFSET 4
74#define CMD_SET_LINK_IN_LOOPBACK_MODE_OFFSET 8
75#define CMD_SET_LINK_IN_LOOPBACK_SPEED_OFFSET 12
76// CMD for enable logging
77#define CMD_LOG_CTRL 0x7
78#define CMD_LOG_CTRL_IN_LEN 8
79// CMD for setting mac address
80#define CMD_SET_MAC 0x2c
81#define CMD_SET_MAC_IN_LEN 24
82#define CMD_SET_MAC_IN_ADR_OFFSET 8
83#define CMD_SET_MAC_IN_MTU_OFFSET 0
84#define CMD_SET_MAC_IN_DRAIN_OFFSET 4
85#define CMD_SET_MAC_IN_REJECT_OFFSET 16
86#define CMD_SET_MAC_IN_FCTNL_OFFSET 20
87// CMD for setting multicast hash
88#define CMD_SET_MCAST_HASH 0x35
89#define CMD_SET_MCAST_HASH_IN_LEN 32
90#define CMD_SET_MCAST_IN_HASH0_OFFSET 0
91#define CMD_SET_MCAST_IN_HASH1_OFFSET 16
92// CMD for getting phy config
93#define CMD_GET_PHY_CFG 0x24
94#define CMD_GET_PHY_CFG_OUT_LEN 72
95#define CMD_GET_PHY_CFG_OUT_FLAGS_OFFSET 0
96#define CMD_GET_PHY_CFG_OUT_TYPE_OFFSET 4
97#define CMD_GET_PHY_CFG_OUT_CAP_OFFSET 8
98#define CMD_GET_PHY_CFG_OUT_MEDIA_OFFSET 44
99// CMD for getting phy state out
100#define CMD_GET_PHY_STATE 0x43
101#define CMD_GET_PHY_STATE_OUT_LEN 4
102// CMD for mon probe
103#define CMD_SENSOR_INFO 0x41
104#define CMD_SENSOR_INFO_OUT_LEN 252
105#define CMD_SENSOR_INFO_OUT_MASK 0
106// CMD for BIST test
107#define CMD_START_BIST 0x25
108#define CMD_START_BIST_IN_LEN 4
109#define CMD_PHY_BIST 5
110#define CMD_POLL_BIST 0x26
111#define CMD_POLL_BIST_RUNNING 1
112#define CMD_POLL_BIST_PASSED  2
113#define CMD_POLL_BIST_FAILED  3
114#define CMD_POLL_BIST_OUT_LEN 8
115// CMD for MAC stats
116#define CMD_MAC_STATS_IN_LEN 16
117#define CMD_MAC_STATS 0x2e
118#define CMD_MAC_STATS_IN_CMD_OFFSET 8
119#define CMD_MAC_STATS_IN_ADDR_LO_OFFSET 0
120#define CMD_MAC_STATS_IN_ADDR_HI_OFFSET 4
121#define CMD_MAC_STATS_IN_DMA_LEN_OFFSET 12
122// CMD for PHY stats
123#define CMD_PHY_STATS 0x2d
124#define CMD_PHY_STATS_IN_LEN 8
125#define CMD_PHY_STATS_IN_ADDR_OFFSET 0
126// CMD for info about virtual NVRAM partition
127#define CMD_NVRAM_INFO 0x37
128#define CMD_NVRAM_INFO_IN_LEN 4
129#define CMD_NVRAM_INFO_IN_TYPE_OFFSET 0
130#define CMD_NVRAM_INFO_OUT_LEN 24
131//CMD
132#define CMD_NVRAM_TYPES 0x36
133#define CMD_NVRAM_TYPES_OUT_LEN 4
134errval_t mcdi_rpc(unsigned cmd, const uint8_t *in, uint32_t inlen,
135             uint8_t *out, uint32_t outlen, uint32_t *outlen_actual,
136             bool port, sfn5122f_t *d);
137void init_mcdi_mutex(void);
138
139
140#endif
141
142
143