190921014SLuciano Coelho /* 290921014SLuciano Coelho * This file is part of wl1251 390921014SLuciano Coelho * 490921014SLuciano Coelho * Copyright (c) 1998-2007 Texas Instruments Incorporated 590921014SLuciano Coelho * Copyright (C) 2008 Nokia Corporation 690921014SLuciano Coelho * 790921014SLuciano Coelho * This program is free software; you can redistribute it and/or 890921014SLuciano Coelho * modify it under the terms of the GNU General Public License 990921014SLuciano Coelho * version 2 as published by the Free Software Foundation. 1090921014SLuciano Coelho * 1190921014SLuciano Coelho * This program is distributed in the hope that it will be useful, but 1290921014SLuciano Coelho * WITHOUT ANY WARRANTY; without even the implied warranty of 1390921014SLuciano Coelho * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1490921014SLuciano Coelho * General Public License for more details. 1590921014SLuciano Coelho * 1690921014SLuciano Coelho * You should have received a copy of the GNU General Public License 1790921014SLuciano Coelho * along with this program; if not, write to the Free Software 1890921014SLuciano Coelho * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 1990921014SLuciano Coelho * 02110-1301 USA 2090921014SLuciano Coelho * 2190921014SLuciano Coelho */ 2290921014SLuciano Coelho 2390921014SLuciano Coelho #ifndef __WL1251_RX_H__ 2490921014SLuciano Coelho #define __WL1251_RX_H__ 2590921014SLuciano Coelho 2690921014SLuciano Coelho #include <linux/bitops.h> 2790921014SLuciano Coelho 2890921014SLuciano Coelho #include "wl1251.h" 2990921014SLuciano Coelho 3090921014SLuciano Coelho /* 3190921014SLuciano Coelho * RX PATH 3290921014SLuciano Coelho * 3390921014SLuciano Coelho * The Rx path uses a double buffer and an rx_contro structure, each located 3490921014SLuciano Coelho * at a fixed address in the device memory. The host keeps track of which 3590921014SLuciano Coelho * buffer is available and alternates between them on a per packet basis. 3690921014SLuciano Coelho * The size of each of the two buffers is large enough to hold the longest 3790921014SLuciano Coelho * 802.3 packet. 3890921014SLuciano Coelho * The RX path goes like that: 3990921014SLuciano Coelho * 1) The target generates an interrupt each time a new packet is received. 4090921014SLuciano Coelho * There are 2 RX interrupts, one for each buffer. 4190921014SLuciano Coelho * 2) The host reads the received packet from one of the double buffers. 4290921014SLuciano Coelho * 3) The host triggers a target interrupt. 4390921014SLuciano Coelho * 4) The target prepares the next RX packet. 4490921014SLuciano Coelho */ 4590921014SLuciano Coelho 4690921014SLuciano Coelho #define WL1251_RX_MAX_RSSI -30 4790921014SLuciano Coelho #define WL1251_RX_MIN_RSSI -95 4890921014SLuciano Coelho 4990921014SLuciano Coelho #define WL1251_RX_ALIGN_TO 4 5090921014SLuciano Coelho #define WL1251_RX_ALIGN(len) (((len) + WL1251_RX_ALIGN_TO - 1) & \ 5190921014SLuciano Coelho ~(WL1251_RX_ALIGN_TO - 1)) 5290921014SLuciano Coelho 5390921014SLuciano Coelho #define SHORT_PREAMBLE_BIT BIT(0) 5490921014SLuciano Coelho #define OFDM_RATE_BIT BIT(6) 5590921014SLuciano Coelho #define PBCC_RATE_BIT BIT(7) 5690921014SLuciano Coelho 5790921014SLuciano Coelho #define PLCP_HEADER_LENGTH 8 5890921014SLuciano Coelho #define RX_DESC_PACKETID_SHIFT 11 5990921014SLuciano Coelho #define RX_MAX_PACKET_ID 3 6090921014SLuciano Coelho 6190921014SLuciano Coelho #define RX_DESC_VALID_FCS 0x0001 6290921014SLuciano Coelho #define RX_DESC_MATCH_RXADDR1 0x0002 6390921014SLuciano Coelho #define RX_DESC_MCAST 0x0004 6490921014SLuciano Coelho #define RX_DESC_STAINTIM 0x0008 6590921014SLuciano Coelho #define RX_DESC_VIRTUAL_BM 0x0010 6690921014SLuciano Coelho #define RX_DESC_BCAST 0x0020 6790921014SLuciano Coelho #define RX_DESC_MATCH_SSID 0x0040 6890921014SLuciano Coelho #define RX_DESC_MATCH_BSSID 0x0080 6990921014SLuciano Coelho #define RX_DESC_ENCRYPTION_MASK 0x0300 7090921014SLuciano Coelho #define RX_DESC_MEASURMENT 0x0400 7190921014SLuciano Coelho #define RX_DESC_SEQNUM_MASK 0x1800 7290921014SLuciano Coelho #define RX_DESC_MIC_FAIL 0x2000 7390921014SLuciano Coelho #define RX_DESC_DECRYPT_FAIL 0x4000 7490921014SLuciano Coelho 7590921014SLuciano Coelho struct wl1251_rx_descriptor { 7690921014SLuciano Coelho u32 timestamp; /* In microseconds */ 7790921014SLuciano Coelho u16 length; /* Paylod length, including headers */ 7890921014SLuciano Coelho u16 flags; 7990921014SLuciano Coelho 8090921014SLuciano Coelho /* 8190921014SLuciano Coelho * 0 - 802.11 8290921014SLuciano Coelho * 1 - 802.3 8390921014SLuciano Coelho * 2 - IP 8490921014SLuciano Coelho * 3 - Raw Codec 8590921014SLuciano Coelho */ 8690921014SLuciano Coelho u8 type; 8790921014SLuciano Coelho 8890921014SLuciano Coelho /* 8990921014SLuciano Coelho * Received Rate: 9090921014SLuciano Coelho * 0x0A - 1MBPS 9190921014SLuciano Coelho * 0x14 - 2MBPS 9290921014SLuciano Coelho * 0x37 - 5_5MBPS 9390921014SLuciano Coelho * 0x0B - 6MBPS 9490921014SLuciano Coelho * 0x0F - 9MBPS 9590921014SLuciano Coelho * 0x6E - 11MBPS 9690921014SLuciano Coelho * 0x0A - 12MBPS 9790921014SLuciano Coelho * 0x0E - 18MBPS 9890921014SLuciano Coelho * 0xDC - 22MBPS 9990921014SLuciano Coelho * 0x09 - 24MBPS 10090921014SLuciano Coelho * 0x0D - 36MBPS 10190921014SLuciano Coelho * 0x08 - 48MBPS 10290921014SLuciano Coelho * 0x0C - 54MBPS 10390921014SLuciano Coelho */ 10490921014SLuciano Coelho u8 rate; 10590921014SLuciano Coelho 10690921014SLuciano Coelho u8 mod_pre; /* Modulation and preamble */ 10790921014SLuciano Coelho u8 channel; 10890921014SLuciano Coelho 10990921014SLuciano Coelho /* 11090921014SLuciano Coelho * 0 - 2.4 Ghz 11190921014SLuciano Coelho * 1 - 5 Ghz 11290921014SLuciano Coelho */ 11390921014SLuciano Coelho u8 band; 11490921014SLuciano Coelho 11590921014SLuciano Coelho s8 rssi; /* in dB */ 11690921014SLuciano Coelho u8 rcpi; /* in dB */ 11790921014SLuciano Coelho u8 snr; /* in dB */ 11890921014SLuciano Coelho } __packed; 11990921014SLuciano Coelho 12090921014SLuciano Coelho void wl1251_rx(struct wl1251 *wl); 12190921014SLuciano Coelho 12290921014SLuciano Coelho #endif 123