2016-02-27 00:27:58 +01:00
|
|
|
#
|
|
|
|
# For a description of the syntax of this configuration file,
|
|
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
|
|
#
|
|
|
|
|
2017-05-14 23:55:07 +02:00
|
|
|
menuconfig WIRELESS_IEEE802154
|
|
|
|
bool "IEEE 802.15.4 Support"
|
2016-02-27 00:27:58 +01:00
|
|
|
default n
|
2017-05-09 15:34:59 +02:00
|
|
|
select MM_IOB
|
2017-05-14 23:55:07 +02:00
|
|
|
depends on WIRELESS
|
2016-06-01 12:12:21 +02:00
|
|
|
---help---
|
|
|
|
Enables a Media Access Controller for any IEEE802.15.4 radio
|
|
|
|
device. This in turn can be used by higher layer entities
|
2017-05-14 23:55:07 +02:00
|
|
|
such as 6lowpan.
|
2016-06-01 12:12:21 +02:00
|
|
|
|
2017-05-14 23:55:07 +02:00
|
|
|
if WIRELESS_IEEE802154
|
2017-04-26 17:30:54 +02:00
|
|
|
|
2017-11-01 21:15:21 +01:00
|
|
|
config IEEE802154_PRIMITIVE_PREALLOC
|
|
|
|
int "Number of pre-allocated primitive structures"
|
|
|
|
default 20
|
|
|
|
---help---
|
|
|
|
This specifies the total number of preallocated primitive structures.
|
|
|
|
A primitive is an abstracted data type that provides service information
|
|
|
|
between the MAC layer and the next highest layer. These may be allocated
|
|
|
|
from either from tasking logic or from interrupt level logic.
|
|
|
|
|
|
|
|
config IEEE802154_PRIMITIVE_IRQRESERVE
|
|
|
|
int "Reserved pre-allocated primitive structures"
|
|
|
|
default 0
|
|
|
|
depends on EXPERIMENTAL
|
|
|
|
---help---
|
|
|
|
If primitves can be allocated from interrupt handlers, then this
|
|
|
|
specifies the number of pre-allocatd meta-data structures that are
|
|
|
|
reserved for for use only by interrupt handlers. This may be zero to
|
|
|
|
reserve no meta-data structures for interrupt handlers. In that case,
|
|
|
|
the allocation will fail if tasking logic has allocated them all.
|
|
|
|
|
|
|
|
Interrupt logic will first attempt to allocate from the general,
|
|
|
|
pre-allocated structure pool that will contain up to (size
|
|
|
|
CONFIG_IEEE802154_PRIMITIVE_PREALLOC - CONFIG_IEEE802154_PRIMITIVE_IRQRESERVE)
|
|
|
|
entries. If that fails, then it will try to take a structure from
|
|
|
|
the reserve (size CONFIG_IEEE802154_PRIMITIVE_IRQRESERVE).
|
|
|
|
|
|
|
|
Non-interrupt logic will also first attempt to allocate from the
|
|
|
|
general, pre-allocated structure pool. If that fails, it will
|
|
|
|
dynamically allocate the primitive with an additional cost in performance.
|
|
|
|
|
|
|
|
NOTE: Currently marked as experimental and with a default of zero
|
|
|
|
because there are no interrupt level allocations performed by the
|
|
|
|
current IEEE 802.15.4 MAC code.
|
|
|
|
|
2017-06-03 00:49:22 +02:00
|
|
|
config IEEE802154_DEFAULT_EADDR
|
|
|
|
hex "IEEE 802.15.4 Default Extended Address"
|
|
|
|
default 0x00fade00deadbeef
|
|
|
|
---help---
|
|
|
|
Set the default extended address to be used by MAC networks on init
|
|
|
|
|
2017-11-01 21:15:21 +01:00
|
|
|
config IEEE802154_MAC
|
|
|
|
bool "Software MAC layer"
|
|
|
|
default n
|
2017-04-26 17:30:54 +02:00
|
|
|
---help---
|
2017-11-01 21:15:21 +01:00
|
|
|
There are two types of IEEE 802.15.4 radios supported. Those that provide
|
|
|
|
all MAC functionality equivalent to the MAC802154 software implementation,
|
|
|
|
and radios that provide a lower half to the MAC802154 software layer.
|
|
|
|
This option enables the software MAC layer that can interface with
|
|
|
|
the lower-half radio drivers.
|
2017-06-21 18:40:36 +02:00
|
|
|
|
2017-11-01 21:15:21 +01:00
|
|
|
if IEEE802154_MAC
|
2017-04-26 17:30:54 +02:00
|
|
|
|
2017-06-21 18:08:25 +02:00
|
|
|
config MAC802154_NTXDESC
|
2017-04-26 17:30:54 +02:00
|
|
|
int "Number or TX descriptors"
|
2017-11-01 21:15:21 +01:00
|
|
|
default 5
|
2017-04-26 17:30:54 +02:00
|
|
|
---help---
|
|
|
|
Configured number of Tx descriptors. Default: 3
|
2017-06-20 21:30:17 +02:00
|
|
|
|
|
|
|
When used with 6LoWPAN, the descriptor allocator runs on a work
|
|
|
|
and must avoid blocking if possible. Each frame will be provided in
|
|
|
|
an IOB and each TX frame will need a TX descriptor. So the safe
|
2017-06-21 18:08:25 +02:00
|
|
|
thing to do is set CONFIG_MAC802154_NTXDESC to CONFIG_IOB_NBUFFERS.
|
2017-06-20 21:30:17 +02:00
|
|
|
Then there should be the maximum pre-allocated buffers for each
|
|
|
|
possible TX frame.
|
|
|
|
|
2017-06-26 00:07:50 +02:00
|
|
|
config MAC802154_NPANDESC
|
|
|
|
int "Number of PAN descriptors"
|
|
|
|
default 5
|
|
|
|
---help---
|
|
|
|
Configured number of PAN descriptors Default: 5
|
|
|
|
|
|
|
|
When performing a scan to find a suitable PAN, the MAC must store
|
|
|
|
information for all unique beacons received. This is the number of unique
|
|
|
|
descriptors that can be held before the scan cancels with LIMIT_REACHED.
|
|
|
|
|
2017-07-10 05:57:11 +02:00
|
|
|
config MAC802154_SFEVENT_VERBOSE
|
|
|
|
bool "Verbose logging related to superframe events"
|
|
|
|
default n
|
|
|
|
depends on DEBUG_WIRELESS_INFO
|
|
|
|
---help---
|
|
|
|
Enable verbose logging of superframe events Default: false
|
|
|
|
|
|
|
|
config MAC802154_LOCK_VERBOSE
|
|
|
|
bool "Verbose logging related to MAC lock management"
|
|
|
|
default n
|
|
|
|
depends on DEBUG_WIRELESS_INFO
|
|
|
|
---help---
|
|
|
|
Enable verbose logging of MAC lock management. Default: false
|
|
|
|
|
2017-06-20 21:30:17 +02:00
|
|
|
|
2017-06-18 16:53:31 +02:00
|
|
|
config IEEE802154_MACDEV
|
|
|
|
bool "Character driver for IEEE 802.15.4 MAC layer"
|
|
|
|
default n
|
|
|
|
depends on WIRELESS_IEEE802154
|
|
|
|
---help---
|
|
|
|
Enable the device driver to expose the IEEE 802.15.4 MAC layer
|
|
|
|
access to user space as IOCTLs
|
|
|
|
|
|
|
|
if IEEE802154_MACDEV
|
|
|
|
|
2017-06-18 19:00:47 +02:00
|
|
|
config IEEE802154_MACDEV_RECVRPRIO
|
2017-06-18 16:53:31 +02:00
|
|
|
int "Priority of frame receiver registerd with the MAC layer"
|
|
|
|
default 0
|
|
|
|
---help---
|
|
|
|
When the MAC layer receives an incoming data frame, it passes the frame
|
|
|
|
to registered receivers, in order of receiver priority, until one of the
|
2017-06-18 19:00:47 +02:00
|
|
|
receivers claim the frame.
|
|
|
|
|
2017-06-18 16:53:31 +02:00
|
|
|
An example case would be when 6LoWPAN and the MAC character driver are
|
|
|
|
enabled. Both have receivers registered with the MAC. The 6LoWPAN layer
|
|
|
|
should get assigned a higher priority than the character driver. In this
|
|
|
|
case, the 6LoWPAN receiver will receive the frame first. If the frame is
|
|
|
|
a 6LoWPAN frame, it will claim the frame and the MAC will not pass the
|
|
|
|
frame to any additional receivers. If it does not claim the frame, the
|
|
|
|
MAC layer will call the next highest priority receiver, in this case,
|
|
|
|
the MAC character driver (which should always be lowest priority since
|
|
|
|
it is a "catch-all" type receiver).
|
|
|
|
|
|
|
|
endif # IEEE802154_MACDEV
|
2017-05-05 20:50:34 +02:00
|
|
|
|
2017-04-08 21:27:03 +02:00
|
|
|
config IEEE802154_NETDEV
|
2017-06-19 00:00:08 +02:00
|
|
|
bool "IEEE802154 6LoWPAN Network Device"
|
2017-04-08 21:27:03 +02:00
|
|
|
default n
|
2017-08-20 19:14:43 +02:00
|
|
|
depends on NET_6LOWPAN || NET_IEEE802154
|
2017-04-08 21:27:03 +02:00
|
|
|
select ARCH_HAVE_NETDEV_STATISTICS
|
|
|
|
---help---
|
2017-06-19 00:00:08 +02:00
|
|
|
Add support for the IEEE802.15.4 6LoWPAN network device built on
|
2017-04-08 21:27:03 +02:00
|
|
|
the common IEEE802.15.4 MAC.
|
|
|
|
|
|
|
|
if IEEE802154_NETDEV
|
|
|
|
|
2017-06-18 19:00:47 +02:00
|
|
|
config IEEE802154_NETDEV_RECVRPRIO
|
|
|
|
int "Priority of frame receiver registerd with the MAC layer"
|
|
|
|
default 1
|
|
|
|
---help---
|
|
|
|
When the MAC layer receives an incoming data frame, it passes the frame
|
|
|
|
to registered receivers, in order of receiver priority, until one of the
|
|
|
|
receivers claim the frame.
|
|
|
|
|
|
|
|
An example case would be when 6LoWPAN and the MAC character driver are
|
|
|
|
enabled. Both have receivers registered with the MAC. The 6LoWPAN layer
|
|
|
|
should get assigned a higher priority than the character driver. In this
|
|
|
|
case, the 6LoWPAN receiver will receive the frame first. If the frame is
|
|
|
|
a 6LoWPAN frame, it will claim the frame and the MAC will not pass the
|
|
|
|
frame to any additional receivers. If it does not claim the frame, the
|
|
|
|
MAC layer will call the next highest priority receiver, in this case,
|
|
|
|
the MAC character driver (which should always be lowest priority since
|
|
|
|
it is a "catch-all" type receiver).
|
|
|
|
|
2017-04-08 21:27:03 +02:00
|
|
|
choice
|
|
|
|
prompt "Work queue"
|
|
|
|
default IEEE802154_NETDEV_LPWORK if SCHED_LPWORK
|
|
|
|
default IEEE802154_NETDEV_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
|
|
|
|
depends on SCHED_WORKQUEUE
|
|
|
|
---help---
|
|
|
|
Work queue support is required to use the IEEE802.15.4 network
|
2017-06-21 18:40:36 +02:00
|
|
|
driver. If the low priority work queue is available, then it should
|
2017-04-08 21:27:03 +02:00
|
|
|
be used by the loopback driver.
|
|
|
|
|
2017-06-21 18:40:36 +02:00
|
|
|
WARNING!! The IEEE802.15.4 network device must never run on the same
|
|
|
|
work queue as does the IEEE 802.15.4 MAC. That configuration will
|
|
|
|
cause deadlocks: The network logic may be blocked on the work queue
|
2017-06-21 21:43:40 +02:00
|
|
|
waiting on resources that can only be freed by the MAC logic but the
|
2017-06-21 18:40:36 +02:00
|
|
|
MAC is unable to run because the work queue is blocked. The
|
2017-06-21 21:43:40 +02:00
|
|
|
recommended configuration is: Network on the LP work queue; MAC on HP
|
2017-06-21 18:40:36 +02:00
|
|
|
work queue. Blocking on the HP work queue is a very bad thing in
|
|
|
|
any case.
|
|
|
|
|
2017-04-08 21:27:03 +02:00
|
|
|
config IEEE802154_NETDEV_HPWORK
|
|
|
|
bool "High priority"
|
|
|
|
depends on SCHED_HPWORK
|
|
|
|
|
|
|
|
config IEEE802154_NETDEV_LPWORK
|
|
|
|
bool "Low priority"
|
|
|
|
depends on SCHED_LPWORK
|
|
|
|
|
|
|
|
endchoice # Work queue
|
|
|
|
endif # IEEE802154_NETDEV
|
|
|
|
|
2017-11-01 21:15:21 +01:00
|
|
|
endif # IEEE802154_MACDEV
|
|
|
|
|
2017-04-03 00:29:02 +02:00
|
|
|
config IEEE802154_LOOPBACK
|
2017-06-19 00:00:08 +02:00
|
|
|
bool "IEEE802154 6LoWPAN Loopback"
|
2017-04-03 00:29:02 +02:00
|
|
|
default n
|
2017-08-20 19:14:43 +02:00
|
|
|
depends on NET_6LOWPAN || NET_IEEE802154
|
2017-04-03 00:29:02 +02:00
|
|
|
select ARCH_HAVE_NETDEV_STATISTICS
|
|
|
|
---help---
|
2017-06-19 00:00:08 +02:00
|
|
|
Add support for the IEEE802.15.4 6LoWPAN Loopback test device.
|
2017-04-03 00:29:02 +02:00
|
|
|
|
2017-04-03 00:29:02 +02:00
|
|
|
if IEEE802154_LOOPBACK
|
|
|
|
|
|
|
|
choice
|
|
|
|
prompt "Work queue"
|
|
|
|
default IEEE802154_LOOPBACK_LPWORK if SCHED_LPWORK
|
|
|
|
default IEEE802154_LOOPBACK_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
|
|
|
|
depends on SCHED_WORKQUEUE
|
|
|
|
---help---
|
|
|
|
Work queue support is required to use the loopback driver. If the
|
|
|
|
low priority work queue is available, then it should be used by the
|
|
|
|
loopback driver.
|
|
|
|
|
|
|
|
config IEEE802154_LOOPBACK_HPWORK
|
|
|
|
bool "High priority"
|
|
|
|
depends on SCHED_HPWORK
|
|
|
|
|
|
|
|
config IEEE802154_LOOPBACK_LPWORK
|
|
|
|
bool "Low priority"
|
|
|
|
depends on SCHED_LPWORK
|
|
|
|
|
|
|
|
endchoice # Work queue
|
|
|
|
endif # IEEE802154_LOOPBACK
|
|
|
|
|
2017-04-03 16:46:16 +02:00
|
|
|
endif # WIRELESS_IEEE802154
|