1a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/****************************************************************************** 2a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 3a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 4a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 5a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * This program is free software; you can redistribute it and/or modify it 6a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * under the terms of version 2 of the GNU General Public License as 7a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * published by the Free Software Foundation. 8a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 9a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 10a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * more details. 13a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 14a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * You should have received a copy of the GNU General Public License along with 15a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * this program; if not, write to the Free Software Foundation, Inc., 16a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 18a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 19a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ******************************************************************************/ 20a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#ifndef __BASIC_TYPES_H__ 21a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define __BASIC_TYPES_H__ 22a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 23a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define SUCCESS 0 24a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define FAIL (-1) 25a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 26a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#include <linux/types.h> 27a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define NDIS_OID uint 28a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 29a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Fingertypedef void (*proc_t)(void *); 30a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 31a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define FIELD_OFFSET(s, field) ((ssize_t)&((s *)(0))->field) 32a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 33a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define MEM_ALIGNMENT_OFFSET (sizeof(size_t)) 34a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define MEM_ALIGNMENT_PADDING (sizeof(size_t) - 1) 35a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 36a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* port from fw */ 37a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* TODO: Macros Below are Sync from SD7-Driver. It is necessary 38a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * to check correctness */ 39a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 40a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* 41a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Call endian free function when 42a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 1. Read/write packet content. 43a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 2. Before write integer to IO. 44a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 3. After read integer from IO. 45a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger*/ 46a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 47a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Convert little data endian to host ordering */ 48a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define EF1BYTE(_val) \ 49a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ((u8)(_val)) 50a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define EF2BYTE(_val) \ 51a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (le16_to_cpu(_val)) 52a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define EF4BYTE(_val) \ 53a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (le32_to_cpu(_val)) 54a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 55a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Read data from memory */ 56a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define READEF1BYTE(_ptr) \ 57a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger EF1BYTE(*((u8 *)(_ptr))) 58a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Read le16 data from memory and convert to host ordering */ 59a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define READEF2BYTE(_ptr) \ 60a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger EF2BYTE(*(_ptr)) 61a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define READEF4BYTE(_ptr) \ 62a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger EF4BYTE(*(_ptr)) 63a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 64a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Write data to memory */ 65a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define WRITEEF1BYTE(_ptr, _val) \ 66a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger do { \ 67a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (*((u8 *)(_ptr))) = EF1BYTE(_val) \ 68a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger } while (0) 69a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Write le data to memory in host ordering */ 70a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define WRITEEF2BYTE(_ptr, _val) \ 71a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger do { \ 72a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (*((u16 *)(_ptr))) = EF2BYTE(_val) \ 73a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger } while (0) 74a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 75a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define WRITEEF4BYTE(_ptr, _val) \ 76a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger do { \ 77a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (*((u32 *)(_ptr))) = EF2BYTE(_val) \ 78a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger } while (0) 79a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 80a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Create a bit mask 81a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Examples: 82a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_LEN_MASK_32(0) => 0x00000000 83a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_LEN_MASK_32(1) => 0x00000001 84a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_LEN_MASK_32(2) => 0x00000003 85a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_LEN_MASK_32(32) => 0xFFFFFFFF 86a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger */ 87a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_LEN_MASK_32(__bitlen) \ 88a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (0xFFFFFFFF >> (32 - (__bitlen))) 89a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_LEN_MASK_16(__bitlen) \ 90a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (0xFFFF >> (16 - (__bitlen))) 91a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_LEN_MASK_8(__bitlen) \ 92a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (0xFF >> (8 - (__bitlen))) 93a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 94a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Create an offset bit mask 95a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Examples: 96a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003 97a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000 98a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger */ 99a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen) \ 100a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (BIT_LEN_MASK_32(__bitlen) << (__bitoffset)) 101a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen) \ 102a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (BIT_LEN_MASK_16(__bitlen) << (__bitoffset)) 103a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen) \ 104a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (BIT_LEN_MASK_8(__bitlen) << (__bitoffset)) 105a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 106a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/*Description: 107a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Return 4-byte value in host byte ordering from 108a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * 4-byte pointer in little-endian system. 109a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger */ 110a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_P4BYTE_TO_HOST_4BYTE(__pstart) \ 111a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (EF4BYTE(*((__le32 *)(__pstart)))) 112a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_P2BYTE_TO_HOST_2BYTE(__pstart) \ 113a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (EF2BYTE(*((__le16 *)(__pstart)))) 114a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_P1BYTE_TO_HOST_1BYTE(__pstart) \ 115a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (EF1BYTE(*((u8 *)(__pstart)))) 116a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 117a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/*Description: 118a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry FingerTranslate subfield (continuous bits in little-endian) of 4-byte 119a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Fingervalue to host byte ordering.*/ 120a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_TO_4BYTE(__pstart, __bitoffset, __bitlen) \ 121a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 122a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (LE_P4BYTE_TO_HOST_4BYTE(__pstart) >> (__bitoffset)) & \ 123a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger BIT_LEN_MASK_32(__bitlen) \ 124a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 125a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_TO_2BYTE(__pstart, __bitoffset, __bitlen) \ 126a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 127a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (LE_P2BYTE_TO_HOST_2BYTE(__pstart) >> (__bitoffset)) & \ 128a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger BIT_LEN_MASK_16(__bitlen) \ 129a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 130a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_TO_1BYTE(__pstart, __bitoffset, __bitlen) \ 131a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 132a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (LE_P1BYTE_TO_HOST_1BYTE(__pstart) >> (__bitoffset)) & \ 133a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger BIT_LEN_MASK_8(__bitlen) \ 134a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 135a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 136a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Description: 137a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Mask subfield (continuous bits in little-endian) of 4-byte value 138a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * and return the result in 4-byte value in host byte ordering. 139a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger */ 140a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) \ 141a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 142a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_P4BYTE_TO_HOST_4BYTE(__pstart) & \ 143a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (~BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen)) \ 144a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 145a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) \ 146a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 147a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_P2BYTE_TO_HOST_2BYTE(__pstart) & \ 148a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (~BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen)) \ 149a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 150a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) \ 151a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 152a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_P1BYTE_TO_HOST_1BYTE(__pstart) & \ 153a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (~BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen)) \ 154a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 155a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 156a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Description: 157a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger * Set subfield of little-endian 4-byte value to specified value. 158a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger */ 159a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define SET_BITS_TO_LE_4BYTE(__pstart, __bitoffset, __bitlen, __val) \ 160a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger *((u32 *)(__pstart)) = \ 161a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 162a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) | \ 163a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ((((u32)__val) & BIT_LEN_MASK_32(__bitlen)) << (__bitoffset)) \ 164a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 165a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 166a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define SET_BITS_TO_LE_2BYTE(__pstart, __bitoffset, __bitlen, __val) \ 167a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger *((u16 *)(__pstart)) = \ 168a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 169a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) | \ 170a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ((((u16)__val) & BIT_LEN_MASK_16(__bitlen)) << (__bitoffset)) \ 171a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ); 172a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 173a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define SET_BITS_TO_LE_1BYTE(__pstart, __bitoffset, __bitlen, __val) \ 174a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger *((u8 *)(__pstart)) = EF1BYTE \ 175a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ( \ 176a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) | \ 177a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ((((u8)__val) & BIT_LEN_MASK_8(__bitlen)) << (__bitoffset)) \ 178a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger ) 179a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 180a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger/* Get the N-bytes aligment offset from the current length */ 181a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#define N_BYTE_ALIGMENT(__value, __aligment) ((__aligment == 1) ? \ 182a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger (__value) : (((__value + __aligment - 1) / __aligment) * __aligment)) 183a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger 184a7c947b7f3a4e120e7baadfe7a3b3675088100feLarry Finger#endif /* __BASIC_TYPES_H__ */ 185