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 BIT(7) #define INT_GCR_A BIT(6) #define INT_WRITE_STATUS BIT(5) #define INT_WRITE_INDEX BIT(4) #define INT_WRITE_SIZE BIT(3) #define INT_READ_STATUS BIT(2) #define INT_READ_INDEX BIT(1) #define INT_READ_SIZE BIT(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] __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 */ |