23 #include "../../include/public/mlx_bail.h" 24 #include "../../include/public/mlx_icmd.h" 25 #include "../../include/public/mlx_pci_gw.h" 26 #include "../../include/public/mlx_utils.h" 45 #define ICMD_GET_SEMAPHORE_TRIES 2560 60 if (semaphore_id ==
buffer) {
62 utils->icmd.took_semaphore =
TRUE;
67 if (semaphore_id !=
buffer) {
89 if (utils->icmd.took_semaphore ==
FALSE) {
90 goto semaphore_not_taken;
96 utils->icmd.took_semaphore =
FALSE;
115 if (utils->icmd.icmd_opened ==
TRUE) {
119 utils->icmd.took_semaphore =
FALSE;
125 utils->icmd.icmd_opened =
TRUE;
151 #define MLX_ICMD_OPCODE_ALIGN 16 152 #define MLX_ICMD_OPCODE_MASK 0xffff 186 #define MLX_ICMD_BUSY_ALIGN 0 187 #define MLX_ICMD_BUSY_MASK 0x1 201 #define MLX_ICMD_BUSY_MAX_ITERATIONS 1024 234 if (utils ==
NULL || out_status ==
NULL) {
243 #define MLX_ICMD_STATUS_ALIGN 8 244 #define MLX_ICMD_STATUS_MASK 0xff 270 for (data_offset = 0 ; data_offset*dword_size < data_size ; data_offset++) {
299 for (data_offset = 0 ; data_offset*dword_size < data_size ; data_offset++) {
328 if (write_data_size > utils->icmd.max_cmd_size ||
329 read_data_size > utils->icmd.max_cmd_size) {
340 if (write_data_size != 0) {
351 if (icmd_status != 0) {
356 if (read_data_size != 0) {
#define ICMD_GET_SEMAPHORE_TRIES
#define MLX_INVALID_PARAMETER
mlx_status mlx_pci_gw_read(IN mlx_utils *utils, IN mlx_pci_gw_space space, IN mlx_uint32 address, OUT mlx_pci_gw_buffer *buffer)
mlx_status mlx_icmd_send_command(IN mlx_utils *utils, IN mlx_uint16 opcode, IN OUT mlx_void *data, IN mlx_uint32 write_data_size, IN mlx_uint32 read_data_size)
mlx_status mlx_utils_delay_in_ms(IN mlx_uint32 msecs)
FILE_LICENCE(GPL2_OR_LATER)
#define MLX_ICMD_BUSY_ALIGN
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
#define MLX_ICMD_OPCODE_MASK
static mlx_status mlx_icmd_init(IN mlx_utils *utils)
#define MLX_ICMD_SEMAPHORE_ADDR
#define MLX_ICMD_BUSY_MAX_ITERATIONS
#define MLX_ICMD_CTRL_ADDR
#define MLX_ICMD_MB_SIZE_ADDR
static mlx_status mlx_icmd_get_status(IN mlx_utils *utils, OUT mlx_uint32 *out_status)
#define PCI_GW_SPACE_ALL_ICMD
#define MLX_ICMD_BUSY_MASK
static mlx_status mlx_icmd_set_opcode(IN mlx_utils *utils, IN mlx_uint16 opcode)
static mlx_status mlx_icmd_go(IN mlx_utils *utils)
#define MLX_ICMD_STATUS_MASK
mlx_status mlx_pci_gw_write(IN mlx_utils *utils, IN mlx_pci_gw_space space, IN mlx_uint32 address, IN mlx_pci_gw_buffer buffer)
static mlx_status mlx_icmd_read_buffer(IN mlx_utils *utils, OUT mlx_void *data, IN mlx_uint32 data_size)
static mlx_status mlx_icmd_get_semaphore(IN mlx_utils *utils)
static mlx_status mlx_icmd_write_buffer(IN mlx_utils *utils, IN mlx_void *data, IN mlx_uint32 data_size)
#define MLX_DEBUG_ERROR(...)
mlx_status mlx_utils_rand(IN mlx_utils *utils, OUT mlx_uint32 *rand_num)
uint8_t data[48]
Additional event data.
#define MLX_ICMD_STATUS_ALIGN
static mlx_status mlx_icmd_clear_semaphore(IN mlx_utils *utils)
#define MLX_CHECK_STATUS(id, status, label, message)
#define NULL
NULL pointer (VOID *)
#define MLX_ICMD_OPCODE_ALIGN
#define PCI_GW_SPACE_SEMAPHORE