From 2489007e7d740ccbc3e0a202914e243ad5178787 Mon Sep 17 00:00:00 2001 From: codeworkx Date: Sat, 22 Sep 2012 09:48:20 +0200 Subject: merge opensource jb u5 Change-Id: I1aaec157aa196f3448eff8636134fce89a814cf2 --- drivers/net/wimax_cmc/wimax_sdio.h | 259 +++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 drivers/net/wimax_cmc/wimax_sdio.h (limited to 'drivers/net/wimax_cmc/wimax_sdio.h') diff --git a/drivers/net/wimax_cmc/wimax_sdio.h b/drivers/net/wimax_cmc/wimax_sdio.h new file mode 100644 index 0000000..998c695 --- /dev/null +++ b/drivers/net/wimax_cmc/wimax_sdio.h @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2011 Samsung Electronics. + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#ifndef _WIMAX_SDIO_H +#define _WIMAX_SDIO_H + +#include +#include +#include +#include +#include +#include +#define WIMAX_CON0_POLL + +/* Macro definition for defining IOCTL */ +#define CTL_CODE(DeviceType, Function, Method, Access) \ +( \ + ((DeviceType) << 16) | ((Access) << 14) | \ + ((Function) << 2) | (Method) \ +) +/* Define the method codes for how buffers are passed for I/O and FS controls */ +#define METHOD_BUFFERED 0 + +/* +* Define the access check value for any access + +* The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in +* ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these +* constants *MUST* always be in sync. +*/ +#define FILE_ANY_ACCESS 0 + +#define CONTROL_ETH_TYPE_WCM 0x0015 +#ifndef FILE_DEVICE_UNKNOWN +#define FILE_DEVICE_UNKNOWN 0x89 +#endif +#define CONTROL_IOCTL_WRITE_REQUEST \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x820, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_POWER_CTL \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x821, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_MODE_CHANGE \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x838, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_EEPROM_DOWNLOAD \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x839, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_WRITE_REV \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83B, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_CHECK_CERT \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83C, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define CONTROL_IOCTL_WIMAX_CHECK_CAL \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83D, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define ETHERNET_ADDRESS_LENGTH 6 + +/* eth types for control message */ +enum { + ETHERTYPE_HIM = 0x1500, + ETHERTYPE_MC = 0x1501, + ETHERTYPE_DM = 0x1502, + ETHERTYPE_CT = 0x1503, + ETHERTYPE_DL = 0x1504, + ETHERTYPE_VSP = 0x1510, + ETHERTYPE_AUTH = 0x1521 +}; + +#define WIMAX_IMAGE_PATH "wimaxfw.bin" +#define WIMAX_LOADER_PATH "wimaxloader.bin" + +/*Time(ms) taken for CMC bootloader to be ready for firmware download*/ +#define CMC_BOOTLOAD_TIME 250 + + /*Time(ms) to wait for SDIO probe after SDIO force detect call*/ +#define CMC_PROBE_TIMEOUT 1000 + + /*Time(ms) to wait the firmware to complete downloading*/ +#define CMC_FIRMWARE_DOWNLOAD_TIMEOUT 2000 + +/*maximum time(ms) spent for MAC request */ +#define CMC_MAC_TIMEOUT 9000 + +#define MODEM_RESP_RETRY 10 +#define ADAPTER_TIMEOUT (HZ * 10) + +#define CMC732_RAM_START 0xC0000000 +#define CMC732_WIMAX_ADDRESS CMC732_RAM_START + +#define CMD_MSG_TOTAL_LENGTH 12 +#define IMAGE_INFO_MSG_TOTAL_LENGTH 28 +#define CMD_MSG_LENGTH 0 +#define IMAGE_INFO_MSG_LENGTH 16 +#define MAX_IMAGE_DATA_LENGTH 3564 +#define MAX_IMAGE_DATA_MSG_LENGTH 4096 + + +/* +* SDIO general defines +* size of a bank in cmc732's rx and tx buffers +*/ +#define CMC732_SDIO_BANK_SIZE 4096 +#define CMC732_PACKET_LENGTH_SIZE 4 +#define CMC732_MAX_PACKET_SIZE (CMC732_SDIO_BANK_SIZE \ + - CMC732_PACKET_LENGTH_SIZE) +#define CMC_BLOCK_SIZE 512 + +#define WIMAX_MTU_SIZE 1400 +#define WIMAX_MAX_FRAMESIZE 1500 +#define WIMAX_HEADER_SIZE 14 +#define WIMAX_MAX_TOTAL_SIZE (WIMAX_MAX_FRAMESIZE + WIMAX_HEADER_SIZE) +/* maximum allocated data size, mtu 1400 so 3 blocks max 1536 */ +#define BUFFER_DATA_SIZE 1600 + +/*maximum permitted SDIO error before wimax restart*/ +#define MAX_SDIO_ERROR 10 +/* SDIO function addresses */ +#define SDIO_TX_BANK_ADDR 0x1000 +#define SDIO_RX_BANK_ADDR 0x10000 +#define SDIO_INT_STATUS_REG 0xC0 +#define SDIO_INT_STATUS_CLR_REG 0xC4 + +#define SDIO_C2H_WP_REG 0xE4 +#define SDIO_C2H_RP_REG 0xE8 +#define SDIO_H2C_WP_REG 0xEC +#define SDIO_H2C_RP_REG 0xF0 + +#define SDIO_INT_DATA_READY 0x01 +#define SDIO_INT_ERROR 0x02 + + +#define MAC_RETRY_COUNT 9 +#define MAC_RETRY_INTERVAL 200 + +#define WAKEUP_MAX_TRY 60 +#define WAKEUP_ASSERT_T 100 + +#define CMC_BLOCK_SIZE 512 +#define CMC_MAX_BYTE_SIZE (CMC_BLOCK_SIZE - 1) +/* used for host boot (firmware download) */ +enum { + MSG_DRIVER_OK_REQ = 0x5010, + MSG_DRIVER_OK_RESP = 0x6010, + MSG_IMAGE_INFO_REQ = 0x3021, + MSG_IMAGE_INFO_RESP = 0x4021, + MSG_IMAGE_DATA_REQ = 0x3022, + MSG_IMAGE_DATA_RESP = 0x4022, + MSG_RUN_REQ = 0x5014, + MSG_RUN_RESP = 0x6014 +}; + +/* private packet opcodes */ +enum { + HWCODEMACREQUEST = 0x01, + HWCODEMACRESPONSE, + HWCODELINKINDICATION, + HWCODERXREADYINDICATION, + HWCODEHALTEDINDICATION, + HWCODEIDLENTFY, + HWCODEWAKEUPNTFY +}; + +#define HW_PROT_VALUE_LINK_DOWN 0x00 +#define HW_PROT_VALUE_LINK_UP 0xff + +/* process element managed by control type */ +struct process_descriptor { + struct list_head list; + struct list_head buffer_list; + wait_queue_head_t read_wait; + u32 id; + u16 type; +}; + +struct buffer_descriptor { + struct list_head list; /* list node */ + u8 *buffer; /* allocated buffer: */ + s32 length; /* current data length */ +}; + +struct image_data_payload { + u32 offset; + u32 size; + u8 data[MAX_IMAGE_DATA_LENGTH]; +}; + +#pragma pack(1) + +/* eth header structure */ +struct eth_header { + u8 dest[ETHERNET_ADDRESS_LENGTH]; + u8 src[ETHERNET_ADDRESS_LENGTH]; + u16 type; +}; + +struct hw_packet_header { + char id0; /* packet ID */ + char id1; + u16 length; /* packet length */ +}; + +struct hw_private_packet { + char id0; /* packet ID */ + char id1; + u8 code; /* command code */ + u8 value; /* command value */ +}; + + +struct wimax_msg_header { + u16 type; + u16 id; + u32 length; +}; + +#pragma pack() + +/* network adapter structure */ +struct net_adapter { + struct completion probe; + struct completion firmware_download; + struct completion mac; + struct completion remove; + wait_queue_head_t modem_resp_event; + wait_queue_head_t con0_poll; + struct workqueue_struct *wimax_workqueue; + struct work_struct rx_work; + struct work_struct tx_work; + struct sdio_func *func; + struct net_device *net; + struct net_device_stats netstats; + struct miscdevice uwibro_dev; + const struct firmware *fw; + struct list_head q_send; /* send pending queue */ + spinlock_t send_lock; + struct list_head control_process_list; + struct mutex control_lock; + struct wimax732_platform_data *pdata; +#ifdef WIMAX_CON0_POLL + struct task_struct *wtm_task; +#endif + struct sk_buff *rx_skb; + u8 *receive_buffer; + u32 buff_len; + u32 image_offset; + u32 msg_enable; + s32 wake_irq; + u32 sdio_error_count; + u8 eth_header[ETHERNET_ADDRESS_LENGTH * 2]; + bool modem_resp; +}; + +#endif /* _WIMAX_SDIO_H */ -- cgit v1.1