Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
infiniband
hw
amso1100
c2_mq.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 Ammasso, Inc. All rights reserved.
3
* Copyright (c) 2005 Open Grid Computing, Inc. All rights reserved.
4
*
5
* This software is available to you under a choice of one of two
6
* licenses. You may choose to be licensed under the terms of the GNU
7
* General Public License (GPL) Version 2, available from the file
8
* COPYING in the main directory of this source tree, or the
9
* OpenIB.org BSD license below:
10
*
11
* Redistribution and use in source and binary forms, with or
12
* without modification, are permitted provided that the following
13
* conditions are met:
14
*
15
* - Redistributions of source code must retain the above
16
* copyright notice, this list of conditions and the following
17
* disclaimer.
18
*
19
* - Redistributions in binary form must reproduce the above
20
* copyright notice, this list of conditions and the following
21
* disclaimer in the documentation and/or other materials
22
* provided with the distribution.
23
*
24
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
* SOFTWARE.
32
*/
33
34
#ifndef _C2_MQ_H_
35
#define _C2_MQ_H_
36
#include <linux/kernel.h>
37
#include <
linux/dma-mapping.h
>
38
#include "
c2_wr.h
"
39
40
enum
c2_shared_regs
{
41
42
C2_SHARED_ARMED
= 0x10,
43
C2_SHARED_NOTIFY
= 0x18,
44
C2_SHARED_SHARED
= 0x40,
45
};
46
47
struct
c2_mq_shared
{
48
u16
unused1
;
49
u8
armed
;
50
u8
notification_type
;
51
u32
unused2
;
52
u16
shared
;
53
/* Pad to 64 bytes. */
54
u8
pad
[64 -
sizeof
(
u16
) - 2 *
sizeof
(
u8
) -
sizeof
(
u32
) -
sizeof
(
u16
)];
55
};
56
57
enum
c2_mq_type
{
58
C2_MQ_HOST_TARGET
= 1,
59
C2_MQ_ADAPTER_TARGET
= 2,
60
};
61
62
/*
63
* c2_mq_t is for kernel-mode MQs like the VQs Cand the AEQ.
64
* c2_user_mq_t (which is the same format) is for user-mode MQs...
65
*/
66
#define C2_MQ_MAGIC 0x4d512020
/* 'MQ ' */
67
struct
c2_mq
{
68
u32
magic
;
69
union
{
70
u8
*
host
;
71
u8
__iomem
*
adapter
;
72
}
msg_pool
;
73
dma_addr_t
host_dma
;
74
DEFINE_DMA_UNMAP_ADDR
(
mapping
);
75
u16
hint_count
;
76
u16
priv
;
77
struct
c2_mq_shared
__iomem
*
peer
;
78
__be16
*
shared
;
79
dma_addr_t
shared_dma
;
80
u32
q_size
;
81
u32
msg_size
;
82
u32
index
;
83
enum
c2_mq_type
type
;
84
};
85
86
static
__inline__
int
c2_mq_empty(
struct
c2_mq
*
q
)
87
{
88
return
q->
priv
==
be16_to_cpu
(*q->
shared
);
89
}
90
91
static
__inline__
int
c2_mq_full(
struct
c2_mq
*
q
)
92
{
93
return
q->
priv
== (
be16_to_cpu
(*q->
shared
) + q->
q_size
- 1) % q->
q_size
;
94
}
95
96
extern
void
c2_mq_lconsume
(
struct
c2_mq
*
q
,
u32
wqe_count
);
97
extern
void
*
c2_mq_alloc
(
struct
c2_mq
*
q
);
98
extern
void
c2_mq_produce
(
struct
c2_mq
*
q
);
99
extern
void
*
c2_mq_consume
(
struct
c2_mq
*
q
);
100
extern
void
c2_mq_free
(
struct
c2_mq
*
q
);
101
extern
void
c2_mq_req_init
(
struct
c2_mq
*
q
,
u32
index
,
u32
q_size,
u32
msg_size
,
102
u8
__iomem
*pool_start,
u16
__iomem
*peer,
u32
type
);
103
extern
void
c2_mq_rep_init
(
struct
c2_mq
*
q
,
u32
index
,
u32
q_size,
u32
msg_size
,
104
u8
*pool_start,
u16
__iomem
*peer,
u32
type
);
105
106
#endif
/* _C2_MQ_H_ */
Generated on Thu Jan 10 2013 13:37:13 for Linux Kernel by
1.8.2