mirror of
git://projects.qi-hardware.com/openwrt-packages.git
synced 2024-11-29 21:09:42 +02:00
166 lines
4.1 KiB
C
166 lines
4.1 KiB
C
/*
|
|
*
|
|
* Driver for KeyStream, KS7010 based SDIO cards.
|
|
*
|
|
* ks7010_sdio.h
|
|
* $Id: ks7010_sdio.h 1019 2009-09-28 05:41:07Z sekine $
|
|
*
|
|
* 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 undr the terms of the GNU General Public License version 2 as
|
|
* published by the Free Sotware 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
|
|
#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 workqueue_struct *ks7010sdio_init;
|
|
struct work_struct init_task;
|
|
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;
|
|
int model;
|
|
const char *firmware;
|
|
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;
|
|
};
|
|
#ifndef NO_FIRMWARE_CLASS
|
|
#define ROM_FILE "ks7010sd.rom"
|
|
#define CFG_FILE "ks79xx.cfg"
|
|
#else
|
|
#define ROM_FILE "/lib/firmware/ks7010sd.rom"
|
|
#define CFG_FILE "/lib/firmware/ks79xx.cfg"
|
|
#endif
|
|
#define KS_WLAN_DRIVER_VERSION_INFO "ks7010 sdio linux 007 ["__DATE__" "__TIME__"]"
|
|
|
|
#endif /* _KS7010_SDIO_H */
|