~fcwu-tw/+junk/oem-wireless-bluetooth-dw1550-dkms

« back to all changes in this revision

Viewing changes to oem-wireless-bluetooth-dw1550/drivers/net/wireless/iwlwifi.bad/iwl-notif-wait.h

  • Committer: Doro Wu
  • Date: 2013-08-14 01:41:53 UTC
  • Revision ID: doro.wu@canonical.com-20130814014153-5v7ergizf2ilf7ly
[Doro Wu]
* Merge bcmwl 6.30.223.30+bdcom-0ubuntu1

[Jesse Sung]
* Add patchram support and IDs for broadcom devices (LP: #1180300)
* cherry picked d9c78e9738ccd0017b10b8f44462aafb61904a4a from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************************************
 
2
 *
 
3
 * This file is provided under a dual BSD/GPLv2 license.  When using or
 
4
 * redistributing this file, you may do so under either license.
 
5
 *
 
6
 * GPL LICENSE SUMMARY
 
7
 *
 
8
 * Copyright(c) 2007 - 2013 Intel Corporation. All rights reserved.
 
9
 *
 
10
 * This program is free software; you can redistribute it and/or modify
 
11
 * it under the terms of version 2 of the GNU General Public License as
 
12
 * published by the Free Software Foundation.
 
13
 *
 
14
 * This program is distributed in the hope that it will be useful, but
 
15
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
17
 * General Public License for more details.
 
18
 *
 
19
 * You should have received a copy of the GNU General Public License
 
20
 * along with this program; if not, write to the Free Software
 
21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
 
22
 * USA
 
23
 *
 
24
 * The full GNU General Public License is included in this distribution
 
25
 * in the file called COPYING.
 
26
 *
 
27
 * Contact Information:
 
28
 *  Intel Linux Wireless <ilw@linux.intel.com>
 
29
 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 
30
 *
 
31
 * BSD LICENSE
 
32
 *
 
33
 * Copyright(c) 2005 - 2013 Intel Corporation. All rights reserved.
 
34
 * All rights reserved.
 
35
 *
 
36
 * Redistribution and use in source and binary forms, with or without
 
37
 * modification, are permitted provided that the following conditions
 
38
 * are met:
 
39
 *
 
40
 *  * Redistributions of source code must retain the above copyright
 
41
 *    notice, this list of conditions and the following disclaimer.
 
42
 *  * Redistributions in binary form must reproduce the above copyright
 
43
 *    notice, this list of conditions and the following disclaimer in
 
44
 *    distribution.
 
45
 *  * Neither the name Intel Corporation nor the names of its
 
46
 *    contributors may be used to endorse or promote products derived
 
47
 *    from this software without specific prior written permission.
 
48
 *
 
49
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
50
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
51
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
52
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
53
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
54
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
55
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
56
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
57
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
58
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
59
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
60
 *
 
61
 *****************************************************************************/
 
62
#ifndef __iwl_notif_wait_h__
 
63
#define __iwl_notif_wait_h__
 
64
 
 
65
#include <linux/wait.h>
 
66
 
 
67
#include "iwl-trans.h"
 
68
 
 
69
struct iwl_notif_wait_data {
 
70
        struct list_head notif_waits;
 
71
        spinlock_t notif_wait_lock;
 
72
        wait_queue_head_t notif_waitq;
 
73
};
 
74
 
 
75
#define MAX_NOTIF_CMDS  5
 
76
 
 
77
/**
 
78
 * struct iwl_notification_wait - notification wait entry
 
79
 * @list: list head for global list
 
80
 * @fn: Function called with the notification. If the function
 
81
 *      returns true, the wait is over, if it returns false then
 
82
 *      the waiter stays blocked. If no function is given, any
 
83
 *      of the listed commands will unblock the waiter.
 
84
 * @cmds: command IDs
 
85
 * @n_cmds: number of command IDs
 
86
 * @triggered: waiter should be woken up
 
87
 * @aborted: wait was aborted
 
88
 *
 
89
 * This structure is not used directly, to wait for a
 
90
 * notification declare it on the stack, and call
 
91
 * iwlagn_init_notification_wait() with appropriate
 
92
 * parameters. Then do whatever will cause the ucode
 
93
 * to notify the driver, and to wait for that then
 
94
 * call iwlagn_wait_notification().
 
95
 *
 
96
 * Each notification is one-shot. If at some point we
 
97
 * need to support multi-shot notifications (which
 
98
 * can't be allocated on the stack) we need to modify
 
99
 * the code for them.
 
100
 */
 
101
struct iwl_notification_wait {
 
102
        struct list_head list;
 
103
 
 
104
        bool (*fn)(struct iwl_notif_wait_data *notif_data,
 
105
                   struct iwl_rx_packet *pkt, void *data);
 
106
        void *fn_data;
 
107
 
 
108
        u8 cmds[MAX_NOTIF_CMDS];
 
109
        u8 n_cmds;
 
110
        bool triggered, aborted;
 
111
};
 
112
 
 
113
 
 
114
/* caller functions */
 
115
void iwl_notification_wait_init(struct iwl_notif_wait_data *notif_data);
 
116
void iwl_notification_wait_notify(struct iwl_notif_wait_data *notif_data,
 
117
                                  struct iwl_rx_packet *pkt);
 
118
void iwl_abort_notification_waits(struct iwl_notif_wait_data *notif_data);
 
119
 
 
120
/* user functions */
 
121
void __acquires(wait_entry)
 
122
iwl_init_notification_wait(struct iwl_notif_wait_data *notif_data,
 
123
                           struct iwl_notification_wait *wait_entry,
 
124
                           const u8 *cmds, int n_cmds,
 
125
                           bool (*fn)(struct iwl_notif_wait_data *notif_data,
 
126
                                      struct iwl_rx_packet *pkt, void *data),
 
127
                           void *fn_data);
 
128
 
 
129
int __must_check __releases(wait_entry)
 
130
iwl_wait_notification(struct iwl_notif_wait_data *notif_data,
 
131
                      struct iwl_notification_wait *wait_entry,
 
132
                      unsigned long timeout);
 
133
 
 
134
void __releases(wait_entry)
 
135
iwl_remove_notification(struct iwl_notif_wait_data *notif_data,
 
136
                        struct iwl_notification_wait *wait_entry);
 
137
 
 
138
#endif /* __iwl_notif_wait_h__ */