diff options
Diffstat (limited to 'drivers/infiniband/hw/amso1100/c2_mq.h')
-rw-r--r-- | drivers/infiniband/hw/amso1100/c2_mq.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/amso1100/c2_mq.h b/drivers/infiniband/hw/amso1100/c2_mq.h new file mode 100644 index 000000000000..9185bbb21658 --- /dev/null +++ b/drivers/infiniband/hw/amso1100/c2_mq.h | |||
@@ -0,0 +1,106 @@ | |||
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 | DECLARE_PCI_UNMAP_ADDR(mapping); | ||
75 | u16 hint_count; | ||
76 | u16 priv; | ||
77 | struct c2_mq_shared __iomem *peer; | ||
78 | u16 *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_ */ | ||