Commit | Line | Data |
---|---|---|
30295c89 VM |
1 | //------------------------------------------------------------------------------ |
2 | // <copyright file="hif_internal.h" company="Atheros"> | |
3 | // Copyright (c) 2004-2010 Atheros Corporation. All rights reserved. | |
4 | // | |
5 | // | |
6 | // Permission to use, copy, modify, and/or distribute this software for any | |
7 | // purpose with or without fee is hereby granted, provided that the above | |
8 | // copyright notice and this permission notice appear in all copies. | |
9 | // | |
10 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 | // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 | // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 | // | |
18 | // | |
19 | //------------------------------------------------------------------------------ | |
20 | //============================================================================== | |
21 | // internal header file for hif layer | |
22 | // | |
23 | // Author(s): ="Atheros" | |
24 | //============================================================================== | |
25 | #ifndef _HIF_INTERNAL_H_ | |
26 | #define _HIF_INTERNAL_H_ | |
27 | ||
28 | #include "a_config.h" | |
29 | #include "athdefs.h" | |
30 | #include "a_types.h" | |
31 | #include "a_osapi.h" | |
32 | #include "hif.h" | |
33 | #include "../../../common/hif_sdio_common.h" | |
34 | #include <linux/scatterlist.h> | |
35 | #define HIF_LINUX_MMC_SCATTER_SUPPORT | |
36 | ||
37 | #define BUS_REQUEST_MAX_NUM 64 | |
38 | ||
39 | #define SDIO_CLOCK_FREQUENCY_DEFAULT 25000000 | |
40 | #define SDWLAN_ENABLE_DISABLE_TIMEOUT 20 | |
41 | #define FLAGS_CARD_ENAB 0x02 | |
42 | #define FLAGS_CARD_IRQ_UNMSK 0x04 | |
43 | ||
44 | #define HIF_MBOX_BLOCK_SIZE HIF_DEFAULT_IO_BLOCK_SIZE | |
45 | #define HIF_MBOX0_BLOCK_SIZE 1 | |
46 | #define HIF_MBOX1_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE | |
47 | #define HIF_MBOX2_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE | |
48 | #define HIF_MBOX3_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE | |
49 | ||
50 | struct _HIF_SCATTER_REQ_PRIV; | |
51 | ||
52 | typedef struct bus_request { | |
53 | struct bus_request *next; /* link list of available requests */ | |
54 | struct bus_request *inusenext; /* link list of in use requests */ | |
55 | struct semaphore sem_req; | |
56 | A_UINT32 address; /* request data */ | |
57 | A_UCHAR *buffer; | |
58 | A_UINT32 length; | |
59 | A_UINT32 request; | |
60 | void *context; | |
1f4c34bd | 61 | int status; |
30295c89 VM |
62 | struct _HIF_SCATTER_REQ_PRIV *pScatterReq; /* this request is a scatter request */ |
63 | } BUS_REQUEST; | |
64 | ||
65 | struct hif_device { | |
66 | struct sdio_func *func; | |
67 | spinlock_t asynclock; | |
68 | struct task_struct* async_task; /* task to handle async commands */ | |
69 | struct semaphore sem_async; /* wake up for async task */ | |
70 | int async_shutdown; /* stop the async task */ | |
71 | struct completion async_completion; /* thread completion */ | |
72 | BUS_REQUEST *asyncreq; /* request for async tasklet */ | |
73 | BUS_REQUEST *taskreq; /* async tasklet data */ | |
74 | spinlock_t lock; | |
75 | BUS_REQUEST *s_busRequestFreeQueue; /* free list */ | |
76 | BUS_REQUEST busRequest[BUS_REQUEST_MAX_NUM]; /* available bus requests */ | |
77 | void *claimedContext; | |
78 | HTC_CALLBACKS htcCallbacks; | |
79 | A_UINT8 *dma_buffer; | |
80 | DL_LIST ScatterReqHead; /* scatter request list head */ | |
81 | A_BOOL scatter_enabled; /* scatter enabled flag */ | |
82 | A_BOOL is_suspend; | |
83 | A_BOOL is_disabled; | |
84 | atomic_t irqHandling; | |
85 | HIF_DEVICE_POWER_CHANGE_TYPE powerConfig; | |
86 | const struct sdio_device_id *id; | |
87 | }; | |
88 | ||
89 | #define HIF_DMA_BUFFER_SIZE (32 * 1024) | |
90 | #define CMD53_FIXED_ADDRESS 1 | |
91 | #define CMD53_INCR_ADDRESS 2 | |
92 | ||
93 | BUS_REQUEST *hifAllocateBusRequest(HIF_DEVICE *device); | |
94 | void hifFreeBusRequest(HIF_DEVICE *device, BUS_REQUEST *busrequest); | |
95 | void AddToAsyncList(HIF_DEVICE *device, BUS_REQUEST *busrequest); | |
96 | ||
97 | #ifdef HIF_LINUX_MMC_SCATTER_SUPPORT | |
98 | ||
99 | #define MAX_SCATTER_REQUESTS 4 | |
100 | #define MAX_SCATTER_ENTRIES_PER_REQ 16 | |
101 | #define MAX_SCATTER_REQ_TRANSFER_SIZE 32*1024 | |
102 | ||
103 | typedef struct _HIF_SCATTER_REQ_PRIV { | |
104 | HIF_SCATTER_REQ *pHifScatterReq; /* HIF scatter request with allocated entries */ | |
105 | HIF_DEVICE *device; /* this device */ | |
106 | BUS_REQUEST *busrequest; /* request associated with request */ | |
107 | /* scatter list for linux */ | |
108 | struct scatterlist sgentries[MAX_SCATTER_ENTRIES_PER_REQ]; | |
109 | } HIF_SCATTER_REQ_PRIV; | |
110 | ||
111 | #define ATH_DEBUG_SCATTER ATH_DEBUG_MAKE_MODULE_MASK(0) | |
112 | ||
1f4c34bd | 113 | int SetupHIFScatterSupport(HIF_DEVICE *device, HIF_DEVICE_SCATTER_SUPPORT_INFO *pInfo); |
30295c89 | 114 | void CleanupHIFScatterResources(HIF_DEVICE *device); |
1f4c34bd | 115 | int DoHifReadWriteScatter(HIF_DEVICE *device, BUS_REQUEST *busrequest); |
30295c89 VM |
116 | |
117 | #else // HIF_LINUX_MMC_SCATTER_SUPPORT | |
118 | ||
1f4c34bd | 119 | static inline int SetupHIFScatterSupport(HIF_DEVICE *device, HIF_DEVICE_SCATTER_SUPPORT_INFO *pInfo) |
30295c89 VM |
120 | { |
121 | return A_ENOTSUP; | |
122 | } | |
123 | ||
1f4c34bd | 124 | static inline int DoHifReadWriteScatter(HIF_DEVICE *device, BUS_REQUEST *busrequest) |
30295c89 VM |
125 | { |
126 | return A_ENOTSUP; | |
127 | } | |
128 | ||
129 | #define CleanupHIFScatterResources(d) { } | |
130 | ||
131 | #endif // HIF_LINUX_MMC_SCATTER_SUPPORT | |
132 | ||
133 | #endif // _HIF_INTERNAL_H_ | |
134 |