Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
unifi_clients.h
Go to the documentation of this file.
1 /*
2  *****************************************************************************
3  *
4  * FILE : unifi_clients.h
5  *
6  * PURPOSE : Private header file for unifi clients.
7  *
8  * UDI = UniFi Debug Interface
9  *
10  * Copyright (C) 2005-2008 by Cambridge Silicon Radio Ltd.
11  *
12  * Refer to LICENSE.txt included with this source code for details on
13  * the license terms.
14  *
15  *****************************************************************************
16  */
17 #ifndef __LINUX_UNIFI_CLIENTS_H__
18 #define __LINUX_UNIFI_CLIENTS_H__ 1
19 
20 #include <linux/kernel.h>
21 
22 #define MAX_UDI_CLIENTS 8
23 
24 /* The start of the range of process ids allocated for ul clients */
25 #define UDI_SENDER_ID_BASE 0xC000
26 #define UDI_SENDER_ID_SHIFT 8
27 
28 
29 /* Structure to hold a UDI logged signal */
30 typedef struct {
31 
32  /* List link structure */
33  struct list_head q;
34 
35  /* The message that will be passed to the user app */
37 
38  /* Signal body and data follow */
39 
40 } udi_log_t;
41 
42 
43 
44 typedef struct ul_client ul_client_t;
45 
47  const u8 *sigdata, int signal_len,
48  const bulk_data_param_t *bulkdata,
49  int dir);
50 
51 void logging_handler(void *ospriv,
52  u8 *sigdata, u32 signal_len,
53  const bulk_data_param_t *bulkdata,
55 
56 
57 /*
58  * Structure describing a bulk data slot.
59  * The length field is used to indicate empty/occupied state.
60  */
61 typedef struct _bulk_data
62 {
63  unsigned char ptr[2000];
64  unsigned int length;
65 } bulk_data_t;
66 
67 
68 struct ul_client {
69  /* Index of this client in the ul_clients array. */
70  int client_id;
71 
72  /* Index of UniFi device to which this client is attached. */
73  int instance;
74 
75  /* Flag to say whether this client has been enabled. */
77 
78  /* Value to use in signal->SenderProcessId */
79  int sender_id;
80 
81  /* Configuration flags, e.g blocking, logging, etc. */
82  unsigned int configuration;
83 
85 
86  /* A list to hold signals received from UniFi for reading by read() */
88 
89  /* Semaphore to protect the udi_log list */
91 
92  /*
93  * Linux waitqueue to support blocking read and poll.
94  * Logging clients should wait on udi_log. while
95  * blocking clients should wait on wake_up_wq.
96  */
100 
102 
103 
104  /* ------------------------------------------------------------------- */
105  /* Code below here is used by the sme_native configuration only */
106 
107  /* Flag to wake up blocking clients waiting on udi_wq. */
109 
110  /*
111  * A 0x00 - 0x0F mask to apply in signal->SenderProcessId.
112  * Every time we do a blocking mlme request we increase this value.
113  * The mlme_wait_for_reply() will wait for this sequence number.
114  * Only the MLME blocking functions update this field.
115  */
116  unsigned char seq_no;
117 
118  /*
119  * A 0x00 - 0x0F counter, containing the sequence number of
120  * the signal that this client has last received.
121  * Only the MLME blocking functions update this field.
122  */
123  unsigned char wake_seq_no;
124 
126 }; /* struct ul_client */
127 
128 
129 #endif /* __LINUX_UNIFI_CLIENTS_H__ */