d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef __COMMAND_H__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __COMMAND_H__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* This file containes the slow-path send queue and the L2 Command code */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "57712_reg.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "577xx_int_offsets.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "context.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "lm5710.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#include "5710_hsi.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define MAX_PROTO 2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* How many slow-path-queue elements can be sent in parallel divided into normal and high priority */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_NORMAL_PRIORITY_SPE 7
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_HIGH_PRIORITY_SPE 1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_NUM_SPE 8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CMD_PRIORITY_NORMAL 0x10
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CMD_PRIORITY_MEDIUM 0x20
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CMD_PRIORITY_HIGH 0x30
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* structure representing a list of slow-path-completions */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _sp_cqes_info {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi union eth_rx_cqe sp_cqe[MAX_NUM_SPE];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t idx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} sp_cqes_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic __inline void _lm_sq_post(struct _lm_device_t *pdev,struct sq_pending_command * pending)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t func = FUNC_ID(pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* TODO replace this with the proper struct */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* CID needs port number to be encoded int it */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mm_memcpy(pdev->sq_info.sq_chain.prod_bd, &pending->command, sizeof(pending->command));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pdev->sq_info.sq_chain.prod_idx ++;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pdev->sq_info.sq_chain.bd_left --;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (pdev->sq_info.sq_chain.prod_bd == pdev->sq_info.sq_chain.last_bd) {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pdev->sq_info.sq_chain.prod_bd = pdev->sq_info.sq_chain.sq_chain_virt;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }else{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pdev->sq_info.sq_chain.prod_bd ++ ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev,VERBOSEl2sp | VERBOSEl4sp, "Writing SP prod %d, conn_and_cmd_data=%x, type=%d \n",pdev->sq_info.sq_chain.prod_idx, pending->command.hdr.conn_and_cmd_data, pending->command.hdr.type);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (IS_PFDEV(pdev) && pdev->sq_info.sq_state == SQ_STATE_NORMAL) {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LM_INTMEM_WRITE16(pdev, XSTORM_SPQ_PROD_OFFSET(func), pdev->sq_info.sq_chain.prod_idx, BAR_XSTRORM_INTMEM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef VF_INVOLVED
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi else {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LM_INTMEM_WRITE16(PFDEV(pdev),XSTORM_VF_SPQ_PROD_OFFSET(ABS_VFID(pdev)), pdev->sq_info.sq_chain.prod_idx, BAR_XSTRORM_INTMEM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description: This function fills a command that is received
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * as a parameter given the input...
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pending - OUT: this entry is filled given the input
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * below
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param cid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param command - FW Command ID
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param type - The type of connection, can optionally
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * include the function id as well if it differs
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * from the function of pdev (for example for VFs)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param data - Data for FW ramrod
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param release_mem_flag - Determines whether the sp pending
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * command will be returned to the pool
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * at the end of usage.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic __inline void lm_sq_post_fill_entry(struct _lm_device_t* pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sq_pending_command * pending,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t command,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t type,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t data,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t release_mem_flag)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* In some cases type may already contain the func-id (VF specifically) so we add it only if it's not there... */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!(type & SPE_HDR_T_FUNCTION_ID))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi type |= (FUNC_ID(pdev) << SPE_HDR_T_FUNCTION_ID_SHIFT);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi // CID MSB is function number
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->command.hdr.conn_and_cmd_data = mm_cpu_to_le32((command << SPE_HDR_T_CMD_ID_SHIFT ) | HW_CID(pdev,cid));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->command.hdr.type = mm_cpu_to_le16(type);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->command.protocol_data.hi = mm_cpu_to_le32(U64_HI(data));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->command.protocol_data.lo = mm_cpu_to_le32(U64_LO(data));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->flags = 0;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (release_mem_flag)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi SET_FLAGS(pending->flags, SQ_PEND_RELEASE_MEM);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->cid = cid;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->type = type; /* don't kill function ID, RSC VF update really uses the value (& SPE_HDR_T_CONN_TYPE);*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi pending->cmd = command;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Add the entry to the pending SP list.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Try to add entry's from the list to the sq_chain if possible.(there is are less then 8 ramrod commands pending)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pending - The pending list entry.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param priority - (high or low) to witch list to insert the pending list entry.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @return lm_status_t: LM_STATUS_SUCCESS on success or
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * LM_STATUS_REQUEST_NOT_ACCEPTED if slowpath queue is
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in blocked state.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_post_entry(struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct sq_pending_command * pending,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t priority);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi post a ramrod to the sq
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi takes the sq pending list spinlock and adds the request
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi will not block
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi but the actuall posting to the sq might be deffered until there is room
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MUST only have one request pending per CID (this is up to the caller to enforce)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_post(struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t command,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t priority,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t type,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t data);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * inform the sq mechanism of completed ramrods because the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * completions arrive on the fast-path rings the fast-path
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * needs to inform the sq that the ramrod has been serviced
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * will not block, it also needs to notify which ramrod has
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * been completed since completions can arrive in a different
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * sequence than sent.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param priority: priority of ramrod being completed
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * (different credits)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param command: which command is completed
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param type: connection type
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param cid: connection id that ramrod was sent with
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_sq_complete(struct _lm_device_t *pdev, u8_t priority,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t command, u16_t type, u32_t cid );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * do any deffered posting pending on the sq, will take the list spinlock
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * will not block. Check sq state, if its pending (it means no hw...) call flush
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * at the end, which will take care of completing these completions internally.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @return lm_status_t SUCCESS: is no pending requests were sent. PENDING if a
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * if pending request was sent.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_post_pending(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi post a slow-path command
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi takes a spinlock, does not sleep
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi actuall command posting may be delayed
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistatic __inline lm_status_t lm_command_post( struct _lm_device_t* pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t command,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t priority,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t type,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u64_t data )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return lm_sq_post(pdev, cid, command, priority, type, data );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* TODO: move functions above to lm_sp.c */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * change state of slowpath queue.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param state NORMAL, PENDING, BLOCKED
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_sq_change_state(struct _lm_device_t *pdev, lm_sq_state_t state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function completes any pending slowpath requests.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * It does this as if they were completed via cookie...
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * It needs to know all the possible cookies and which
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * completions to give. Any new ramrod should be added to
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * this function. Also if it should be ignored.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_sq_complete_pending_requests(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function takes care of registering a DPC for
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * completing slowpaths internally in the driver (if such
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * exist)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @return lm_status_t SUCCESS: if all flushed (i.e. dpc not
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * scheduled)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * PENDING: if dpc is scheduled
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_flush(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Checks if the sq is empty
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @return u8_t TRUE if empty FALSE o/w
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_sq_is_empty(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_comp_cb_register(struct _lm_device_t *pdev, u8_t type, lm_sq_comp_cb_t cb);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_sq_comp_cb_deregister(struct _lm_device_t *pdev, u8_t type);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif //__COMMAND_H__