30 #include <rtnet_rtpc.h>
31 #include <rtmac/rtmac_disc.h>
34 #define RTMAC_TYPE_TDMA 0x0001
36 #define TDMA_MAGIC 0x3A0D4D0A
38 #define TDMA_FLAG_SHUTDOWN 0
39 #define TDMA_FLAG_CALIBRATED 1
40 #define TDMA_FLAG_RECEIVED_SYNC 2
41 #define TDMA_FLAG_MASTER 3
42 #define TDMA_FLAG_BACKUP_MASTER 4
43 #define TDMA_FLAG_ATTACHED 5
44 #define TDMA_FLAG_BACKUP_ACTIVE 6
46 #define DEFAULT_SLOT 0
47 #define DEFAULT_NRT_SLOT 1
50 #define WAIT_ON_SYNC -1
52 #define BACKUP_SYNC -3
53 #define XMIT_REQ_CAL -4
54 #define XMIT_RPL_CAL -5
61 struct list_head entry;
63 unsigned int ref_count;
67 #define SLOT_JOB(job) ((struct tdma_slot *)(job))
77 struct rtskb_prio_queue *queue;
78 struct rtskb_prio_queue local_queue;
82 #define REQUEST_CAL_JOB(job) ((struct tdma_request_cal *)(job))
84 struct tdma_request_cal {
87 struct tdma_priv *tdma;
91 unsigned int cal_rounds;
97 #define REPLY_CAL_JOB(job) ((struct tdma_reply_cal *)(job))
99 struct tdma_reply_cal {
100 struct tdma_job head;
104 struct rtskb *reply_rtskb;
109 struct rtnet_device *rtdev;
110 char device_name[32];
114 #ifdef ALIGN_RTOS_TASK
115 __u8 __align[(ALIGN_RTOS_TASK -
116 ((
sizeof(
unsigned int) +
117 sizeof(
struct rtnet_device *) +
119 ) & (ALIGN_RTOS_TASK-1))
120 ) & (ALIGN_RTOS_TASK-1)];
122 rtdm_task_t worker_task;
123 rtdm_event_t worker_wakeup;
124 rtdm_event_t xmit_event;
125 rtdm_event_t sync_event;
128 unsigned int cal_rounds;
130 u64 current_cycle_start;
131 u64 master_packet_delay_ns;
134 struct tdma_job sync_job;
135 struct tdma_job *first_job;
136 struct tdma_job *current_job;
137 volatile unsigned int job_list_revision;
139 unsigned int max_slot_id;
140 struct tdma_slot **slot_table;
142 struct rt_proc_call *calibration_call;
143 unsigned char master_hw_addr[MAX_ADDR_LEN];
147 #ifdef CONFIG_XENO_DRIVERS_NET_TDMA_MASTER
148 struct rtskb_pool cal_rtskb_pool;
153 #ifdef CONFIG_XENO_OPT_VFILE
154 struct list_head list_entry;
159 extern struct rtmac_disc tdma_disc;
161 #define print_jobs() do { \
162 struct tdma_job *entry; \
163 rtdm_printk("%s:%d - ", __FUNCTION__, __LINE__); \
164 list_for_each_entry(entry, &tdma->first_job->entry, entry) \
165 rtdm_printk("%d ", entry->id); \
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:528
int64_t nanosecs_rel_t
RTDM type for representing relative intervals.
Definition: rtdm.h:49
Real-Time Driver Model for Xenomai, driver API header.
RTDM device.
Definition: driver.h:321
RTDM driver.
Definition: driver.h:245