blob: f39d9a07a842af9b19a34b58d7d6751096f6a626 [file] [log] [blame]
/*
* This file is part of the UWB stack for linux.
*
* Copyright (c) 2020-2021 Qorvo US, Inc.
*
* This software is provided under the GNU General Public License, version 2
* (GPLv2), as well as under a Qorvo commercial license.
*
* You may choose to use this software under the terms of the GPLv2 License,
* version 2 ("GPLv2"), as published by the Free Software Foundation.
* You should have received a copy of the GPLv2 along with this program. If
* not, see <http://www.gnu.org/licenses/>.
*
* This program is distributed under the GPLv2 in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPLv2 for more
* details.
*
* If you cannot meet the requirements of the GPLv2, you may not use this
* software for any purpose without first obtaining a commercial license from
* Qorvo. Please contact Qorvo to inquire about licensing terms.
*/
#ifndef NET_NFCC_COEX_REGION_H
#define NET_NFCC_COEX_REGION_H
#include <net/mcps802154_schedule.h>
#include <net/vendor_cmd.h>
#include "nfcc_coex_session.h"
/**
* enum nfcc_coex_state - State of the unique session.
* @NFCC_COEX_STATE_UNUSED:
* Session is unused by access and not started too.
* @NFCC_COEX_STATE_STARTED:
* Session is started but not used by access right now.
* @NFCC_COEX_STATE_ACCESSING:
* Session is currently used on an access.
* @NFCC_COEX_STATE_STOPPING:
* Session is currently used for the last access.
*/
enum nfcc_coex_state {
NFCC_COEX_STATE_UNUSED,
NFCC_COEX_STATE_STARTED,
NFCC_COEX_STATE_ACCESSING,
NFCC_COEX_STATE_STOPPING,
};
/**
* struct nfcc_coex_local - Local context.
*/
struct nfcc_coex_local {
/**
* @region: Region instance returned to MCPS.
*/
struct mcps802154_region region;
/**
* @llhw: Low-level device pointer.
*/
struct mcps802154_llhw *llhw;
/**
* @access: Access returned to MCPS.
*/
struct mcps802154_access access;
/**
* @session: Unique session on the NFCC controller.
*/
struct nfcc_coex_session session;
/**
* @state: State of the unique session.
*/
enum nfcc_coex_state state;
};
static inline struct nfcc_coex_local *
region_to_local(struct mcps802154_region *region)
{
return container_of(region, struct nfcc_coex_local, region);
}
static inline struct nfcc_coex_local *
access_to_local(struct mcps802154_access *access)
{
return container_of(access, struct nfcc_coex_local, access);
}
/**
* nfcc_coex_report() - Send notification to upper layer.
* @local: Local nfcc coex context.
*/
void nfcc_coex_report(struct nfcc_coex_local *local);
#endif /* NET_NFCC_COEX_REGION_H */