aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2012-10-10 18:24:51 -0400
committerBen Hutchings <bhutchings@solarflare.com>2013-08-22 14:26:01 -0400
commitf5253d92567b193c6aa137a08e7bb3b06fafc985 (patch)
tree1eecc53ca7c8010698461451acf93a098c2c23ac
parent8803e15042fbf5bd53b9b43147a91e3f50cffb03 (diff)
sfc: Define and use MCDI_POPULATE_DWORD_{1,2,3,4,5,6,7}
There is only one user now, but we're about to add many more. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
-rw-r--r--drivers/net/ethernet/sfc/mcdi.h54
-rw-r--r--drivers/net/ethernet/sfc/mcdi_port.c18
2 files changed, 62 insertions, 10 deletions
diff --git a/drivers/net/ethernet/sfc/mcdi.h b/drivers/net/ethernet/sfc/mcdi.h
index 69586e02bfca..a465cc154139 100644
--- a/drivers/net/ethernet/sfc/mcdi.h
+++ b/drivers/net/ethernet/sfc/mcdi.h
@@ -128,6 +128,60 @@ extern void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev);
128 EFX_POPULATE_DWORD_1(*_MCDI_DWORD(_buf, _field), EFX_DWORD_0, _value) 128 EFX_POPULATE_DWORD_1(*_MCDI_DWORD(_buf, _field), EFX_DWORD_0, _value)
129#define MCDI_DWORD(_buf, _field) \ 129#define MCDI_DWORD(_buf, _field) \
130 EFX_DWORD_FIELD(*_MCDI_DWORD(_buf, _field), EFX_DWORD_0) 130 EFX_DWORD_FIELD(*_MCDI_DWORD(_buf, _field), EFX_DWORD_0)
131#define MCDI_POPULATE_DWORD_1(_buf, _field, _name1, _value1) \
132 EFX_POPULATE_DWORD_1(*_MCDI_DWORD(_buf, _field), \
133 MC_CMD_ ## _name1, _value1)
134#define MCDI_POPULATE_DWORD_2(_buf, _field, _name1, _value1, \
135 _name2, _value2) \
136 EFX_POPULATE_DWORD_2(*_MCDI_DWORD(_buf, _field), \
137 MC_CMD_ ## _name1, _value1, \
138 MC_CMD_ ## _name2, _value2)
139#define MCDI_POPULATE_DWORD_3(_buf, _field, _name1, _value1, \
140 _name2, _value2, _name3, _value3) \
141 EFX_POPULATE_DWORD_3(*_MCDI_DWORD(_buf, _field), \
142 MC_CMD_ ## _name1, _value1, \
143 MC_CMD_ ## _name2, _value2, \
144 MC_CMD_ ## _name3, _value3)
145#define MCDI_POPULATE_DWORD_4(_buf, _field, _name1, _value1, \
146 _name2, _value2, _name3, _value3, \
147 _name4, _value4) \
148 EFX_POPULATE_DWORD_4(*_MCDI_DWORD(_buf, _field), \
149 MC_CMD_ ## _name1, _value1, \
150 MC_CMD_ ## _name2, _value2, \
151 MC_CMD_ ## _name3, _value3, \
152 MC_CMD_ ## _name4, _value4)
153#define MCDI_POPULATE_DWORD_5(_buf, _field, _name1, _value1, \
154 _name2, _value2, _name3, _value3, \
155 _name4, _value4, _name5, _value5) \
156 EFX_POPULATE_DWORD_5(*_MCDI_DWORD(_buf, _field), \
157 MC_CMD_ ## _name1, _value1, \
158 MC_CMD_ ## _name2, _value2, \
159 MC_CMD_ ## _name3, _value3, \
160 MC_CMD_ ## _name4, _value4, \
161 MC_CMD_ ## _name5, _value5)
162#define MCDI_POPULATE_DWORD_6(_buf, _field, _name1, _value1, \
163 _name2, _value2, _name3, _value3, \
164 _name4, _value4, _name5, _value5, \
165 _name6, _value6) \
166 EFX_POPULATE_DWORD_6(*_MCDI_DWORD(_buf, _field), \
167 MC_CMD_ ## _name1, _value1, \
168 MC_CMD_ ## _name2, _value2, \
169 MC_CMD_ ## _name3, _value3, \
170 MC_CMD_ ## _name4, _value4, \
171 MC_CMD_ ## _name5, _value5, \
172 MC_CMD_ ## _name6, _value6)
173#define MCDI_POPULATE_DWORD_7(_buf, _field, _name1, _value1, \
174 _name2, _value2, _name3, _value3, \
175 _name4, _value4, _name5, _value5, \
176 _name6, _value6, _name7, _value7) \
177 EFX_POPULATE_DWORD_7(*_MCDI_DWORD(_buf, _field), \
178 MC_CMD_ ## _name1, _value1, \
179 MC_CMD_ ## _name2, _value2, \
180 MC_CMD_ ## _name3, _value3, \
181 MC_CMD_ ## _name4, _value4, \
182 MC_CMD_ ## _name5, _value5, \
183 MC_CMD_ ## _name6, _value6, \
184 MC_CMD_ ## _name7, _value7)
131#define MCDI_SET_QWORD(_buf, _field, _value) \ 185#define MCDI_SET_QWORD(_buf, _field, _value) \
132 do { \ 186 do { \
133 EFX_POPULATE_DWORD_1(_MCDI_DWORD(_buf, _field)[0], \ 187 EFX_POPULATE_DWORD_1(_MCDI_DWORD(_buf, _field)[0], \
diff --git a/drivers/net/ethernet/sfc/mcdi_port.c b/drivers/net/ethernet/sfc/mcdi_port.c
index e359227e6b17..30e8a1936fc2 100644
--- a/drivers/net/ethernet/sfc/mcdi_port.c
+++ b/drivers/net/ethernet/sfc/mcdi_port.c
@@ -926,21 +926,19 @@ static int efx_mcdi_mac_stats(struct efx_nic *efx, dma_addr_t dma_addr,
926{ 926{
927 MCDI_DECLARE_BUF(inbuf, MC_CMD_MAC_STATS_IN_LEN); 927 MCDI_DECLARE_BUF(inbuf, MC_CMD_MAC_STATS_IN_LEN);
928 int rc; 928 int rc;
929 efx_dword_t *cmd_ptr;
930 int period = enable ? 1000 : 0; 929 int period = enable ? 1000 : 0;
931 930
932 BUILD_BUG_ON(MC_CMD_MAC_STATS_OUT_DMA_LEN != 0); 931 BUILD_BUG_ON(MC_CMD_MAC_STATS_OUT_DMA_LEN != 0);
933 932
934 MCDI_SET_QWORD(inbuf, MAC_STATS_IN_DMA_ADDR, dma_addr); 933 MCDI_SET_QWORD(inbuf, MAC_STATS_IN_DMA_ADDR, dma_addr);
935 cmd_ptr = (efx_dword_t *)MCDI_PTR(inbuf, MAC_STATS_IN_CMD); 934 MCDI_POPULATE_DWORD_7(inbuf, MAC_STATS_IN_CMD,
936 EFX_POPULATE_DWORD_7(*cmd_ptr, 935 MAC_STATS_IN_DMA, !!enable,
937 MC_CMD_MAC_STATS_IN_DMA, !!enable, 936 MAC_STATS_IN_CLEAR, clear,
938 MC_CMD_MAC_STATS_IN_CLEAR, clear, 937 MAC_STATS_IN_PERIODIC_CHANGE, 1,
939 MC_CMD_MAC_STATS_IN_PERIODIC_CHANGE, 1, 938 MAC_STATS_IN_PERIODIC_ENABLE, !!enable,
940 MC_CMD_MAC_STATS_IN_PERIODIC_ENABLE, !!enable, 939 MAC_STATS_IN_PERIODIC_CLEAR, 0,
941 MC_CMD_MAC_STATS_IN_PERIODIC_CLEAR, 0, 940 MAC_STATS_IN_PERIODIC_NOEVENT, 1,
942 MC_CMD_MAC_STATS_IN_PERIODIC_NOEVENT, 1, 941 MAC_STATS_IN_PERIOD_MS, period);
943 MC_CMD_MAC_STATS_IN_PERIOD_MS, period);
944 MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len); 942 MCDI_SET_DWORD(inbuf, MAC_STATS_IN_DMA_LEN, dma_len);
945 943
946 rc = efx_mcdi_rpc(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf), 944 rc = efx_mcdi_rpc(efx, MC_CMD_MAC_STATS, inbuf, sizeof(inbuf),