blob: c72064b48bd8fe60b105ca49ddee33a5d80c35fd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
/*
* Driver for KeyStream, KS7010 based SDIO cards.
*
* Copyright (C) 2006-2008 KeyStream Corp.
* Copyright (C) 2009 Renesas Technology Corp.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _KS7010_SDIO_H
#define _KS7010_SDIO_H
#ifdef DEVICE_ALIGNMENT
#undef DEVICE_ALIGNMENT
#endif
#define DEVICE_ALIGNMENT 32
/* SDIO KeyStream vendor and device */
#define SDIO_VENDOR_ID_KS_CODE_A 0x005b
#define SDIO_VENDOR_ID_KS_CODE_B 0x0023
/* Older sources suggest earlier versions were named 7910 or 79xx */
#define SDIO_DEVICE_ID_KS_7010 0x7910
/* Read Status Register */
#define READ_STATUS 0x000000
#define READ_STATUS_BUSY 0
#define READ_STATUS_IDLE 1
/* Read Index Register */
#define READ_INDEX 0x000004
/* Read Data Size Register */
#define READ_DATA_SIZE 0x000008
/* Write Status Register */
#define WRITE_STATUS 0x00000C
#define WRITE_STATUS_BUSY 0
#define WRITE_STATUS_IDLE 1
/* Write Index Register */
#define WRITE_INDEX 0x000010
/* Write Status/Read Data Size Register
* for network packet (less than 2048 bytes data)
*/
#define WSTATUS_RSIZE 0x000014
#define WSTATUS_MASK 0x80 /* Write Status Register value */
#define RSIZE_MASK 0x7F /* Read Data Size Register value [10:4] */
/* ARM to SD interrupt Enable */
#define INT_ENABLE 0x000020
/* ARM to SD interrupt Pending */
#define INT_PENDING 0x000024
#define INT_GCR_B (1<<7)
#define INT_GCR_A (1<<6)
#define INT_WRITE_STATUS (1<<5)
#define INT_WRITE_INDEX (1<<4)
#define INT_WRITE_SIZE (1<<3)
#define INT_READ_STATUS (1<<2)
#define INT_READ_INDEX (1<<1)
#define INT_READ_SIZE (1<<0)
/* General Communication Register A */
#define GCR_A 0x000028
#define GCR_A_INIT 0
#define GCR_A_REMAP 1
#define GCR_A_RUN 2
/* General Communication Register B */
#define GCR_B 0x00002C
#define GCR_B_ACTIVE 0
#define GCR_B_DOZE 1
/* Wakeup Register */
/* #define WAKEUP 0x008104 */
/* #define WAKEUP_REQ 0x00 */
#define WAKEUP 0x008018
#define WAKEUP_REQ 0x5a
/* AHB Data Window 0x010000-0x01FFFF */
#define DATA_WINDOW 0x010000
#define WINDOW_SIZE 64*1024
#define KS7010_IRAM_ADDRESS 0x06000000
/*
* struct define
*/
struct hw_info_t {
struct ks_sdio_card *sdio_card;
struct completion ks7010_sdio_wait;
struct workqueue_struct *ks7010sdio_wq;
struct delayed_work rw_wq;
unsigned char *read_buf;
struct tasklet_struct rx_bh_task;
};
struct ks_sdio_packet {
struct ks_sdio_packet *next;
u16 nb;
u8 buffer[0] __attribute__ ((aligned(4)));
};
struct ks_sdio_card {
struct sdio_func *func;
struct ks_wlan_private *priv;
spinlock_t lock;
};
/* Tx Device struct */
#define TX_DEVICE_BUFF_SIZE 1024
struct tx_device_buffer {
unsigned char *sendp; /* pointer of send req data */
unsigned int size;
void (*complete_handler) (void *arg1, void *arg2);
void *arg1;
void *arg2;
};
struct tx_device {
struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
unsigned int qhead; /* tx buffer queue first pointer */
unsigned int qtail; /* tx buffer queue last pointer */
spinlock_t tx_dev_lock;
};
/* Rx Device struct */
#define RX_DATA_SIZE (2 + 2 + 2347 + 1)
#define RX_DEVICE_BUFF_SIZE 32
struct rx_device_buffer {
unsigned char data[RX_DATA_SIZE];
unsigned int size;
};
struct rx_device {
struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
unsigned int qhead; /* rx buffer queue first pointer */
unsigned int qtail; /* rx buffer queue last pointer */
spinlock_t rx_dev_lock;
};
#define ROM_FILE "ks7010sd.rom"
#endif /* _KS7010_SDIO_H */
|