Commit 45432371 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6: (42 commits)
  Staging: usbip: fix build warning on 64bit kernels
  Staging: me4000: remove some compiler warnings
  Staging: wbusb: fix a bunch of compiler warnings
  Staging: w35und: module init cleanup
  Staging: w35und: use gotos for error handling
  Staging: w35und: remove spinlock wrappers
  Staging: sxg: fix compiler warnings.
  Staging: sxg: fix up unused function warnings
  Staging: sxg: clean up C99 comments
  Staging: Lindent the echo driver
  Staging: SLICOSS: Free multicast list at driver exit
  Staging: PCC-ACPI: Fix all checkpatch errors
  Staging: pcc-acpi: update to latest version
  Staging: Clean up sxg driver
  Staging: remove remaining uses of __FUNCTION__
  Staging: add poch driver
  Staging: wlan-ng: fix build error if wireless networking is not enabled
  Staging: echo: remove annoying "end of function" markers
  Staging: echo: remove __cplusplus macro magic
  Staging: echo: remove dead code
  ...
parents 92fb83af 51b90540
...@@ -43,4 +43,8 @@ source "drivers/staging/echo/Kconfig" ...@@ -43,4 +43,8 @@ source "drivers/staging/echo/Kconfig"
source "drivers/staging/at76_usb/Kconfig" source "drivers/staging/at76_usb/Kconfig"
source "drivers/staging/pcc-acpi/Kconfig"
source "drivers/staging/poch/Kconfig"
endif # STAGING endif # STAGING
...@@ -13,3 +13,5 @@ obj-$(CONFIG_W35UND) += winbond/ ...@@ -13,3 +13,5 @@ obj-$(CONFIG_W35UND) += winbond/
obj-$(CONFIG_PRISM2_USB) += wlan-ng/ obj-$(CONFIG_PRISM2_USB) += wlan-ng/
obj-$(CONFIG_ECHO) += echo/ obj-$(CONFIG_ECHO) += echo/
obj-$(CONFIG_USB_ATMEL) += at76_usb/ obj-$(CONFIG_USB_ATMEL) += at76_usb/
obj-$(CONFIG_PCC_ACPI) += pcc-acpi/
obj-$(CONFIG_POCH) += poch/
...@@ -2319,9 +2319,11 @@ static int at76_iw_handler_get_scan(struct net_device *netdev, ...@@ -2319,9 +2319,11 @@ static int at76_iw_handler_get_scan(struct net_device *netdev,
if (!iwe) if (!iwe)
return -ENOMEM; return -ENOMEM;
if (priv->scan_state != SCAN_COMPLETED) if (priv->scan_state != SCAN_COMPLETED) {
/* scan not yet finished */ /* scan not yet finished */
kfree(iwe);
return -EAGAIN; return -EAGAIN;
}
spin_lock_irqsave(&priv->bss_list_spinlock, flags); spin_lock_irqsave(&priv->bss_list_spinlock, flags);
......
...@@ -30,114 +30,98 @@ ...@@ -30,114 +30,98 @@
#if !defined(_BIT_OPERATIONS_H_) #if !defined(_BIT_OPERATIONS_H_)
#define _BIT_OPERATIONS_H_ #define _BIT_OPERATIONS_H_
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
/*! \brief Find the bit position of the highest set bit in a word /*! \brief Find the bit position of the highest set bit in a word
\param bits The word to be searched \param bits The word to be searched
\return The bit number of the highest set bit, or -1 if the word is zero. */ \return The bit number of the highest set bit, or -1 if the word is zero. */
static __inline__ int top_bit(unsigned int bits) static __inline__ int top_bit(unsigned int bits)
{ {
int res; int res;
__asm__ (" xorl %[res],%[res];\n" __asm__(" xorl %[res],%[res];\n"
" decl %[res];\n" " decl %[res];\n"
" bsrl %[bits],%[res]\n" " bsrl %[bits],%[res]\n"
: [res] "=&r" (res) :[res] "=&r" (res)
: [bits] "rm" (bits)); :[bits] "rm"(bits)
return res; );
return res;
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Find the bit position of the lowest set bit in a word /*! \brief Find the bit position of the lowest set bit in a word
\param bits The word to be searched \param bits The word to be searched
\return The bit number of the lowest set bit, or -1 if the word is zero. */ \return The bit number of the lowest set bit, or -1 if the word is zero. */
static __inline__ int bottom_bit(unsigned int bits) static __inline__ int bottom_bit(unsigned int bits)
{ {
int res; int res;
__asm__ (" xorl %[res],%[res];\n" __asm__(" xorl %[res],%[res];\n"
" decl %[res];\n" " decl %[res];\n"
" bsfl %[bits],%[res]\n" " bsfl %[bits],%[res]\n"
: [res] "=&r" (res) :[res] "=&r" (res)
: [bits] "rm" (bits)); :[bits] "rm"(bits)
return res; );
return res;
} }
/*- End of function --------------------------------------------------------*/
#else #else
static __inline__ int top_bit(unsigned int bits) static __inline__ int top_bit(unsigned int bits)
{ {
int i; int i;
if (bits == 0) if (bits == 0)
return -1; return -1;
i = 0; i = 0;
if (bits & 0xFFFF0000) if (bits & 0xFFFF0000) {
{ bits &= 0xFFFF0000;
bits &= 0xFFFF0000; i += 16;
i += 16; }
} if (bits & 0xFF00FF00) {
if (bits & 0xFF00FF00) bits &= 0xFF00FF00;
{ i += 8;
bits &= 0xFF00FF00; }
i += 8; if (bits & 0xF0F0F0F0) {
} bits &= 0xF0F0F0F0;
if (bits & 0xF0F0F0F0) i += 4;
{ }
bits &= 0xF0F0F0F0; if (bits & 0xCCCCCCCC) {
i += 4; bits &= 0xCCCCCCCC;
} i += 2;
if (bits & 0xCCCCCCCC) }
{ if (bits & 0xAAAAAAAA) {
bits &= 0xCCCCCCCC; bits &= 0xAAAAAAAA;
i += 2; i += 1;
} }
if (bits & 0xAAAAAAAA) return i;
{
bits &= 0xAAAAAAAA;
i += 1;
}
return i;
} }
/*- End of function --------------------------------------------------------*/
static __inline__ int bottom_bit(unsigned int bits) static __inline__ int bottom_bit(unsigned int bits)
{ {
int i; int i;
if (bits == 0) if (bits == 0)
return -1; return -1;
i = 32; i = 32;
if (bits & 0x0000FFFF) if (bits & 0x0000FFFF) {
{ bits &= 0x0000FFFF;
bits &= 0x0000FFFF; i -= 16;
i -= 16; }
} if (bits & 0x00FF00FF) {
if (bits & 0x00FF00FF) bits &= 0x00FF00FF;
{ i -= 8;
bits &= 0x00FF00FF; }
i -= 8; if (bits & 0x0F0F0F0F) {
} bits &= 0x0F0F0F0F;
if (bits & 0x0F0F0F0F) i -= 4;
{ }
bits &= 0x0F0F0F0F; if (bits & 0x33333333) {
i -= 4; bits &= 0x33333333;
} i -= 2;
if (bits & 0x33333333) }
{ if (bits & 0x55555555) {
bits &= 0x33333333; bits &= 0x55555555;
i -= 2; i -= 1;
} }
if (bits & 0x55555555) return i;
{
bits &= 0x55555555;
i -= 1;
}
return i;
} }
/*- End of function --------------------------------------------------------*/
#endif #endif
/*! \brief Bit reverse a byte. /*! \brief Bit reverse a byte.
...@@ -146,16 +130,16 @@ static __inline__ int bottom_bit(unsigned int bits) ...@@ -146,16 +130,16 @@ static __inline__ int bottom_bit(unsigned int bits)
static __inline__ uint8_t bit_reverse8(uint8_t x) static __inline__ uint8_t bit_reverse8(uint8_t x)
{ {
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
/* If multiply is fast */ /* If multiply is fast */
return ((x*0x0802U & 0x22110U) | (x*0x8020U & 0x88440U))*0x10101U >> 16; return ((x * 0x0802U & 0x22110U) | (x * 0x8020U & 0x88440U)) *
0x10101U >> 16;
#else #else
/* If multiply is slow, but we have a barrel shifter */ /* If multiply is slow, but we have a barrel shifter */
x = (x >> 4) | (x << 4); x = (x >> 4) | (x << 4);
x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2); x = ((x & 0xCC) >> 2) | ((x & 0x33) << 2);
return ((x & 0xAA) >> 1) | ((x & 0x55) << 1); return ((x & 0xAA) >> 1) | ((x & 0x55) << 1);
#endif #endif
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Bit reverse a 16 bit word. /*! \brief Bit reverse a 16 bit word.
\param data The word to be reversed. \param data The word to be reversed.
...@@ -193,9 +177,8 @@ uint16_t make_mask16(uint16_t x); ...@@ -193,9 +177,8 @@ uint16_t make_mask16(uint16_t x);
\return The word with the single set bit. */ \return The word with the single set bit. */
static __inline__ uint32_t least_significant_one32(uint32_t x) static __inline__ uint32_t least_significant_one32(uint32_t x)
{ {
return (x & (-(int32_t) x)); return (x & (-(int32_t) x));
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Find the most significant one in a word, and return a word /*! \brief Find the most significant one in a word, and return a word
with just that bit set. with just that bit set.
...@@ -204,50 +187,42 @@ static __inline__ uint32_t least_significant_one32(uint32_t x) ...@@ -204,50 +187,42 @@ static __inline__ uint32_t least_significant_one32(uint32_t x)
static __inline__ uint32_t most_significant_one32(uint32_t x) static __inline__ uint32_t most_significant_one32(uint32_t x)
{ {
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
return 1 << top_bit(x); return 1 << top_bit(x);
#else #else
x = make_mask32(x); x = make_mask32(x);
return (x ^ (x >> 1)); return (x ^ (x >> 1));
#endif #endif
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Find the parity of a byte. /*! \brief Find the parity of a byte.
\param x The byte to be checked. \param x The byte to be checked.
\return 1 for odd, or 0 for even. */ \return 1 for odd, or 0 for even. */
static __inline__ int parity8(uint8_t x) static __inline__ int parity8(uint8_t x)
{ {
x = (x ^ (x >> 4)) & 0x0F; x = (x ^ (x >> 4)) & 0x0F;
return (0x6996 >> x) & 1; return (0x6996 >> x) & 1;
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Find the parity of a 16 bit word. /*! \brief Find the parity of a 16 bit word.
\param x The word to be checked. \param x The word to be checked.
\return 1 for odd, or 0 for even. */ \return 1 for odd, or 0 for even. */
static __inline__ int parity16(uint16_t x) static __inline__ int parity16(uint16_t x)
{ {
x ^= (x >> 8); x ^= (x >> 8);
x = (x ^ (x >> 4)) & 0x0F; x = (x ^ (x >> 4)) & 0x0F;
return (0x6996 >> x) & 1; return (0x6996 >> x) & 1;
} }
/*- End of function --------------------------------------------------------*/
/*! \brief Find the parity of a 32 bit word. /*! \brief Find the parity of a 32 bit word.
\param x The word to be checked. \param x The word to be checked.
\return 1 for odd, or 0 for even. */ \return 1 for odd, or 0 for even. */
static __inline__ int parity32(uint32_t x) static __inline__ int parity32(uint32_t x)
{ {
x ^= (x >> 16); x ^= (x >> 16);
x ^= (x >> 8); x ^= (x >> 8);
x = (x ^ (x >> 4)) & 0x0F; x = (x ^ (x >> 4)) & 0x0F;
return (0x6996 >> x) & 1; return (0x6996 >> x) & 1;
} }
/*- End of function --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif #endif
/*- End of file ------------------------------------------------------------*/ /*- End of file ------------------------------------------------------------*/
This diff is collapsed.
...@@ -118,23 +118,14 @@ a minor burden. ...@@ -118,23 +118,14 @@ a minor burden.
*/ */
#include "fir.h" #include "fir.h"
#include "oslec.h"
/* Mask bits for the adaption mode */
#define ECHO_CAN_USE_ADAPTION 0x01
#define ECHO_CAN_USE_NLP 0x02
#define ECHO_CAN_USE_CNG 0x04
#define ECHO_CAN_USE_CLIP 0x08
#define ECHO_CAN_USE_TX_HPF 0x10
#define ECHO_CAN_USE_RX_HPF 0x20
#define ECHO_CAN_DISABLE 0x40
/*! /*!
G.168 echo canceller descriptor. This defines the working state for a line G.168 echo canceller descriptor. This defines the working state for a line
echo canceller. echo canceller.
*/ */
typedef struct struct oslec_state {
{ int16_t tx, rx;
int16_t tx,rx;
int16_t clean; int16_t clean;
int16_t clean_nlp; int16_t clean_nlp;
...@@ -176,45 +167,6 @@ typedef struct ...@@ -176,45 +167,6 @@ typedef struct
/* snapshot sample of coeffs used for development */ /* snapshot sample of coeffs used for development */
int16_t *snapshot; int16_t *snapshot;
} echo_can_state_t; };
/*! Create a voice echo canceller context.
\param len The length of the canceller, in samples.
\return The new canceller context, or NULL if the canceller could not be created.
*/
echo_can_state_t *echo_can_create(int len, int adaption_mode);
/*! Free a voice echo canceller context.
\param ec The echo canceller context.
*/
void echo_can_free(echo_can_state_t *ec);
/*! Flush (reinitialise) a voice echo canceller context.
\param ec The echo canceller context.
*/
void echo_can_flush(echo_can_state_t *ec);
/*! Set the adaption mode of a voice echo canceller context.
\param ec The echo canceller context.
\param adapt The mode.
*/
void echo_can_adaption_mode(echo_can_state_t *ec, int adaption_mode);
void echo_can_snapshot(echo_can_state_t *ec);
/*! Process a sample through a voice echo canceller.
\param ec The echo canceller context.
\param tx The transmitted audio sample.
\param rx The received audio sample.
\return The clean (echo cancelled) received sample.
*/
int16_t echo_can_update(echo_can_state_t *ec, int16_t tx, int16_t rx);
/*! Process to high pass filter the tx signal.
\param ec The echo canceller context.
\param tx The transmitted auio sample.
\return The HP filtered transmit sample, send this to your D/A.
*/
int16_t echo_can_hpf_tx(echo_can_state_t *ec, int16_t tx);
#endif /* __ECHO_H */ #endif /* __ECHO_H */
This diff is collapsed.
...@@ -27,24 +27,23 @@ ...@@ -27,24 +27,23 @@
* values by ULL, lest they be truncated by the compiler) * values by ULL, lest they be truncated by the compiler)
*/ */
typedef union { typedef union {
long long q; /* Quadword (64-bit) value */ long long q; /* Quadword (64-bit) value */
unsigned long long uq; /* Unsigned Quadword */ unsigned long long uq; /* Unsigned Quadword */
int d[2]; /* 2 Doubleword (32-bit) values */ int d[2]; /* 2 Doubleword (32-bit) values */
unsigned int ud[2]; /* 2 Unsigned Doubleword */ unsigned int ud[2]; /* 2 Unsigned Doubleword */
short w[4]; /* 4 Word (16-bit) values */ short w[4]; /* 4 Word (16-bit) values */
unsigned short uw[4]; /* 4 Unsigned Word */ unsigned short uw[4]; /* 4 Unsigned Word */
char b[8]; /* 8 Byte (8-bit) values */ char b[8]; /* 8 Byte (8-bit) values */
unsigned char ub[8]; /* 8 Unsigned Byte */ unsigned char ub[8]; /* 8 Unsigned Byte */
float s[2]; /* Single-precision (32-bit) value */ float s[2]; /* Single-precision (32-bit) value */
} mmx_t; /* On an 8-byte (64-bit) boundary */ } mmx_t; /* On an 8-byte (64-bit) boundary */
/* SSE registers */ /* SSE registers */
typedef union { typedef union {
char b[16]; char b[16];
} xmm_t; } xmm_t;
#define mmx_i2r(op,imm,reg) \ #define mmx_i2r(op,imm,reg) \
__asm__ __volatile__ (#op " %0, %%" #reg \ __asm__ __volatile__ (#op " %0, %%" #reg \
: /* nothing */ \ : /* nothing */ \
...@@ -63,7 +62,6 @@ typedef union { ...@@ -63,7 +62,6 @@ typedef union {
#define mmx_r2r(op,regs,regd) \ #define mmx_r2r(op,regs,regd) \
__asm__ __volatile__ (#op " %" #regs ", %" #regd) __asm__ __volatile__ (#op " %" #regs ", %" #regd)
#define emms() __asm__ __volatile__ ("emms") #define emms() __asm__ __volatile__ ("emms")
#define movd_m2r(var,reg) mmx_m2r (movd, var, reg) #define movd_m2r(var,reg) mmx_m2r (movd, var, reg)
...@@ -192,16 +190,13 @@ typedef union { ...@@ -192,16 +190,13 @@ typedef union {
#define pxor_m2r(var,reg) mmx_m2r (pxor, var, reg) #define pxor_m2r(var,reg) mmx_m2r (pxor, var, reg)
#define pxor_r2r(regs,regd) mmx_r2r (pxor, regs, regd) #define pxor_r2r(regs,regd) mmx_r2r (pxor, regs, regd)
/* 3DNOW extensions */ /* 3DNOW extensions */
#define pavgusb_m2r(var,reg) mmx_m2r (pavgusb, var, reg) #define pavgusb_m2r(var,reg) mmx_m2r (pavgusb, var, reg)
#define pavgusb_r2r(regs,regd) mmx_r2r (pavgusb, regs, regd) #define pavgusb_r2r(regs,regd) mmx_r2r (pavgusb, regs, regd)
/* AMD MMX extensions - also available in intel SSE */ /* AMD MMX extensions - also available in intel SSE */
#define mmx_m2ri(op,mem,reg,imm) \ #define mmx_m2ri(op,mem,reg,imm) \
__asm__ __volatile__ (#op " %1, %0, %%" #reg \ __asm__ __volatile__ (#op " %1, %0, %%" #reg \
: /* nothing */ \ : /* nothing */ \
...@@ -216,7 +211,6 @@ typedef union { ...@@ -216,7 +211,6 @@ typedef union {
: /* nothing */ \ : /* nothing */ \
: "m" (mem)) : "m" (mem))
#define maskmovq(regs,maskreg) mmx_r2ri (maskmovq, regs, maskreg) #define maskmovq(regs,maskreg) mmx_r2ri (maskmovq, regs, maskreg)
#define movntq_r2m(mmreg,var) mmx_r2m (movntq, mmreg, var) #define movntq_r2m(mmreg,var) mmx_r2m (movntq, mmreg, var)
...@@ -284,5 +278,4 @@ typedef union { ...@@ -284,5 +278,4 @@ typedef union {
#define punpcklqdq_r2r(regs,regd) mmx_r2r (punpcklqdq, regs, regd) #define punpcklqdq_r2r(regs,regd) mmx_r2r (punpcklqdq, regs, regd)
#define punpckhqdq_r2r(regs,regd) mmx_r2r (punpckhqdq, regs, regd) #define punpckhqdq_r2r(regs,regd) mmx_r2r (punpckhqdq, regs, regd)
#endif /* AVCODEC_I386MMX_H */ #endif /* AVCODEC_I386MMX_H */
/*
* OSLEC - A line echo canceller. This code is being developed
* against and partially complies with G168. Using code from SpanDSP
*
* Written by Steve Underwood <steveu@coppice.org>
* and David Rowe <david_at_rowetel_dot_com>
*
* Copyright (C) 2001 Steve Underwood and 2007-2008 David Rowe
*
* All rights reserved.
*
* 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.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef __OSLEC_H
#define __OSLEC_H
/* TODO: document interface */
/* Mask bits for the adaption mode */
#define ECHO_CAN_USE_ADAPTION 0x01
#define ECHO_CAN_USE_NLP 0x02
#define ECHO_CAN_USE_CNG 0x04
#define ECHO_CAN_USE_CLIP 0x08
#define ECHO_CAN_USE_TX_HPF 0x10
#define ECHO_CAN_USE_RX_HPF 0x20
#define ECHO_CAN_DISABLE 0x40
/*!
G.168 echo canceller descriptor. This defines the working state for a line
echo canceller.
*/
struct oslec_state;
/*! Create a voice echo canceller context.
\param len The length of the canceller, in samples.
\return The new canceller context, or NULL if the canceller could not be created.
*/
struct oslec_state *oslec_create(int len, int adaption_mode);
/*! Free a voice echo canceller context.
\param ec The echo canceller context.
*/
void oslec_free(struct oslec_state *ec);
/*! Flush (reinitialise) a voice echo canceller context.
\param ec The echo canceller context.
*/
void oslec_flush(struct oslec_state *ec);
/*! Set the adaption mode of a voice echo canceller context.
\param ec The echo canceller context.
\param adapt The mode.
*/
void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
void oslec_snapshot(struct oslec_state *ec);
/*! Process a sample through a voice echo canceller.
\param ec The echo canceller context.
\param tx The transmitted audio sample.
\param rx The received audio sample.
\return The clean (echo cancelled) received sample.
*/
int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
/*! Process to high pass filter the tx signal.
\param ec The echo canceller context.
\param tx The transmitted auio sample.
\return The HP filtered transmit sample, send this to your D/A.
*/
int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
#endif /* __OSLEC_H */
...@@ -84,7 +84,6 @@ ...@@ -84,7 +84,6 @@
#include <linux/if_arp.h> #include <linux/if_arp.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/delay.h>
#include "et1310_phy.h" #include "et1310_phy.h"
#include "et1310_pm.h" #include "et1310_pm.h"
...@@ -95,7 +94,6 @@ ...@@ -95,7 +94,6 @@
#include "et131x_initpci.h" #include "et131x_initpci.h"
#include "et1310_address_map.h" #include "et1310_address_map.h"
#include "et1310_jagcore.h"
#include "et1310_tx.h" #include "et1310_tx.h"
#include "et1310_rx.h" #include "et1310_rx.h"
#include "et1310_mac.h" #include "et1310_mac.h"
......
...@@ -97,7 +97,6 @@ ...@@ -97,7 +97,6 @@
#include "et131x_isr.h" #include "et131x_isr.h"
#include "et1310_address_map.h" #include "et1310_address_map.h"
#include "et1310_jagcore.h"
#include "et1310_tx.h" #include "et1310_tx.h"
#include "et1310_rx.h" #include "et1310_rx.h"
#include "et1310_mac.h" #include "et1310_mac.h"
......
...@@ -97,7 +97,6 @@ ...@@ -97,7 +97,6 @@
#include "et131x_isr.h" #include "et131x_isr.h"
#include "et1310_address_map.h" #include "et1310_address_map.h"
#include "et1310_jagcore.h"
#include "et1310_tx.h" #include "et1310_tx.h"
#include "et1310_rx.h" #include "et1310_rx.h"
#include "et1310_mac.h" #include "et1310_mac.h"
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/version.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/sched.h> #include <linux/sched.h>
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/device.h> #include <linux/device.h>
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
* Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
*/ */
#include <linux/version.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/wait.h> #include <linux/wait.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/version.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/tuner.h> #include <media/tuner.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/version.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <media/tvaudio.h> #include <media/tvaudio.h>
......
This diff is collapsed.
This diff is collapsed.
config PCC_ACPI
tristate "Panasonic ACPI Hotkey support"
depends on ACPI
default n
---help---
This driver provides support for Panasonic hotkeys through the
ACPI interface. This works for the Panasonic R1 (N variant),
R2, R3, T2, W2, and Y2 laptops.
To compile this driver as a module, choose M here. The module
will be called pcc-acpi.
obj-$(CONFIG_PCC_ACPI) += pcc-acpi.o
TODO:
- Lindent fixes
- checkpatch.pl fixes
- verify that the acpi interface is correct
- remove /proc dependancy if needed (not sure yet.)
Please send any patches for this driver to Greg Kroah-Hartman <greg@kroah.com>
This diff is collapsed.
config POCH
tristate "Redrapids Pocket Change CardBus support"
depends on PCI && UIO
default N
---help---
Enable support for Redrapids Pocket Change CardBus devices.
obj-$(CONFIG_POCH) += poch.o
TODO:
- fix transmit overflows
- audit userspace interfaces
- get reserved major/minor if needed
Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
Vijay Kumar <vijaykumar@bravegnu.org> and Jaya Kumar <jayakumar.lkml@gmail.com>
This diff is collapsed.
/*
* User-space DMA and UIO based Redrapids Pocket Change CardBus driver
*
* Copyright 2008 Vijay Kumar <vijaykumar@bravegnu.org>
*
* Part of userspace API. Should be moved to a header file in
* include/linux for final version.
*
*/
struct poch_cbuf_header {
__s32 group_size_bytes;
__s32 group_count;
__s32 group_offsets[0];
};
struct poch_counters {
__u32 fifo_empty;
__u32 fifo_overflow;
__u32 pll_unlock;
};
#define POCH_IOC_NUM '9'
#define POCH_IOC_TRANSFER_START _IO(POCH_IOC_NUM, 0)
#define POCH_IOC_TRANSFER_STOP _IO(POCH_IOC_NUM, 1)
#define POCH_IOC_GET_COUNTERS _IOR(POCH_IOC_NUM, 2, \
struct poch_counters)
#define POCH_IOC_SYNC_GROUP_FOR_USER _IO(POCH_IOC_NUM, 3)
#define POCH_IOC_SYNC_GROUP_FOR_DEVICE _IO(POCH_IOC_NUM, 4)
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
* IS-NIC driver. * IS-NIC driver.
*/ */
#include <linux/version.h>
#define SLIC_DUMP_ENABLED 0 #define SLIC_DUMP_ENABLED 0
#define KLUDGE_FOR_4GB_BOUNDARY 1 #define KLUDGE_FOR_4GB_BOUNDARY 1
...@@ -96,17 +95,9 @@ ...@@ -96,17 +95,9 @@
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/mii.h> #include <linux/mii.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/skbuff.h>
#include <linux/string.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
...@@ -275,7 +266,6 @@ static void slic_dbg_register_trace(struct adapter *adapter, ...@@ -275,7 +266,6 @@ static void slic_dbg_register_trace(struct adapter *adapter,
card->reg_value[i], card->reg_valueh[i]); card->reg_value[i], card->reg_valueh[i]);
} }
} }
}
#endif #endif
static void slic_init_adapter(struct net_device *netdev, static void slic_init_adapter(struct net_device *netdev,
...@@ -606,6 +596,7 @@ static void __devexit slic_entry_remove(struct pci_dev *pcidev) ...@@ -606,6 +596,7 @@ static void __devexit slic_entry_remove(struct pci_dev *pcidev)
uint mmio_len = 0; uint mmio_len = 0;
struct adapter *adapter = (struct adapter *) netdev_priv(dev); struct adapter *adapter = (struct adapter *) netdev_priv(dev);
struct sliccard *card; struct sliccard *card;
struct mcast_address *mcaddr, *mlist;
ASSERT(adapter); ASSERT(adapter);
DBG_MSG("slicoss: %s ENTER dev[%p] adapter[%p]\n", __func__, dev, DBG_MSG("slicoss: %s ENTER dev[%p] adapter[%p]\n", __func__, dev,
...@@ -625,6 +616,13 @@ static void __devexit slic_entry_remove(struct pci_dev *pcidev) ...@@ -625,6 +616,13 @@ static void __devexit slic_entry_remove(struct pci_dev *pcidev)
DBG_MSG("slicoss: %s iounmap dev->base_addr[%x]\n", __func__, DBG_MSG("slicoss: %s iounmap dev->base_addr[%x]\n", __func__,
(uint) dev->base_addr); (uint) dev->base_addr);
iounmap((void __iomem *)dev->base_addr); iounmap((void __iomem *)dev->base_addr);
/* free multicast addresses */
mlist = adapter->mcastaddrs;
while (mlist) {
mcaddr = mlist;
mlist = mlist->next;
kfree(mcaddr);
}
ASSERT(adapter->card); ASSERT(adapter->card);
card = adapter->card; card = adapter->card;
ASSERT(card->adapters_allocated); ASSERT(card->adapters_allocated);
......
...@@ -7,6 +7,7 @@ TODO: ...@@ -7,6 +7,7 @@ TODO:
- remove wrappers - remove wrappers
- checkpatch.pl cleanups - checkpatch.pl cleanups
- new functionality that the card needs - new functionality that the card needs
- remove reliance on x86
Please send patches to: Please send patches to:
Greg Kroah-Hartman <gregkh@suse.de> Greg Kroah-Hartman <gregkh@suse.de>
......
This diff is collapsed.
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
#define FALSE (0) #define FALSE (0)
#define TRUE (1) #define TRUE (1)
typedef struct _LIST_ENTRY { typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *nle_flink; struct _LIST_ENTRY *nle_flink;
struct _LIST_ENTRY *nle_blink; struct _LIST_ENTRY *nle_blink;
...@@ -69,35 +68,32 @@ typedef struct _LIST_ENTRY { ...@@ -69,35 +68,32 @@ typedef struct _LIST_ENTRY {
/* These two have to be inlined since they return things. */ /* These two have to be inlined since they return things. */
static __inline PLIST_ENTRY static __inline PLIST_ENTRY RemoveHeadList(list_entry * l)
RemoveHeadList(list_entry *l)
{ {
list_entry *f; list_entry *f;
list_entry *e; list_entry *e;
e = l->nle_flink; e = l->nle_flink;
f = e->nle_flink; f = e->nle_flink;
l->nle_flink = f; l->nle_flink = f;
f->nle_blink = l; f->nle_blink = l;
return (e); return (e);
} }
static __inline PLIST_ENTRY static __inline PLIST_ENTRY RemoveTailList(list_entry * l)
RemoveTailList(list_entry *l)
{ {
list_entry *b; list_entry *b;
list_entry *e; list_entry *e;
e = l->nle_blink; e = l->nle_blink;
b = e->nle_blink; b = e->nle_blink;
l->nle_blink = b; l->nle_blink = b;
b->nle_flink = l; b->nle_flink = l;
return (e); return (e);
} }
#define InsertTailList(l, e) \ #define InsertTailList(l, e) \
do { \ do { \
list_entry *b; \ list_entry *b; \
...@@ -120,7 +116,6 @@ RemoveTailList(list_entry *l) ...@@ -120,7 +116,6 @@ RemoveTailList(list_entry *l)
(l)->nle_flink = (e); \ (l)->nle_flink = (e); \
} while (0) } while (0)
#define ATK_DEBUG 1 #define ATK_DEBUG 1
#if ATK_DEBUG #if ATK_DEBUG
...@@ -133,7 +128,6 @@ RemoveTailList(list_entry *l) ...@@ -133,7 +128,6 @@ RemoveTailList(list_entry *l)
#define SLIC_TIMESTAMP(value) #define SLIC_TIMESTAMP(value)
#endif #endif
/****************** SXG DEFINES *****************************************/ /****************** SXG DEFINES *****************************************/
#ifdef ATKDBG #ifdef ATKDBG
...@@ -150,5 +144,4 @@ RemoveTailList(list_entry *l) ...@@ -150,5 +144,4 @@ RemoveTailList(list_entry *l)
#define WRITE_REG64(a,reg,value,cpu) sxg_reg64_write((a),(&reg),(value),(cpu)) #define WRITE_REG64(a,reg,value,cpu) sxg_reg64_write((a),(&reg),(value),(cpu))
#define READ_REG(reg,value) (value) = readl((void __iomem *)(&reg)) #define READ_REG(reg,value) (value) = readl((void __iomem *)(&reg))
#endif /* _SLIC_OS_SPECIFIC_H_ */ #endif /* _SLIC_OS_SPECIFIC_H_ */
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
{ \ { \
if (!(a)) { \ if (!(a)) { \
DBG_ERROR("ASSERT() Failure: file %s, function %s line %d\n",\ DBG_ERROR("ASSERT() Failure: file %s, function %s line %d\n",\
__FILE__, __FUNCTION__, __LINE__); \ __FILE__, __func__, __LINE__); \
} \ } \
} }
#endif #endif
......
This diff is collapsed.
This diff is collapsed.
...@@ -34,7 +34,7 @@ static PHY_UCODE PhyUcode[] = { ...@@ -34,7 +34,7 @@ static PHY_UCODE PhyUcode[] = {
*/ */
/* Addr, Data */ /* Addr, Data */
{0xc017, 0xfeb0}, /* flip RX_LOS polarity (mandatory */ {0xc017, 0xfeb0}, /* flip RX_LOS polarity (mandatory */
/* patch for SFP+ applications) */ /* patch for SFP+ applications) */
{0xC001, 0x0428}, /* flip RX serial polarity */ {0xC001, 0x0428}, /* flip RX serial polarity */
{0xc013, 0xf341}, /* invert lxmit clock (mandatory patch) */ {0xc013, 0xf341}, /* invert lxmit clock (mandatory patch) */
...@@ -43,7 +43,7 @@ static PHY_UCODE PhyUcode[] = { ...@@ -43,7 +43,7 @@ static PHY_UCODE PhyUcode[] = {
{0xc210, 0x8000}, /* reset datapath (mandatory patch) */ {0xc210, 0x8000}, /* reset datapath (mandatory patch) */
{0xc210, 0x0000}, /* reset datapath (mandatory patch) */ {0xc210, 0x0000}, /* reset datapath (mandatory patch) */
{0x0000, 0x0032}, /* wait for 50ms for datapath reset to */ {0x0000, 0x0032}, /* wait for 50ms for datapath reset to */
/* complete. (mandatory patch) */ /* complete. (mandatory patch) */
/* Configure the LED's */ /* Configure the LED's */
{0xc214, 0x0099}, /* configure the LED drivers */ {0xc214, 0x0099}, /* configure the LED drivers */
...@@ -52,15 +52,15 @@ static PHY_UCODE PhyUcode[] = { ...@@ -52,15 +52,15 @@ static PHY_UCODE PhyUcode[] = {
/* Transceiver-specific MDIO Patches: */ /* Transceiver-specific MDIO Patches: */
{0xc010, 0x448a}, /* (bit 14) mask out high BER input from the */ {0xc010, 0x448a}, /* (bit 14) mask out high BER input from the */
/* LOS signal in 1.000A */ /* LOS signal in 1.000A */
/* (mandatory patch for SR code)*/ /* (mandatory patch for SR code) */
{0xc003, 0x0181}, /* (bit 7) enable the CDR inc setting in */ {0xc003, 0x0181}, /* (bit 7) enable the CDR inc setting in */
/* 1.C005 (mandatory patch for SR code) */ /* 1.C005 (mandatory patch for SR code) */
/* Transceiver-specific Microcontroller Initialization: */ /* Transceiver-specific Microcontroller Initialization: */
{0xc04a, 0x5200}, /* activate microcontroller and pause */ {0xc04a, 0x5200}, /* activate microcontroller and pause */
{0x0000, 0x0032}, /* wait 50ms for microcontroller before */ {0x0000, 0x0032}, /* wait 50ms for microcontroller before */
/* writing in code. */ /* writing in code. */
/* code block starts here: */ /* code block starts here: */
{0xcc00, 0x2009}, {0xcc00, 0x2009},
......
...@@ -221,7 +221,7 @@ static void usbip_dump_request_type(__u8 rt) ...@@ -221,7 +221,7 @@ static void usbip_dump_request_type(__u8 rt)
static void usbip_dump_usb_ctrlrequest(struct usb_ctrlrequest *cmd) static void usbip_dump_usb_ctrlrequest(struct usb_ctrlrequest *cmd)
{ {
if (!cmd) { if (!cmd) {
printk(" %s : null pointer\n", __FUNCTION__); printk(" %s : null pointer\n", __func__);
return; return;
} }
......
...@@ -202,7 +202,7 @@ static void vhci_rx_pdu(struct usbip_device *ud) ...@@ -202,7 +202,7 @@ static void vhci_rx_pdu(struct usbip_device *ud)
ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0); ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0);
if (ret != sizeof(pdu)) { if (ret != sizeof(pdu)) {
uerr("receiving pdu failed! size is %d, should be %d\n", uerr("receiving pdu failed! size is %d, should be %d\n",
ret, sizeof(pdu)); ret, (unsigned int)sizeof(pdu));
usbip_event_add(ud, VDEV_EVENT_ERROR_TCP); usbip_event_add(ud, VDEV_EVENT_ERROR_TCP);
return; return;
} }
......
config W35UND config W35UND
tristate "Winbond driver" tristate "Winbond driver"
depends on MAC80211 && WLAN_80211 && EXPERIMENTAL && !4KSTACKS depends on MAC80211 && WLAN_80211 && USB && EXPERIMENTAL && !4KSTACKS
default n default n
---help--- ---help---
This is highly experimental driver for winbond wifi card on some Kohjinsha notebooks This is highly experimental driver for winbond wifi card on some Kohjinsha notebooks
......
...@@ -5,6 +5,7 @@ TODO: ...@@ -5,6 +5,7 @@ TODO:
- remove typedefs - remove typedefs
- remove unused ioctls - remove unused ioctls
- use cfg80211 for regulatory stuff - use cfg80211 for regulatory stuff
- fix 4k stack problems
Please send patches to Greg Kroah-Hartman <greg@kroah.com> and Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
Pavel Machek <pavel@suse.cz> Pavel Machek <pavel@suse.cz>
...@@ -24,7 +24,7 @@ void DesiredRate2InfoElement(PWB32_ADAPTER Adapter, u8 *addr, u16 *iFildOffset, ...@@ -24,7 +24,7 @@ void DesiredRate2InfoElement(PWB32_ADAPTER Adapter, u8 *addr, u16 *iFildOffset,
u8 *pBasicRateSet, u8 BasicRateCount, u8 *pBasicRateSet, u8 BasicRateCount,
u8 *pOperationRateSet, u8 OperationRateCount); u8 *pOperationRateSet, u8 OperationRateCount);
void BSSAddIBSSdata(PWB32_ADAPTER Adapter, PWB_BSSDESCRIPTION psDesData); void BSSAddIBSSdata(PWB32_ADAPTER Adapter, PWB_BSSDESCRIPTION psDesData);
unsigned char boCmpMacAddr( PUCHAR, PUCHAR ); unsigned char boCmpMacAddr( u8 *, u8 *);
unsigned char boCmpSSID(struct SSID_Element *psSSID1, struct SSID_Element *psSSID2); unsigned char boCmpSSID(struct SSID_Element *psSSID1, struct SSID_Element *psSSID2);
u16 wBSSfindSSID(PWB32_ADAPTER Adapter, struct SSID_Element *psSsid); u16 wBSSfindSSID(PWB32_ADAPTER Adapter, struct SSID_Element *psSsid);
u16 wRoamingQuery(PWB32_ADAPTER Adapter); u16 wRoamingQuery(PWB32_ADAPTER Adapter);
...@@ -42,11 +42,11 @@ void RateReSortForSRate(PWB32_ADAPTER Adapter, u8 *RateArray, u8 num); ...@@ -42,11 +42,11 @@ void RateReSortForSRate(PWB32_ADAPTER Adapter, u8 *RateArray, u8 num);
void Assemble_IE(PWB32_ADAPTER Adapter, u16 wBssIdx); void Assemble_IE(PWB32_ADAPTER Adapter, u16 wBssIdx);
void SetMaxTxRate(PWB32_ADAPTER Adapter); void SetMaxTxRate(PWB32_ADAPTER Adapter);
void CreateWpaIE(PWB32_ADAPTER Adapter, u16* iFildOffset, PUCHAR msg, struct Management_Frame* msgHeader, void CreateWpaIE(PWB32_ADAPTER Adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader,
struct Association_Request_Frame_Body* msgBody, u16 iMSindex); //added by WS 05/14/05 struct Association_Request_Frame_Body* msgBody, u16 iMSindex); //added by WS 05/14/05
#ifdef _WPA2_ #ifdef _WPA2_
void CreateRsnIE(PWB32_ADAPTER Adapter, u16* iFildOffset, PUCHAR msg, struct Management_Frame* msgHeader, void CreateRsnIE(PWB32_ADAPTER Adapter, u16* iFildOffset, u8 *msg, struct Management_Frame* msgHeader,
struct Association_Request_Frame_Body* msgBody, u16 iMSindex);//added by WS 05/14/05 struct Association_Request_Frame_Body* msgBody, u16 iMSindex);//added by WS 05/14/05
u16 SearchPmkid(PWB32_ADAPTER Adapter, struct Management_Frame* msgHeader, u16 SearchPmkid(PWB32_ADAPTER Adapter, struct Management_Frame* msgHeader,
......
...@@ -25,9 +25,9 @@ typedef struct tkip ...@@ -25,9 +25,9 @@ typedef struct tkip
s32 bytes_in_M; // # bytes in M s32 bytes_in_M; // # bytes in M
} tkip_t; } tkip_t;
//void _append_data( PUCHAR pData, u16 size, tkip_t *p ); //void _append_data( u8 *pData, u16 size, tkip_t *p );
void Mds_MicGet( void* Adapter, void* pRxLayer1, PUCHAR pKey, PUCHAR pMic ); void Mds_MicGet( void* Adapter, void* pRxLayer1, u8 *pKey, u8 *pMic );
void Mds_MicFill( void* Adapter, void* pDes, PUCHAR XmitBufAddress ); void Mds_MicFill( void* Adapter, void* pDes, u8 *XmitBufAddress );
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment