Lines Matching full:cdx

26 #include <linux/cdx/bitfield.h>
28 #include <linux/cdx/mcdi.h>
31 static void cdx_mcdi_cancel_cmd(struct cdx_mcdi *cdx, struct cdx_mcdi_cmd *cmd);
32 static void cdx_mcdi_wait_for_cleanup(struct cdx_mcdi *cdx);
33 static int cdx_mcdi_rpc_async_internal(struct cdx_mcdi *cdx,
49 static void cdx_mcdi_mode_fail(struct cdx_mcdi *cdx, struct list_head *cleanup_list);
50 static void _cdx_mcdi_display_error(struct cdx_mcdi *cdx, unsigned int cmd,
95 static unsigned long cdx_mcdi_rpc_timeout(struct cdx_mcdi *cdx, unsigned int cmd) in cdx_mcdi_rpc_timeout() argument
97 if (!cdx->mcdi_ops->mcdi_rpc_timeout) in cdx_mcdi_rpc_timeout()
100 return cdx->mcdi_ops->mcdi_rpc_timeout(cdx, cmd); in cdx_mcdi_rpc_timeout()
105 * @cdx: Handle to the CDX MCDI structure
108 * for the CDX device, including the workqueue, locking primitives, and command
116 int cdx_mcdi_init(struct cdx_mcdi *cdx) in cdx_mcdi_init() argument
121 cdx->mcdi = kzalloc(sizeof(*cdx->mcdi), GFP_KERNEL); in cdx_mcdi_init()
122 if (!cdx->mcdi) in cdx_mcdi_init()
125 mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_init()
126 mcdi->cdx = cdx; in cdx_mcdi_init()
140 kfree(cdx->mcdi); in cdx_mcdi_init()
141 cdx->mcdi = NULL; in cdx_mcdi_init()
149 * @cdx: Handle to the CDX MCDI structure
155 void cdx_mcdi_finish(struct cdx_mcdi *cdx) in cdx_mcdi_finish() argument
159 mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_finish()
163 cdx_mcdi_wait_for_cleanup(cdx); in cdx_mcdi_finish()
166 kfree(cdx->mcdi); in cdx_mcdi_finish()
167 cdx->mcdi = NULL; in cdx_mcdi_finish()
183 static void cdx_mcdi_wait_for_cleanup(struct cdx_mcdi *cdx) in cdx_mcdi_wait_for_cleanup() argument
185 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_wait_for_cleanup()
194 int cdx_mcdi_wait_for_quiescence(struct cdx_mcdi *cdx, in cdx_mcdi_wait_for_quiescence() argument
197 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_wait_for_quiescence()
242 static void cdx_mcdi_send_request(struct cdx_mcdi *cdx, in cdx_mcdi_send_request() argument
245 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_send_request()
287 cdx->mcdi_ops->mcdi_request(cdx, hdr, hdr_len, inbuf, inlen); in cdx_mcdi_send_request()
292 static int cdx_mcdi_errno(struct cdx_mcdi *cdx, unsigned int mcdi_err) in cdx_mcdi_errno() argument
339 static void cdx_mcdi_process_cleanup_list(struct cdx_mcdi *cdx, in cdx_mcdi_process_cleanup_list() argument
342 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_process_cleanup_list()
352 cmd->completer(cdx, cmd->cookie, cmd->rc, in cdx_mcdi_process_cleanup_list()
399 static void cdx_mcdi_cancel_cmd(struct cdx_mcdi *cdx, struct cdx_mcdi_cmd *cmd) in cdx_mcdi_cancel_cmd() argument
401 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_cancel_cmd()
410 cdx_mcdi_process_cleanup_list(cdx, &cleanup_list); in cdx_mcdi_cancel_cmd()
428 static void cdx_mcdi_rpc_completer(struct cdx_mcdi *cdx, unsigned long cookie, in cdx_mcdi_rpc_completer() argument
446 static int cdx_mcdi_rpc_sync(struct cdx_mcdi *cdx, unsigned int cmd, in cdx_mcdi_rpc_sync() argument
485 rc = cdx_mcdi_rpc_async_internal(cdx, cmd_item, &handle); in cdx_mcdi_rpc_sync()
492 cdx_mcdi_rpc_timeout(cdx, cmd)) && in cdx_mcdi_rpc_sync()
497 cdx_mcdi_cancel_cmd(cdx, cmd_item); in cdx_mcdi_rpc_sync()
522 static int cdx_mcdi_rpc_async_internal(struct cdx_mcdi *cdx, in cdx_mcdi_rpc_async_internal() argument
526 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_rpc_async_internal()
554 struct cdx_mcdi *cdx = mcdi->cdx; in cdx_mcdi_cmd_start_or_queue() local
561 cdx_mcdi_send_request(cdx, cmd); in cdx_mcdi_cmd_start_or_queue()
582 * @cdx: Handle to the CDX MCDI structure
593 void cdx_mcdi_process_cmd(struct cdx_mcdi *cdx, struct cdx_dword *outbuf, int len) in cdx_mcdi_process_cmd() argument
605 mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_process_cmd()
628 cdx_mcdi_process_cleanup_list(mcdi->cdx, &cleanup_list); in cdx_mcdi_process_cmd()
659 struct cdx_mcdi *cdx = mcdi->cdx; in cdx_mcdi_complete_cmd() local
709 _cdx_mcdi_display_error(cdx, cmd->cmd, in cdx_mcdi_complete_cmd()
711 cdx_mcdi_errno(cdx, rc)); in cdx_mcdi_complete_cmd()
713 rc = cdx_mcdi_errno(cdx, rc); in cdx_mcdi_complete_cmd()
754 struct cdx_mcdi *cdx = mcdi->cdx; in cdx_mcdi_timeout_cmd() local
763 cdx_mcdi_mode_fail(cdx, cleanup_list); in cdx_mcdi_timeout_cmd()
768 * @cdx: NIC through which to issue the command
790 int cdx_mcdi_rpc(struct cdx_mcdi *cdx, unsigned int cmd, in cdx_mcdi_rpc() argument
795 return cdx_mcdi_rpc_sync(cdx, cmd, inbuf, inlen, outbuf, outlen, in cdx_mcdi_rpc()
802 * @cdx: NIC through which to issue the command
819 cdx_mcdi_rpc_async(struct cdx_mcdi *cdx, unsigned int cmd, in cdx_mcdi_rpc_async() argument
839 return cdx_mcdi_rpc_async_internal(cdx, cmd_item, NULL); in cdx_mcdi_rpc_async()
842 static void _cdx_mcdi_display_error(struct cdx_mcdi *cdx, unsigned int cmd, in _cdx_mcdi_display_error() argument
854 static void cdx_mcdi_mode_fail(struct cdx_mcdi *cdx, struct list_head *cleanup_list) in cdx_mcdi_mode_fail() argument
856 struct cdx_mcdi_iface *mcdi = cdx_mcdi_if(cdx); in cdx_mcdi_mode_fail()