1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Linux WiMAX 4 * Internal API for kernel space WiMAX stack 5 * 6 * Copyright (C) 2007 Intel Corporation <linux-wimax@intel.com> 7 * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> 8 * 9 * This header file is for declarations and definitions internal to 10 * the WiMAX stack. For public APIs and documentation, see 11 * include/net/wimax.h and include/linux/wimax.h. 12 */ 13 14#ifndef __WIMAX_INTERNAL_H__ 15#define __WIMAX_INTERNAL_H__ 16#ifdef __KERNEL__ 17 18#ifdef pr_fmt 19#undef pr_fmt 20#endif 21 22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 23 24#include <linux/device.h> 25#include "net-wimax.h" 26 27 28/* 29 * Decide if a (locked) device is ready for use 30 * 31 * Before using the device structure, it must be locked 32 * (wimax_dev->mutex). As well, most operations need to call this 33 * function to check if the state is the right one. 34 * 35 * An error value will be returned if the state is not the right 36 * one. In that case, the caller should not attempt to use the device 37 * and just unlock it. 38 */ 39static inline __must_check 40int wimax_dev_is_ready(struct wimax_dev *wimax_dev) 41{ 42 if (wimax_dev->state == __WIMAX_ST_NULL) 43 return -EINVAL; /* Device is not even registered! */ 44 if (wimax_dev->state == WIMAX_ST_DOWN) 45 return -ENOMEDIUM; 46 if (wimax_dev->state == __WIMAX_ST_QUIESCING) 47 return -ESHUTDOWN; 48 return 0; 49} 50 51 52static inline 53void __wimax_state_set(struct wimax_dev *wimax_dev, enum wimax_st state) 54{ 55 wimax_dev->state = state; 56} 57void __wimax_state_change(struct wimax_dev *, enum wimax_st); 58 59#ifdef CONFIG_DEBUG_FS 60void wimax_debugfs_add(struct wimax_dev *); 61void wimax_debugfs_rm(struct wimax_dev *); 62#else 63static inline void wimax_debugfs_add(struct wimax_dev *wimax_dev) {} 64static inline void wimax_debugfs_rm(struct wimax_dev *wimax_dev) {} 65#endif 66 67void wimax_id_table_add(struct wimax_dev *); 68struct wimax_dev *wimax_dev_get_by_genl_info(struct genl_info *, int); 69void wimax_id_table_rm(struct wimax_dev *); 70void wimax_id_table_release(void); 71 72int wimax_rfkill_add(struct wimax_dev *); 73void wimax_rfkill_rm(struct wimax_dev *); 74 75/* generic netlink */ 76extern struct genl_family wimax_gnl_family; 77 78/* ops */ 79int wimax_gnl_doit_msg_from_user(struct sk_buff *skb, struct genl_info *info); 80int wimax_gnl_doit_reset(struct sk_buff *skb, struct genl_info *info); 81int wimax_gnl_doit_rfkill(struct sk_buff *skb, struct genl_info *info); 82int wimax_gnl_doit_state_get(struct sk_buff *skb, struct genl_info *info); 83 84#endif /* #ifdef __KERNEL__ */ 85#endif /* #ifndef __WIMAX_INTERNAL_H__ */ 86