linux/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
<<
>>
Prefs
   1/******************************************************************************
   2 * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
   3 *
   4 * Based on the r8180 driver, which is:
   5 * Copyright 2004-2005 Andrea Merello <andrea.merello@gmail.com>, et al.
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of version 2 of the GNU General Public License as
   8 * published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13 * more details.
  14 *
  15 * The full GNU General Public License is included in this distribution in the
  16 * file called LICENSE.
  17 *
  18 * Contact Information:
  19 * wlanfae <wlanfae@realtek.com>
  20******************************************************************************/
  21
  22#ifndef _RTL_CORE_H
  23#define _RTL_CORE_H
  24
  25#include <linux/module.h>
  26#include <linux/kernel.h>
  27#include <linux/ioport.h>
  28#include <linux/sched.h>
  29#include <linux/types.h>
  30#include <linux/interrupt.h>
  31#include <linux/slab.h>
  32#include <linux/netdevice.h>
  33#include <linux/pci.h>
  34#include <linux/etherdevice.h>
  35#include <linux/delay.h>
  36#include <linux/rtnetlink.h>
  37#include <linux/wireless.h>
  38#include <linux/timer.h>
  39#include <linux/proc_fs.h>
  40#include <linux/if_arp.h>
  41#include <linux/random.h>
  42#include <linux/io.h>
  43
  44/* Need this defined before including local include files */
  45#define DRV_NAME "rtl819xE"
  46
  47#include "../rtllib.h"
  48
  49#include "../dot11d.h"
  50
  51#include "r8192E_firmware.h"
  52#include "r8192E_hw.h"
  53
  54#include "r8190P_def.h"
  55#include "r8192E_dev.h"
  56
  57#include "rtl_eeprom.h"
  58#include "rtl_ps.h"
  59#include "rtl_pci.h"
  60#include "rtl_cam.h"
  61
  62#define DRV_COPYRIGHT           \
  63        "Copyright(c) 2008 - 2010 Realsil Semiconductor Corporation"
  64#define DRV_AUTHOR  "<wlanfae@realtek.com>"
  65#define DRV_VERSION  "0014.0401.2010"
  66
  67#define IS_HARDWARE_TYPE_8192SE(_priv)          \
  68        (((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE)
  69
  70#define RTL_PCI_DEVICE(vend, dev, cfg) \
  71        .vendor = (vend), .device = (dev), \
  72        .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \
  73        .driver_data = (kernel_ulong_t)&(cfg)
  74
  75#define TOTAL_CAM_ENTRY         32
  76#define CAM_CONTENT_COUNT       8
  77
  78#define HAL_HW_PCI_REVISION_ID_8192PCIE         0x01
  79#define HAL_HW_PCI_REVISION_ID_8192SE   0x10
  80
  81#define RTL819X_DEFAULT_RF_TYPE         RF_1T2R
  82
  83#define RTLLIB_WATCH_DOG_TIME           2000
  84
  85#define MAX_DEV_ADDR_SIZE               8  /*support till 64 bit bus width OS*/
  86#define MAX_FIRMWARE_INFORMATION_SIZE   32
  87#define MAX_802_11_HEADER_LENGTH        (40 + MAX_FIRMWARE_INFORMATION_SIZE)
  88#define ENCRYPTION_MAX_OVERHEAD         128
  89#define MAX_FRAGMENT_COUNT              8
  90#define MAX_TRANSMIT_BUFFER_SIZE        \
  91        (1600 + (MAX_802_11_HEADER_LENGTH + ENCRYPTION_MAX_OVERHEAD) *  \
  92         MAX_FRAGMENT_COUNT)
  93
  94#define CMDPACKET_FRAG_SIZE (4 * (MAX_TRANSMIT_BUFFER_SIZE / 4) - 8)
  95
  96#define DEFAULT_FRAG_THRESHOLD  2342U
  97#define MIN_FRAG_THRESHOLD      256U
  98#define DEFAULT_BEACONINTERVAL  0x64U
  99
 100#define DEFAULT_RETRY_RTS       7
 101#define DEFAULT_RETRY_DATA      7
 102
 103#define PHY_RSSI_SLID_WIN_MAX                   100
 104
 105#define RTL_IOCTL_WPA_SUPPLICANT                (SIOCIWFIRSTPRIV + 30)
 106
 107#define TxBBGainTableLength                     37
 108#define CCKTxBBGainTableLength                  23
 109
 110#define CHANNEL_PLAN_LEN                        10
 111#define sCrcLng                                 4
 112
 113#define NIC_SEND_HANG_THRESHOLD_NORMAL          4
 114#define NIC_SEND_HANG_THRESHOLD_POWERSAVE       8
 115
 116#define MAX_TX_QUEUE                            9
 117
 118#define MAX_RX_QUEUE                            1
 119
 120#define MAX_RX_COUNT                            64
 121#define MAX_TX_QUEUE_COUNT                      9
 122
 123extern int hwwep;
 124
 125enum nic_t {
 126        NIC_UNKNOWN     = 0,
 127        NIC_8192E       = 1,
 128        NIC_8190P       = 2,
 129        NIC_8192SE      = 4,
 130        NIC_8192CE      = 5,
 131        NIC_8192CU      = 6,
 132        NIC_8192DE      = 7,
 133        NIC_8192DU      = 8,
 134};
 135
 136enum rt_eeprom_type {
 137        EEPROM_93C46,
 138        EEPROM_93C56,
 139};
 140
 141enum dcmg_txcmd_op {
 142        TXCMD_TXRA_HISTORY_CTRL         = 0xFF900000,
 143        TXCMD_RESET_TX_PKT_BUFF         = 0xFF900001,
 144        TXCMD_RESET_RX_PKT_BUFF         = 0xFF900002,
 145        TXCMD_SET_TX_DURATION           = 0xFF900003,
 146        TXCMD_SET_RX_RSSI               = 0xFF900004,
 147        TXCMD_SET_TX_PWR_TRACKING       = 0xFF900005,
 148        TXCMD_XXXX_CTRL,
 149};
 150
 151enum rt_rf_type_819xu {
 152        RF_TYPE_MIN = 0,
 153        RF_8225,
 154        RF_8256,
 155        RF_8258,
 156        RF_6052 = 4,
 157        RF_PSEUDO_11N = 5,
 158};
 159
 160enum rt_customer_id {
 161        RT_CID_DEFAULT    = 0,
 162        RT_CID_8187_ALPHA0      = 1,
 163        RT_CID_8187_SERCOMM_PS  = 2,
 164        RT_CID_8187_HW_LED      = 3,
 165        RT_CID_8187_NETGEAR     = 4,
 166        RT_CID_WHQL          = 5,
 167        RT_CID_819x_CAMEO       = 6,
 168        RT_CID_819x_RUNTOP      = 7,
 169        RT_CID_819x_Senao       = 8,
 170        RT_CID_TOSHIBA    = 9,
 171        RT_CID_819x_Netcore     = 10,
 172        RT_CID_Nettronix        = 11,
 173        RT_CID_DLINK        = 12,
 174        RT_CID_PRONET      = 13,
 175        RT_CID_COREGA      = 14,
 176        RT_CID_819x_ALPHA       = 15,
 177        RT_CID_819x_Sitecom     = 16,
 178        RT_CID_CCX            = 17,
 179        RT_CID_819x_Lenovo      = 18,
 180        RT_CID_819x_QMI  = 19,
 181        RT_CID_819x_Edimax_Belkin = 20,
 182        RT_CID_819x_Sercomm_Belkin = 21,
 183        RT_CID_819x_CAMEO1 = 22,
 184        RT_CID_819x_MSI = 23,
 185        RT_CID_819x_Acer = 24,
 186        RT_CID_819x_HP  = 27,
 187        RT_CID_819x_CLEVO = 28,
 188        RT_CID_819x_Arcadyan_Belkin = 29,
 189        RT_CID_819x_SAMSUNG = 30,
 190        RT_CID_819x_WNC_COREGA = 31,
 191};
 192
 193enum reset_type {
 194        RESET_TYPE_NORESET = 0x00,
 195        RESET_TYPE_NORMAL = 0x01,
 196        RESET_TYPE_SILENT = 0x02
 197};
 198
 199struct rt_stats {
 200        unsigned long rxrdu;
 201        unsigned long rxok;
 202        unsigned long rxdatacrcerr;
 203        unsigned long rxmgmtcrcerr;
 204        unsigned long rxcrcerrmin;
 205        unsigned long rxcrcerrmid;
 206        unsigned long rxcrcerrmax;
 207        unsigned long received_rate_histogram[4][32];
 208        unsigned long received_preamble_GI[2][32];
 209        unsigned long numpacket_matchbssid;
 210        unsigned long numpacket_toself;
 211        unsigned long num_process_phyinfo;
 212        unsigned long numqry_phystatus;
 213        unsigned long numqry_phystatusCCK;
 214        unsigned long numqry_phystatusHT;
 215        unsigned long received_bwtype[5];
 216        unsigned long rxoverflow;
 217        unsigned long rxint;
 218        unsigned long ints;
 219        unsigned long shints;
 220        unsigned long txoverflow;
 221        unsigned long txbeokint;
 222        unsigned long txbkokint;
 223        unsigned long txviokint;
 224        unsigned long txvookint;
 225        unsigned long txbeaconokint;
 226        unsigned long txbeaconerr;
 227        unsigned long txmanageokint;
 228        unsigned long txcmdpktokint;
 229        unsigned long txbytesmulticast;
 230        unsigned long txbytesbroadcast;
 231        unsigned long txbytesunicast;
 232        unsigned long rxbytesunicast;
 233        unsigned long txretrycount;
 234        u8      last_packet_rate;
 235        unsigned long slide_signal_strength[100];
 236        unsigned long slide_evm[100];
 237        unsigned long   slide_rssi_total;
 238        unsigned long slide_evm_total;
 239        long signal_strength;
 240        long signal_quality;
 241        long last_signal_strength_inpercent;
 242        long    recv_signal_power;
 243        u8 rx_rssi_percentage[4];
 244        u8 rx_evm_percentage[2];
 245        long rxSNRdB[4];
 246        u32 Slide_Beacon_pwdb[100];
 247        u32 Slide_Beacon_Total;
 248        u32     CurrentShowTxate;
 249};
 250
 251struct channel_access_setting {
 252        u16 SIFS_Timer;
 253        u16 DIFS_Timer;
 254        u16 SlotTimeTimer;
 255        u16 EIFS_Timer;
 256        u16 CWminIndex;
 257        u16 CWmaxIndex;
 258};
 259
 260struct init_gain {
 261        u8      xaagccore1;
 262        u8      xbagccore1;
 263        u8      xcagccore1;
 264        u8      xdagccore1;
 265        u8      cca;
 266
 267};
 268
 269struct tx_ring {
 270        u32 *desc;
 271        u8 nStuckCount;
 272        struct tx_ring *next;
 273} __packed;
 274
 275struct rtl8192_tx_ring {
 276        struct tx_desc *desc;
 277        dma_addr_t dma;
 278        unsigned int idx;
 279        unsigned int entries;
 280        struct sk_buff_head queue;
 281};
 282
 283
 284
 285struct rtl819x_ops {
 286        enum nic_t nic_type;
 287        void (*get_eeprom_size)(struct net_device *dev);
 288        void (*init_adapter_variable)(struct net_device *dev);
 289        void (*init_before_adapter_start)(struct net_device *dev);
 290        bool (*initialize_adapter)(struct net_device *dev);
 291        void (*link_change)(struct net_device *dev);
 292        void (*tx_fill_descriptor)(struct net_device *dev,
 293                                   struct tx_desc *tx_desc,
 294                                   struct cb_desc *cb_desc,
 295                                   struct sk_buff *skb);
 296        void (*tx_fill_cmd_descriptor)(struct net_device *dev,
 297                                       struct tx_desc_cmd *entry,
 298                                       struct cb_desc *cb_desc,
 299                                       struct sk_buff *skb);
 300        bool (*rx_query_status_descriptor)(struct net_device *dev,
 301                                           struct rtllib_rx_stats *stats,
 302                                           struct rx_desc *pdesc,
 303                                           struct sk_buff *skb);
 304        bool (*rx_command_packet_handler)(struct net_device *dev,
 305                                          struct sk_buff *skb,
 306                                          struct rx_desc *pdesc);
 307        void (*stop_adapter)(struct net_device *dev, bool reset);
 308        void (*update_ratr_table)(struct net_device *dev);
 309        void (*irq_enable)(struct net_device *dev);
 310        void (*irq_disable)(struct net_device *dev);
 311        void (*irq_clear)(struct net_device *dev);
 312        void (*rx_enable)(struct net_device *dev);
 313        void (*tx_enable)(struct net_device *dev);
 314        void (*interrupt_recognized)(struct net_device *dev,
 315                                     u32 *p_inta, u32 *p_intb);
 316        bool (*TxCheckStuckHandler)(struct net_device *dev);
 317        bool (*RxCheckStuckHandler)(struct net_device *dev);
 318};
 319
 320struct r8192_priv {
 321        struct pci_dev *pdev;
 322        struct pci_dev *bridge_pdev;
 323
 324        bool            bfirst_init;
 325        bool            bfirst_after_down;
 326        bool            initialized_at_probe;
 327        bool            being_init_adapter;
 328        bool            bDriverIsGoingToUnload;
 329
 330        int             irq;
 331        short   irq_enabled;
 332
 333        short   up;
 334        short   up_first_time;
 335        struct delayed_work             update_beacon_wq;
 336        struct delayed_work             watch_dog_wq;
 337        struct delayed_work             txpower_tracking_wq;
 338        struct delayed_work             rfpath_check_wq;
 339        struct delayed_work             gpio_change_rf_wq;
 340
 341        struct channel_access_setting ChannelAccessSetting;
 342
 343        struct rtl819x_ops                      *ops;
 344        struct rtllib_device                    *rtllib;
 345
 346        struct work_struct                              reset_wq;
 347
 348        struct log_int_8190 InterruptLog;
 349
 350        enum rt_customer_id CustomerID;
 351
 352
 353        enum rt_rf_type_819xu rf_chip;
 354        enum ht_channel_width CurrentChannelBW;
 355        struct bb_reg_definition PHYRegDef[4];
 356        struct rate_adaptive rate_adaptive;
 357
 358        enum acm_method AcmMethod;
 359
 360        struct rt_firmware                      *pFirmware;
 361        enum rtl819x_loopback LoopbackMode;
 362
 363        struct timer_list                       watch_dog_timer;
 364        struct timer_list                       fsync_timer;
 365        struct timer_list                       gpio_polling_timer;
 366
 367        spinlock_t                              irq_th_lock;
 368        spinlock_t                              tx_lock;
 369        spinlock_t                              rf_ps_lock;
 370        spinlock_t                              ps_lock;
 371
 372        struct sk_buff_head             skb_queue;
 373
 374        struct tasklet_struct           irq_rx_tasklet;
 375        struct tasklet_struct           irq_tx_tasklet;
 376        struct tasklet_struct           irq_prepare_beacon_tasklet;
 377
 378        struct semaphore                        wx_sem;
 379        struct semaphore                        rf_sem;
 380        struct mutex                            mutex;
 381
 382        struct rt_stats stats;
 383        struct iw_statistics                    wstats;
 384
 385        short (*rf_set_sens)(struct net_device *dev, short sens);
 386        u8 (*rf_set_chan)(struct net_device *dev, u8 ch);
 387
 388        struct rx_desc *rx_ring[MAX_RX_QUEUE];
 389        struct sk_buff  *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
 390        dma_addr_t      rx_ring_dma[MAX_RX_QUEUE];
 391        unsigned int    rx_idx[MAX_RX_QUEUE];
 392        int             rxringcount;
 393        u16             rxbuffersize;
 394
 395        u64             LastRxDescTSF;
 396
 397        u32             ReceiveConfig;
 398        u8              retry_data;
 399        u8              retry_rts;
 400        u16             rts;
 401
 402        struct rtl8192_tx_ring tx_ring[MAX_TX_QUEUE_COUNT];
 403        int              txringcount;
 404        atomic_t        tx_pending[0x10];
 405
 406        u16             ShortRetryLimit;
 407        u16             LongRetryLimit;
 408
 409        bool            bHwRadioOff;
 410        bool            blinked_ingpio;
 411        u8              polling_timer_on;
 412
 413        /**********************************************************/
 414
 415        enum card_type {
 416                PCI, MINIPCI,
 417                CARDBUS, USB
 418        } card_type;
 419
 420        struct work_struct qos_activate;
 421
 422        short   promisc;
 423
 424        short   chan;
 425        short   sens;
 426        short   max_sens;
 427
 428        u8 ScanDelay;
 429        bool ps_force;
 430
 431        u32 irq_mask[2];
 432
 433        u8 Rf_Mode;
 434        enum nic_t card_8192;
 435        u8 card_8192_version;
 436
 437        u8 rf_type;
 438        u8 IC_Cut;
 439        char nick[IW_ESSID_MAX_SIZE + 1];
 440        u8 check_roaming_cnt;
 441
 442        u32 SilentResetRxSlotIndex;
 443        u32 SilentResetRxStuckEvent[MAX_SILENT_RESET_RX_SLOT_NUM];
 444
 445        u16 basic_rate;
 446        u8 short_preamble;
 447        u8 dot11CurrentPreambleMode;
 448        u8 slot_time;
 449        u16 SifsTime;
 450
 451        bool AutoloadFailFlag;
 452
 453        short   epromtype;
 454        u16 eeprom_vid;
 455        u16 eeprom_did;
 456        u8 eeprom_CustomerID;
 457        u16 eeprom_ChannelPlan;
 458
 459        u8 EEPROMTxPowerLevelCCK[14];
 460        u8 EEPROMTxPowerLevelOFDM24G[14];
 461        u8 EEPROMRfACCKChnl1TxPwLevel[3];
 462        u8 EEPROMRfAOfdmChnlTxPwLevel[3];
 463        u8 EEPROMRfCCCKChnl1TxPwLevel[3];
 464        u8 EEPROMRfCOfdmChnlTxPwLevel[3];
 465        u16 EEPROMAntPwDiff;
 466        u8 EEPROMThermalMeter;
 467        u8 EEPROMCrystalCap;
 468
 469        u8 EEPROMLegacyHTTxPowerDiff;
 470
 471        u8 CrystalCap;
 472        u8 ThermalMeter[2];
 473
 474        u8 SwChnlInProgress;
 475        u8 SwChnlStage;
 476        u8 SwChnlStep;
 477        u8 SetBWModeInProgress;
 478
 479        u8 nCur40MhzPrimeSC;
 480
 481        u32 RfReg0Value[4];
 482        u8 NumTotalRFPath;
 483        bool brfpath_rxenable[4];
 484
 485        bool bTXPowerDataReadFromEEPORM;
 486
 487        u16 RegChannelPlan;
 488        u16 ChannelPlan;
 489
 490        bool RegRfOff;
 491        bool isRFOff;
 492        bool bInPowerSaveMode;
 493        u8 bHwRfOffAction;
 494
 495        bool RFChangeInProgress;
 496        bool SetRFPowerStateInProgress;
 497        bool bdisable_nic;
 498
 499        u8 DM_Type;
 500
 501        u8 CckPwEnl;
 502        u16 TSSI_13dBm;
 503        u32 Pwr_Track;
 504        u8 CCKPresentAttentuation_20Mdefault;
 505        u8 CCKPresentAttentuation_40Mdefault;
 506        char CCKPresentAttentuation_difference;
 507        char CCKPresentAttentuation;
 508        long undecorated_smoothed_pwdb;
 509
 510        u32 MCSTxPowerLevelOriginalOffset[6];
 511        u8 TxPowerLevelCCK[14];
 512        u8 TxPowerLevelCCK_A[14];
 513        u8 TxPowerLevelCCK_C[14];
 514        u8              TxPowerLevelOFDM24G[14];
 515        u8              TxPowerLevelOFDM24G_A[14];
 516        u8              TxPowerLevelOFDM24G_C[14];
 517        u8              LegacyHTTxPowerDiff;
 518        s8              RF_C_TxPwDiff;
 519        u8              AntennaTxPwDiff[3];
 520
 521        bool            bDynamicTxHighPower;
 522        bool            bDynamicTxLowPower;
 523        bool            bLastDTPFlag_High;
 524        bool            bLastDTPFlag_Low;
 525
 526        u8              rfa_txpowertrackingindex;
 527        u8              rfa_txpowertrackingindex_real;
 528        u8              rfa_txpowertracking_default;
 529        u8              rfc_txpowertrackingindex;
 530        u8              rfc_txpowertrackingindex_real;
 531        bool            btxpower_tracking;
 532        bool            bcck_in_ch14;
 533
 534        u8              txpower_count;
 535        bool            btxpower_trackingInit;
 536
 537        u8              OFDM_index[2];
 538        u8              CCK_index;
 539
 540        u8              Record_CCK_20Mindex;
 541        u8              Record_CCK_40Mindex;
 542
 543        struct init_gain initgain_backup;
 544        u8              DefaultInitialGain[4];
 545        bool            bis_any_nonbepkts;
 546        bool            bcurrent_turbo_EDCA;
 547        bool            bis_cur_rdlstate;
 548
 549        bool            bfsync_processing;
 550        u32             rate_record;
 551        u32             rateCountDiffRecord;
 552        u32             ContinueDiffCount;
 553        bool            bswitch_fsync;
 554        u8              framesync;
 555        u32             framesyncC34;
 556        u8              framesyncMonitor;
 557
 558        u32             reset_count;
 559
 560        enum reset_type ResetProgress;
 561        bool            bForcedSilentReset;
 562        bool            bDisableNormalResetCheck;
 563        u16             TxCounter;
 564        u16             RxCounter;
 565        bool            bResetInProgress;
 566        bool            force_reset;
 567        bool            force_lps;
 568
 569        bool            chan_forced;
 570
 571        u8              PwrDomainProtect;
 572        u8              H2CTxCmdSeq;
 573};
 574
 575extern const struct ethtool_ops rtl819x_ethtool_ops;
 576
 577u8 rtl92e_readb(struct net_device *dev, int x);
 578u32 rtl92e_readl(struct net_device *dev, int x);
 579u16 rtl92e_readw(struct net_device *dev, int x);
 580void rtl92e_writeb(struct net_device *dev, int x, u8 y);
 581void rtl92e_writew(struct net_device *dev, int x, u16 y);
 582void rtl92e_writel(struct net_device *dev, int x, u32 y);
 583
 584void force_pci_posting(struct net_device *dev);
 585
 586void rtl92e_rx_enable(struct net_device *);
 587void rtl92e_tx_enable(struct net_device *);
 588
 589void rtl92e_hw_sleep_wq(void *data);
 590void rtl92e_commit(struct net_device *dev);
 591
 592void rtl92e_check_rfctrl_gpio_timer(unsigned long data);
 593
 594void rtl92e_hw_wakeup_wq(void *data);
 595
 596void rtl92e_reset_desc_ring(struct net_device *dev);
 597void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode);
 598void rtl92e_irq_enable(struct net_device *dev);
 599void rtl92e_config_rate(struct net_device *dev, u16 *rate_config);
 600void rtl92e_irq_disable(struct net_device *dev);
 601
 602void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
 603                                    struct rtllib_rx_stats *stats);
 604long rtl92e_translate_to_dbm(struct r8192_priv *priv, u8 signal_strength_index);
 605void rtl92e_update_rx_statistics(struct r8192_priv *priv,
 606                                 struct rtllib_rx_stats *pprevious_stats);
 607u8 rtl92e_evm_db_to_percent(char value);
 608u8 rtl92e_rx_db_to_percent(char antpower);
 609void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats,
 610                            struct rtllib_rx_stats *ptarget_stats);
 611bool rtl92e_enable_nic(struct net_device *dev);
 612bool rtl92e_disable_nic(struct net_device *dev);
 613
 614bool rtl92e_set_rf_state(struct net_device *dev,
 615                         enum rt_rf_power_state StateToSet,
 616                         RT_RF_CHANGE_SOURCE ChangeSource);
 617#endif
 618